{"record":{"id":"5e8930ff16ffb026","repo":"babysor/MockingBird","slug":"please-load-fre-gan-in-memory-before-using-it","errorCode":null,"errorMessage":"Please load fre-gan in memory before using it","messagePattern":"Please load fre-gan in memory before using it","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"models/vocoder/fregan/inference.py","lineNumber":63,"sourceCode":"        _device = torch.device('cpu')\n\n    generator = FreGAN(h).to(_device)\n    state_dict_g = load_checkpoint(\n        weights_fpath, _device\n    )\n    generator.load_state_dict(state_dict_g['generator'])\n    generator.eval()\n    generator.remove_weight_norm()\n\n\ndef is_loaded():\n    return generator is not None\n\n\ndef infer_waveform(mel, progress_callback=None):\n\n    if generator is None:\n        raise Exception(\"Please load fre-gan in memory before using it\")\n\n    mel = torch.FloatTensor(mel).to(_device)\n    mel = mel.unsqueeze(0)\n\n    with torch.no_grad():\n        y_g_hat = generator(mel)\n        audio = y_g_hat.squeeze()\n    audio = audio.cpu().numpy()\n\n    return audio, output_sample_rate\n\n","sourceCodeStart":45,"sourceCodeEnd":75,"githubUrl":"https://github.com/babysor/MockingBird/blob/28dc5e14f12d7c754612af2fde8e78a4b03f8616/models/vocoder/fregan/inference.py#L45-L75","documentation":"infer_waveform in models/vocoder/fregan/inference.py is module-level state-based: it requires load_model() to have been called first, which sets the module-global `generator`. If generator is None, synthesis is refused.","triggerScenarios":"Calling infer_waveform(mel) before calling fregan.inference.load_model(fpath) in the same Python process (or after a failed load).","commonSituations":"Toolbox/UI code path that skips vocoder loading; the model file path was wrong so load silently failed; calling from a fresh process/import.","solutions":["Call load_model(checkpoint_path) before infer_waveform","Verify the Fre-GAN checkpoint path exists and loads without exceptions","Check is_loaded() (returns generator is not None) before synthesizing"],"exampleFix":"# before\nimport models.vocoder.fregan.inference as fregan\nwav = fregan.infer_waveform(mel)  # raises\n\n# after\nfregan.load_model(Path('models/vocoder/fregan/checkpoint.pt'))\nwav = fregan.infer_waveform(mel)","handlingStrategy":"validation","validationCode":"from models.vocoder import fregan\nif not fregan.is_loaded():\n    fregan.load_model(Path('models/vocoder/fregan/generator.pt'))\nwav = fregan.infer_waveform(mel)","typeGuard":"def fregan_ready() -> bool:\n    from models.vocoder.fregan import inference\n    return inference.generator is not None","tryCatchPattern":"try:\n    wav = fregan.infer_waveform(mel)\nexcept Exception as e:\n    if 'load fre-gan' in str(e):\n        fregan.load_model(ckpt); wav = fregan.infer_waveform(mel)\n    else: raise","preventionTips":["Always call load_model at pipeline init before any infer_waveform","Check is_loaded() before synthesizing in long-lived UIs"],"tags":["vocoder","fregan","model-loading","state"],"backgroundTag":"model-not-loaded","analyzedSha":"28dc5e14f12d7c754612af2fde8e78a4b03f8616","analyzedAt":"2026-08-27T02:26:53.589Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}