babysor/MockingBird · critical · Exception

Model folder doesn't exist. 请将模型文件位置移动到上述位置中进行重试!

Error message

Model folder {SYN_MODELS_DIRT} doesn't exist. 请将模型文件位置移动到上述位置中进行重试!

What it means

Raised at import time of the mkgui app when the synthesizer models directory (SYN_MODELS_DIRT, typically encoder/saved_models/...) does not exist. The GUI pre-enumerates available .pt models to build Enum dropdowns; with no folder there is nothing to select, so it aborts startup. The Chinese message tells the user to move model files to the expected location.

Solutions

  1. Create the expected synthesizer models directory and place at least one .pt checkpoint in it (or a subdirectory)
  2. Train or download a pretrained synthesizer model so the folder is populated
  3. Check the SYN_MODELS_DIRT constant / config to make sure it points to the real location of your models

Example fix

# before: encoder/saved_models/synthesizer missing
mkdir -p encoder/saved_models/synthesizer
cp my_synthesizer.pt encoder/saved_models/synthesizer/
# after: app starts and prints 'Loaded synthesizer models: 1'
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path

syn_dir = Path(SYN_MODELS_DIRT)
if not syn_dir.is_dir() or not list(syn_dir.glob('**/*.pt')):
    raise SystemExit(f'No synthesizer models in {syn_dir}; download/place .pt checkpoints first')

Prevention

When it happens

Trigger: Starting the mkgui web app before any synthesizer model has been trained or downloaded into the expected models directory; or the directory constant points to a wrong/moved path.

Common situations: First-time users who haven't downloaded pretrained models; custom HP save paths; renaming/relocating the models folder after training.

Related errors


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

Appendix: source

Thrown at control/mkgui/app.py:34

# Constants
AUDIO_SAMPLES_DIR = f"data{os.sep}samples{os.sep}"
SYN_MODELS_DIRT = f"data{os.sep}ckpt{os.sep}synthesizer"
ENC_MODELS_DIRT = f"data{os.sep}ckpt{os.sep}encoder"
VOC_MODELS_DIRT = f"data{os.sep}ckpt{os.sep}vocoder"
TEMP_SOURCE_AUDIO = f"wavs{os.sep}temp_source.wav"
TEMP_RESULT_AUDIO = f"wavs{os.sep}temp_result.wav"
if not os.path.isdir("wavs"):
    os.makedirs("wavs")

# Load local sample audio as options TODO: load dataset 
if os.path.isdir(AUDIO_SAMPLES_DIR):
    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="文本内容"
    )

View on GitHub (pinned to 28dc5e14f1)