Skip to content

Commit 9585590

Browse files
mirek190Matti Pulkkinen
authored andcommitted
Correct OuteTTS model_specs_v1 metadata (0xShug0#124)
* Update OuteTTS model spec v1 metadata * Use normalized OuteTTS session options
1 parent 085a829 commit 9585590

5 files changed

Lines changed: 16 additions & 10 deletions

File tree

docs/community_models/outetts.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ audiocpp_cli --task clon --family outetts \
4545
--max-tokens 1024 --out cloned.wav
4646
```
4747

48-
`--task tts` with the same `--voice-ref` and `--reference-text` options also enables speaker conditioning, which is useful for clients that expose one TTS route. Safetensors packages and older OuteTTS GGUFs do not contain the aligner. For those models, pass `outetts.aligner_model_path`; cloning fails clearly instead of using unreliable estimated word boundaries.
48+
`--task tts` with the same `--voice-ref` and `--reference-text` options also enables speaker conditioning, which is useful for clients that expose one TTS route. Safetensors packages and older OuteTTS GGUFs do not contain the aligner. For those models, pass `outetts.aligner_path`; cloning fails clearly instead of using unreliable estimated word boundaries.
4949

5050
The installer places `DAC.speech.v1.0` and `Qwen3-ForcedAligner-0.6B` beside the OuteTTS directory. It converts the official DAC checkpoint to a safe tensor source. To do that conversion manually:
5151

@@ -97,7 +97,10 @@ audiocpp_cli --task tts --family outetts \
9797
| `--reference-text` | text | none | Exact transcript of `--voice-ref`; required for voice cloning. |
9898
| `--request-option reference_language=<code>` | language code | `en` | Language used by the optional reference aligner. |
9999
| `--session-option outetts.weight_type=native|f32|f16|bf16|q8_0` | enum | `native` | Language-model weight storage type. For CUDA voice cloning, quantized weights remain compact in the GGUF but are expanded to F32 in VRAM to avoid generation divergence over long reference-codec prompts. Normal TTS and CPU cloning keep the selected type. |
100-
| `--session-option outetts.aligner_model_path=<path>` | model path | embedded aligner | Optional external Qwen3 Forced Aligner override, required only for safetensors packages and older GGUFs without the embedded aligner. |
100+
| `--session-option outetts.aligner_path=<path>` | model path | embedded aligner | Optional external Qwen3 Forced Aligner override, required only for safetensors packages and older GGUFs without the embedded aligner. |
101+
102+
The legacy session keys `outetts.aligner_model_path` and
103+
`outetts.dac_graph_context_mb` remain accepted for backward compatibility.
101104
| `--session-option outetts.reference_cache_slots=<n>` | integer | `1` | LRU slots for prepared reference profiles (alignment, DAC codes, and word features). Set `0` to disable reuse. |
102105
| `--session-option outetts.mem_saver=true|false` | bool | `false` | Release the reusable Llama cached-step graph after each generated chunk and release the aligner runtime after preparing a reference. Model and DAC weights stay resident; later requests rebuild released state. |
103106

docs/reports/outetts_validation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ build\windows-cuda-release\bin\outetts_warm_bench.exe `
216216
--backend cuda --threads 8 `
217217
--request-file tests\outetts\warm_bench_requests.json `
218218
--session-option outetts.weight_type=f32 `
219-
--session-option outetts.aligner_model_path=..\models\Qwen3-ForcedAligner-0.6B `
219+
--session-option outetts.aligner_path=..\models\Qwen3-ForcedAligner-0.6B `
220220
--audio-out-dir build\reference\cpp_f32_final_explicit `
221221
--log-file build\reference\cpp_f32_final_explicit.log
222222
```

model_specs_v1/outetts.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,12 @@
272272
"default": true,
273273
"format": "gguf",
274274
"precision": "q8_0",
275-
"target_directory": "Llama-OuteTTS-1.0-1B-GGUF",
275+
"target_directory": "Llama-OuteTTS-1.0-1B_Q8",
276276
"files": [
277277
"Text to audio (TTS)/Llama-OuteTTS-1.0-1B_Q8.gguf"
278278
],
279279
"strip_prefix": "Text to audio (TTS)",
280+
"description": "Standalone Q8_0 GGUF with the IBM DAC codec and Qwen3 Forced Aligner weights, tokenizers, configs, and sidecars embedded for one-file TTS and voice cloning.",
280281
"download": {
281282
"kind": "huggingface_snapshot",
282283
"repo": "mirek190/audio.cpp"

src/community_models/outetts/loader.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ runtime::ModelCliInterface cli(const OuteTTSAssets &) {
7575
"Language-model constant tensor context size in MiB."},
7676
{"outetts.dac_weight_context_mb", "n",
7777
"DAC decoder weight context size in MiB."},
78-
{"outetts.dac_graph_context_mb", "n",
79-
"DAC decoder graph context size in MiB."},
80-
{"outetts.aligner_model_path", "path",
78+
{"outetts.dac_graph_arena_mb", "n",
79+
"DAC decoder graph arena size in MiB."},
80+
{"outetts.aligner_path", "path",
8181
"Optional Qwen3 Forced Aligner override. Cloning automatically uses "
8282
"the aligner embedded in a standalone OuteTTS GGUF when present."},
8383
{"outetts.reference_cache_slots", "n",

src/community_models/outetts/session.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,8 @@ resolve_aligner_assets(const runtime::SessionOptions &options,
438438
const OuteTTSAssets &model_assets) {
439439
const auto model_path = runtime::find_option(
440440
options.options,
441-
{"outetts.aligner_model_path", "outetts.forced_aligner_model_path"});
441+
{"outetts.aligner_path", "outetts.aligner_model_path",
442+
"outetts.forced_aligner_model_path"});
442443
if (model_path.has_value()) {
443444
return engine::models::qwen3_asr::load_qwen3_asr_assets(
444445
std::filesystem::path(*model_path), "qwen3_forced_aligner");
@@ -485,7 +486,8 @@ OuteTTSSession::OuteTTSSession(runtime::TaskSpec task,
485486
{"outetts.dac_weight_context_mb"},
486487
1024ull * 1024ull * 1024ull),
487488
runtime::parse_size_mb_option(options.options,
488-
{"outetts.dac_graph_context_mb"},
489+
{"outetts.dac_graph_arena_mb",
490+
"outetts.dac_graph_context_mb"},
489491
1536ull * 1024ull * 1024ull),
490492
assets::TensorStorageType::F32),
491493
mem_saver_(mem_saver_from_options(options)),
@@ -582,7 +584,7 @@ OuteTTSVoiceProfile OuteTTSSession::prepare_voice_profile(
582584
throw std::runtime_error(
583585
"OuteTTS voice cloning requires a GGUF with an embedded Qwen3 "
584586
"Forced Aligner or --session-option "
585-
"outetts.aligner_model_path=<path>");
587+
"outetts.aligner_path=<path>");
586588
}
587589
aligner_session_ = std::make_unique<
588590
engine::models::qwen3_forced_aligner::Qwen3ForcedAlignerSession>(

0 commit comments

Comments
 (0)