Nodes/ComfyUI-Index-TTS/Index TTS 2.5 - Voice Base
ComfyUI Node

Index TTS 2.5 - Voice Base

Cloning a voice you've already extracted

By chenpipi0807·Created about a year ago·Updated 4 days ago· 748
Index TTS 2.5 - Voice Base
  • voice
  • cache_control
  • audio
  • seed
  • subtitle
text大家好,这是使用已提取音色特征生成的语音。
langZH
duration_factor1.00
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
interval_silence_ms200
text_normalizationtrue
seed0

This is the synth half of ComfyUI-Index-TTS's "persisted voice" workflow, and the node you'll actually reach for when you want to make speech. Where the plain Index TTS 2.5 – Base takes a reference WAV and re-encodes it on every run, Voice Base takes an already-extracted INDEXTTS25_VOICE object and goes straight to generation. Same model, same voice quality, minus the repeated encoding. If you're going to synthesize more than once from one reference clip, this is the node to build around.

How it works

Internally it primes the loaded 2.5 engine's caches with the five tensors baked into the voice object (spk_cond, style, s2mel_prompt, ref_mel, emo_cond), stamps a content fingerprint as the audio prompt, and calls the exact same inference path the Base node uses - GPT-style token generation into the codec, mel synthesis, BigVGAN vocoder on the way out. Only the reference-audio front end is skipped, which is the whole point: it's the identical engine, just warmed up from a file instead of a recording.

You need a voice first, from either Extract Voice (fresh, from a WAV) or Load Voice (from a saved .pt). There is no reference_audio input here - feed this node raw audio and it will tell you, not gracefully.

The inputs that matter

  • text (multiline) - what gets spoken. The pronunciation markers from the Base node work here too, since it runs the same engine: <行|XING2> for Chinese pinyin, <minute|M AY0 . N UW1 T> CMU phonemes for English, <上手|じょうず> kana for Japanese.
  • voice - the conditioning object. No default; wire it or nothing happens.
  • lang - ZH / EN / JA / ES / AR, or ZH/EN mixed. Default ZH. The fun bit: because the conditioning is language-agnostic, this is where cross-language cloning happens - a Chinese reference voice can talk English or Japanese.
  • duration_factor - native speed control, 0.5–2.0. Above 1 slows down, below 1 speeds up, 1.0 is normal. This is a real feature, not the post-processing speed-shift the older 2.0 nodes used.

Everything else is optional sampling gear and you can mostly ignore it at first: do_sample_mode (default "on"; flick it to "off" to force pure beam search), temperature 0.8, top_p 0.8, top_k 30, num_beams 3, repetition_penalty 10.0, max_mel_tokens 1500, seed for reproducible repeats. Two worth knowing once you're past the first test: max_tokens_per_sentence / interval_silence_ms control sentence splitting and the pause between segments, and cache_control (a DICT from the pack's Cache Control node) decides whether the models stay resident after the run.

Outputs

audio (AUDIO) goes to SaveAudio or PreviewAudio - that's the finished speech. seed echoes back the seed you used. subtitle is a small JSON string (one Narrator entry with start/end times) for when you want to drive burned-in captions.

Installing and gotchas

Same pack install as the rest of the 2.5 nodes - Manager search "IndexTTS", or git clone https://github.com/chenpipi0807/ComfyUI-Index-TTS.git into custom_nodes, pip install -r requirements.txt, then get the models into ComfyUI/models/IndexTTS-2.5/ (the TTS2_5_download.py script does it in one go, mirror option included).

The one thing that catches people: by default this node unloads the entire 2.5 engine and clears CUDA after every run. That keeps a 12 GB card happy but means each queue re-loads a few gigabytes of weights - feels sluggish when you're batch-testing. If you have VRAM to spare, wire a Cache Control node with keep_cached on and repeated runs get noticeably snappier. Turn it off when you're done.

Missing-model errors are the other classic: the loader validates all core files up front and names exactly what's absent from IndexTTS-2.5/, so run the download script and check the folder. And if Load Voice feeds you a .pt that errors as unsupported format, it's from a different model version - re-extract it with Extract Voice rather than fighting it.

Categoryaudio/IndexTTS 2.5/voice

Inputs (17)

NameTypeDefaultDescription
textSTRING大家好,这是使用已提取音色特征生成的语音。
voiceINDEXTTS25_VOICE
langCOMBOZH6 options: ZH, EN, JA, ES, AR, ZH/EN
duration_factorFLOAT1.000.5–2
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
interval_silence_msoptINT2000–2000
text_normalizationoptBOOLEANtrue
seedoptINT00–4294967295
cache_controloptDICT

Outputs (3)

NameTypeDescription
audioAUDIO
seedINT
subtitleSTRING