VibeVoice Multiple Speakers
Scripted conversations from a text box
- speaker1_voice
- speaker2_voice
- speaker3_voice
- speaker4_voice
- lora
- audio
Single Speaker turns one voice into an audiobook. Multiple Speakers turns a script into a radio play - and it's the node that makes people say "wait, the AI was narrating both sides of that conversation?" You write the dialogue with speaker labels, optionally give each speaker a voice sample to clone, and the node returns one continuous audio track with up to four distinct voices trading lines. For narrated video content, character dialogue, or the audio stage of an LTX workflow, this is where the pack stops being a toy.
How it works
The engine is the same VibeVoice model as Single Speaker - same LLM-plans-then-diffusion architecture, same 24 kHz output. The difference is a parsing layer in front of it. The node scans your text for [N]: labels, works out how many distinct speakers you've got (capped at 4), and assigns each one its own voice: either the audio sample you wired into speaker1_voice through speaker4_voice, or a synthetic default if you left that speaker empty. Then it generates the whole conversation and concatenates it into a single audio tensor.
Your script goes in the text box in this format:
[1]: Have you seen the new AI developments?
[2]: Yes, they're quite impressive!
[1]: I think voice synthesis has come a long way.
[2]: Absolutely, it sounds so natural now.
Speakers don't have to alternate perfectly, and you can reuse a number for a returning character - that's what gives you two-sided banter from one text field.
The inputs that matter
- text - the script, using
[N]:labels. Keep speaker numbers sensible (1, 2, 3 - not 1, 3, 5); the README calls that out and the parser will get confused if you skip around. - model - the dropdown. This is the one place the README is blunt: Large is recommended for multi-speaker. The 1.5B model can hold a single voice fine, but juggling four distinct voices is where you want the bigger model (or the Q8/Q4 variants to fit it in VRAM).
- speaker1_voice … speaker4_voice - optional AUDIO clones, one per speaker, same 30-seconds-of-clean-audio advice as single-speaker cloning.
- seed - deterministic by default, so a good seed is a whole reliable conversation; change it when the chemistry is off.
- cfg_scale (1.3) / diffusion_steps (20) / quantize_llm - same diffusion and memory knobs as Single Speaker.
- voice_speed_factor - speed nudge, but it applies to all speakers equally. Fine for setting an overall pace; it can't make one character fast and another slow.
Output is audio, one continuous track you can save or feed into a video/audio assembly. The lora input works here too - wire a VibeVoice LoRA node in if your characters are LoRA-backed.
Install
It's the same pack, so no extra steps: ComfyUI Manager search "VibeVoice", or
cd ComfyUI/custom_nodes
git clone https://github.com/Enemyx-net/VibeVoice-ComfyUI
restart, and confirm your model files are in ComfyUI/models/vibevoice/ (manual download since v1.6.0 - the wrapper no longer fetches them for you, and the dropdown only shows what's sitting in that folder). The heavy dependencies - transformers, diffusers, librosa, bitsandbytes - install on first use.
Common issues
- Audio out but no voices differ: you're probably on the 1.5B model, or every speaker is missing a voice sample and they're all defaulting to synthetic voices. Plug in at least the main speakers.
- Wrong speaker count: re-check the
[N]:labels. Numbers above 4 get capped with a warning, and non-sequential numbering trips the parser. - Instability: the README's fix for wobbly multi-speaker output is deterministic mode (
use_samplingoff), which is the default - so if you turned sampling on for variety and the conversation fell apart, that's the first thing to flip back. - Long scripts: unlike Single Speaker, this node has no
max_words_per_chunkinput, so very long conversations run in one pass. If you hit quality or memory walls, split the scene into two runs and concatenate.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | [1]: Hello, this is the first speaker. [2]: Hi there, I'm the second speaker. [1]: Nice to meet you! [2]: Nice to meet you too! | Text with speaker labels. Use '[N]:' format where N is 1-4. Gets disabled when connected to another node. |
| model | COMBO | No models found | Select a model from ComfyUI/models/vibevoice/ folder. Large is recommended for multi-speaker |
| attention_type | COMBO | auto | Attention implementation. Auto selects the best available, eager is standard, sdpa is optimized PyTorch, flash_attention_2 requires compatible GPU, sage uses quantized attention for speedup (CUDA only) |
| quantize_llm | COMBO | full precision | Dynamically quantize only the LLM component for non-quantized models. 4bit: major VRAM savings with minimal quality loss. 8bit: good balance of quality and memory usage. Full precision: original quality. Note: ignored for pre-quantized models. Requires CUDA GPU. |
| free_memory_after_generate | BOOLEAN | true | Free model from memory after generation to save VRAM/RAM. Disable to keep model loaded for faster subsequent generations |
| diffusion_steps | INT | 201–100 | Number of denoising steps. More steps = theoretically better quality but slower. Default: 20 |
| seed | INT | 420–4294967295 | Random seed for generation. Default 42 is used in official examples |
| cfg_scale | FLOAT | 1.300.5–3.5 | Classifier-free guidance scale (official default: 1.3) |
| use_sampling | BOOLEAN | false | Enable sampling mode. When False (default), uses deterministic generation like official examples |
| speaker1_voiceopt | AUDIO | Optional: Voice sample for Speaker 1. If not provided, synthetic voice will be used. | |
| speaker2_voiceopt | AUDIO | Optional: Voice sample for Speaker 2. If not provided, synthetic voice will be used. | |
| speaker3_voiceopt | AUDIO | Optional: Voice sample for Speaker 3. If not provided, synthetic voice will be used. | |
| speaker4_voiceopt | AUDIO | Optional: Voice sample for Speaker 4. If not provided, synthetic voice will be used. | |
| loraopt | LORA_CONFIG | Optional: LoRA configuration from VibeVoice LoRA node | |
| temperatureopt | FLOAT | 0.950.1–2 | Only used when sampling is enabled |
| top_popt | FLOAT | 0.950.1–1 | Only used when sampling is enabled |
| voice_speed_factoropt | FLOAT | 1.000.8–1.2 | 1.0 = normal speed, <1.0 = slower speed, >1.0 = faster speed (applies to all speakers) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |