Nodes/ComfyUI-Index-TTS/Index TTS 2 - Base
ComfyUI Node

Index TTS 2 - Base

The plain-vanilla entry point into IndexTTS2

By chenpipi0807·Created about a year ago·Updated about a month ago· 720
Index TTS 2 - Base
  • reference_audio
  • cache_control
  • audio
  • seed
  • subtitle
textHello, this is IndexTTS2.
modeAuto
do_sample_modeon
temperature0.80
top_p0.80
top_k30
num_beams3
repetition_penalty10.0
length_penalty0.0
max_mel_tokens1500
max_tokens_per_sentence120
seed0

IndexTTS-2 is the pack's newer, heavier model generation, and it got split into four purpose-built nodes instead of one node with a pile of optional inputs. This is the plain one: text in, cloned voice out, no emotion controls attached. If you don't care about steering the emotional tone of the output - you just want clean, accurate voice cloning on the newer model - this is the node, and it's the one to start with before reaching for the Emotion Audio/Text/Vector variants, which are this exact same node with one extra control bolted on.

How it fits together

IndexTTS-2's whole pitch over the original IndexTTS is better voice fidelity plus a real emotion-control pipeline underneath - a Qwen-based emotion classifier, a MaskGCT semantic codec, a CampPlus speaker embedding model, and a BigVGAN vocoder all work together behind the scenes. The Base node runs that full stack but skips the emotion inputs, so you get IndexTTS-2's cloning quality without deciding how "happy" or "sad" the delivery should sound. If you later want emotion steering, swap this node for Emotion Audio, Emotion Text, or Emotion Vector - same required inputs, same outputs, just one more knob.

Inputs and outputs that matter

Required: text, reference_audio (the voice to clone), and mode (Auto / Duration / Tokens) - this controls how the model paces the generated clip's length. Leave it on Auto and let the model decide from the input length; Duration and Tokens exist for when you want tighter control over output timing, working alongside max_mel_tokens and max_tokens_per_sentence below. Most people never touch it.

Optional: the usual sampling dials (temperature, top_p, top_k, num_beams, repetition_penalty, length_penalty), do_sample_mode (turn off for fully deterministic, greedy generation), max_mel_tokens / max_tokens_per_sentence (raise these if long text gets truncated), seed, and cache_control - wire in the output of an Index TTS 2 - Cache Control node here if you want to control whether TTS2's weights stay resident in VRAM between runs.

Outputs: audio, seed (the actual value used, since 0 means "randomize"), and subtitle - a plain-text string of what got spoken, handy for logging or burning captions downstream.

Install

ComfyUI Manager: search ComfyUI-Index-TTS, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/chenpipi0807/ComfyUI-Index-TTS.git
cd ComfyUI-Index-TTS
pip install -r requirements.txt

IndexTTS-2's model stack is genuinely large and lives under ComfyUI/models/IndexTTS-2/: the base weights, a qwen0.6bemo4-merge emotion-classifier folder, MaskGCT's semantic_codec/model.safetensors, CampPlus's speaker-embedding checkpoint, and Facebook's w2v-bert-2.0 feature extractor, plus a BigVGAN vocoder checkpoint and a handful of local files (gpt.pth, s2mel.pth, bpe.model, and the emotion/speaker matrices). Don't hand-download all of that - the pack ships TTS2_download.py specifically to fetch and place it, with resume support and a China mirror option (HF_ENDPOINT=https://hf-mirror.com). Run it with python ComfyUI/custom_nodes/ComfyUI-Index-TTS/TTS2_download.py after pip install -U huggingface_hub.

Where people get burned

The most common first-run failure is a 401 on facebook/w2v-bert-2.0 - that repo is gated on Hugging Face, so download it locally into ComfyUI/models/IndexTTS-2/w2v-bert-2.0/ rather than letting the node try to fetch it live. Second is transformers version drift: TTS2 wants 4.52.1 or 4.54.1, and breaks on 4.57.1+; if you're on PyTorch 2.7 specifically, the pack's own fallback is downgrading to transformers==4.48.3. If you see a SafeTensorFile has no attribute get_slice error, upgrade safetensors to 0.4.3+. And CUDA errors mid-run usually clear up with a restart or by dropping num_beams. On the quality side, community feedback on IndexTTS-2 broadly agrees the reference clip does most of the heavy lifting - a loud, expressive sample clones far better than a quiet, flat one, and reference clips longer than a few minutes have been known to blow past VRAM on 24GB cards, so trim before you feed it in.

Categoryaudio

Inputs (14)

NameTypeDefaultDescription
textSTRINGHello, this is IndexTTS2.
reference_audioAUDIO
modeCOMBOAuto3 options: Auto, Duration, Tokens
do_sample_modeoptCOMBOon2 options: off, on
temperatureoptFLOAT0.800.1–2
top_poptFLOAT0.800–1
top_koptINT300–100
num_beamsoptINT31–10
repetition_penaltyoptFLOAT10.01–10
length_penaltyoptFLOAT0.0-2–2
max_mel_tokensoptINT150050–1815
max_tokens_per_sentenceoptINT1200–600
seedoptINT00–4294967295
cache_controloptDICT

Outputs (3)

NameTypeDescription
audioAUDIO
seedINT
subtitleSTRING