⚙️ IndexTTS 2 / 2.5 Engine
Voice cloning with real emotion control
- emotion_control
- emotion_audio
- TTS_engine
IndexTTS-2 is the engine you pick when you care about how a line is delivered, not just what it says. Most TTS engines give you a voice and maybe a vague "expressiveness" slider. IndexTTS-2 lets you steer emotion directly - eight named emotions you can dial by hand, or an audio reference, or AI-analyzed emotion from the text itself, blended together in the model's conditioning space. For dialogue, character work, and anything where a flat read won't cut it, it's the standout in this pack. This node configures it and outputs a TTS_ENGINE for 🎤 TTS Text or 📺 TTS SRT.
It's a mid-size model (~4.7GB), covers English, Chinese, and Japanese, and clones a voice from a reference clip.
How it works
IndexTTS-2 conditions generation on both a speaker reference (the voice) and an emotion reference (the feeling), kept on separate paths so you can mix and match. That separation is the trick: you can clone Alice's voice but drive it happy, angry, or melancholic without needing a happy/angry/melancholic recording of Alice. The emotion side comes in through two optional inputs on this node, and emotion_alpha scales how much of it actually gets applied.
The inputs and outputs that matter
For a beginner, most of the required widgets are sampler internals you can ignore. The ones that matter:
- emotion_alpha (0–2, default 1) - the master emotion intensity. 0 is neutral, 1 is normal, 2 is maximum drama. This is the single most useful dial on the node. If emotion sounds too strong or too weak, this is what you turn.
- temperature (default 0.8), top_p (default 0.8), top_k (default 30) - standard sampling controls; defaults are fine.
- repetition_penalty (default 10) - note this default is unusually high on purpose, to stop the model looping. Don't casually drop it to 1.
Then two optional inputs that are the whole point of IndexTTS-2:
- emotion_control - takes an
EMOTION_CONTROLfrom the 🌈 IndexTTS-2 Emotion Vectors node (manual 8-emotion sliders) or a text-emotion source. This is the "set the feeling by hand" path. - emotion_audio - takes any audio clip as an emotion reference; the model copies its emotional tone. You can feed a Character Voices
opt_narratorhere for per-character emotion references. Both can be used at once and get blended.
Advanced toggles like use_fp16 (on by default, saves VRAM), low_vram, use_cuda_kernel, and use_deepspeed are performance switches - leave them until you hit a memory wall, then flip low_vram. Output is a single TTS_engine.
Installing it
Comes with TTS Audio Suite. Easiest is ComfyUI Manager: search TTS Audio Suite, install, restart - Manager runs the pack's install.py, which handles the dependency conflicts (NumPy, librosa, s3tokenizer) and Python 3.13. 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: sudo apt-get install portaudio19-dev libsamplerate0-dev first. The IndexTTS-2 model (~4.7GB, emotion components included) auto-downloads on first use into ComfyUI/models/TTS/IndexTTS/. There's a "🌈 IndexTTS-2 Integration" example workflow in the repo that wires the emotion inputs for you.
Common issues
- Emotion isn't showing up. Check
emotion_alphafirst - at 0 you've muted it entirely. Then check that something is actually connected toemotion_controloremotion_audio; the node happily generates neutral speech with nothing plugged in. - Over-dramatic, warbly output.
emotion_alphatoo high, or an emotion audio reference that's very intense. Pull alpha back toward 1. - Looping or repeated words. That's what the high default
repetition_penaltyguards against - if you lowered it, put it back up. - VRAM errors. It's a 4.7GB model plus emotion components. Enable
low_vramand keepuse_fp16on. Per-character emotion via[Character:emotion_ref]tags is powerful but multiplies the references the model juggles.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | COMBO | IndexTTS-2.5 | IndexTTS model version selection: • IndexTTS-2.5: multilingual model with official duration-factor scaling • IndexTTS-2: legacy emotion-disentanglement model • local:ModelName: use a locally installed model • Downloads respect extra_model_paths.yaml |
| device | COMBO | auto | Device to run IndexTTS-2 model on: • auto: Automatically select best available (MPS on Apple Silicon, CUDA on NVIDIA, XPU on Intel, CPU fallback) • cuda: NVIDIA GPU (requires CUDA-capable GPU) • xpu: Intel GPU (requires Intel PyTorch XPU) • cpu: CPU-only processing (slower) • mps: Apple Metal Performance Shaders (Apple Silicon Macs only) |
| emotion_alpha | FLOAT | 1.000–1 | Emotion conditioning strength (0.0-1.0). Applies to connected audio/vector/text emotion controls. |
| use_random | BOOLEAN | false | Enable random sampling for more varied generation. Can improve diversity. |
| max_text_tokens_per_segment | INT | 12050–300 | Maximum text tokens per segment. Longer segments may cause quality issues. |
| interval_silence | INT | 2000–1000 | Silence duration between segments in milliseconds. |
| temperature | FLOAT | 0.80.1–2 | Controls randomness. Higher values = more creative, lower = more consistent. |
| top_p | FLOAT | 0.800.1–1 | Nucleus sampling threshold. Controls probability mass of tokens to consider. |
| top_k | INT | 301–100 | Top-k sampling parameter. Lower values = more focused generation. |
| do_sample | BOOLEAN | true | Enable sampling for generation. Disable for deterministic output. |
| length_penalty | FLOAT | 0.0-2–2 | Length penalty for beam search. Positive values favor longer sequences. |
| num_beams | INT | 31–10 | Number of beams for beam search. Higher values = better quality but slower. |
| repetition_penalty | FLOAT | 10.01–20 | Penalty for repeated tokens. Higher values reduce repetition. |
| max_mel_tokens | INT | 1500500–3000 | Maximum mel-spectrogram tokens to generate. Controls output length limit. |
| use_fp16 | BOOLEAN | true | Use reduced precision: FP16 for IndexTTS-2 and BF16 for IndexTTS-2.5. Unsupported devices fall back safely. |
| use_deepspeed | BOOLEAN | false | Use DeepSpeed optimization. Requires DeepSpeed installation. |
| emotion_controlopt | * | Vector/text emotion control (legacy unified input): • 🌈 Emotion Vectors - Manual emotion control sliders • 🌈 Text Emotion - AI-analyzed emotion from text Connect audio separately to 'emotion_audio' when you want to blend both. Character emotion tags [Alice:emotion_ref] can provide per-segment audio emotion. | |
| emotion_audioopt | * | Dedicated emotion-reference audio input. Connect Character Voices, opt_narrator, or AUDIO here. This can be connected together with the vector/text emotion input above; IndexTTS-2 blends both. | |
| use_cuda_kernelopt | COMBO | auto | Use BigVGAN CUDA kernels for faster vocoding. Auto-detects availability. |
| use_torch_compileopt | BOOLEAN | false | Enable torch.compile optimization for S2Mel mel-spectrogram generation stage. Provides 1.5-2x speedup. Requires a compatible PyTorch version and Triton on CUDA systems (triton-windows on Windows). |
| use_accelopt | BOOLEAN | false | Enable GPT2 acceleration with FlashAttention and KV-cache optimization. Provides 1.5-3x speedup for GPT2 stage. REQUIRES: flash-attn library (pip install flash-attn) |
| stream_returnopt | BOOLEAN | false | Enable streaming mode for low-latency audio generation. Returns generator yielding audio chunks instead of complete file. |
| more_segment_beforeopt | INT | 00–80 | Streaming segmentation parameter. Higher values produce first audio chunk faster but may affect quality. Only used when stream_return is enabled. Recommended: 0-20. |
| low_vramopt | BOOLEAN | false | Enable IndexTTS low-VRAM behavior. Legacy 2.0 uses sequential offloading; 2.5 uses more aggressive text splitting. |
| languageopt | COMBO | English | IndexTTS-2.5 generation language. Character language tags override this per segment. Legacy IndexTTS-2 ignores this control. |
| duration_factoropt | FLOAT | 1.000.5–2 | Official IndexTTS-2.5 internal feature-duration scaling; legacy IndexTTS-2 ignores it. 0.5 is shorter/faster speech; 1.0 is unchanged; 2.0 is longer/slower. This uses nearest-neighbor scaling of semantic features, not natural prosody or exact-duration planning, and extreme values can sound stretched. It does not improve inference speed. |
| text_normalizationopt | BOOLEAN | true | Enable IndexTTS-2.5 multilingual text normalization and pronunciation-annotation protection. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |