⚙️ VibeVoice Engine
Microsoft's long-form, multi-speaker TTS in ComfyUI
- speaker2_voice
- speaker3_voice
- speaker4_voice
- TTS_engine
If you want a podcast - two or three or four people actually talking to each other for ten, thirty, ninety minutes - this is the engine to reach for. VibeVoice is Microsoft's long-form, multi-speaker TTS, and its whole reason to exist is the thing most TTS models are bad at: staying coherent and consistent over a long stretch with more than one voice. When it dropped it landed hard in the local-AI community as a genuine open-source frontier model for expressive multi-speaker audio.
Like every engine node in this suite, it doesn't make audio by itself. It's a config box. You set the model and mode here, it outputs a TTS_engine, and you wire that into 🎤 TTS Text or 📺 TTS SRT, which do the actual generating. Think of this node as "which voice model, and how."
How it works
You pick a model and a multi_speaker_mode, then feed it text with speaker structure. In Native Multi-Speaker mode (the default) VibeVoice generates all speakers in a single efficient pass - you write Speaker 1: ... / Speaker 2: ... or use [Alice]/[Bob] tags, up to 4 speakers. In Custom Character Switching mode each character is generated per-segment, which unlocks pause tags and per-segment parameter control at the cost of that single-pass efficiency. VibeVoice auto-detects language from the text and reference audio, so there's deliberately no language parameter - tags like [de:] do nothing here.
The inputs and outputs that matter
Really you set two or three things:
model-vibevoice-1.5B(5.4GB, fast, the sane default) orvibevoice-7B(18GB, better quality if you have the VRAM). There are also Hindi finetunes and the Kugel 7B variants in the dropdown.multi_speaker_mode- Native for clean podcasts, Custom if you need pauses and per-line tweaks.runtime_mode- leave it on the default ⚠️ Shared Runtime. This matters: the README is explicit that VibeVoice/Kugel is meant to run in an isolated runtime, and forcingMain Environmentopts you straight back into dependency conflicts.
For the multi-speaker inputs, speaker2_voice / speaker3_voice / speaker4_voice let you pin specific voice files to specific speakers (they override character aliases). chunk_minutes controls how it splits very long text for memory. inference_steps defaults to a low 3, and cfg_scale, temperature, use_sampling, and top_p are the generation knobs - the defaults are tuned, so don't go turning dials before you've heard the defaults. quantize_llm_4bit shrinks VRAM if you're tight.
The single output is TTS_engine → into TTS Text or TTS SRT.
Installing it
Comes with the pack. ComfyUI Manager → search "TTS Audio Suite" → install → restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/diodiogod/TTS-Audio-Suite.git
cd TTS-Audio-Suite
python install.py
The VibeVoice weights (5.4GB or 18GB) auto-download on first generation.
Common issues & troubleshooting
The auto-download fails or 404s. This is the real one. In September 2025 Microsoft abruptly pulled the official VibeVoice repo from GitHub and removed the Large models from HuggingFace, with no clear reason given. Anyone who'd already downloaded kept working; new installs had to find mirrors (ModelScope had them). So if first-run download dies, don't assume your setup is broken - check whether the model source moved, and grab a community mirror. The 1.5B/7B base models this node targets have been more stable than the Large preview.
Dependency conflicts on load. Keep runtime_mode on Shared Runtime. This engine sits on a fragile stack - isolation is the intended fix, not downgrading your whole ComfyUI environment.
Voice cloning is hit or miss. Community consensus is honest about this: VibeVoice is excellent at long, natural reading but only okay at cloning a target voice - people who wanted tight cloning generally preferred Higgs Audio. Use VibeVoice for its strength (length and multi-speaker flow), and reach for a different engine when faithful cloning is the priority.
No sound effects. It's speech-only. It won't produce foley, music, or non-speech audio - that's the Sound Effects node's job with a different engine.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | vibevoice-1.5B | VibeVoice model selection: • vibevoice-1.5B: Official Microsoft model (2.7B params, ~5.4GB) - Faster, 90-min generation • vibevoice-7B: Community preview (9.3B params, ~18GB) - Better quality, 45-min generation • kugelaudio-0-open: KugelAudio Multilingual (7B, ~18GB) - 23 European languages support • kugel-2: KugelAudio v2 merged variant (7B, ~18.7GB) - newer Kugel export, same Kugel fallback rules • vibevoice-hindi-1.5B: Hindi finetune (2.7B params, ~5.4GB) - Optimized for Hindi • vibevoice-hindi-7B: Hindi finetune (9B params, ~18GB) - Best Hindi quality All support long-form generation. Note: KugelAudio uses auto-fallback for multi-speaker. |
| device | COMBO | auto | Computation device: • auto: Automatically select best available (MPS on Apple Silicon, CUDA on NVIDIA, XPU on Intel, CPU fallback) • cuda: Force GPU (requires NVIDIA GPU, ~7GB VRAM) • xpu: Intel GPU acceleration (requires Intel PyTorch XPU) • cpu: Force CPU processing (slower) • mps: Apple Metal Performance Shaders (Apple Silicon Macs only) Recommended: 'auto' for automatic selection. |
| quantize_llm_4bit | BOOLEAN | false | 🗜️ 4-bit LLM quantization (requires bitsandbytes): • False: Full precision (better quality, faster with sufficient VRAM) • True: 4-bit quantization (significant VRAM savings) 💾 VRAM Trade-offs: • 7B model: 12GB → 7.6GB VRAM savings • 1.5B model: 8.7GB → 3.2GB VRAM savings • ⚡ Speed: Faster if model doesn't fit in VRAM, slower if it does • 🎯 Recommended: Only enable if you need VRAM savings Only quantizes LLM component, diffusion stays full precision. |
| attention_mode | COMBO | auto | Attention implementation: • auto: 🎯 RECOMMENDED - Automatically select best available • eager: Standard attention (safest, slower) • sdpa: PyTorch SDPA optimized (balanced) • flash_attention_2: Fastest but may cause issues on some GPUs • sage: 🚀 SageAttention - GPU-optimized mixed-precision (INT8/FP16/FP8) Requires sageattention package and CUDA GPU (SM80+) 2-4x faster for long sequences, automatic GPU kernel selection Auto mode selects: sage > flash_attention_2 > sdpa based on availability. |
| multi_speaker_mode | COMBO | Native Multi-Speaker | Speaker generation mode - SUPPORTS BOTH FORMATS! • Custom Character Switching: ⭐ RECOMMENDED - Use [Alice], [Bob] character tags. Each character generated separately with voice files from voices folder. Supports pause tags, per-character control, unlimited characters. • Native Multi-Speaker: ✅ TWO FORMAT OPTIONS: 1. [Alice], [Bob] tags → auto-converted to Speaker format 2. Manual 'Speaker 1: Hello Speaker 2: Hi there' format Up to 4 speakers. More efficient single-pass generation. 🔧 PRIORITY: Connected speaker2_voice/3/4 inputs override character aliases with warnings! |
| cfg_scale | FLOAT | 3.0 | Classifier-free guidance scale: • 1.0: Minimal guidance • 1.3: Conservative guidance • 3.0: 🎯 RECOMMENDED - Optimal balance (fewer steps needed) • 5.0: Strong guidance Higher CFG allows fewer inference steps while maintaining quality. CFG 3.0 + 3 steps often outperforms CFG 1.3 + 20 steps. |
| inference_steps | INT | 31–100 | 🔄 Diffusion inference steps: • 3: 🎯 RECOMMENDED - Fast with high CFG (3.0) • 5-10: Fast but may need lower CFG • 15-25: Traditional balanced approach • 30+: Higher quality but slower With CFG 3.0, just 3 steps often produces better results than CFG 1.3 + 20 steps. |
| use_sampling | BOOLEAN | false | Sampling mode: • False: 🎯 RECOMMENDED - Deterministic generation for consistency • True: Sampling with temperature/top_p for more variation Deterministic mode provides more reliable results. |
| temperature | FLOAT | 0.950.1–2 | 🌡️ Generation temperature (only with sampling): • 0.1-0.5: Very conservative • 0.8-1.0: 🎯 Natural variation • 1.2-2.0: More creative but less stable Only used when use_sampling is True. |
| top_p | FLOAT | 0.950.1–1 | 🎯 Nucleus sampling (only with sampling): • 0.5-0.7: Focused vocabulary • 0.9-0.95: 🎯 RECOMMENDED - Balanced • 1.0: Full vocabulary Only used when use_sampling is True. |
| chunk_minutes | INT | 00–90 | ⏱️ Time-based chunking (OVERRIDES TTS Text chunking settings): • 0: Disabled - uses TTS Text node chunking settings • 5-10: Good for memory efficiency • 15-30: Balance between quality and memory When > 0, ignores TTS Text enable_chunking and max_chars_per_chunk. Converted to ~750 chars/min internally. |
| max_new_tokens | INT | 00–65536 | 🔤 Maximum generation tokens: • 0: Auto (let model decide) • 1000-2000: Short content • 10000-20000: Medium content • 30000-65536: Long-form content Safety limit to prevent runaway generation. 0 recommended for auto. |
| speaker2_voiceopt | * | 🎤 Voice for Speaker 2 in Native Multi-Speaker mode. Connect audio input or Character Voices output. ⚠️ Important: Each speaker must use a DIFFERENT voice file - duplicate voices cause confusion. 💡 Note: Speaker 1 is the 'opt_narrator' input on the Unified TTS Text/SRT node. | |
| speaker3_voiceopt | * | 🎤 Voice for Speaker 3 in Native Multi-Speaker mode. Connect audio input or Character Voices output. ⚠️ Important: Each speaker must use a DIFFERENT voice file - duplicate voices cause confusion. 💡 Note: Speaker 1 is the 'opt_narrator' input on the Unified TTS Text/SRT node. | |
| speaker4_voiceopt | * | 🎤 Voice for Speaker 4 in Native Multi-Speaker mode. Connect audio input or Character Voices output. ⚠️ Important: Each speaker must use a DIFFERENT voice file - duplicate voices cause confusion. 💡 Note: Speaker 1 is the 'opt_narrator' input on the Unified TTS Text/SRT node. | |
| runtime_modeopt | COMBO | ⚠️ Shared Runtime | IMPORTANT: VibeVoice/Kugel usually needs an isolation runtime now. Runtime Isolation: • Main Environment: Use the main ComfyUI Python environment • Shared Runtime: Use the shared secondary legacy runtime for compatible engines • Dedicated Runtime: Create a separate secondary runtime just for VibeVoice/Kugel Why this matters: • The main ComfyUI env is on Transformers 5 • VibeVoice/Kugel still depends on the older pinned stack • Runtime isolation keeps this engine working without downgrading the whole app ⚠️ Shared/Dedicated runtimes currently reuse heavy base packages from the main env (like PyTorch) and install pinned VibeVoice-specific packages on top. ⚠️ First run still creates the secondary runtime and may take a while. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |