OuteTTS

August 10, 2026 ยท View on GitHub

OuteTTS 1.0 1B generates 24 kHz speech with a Llama text/audio-token model and the IBM DAC 1.5 kbps codec. The integration supports both no-reference generation and native voice cloning. For cloning, the DAC encoder turns a reference WAV into the two codec-token streams used to condition the language model; no separate encoder model or speaker-profile file is required.

OuteTTS is v1-native. model_specs/outetts.json is the single source of truth for metadata, packages, normalized options, and GGUF/safetensors resources. The runtime uses the generic spec-backed loader while retaining the previously released aligner and DAC-arena option names as internal compatibility aliases.

FieldValue
Familyoutetts
Model directorymodels/Llama-OuteTTS-1.0-1B
Tasktts, clon
Modesoffline
Languagesen, ar, zh, nl, fr, de, it, ja, ko, lt, ru, es, plus moderate-data pt, be, bn, ka, hu, lv, fa, pl, sw, ta, uk
Voice inputOptional reference WAV plus its transcript
Outputmono 24 kHz WAV

Install the default standalone GGUF package:

python tools/model_manager_v2.py install outetts_1_0_1b_q8_0 --models-root models

It can also be downloaded directly from mirek190/audio.cpp. Use Llama-OuteTTS-1.0-1B_Q8.gguf as the --model path when running the GGUF examples below.

The original safetensors plus DAC layout remains available through the deprecated manager for users who want that source layout:

python tools/model_manager_deprecated.py install outetts_1_0_1b --models-dir models

Run the safetensors package:

audiocpp_cli --task tts --family outetts \
  --model models/Llama-OuteTTS-1.0-1B \
  --backend cuda --text "Hello from OuteTTS." \
  --max-tokens 1024 --out out.wav

Clone a voice with either the safetensors package or standalone GGUF. The reference transcript must match the spoken reference audio. Around ten seconds of clean speech is recommended; the maximum accepted reference length is twenty seconds. The standalone GGUF described below contains Qwen3 Forced Aligner and activates it automatically for accurate per-word codec conditioning:

audiocpp_cli --task clon --family outetts \
  --model models/Llama-OuteTTS-1.0-1B-Q8_0/model.gguf \
  --backend cuda \
  --voice-ref reference.wav \
  --reference-text "The exact words spoken in reference.wav." \
  --request-option reference_language=en \
  --text "This sentence uses the cloned voice." \
  --max-tokens 1024 --out cloned.wav

--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.

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:

python tools/community_models/convert_outetts_dac.py \
  models/DAC.speech.v1.0/weights_24khz_1.5kbps_v1.0.pth \
  models/DAC.speech.v1.0/model.safetensors

Pack the language model, DAC, Qwen3 Forced Aligner, and sidecars into one standalone Q8 GGUF:

audiocpp_gguf \
  --input model_weights=models/Llama-OuteTTS-1.0-1B/model.safetensors \
  --input dac_weights=models/DAC.speech.v1.0/model.safetensors \
  --input aligner_weights=models/Qwen3-ForcedAligner-0.6B/model.safetensors \
  --root models/Llama-OuteTTS-1.0-1B \
  --sidecar models/DAC.speech.v1.0/config.json=dac/config.json \
  --sidecar models/Qwen3-ForcedAligner-0.6B/config.json=aligner/config.json \
  --sidecar models/Qwen3-ForcedAligner-0.6B/generation_config.json=aligner/generation_config.json \
  --sidecar models/Qwen3-ForcedAligner-0.6B/preprocessor_config.json=aligner/preprocessor_config.json \
  --sidecar models/Qwen3-ForcedAligner-0.6B/tokenizer_config.json=aligner/tokenizer_config.json \
  --sidecar models/Qwen3-ForcedAligner-0.6B/vocab.json=aligner/vocab.json \
  --sidecar models/Qwen3-ForcedAligner-0.6B/merges.txt=aligner/merges.txt \
  --output models/Llama-OuteTTS-1.0-1B-Q8_0/model.gguf \
  --type q8_0

The resulting GGUF contains all three tensor groups, the model specification, and all required sidecars. It does not need the original directories. Normal TTS does not run the embedded aligner; it is initialized only when reference cloning is requested:

audiocpp_cli --task tts --family outetts \
  --model models/Llama-OuteTTS-1.0-1B-Q8_0/model.gguf \
  --backend cuda --text "Hello from the standalone GGUF." \
  --max-tokens 1024 --out out.wav
OptionValuesDefaultMeaning
--max-tokensintegerautomaticMaximum audio-token generation length per chunk. When omitted, OuteTTS estimates a safe budget from the chunk's word and character counts. An explicit smaller cap causes additional text splitting; a chunk that unexpectedly reaches the cap is retried as smaller chunks instead of silently truncating speech.
--temperaturefloat0.4 for cloning; model default for TTSSampling temperature. Voice cloning follows the official OuteTTS default without changing temperature between words.
--top-kinteger40Top-k sampling limit.
--top-pfloat0.9Nucleus sampling limit.
--request-option min_p=<float>float0.05Minimum probability relative to the most likely token.
--repetition-penaltyfloat1.1Repetition penalty over the latest 64 tokens.
--request-option seed=<n>integernative clone: 4099; quantized clone: 42Deterministic sampling seed. The defaults were separately verified for the native and Q8 cloning paths.
--text-chunk-sizecharacters256Initial framework long-form text chunk size. Each chunk is split further when needed to fit max_tokens, generated and decoded in the same loaded session, then appended to the output WAV.
--text-chunk-modedefault, tag_aware, japanese, endlinedefaultFramework long-form text chunking mode.
--reference-texttextnoneExact transcript of --voice-ref; required for voice cloning.
--request-option reference_language=<code>language codeenLanguage used by the optional reference aligner.
--session-option outetts.weight_type=native|f32|f16|bf16|q8_0enumnativeLanguage-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.
--session-option outetts.aligner_path=<path>model pathembedded alignerOptional external Qwen3 Forced Aligner override, required only for safetensors packages and older GGUFs without the embedded aligner.

The legacy session keys outetts.aligner_model_path and outetts.dac_graph_context_mb remain accepted for backward compatibility. | --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. | | --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. |

With logging enabled, OuteTTS reports framework chunk count and token budget, per-chunk word/character counts, recommended and effective generation limits, the natural stop reason, reference-profile cache hits/evictions, Llama runtime and step-graph rebuild/reuse, released cache capacity, and timings for reference alignment, DAC encode/decode, prompt construction, generation, and the complete session request. See OuteTTS validation for the reproducible long-lived session and memory test.