MOSS-TTS Speak
A narrator who takes directions (MOSS-TTS Speak, no reference needed)
- moss_model
- audio
- tokens_generated
MOSSSpeak is the "give me a voice out of thin air" node. You hand it text, a language, and an instruction like "male, warm, elderly narrator", and out comes stereo speech - no reference clip, no API key, no account. It's the part of the MOSS-TTS 1.5 pack you reach for when you need narration on a deadline and nobody's voice is in the pipeline yet. Open TTS has gotten genuinely good at this job locally, and MOSS's angle is that you don't need to hunt down a sample to steal a voice from - you just describe one.
How the "no reference" trick works
MOSS was trained on a path where the reference is a literal "None" placeholder. When you don't supply audio, it invents a voice from language + instruction. That makes instruction your only voice-steering knob here, so spend ten seconds on it - "male, warm, elderly narrator" and "young female, cheerful, energetic" genuinely produce different characters. Leave it empty and MOSS falls back to whatever the training-data default was for that language.
Inputs that matter
moss_model- the bundle from MOSS-TTS Load Model.text- what to say. Multiline.language- one of 31. It also nudges MOSS toward a language-typical base voice, so set it explicitly rather than trusting detection.instruction- the voice description above. The one real knob.audio_temperature- default 1.7 (MOSS's own). Lower = safer and flatter, higher = more expressive and noisier. If output sounds unhinged, drop toward 1.2–1.4 before touching anything else.target_tokens- duration hint in frames; 0 = let the model decide. 375 ≈ 30 s. Pair it with the pack's Estimate Tokens node so you're not guessing.seed- same seed + same inputs = identical output, which makes retakes predictable.
Outputs: audio (stereo at the loaded model's native rate - 48 kHz on the default 1.7B) straight into SaveAudio / PreviewAudio, and tokens_generated (frames, ÷12.5 = seconds), which you can wire into a Voice Continue's previous_tokens if this clip is segment one of a longer read.
Optional things you'll eventually touch
audio_repetition_penalty (1.0 = off) is the fix for the classic autoregressive-TTS failure modes - droning, tempo freeze, looping syllables. A mild 1.05–1.15 usually kills them without flattening prosody; above ~1.3 it starts mangling legitimate repeats like "nein, nein, nein". The text_* samplers are a separate story: MOSS v1.5 is dual-stream, so text_temperature, text_top_p, and text_top_k steer the alignment/pacing channel, not the acoustics. Lowering text_temperature a notch gives steadier pacing without flattening the voice.
Install & common issues
Same pack as the rest - 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, run the Load Model node once, and the weights stream down on first execution. Two things bite people:
- Empty or whitespace-only text used to hang for minutes (MOSS never emits EOS with nothing to say). It now fails fast with a clear error instead - that's a feature, not a bug.
[pause 1.2s]markers are spoken literally. MOSS v1.5 has no pause-marker parser. For a real gap, generate two clips and splice a silence spacer between them, or use punctuation (,,--,...) to shape natural breaks.
The bundled example workflow does the sensible thing: Speak to create a voice from nothing, then feed that clip into Voice Clone to narrate the rest in the same voice.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| moss_model | MOSS_MODEL | Model bundle produced by MOSS-TTS Load Model. | |
| text | STRING | Hello, this is a test. | Text to synthesize. For silence gaps use punctuation (., --, ...) or chain a follow-up run with an empty-audio spacer. |
| language | COMBO | English | Language hint. Also nudges MOSS toward a language-typical base voice. |
| instruction | STRING | Voice description passed to MOSS's 'instruction' channel. Without a reference audio this is the only steering knob for voice character. Examples: 'male, warm, elderly narrator', 'young female, cheerful', 'deep voice, dramatic, slow'. | |
| 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. 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. |