12 KiB
IndexTTS-2 Emotion Control Guide
IndexTTS-2 features advanced emotion control capabilities that allow you to precisely control the emotional expression of generated speech. This guide covers all available emotion control methods and their applications.
Overview
IndexTTS-2 supports multiple emotion control methods that can be combined for sophisticated emotional expression:
- Direct Audio Reference: Use any audio file as an emotion reference
- Character Voices: Use character audio references from the Character Voices node
- Emotion Vectors: Manual 8-emotion slider control with precise values
- Text Emotion: AI-powered QwenEmotion analysis from text descriptions with dynamic templates
- Character Tag Emotions: Per-character emotion control using
[Character:emotion_ref]syntax
Emotion Control Inputs and Blending
The IndexTTS-2 Engine has two emotion inputs:
emotion_control: vector controls or Qwen text emotionemotion_audio: an audio reference from an AUDIO or Character Voices node
Both inputs may be connected at the same time. Text emotion is analyzed into an 8-value vector; audio emotion remains an audio-derived conditioning signal. The engine blends the two signals in its latent emotion-conditioning space rather than converting the audio into the eight visible vector values.
For backward compatibility, the original emotion_control socket still accepts
legacy audio connections, but new workflows should use emotion_audio for
audio references. A character tag such as [Alice:angry_bob] supplies a
segment-local audio reference and can also be combined with vector/text emotion
for that segment.
Method 1: Direct Audio Reference
Connect any audio file directly to the IndexTTS-2 Engine's emotion_audio input.
How it works:
- IndexTTS-2 analyzes the emotional characteristics of your reference audio
- The emotional style is applied to all generated speech
- Works with any audio format (WAV, MP3, etc.)
Best practices:
- Use audio clips with clear emotional expression
- Choose audio with consistent voice characteristics for best results
- Avoid background music or noise
Example:
AUDIO node → IndexTTS-2 Engine (emotion_audio)
Method 2: Character Voices Audio Reference
Use the opt_narrator output from the 🎭 Character Voices node as an emotion reference.
Setup:
- Add a 🎭 Character Voices node
- Select a voice with the desired emotional expression
- Connect
opt_narratoroutput to IndexTTS-2 Engineemotion_audioinput
Advantages:
- Leverages your existing voice library
- Consistent character-based emotions
- Easy to manage and organize
Example workflow:
🎭 Character Voices (David_Attenborough) → opt_narrator → IndexTTS-2 Engine (emotion_audio)
Method 3: Emotion Vectors
Use the 🌈 IndexTTS-2 Emotion Vectors node for precise manual control over 8 different emotions.
Connect its emotion_control output to the IndexTTS-2 Engine's emotion_control input.
Available emotions:
- Happy: Joy, excitement, positivity (0.0-1.2)
- Angry: Aggression, frustration, intensity (0.0-1.2)
- Sad: Melancholy, sorrow, downcast tone (0.0-1.2)
- Surprised: Amazement, shock, wonder (0.0-1.2)
- Afraid: Fear, anxiety, nervousness (0.0-1.2)
- Disgusted: Revulsion, displeasure, rejection (0.0-1.2)
- Calm: Peaceful, relaxed, steady (0.0-1.2)
- Melancholic: Thoughtful sadness, wistfulness (0.0-1.2)
Usage tips:
- Values above 1.0 create more intense emotional expression BUT MAY interfear with the cloned voice resemblance
- Combine multiple emotions for complex feelings (e.g., 0.8 Happy + 0.3 Surprised = excited joy)
- Start with single emotions, then experiment with combinations
- Use the
randombuttom to get a completely random emotion pattern. Might be too strong.
Method 4: Text Emotion (Dynamic Analysis)
Use the 🌈 IndexTTS-2 Text Emotion node for AI-powered emotion analysis with dynamic templates.
Connect its emotion_control output to the IndexTTS-2 Engine's emotion_control input.
Static Text Emotion
Provide a simple emotion description that applies to all text segments:
Input: "angry and frustrated"
Result: All speech generated with angry, frustrated emotion
Dynamic Templates with {seg}
Use the {seg} placeholder for contextual, per-segment emotion analysis:
Template examples:
"Happy character speaking: {seg}"- Cheerful narrator"Angry boss yelling: {seg}"- Aggressive authority figure"Calm meditation guide: {seg}"- Peaceful instructor"Excited game show host: {seg}"- Energetic presenter
How dynamic templates work:
- IndexTTS-2 processes each text segment separately
{seg}gets replaced with the actual segment text- QwenEmotion analyzes the combined context + content
- Unique emotion vector generated for each segment
Example:
Template: "Worried parent speaking: {seg}"
Segment: "Where have you been?"
Analysis: "Worried parent speaking: Where have you been?"
Result: Anxious, concerned vocal expression
Combining Audio with Vectors or Text
Connect both emotion sources when you want an audio performance to provide the base delivery while vectors or Qwen text analysis add a targeted emotional direction:
🎭 Character Voices (opt_narrator) ──→ emotion_audio
🌈 Emotion Vectors or Text Emotion ──→ emotion_control
IndexTTS-2 Engine
emotion_alpha is the shared overall emotion-intensity control. The audio
reference and vector/text signal are blended during IndexTTS-2 conditioning;
they are not generated as two separate voices and mixed afterward.
For example, an audio reference can provide a natural speaking style while a
[sad:+0.2|calm:-0.1] inline adjustment adds a restrained sadness to one
segment. A Qwen text preset can be used the same way.
Character audio and inline emotion parameters can share one tag:
[Bob:br_ivan_raiva3|sad:+0.25|calm:-0.10] Bob speaks with a restrained overlay.
[Bob:br_ivan_raiva3|emotion:"quiet grief masking frustration"] Bob uses Qwen text emotion too.
Inline Emotion Switching
Numeric emotion tags can replace or adjust the vector for one text segment:
[sad:0.7|calm:0.2] This uses explicit absolute values.
[sad:+0.3|calm:-0.2] This modifies the connected vector.
[vector:0,0,0.7,0,0,0.4,0,0.2] This supplies all eight absolute values.
[vector:+0,+0,+0.3,+0,+0,+0,+0,-0.2] This supplies eight deltas.
The full-vector order is happy, angry, sad, afraid, disgusted, melancholic, surprised, calm. Unsigned named values are absolute; + and - named values
are relative. A full vector is relative only when every value carries a sign.
Text-emotion controls support saved presets and quoted descriptions:
[emotion:restrained_anger] Text using a saved preset.
[emotion:"Restrained anger masking disappointment"] Direct text control.
[emotion:"Analyze this delivery as nervous anticipation: {seg}"] Dynamic control.
Inline controls override connected global vector/text values for that segment.
A character audio emotion reference such as [Alice:sad_reference] replaces the
global audio reference for that segment, but it can still blend with the
segment's vector/text control. Inline settings revert at the next segment and do
not mutate the connected vector.
The TTS Tag Editor provides the same interactive radar used by the IndexTTS-2
Emotion Vectors node. Click an existing numeric emotion tag to open its radar
as a contextual popover beside the tag. Create tags from Inline Tags →
IndexTTS-2, and use Manage Emotion Presets in its Text Emotion section for
the preset library. Text and vector presets are stored in
models/TTS/IndexTTS/emotion_presets.json.
Radar changes appear in the editor text immediately. Intermediate drag/input states are not added to undo history: closing the popover commits one undoable change, while Cancel or Escape restores the tag exactly as it was when opened.
The editor's Inline Tags tab also includes an IndexTTS-2 engine panel for
inserting full absolute/delta vectors, named emotion values, saved text presets,
quoted descriptions, and dynamic descriptions containing {seg}.
Emotion controls can be composed directly on character tags: place the caret on
[Bob:audio_reference] and add a vector or text emotion to append it as a pipe
parameter.
The named-emotion panel includes a magnitude slider and a press-drag-release radial picker: direction chooses the emotion and distance chooses its value. The operation dropdown determines whether that value is absolute, a positive delta, or a negative delta. Saved text and vector presets refresh in the sidebar immediately after they are changed in the preset manager.
Clicking a saved [emotion:preset_name] tag in the editor opens a small anchored
preset dropdown, allowing that line's preset to be swapped without opening the
full manager. Adding an emotion control while the caret is inside a pure emotion
tag replaces that tag; when the caret is inside a character/audio tag, the
editor appends or updates the emotion parameter after the existing | fields.
Named tags remain readable while only some emotions are active. If radar editing
activates all eight emotions, the editor automatically converts the result to the
shorter ordered [vector:...] form.
Character Tag Emotion Control
Control emotions per character using inline tags in your text: [Character:emotion_ref]
Syntax:
[CharacterName:emotion_reference]
emotion_reference options:
- Any character name from your voices library (uses that character's voice as emotion)
- Custom emotion references
Examples:
Hello everyone! [Alice:happy_sarah] I'm so excited to be here today!
[Bob:angry_tom] That's completely unacceptable behavior.
[Narrator:David] Meanwhile, in a distant galaxy...
[Bob:br_ivan_raiva3|sad:+0.25] Bob uses an audio reference plus a vector delta.
*assuming happy_sarah, angry_tom and David are alias or character voices in yout folder with that name
*assuming happy_sarah, angry_tom and David are alias or character voices in yout folder with that name
Character tag behavior:
- Character tags select the speaker and can provide a segment-local audio emotion reference
- A segment-local audio reference replaces the global audio reference for that segment
- Global or inline vector/text controls can still blend with that audio reference
- Other characters use the global audio and vector/text settings
- Allows mixing different emotion sources in the same audio
Emotion Alpha Control
The emotion_alpha parameter on the IndexTTS-2 Engine controls the intensity of emotion application:
Values:
- 0.0: No emotion applied (neutral voice)
- 0.5: 50% emotion blend (subtle emotional influence)
- 1.0: Full emotion intensity (standard recommended setting)
- 1.5: 150% enhanced emotion (more dramatic)
- 2.0: Maximum emotion intensity (very dramatic)
Practical Workflow Examples
Example 1: Multi-Character Drama with Individual Emotions
[Alice:happy_sarah] Welcome to our cooking show!
[Bob:serious_narrator] Today we'll be making pasta.
[Alice:excited_sarah] I can't wait to get started!
Setup:
- No global emotion control needed
- Each character gets individual emotion via tags
emotion_alpha=1.0for more expressiveness
Example 2: Mixed Emotion Control
Global setup:
- 🌈 IndexTTS-2 Text Emotion:
"Cheerful host presenting: {seg}" emotion_alpha=0.8
Text with overrides:
Welcome to our show! [Bob:serious_narrator] But first, a serious announcement.
[Alice:excited_sarah] Now back to our regular programming!
Result:
- Default segments use cheerful host emotion
- Bob's line uses serious narrator emotion (overrides global)
- Alice's line uses excited emotion (overrides global)
This comprehensive emotion control system gives you unprecedented flexibility in creating expressive, emotionally rich TTS audio for any application.