Nodes/TTS Audio Suite/⚙️ MOSS-TTS Engine
ComfyUI Node

⚙️ MOSS-TTS Engine

31 languages and native multi-speaker dialogue

By diodiogod·Created about a year ago·Updated 22 days ago· 1,098
⚙️ MOSS-TTS Engine
  • speaker2_voice
  • speaker3_voice
  • speaker4_voice
  • speaker5_voice
  • TTS_engine
model_variant1.7B
multi_speaker_modeCustom Character Switching
deviceauto
languageAuto
duration_tokens0
sampler_presetModel default
temperature1.00
top_p0.95
top_k50
repetition_penalty1.10
max_new_tokens4096
chunk_minutes0
instruction
quality
sound_event
ambient_sound
n_vq_for_inference0
dtypeauto
attn_implementationauto
codec_modelMOSS-Audio-Tokenizer
local_lora_adapterNone
lora_adapter_override

MOSS-TTS is the OpenMOSS engine family, and it's the one to reach for when you want serious multilingual coverage (31 languages on the v1.5 model) or native multi-speaker dialogue - a single generation pass producing a real back-and-forth between speakers, rather than stitching separate takes together. It's a bigger, heavier engine than ChatterBox or F5 (tokenizer plus 6–18GB model depending on variant), but it buys you range and a proper conversation mode. As with every engine in the suite, this node just configures it and outputs a TTS_ENGINE for 🎤 TTS Text or 📺 TTS SRT.

How it works

MOSS is an LLM-style TTS: it tokenizes audio through a shared codec (MOSS-Audio-Tokenizer) and generates speech tokens autoregressively, which is why it handles long context and dialogue well. The model_variant dropdown is really a capability picker - the 1.7B Local Transformer for lighter work, v1.5 8B for the widest language support and more stable cloning, plus a dedicated Voice Design variant (reference-free voice creation) and a TTSD variant for native dialogue. One family, several jobs.

The multi_speaker_mode toggle is the key decision. Custom Character Switching is the standard per-character generation you use everywhere else, with full support for pause tags, per-segment parameters, and the rest. Native Multi-Speaker Dialogue hands the whole scene to the TTSD model as one request with [S1]...[S5] speaker mapping - more natural conversational flow, but with hard limits.

The inputs and outputs that matter

  • model_variant (default 1.7B) - pick your model per the above. v1.5 8B if you want the 31-language coverage and best cloning.
  • multi_speaker_mode (default Custom Character Switching) - the big fork. Native dialogue for natural conversation; Custom for everything with tags.
  • language (default Auto, 31 options) - leave on Auto to detect from text, or pin it.
  • temperature (default 1), top_p (0.95), top_k (50), repetition_penalty (1.1) - LLM sampling controls; defaults are tuned, leave them unless output rambles (raise repetition_penalty) or sounds flat.

The optional MOSS-specific prompt fields - instruction, quality, sound_event, ambient_sound - are the expressive controls (describe delivery, request ambient sound, etc.). duration_tokens and chunk_minutes handle length; speaker2_voice through speaker5_voice are wildcard inputs for supplying extra speaker references in dialogue mode. There's also early LoRA support via local_lora_adapter. Output is one TTS_engine.

Installing it

Comes with TTS Audio Suite. Easiest: ComfyUI Manager → search TTS Audio Suite → install → restart, which runs the pack's install.py and handles the dependency conflicts (NumPy, librosa, s3tokenizer) and Python 3.13. MOSS is a modern-stack engine, so it's happy in the main Transformers 5 environment. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/diodiogod/TTS-Audio-Suite.git, then python install.py from inside the folder with your ComfyUI venv active (run the script, not just a requirements pip-install). Linux: portaudio19-dev libsamplerate0-dev first. Models auto-download into ComfyUI/models/TTS/moss_tts/ on first use - and these are big (the tokenizer alone is ~8.5GB, the model 6–18GB depending on variant), so budget disk and a slow first run.

Common issues

  • Native dialogue mode hard-fails on you. By design: the README says Native Multi-Speaker Dialogue now throws an explicit error (rather than silently swapping models) if it detects pause tags, inline edit tags, per-segment [] parameter changes, or more than 5 speakers. If you need any of those, switch to Custom Character Switching and use a Local/v1.5/v1 model variant.
  • Huge download / disk pressure. The 8B variants plus the ~8.5GB tokenizer are a lot. Start with the 1.7B variant to test your graph before committing to v1.5 8B.
  • VRAM limits. These are large models; if you're on a modest GPU, the 1.7B variant is the realistic choice.
  • Expected an effect from a prompt field and got nothing. The instruction/quality/sound_event fields behave differently per variant - check the MOSS Prompt Fields guide if a field seems ignored.
CategoryTTS Audio Suite/⚙️ Engines

Inputs (26)

NameTypeDefaultDescription
model_variantCOMBO1.7BMOSS-TTS model selection. Built-in choices remain available for automatic download or local fallback. Detected model folders are also listed explicitly as local:ModelName. 1.7B: smaller local-transformer architecture. v1.5 8B: current multilingual model. v1 8B: original checkpoint. Voice Design 1.7B: MOSS-VoiceGenerator for Voice Designer only. Sound Effects 8B v1: MOSS-SoundEffect for the 🌩️ Sound Effects node only. Native Multi-Speaker Dialogue mode ignores this selector and uses MOSS-TTSD-v1.0 automatically.
multi_speaker_modeCOMBOCustom Character SwitchingCustom Character Switching uses normal MOSS-TTS per character block. Native Multi-Speaker Dialogue uses MOSS-TTSD-v1.0 with [S1]...[S5] speaker mapping in one dialogue context. Native mode hard-fails (no auto-fallback) if incompatible controls are detected: • pause tags • inline edit tags • per-segment parameter changes • more than 5 speakers Switch to Custom Character Switching and choose a standard MOSS model for those cases.
deviceCOMBOautoDevice for MOSS-TTS. CUDA is strongly recommended; CPU is very slow.
languageCOMBOAutoOptional language hint for MOSS-TTS. Auto does not run a separate language detector. It simply sends no language hint, so MOSS must infer the language from the text itself. Use an explicit language when the text is short, ambiguous, mixed-language, or when Auto guesses wrong. The 11 v1.5 additions are Cantonese, Dutch, Finnish, Hindi, Macedonian, Malay, Romanian, Swahili, Filipino/Tagalog, Thai, and Vietnamese.
duration_tokensINT00–8192Target output length hint. This is audio tokens, not text tokens. This is one of the most useful MOSS controls for pacing. It can indirectly affect pacing: • Lower values usually make speech shorter and tighter • Higher values usually make speech longer and slower-feeling This is not a true speed control. Very low values can behave oddly, so avoid extreme settings. Rough guide: • 12-13 = about 1 second • 25 = about 2 seconds • 50 = about 4 seconds • 125 = about 10 seconds Use lower values for shorter delivery, higher values for longer delivery. Set 0 to disable. If audio is getting cut off, raise max_new_tokens too.
sampler_presetCOMBOModel defaultModel default uses OpenMOSS recommended sampling parameters for the selected variant.
temperatureFLOAT1.000.1–2.5Official audio_temperature. Ignored when sampler_preset is Model default.
top_pFLOAT0.950–1Official audio_top_p. Ignored when sampler_preset is Model default.
top_kINT501–200Official audio_top_k. Ignored when sampler_preset is Model default.
repetition_penaltyFLOAT1.100.5–3Official audio_repetition_penalty. Ignored when sampler_preset is Model default.
max_new_tokensINT409664–16384Maximum generated tokens. Higher values allow longer outputs and use more VRAM/time.
chunk_minutesINT00–90Time-based chunking override for MOSS (like VibeVoice). 0: disable chunking entirely and ignore Unified chunk controls. >0: force chunking using approx 750 chars/min and ignore Unified chunk controls. Applies to both Custom Character Switching and Native Multi-Speaker Dialogue.
instructionoptSTRINGHow the whole segment should be spoken. Voice Designer uses this as the voice description when MOSS-VoiceGenerator is selected. For speech models, use this as an engine default or override it per segment with [instruction:...]. For MOSS-VoiceGenerator this field is disabled because Voice Designer supplies the voice instruction. Use short natural instructions. Examples: • Speak softly and calmly • Read like a documentary narrator • Sound excited and energetic This affects the full segment, not one exact word. Do not use <instruction:...> for MOSS. <> should stay reserved for real inline post-processing tags.
qualityoptSTRINGOverall recording or presentation quality for the whole segment. Best used as an engine default, or per segment with [quality:...]. Use short descriptive phrases. Examples: • Studio recording • Clean close-mic voice • Telephone call quality • Distant PA system Status: experimental on base MOSS-TTS in this suite. It is a real official field, but audible effect may be weak or inconsistent. This applies to the full segment. Do not use <quality:...> for MOSS. <> should stay reserved for real inline post-processing tags.
sound_eventoptSTRINGMain sound effect or vocal event for the whole segment. Best used as an engine default, or per segment with [sound_event:...]. Use short event names. Examples: • Laughter • Sigh • Breathing • Crying Status: experimental on base MOSS-TTS in this suite. It is a real official field, but audible effect may be weak or inconsistent. Important: this is not exact placement. Use this only for whole-segment conditioning. Do not use <> for MOSS sound events.
ambient_soundoptSTRINGBackground ambience for the whole segment. Best used as an engine default, or per segment with [ambient_sound:...]. Use short environment descriptions. Examples: • Rain • Crowd • Forest ambience • Office room tone Status: experimental on base MOSS-TTS in this suite. OpenMOSS publicly documents ambient-sound prompting mainly for MOSS-SoundEffect, not as a proven short-utterance TTS control. So results may be weak, absent, or unstable. This affects the full segment, not an exact point in the sentence. Important: ambience can make MOSS keep generating until it reaches the requested duration budget. If it runs too long, lower max_new_tokens or set duration_tokens. Do not use <ambient_sound:...> for MOSS. <> should stay reserved for real inline post-processing tags.
n_vq_for_inferenceoptINT00–32Local Transformer only: number of RVQ layers/codebooks for inference. 0 uses model default.
dtypeoptCOMBOautoModel precision. Auto uses bf16 on capable CUDA GPUs, fp16 on older CUDA GPUs, fp32 on CPU.
attn_implementationoptCOMBOautoAttention backend. Auto prefers FlashAttention 2 when installed and supported, otherwise SDPA/eager.
codec_modeloptCOMBOMOSS-Audio-TokenizerOfficial shared MOSS audio tokenizer required by MOSS-TTS.
speaker2_voiceopt*Voice for S2 in Native Multi-Speaker Dialogue. Connect Character Voices opt_narrator output.
speaker3_voiceopt*Voice for S3 in Native Multi-Speaker Dialogue. Connect Character Voices opt_narrator output.
speaker4_voiceopt*Voice for S4 in Native Multi-Speaker Dialogue. Connect Character Voices opt_narrator output.
speaker5_voiceopt*Voice for S5 in Native Multi-Speaker Dialogue. Connect Character Voices opt_narrator output.
local_lora_adapteroptCOMBONoneOptional local MOSS LoRA adapter discovered under models/TTS/moss_tts/loras. Supported by MOSS-TTS v1/v1.5 and experimentally by MOSS-SoundEffect v1. VoiceGenerator rejects TTS LoRAs; SoundEffect v2 is a separate engine. This expects a PEFT adapter folder, not just a raw weight file. Training should save a full adapter directory with adapter_config.json.
lora_adapter_overrideoptSTRINGAdvanced override for MOSS LoRA adapter inference. Accepts a local adapter folder path or Hugging Face repo id. Example: ToSee-Norway/MOSS-TTS-Norwegian-LoRA If you enter a Hugging Face repo id, it will be installed into models/TTS/moss_tts/loras and then loaded locally. If this field is filled, it overrides the local LoRA dropdown.

Outputs (1)

NameTypeDescription
TTS_engineTTS_ENGINE