babysor/MockingBird · critical · Exception

Model folder doesn't exist.

Error message

Model folder {VOC_MODELS_DIRT} doesn't exist.

What it means

Startup guard in mkgui/app.py for the vocoder models directory (VOC_MODELS_DIRT). The app globs '**/*gan*.pt' to list vocoders (HiFi-GAN etc.) for its dropdown; if the folder is absent the module raises at import time. Note the neighboring code prints the wrong variable (synthesizers) but the raise itself is about vocoders.

Solutions

  1. Create the vocoder models directory and place a *gan*.pt checkpoint in it (e.g. hifigan.pt)
  2. Download the pretrained vocoder weights from the project release and extract to the expected path
  3. Check VOC_MODELS_DIRT in the config points to the actual vocoder checkpoint location

Example fix

# before: vocoder/saved_models missing
mkdir -p vocoder/saved_models
cp hifigan_v1.pt vocoder/saved_models/
# after: app import succeeds, vocoders dropdown populated
Defensive patterns

Strategy: validation

Validate before calling

voc_dir = Path(VOC_MODELS_DIRT)
if not voc_dir.is_dir() or not list(voc_dir.glob('**/*gan*.pt')):
    raise SystemExit(f'Vocoder (*gan*.pt) missing in {voc_dir}')

Prevention

When it happens

Trigger: Launching the mkgui app when the vocoder models folder does not exist.

Common situations: HiFi-GAN vocoder weights not downloaded; folder moved or renamed; fresh setup without pretrained assets.

Related errors


AI-assisted analysis of babysor/MockingBird@28dc5e14f1 (2026-08-27). Data as JSON: /api/errors/87045a63a92324be. Report an issue: GitHub.

Appendix: source

Thrown at control/mkgui/app.py:46

    audio_input_selection = Enum('samples', list((file.name, file) for file in Path(AUDIO_SAMPLES_DIR).glob("*.wav")))
# Pre-Load models
if os.path.isdir(SYN_MODELS_DIRT):    
    synthesizers =  Enum('synthesizers', list((file.name, file) for file in Path(SYN_MODELS_DIRT).glob("**/*.pt")))
    print("Loaded synthesizer models: " + str(len(synthesizers)))
else:
    raise Exception(f"Model folder {SYN_MODELS_DIRT} doesn't exist. 请将模型文件位置移动到上述位置中进行重试!")

if os.path.isdir(ENC_MODELS_DIRT):    
    encoders =  Enum('encoders', list((file.name, file) for file in Path(ENC_MODELS_DIRT).glob("**/*.pt")))
    print("Loaded encoders models: " + str(len(encoders)))
else:
    raise Exception(f"Model folder {ENC_MODELS_DIRT} doesn't exist.")

if os.path.isdir(VOC_MODELS_DIRT):    
    vocoders =  Enum('vocoders', list((file.name, file) for file in Path(VOC_MODELS_DIRT).glob("**/*gan*.pt")))
    print("Loaded vocoders models: " + str(len(synthesizers)))
else:
    raise Exception(f"Model folder {VOC_MODELS_DIRT} doesn't exist.")


class Input(BaseModel):
    message: str = Field(
        ..., example="欢迎使用工具箱, 现已支持中文输入!", alias="文本内容"
    )
    local_audio_file: audio_input_selection = Field(
        ..., alias="选择语音(本地wav)",
        description="选择本地语音文件."
    )
    record_audio_file: FileContent = Field(default=None, alias="录制语音",
        description="录音.", is_recorder=True, mime_type="audio/wav")
    upload_audio_file: FileContent = Field(default=None, alias="或上传语音",
        description="拖拽或点击上传.", mime_type="audio/wav")
    encoder: encoders = Field(
        ..., alias="编码模型", 
        description="选择语音编码模型文件."
    )

View on GitHub (pinned to 28dc5e14f1)