MOSS-TTS Generate Speech
Narration with a cloned voice — reference audio optional, but that's the fun part
- mosstts_model
- audio
If the dialogue node is the pack's party trick, MossTTSGenerate is the workhorse. It runs the MOSS-TTS foundation model for single-speaker narration and voiceover - the thing you reach for when you need a stable, high-fidelity voice reading a script, not a five-way conversation. Give it text and it narrates. Give it a short reference clip too, and it zero-shot clones that voice and narrates as that voice. No fine-tuning, no training, just a 10-second sample.
How it works
Same token-based machinery as the rest of the family: text is tokenized into the audio-token space by the shared MOSS-Audio-Tokenizer codec, the model generates tokens conditioned on your prompt, and the codec decodes them back into a waveform. The zero-shot cloning path is what makes it interesting. If you wire in a reference_audio, the node encodes it to audio codes and passes them to the model's message builder as a voice reference - which is how a fresh voice can sound like your voice without any training step.
Inputs that matter
text- what to narrate. The default"The quick brown fox jumps over the lazy dog."is there for a reason; test with it before trusting your long script.reference_audio(optional) - the cloning clip. The code mixes it down to mono and resamples it to the model's sample rate automatically, so any reasonable recording works.instruction(optional) - a style hint for the narration voice, if the model you loaded supports it. It's passed through to the model; leave it empty if you get nothing useful from it.audio_temperature- default 1.0 (0.1–2.0). Narration wants consistency, so if the delivery sounds unstable or over-dramatic, ease it down toward 0.7.max_new_tokens- length cap, default 2048; raise it for longer scripts.
The output is a ComfyUI AUDIO tensor → SaveAudio (or VHS if you're scoring a video).
Which model is behind this?
Whatever you loaded with MossTTSLoadModel - either the 8B foundation model (~7GB, the quality pick) or the 1.7B MOSS-TTS-Local-Transformer (the "runs on a small card" pick). The generate node doesn't care; it just works with the moss_tts_model you hand it.
Install
ComfyUI Manager → search ComfyUI Kaola MOSS-TTS, or:
cd ComfyUI/custom_nodes
git clone https://github.com/kana112233/ComfyUI-kaola-moss-tts.git
cd ComfyUI-kaola-moss-tts
pip install -r requirements.txt
Remember the pack's two hard facts: transformers>=5.0.0 is required (a fresh Python 3.12 env is the README's recommended fix for conflicts), and models auto-download to ComfyUI/models/moss_ttsd/ on first run.
Where people get burned: a CUDA device-side assert crash, usually from fp16 instability - the node's own error handler tells you to switch the loader's precision to fp32, and it's right. And temper expectations: MOSS-TTS is new enough that the Reddit TTS crowd is still mostly talking about Chatterbox and VibeVoice, so you're an early adopter. Keep your reference clips clean and short, and the clones come out far more convincing than the model's unprompted default voice.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| mosstts_model | MOSSTTS_MODEL | Loaded MOSS-TTS model bundle. | |
| text | STRING | Hello! This is MOSS-TTS Local Transformer v1.5 running inside ComfyUI. | Text to synthesize. Inline [pause 0.5s], Pinyin, and IPA are passed through to MOSS-TTS. |
| language | COMBO | auto | Language hint. v1.5 performs best when the language is specified. |
| instruction | STRING | Optional free-form style or delivery instruction. | |
| duration_tokens | INT | 00–45000 | Optional duration target in audio tokens. 0 omits the field. MOSS runs around 12.5 tokens per second. |
| quality | STRING | Optional quality hint field exposed by the MOSS user-message schema. | |
| sound_event | STRING | Optional sound-event hint field exposed by the MOSS user-message schema. | |
| ambient_sound | STRING | Optional ambient-sound hint field exposed by the MOSS user-message schema. | |
| max_new_tokens | INT | 40961–45000 | Generation budget in audio frames. At 12.5 frames per second, 4096 is roughly 5.5 minutes. |
| do_sample | BOOLEAN | true | Use stochastic sampling. Disable for deterministic greedy decoding. |
| text_temperature | FLOAT | 1.000–2 | Sampling temperature for assistant text/audio-control tokens. |
| text_top_p | FLOAT | 1.000–1 | Nucleus sampling for assistant text/audio-control tokens. |
| text_top_k | INT | 500–4096 | Top-K sampling for assistant text/audio-control tokens. |
| audio_temperature | FLOAT | 1.700–3 | Recommended v1.5 audio sampling temperature. |
| audio_top_p | FLOAT | 0.800–1 | Recommended v1.5 nucleus sampling cutoff for audio codebooks. |
| audio_top_k | INT | 250–1024 | Recommended v1.5 Top-K cutoff for audio codebooks. |
| audio_repetition_penalty | FLOAT | 1.001–2 | Penalty for repeated acoustic code patterns. |
| seed | INT | 00–9223372036854776000 | 0 leaves sampling unseeded. Positive values make identical settings repeatable. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |