Nodes/IndexTTS-2 Nodes/IndexTTS2 Emotion (Audio)
ComfyUI Node

IndexTTS2 Emotion (Audio)

Separate the timbre from the emotion

By kana112233·Created 8 months ago·Updated 8 months ago· 3
IndexTTS2 Emotion (Audio)
  • model
  • spk_audio_prompt
  • emo_audio_prompt
  • audio
textThis speech has a specific emotional tone from the reference audio.
emo_alpha1.0
temperature1.0
top_k0
top_p1.00
use_randomfalse

Voice Clone's quiet limitation is that it can't separate who is talking from how they're talking - the emotion rides along inside the reference clip. This node is the fix. You hand it two audio references: one that defines the timbre (the speaker) and one that defines the emotion (the delivery). IndexTTS-2's headline feature is that speaker-emotion disentanglement, and this is the node that demonstrates it directly.

It's the right tool whenever you have a voice you want to keep but an emotion you want to import - say, your narrator's calm voice saying lines in a genuinely angry tone, driven by an angry clip of someone else. You get to steer how much of that borrowed emotion lands via a single slider, which is the thing the other emotion nodes can't do with audio.

How it works

Both clips get turned into embeddings by the same wav2vec-BERT feature extractor, but they land on different branches: the speaker clip becomes the speaker conditioning, and the emotion clip becomes the emotion conditioning. Inside the model's GPT they're merged with an alpha blend controlled by emo_alpha. Because the two conditions are separate tensors rather than one blended reference, the model treats "voice" and "feeling" as independent axes - that's the disentanglement in action. One honest caveat from the code: the emotion audio gets cut to its first 15 seconds, so make sure the emotion you want to borrow is front-loaded in that clip.

The inputs that matter

  • spk_audio_prompt - the voice. Timbre comes from here.
  • emo_audio_prompt - the feeling. Delivery comes from here. Both from core LoadAudio nodes.
  • emo_alpha - emotion strength, 0.0 to 2.0, default 1.0. This is the slider you'll actually fiddle with. The pack's own guidance: lower is safer - it can be cranked past 1.0 to exaggerate, but that's where things start sounding like a caricature.
  • text - what gets said, multiline.
  • use_random, temperature, top_k, top_p - the same sampling knobs as the rest of the pack. Leave use_random off for cloning fidelity.

Output is a single audio in standard ComfyUI AUDIO format - straight into SaveAudio or PreviewAudio.

Choosing it over the other emotion nodes

Quick decision rule from the pack's own comparison: if you have a usable emotion clip, this is the most intuitive route - you're demonstrating the feeling rather than describing it. If you don't have a clip, the Text node takes natural language instead, and the Vector node gives precision (at the cost of staring at eight sliders). Reach for this one when "happy and excited, but the person's voice" is easier to show than to say.

Install and the usual caveats

Manager search "IndexTTS-2" or git clone into custom_nodes, pip install -r requirements.txt, model at ComfyUI/models/IndexTTS-2/ - same as every node in this pack. And the reference-audio rules from the Voice Clone article apply double here, since you're feeding it two clips: both should be clean, single-speaker, and reasonably loud and dynamic. A quiet, monotone emotion reference just produces a quiet, monotone dub with emo_alpha turned up pointlessly.

Categoryaudio/IndexTTS2

Inputs (9)

NameTypeDefaultDescription
modelINDEXTTS2_MODEL
textSTRINGThis speech has a specific emotional tone from the reference audio.
spk_audio_promptAUDIO
emo_audio_promptAUDIO
emo_alphaFLOAT1.00–2
temperatureFLOAT1.00.1–2
top_kINT00–100
top_pFLOAT1.000–1
use_randomBOOLEANfalse

Outputs (1)

NameTypeDescription
audioAUDIO