Nodes/MOSS-TTS 1.5/MOSS-TTS Speak
ComfyUI Node

MOSS-TTS Speak

A narrator who takes directions (MOSS-TTS Speak, no reference needed)

By eehrich·Created 2 months ago·Updated 12 days ago· 1
MOSS-TTS Speak
  • moss_model
  • audio
  • tokens_generated
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

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.

CategoryMOSS TTS 1.5

Inputs (15)

NameTypeDefaultDescription
moss_modelMOSS_MODELModel bundle produced by MOSS-TTS Load Model.
textSTRINGHello, this is a test.Text to synthesize. For silence gaps use punctuation (., --, ...) or chain a follow-up run with an empty-audio spacer.
languageCOMBOEnglishLanguage hint. Also nudges MOSS toward a language-typical base voice.
instructionSTRINGVoice 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_temperatureFLOAT1.700.1–3Sampling temperature. MOSS default is 1.7. 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. 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).
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').
text_temperatureoptFLOAT1.000.1–3Temperature 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_poptFLOAT1.000–1Nucleus (top-p) cutoff for the TEXT stream. MOSS default 1.0 (off).
text_top_koptINT501–200Top-k cutoff for the TEXT stream. MOSS default 50.

Outputs (2)

NameTypeDescription
audioAUDIOGenerated audio at 48 kHz stereo, 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.