IndexTTS 2 / 2.5 Model Loader
IndexTTS voice cloning starts here — this Loader does the heavy lifting so the easy node stays easy
- model
If you've been eyeing local voice cloning but never got past the "install eleven different Python packages" stage, this is the node that ends that. IndexTTS 2 / 2.5 Model Loader is the entry point of the joyfoxai/ComfyUI-Index-TTS-25 pack, and its whole job is to load an IndexTTS model once, keep it cached in memory, and hand you a clean model handle to wire into the Synthesize node. It's the boring part. That's a compliment - the interesting part, actually making your voice say things, lives in IndexTTS 2 / 2.5 Synthesize.
Why you'd reach for it: IndexTTS is IndexTeam's open, Apache-ish TTS (well, the bundled source ships under a bilibili model-use license - worth a glance if you're planning a product) and it's one of the few open models doing genuinely decent zero-shot voice cloning locally. The 2.5 version is the notable one: most open TTS is English-first, and the KB's own audio essay calls multilingual production TTS the seam local models haven't closed. IndexTTS 2.5 takes a real swing at that with ZH, EN, JA, AR and ES support.
One honest caveat: this is a brand-new pack from a single maintainer (Comfy Registry publisher fengchun-lyu) with zero community mileage yet. It works - I read the source - but you're an early adopter, not a passenger on a well-worn suite.
How it works
The Loader does four things you don't have to think about:
- Scans your model folders. At startup it looks in
INDEXTTS_MODELS_DIR(if set), thenComfyUI/models/indextts, and populates themodel_namedropdown from whateverconfig.yamlfiles it finds. That's why you must restart ComfyUI after adding models. - Picks the right code path automatically. It reads the
versionfield in each model'sconfig.yamland importsinfer_v2orinfer_v2_5accordingly. No manual switching, and the official IndexTTS source is bundled in the pack. - Caches one model. The cache is process-wide and keyed by model + version + precision + device + acceleration flags. One Loader can feed several Synthesize nodes from that single copy. Change any of those settings and the old model is unloaded, the new one loaded - automatically.
- Handles the precision quirk.
bf16on IndexTTS 2 actually means FP16 (the v2 code path passesuse_fp16). On 2.5 it's real BF16.fp32is full precision on both and eats noticeably more VRAM.
The inputs that matter
There are seven inputs, and a beginner touches three of them:
model_name-IndexTTS-2orIndexTTS-2.5. Default is 2.5; switch to 2 if you're low on VRAM or only need ZH/EN.precision-bf16default,fp32if output sounds thin and you have VRAM to burn.device-auto,cuda:0, orcpu. Leave it onauto. (Yes, it runs on CPU if you insist. Slowly.)
The other four - cuda_kernel, deepspeed, gpt_accel, torch_compile - are optional acceleration, all default off, all needing extra installs (flash-attn for gpt_accel, a matching deepspeed build). Leave them off unless you're squeezing speed out of a setup you already have working.
Install
Clone it into custom_nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/joyfoxai/ComfyUI-Index-TTS-25.git
Install requirements into the same Python that launches ComfyUI - not your system Python, and never overwrite ComfyUI's own torch/torchaudio/CUDA to satisfy this pack:
cd ComfyUI
python -m pip install -r custom_nodes/ComfyUI-Index-TTS-25/requirements.txt
Then grab the models (the pack pins transformers to >=4.52.1,<4.58 with compat shims, and the Japanese fugashi/unidic-lite are required even if you only generate Chinese - install them if the loader complains):
cd ComfyUI/custom_nodes/ComfyUI-Index-TTS-25
./download_models.sh all # or: ./download_models.sh 2 ./download_models.sh 2.5
Models land in ComfyUI/models/indextts/IndexTTS-2 and /IndexTTS-2.5. Restart ComfyUI, find the nodes under right-click → audio → IndexTTS.
Common issues
- Dropdown shows a model but the loader errors "not found or incomplete." That's a Git LFS pointer or an interrupted download. Re-run the download script - it resumes - and confirm the required files are real (
gpt.pth,s2mel.pth,config.yaml, plusbpe.modelfor v2 orcodec.pthfor 2.5). - Missing
fugashi/ MeCab error.python -m pip install fugashi unidic-lite, into the ComfyUI Python, then restart. - Hugging Face 429s. Wait, set
HF_TOKEN, or setHF_ENDPOINT=https://hf-mirror.comand re-run. - New model doesn't show up. The dropdown scans at startup. Full restart, then refresh the browser - refreshing the page alone never reloads Python nodes.
Wire the model output into the Synthesize node's model input and you're ready to clone.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | IndexTTS-2.5 | 2 options: IndexTTS-2, IndexTTS-2.5 |
| precision | COMBO | bf16 | 2 options: bf16, fp32 |
| device | COMBO | auto | 3 options: auto, cuda:0, cpu |
| cuda_kernel | BOOLEAN | false | — |
| deepspeed | BOOLEAN | false | — |
| gpt_accel | BOOLEAN | false | — |
| torch_compile | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | INDEXTTS25_MODEL | — |