Custom nodes for the MOSS-TTS model family from OpenMOSS. Brings text-to-speech, zero-shot voice cloning, voice design, sound effect generation, and multi-speaker dialogue synthesis into ComfyUI workflows.
1. Clone into your ComfyUI custom nodes directory:
cd ComfyUI/custom_nodes
git clone https://github.com/richservo/comfyui-moss-tts
2. Install dependencies:
pip install -r ComfyUI/custom_nodes/comfyui-moss-tts/requirements.txt
Note:
transformers>=5.0.0is required. Earlier versions may fail to load the MOSS model architecture.torchandtorchaudioare not listed in requirements because ComfyUI provides them.
3. Restart ComfyUI.
All five nodes will appear under the audio/MOSS-TTS category in the node search.
Models download automatically from HuggingFace on first use and are cached to ComfyUI/models/moss-tts/.
| Display Name | HuggingFace ID | Architecture | Approx. VRAM | Speed Notes |
|---|---|---|---|---|
| MOSS-TTS (Delay 8B) | OpenMOSS-Team/MOSS-TTS | Delay 8B | ~18 GB | Slow on single GPU |
| MOSS-TTS (Local 1.7B) | OpenMOSS-Team/MOSS-TTS-Local-Transformer | Local 1.7B | ~5 GB | Fast; recommended for daily use |
| MOSS-TTSD v1.0 | OpenMOSS-Team/MOSS-TTSD-v1.0 | Delay 8B | ~18 GB | Slow on single GPU |
| MOSS-VoiceGenerator | OpenMOSS-Team/MOSS-VoiceGenerator | Delay 8B | ~18 GB | Slow on single GPU |
| MOSS-SoundEffect | OpenMOSS-Team/MOSS-SoundEffect | Delay 8B | ~18 GB | Slow on single GPU |
MOSS-TTS (Local 1.7B) is the only model that is fast enough for practical iterative use on a single consumer GPU. All other models use the Delay 8B architecture and are significantly slower.
The Audio Tokenizer (OpenMOSS-Team/MOSS-Audio-Tokenizer) is a shared codec required by all models. It downloads automatically alongside whichever model you load first.
Loads a MOSS-TTS model and processor into a pipeline object (MOSS_TTS_PIPE) that is passed to any generation node.
Inputs:
| Name | Type | Default | Description |
|---|---|---|---|
model_variant | Dropdown | MOSS-TTS (Delay 8B) | Which model to load |
local_model_path | String | (empty) | Absolute path to a local model directory. Leave empty to auto-download from HuggingFace |
codec_local_path | String | (empty) | Absolute path to a local Audio Tokenizer directory (relevant for MOSS-TTSD). Leave empty to auto-download |
Output: MOSS_TTS_PIPE
Notes:
mm.unload_all_models() before loading to free VRAM.ComfyUI/models/moss-tts/ on first download.Generates speech from text. Optionally clones a voice from a reference audio clip.
Inputs:
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | — | Pipeline from Model Loader |
text | String (multiline) | (empty) | — | Text to synthesize |
seed | Int | 0 | 0 – 2^64 | Random seed for reproducibility |
temperature | Float | 1.7 | 0.0 – 5.0 | Sampling temperature (default tuned for Delay 8B; use 1.0 for Local 1.7B) |
top_p | Float | 0.8 | 0.0 – 1.0 | Nucleus sampling probability |
top_k | Int | 25 | 1 – 200 | Top-k sampling (default tuned for Delay 8B; use 50 for Local 1.7B) |
repetition_penalty | Float | 1.0 | 0.5 – 2.0 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | 1 – 8192 | Maximum tokens to generate |
enable_duration_control | Boolean | False | — | Enable target duration hint |
duration_tokens | Int | 325 | 1 – 4096 | Target duration in tokens (1 second = 12.5 tokens, so 325 = ~26 seconds) |
reference_audio | AUDIO | (optional) | — | Reference audio for voice cloning |
Output: AUDIO
Notes:
reference_audio: performs standard TTS with the model's default voice.reference_audio: performs zero-shot voice cloning. No reference transcript is needed (unlike Qwen-TTS).seed changes.Generates speech in a voice described by a natural language instruction. Requires the MOSS-VoiceGenerator model.
Inputs:
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | — | Pipeline from Model Loader (use MOSS-VoiceGenerator) |
text | String (multiline) | (empty) | — | Text to speak |
instruction | String (multiline) | (empty) | — | Natural language voice description (e.g. "A warm, deep male voice with a slight British accent") |
seed | Int | 0 | 0 – 2^64 | Random seed |
temperature | Float | 1.5 | 0.0 – 5.0 | Sampling temperature |
top_p | Float | 0.6 | 0.0 – 1.0 | Nucleus sampling probability |
top_k | Int | 50 | 1 – 200 | Top-k sampling |
repetition_penalty | Float | 1.1 | 0.5 – 2.0 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | 1 – 8192 | Maximum tokens to generate |
Output: AUDIO
Notes:
MOSS-VoiceGenerator, but will still attempt generation.Generates ambient sounds and audio effects from a text description. Requires the MOSS-SoundEffect model.
Inputs:
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | — | Pipeline from Model Loader (use MOSS-SoundEffect) |
ambient_sound | String (multiline) | (empty) | — | Description of the sound to generate (e.g. "Heavy rain on a tin roof with distant thunder") |
duration_seconds | Float | 5.0 | 0.5 – 60.0 | Target duration of the output audio in seconds |
seed | Int | 0 | 0 – 2^64 | Random seed |
temperature | Float | 1.5 | 0.0 – 5.0 | Sampling temperature |
top_p | Float | 0.6 | 0.0 – 1.0 | Nucleus sampling probability |
top_k | Int | 50 | 1 – 200 | Top-k sampling |
repetition_penalty | Float | 1.2 | 0.5 – 2.0 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | 1 – 8192 | Maximum tokens to generate |
Output: AUDIO
Notes:
tokens = int(duration_seconds * 12.5).MOSS-SoundEffect.Synthesizes multi-speaker dialogue with two distinct voices. Supports optional per-speaker voice cloning from reference audio. Requires the MOSS-TTSD v1.0 model.
Inputs:
| Name | Type | Default | Description |
|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | Pipeline from Model Loader (use MOSS-TTSD v1.0) |
dialogue_text | String (multiline) | (empty) | Dialogue with speaker tags (see format below) |
speaker_count | Int (fixed) | 2 | Fixed at 2; reserved for future expansion |
normalize_text | Boolean | True | Apply text normalization (punctuation cleanup, tag normalization) |
seed | Int | 0 | Random seed |
temperature | Float | 1.1 | Sampling temperature |
top_p | Float | 0.9 | Nucleus sampling probability |
top_k | Int | 50 | Top-k sampling |
repetition_penalty | Float | 1.1 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | Maximum tokens to generate |
s1_reference_audio | AUDIO | (optional) | Reference clip for Speaker 1 voice cloning |
s1_prompt_text | String | (optional) | Transcript of the Speaker 1 reference clip |
s2_reference_audio | AUDIO | (optional) | Reference clip for Speaker 2 voice cloning |
s2_prompt_text | String | (optional) | Transcript of the Speaker 2 reference clip |
Output: AUDIO
Dialogue text format:
[S1] Hello, how are you today?
[S2] I'm doing great, thanks for asking!
[S1] That's wonderful to hear.
Accepted tag formats: [S1]/[S2], [s1]/[s2], or [1]/[2]. When normalize_text is enabled, all formats are normalized to [S1]/[S2] automatically.
Notes:
s1_prompt_text / s2_prompt_text are used as the continuation prefix transcript. If left empty, the reference audio is still used for voice conditioning.MOSS-TTSD-v1.0.MOSS-TTS Model Loader → MOSS-TTS Generate → PreviewAudio
Load the MOSS-TTS (Local 1.7B) model for fast iteration. Enter text in the Generate node and queue the prompt.
LoadAudio (reference clip) ──┐
├─→ MOSS-TTS Generate → PreviewAudio
MOSS-TTS Model Loader ───────┘
Connect a short audio clip (3-10 seconds) to the reference_audio input of the Generate node. The model will clone the voice without requiring a transcript.
MOSS-TTS Model Loader (VoiceGenerator) → MOSS-TTS Voice Design → PreviewAudio
Load the MOSS-VoiceGenerator model. Describe the desired voice in the instruction field and provide the text to speak.
MOSS-TTS Model Loader (SoundEffect) → MOSS-TTS Sound Effect → PreviewAudio
Load the MOSS-SoundEffect model. Describe the desired sound in ambient_sound and set duration_seconds.
MOSS-TTS Model Loader (TTSD) → MOSS-TTS Dialogue → PreviewAudio
Load the MOSS-TTSD v1.0 model. Write dialogue in the dialogue_text field using [S1]/[S2] tags. Optionally connect reference audio clips for each speaker to clone their voices.
Reference audio quality:
Model selection:
Sampling parameters:
Recommended parameters per model:
| Model | temperature | top_p | top_k | repetition_penalty |
|---|---|---|---|---|
| MOSS-TTS (Delay 8B) | 1.7 | 0.8 | 25 | 1.0 |
| MOSS-TTS (Local 1.7B) | 1.0 | 0.95 | 50 | 1.1 |
| MOSS-TTSD v1.0 | 1.1 | 0.9 | 50 | 1.1 |
| MOSS-VoiceGenerator | 1.5 | 0.6 | 50 | 1.1 |
| MOSS-SoundEffect | 1.5 | 0.6 | 50 | 1.2 |
Duration control:
tokens = int(seconds * 12.5) — so 325 tokens ≈ 26 seconds, 125 tokens ≈ 10 seconds.Audio output:
AUDIO type and is compatible with all built-in ComfyUI audio nodes (PreviewAudio, SaveAudio, etc.).Voice cloning vs. Qwen-TTS:
reference_audio is sufficient.Dialogue tags:
[S1]/[S2], [s1]/[s2], or [1]/[2] — all are normalized automatically when normalize_text is enabled.MOSS-TTS is developed by the OpenMOSS team.
This ComfyUI node package is an independent wrapper and is not officially affiliated with OpenMOSS.
14 commits
Python
100.0%
Custom nodes for the MOSS-TTS model family from OpenMOSS. Brings text-to-speech, zero-shot voice cloning, voice design, sound effect generation, and multi-speaker dialogue synthesis into ComfyUI workflows.
1. Clone into your ComfyUI custom nodes directory:
cd ComfyUI/custom_nodes
git clone https://github.com/richservo/comfyui-moss-tts
2. Install dependencies:
pip install -r ComfyUI/custom_nodes/comfyui-moss-tts/requirements.txt
Note:
transformers>=5.0.0is required. Earlier versions may fail to load the MOSS model architecture.torchandtorchaudioare not listed in requirements because ComfyUI provides them.
3. Restart ComfyUI.
All five nodes will appear under the audio/MOSS-TTS category in the node search.
Models download automatically from HuggingFace on first use and are cached to ComfyUI/models/moss-tts/.
| Display Name | HuggingFace ID | Architecture | Approx. VRAM | Speed Notes |
|---|---|---|---|---|
| MOSS-TTS (Delay 8B) | OpenMOSS-Team/MOSS-TTS | Delay 8B | ~18 GB | Slow on single GPU |
| MOSS-TTS (Local 1.7B) | OpenMOSS-Team/MOSS-TTS-Local-Transformer | Local 1.7B | ~5 GB | Fast; recommended for daily use |
| MOSS-TTSD v1.0 | OpenMOSS-Team/MOSS-TTSD-v1.0 | Delay 8B | ~18 GB | Slow on single GPU |
| MOSS-VoiceGenerator | OpenMOSS-Team/MOSS-VoiceGenerator | Delay 8B | ~18 GB | Slow on single GPU |
| MOSS-SoundEffect | OpenMOSS-Team/MOSS-SoundEffect | Delay 8B | ~18 GB | Slow on single GPU |
MOSS-TTS (Local 1.7B) is the only model that is fast enough for practical iterative use on a single consumer GPU. All other models use the Delay 8B architecture and are significantly slower.
The Audio Tokenizer (OpenMOSS-Team/MOSS-Audio-Tokenizer) is a shared codec required by all models. It downloads automatically alongside whichever model you load first.
Loads a MOSS-TTS model and processor into a pipeline object (MOSS_TTS_PIPE) that is passed to any generation node.
Inputs:
| Name | Type | Default | Description |
|---|---|---|---|
model_variant | Dropdown | MOSS-TTS (Delay 8B) | Which model to load |
local_model_path | String | (empty) | Absolute path to a local model directory. Leave empty to auto-download from HuggingFace |
codec_local_path | String | (empty) | Absolute path to a local Audio Tokenizer directory (relevant for MOSS-TTSD). Leave empty to auto-download |
Output: MOSS_TTS_PIPE
Notes:
mm.unload_all_models() before loading to free VRAM.ComfyUI/models/moss-tts/ on first download.Generates speech from text. Optionally clones a voice from a reference audio clip.
Inputs:
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | — | Pipeline from Model Loader |
text | String (multiline) | (empty) | — | Text to synthesize |
seed | Int | 0 | 0 – 2^64 | Random seed for reproducibility |
temperature | Float | 1.7 | 0.0 – 5.0 | Sampling temperature (default tuned for Delay 8B; use 1.0 for Local 1.7B) |
top_p | Float | 0.8 | 0.0 – 1.0 | Nucleus sampling probability |
top_k | Int | 25 | 1 – 200 | Top-k sampling (default tuned for Delay 8B; use 50 for Local 1.7B) |
repetition_penalty | Float | 1.0 | 0.5 – 2.0 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | 1 – 8192 | Maximum tokens to generate |
enable_duration_control | Boolean | False | — | Enable target duration hint |
duration_tokens | Int | 325 | 1 – 4096 | Target duration in tokens (1 second = 12.5 tokens, so 325 = ~26 seconds) |
reference_audio | AUDIO | (optional) | — | Reference audio for voice cloning |
Output: AUDIO
Notes:
reference_audio: performs standard TTS with the model's default voice.reference_audio: performs zero-shot voice cloning. No reference transcript is needed (unlike Qwen-TTS).seed changes.Generates speech in a voice described by a natural language instruction. Requires the MOSS-VoiceGenerator model.
Inputs:
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | — | Pipeline from Model Loader (use MOSS-VoiceGenerator) |
text | String (multiline) | (empty) | — | Text to speak |
instruction | String (multiline) | (empty) | — | Natural language voice description (e.g. "A warm, deep male voice with a slight British accent") |
seed | Int | 0 | 0 – 2^64 | Random seed |
temperature | Float | 1.5 | 0.0 – 5.0 | Sampling temperature |
top_p | Float | 0.6 | 0.0 – 1.0 | Nucleus sampling probability |
top_k | Int | 50 | 1 – 200 | Top-k sampling |
repetition_penalty | Float | 1.1 | 0.5 – 2.0 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | 1 – 8192 | Maximum tokens to generate |
Output: AUDIO
Notes:
MOSS-VoiceGenerator, but will still attempt generation.Generates ambient sounds and audio effects from a text description. Requires the MOSS-SoundEffect model.
Inputs:
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | — | Pipeline from Model Loader (use MOSS-SoundEffect) |
ambient_sound | String (multiline) | (empty) | — | Description of the sound to generate (e.g. "Heavy rain on a tin roof with distant thunder") |
duration_seconds | Float | 5.0 | 0.5 – 60.0 | Target duration of the output audio in seconds |
seed | Int | 0 | 0 – 2^64 | Random seed |
temperature | Float | 1.5 | 0.0 – 5.0 | Sampling temperature |
top_p | Float | 0.6 | 0.0 – 1.0 | Nucleus sampling probability |
top_k | Int | 50 | 1 – 200 | Top-k sampling |
repetition_penalty | Float | 1.2 | 0.5 – 2.0 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | 1 – 8192 | Maximum tokens to generate |
Output: AUDIO
Notes:
tokens = int(duration_seconds * 12.5).MOSS-SoundEffect.Synthesizes multi-speaker dialogue with two distinct voices. Supports optional per-speaker voice cloning from reference audio. Requires the MOSS-TTSD v1.0 model.
Inputs:
| Name | Type | Default | Description |
|---|---|---|---|
moss_pipe | MOSS_TTS_PIPE | — | Pipeline from Model Loader (use MOSS-TTSD v1.0) |
dialogue_text | String (multiline) | (empty) | Dialogue with speaker tags (see format below) |
speaker_count | Int (fixed) | 2 | Fixed at 2; reserved for future expansion |
normalize_text | Boolean | True | Apply text normalization (punctuation cleanup, tag normalization) |
seed | Int | 0 | Random seed |
temperature | Float | 1.1 | Sampling temperature |
top_p | Float | 0.9 | Nucleus sampling probability |
top_k | Int | 50 | Top-k sampling |
repetition_penalty | Float | 1.1 | Penalizes repeated tokens |
max_new_tokens | Int | 4096 | Maximum tokens to generate |
s1_reference_audio | AUDIO | (optional) | Reference clip for Speaker 1 voice cloning |
s1_prompt_text | String | (optional) | Transcript of the Speaker 1 reference clip |
s2_reference_audio | AUDIO | (optional) | Reference clip for Speaker 2 voice cloning |
s2_prompt_text | String | (optional) | Transcript of the Speaker 2 reference clip |
Output: AUDIO
Dialogue text format:
[S1] Hello, how are you today?
[S2] I'm doing great, thanks for asking!
[S1] That's wonderful to hear.
Accepted tag formats: [S1]/[S2], [s1]/[s2], or [1]/[2]. When normalize_text is enabled, all formats are normalized to [S1]/[S2] automatically.
Notes:
s1_prompt_text / s2_prompt_text are used as the continuation prefix transcript. If left empty, the reference audio is still used for voice conditioning.MOSS-TTSD-v1.0.MOSS-TTS Model Loader → MOSS-TTS Generate → PreviewAudio
Load the MOSS-TTS (Local 1.7B) model for fast iteration. Enter text in the Generate node and queue the prompt.
LoadAudio (reference clip) ──┐
├─→ MOSS-TTS Generate → PreviewAudio
MOSS-TTS Model Loader ───────┘
Connect a short audio clip (3-10 seconds) to the reference_audio input of the Generate node. The model will clone the voice without requiring a transcript.
MOSS-TTS Model Loader (VoiceGenerator) → MOSS-TTS Voice Design → PreviewAudio
Load the MOSS-VoiceGenerator model. Describe the desired voice in the instruction field and provide the text to speak.
MOSS-TTS Model Loader (SoundEffect) → MOSS-TTS Sound Effect → PreviewAudio
Load the MOSS-SoundEffect model. Describe the desired sound in ambient_sound and set duration_seconds.
MOSS-TTS Model Loader (TTSD) → MOSS-TTS Dialogue → PreviewAudio
Load the MOSS-TTSD v1.0 model. Write dialogue in the dialogue_text field using [S1]/[S2] tags. Optionally connect reference audio clips for each speaker to clone their voices.
Reference audio quality:
Model selection:
Sampling parameters:
Recommended parameters per model:
| Model | temperature | top_p | top_k | repetition_penalty |
|---|---|---|---|---|
| MOSS-TTS (Delay 8B) | 1.7 | 0.8 | 25 | 1.0 |
| MOSS-TTS (Local 1.7B) | 1.0 | 0.95 | 50 | 1.1 |
| MOSS-TTSD v1.0 | 1.1 | 0.9 | 50 | 1.1 |
| MOSS-VoiceGenerator | 1.5 | 0.6 | 50 | 1.1 |
| MOSS-SoundEffect | 1.5 | 0.6 | 50 | 1.2 |
Duration control:
tokens = int(seconds * 12.5) — so 325 tokens ≈ 26 seconds, 125 tokens ≈ 10 seconds.Audio output:
AUDIO type and is compatible with all built-in ComfyUI audio nodes (PreviewAudio, SaveAudio, etc.).Voice cloning vs. Qwen-TTS:
reference_audio is sufficient.Dialogue tags:
[S1]/[S2], [s1]/[s2], or [1]/[2] — all are normalized automatically when normalize_text is enabled.MOSS-TTS is developed by the OpenMOSS team.
This ComfyUI node package is an independent wrapper and is not officially affiliated with OpenMOSS.
14 commits
Python
100.0%