MOSS-TTS Voice Clone
Clone a voice from one clip — no transcript, no fine-tuning
- moss_model
- reference_audio
- audio
- tokens_generated
MOSSVoiceClone is the zero-shot cloning node of the MOSS-TTS 1.5 pack - and unlike some cloning setups, it doesn't want a transcript of the reference audio, doesn't need fine-tuning, and won't make you record a calibration sentence first. You give it a reference clip, some text, and a language, and you get that text back spoken in the reference voice. This is the part of the pack people actually reach for: it turns one clean clip of a voice into unlimited lines, across all 31 languages MOSS speaks.
The one thing to unlearn
MOSS has no reference-text channel at all. A lot of cloning pipelines ask for a transcript of the reference so the model can align the voice to words; this one doesn't use one. The instruction input exists, but it's a free-form style hint ("warm and slow", "whispered"), not a description of the reference clip. This was even a real bug in an early pack version - build_user_message() got an unexpected keyword argument 'reference_text' - fixed in 0.1.1. So: bring audio, bring text, don't bring a transcript.
How it works under the hood
The node takes the ComfyUI AUDIO from your reference (any source - LoadAudio, another node's output, even the output of this pack's own Speak node), writes it to a temp WAV, and the processor encodes it into audio codes that sit in the transformer's KV cache while the new frames generate. That's also the VRAM story: reference audio costs roughly 1 GB per ~20 s of clip on top of the ~12 GB model baseline. A 2-minute reference can add several GB before generation even starts. MOSS v1.5 handles long references reliably - but you pay for them, so keep clips in the 5–15 s sweet spot.
Inputs that matter
moss_model- from the loader.reference_audio- the voice. AnyAUDIOsource works.text- the lines to speak in that voice.language- one of 31. Setting it explicitly improves prosody and pronunciation versus letting the model guess.target_tokens- duration hint; 0 = model decides. Pair it with the pack's Estimate Tokens node for a target runtime instead of guessing.seed- reproducible takes.
Outputs: audio (stereo at the model's native rate - 48 kHz on the default 1.7B) ready for SaveAudio / PreviewAudio, and tokens_generated (frames, ÷12.5 = seconds) so you can hand the exact prefix length to a Voice Continue downstream.
Install & troubleshooting
Standard pack install - Manager, search "MOSS-TTS 1.5", or:
cd ComfyUI/custom_nodes
git clone https://github.com/eehrich/ComfyUI-MOSS-TTS-1.5.git MOSS-TTS-ComfyUI
Restart, and run the Load Model node first (weights download on that first run). Realistic problems:
- Weak clone / wrong accent - usually the reference, not the model. Too short, too quiet, or noisy clips give muddy results; 5–15 s of clean, level, single-speaker audio is the fix.
- Droning or looping syllables - bump
audio_repetition_penaltyto 1.05–1.15. - Runaway length -
max_new_tokens(default 4096 ≈ 5 min) is the fuse. Whentarget_tokensis set,target_overshoot_frames(default 50 frames = 4 s) caps how far past it MOSS can drift - a real guard against the occasional hang on pathologically short text.
The pack's example workflow does the classic pattern: Speak once to invent a voice, then clone it into a multi-segment narration. That's the whole superpower - one line of audio, unlimited dialogue.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| moss_model | MOSS_MODEL | Model bundle produced by MOSS-TTS Load Model. | |
| reference_audio | AUDIO | Voice reference. Any ComfyUI AUDIO source works (LoadAudio, another node's output, etc.). Short 5-15 s clips are usually best; MOSS v1.5 also handles long references reliably. | |
| text | STRING | Hello, this is a test. | Text to synthesize in the cloned voice. For silence gaps use punctuation (., --, ...) or chain a second Voice Clone / Voice Continue run with an empty-audio spacer between them. |
| language | COMBO | English | Explicit language hint. Setting this consistently improves prosody and pronunciation vs. relying on language detection from the text. |
| instruction | STRING | Free-form style hint passed to MOSS's built-in 'instruction' channel, e.g. 'warm and slow', 'excited', 'whispered'. This is NOT a transcript of the reference audio -- MOSS has no such input. | |
| audio_temperature | FLOAT | 1.700.1–3 | Sampling temperature. MOSS default is 1.7. Lower -> more deterministic and safer, higher -> more expressive but noisier. |
| audio_top_p | FLOAT | 0.800–1 | Nucleus (top-p) sampling cutoff. |
| audio_top_k | INT | 251–200 | Top-k sampling cutoff. |
| target_tokens | INT | 00–65536 | Optional target duration hint, in audio frames. 0 = disabled (model decides via EOS). At 12.5 frames/s: 375 tokens ~30 s, 750 ~60 s, 3750 ~5 min. Chain a MOSS-TTS Estimate Tokens node to compute this from the text. |
| max_new_tokens | INT | 4096256–65536 | Safety cap on generated audio frames. MOSS runs at 12.5 frames/s, so the default 4096 caps output at ~5 min. The model stops on its own EOS token, so real output is usually much shorter. |
| seed | INT | 420–4294967295 | Random seed. Same seed + same inputs -> identical output. |
| target_overshoot_frames | INT | 500–65536 | Runaway safety cap: when target_tokens > 0, MOSS may only exceed it by this many frames. Effective max_new_tokens = min(max_new_tokens, target_tokens + target_overshoot_frames). Default 50 = 4 s slack at 12.5 fps. Prevents the 5.5-min hang MOSS occasionally does with pathologically short text. Ignored when target_tokens = 0 (auto-EOS mode). |
| audio_repetition_penaltyopt | FLOAT | 1.001–2 | Penalty on recently generated audio tokens (1.0 = off). Mild values (1.05-1.15) suppress the classic autoregressive TTS failure modes -- droning, tempo freeze, smeared or looping syllables -- while leaving normal prosody untouched (it only bites on pathological repeats). Values above ~1.3 can distort legitimately repeated sounds ('nein, nein, nein'). |
| text_temperatureopt | FLOAT | 1.000.1–3 | Temperature for the TEXT stream (alignment/pacing), NOT the acoustics. MOSS default 1.0. Lower = steadier pacing/alignment; does not flatten the voice (that's audio_temperature). |
| text_top_popt | FLOAT | 1.000–1 | Nucleus (top-p) cutoff for the TEXT stream. MOSS default 1.0 (off). |
| text_top_kopt | INT | 501–200 | Top-k cutoff for the TEXT stream. MOSS default 50. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | Generated audio at 48 kHz stereo, ready for SaveAudio / PreviewAudio. |
| tokens_generated | INT | Number of audio frames MOSS actually generated (frames, not samples). At 12.5 fps this equals duration_seconds * 12.5. |