现有的自回归大规模文本转语音(TTS)模型在语音自然度方面具有优势,但其逐个 token 的生成机制使得难以精确控制合成语音的时长。这在需要严格音画同步的应用(如视频配音)中成为显著限制。
本文介绍了 IndexTTS2,提出了一种新颖、通用且适合自回归模型的语音时长控制方法。
该方法支持两种生成模式:一种明确指定生成的 token 数量以精确控制语音时长;另一种以自回归方式自由生成语音而不指定 token 数量,同时忠实地重现输入提示的韵律特征。
此外,IndexTTS2 实现了情感表达与说话人身份的解耦,实现了音色和情感的独立控制。在零样本设置中,模型可以准确重建目标音色(来自音色提示),同时完美再现指定的情感基调(来自风格提示)。
为了增强高情感表达中的语音清晰度,我们融入了 GPT 潜在表示并设计了新颖的三阶段训练范式以提高生成语音的稳定性。此外,为了降低情感控制的门槛,我们通过微调 Qwen3 设计了基于文本描述的软指令机制,有效引导生成具有期望情感倾向的语音。
最后,在多个数据集上的实验结果表明,IndexTTS2 在词错误率、说话人相似度和情感保真度方面优于最先进的零样本 TTS 模型。音频样本可在以下网址获取:IndexTTS2 演示页面。
提示: 如需更详细信息请联系作者。商业使用和合作请联系 indexspeech@bilibili.com。
QQ群:663272642(4群) 1013410623(5群)
Discord:https://discord.gg/uT32E7KDmy
邮箱:indexspeech@bilibili.com
欢迎加入我们的社区!🌏
欢迎大家来交流讨论!
CAUTION
感谢您对 bilibili indextts 项目的支持! 请注意,核心团队维护的唯一官方渠道是:https://github.com/index-tts/index-tts。 任何其他网站或服务都不是官方渠道,我们无法保证其安全性、准确性或及时性。 如需最新更新,请务必参考此官方仓库。
2025/09/08 🔥🔥🔥 我们向世界发布 IndexTTS-2!
2025/05/14 🔥🔥 我们发布 IndexTTS-1.5,显著提高了模型的稳定性及其在英语方面的性能。2025/03/25 🔥 我们发布 IndexTTS-1.0,包含模型权重和推理代码。2025/02/12 🔥 我们向 arXiv 提交了论文,并发布了演示和测试数据集。IndexTTS2,我们最先进的语音模型的架构概览:
IndexTTS2 的主要贡献总结如下:
| HuggingFace | ModelScope |
|---|---|
| 😁 IndexTTS-2 | IndexTTS-2 |
| IndexTTS-1.5 | IndexTTS-1.5 |
| IndexTTS | IndexTTS |
当前用户账号还必须启用 Git-LFS 插件:
git lfs install
git clone https://github.com/index-tts/index-tts.git && cd index-tts
git lfs pull # 下载仓库大文件
TIP
快速简便的安装方法:
在您的电脑上安装 uv 命令有很多便捷方式。
请查看上面的链接了解所有选项。或者,如果您想要
非常快速简便的方法,可以按以下方式安装:
pip install -U uv
WARNING
我们仅支持 uv 安装方式。其他工具,如 conda
或 pip,无法保证安装正确的依赖版本。
如果不使用 uv,您几乎肯定会遇到随机错误、错误消息、
缺少 GPU 加速以及各种其他问题。
如果使用非标准安装,请不要报告任何问题*,因为
几乎所有此类问题都是无效的。
此外,uv 比 pip 快 115 倍,
这是拥抱 Python 项目管理新行业标准的另一个极佳理由。
我们使用 uv 管理项目的依赖环境。以下命令
将自动创建 .venv 项目目录,然后安装正确
版本的 Python 和所有必需的依赖:
uv sync --all-extras
如果下载速度较慢,请尝试使用本地镜像,例如中国境内的以下任意镜像 (从下面的列表中选择一个镜像):
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
可用的扩展功能:
--all-extras:自动添加下面列出的所有扩展功能。如果您
想要自定义安装选择,可以移除此标志。--extra webui:添加 WebUI 支持(推荐)。--extra deepspeed:添加 DeepSpeed 支持(可能会在某些
系统上加速推理)。IMPORTANT
重要(Windows): 对于某些 Windows 用户来说,DeepSpeed 库可能难以安装。
您可以通过移除 --all-extras 标志来跳过它。如果您
想要上述其他任何扩展功能,可以手动添加其特定的
功能标志。
重要(Linux/Windows): 如果安装过程中看到关于 CUDA 的错误, 请确保已在系统上安装 NVIDIA 的 CUDA Toolkit 版本 12.8(或更高版本)。
通过 huggingface-cli 下载:
uv tool install "huggingface-hub[cli,hf_xet]"
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints
或通过 modelscope 下载:
uv tool install "modelscope"
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints
IMPORTANT
如果上述命令不可用,请仔细阅读 uv tool
输出。它会告诉您如何将工具添加到系统路径中。
NOTE
除了上述模型外,一些小型模型将在首次 运行项目时自动下载。如果您的网络环境 访问 HuggingFace 较慢,建议在运行代码之前 执行以下命令:
export HF_ENDPOINT="https://hf-mirror.com"
如果您需要诊断环境以查看检测到哪些 GPU, 可以使用我们包含的工具检查您的系统:
uv run tools/gpu_check.py
uv run webui.py
打开浏览器访问 http://127.0.0.1:7860 即可查看演示。
您还可以调整设置以启用 FP16 推理(降低 显存使用)、DeepSpeed 加速、编译的 CUDA 内核以提高速度等功能。所有 可用选项可以通过以下命令查看:
uv run webui.py -h
尽情享受吧!
IMPORTANT
使用 FP16(半精度)推理会非常有帮助。它更快 且使用更少的显存,质量损失很小。
DeepSpeed 可能也会在某些系统上加速推理,但也可能 使其变慢。性能影响高度取决于您的具体 硬件、驱动程序和操作系统。请尝试开启和关闭它, 以发现在您的个人系统上效果最佳的方式。
最后,请注意所有 uv 命令都会自动激活正确的
每项目虚拟环境。在运行 uv 命令之前不要手动激活任何环境,
因为这可能导致依赖冲突!
要运行脚本,必须使用 uv run <file.py> 命令以确保
代码在您当前的 "uv" 环境中运行。有时可能还需要
将当前目录添加到您的 PYTHONPATH,以帮助它找到
IndexTTS 模块。
通过 uv 运行脚本的示例:
PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_v2.py
以下是在您自己的脚本中使用 IndexTTS2 的几个示例:
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "Translate for me, what is a surprise!"
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, output_path="gen.wav", verbose=True)
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)
emo_alpha 来调整其对输出的影响程度。
有效范围是 0.0 - 1.0,默认值是 1.0(100%):from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
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)
[开心、愤怒、悲伤、恐惧、厌恶、忧郁、惊讶、平静]。
您还可以使用 use_random 参数在推理过程中引入随机性;
默认为 False,设置为 True 则启用随机性:NOTE
启用随机采样将降低语音合成的声音克隆保真度。
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "哇塞!这个爆率也太高了!欧皇附体了!"
tts.infer(spk_audio_prompt='examples/voice_10.wav', text=text, output_path="gen.wav", emo_vector=[0, 0, 0, 0, 0, 0, 0.45, 0], use_random=False, verbose=True)
use_emo_text 基于您提供的
text 脚本来引导情感。您的文本脚本将自动
转换为情感向量。
使用文本情感模式时,建议 emo_alpha 设置为 0.6(或更低),
以获得更自然的语音。
您可以使用 use_random 引入随机性(默认:False;
True 启用随机性):from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "快躲起来!是他要来了!他要来抓我们了!"
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)
emo_text 参数直接提供特定的文本情感描述。
您的情感文本将自动转换为情感向量。这使您可以
单独控制文本脚本和文本情感描述:from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "快躲起来!是他要来了!他要来抓我们了!"
emo_text = "你吓死我了!你是鬼吗?"
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)
TIP
拼音使用说明:
IndexTTS2 仍然支持汉字和拼音的混合建模。
当您需要精确的发音控制时,请提供带有特定拼音注释的文本以激活拼音控制功能。
请注意,拼音控制并非对每个可能的声母-韵母组合都有效;仅支持有效的中文拼音情况。
如需完整的有效条目列表,请参阅 checkpoints/pinyin.vocab。
示例:
之前你做DE5很好,所以这一次也DEI3做DE2很好才XING2,如果这次目标完成得不错的话,我们就直接打DI1去银行取钱。
您还可以通过导入不同的模块来使用我们之前的 IndexTTS1 模型:
from indextts.infer import IndexTTS
tts = IndexTTS(model_dir="checkpoints",cfg_path="checkpoints/config.yaml")
voice = "examples/voice_07.wav"
text = "大家好,我现在正在bilibili 体验 ai 科技,说实话,来之前我绝对想不到!AI技术已经发展到这样匪夷所思的地步了!比如说,现在正在说话的其实是B站为我现场复刻的数字分身,简直就是平行宇宙的另一个我了。如果大家也想体验更多深入的AIGC功能,可以访问 bilibili studio,相信我,你们也会吃惊的。"
tts.infer(voice, text, 'gen.wav')
如需更详细信息,请参阅 README_INDEXTTS_1_5, 或访问 IndexTTS1 仓库 index-tts:v1.5.0。
本项目已将模型文件和完整依赖打包存储至 CNB 制品库,支持一键部署。
https://cnb.cool/paimon/develop/ChuLyric.git
| 文件 | 说明 | 大小 |
|---|---|---|
checkpoints/gpt.pth | GPT 主模型 | 3.3GB |
checkpoints/s2mel.pth | S2Mel 声码器模型 | 1.2GB |
checkpoints/qwen0.6bemo4-merge/model.safetensors | Qwen 情感控制模型 | 1.2GB |
checkpoints/bpe.model | BPE 分词器 | 465KB |
checkpoints/feat1.pt | 特征文件 1 | 56KB |
checkpoints/feat2.pt | 特征文件 2 | 367KB |
checkpoints/wav2vec2bert_stats.pt | Wav2Vec 统计文件 | 9KB |
模型总大小: 约 5.5GB
# 1. 克隆仓库(自动下载 LFS 大文件)
git lfs install
git clone https://cnb.cool/paimon/develop/ChuLyric.git
cd ChuLyric
# 2. 安装 uv 包管理器
pip install -U uv
# 3. 恢复依赖环境(离线模式)
# 使用已打包的 UV 缓存加速安装
uv sync --cache-dir ./uv-cache --all-extras --offline
# 4. 启动 Web UI
uv run webui.py --host 0.0.0.0 --port 7860
本项目已将 完整依赖包(12GB) 打包存储在 uv-cache/ 目录中,支持完全离线部署。
优势:
包含内容:
存储结构:
uv-cache/ ├── archive-v0/ # 归档的依赖包 ├── builds-v0/ # 构建缓存 ├── interpreter-v4/ # Python 解释器缓存 └── sdists-v9/ # 源码分发包
仓库总大小:
NOTE
UV 缓存通过 Git LFS 存储,克隆时会自动下载。如果网络较慢,可以使用 git lfs pull 命令单独拉取大文件。
如果网络环境不稳定,可以使用导出的完整依赖文件:
# 使用 uv 安装
uv pip install -r requirements-full.txt
# 或使用 pip 安装
pip install -r requirements-full.txt
| 项目 | 要求 |
|---|---|
| Python | >= 3.10 |
| Git LFS | >= 3.0 |
| 内存 | >= 16GB (推荐 32GB) |
| GPU | CUDA 12.8+ (可选,CPU 模式可用但较慢) |
| 磁盘 | >= 20GB 可用空间 |
| 脚本 | 说明 |
|---|---|
monitor_and_start.sh | 监控模型下载并自动启动 WebUI |
start_webui.sh | WebUI 启动脚本 |
test_env.py | 环境检查脚本 |
运行环境检查:
uv run test_env.py
Q1: 克隆仓库时下载很慢怎么办?
可以使用 Git LFS 的 --include 参数只下载需要的部分:
# 只下载模型文件(5.5GB)
git lfs pull --include="checkpoints/*"
# 只下载 UV 缓存(12GB)
git lfs pull --include="uv-cache/*"
# 或分步下载
git clone --no-checkout https://cnb.cool/paimon/develop/ChuLyric.git
cd ChuLyric
git lfs pull --include="checkpoints/*"
git lfs pull --include="uv-cache/*"
git checkout
Q2: 不想使用 UV 缓存怎么办?
可以直接使用 uv sync 从网络安装依赖:
# 删除 uv-cache
git rm -r uv-cache/
# 重新安装依赖(从网络下载)
uv sync --all-extras
Q3: 如何更新 UV 缓存?
# 清空旧缓存
rm -rf uv-cache/
# 重新创建缓存(需要网络)
uv sync --all-extras
# 复制新的缓存
mv /root/.cache/uv uv-cache/
# 提交更新
git add uv-cache/
git commit -m "更新 UV 缓存"
我们衷心感谢 Bilibili 不同角色的同事,他们的共同努力使 IndexTTS 系列成为可能。
🌟 如果我们的工作对您有帮助,请给我们一颗星并引用我们的论文。
IndexTTS2:
@article{zhou2025indextts2, title={IndexTTS2: A Breakthrough in Emotionally Expressive and Duration-Controlled Auto-Regressive Zero-Shot Text-to-Speech}, author={Siyi Zhou, Yiquan Zhou, Yi He, Xun Zhou, Jinchao Wang, Wei Deng, 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, Siyi Zhou, Jingchen Shu, Jinchao Wang, Lu Wang}, journal={arXiv preprint arXiv:2502.05512}, year={2025}, doi={10.48550/arXiv.2502.05512}, url={https://arxiv.org/abs/2502.05512} }