index-tts/index-tts

An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System

📚 What is IndexTTS?

IndexTTS is an open‑source, zero‑shot text‑to‑speech (TTS) system that can clone a voice from just a single reference audio clip. The latest version, IndexTTS‑2.5, works in five languages (Chinese, English, Japanese, Spanish, Arabic) and lets you control:

  • Emotion – via an emotion‑reference audio, an explicit emotion vector, or automatically from the text.
  • Speaking speed – with a duration_factor (0.5×‑2.0×).
  • Pronunciation – by supplying Pinyin, CMU phonemes, or Japanese Kana directly in the input text.
  • Voice timbre – the cloned voice retains the speaker’s timbre while you can still change language.

The model is positioned as an “industrial‑level” solution: it runs fast enough for real‑time use, supports half‑precision (BF16/FP16) inference, and can be served at scale with the vLLM recipe.


🚀 Getting Started (Quick‑Start)

  1. Clone the repo
    git clone https://github.com/index-tts/index-tts.git && cd index-tts
    
  2. Install the environment – the project uses the modern Python package manager uv.
    pip install -U uv          # install uv itself
    uv sync --all-extras       # creates a .venv and installs all deps
    
    Optional: add a Chinese mirror (--default-index) if you have a slow connection.
  3. Download a model (e.g., the newest IndexTTS‑2.5) via the Hugging Face CLI:
    uv tool install huggingface-hub
    hf download IndexTeam/IndexTTS-2.5 --local-dir=checkpoints
    
    (You can also use modelscope-hub with the same command pattern.)
  4. Run the web UI (the simplest way to test the system):
    uv run webui.py          # defaults to IndexTTS‑2.5
    # or, for the older 2.0 model:
    uv run webui.py --version 2 --model_dir ./checkpoints_2
    
    Open http://127.0.0.1:7860 in a browser. The UI lets you upload a reference voice, type text, pick a language, and tweak the controls described above.

🛠️ Core Features

Feature How it works Example flag / API call
Zero‑shot voice cloning A single reference wav is fed to the model as spk_audio_prompt. tts.infer(spk_audio_prompt='voice.wav', text='Hello')
Emotion control Provide an emotion‑reference wav (emo_audio_prompt), an 8‑dim emotion vector (emo_vector), or let the model infer emotions from the text (use_emo_text). emo_alpha=0.6, emo_vector=[0,0,0.8,0,0,0,0,0]
Speed control Scale the synthesis duration with duration_factor (0.5‑2.0). duration_factor=1.2 (slow)
Pronunciation control Insert `<phoneme X>` tags in the input text. Supports Chinese Pinyin, English CMU phonemes, Japanese Kana.
Half‑precision inference BF16 for IndexTTS‑2.5, FP16 for IndexTTS‑2 – reduces VRAM and speeds up generation. use_bf16=True (constructor)
DeepSpeed / compiled CUDA kernels Optional acceleration for compatible GPUs. --extra deepspeed during install
Production serving A ready‑made vLLM recipe (recipes.vllm.ai/IndexTeam/IndexTTS-2.5). See the linked recipe page

📦 Model Zoo (pre‑trained checkpoints)

Model Languages Demo Model download (HF / ModelScope)
IndexTTS‑2.5 ZH, EN, JA, ES, AR [Demo page] IndexTeam/IndexTTS-2.5
IndexTTS‑2 ZH, EN [Demo page] IndexTeam/IndexTTS-2
IndexTTS‑1.5 ZH, EN [Demo page] IndexTeam/IndexTTS-1.5
IndexTTS‑1 ZH, EN [Demo page] IndexTeam/Index-TTS

🧑‍💻 Using the Python API (code snippet)

# Initialise (choose the version you downloaded)
from indextts.infer_v2_5 import IndexTTS2   # for 2.5
tts = IndexTTS2(
    cfg_path='checkpoints/config.yaml',
    model_dir='checkpoints',
    use_bf16=True,          # half‑precision
)

# Simple voice clone
tts.infer(
    spk_audio_prompt='examples/voice_01.wav',
    text='Hello world',
    lang='EN',
    output_path='gen.wav',
    verbose=True,
)

# Emotion + speed control
tts.infer(
    spk_audio_prompt='examples/voice_07.wav',
    text='这是一段情绪化的中文',
    lang='ZH',
    emo_audio_prompt='examples/emo_sad.wav',
    emo_alpha=0.8,
    duration_factor=0.9,
    output_path='emo.wav',
)

The same pattern works for the older IndexTTS2 class (indextts.infer_v2).


📊 Reported Performance

The authors provide two benchmark tables on the CV3‑Eval suite (multilingual speech quality and cross‑lingual synthesis). Highlights for the flagship IndexTTS‑2.5‑RL (reinforced‑learning variant):

  • Average word‑error‑rate (WER) ≈ 6 % across five languages.
  • Average subjective score (SS) ≈ 73 / 100, comparable to larger models (e.g., VoxCPM2 with 2 B parameters).
  • Model size: 0.8 B parameters – considerably smaller than many competing systems.

🛡️ License & Community

  • License: The repository is released under the Apache‑2.0 license (as indicated in the repo’s LICENSE file). This permits commercial use, modification, and redistribution.
  • Community: A Discord server is linked for support, and the project maintains a Discord badge in the README. Issues and pull requests are accepted via GitHub.

📚 When to Use IndexTTS?

  • Rapid prototyping of voice‑cloned speech in multiple languages.
  • Interactive applications (e.g., virtual assistants, game characters) where you need low‑latency TTS with controllable emotion and speed.
  • Research on zero‑shot multilingual TTS, voice cloning, or controllable speech synthesis.
  • Production – the vLLM recipe and half‑precision inference make it feasible to serve at scale.

🎯 TL;DR

IndexTTS is a real, open‑source, zero‑shot multilingual TTS engine that clones a voice from a single audio clip and offers fine‑grained control over emotion, speed, and pronunciation. It ships with ready‑to‑use pretrained models, a simple uv‑based install, a web UI, and a Python API, and it can be deployed in production via vLLM. The project is actively maintained (latest release 2.5 in Aug 2026) and licensed under Apache‑2.0.

Related

  • Project
  • Project
  • Project
  • Project
  • Project