Nodes/VibeVoice ComfyUI/VibeVoice Multiple Speakers
ComfyUI Node

VibeVoice Multiple Speakers

Scripted conversations from a text box

By Enemyx-net·Created 12 months ago·Updated 6 months ago· 1,548
VibeVoice Multiple Speakers
  • speaker1_voice
  • speaker2_voice
  • speaker3_voice
  • speaker4_voice
  • lora
  • audio
text[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!
modelNo models found
attention_typeauto
quantize_llmfull precision
free_memory_after_generatetrue
diffusion_steps20
seed42
cfg_scale1.30
use_samplingfalse
temperature0.95
top_p0.95
voice_speed_factor1.00

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_sampling off), 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_chunk input, so very long conversations run in one pass. If you hit quality or memory walls, split the scene into two runs and concatenate.
CategoryVibeVoiceWrapper

Inputs (17)

NameTypeDefaultDescription
textSTRING[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.
modelCOMBONo models foundSelect a model from ComfyUI/models/vibevoice/ folder. Large is recommended for multi-speaker
attention_typeCOMBOautoAttention 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_llmCOMBOfull precisionDynamically 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_generateBOOLEANtrueFree model from memory after generation to save VRAM/RAM. Disable to keep model loaded for faster subsequent generations
diffusion_stepsINT201–100Number of denoising steps. More steps = theoretically better quality but slower. Default: 20
seedINT420–4294967295Random seed for generation. Default 42 is used in official examples
cfg_scaleFLOAT1.300.5–3.5Classifier-free guidance scale (official default: 1.3)
use_samplingBOOLEANfalseEnable sampling mode. When False (default), uses deterministic generation like official examples
speaker1_voiceoptAUDIOOptional: Voice sample for Speaker 1. If not provided, synthetic voice will be used.
speaker2_voiceoptAUDIOOptional: Voice sample for Speaker 2. If not provided, synthetic voice will be used.
speaker3_voiceoptAUDIOOptional: Voice sample for Speaker 3. If not provided, synthetic voice will be used.
speaker4_voiceoptAUDIOOptional: Voice sample for Speaker 4. If not provided, synthetic voice will be used.
loraoptLORA_CONFIGOptional: LoRA configuration from VibeVoice LoRA node
temperatureoptFLOAT0.950.1–2Only used when sampling is enabled
top_poptFLOAT0.950.1–1Only used when sampling is enabled
voice_speed_factoroptFLOAT1.000.8–1.21.0 = normal speed, <1.0 = slower speed, >1.0 = faster speed (applies to all speakers)

Outputs (1)

NameTypeDescription
audioAUDIO