From 8b9655c51a0a9870c6191fcbfaf0fa1b28491c1c Mon Sep 17 00:00:00 2001 From: Chris Thompson Date: Mon, 14 Sep 2026 18:18:44 -0600 Subject: [PATCH] model_specs: declare every file the safetensors sources require Six safetensors packages list fewer files than their own source needs, so they install cleanly and then fail at load with missing model package file '': /... `files` is an explicit list rather than a filter -- the package manager iterates it for snapshot downloads -- so a downloader has no way to discover the rest. `optional_files` and `optional_tensors` exist for genuinely optional resources and load through add_optional_resource_map; everything in `files` and `tensors` is required and throws at package.cpp:283 when absent. chatterbox_safetensors requires 9, declared 4 index_tts2_safetensors requires 20, declared 3 omnivoice_safetensors requires 7, declared 3 qwen3_tts_1_7b_base_safetensors requires 8, declared 6 seed_vc_mlx_safetensors requires 28, declared 3 supertonic_3_safetensors requires 13, declared 3 Every file added here is already published, at exactly the path the spec declares, in the repository the package already downloads from -- so this is a declaration fix and needs no new hosting. Existing entries keep their order and the new ones follow in the order the source lists them. voxcpm2_safetensors has the same shape but is deliberately left alone: it also requires `audiovae.safetensors`, which OpenBMB/VoxCPM2 does not publish, so completing its `files` list would not make it loadable and the gap there is hosting rather than declaration. Found by checking, for every package, that each `model:`-rooted path in its format's source appears in the package's `files`. Worth having as a build-time check -- with the caveat that it has to be format-aware, since a GGUF source names the same config files and the GGUF embeds them, so a format-blind version reports three quarters of the catalogue. --- model_specs/chatterbox.json | 7 ++++++- model_specs/index_tts2.json | 20 +++++++++++++++++++- model_specs/omnivoice.json | 6 +++++- model_specs/qwen3_tts.json | 4 +++- model_specs/seed_vc.json | 27 ++++++++++++++++++++++++++- model_specs/supertonic.json | 12 +++++++++++- 6 files changed, 70 insertions(+), 6 deletions(-) diff --git a/model_specs/chatterbox.json b/model_specs/chatterbox.json index 67d9534d..57ed1728 100644 --- a/model_specs/chatterbox.json +++ b/model_specs/chatterbox.json @@ -101,7 +101,12 @@ "ve.safetensors", "t3_cfg.safetensors", "s3gen.safetensors", - "tokenizer.json" + "tokenizer.json", + "grapheme_mtl_merged_expanded_v1.json", + "Cangjie5_TC.json", + "conds.pt", + "t3_mtl23ls_v2.safetensors", + "t3_mtl23ls_v3.safetensors" ], "download": { "kind": "huggingface_snapshot", diff --git a/model_specs/index_tts2.json b/model_specs/index_tts2.json index 72c680eb..4189d2bb 100644 --- a/model_specs/index_tts2.json +++ b/model_specs/index_tts2.json @@ -96,7 +96,25 @@ "files": [ "config.yaml", "bpe.model", - "gpt.safetensors" + "gpt.safetensors", + "w2v-bert-2.0/config.json", + "w2v-bert-2.0/preprocessor_config.json", + "bigvgan/config.json", + "qwen0.6bemo4-merge/config.json", + "qwen0.6bemo4-merge/generation_config.json", + "qwen0.6bemo4-merge/tokenizer.json", + "qwen0.6bemo4-merge/tokenizer_config.json", + "qwen0.6bemo4-merge/vocab.json", + "qwen0.6bemo4-merge/merges.txt", + "s2mel.safetensors", + "feat1.safetensors", + "feat2.safetensors", + "wav2vec2bert_stats.safetensors", + "w2v-bert-2.0/model.safetensors", + "semantic_codec_model.safetensors", + "campplus.safetensors", + "bigvgan/model.safetensors", + "qwen0.6bemo4-merge/model.safetensors" ], "download": { "kind": "huggingface_snapshot", diff --git a/model_specs/omnivoice.json b/model_specs/omnivoice.json index 1f65bdb1..edbc851b 100644 --- a/model_specs/omnivoice.json +++ b/model_specs/omnivoice.json @@ -97,7 +97,11 @@ "files": [ "config.json", "model.safetensors", - "tokenizer.json" + "tokenizer.json", + "tokenizer_config.json", + "audio_tokenizer/config.json", + "audio_tokenizer/preprocessor_config.json", + "audio_tokenizer/model.safetensors" ], "download": { "kind": "huggingface_snapshot", diff --git a/model_specs/qwen3_tts.json b/model_specs/qwen3_tts.json index 22d0e6dd..fedc5e53 100644 --- a/model_specs/qwen3_tts.json +++ b/model_specs/qwen3_tts.json @@ -172,7 +172,9 @@ "model.safetensors", "speech_tokenizer/config.json", "speech_tokenizer/model.safetensors", - "tokenizer_config.json" + "tokenizer_config.json", + "vocab.json", + "merges.txt" ], "download": { "kind": "huggingface_snapshot", diff --git a/model_specs/seed_vc.json b/model_specs/seed_vc.json index 0a0bebf1..93b2d433 100644 --- a/model_specs/seed_vc.json +++ b/model_specs/seed_vc.json @@ -202,7 +202,32 @@ "files": [ "seed_vc_manifest.json", "v2/ar.safetensors", - "v2/cfm.safetensors" + "v2/cfm.safetensors", + "v2/vc_wrapper.json", + "astral/bsq32.json", + "astral/bsq2048.json", + "v1/svc.json", + "v1/whisper_bigvgan.json", + "v1/xlsr_hift.json", + "hift/config.json", + "bigvgan/v2_22khz_80band_256x/config.json", + "bigvgan/v2_44khz_128band_512x/config.json", + "whisper-small/config.json", + "hubert-large-ll60k/config.json", + "wav2vec2-xls-r-300m/config.json", + "v1/svc.safetensors", + "v1/whisper_bigvgan.safetensors", + "v1/xlsr_hift.safetensors", + "astral/bsq32.safetensors", + "astral/bsq2048.safetensors", + "campplus/model.safetensors", + "rmvpe/model.safetensors", + "hift/model.safetensors", + "bigvgan/v2_22khz_80band_256x/model.safetensors", + "bigvgan/v2_44khz_128band_512x/model.safetensors", + "whisper-small/model.safetensors", + "hubert-large-ll60k/model.safetensors", + "wav2vec2-xls-r-300m/model.safetensors" ], "download": { "kind": "huggingface_snapshot", diff --git a/model_specs/supertonic.json b/model_specs/supertonic.json index 25ddbe99..36a09c67 100644 --- a/model_specs/supertonic.json +++ b/model_specs/supertonic.json @@ -120,7 +120,17 @@ "files": [ "config/tts.json", "config/unicode_indexer.json", - "ggml/supertonic.safetensors" + "ggml/supertonic.safetensors", + "voice_styles/F1.json", + "voice_styles/F2.json", + "voice_styles/F3.json", + "voice_styles/F4.json", + "voice_styles/F5.json", + "voice_styles/M1.json", + "voice_styles/M2.json", + "voice_styles/M3.json", + "voice_styles/M4.json", + "voice_styles/M5.json" ], "download": { "kind": "huggingface_snapshot",