Nodes/MOSS-TTS 1.5/MOSS-TTS Voice Clone
ComfyUI Node

MOSS-TTS Voice Clone

Clone a voice from one clip — no transcript, no fine-tuning

By eehrich·Created 3 months ago·Updated 3 days ago· 2
MOSS-TTS Voice Clone
  • moss_model
  • reference_audio
  • reference_tokens
  • audio
  • tokens_generated
  • tokens
◄textHello, this is a test.►
◄languageEnglish►
◄instruction►
◄audio_temperature1.70►
◄audio_top_p0.80►
◄audio_top_k25►
◄target_tokens0►
◄max_new_tokens4096►
◄seed42►
◄target_overshoot_frames50►
◄audio_repetition_penalty1.00►
◄text_temperature1.00►
◄text_top_p1.00►
◄text_top_k50►

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. Any AUDIO source 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_penalty to 1.05–1.15.
  • Runaway length - max_new_tokens (default 4096 ≈ 5 min) is the fuse. When target_tokens is 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.

CategoryMOSS TTS 1.5

Inputs (17)

NameTypeDefaultDescription
moss_modelMOSS_MODELModel bundle produced by MOSS-TTS Load Model.
textSTRINGHello, 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.
languageCOMBOEnglishExplicit language hint. Setting this consistently improves prosody and pronunciation vs. relying on language detection from the text.
instructionSTRINGFree-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_temperatureFLOAT1.700.1–3Sampling temperature. Default 1.7 = the 8B's own generate() default (the 1.7B's would fall back to 1.0). Lower -> more deterministic and safer, higher -> more expressive but noisier.
audio_top_pFLOAT0.800–1Nucleus (top-p) sampling cutoff.
audio_top_kINT251–200Top-k sampling cutoff.
target_tokensINT00–65536Optional 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_tokensINT4096256–65536Safety 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.
seedINT420–4294967295Random seed. Same seed + same inputs -> identical output.
target_overshoot_framesINT500–65536Runaway 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).
reference_audiooptAUDIOVoice reference. Any ComfyUI AUDIO source works (LoadAudio, another node's output, etc.). Give it at least ~10 s, 10-20 s is the sweet spot; MOSS v1.5 also handles long references reliably. TOO SHORT IS NOT A WEAKER CLONE, IT IS GIBBERISH: around 5 s the model has not enough acoustic evidence to lock onto the voice and the output is unusable. Required unless 'reference_tokens' is wired -- it is only declared optional because ComfyUI has no way to express 'required unless that other input is connected'. Ignored when reference_tokens is wired.
reference_tokensoptMOSS_TOKENSPre-encoded voice reference (MOSS audio codes). When wired this REPLACES 'reference_audio' and skips the codec encode completely -- the expensive, non-parallelising part of every cloned request. Encode the base voice ONCE with MOSS-TTS Encode Tokens (or reuse the 'tokens' output of a previous generation) and keep feeding the same tensor. Tokens are model-specific: n_vq must match the loaded model. Same length rule as reference_audio: give MOSS at least ~10 s of reference (>=125 frames). Around 5 s is NOT enough acoustic evidence and the output comes out as gibberish, not as a weaker clone.
audio_repetition_penaltyoptFLOAT1.001–2Penalty 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'). 8B: MOSS applies it to ALL codes in the sequence, the reference and the prefix included, pooled across codebooks -- with a long reference it works as a blanket push away from the cloned voice. Keep it at 1.0 there unless you hear a loop.
text_temperatureoptFLOAT1.000.1–3Temperature for the TEXT stream (alignment/pacing), NOT the acoustics. Default 1.0 = the 1.7B's own default (the 8B's generate() would use 1.5). Lower = steadier pacing/alignment; does not flatten the voice (that's audio_temperature).
text_top_poptFLOAT1.000–1Nucleus (top-p) cutoff for the TEXT stream. MOSS default 1.0 (off). Do not use 0.0: the 1.7B treats it as 'no filter', the 8B as near-greedy -- opposite results.
text_top_koptINT501–200Top-k cutoff for the TEXT stream. MOSS default 50.

Outputs (3)

NameTypeDescription
audioAUDIOGenerated audio at the model's native rate -- 48 kHz stereo on the 1.7B, 24 kHz mono on the 8B -- ready for SaveAudio / PreviewAudio.
tokens_generatedINTNumber of audio frames MOSS actually generated (frames, not samples). At 12.5 fps this equals duration_seconds * 12.5.
tokensMOSS_TOKENSAudio codes MOSS just generated, shape [frames, n_vq] at 12.5 fps (1 row = 80 ms). Feed into the next node's reference_tokens / prev_tokens (optionally through MOSS-TTS Concat Tokens) to keep the whole chain encode-free. These are the RAW emitted codes: they cover the untrimmed segment, so they include the frames removed by head_trim_frames from the AUDIO output.