摘要
现有的自回归大规模文本转语音(TTS)模型在语音自然度方面具有优势,但其逐令牌生成机制导致难以精确控制合成语音的时长。这在需要严格音画同步的应用(如视频配音)中成为显著限制。
本文提出IndexTTS2,通过一种新颖、通用且适配自回归模型的语音时长控制方法解决该问题。该方法支持两种生成模式:一种明确指定生成令牌数以精准控制语音时长;另一种以自回归方式自由生成语音且不限定令牌数,同时忠实复现输入提示的韵律特征。
此外,IndexTTS2实现了情感表达与说话人身份的解耦,可独立控制音色和情感。在零样本场景下,模型能精准重构目标音色(来自音色提示)并完美复现指定情感基调(来自风格提示)。
为提升高情感表达下的语音清晰度,我们引入GPT潜在表征并设计新颖的三阶段训练范式以改善生成语音的稳定性。同时,为降低情感控制门槛,基于微调Qwen3设计了文本描述的软指令机制,有效引导生成符合目标情感倾向的语音。
最终,在多个数据集上的实验结果表明,IndexTTS2在词错误率、说话人相似度和情感保真度上均优于当前最优零样本TTS模型。音频样本见:IndexTTS2演示页面。## 摘要
现有的自回归大规模文本转语音(TTS)模型在语音自然度方面具有优势,但其逐令牌生成机制导致难以精确控制合成语音的时长。这在需要严格音画同步的应用(如视频配音)中成为显著限制。
本文提出IndexTTS2,通过一种新颖、通用且适配自回归模型的语音时长控制方法解决该问题。该方法支持两种生成模式:一种明确指定生成令牌数以精准控制语音时长;另一种以自回归方式自由生成语音且不限定令牌数,同时忠实复现输入提示的韵律特征。
此外,IndexTTS2实现了情感表达与说话人身份的解耦,可独立控制音色和情感。在零样本场景下,模型能精准重构目标音色(来自音色提示)并完美复现指定情感基调(来自风格提示)。
为提升高情感表达下的语音清晰度,我们引入GPT潜在表征并设计新颖的三阶段训练范式以改善生成语音的稳定性。同时,为降低情感控制门槛,基于微调Qwen3设计了文本描述的软指令机制,有效引导生成符合目标情感倾向的语音。
最终,在多个数据集上的实验结果表明,IndexTTS2在词错误率、说话人相似度和情感保真度上均优于当前最优零样本TTS模型。音频样本见:IndexTTS2演示页面。
提示:如需更详细信息,请联系作者。
感受IndexTTS2
IndexTTS2:未来的语音,现在生成
📣 更新动态
2025/09/08
🔥🔥🔥 正式发布 IndexTTS-2!- 首款支持精确合成时长控制的自回归TTS模型,兼容可控与不可控模式。该功能暂未在此版本中开放。
- 实现高表现力的情感语音合成,通过多模态输入激活情感控制功能。
2025/05/14
🔥🔥 发布 IndexTTS-1.5,显著提升模型稳定性及英语合成表现。2025/03/25
🔥 开源 IndexTTS-1.0,包含模型权重与推理代码。2025/02/12
🔥 论文提交至arXiv,并公开演示样例与测试集。
🖥️ 神经网络架构
IndexTTS2(当前最先进的语音模型)架构概览:
IndexTTS2 的主要贡献总结如下:
- 我们提出了一种自回归TTS模型的时长适配方案。IndexTTS2 是首个结合精确时长控制与自然时长生成的自回归零样本TTS模型,该方法可扩展至任何自回归大规模TTS模型。
- 情感和说话人相关特征从提示中解耦,并设计了特征融合策略,在情感丰富的表达过程中保持语义流畅性和发音清晰度。此外,开发了一个情感控制工具,利用自然语言描述以方便用户使用。
- 针对高表现力语音数据不足的问题,我们提出了一种有效的训练策略,将零样本TTS的情感表现力显著提升至当前最先进(SOTA)水平。
- 我们将公开代码和预训练权重,以促进未来研究和实际应用。
模型下载
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 # download large repository files
- 安装 uv 包管理器
这是构建可靠现代化安装环境的必要条件。
[!TIP]
快速简易安装方法:有多种便捷方式可在计算机上安装
uv
命令。
请查看上方链接了解所有选项。若您希望采用极简方式,可通过以下命令安装:pip install -U uv
[!WARNING]
我们仅支持uv
安装方式。其他工具(如conda
或pip
)无法确保正确安装依赖版本。若不使用uv
,您极可能遭遇随机错误、报错信息、
GPU加速缺失及其他各类问题。
若采用非标准安装方式,请勿提交问题报告,因几乎所有此类问题均属无效。此外,
uv
的速度比pip
快达115倍,
这也是拥抱Python项目管理新行业标准的又一重要理由。
- 安装必要依赖项:
我们使用 uv
管理项目依赖环境。以下命令将把所有依赖项的正确版本安装至您的 .venv
目录:
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工具包 12.8(或更新)版本。
- 下载所需模型:
通过 huggingface-cli
下载:
uv tool install "huggingface_hub[cli]"
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints
或通过 modelscope
下载:
uv tool install "modelscope"
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints
[!NOTE]
In addition to the above models, some small models will also be automatically downloaded when the project is run for the first time. If your network environment has slow access to HuggingFace, it is recommended to execute the following command before running the code:除了以上模型外,项目初次运行时还会自动下载一些小模型,如果您的网络环境访问HuggingFace的速度较慢,推荐执行:
export HF_ENDPOINT="https://hf-mirror.com"
🖥️ 检查PyTorch的GPU加速支持
如需诊断当前环境以检测可用GPU,
可使用我们内置的工具来检查系统:
uv run tools/gpu_check.py
🔥 IndexTTS2 Quickstart
🌐 Web Demo
uv run webui.py
打开浏览器并访问 http://127.0.0.1:7860
查看演示。
您还可以调整设置以启用诸如FP16推理(降低显存占用)、DeepSpeed加速、编译CUDA内核提升速度等功能。所有可用选项可通过以下命令查看:
uv run webui.py -h
玩得开心!
[!IMPORTANT]
使用 FP16(半精度)推理会非常有帮助。它更快且消耗更少的显存,质量损失非常小。DeepSpeed 在某些系统上 可能 也会加速推理,但也可能使其变慢。性能影响高度依赖于你的具体硬件、驱动和操作系统。请尝试启用和禁用它,以找出在你的个人系统上效果最佳的方式。
📝 在 Python 中使用 IndexTTS2
要运行脚本,你 必须 使用 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)
- 也可以省略情感参考音频,转而提供一个8维浮点数列表,按以下顺序指定每种情感的强度:
[高兴, 愤怒, 悲伤, 害怕, 厌恶, 忧郁, 惊讶, 平静]
。
此外,您可以使用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_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)
传统版本:IndexTTS1 用户指南
您也可以通过导入不同模块来使用我们之前的 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。
我们的版本与演示
IndexTTS2: [Paper]; [Demo]; [HuggingFace]
IndexTTS1: [Paper]; [Demo]; [ModelScope]; [HuggingFace]
感谢
📚 引用
🌟 如果您觉得我们的工作有帮助,请给我们加星并引用我们的论文。
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}
}