Baike.dev
All toolsTrendingOpen sourceNewsSubmit
Log in
< 返回工具列表
I

index-tts

> 编程语言
开源

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

22.3K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

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

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).
    • Production deployment supported via vLLM.
  • 2025/09/08 🔥 We release IndexTTS-2
    • 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

🚀 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:

uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"

uv sync --all-extras --default-index "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"

[!TIP] Available Extra Features:

  • --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.

3. Download Models

Download the required models via uv tool:

Via huggingface-cli:

uv tool install "huggingface-hub"

# IndexTTS-2.5
hf download IndexTeam/IndexTTS-2.5 --local-dir=checkpoints

# IndexTTS-2
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints_2

Or via modelscope:

uv tool install "modelscope"

# IndexTTS-2.5
modelscope download --model IndexTeam/IndexTTS-2.5 --local_dir checkpoints

# IndexTTS-2
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints_2

[!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.

DeepSpeed may 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.

🚀 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 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.

0. Initialize IndexTTS

# IndexTTS2
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints_2/config.yaml", model_dir="checkpoints_2", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)

# IndexTTS2.5
from indextts.infer_v2_5 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_bf16=True)

1. Voice cloning with a single reference audio

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

text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"

# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)

# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, lang="ZH", output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)

3. Adjust emotion intensity with emo_alpha

When an emotional reference audio is specified, emo_alpha adjusts how much it affects the output. Valid range: 0.0 - 1.0, default: 1.0 (100%).

text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"

# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", emo_alpha=0.9, verbose=True)

# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", lang="ZH", emo_audio_prompt="examples/emo_sad.wav", emo_alpha=0.9, verbose=True)

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]. Use use_random to introduce stochasticity during inference (default: False).

[!NOTE] Enabling random sampling reduces the voice cloning fidelity.

text = "对不起嘛!我的记性真的不太好,但是和你在一起的事情,我都会努力记住的~"

# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_09.wav', text=text, output_path="gen.wav", emo_vector=[0, 0, 0.8, 0, 0, 0, 0, 0], use_random=False, verbose=True)

# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_09.wav', text=text, lang="ZH", output_path="gen.wav", emo_vector=[0, 0, 0.8, 0, 0, 0, 0, 0], use_random=False, verbose=True)

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.)

text = "快躲起来!是他要来了!他要来抓我们了!"

# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)

# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, lang="ZH", output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)

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:

text = "快躲起来!是他要来了!他要来抓我们了!"
emo_text = "你吓死我了!你是鬼吗?"

# IndexTTS2
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, emo_text=emo_text, use_random=False, verbose=True)

# IndexTTS2.5
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, lang="ZH", output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, emo_text=emo_text, use_random=False, verbose=True)

7. Speaking speed control (duration_factor)

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

核心特点

  • •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).
  • •Production deployment supported via vLLM.
  • •2025/09/08 🔥 We release IndexTTS-2
  • •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.

> 标签

Pythonbigvgancross-lingualindexttstext-to-speech

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月9日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言
Baike.dev

baike.dev helps you discover great languages, frameworks, databases, DevOps and cloud-native tools.

Quick links

  • Home
  • All tools
  • Trending
  • Open source

About

  • About us
  • Community
  • News

Contribute

Found a great developer tool? Share it with the community.

Submit a tool
© 2026 baike.dev Developer EncyclopediaUpdated daily · Discover great developer tools