One Open Source Project a Day (Part 60): IndexTTS - Bilibili's Industrial Zero-Shot Text-to-Speech System

Deep dive into IndexTTS, Bilibili IndexTeam's open-source zero-shot TTS system — emotion control, voice cloning, duration control; IndexTTS2 decouples emotion and timbre, multi-modal emotion input, industrial-grade controllability

·5 min read·AI & Machine Learning

Introduction

"The Future of Voice, Now Generating."

This is Part 60 of the "One Open Source Project a Day" series. Today's project is IndexTTS (GitHub).

Want industrial-grade, controllable, efficient zero-shot text-to-speech? IndexTTS is Bilibili IndexTeam's open-source zero-shot TTS system: voice cloning, emotion control, duration control (IndexTTS2). Supports emotion reference audio, emotion vectors, text emotion descriptions; decouples emotion and timbre; multilingual (Chinese, English, etc.); WebUI and Python API; uv for dependency management.

What You'll Learn

  • IndexTTS core capabilities and architecture
  • IndexTTS2 emotion and duration control
  • Voice cloning, emotion reference, text emotion usage
  • Environment setup and WebUI quick start
  • Comparison with other TTS systems

Prerequisites

  • Basic understanding of TTS and speech synthesis
  • NVIDIA GPU with CUDA 12.8+ (recommended)

Project Background

Project Overview

IndexTTS is Bilibili IndexTeam's open-source industrial-grade controllable zero-shot TTS system. Users provide a reference audio clip to clone voice; emotion can be controlled independently via emotion reference audio, 8‑dimensional emotion vectors, or text descriptions. IndexTTS2 adds precise duration control for autoregressive TTS (first of its kind), supports controllable and uncontrollable modes, decouples emotion and timbre, and excels in multilingual synthesis.

Team

  • Team: Bilibili IndexTeam (indexspeech@bilibili.com)
  • Core authors: Wei Deng, Siyi Zhou, Jingchen Shu, Xun Zhou, Jinchao Wang, and others
  • Community: QQ groups, Discord

Project Data


Core Features

Main Capabilities

CapabilityDescription
Zero-shot voice cloningSingle reference audio clone
Emotion controlEmotion reference audio, 8‑dim emotion vector, text emotion description
Emotion–timbre decouplingTimbre from timbre prompt, emotion from emotion prompt; independent control
Duration controlIndexTTS2 precise duration control (first for autoregressive TTS)
MultilingualChinese, English, etc.; IndexTTS1.5 improves English significantly
Pinyin controlPinyin annotations for precise pronunciation

Use Cases

  1. Video dubbing: Strict audio–visual sync with duration control
  2. Audiobooks / podcasts: Expressive narration
  3. Games / virtual characters: Voice cloning + emotion control
  4. Multilingual content: Chinese–English synthesis

Quick Start

Requirements: git, git-lfs, uv, CUDA 12.8+ (recommended)

Install:

git clone https://github.com/index-tts/index-tts.git && cd index-tts
git lfs pull
pip install -U uv
uv sync --all-extras

Download model (IndexTTS-2):

uv tool install "huggingface-hub[cli,hf_xet]"
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints

Start WebUI:

uv run webui.py

Visit http://127.0.0.1:7860.

Python example:

from indextts.infer_v2 import IndexTTS2
 
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints",
                use_fp16=True, use_cuda_kernel=False, use_deepspeed=False)
 
# Basic voice cloning
tts.infer(spk_audio_prompt='examples/voice_01.wav', text="Translate for me, what is a surprise!",
          output_path="gen.wav", verbose=True)
 
# Emotion reference audio
tts.infer(spk_audio_prompt='examples/voice_07.wav', text="酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。",
          output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)
 
# Emotion vector [happy, angry, sad, afraid, disgusted, melancholic, surprised, calm]
tts.infer(spk_audio_prompt='examples/09.wav', text="对不起嘛!我的记性真的不太好~",
          output_path="gen.wav", emo_vector=[0, 0, 0.8, 0, 0, 0, 0, 0], verbose=True)
 
# Text emotion description
tts.infer(spk_audio_prompt='examples/voice_12.wav', text="快躲起来!是他要来了!",
          output_path="gen.wav", use_emo_text=True, emo_alpha=0.6, verbose=True)

Emotion Control Methods

MethodParameterDescription
Emotion referenceemo_audio_promptExtract emotion from reference audio
Emotion vectoremo_vector8 dims: [happy, angry, sad, afraid, disgusted, melancholic, surprised, calm]
Text emotionuse_emo_text=True or emo_textGenerate emotion from text or description
Emotion strengthemo_alpha0.0–1.0, default 1.0

Project Advantages

ComparisonIndexTTS2Traditional TTSOther zero-shot TTS
Duration controlPrecise (first for autoregressive)Usually noneOften none
Emotion controlMulti-modal (audio/vector/text)LimitedVaries
Emotion & timbreDecoupledOften coupledOften coupled
Zero-shotSingle referenceNeeds trainingVaries
MultilingualChinese, English, etc.VariesVaries

Deep Dive

Version History

VersionReleaseNotes
IndexTTS-1.02025/03Model weights and inference
IndexTTS-1.52025/05Stability, better English
IndexTTS-22025/09Duration control, emotion decoupling, multi-modal emotion

Technical Highlights

  • Autoregressive + duration control: First precise duration control for autoregressive TTS; suited for video dubbing
  • GPT latent representations: Improve clarity in high-emotion speech
  • Three-stage training: Better generation stability
  • Soft instruction: Qwen3 fine-tuning for text-based emotion guidance
  • FP16: Lower VRAM, faster inference, minimal quality loss
  • DeepSpeed: May speed up on some hardware; test empirically
  • CUDA 12.8+: Ensure correct installation

Dependency Management

  • uv only: Official requirement; conda/pip may cause dependency and GPU issues
  • China mirrors: uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"

Official Resources

Target Audience

  • Developers needing high-quality zero-shot TTS
  • Video dubbing, audiobook, podcast creators
  • Use cases requiring independent emotion and timbre control
  • Multilingual speech synthesis needs

Visit my homepage for more useful knowledge and interesting products