Index TTS 2.5 - Emotion Audio
Index TTS 2.5 Emotion Audio
- reference_audio
- cache_control
- emo_ref_audio
- audio
- seed
- subtitle
Voice cloning tools have a classic failure mode: your reference clip sounds flat, so every clone sounds flat, no matter what the text says. Index TTS 2.5 - Emotion Audio is the pack's answer. It separates timbre from emotion, so the voice comes from one reference clip and the feeling from a second one - and the second one doesn't even have to be the same person.
That's the headline feature: decoupled emotion. You can take a clean, neutral recording of your voice as the identity, then point the emotion input at some random actor's angry scene and get your voice saying the line angrily. Same person isn't required.
How it works
This is a full synthesis node built on the same engine as Base. Your reference_audio becomes the speaker embedding (via Campplus). A second clip, emo_ref_audio, is analyzed for its emotion and turned into an emotion vector that conditions generation alongside the voice. The emotion_weight float (0–1, default 1.0) blends that emotion in - dial it down to 0.5 for a hint of feeling, up for full commitment.
Every other required input is inherited from the Base node: text, reference_audio, lang (ZH/EN/JA/ES/AR or ZH/EN mix), duration_factor (speed, where above 1 is slower). The optional section carries the same sampling stack (temperature, top_p, top_k, num_beams, seed) plus cache_control for the Cache Control node, and then the two emotion inputs. Outputs are audio, seed, and subtitle - wire audio into SaveAudio or PreviewAudio like any other TTS node here.
Using it well
- The emotion clip should be emotionally loud. Whispering, monotone, or low-volume reference audio clones poorly - this is the most common complaint about IndexTTS in the wild. A dynamic, expressive clip transfers way more feeling.
emotion_weightis your safety knob. If the emotion overpowers the text or the voice drifts, back it off to 0.4–0.6 before touching anything else.- Keep the identity clip clean (3–15s, no reverb, no background music). The emotion clip can be messier - you're after its mood, not its quality.
emo_ref_audiois optional in the schema, but if you leave it unplugged you're basically running the Base node with a weight attached. If you just want the voice, use Base.
Install and requirements
It lives in the same pack as the rest of the 2.5 family - ComfyUI Manager (search "ComfyUI-Index-TTS") or:
cd ComfyUI/custom_nodes
git clone https://github.com/chenpipi0807/ComfyUI-Index-TTS
cd ComfyUI-Index-TTS && pip install -r requirements.txt
Models go into ComfyUI/models/IndexTTS-2.5/ via the pack's TTS2_5_download.py script; nothing extra beyond the standard 2.5 set (gpt.pth, codec, s2mel.pth, Campplus, w2v-bert-2.0/, bigvgan/). The usual pack gotchas apply: pin transformers==4.52.1 or 4.54.1 if generation starts erroring after an update, and if facebook/w2v-bert-2.0 throws a 401, download it locally into the models folder so the node runs fully offline.
The one real trap here is expectations: "emotion from another voice" is impressive when it works and subtly off when it doesn't. IndexTTS is genuinely good at this - it's one of the reasons people switched to the 2.x line - but treat emotion_weight as the thing you tune first, not the reference clip.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | 大家好,这是 IndexTTS 2.5 的语音合成演示。 | — |
| reference_audio | AUDIO | — | |
| lang | COMBO | ZH | 6 options: ZH, EN, JA, ES, AR, ZH/EN |
| duration_factor | FLOAT | 1.000.5–2 | — |
| do_sample_modeopt | COMBO | on | 2 options: off, on |
| temperatureopt | FLOAT | 0.800.1–2 | — |
| top_popt | FLOAT | 0.800–1 | — |
| top_kopt | INT | 300–100 | — |
| num_beamsopt | INT | 31–10 | — |
| repetition_penaltyopt | FLOAT | 10.01–10 | — |
| length_penaltyopt | FLOAT | 0.0-2–2 | — |
| max_mel_tokensopt | INT | 150050–1815 | — |
| max_tokens_per_sentenceopt | INT | 1200–600 | — |
| interval_silence_msopt | INT | 2000–2000 | — |
| text_normalizationopt | BOOLEAN | true | — |
| seedopt | INT | 00–4294967295 | — |
| cache_controlopt | DICT | — | |
| emo_ref_audioopt | AUDIO | — | |
| emotion_weightopt | FLOAT | 1.000–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| seed | INT | — |
| subtitle | STRING | — |