{"record":{"id":"efbff9acfd27a5c2","repo":"babysor/MockingBird","slug":"model-folder-ext-models-dirt-doesn-t-exist-efbff9","errorCode":null,"errorMessage":"Model folder {EXT_MODELS_DIRT} doesn't exist.","messagePattern":"Model folder (.+?) doesn't exist\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"critical","filePath":"control/mkgui/train_vc.py","lineNumber":21,"sourceCode":"from pathlib import Path\nfrom enum import Enum\nfrom typing import Any, Tuple\nimport numpy as np\nfrom utils.hparams import HpsYaml\nfrom utils.util import AttrDict\nimport torch\n\n# Constants\nEXT_MODELS_DIRT = f\"data{os.sep}ckpt{os.sep}ppg_extractor\"\nCONV_MODELS_DIRT = f\"data{os.sep}ckpt{os.sep}ppg2mel\"\nENC_MODELS_DIRT = f\"data{os.sep}ckpt{os.sep}encoder\"\n\n\nif os.path.isdir(EXT_MODELS_DIRT):    \n    extractors =  Enum('extractors', list((file.name, file) for file in Path(EXT_MODELS_DIRT).glob(\"**/*.pt\")))\n    print(\"Loaded extractor models: \" + str(len(extractors)))\nelse:\n    raise Exception(f\"Model folder {EXT_MODELS_DIRT} doesn't exist.\")\n\nif os.path.isdir(CONV_MODELS_DIRT):    \n    convertors =  Enum('convertors', list((file.name, file) for file in Path(CONV_MODELS_DIRT).glob(\"**/*.pth\")))\n    print(\"Loaded convertor models: \" + str(len(convertors)))\nelse:\n    raise Exception(f\"Model folder {CONV_MODELS_DIRT} doesn't exist.\")\n\nif os.path.isdir(ENC_MODELS_DIRT):    \n    encoders = Enum('encoders', list((file.name, file) for file in Path(ENC_MODELS_DIRT).glob(\"**/*.pt\")))\n    print(\"Loaded encoders models: \" + str(len(encoders)))\nelse:\n    raise Exception(f\"Model folder {ENC_MODELS_DIRT} doesn't exist.\")\n\nclass Model(str, Enum):\n    VC_PPG2MEL = \"ppg2mel\"\n\nclass Dataset(str, Enum):\n    AIDATATANG_200ZH = \"aidatatang_200zh\"","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/babysor/MockingBird/blob/28dc5e14f12d7c754612af2fde8e78a4b03f8616/control/mkgui/train_vc.py#L3-L39","documentation":"Import-time guard in mkgui/train_vc.py: the VC training page requires an extractor models directory (EXT_MODELS_DIRT) with .pt checkpoints for its dropdown; missing folder raises at import.","triggerScenarios":"Opening the VC training page with no extractor models directory present.","commonSituations":"No extractor pretrained model downloaded yet; models root misconfigured.","solutions":["Create the extractor models directory and add an extractor .pt checkpoint","Download pretrained VC extractor weights","Verify EXT_MODELS_DIRT in config"],"exampleFix":"# before: extractor/saved_models missing\nmkdir -p extractor/saved_models && cp extractor.pt extractor/saved_models/\n# after: 'Loaded extractor models: 1', page loads","handlingStrategy":"validation","validationCode":"ext_dir = Path(EXT_MODELS_DIRT)\nif not ext_dir.is_dir() or not list(ext_dir.glob('**/*.pt')):\n    raise SystemExit(f'Extractor models missing in {ext_dir}')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Preflight-check VC training model dirs before import","Provision pretrained extractor weights","Document required checkpoint layout"],"tags":["python","models","filesystem","mkgui","voice-conversion","training"],"backgroundTag":"missing-model-directory","analyzedSha":"28dc5e14f12d7c754612af2fde8e78a4b03f8616","analyzedAt":"2026-08-27T02:26:53.589Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}