IndexTTS is a zero-shot text-to-speech system that clones a voice from a single
reference audio clip. The latest release, IndexTTS-2.5, supports Chinese,
English, Japanese, Spanish and Arabic, with fine-grained emotion control,
speaking speed control, pronunciation control (Pinyin / CMU phonemes /
Japanese Kana), and faster inference than IndexTTS-2.
🗂️ Model Zoo
Model
Demos
Paper
ModelScope
HuggingFace
IndexTTS-2.5
IndexTTS-2
IndexTTS-1.5
IndexTTS
📣 News
2026/08/10 🔥 We release IndexTTS-2.5
Now supports Chinese, English, Japanese, Spanish and Arabic, with faster inference than IndexTTS-2, while keeping the cross-lingual and timbre-emotion disentanglement capabilities.
Improved controllability of Chinese Pinyin, English CMU phonemes and Japanese Kana.
Speaking speed control via duration_factor (0.5x–2.0x duration).
The first autoregressive TTS model with precise synthesis duration control, supporting both controllable and uncontrollable modes. This functionality is not yet enabled in this release.
Highly expressive emotional speech synthesis, with emotion control through multiple input modalities.
2025/05/14 🔥 We release IndexTTS-1.5, significantly improving the model’s stability and its performance in English.
2025/03/25 🔥 We release IndexTTS-1.0 with model weights and inference code.
2025/02/12 🎉 We submitted our paper to arXiv, and released our demos and test sets.
🎬 Demos
IndexTTS-2.5: The Future of Voice, Now Generating
IndexTTS-2: The Future of Voice, Now Generating
🚀 Getting Started
1. Prerequisites
Make sure you have git installed, then download
this repository:
git clone https://github.com/index-tts/index-tts.git && cd index-tts
Example audio files are downloaded on demand from HuggingFace/ModelScope the
first time the WebUI starts, so Git LFS is no longer required.
2. Install Dependencies
We use uv to manage
the project’s dependency environment. It is required for a reliable
installation:
pip install -U uv # or see the link above for other install methods
uv sync --all-extras
This automatically creates a .venv project directory and installs the correct
versions of Python and all required dependencies.
If the download is slow, use a local mirror, e.g. one of these mirrors in China:
--all-extras: Automatically adds every extra feature listed below. You can
remove this flag if you want to customize your installation choices.
--extra webui: Adds WebUI support (recommended).
--extra deepspeed: Adds DeepSpeed support (may speed up inference on some
systems).
[!IMPORTANT]
Windows: DeepSpeed may be difficult to install. You can skip it by removing
the --all-extras flag and adding the other feature flags manually.
Linux/Windows: If you see a CUDA error during installation, make sure
NVIDIA’s CUDA Toolkit version
12.8 (or newer) is installed on your system.
[!IMPORTANT]
If the commands above aren’t available, carefully read the uv tool output —
it will tell you how to add the tools to your system’s PATH.
[!NOTE]
Some small models are downloaded automatically on first run. If your network
has slow access to HuggingFace, set a mirror before running the code:
export HF_ENDPOINT="https://hf-mirror.com"
4. Check GPU Acceleration
To diagnose your environment and see which GPUs are detected, use the included
utility:
uv run tools/gpu_check.py
💻 Usage
🌐 Web Demo
# IndexTTS-2.5 (default)
uv run webui.py
# IndexTTS-2
uv run webui.py --version 2 --model_dir ./checkpoints_2
Open your browser and visit http://127.0.0.1:7860 to see the demo.
You can adjust the settings to enable BF16 (IndexTTS-2.5) / FP16 (IndexTTS-2)
inference (lower VRAM usage), DeepSpeed acceleration, compiled CUDA kernels for
speed, etc. All available options can be seen via:
uv run webui.py -h
[!IMPORTANT]
FP16/BF16 (half-precision) inference is faster and uses less VRAM, with
very small quality loss.
DeepSpeedmay speed up inference on some systems, but it could also make
it slower — it depends on your hardware, drivers and OS. Try both ways.
All uv commands automatically activate the correct per-project virtual
environment. Do not manually activate any environment before running uv
commands, as that can cause dependency conflicts.
To run scripts, use uv run <file.py> so the code runs inside the uv
environment. You may also need to add the current directory to PYTHONPATH:
# IndexTTS2.5
PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_v2_5.py \
--cfg_path checkpoints/config.yaml \
--model_dir checkpoints \
--text "Hello world" \
--lang EN
The default --prompt_wav lives in examples/, which is populated the first
time the WebUI starts. To fetch it without the WebUI:
uv run python -c "from indextts.utils.examples_downloader import ensure_examples_available; ensure_examples_available()"
For IndexTTS2, use the Python API below — indextts/infer_v2.py runs a
benchmark loop against a hardcoded checkpoints/ directory, not the
checkpoints_2 layout from step 3.
text = "Translate for me, what is a surprise!"
# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, output_path="gen.wav", verbose=True)
# IndexTTS2.5 (multilingual, with language selection)
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="EN", output_path="gen.wav", verbose=True)
2. Emotion control with a separate emotional reference audio
You can omit the emotional reference audio and instead provide an 8-float list
specifying the intensity of each emotion, in the order
[happy, angry, sad, afraid, disgusted, melancholic, surprised, calm].
Use use_random to introduce stochasticity during inference (default: False).
[!NOTE]
Enabling random sampling reduces the voice cloning fidelity.
5. Emotion control from the text itself (use_emo_text)
Enable use_emo_text to automatically convert your text script into emotion
vectors. An emo_alpha around 0.6 (or lower) is recommended for more natural
speech. Randomness can be introduced with use_random (default: False).
[!IMPORTANT]
For IndexTTS-2.5, use_emo_text=True requires constructing IndexTTS2 with use_qwen_emo=True (e.g. tts = IndexTTS2(..., use_qwen_emo=True)), otherwise it raises a RuntimeError.
(IndexTTS-2 does not require this flag.)
6. Emotion control with an explicit emotion description (emo_text)
Provide a specific text emotion description via emo_text, which is converted
into emotion vectors — giving you separate control of the text script and the
emotion description:
A value greater than 1.0 slows down the speech, a value less than 1.0
speeds it up. Default: 1.0 (normal speed). Valid range: 0.5 - 2.0.
text = "大家好,欢迎来到IndexTTS的语速控制演示。"
# IndexTTS2.5
# Slow down (1.2x duration)
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="ZH", output_path="gen_slow.wav", duration_factor=1.2, verbose=True)
# Speed up (0.8x duration)
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, lang="ZH", output_path="gen_fast.wav", duration_factor=0.8, verbose=True)
🗣️ Pronunciation Control
IndexTTS2.5 — Pinyin / CMU phonemes / Japanese Kana:
IndexTTS2.5 supports these character replacements with better
instruction-following capability. For the full list of valid entries, see
checkpoints/pinyin.vocab for Pinyin and the
CMU dictionary
for English phonemes.
他在银<行|XING2>里<行|HANG2>走了半天,发现这笔业务办不<行|HANG2>。
He had a <minute|M IH1 . N AH0 T> to examine the <minute|M AY0 . N UW1 T> details of the contract.
彼は料理が<上手|じょうず>だが、囲碁では<上手|うわて>に負けた。
IndexTTS2 — Pinyin:
IndexTTS2 supports mixed modeling of Chinese characters and Pinyin. To activate
Pinyin control, provide text with specific Pinyin annotations. Note that Pinyin
control does not work for every possible consonant–vowel combination; only
valid Chinese Pinyin cases are supported (see checkpoints/pinyin.vocab).
You are welcome to join our community! 🌏 欢迎大家来交流讨论!
[!CAUTION]
Thank you for your support of the bilibili IndexTTS project!
Please note that the only official channel maintained by the core team is: https://github.com/index-tts/index-tts.
Any other websites or services are not official, and we cannot guarantee their security, accuracy, or timeliness.
For the latest updates, please always refer to this official repository.
🌟 If you find our work helpful, please leave us a star and cite our papers.
IndexTTS2.5:
@misc{li2026indextts25technicalreport,
title={IndexTTS 2.5 Technical Report},
author={Yunpei Li and Xun Zhou and Jinchao Wang and Lu Wang and Yong Wu and Siyi Zhou and Yiquan Zhou and Yining Wang and Yaogen Yang and Zhetao Hu and Shiyao Duan and Jiacheng Xu and Bin Xia and Jingchen Shu},
year={2026},
eprint={2601.03888},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2601.03888},
}
IndexTTS2:
@article{zhou2025indextts2,
title={IndexTTS2: A Breakthrough in Emotionally Expressive and Duration-Controlled Auto-Regressive Zero-Shot Text-to-Speech},
author={Siyi Zhou and Yiquan Zhou and Yi He and Xun Zhou and Jinchao Wang and Wei Deng and Jingchen Shu},
journal={arXiv preprint arXiv:2506.21619},
year={2025}
}
IndexTTS:
@article{deng2025indextts,
title={IndexTTS: An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System},
author={Wei Deng and Siyi Zhou and Jingchen Shu and Jinchao Wang and Lu Wang},
journal={arXiv preprint arXiv:2502.05512},
year={2025},
doi={10.48550/arXiv.2502.05512},
url={https://arxiv.org/abs/2502.05512}
}
An Industrial-Level Controllable and Efficient Zero-Shot Text-to-Speech System
简体中文 | English | 日本語 | Español | العربية
IndexTTS is a zero-shot text-to-speech system that clones a voice from a single reference audio clip. The latest release, IndexTTS-2.5, supports Chinese, English, Japanese, Spanish and Arabic, with fine-grained emotion control, speaking speed control, pronunciation control (Pinyin / CMU phonemes / Japanese Kana), and faster inference than IndexTTS-2.
🗂️ Model Zoo
📣 News
2026/08/10🔥 We release IndexTTS-2.5duration_factor(0.5x–2.0x duration).2025/09/08🔥 We release IndexTTS-22025/05/14🔥 We release IndexTTS-1.5, significantly improving the model’s stability and its performance in English.2025/03/25🔥 We release IndexTTS-1.0 with model weights and inference code.2025/02/12🎉 We submitted our paper to arXiv, and released our demos and test sets.🎬 Demos
IndexTTS-2.5: The Future of Voice, Now Generating
IndexTTS-2: The Future of Voice, Now Generating
🚀 Getting Started
1. Prerequisites
Make sure you have git installed, then download this repository:
Example audio files are downloaded on demand from HuggingFace/ModelScope the first time the WebUI starts, so Git LFS is no longer required.
2. Install Dependencies
We use uv to manage the project’s dependency environment. It is required for a reliable installation:
This automatically creates a
.venvproject directory and installs the correct versions of Python and all required dependencies.If the download is slow, use a local mirror, e.g. one of these mirrors in China:
3. Download Models
Download the required models via uv tool:
Via
huggingface-cli:Or via
modelscope:4. Check GPU Acceleration
To diagnose your environment and see which GPUs are detected, use the included utility:
💻 Usage
🌐 Web Demo
Open your browser and visit
http://127.0.0.1:7860to see the demo.You can adjust the settings to enable BF16 (IndexTTS-2.5) / FP16 (IndexTTS-2) inference (lower VRAM usage), DeepSpeed acceleration, compiled CUDA kernels for speed, etc. All available options can be seen via:
🚀 Serving with vLLM
For production deployment, see the vLLM recipe for IndexTTS.
📝 Python API
To run scripts, use
uv run <file.py>so the code runs inside theuvenvironment. You may also need to add the current directory toPYTHONPATH:The default
--prompt_wavlives inexamples/, which is populated the first time the WebUI starts. To fetch it without the WebUI:For IndexTTS2, use the Python API below —
indextts/infer_v2.pyruns a benchmark loop against a hardcodedcheckpoints/directory, not thecheckpoints_2layout from step 3.0. Initialize IndexTTS
1. Voice cloning with a single reference audio
2. Emotion control with a separate emotional reference audio
3. Adjust emotion intensity with
emo_alphaWhen an emotional reference audio is specified,
emo_alphaadjusts how much it affects the output. Valid range:0.0 - 1.0, default:1.0(100%).4. Emotion control with an emotion vector
You can omit the emotional reference audio and instead provide an 8-float list specifying the intensity of each emotion, in the order
[happy, angry, sad, afraid, disgusted, melancholic, surprised, calm]. Useuse_randomto introduce stochasticity during inference (default:False).5. Emotion control from the text itself (
use_emo_text)Enable
use_emo_textto automatically convert yourtextscript into emotion vectors. Anemo_alphaaround 0.6 (or lower) is recommended for more natural speech. Randomness can be introduced withuse_random(default:False).6. Emotion control with an explicit emotion description (
emo_text)Provide a specific text emotion description via
emo_text, which is converted into emotion vectors — giving you separate control of the text script and the emotion description:7. Speaking speed control (
duration_factor)A value greater than
1.0slows down the speech, a value less than1.0speeds it up. Default:1.0(normal speed). Valid range:0.5 - 2.0.🗣️ Pronunciation Control
IndexTTS2.5 — Pinyin / CMU phonemes / Japanese Kana:
IndexTTS2.5 supports these character replacements with better instruction-following capability. For the full list of valid entries, see
checkpoints/pinyin.vocabfor Pinyin and the CMU dictionary for English phonemes.IndexTTS2 — Pinyin:
IndexTTS2 supports mixed modeling of Chinese characters and Pinyin. To activate Pinyin control, provide text with specific Pinyin annotations. Note that Pinyin control does not work for every possible consonant–vowel combination; only valid Chinese Pinyin cases are supported (see
checkpoints/pinyin.vocab).🕰️ IndexTTS-1.5 (Legacy)
You can also use the previous IndexTTS1 model by importing a different module:
For more details, see README_INDEXTTS_1_5, or visit the IndexTTS1 repository at index-tts:v1.5.0.
📊 Evaluation
Table 1: Zero-shot TTS on CV3-Eval (Arabic uses an in-house test set). †Cited from the original paper.
Table 2: Cross-lingual TTS on CV3-Eval (Chinese prompt → target language, Arabic uses an in-house test set).
⚡ Inference Speed
RTF (wall-clock time / generated audio duration, lower is faster) on an NVIDIA RTX 4090,
kv_cache=True.🤝 Community & Contact
You are welcome to join our community! 🌏 欢迎大家来交流讨论!
For commercial usage and cooperation, please contact indexspeech@bilibili.com.
📚 Citation
🌟 If you find our work helpful, please leave us a star and cite our papers.
IndexTTS2.5:
IndexTTS2:
IndexTTS:
🙏 Acknowledgements
📄 License
This project is released under the bilibili Model Use License Agreement. Please also read the DISCLAIMER before use.