Nodes/IndexTTS 2 / 2.5/IndexTTS 2 / 2.5 Model Loader
ComfyUI Node

IndexTTS 2 / 2.5 Model Loader

IndexTTS voice cloning starts here — this Loader does the heavy lifting so the easy node stays easy

By joyfoxai·Created about a month ago·Updated 25 days ago· 1
IndexTTS 2 / 2.5 Model Loader
    • model
    model_nameIndexTTS-2.5
    precisionbf16
    deviceauto
    cuda_kernelfalse
    deepspeedfalse
    gpt_accelfalse
    torch_compilefalse

    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), then ComfyUI/models/indextts, and populates the model_name dropdown from whatever config.yaml files it finds. That's why you must restart ComfyUI after adding models.
    • Picks the right code path automatically. It reads the version field in each model's config.yaml and imports infer_v2 or infer_v2_5 accordingly. 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. bf16 on IndexTTS 2 actually means FP16 (the v2 code path passes use_fp16). On 2.5 it's real BF16. fp32 is 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-2 or IndexTTS-2.5. Default is 2.5; switch to 2 if you're low on VRAM or only need ZH/EN.
    • precision - bf16 default, fp32 if output sounds thin and you have VRAM to burn.
    • device - auto, cuda:0, or cpu. Leave it on auto. (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, plus bpe.model for v2 or codec.pth for 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 set HF_ENDPOINT=https://hf-mirror.com and 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.

    Categoryaudio/IndexTTS

    Inputs (7)

    NameTypeDefaultDescription
    model_nameCOMBOIndexTTS-2.52 options: IndexTTS-2, IndexTTS-2.5
    precisionCOMBObf162 options: bf16, fp32
    deviceCOMBOauto3 options: auto, cuda:0, cpu
    cuda_kernelBOOLEANfalse
    deepspeedBOOLEANfalse
    gpt_accelBOOLEANfalse
    torch_compileBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    modelINDEXTTS25_MODEL