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)
- Clone the repo
git clone https://github.com/index-tts/index-tts.git && cd index-tts - Install the environment – the project uses the modern Python package manager uv.
Optional: add a Chinese mirror (pip install -U uv # install uv itself uv sync --all-extras # creates a .venv and installs all deps--default-index) if you have a slow connection. - Download a model (e.g., the newest IndexTTS‑2.5) via the Hugging Face CLI:
(You can also useuv tool install huggingface-hub hf download IndexTeam/IndexTTS-2.5 --local-dir=checkpointsmodelscope-hubwith the same command pattern.) - Run the web UI (the simplest way to test the system):
Openuv run webui.py # defaults to IndexTTS‑2.5 # or, for the older 2.0 model: uv run webui.py --version 2 --model_dir ./checkpoints_2http://127.0.0.1:7860in 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
LICENSEfile). 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