⚙️ MOSS-TTS Engine
31 languages and native multi-speaker dialogue
- speaker2_voice
- speaker3_voice
- speaker4_voice
- speaker5_voice
- TTS_engine
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_eventfields behave differently per variant - check the MOSS Prompt Fields guide if a field seems ignored.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| model_variant | COMBO | 1.7B | MOSS-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_mode | COMBO | Custom Character Switching | Custom 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. |
| device | COMBO | auto | Device for MOSS-TTS. CUDA is strongly recommended; CPU is very slow. |
| language | COMBO | Auto | Optional 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_tokens | INT | 00–8192 | Target 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_preset | COMBO | Model default | Model default uses OpenMOSS recommended sampling parameters for the selected variant. |
| temperature | FLOAT | 1.000.1–2.5 | Official audio_temperature. Ignored when sampler_preset is Model default. |
| top_p | FLOAT | 0.950–1 | Official audio_top_p. Ignored when sampler_preset is Model default. |
| top_k | INT | 501–200 | Official audio_top_k. Ignored when sampler_preset is Model default. |
| repetition_penalty | FLOAT | 1.100.5–3 | Official audio_repetition_penalty. Ignored when sampler_preset is Model default. |
| max_new_tokens | INT | 409664–16384 | Maximum generated tokens. Higher values allow longer outputs and use more VRAM/time. |
| chunk_minutes | INT | 00–90 | Time-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. |
| instructionopt | STRING | How 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. | |
| qualityopt | STRING | Overall 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_eventopt | STRING | Main 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_soundopt | STRING | Background 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_inferenceopt | INT | 00–32 | Local Transformer only: number of RVQ layers/codebooks for inference. 0 uses model default. |
| dtypeopt | COMBO | auto | Model precision. Auto uses bf16 on capable CUDA GPUs, fp16 on older CUDA GPUs, fp32 on CPU. |
| attn_implementationopt | COMBO | auto | Attention backend. Auto prefers FlashAttention 2 when installed and supported, otherwise SDPA/eager. |
| codec_modelopt | COMBO | MOSS-Audio-Tokenizer | Official 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_adapteropt | COMBO | None | Optional 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_overrideopt | STRING | Advanced 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)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |