MOSS-TTS v1.5 Voice Clone
Same Voice, Zero Training Runs
- mosstts_model
- reference_audio
- audio
- tokens_generated
If you want your voice - or a specific character's - coming out of a text box, this is the node. Voice Clone does zero-shot voice cloning: you feed it 5–15 seconds of someone talking, type new text, and it speaks that text in their voice. No fine-tuning run, no LoRA, no training data of your own. Just a reference clip and a generate button.
This is the part of the MOSS-TTS v1.5 family that's been getting real adoption outside ComfyUI - tools like the Pallaidium Blender add-on ship it specifically for zero-shot cloning - and it's the same model under Apache-2.0, so it's license-clean for local work.
How it works
The mechanism is conditioning, not memorization. The reference audio gets encoded into tokens by the MOSS audio tokenizer, and that encoding conditions the generation loop (the same Qwen3-4B backbone as Generate Speech, 48 kHz stereo on the default Local-Transformer variant). It doesn't copy the clip's audio; it captures the voice's timbre and style and applies it to whatever text you give it. That's why a clean, short reference beats a long messy one - the model wants a solid encoding of the voice, not a biography of the recording.
Inputs that matter
reference_audio- the star. AnAUDIOinput, so wire it from a load node or anywhere a waveform flows in ComfyUI. The author recommends 5–15 seconds, and that's not a suggestion you want to ignore: shorter and the voice doesn't lock in, longer and you're wasting memory (and sometimes trading fidelity for noise).text- what gets spoken in the reference voice.language- same 31-language enum as the rest of the pack. Set it explicitly; the tooltip is honest thatautounderperforms.instruction- still works here, and it's fun to combine: clone a voice and tell it "slower, softer, like reading to a child."target_tokens- duration control, same math as everywhere: 125 ≈ 10 s, 375 ≈ 30 s, 0 = model decides. Wire the Estimate Tokens node here if you need a specific length.audio_temperature(default 1.7) andaudio_repetition_penalty(default 1.0) - the acoustic knobs. If the cloned voice gets wobbly, nudge temperature down; if it starts droning on long lines, set repetition penalty to ~1.1.
Outputs are audio plus tokens_generated (frames; seconds = frames / 12.5), which you can hand forward to Continue Speech to keep the same voice going longer.
Install
Same as every node in this pack - it's one install, five nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/CloudRipple/MOSS-TTS-ComfyUI.git
python install.py
or ComfyUI Manager → search moss-tts → Install, then restart. Dependencies are lightweight (huggingface-hub, safetensors, numpy, tqdm) because torch/torchaudio/transformers come from your ComfyUI and the model code is vendored in the pack - no trust_remote_code, no transformers version war. First run downloads the weights (~9.1 GB + codec for the Local variant), so give it a minute.
Common issues
- The voice doesn't hold - reference is probably too short or too noisy. Use a clean 5–15 s clip, one speaker, no background music. Set
languageexplicitly instead ofauto. - Memory creeping up - cloning conditions on the whole reference, and prefix memory grows with audio length. Keep references in the recommended range and free the model after big renders (the pack hooks into ComfyUI's memory management, so that works normally).
- Long text turns monotone - raise
audio_repetition_penaltyto 1.05–1.15; that's the documented anti-droning band. - Flash-attn errors - set attention to
sdpaon the Load Model node. Identical quality, zero drama.
Honest note: zero-shot cloning is where open TTS got genuinely close to paid services, and MOSS-TTS v1.5 lands in that camp. It's not ElevenLabs-grade for every edge case, but it runs fully local, it's free, and it clones from one short clip. For a ComfyUI talking-head pipeline, that's the whole package.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| mosstts_model | MOSSTTS_V15_MODEL | — | |
| reference_audio | AUDIO | Voice reference (5-15 s recommended). | |
| text | STRING | This line will be spoken in the reference voice. | — |
| language | COMBO | auto | Language hint. v1.5 performs best when it is set explicitly. |
| instruction | STRING | Free-form style instruction, e.g. 'male, warm, elderly narrator'. | |
| audio_temperature | FLOAT | 1.700–3 | Acoustic sampling temperature (MOSS default 1.7). |
| audio_top_p | FLOAT | 0.800–1 | Acoustic nucleus sampling. |
| audio_top_k | INT | 250–1024 | Acoustic top-k. |
| audio_repetition_penalty | FLOAT | 1.001–2 | 1.0 = off. Mild values (1.05-1.15) suppress droning / tempo freeze. |
| text_temperature | FLOAT | 1.000–2 | Text-stream (alignment/pacing) temperature. |
| text_top_p | FLOAT | 1.000–1 | Text-stream nucleus sampling. |
| text_top_k | INT | 500–500 | Text-stream top-k. |
| target_tokens | INT | 00–45000 | Duration hint in audio frames (12.5 frames/s): 125 ≈ 10 s, 375 ≈ 30 s. 0 = model decides via EOS. Wire the Estimate Tokens node to compute it. |
| max_new_tokens | INT | 409616–45000 | Hard generation budget in frames (12.5 fps): 4096 ≈ 5.5 min cap. |
| do_sample | BOOLEAN | true | Stochastic sampling; off = greedy decode (delay variant maps this to temperature=0). |
| seed | INT | 420–2147483647 | Same seed + same inputs → identical output. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| tokens_generated | INT | — |