logo
0
0
WeChat Login
更新 README:添加 UV 缓存详细说明和 FAQ

👉🏻 IndexTTS2 👈🏻

IndexTTS2: 情感表达和时长可控的自回归零样本文本转语音的突破

IndexTTS2

摘要

现有的自回归大规模文本转语音(TTS)模型在语音自然度方面具有优势,但其逐个 token 的生成机制使得难以精确控制合成语音的时长。这在需要严格音画同步的应用(如视频配音)中成为显著限制。

本文介绍了 IndexTTS2,提出了一种新颖、通用且适合自回归模型的语音时长控制方法。

该方法支持两种生成模式:一种明确指定生成的 token 数量以精确控制语音时长;另一种以自回归方式自由生成语音而不指定 token 数量,同时忠实地重现输入提示的韵律特征。

此外,IndexTTS2 实现了情感表达与说话人身份的解耦,实现了音色和情感的独立控制。在零样本设置中,模型可以准确重建目标音色(来自音色提示),同时完美再现指定的情感基调(来自风格提示)。

为了增强高情感表达中的语音清晰度,我们融入了 GPT 潜在表示并设计了新颖的三阶段训练范式以提高生成语音的稳定性。此外,为了降低情感控制的门槛,我们通过微调 Qwen3 设计了基于文本描述的软指令机制,有效引导生成具有期望情感倾向的语音。

最后,在多个数据集上的实验结果表明,IndexTTS2 在词错误率、说话人相似度和情感保真度方面优于最先进的零样本 TTS 模型。音频样本可在以下网址获取:IndexTTS2 演示页面

提示: 如需更详细信息请联系作者。商业使用和合作请联系 indexspeech@bilibili.com

体验 IndexTTS2

IndexTTS2: 声音的未来,现在生成

IndexTTS2 Demo

点击图片观看 IndexTTS2 介绍视频。

联系方式

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
    • 首个具有精确合成时长控制的自回归 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)水平。
  • 我们将公开发布代码和预训练权重,以促进未来的研究和实际应用。

模型下载

HuggingFaceModelScope
😁 IndexTTS-2IndexTTS-2
IndexTTS-1.5IndexTTS-1.5
IndexTTSIndexTTS

使用说明

⚙️ 环境搭建

  1. 确保系统上已安装 gitgit-lfs

当前用户账号还必须启用 Git-LFS 插件:

git lfs install
  1. 下载此仓库:
git clone https://github.com/index-tts/index-tts.git && cd index-tts git lfs pull # 下载仓库大文件
  1. 安装 uv 包管理器。 这是实现可靠、现代安装环境的必需工具。

TIP

快速简便的安装方法:

在您的电脑上安装 uv 命令有很多便捷方式。 请查看上面的链接了解所有选项。或者,如果您想要 非常快速简便的方法,可以按以下方式安装:

pip install -U uv

WARNING

我们支持 uv 安装方式。其他工具,如 condapip,无法保证安装正确的依赖版本。 如果不使用 uv,您几乎肯定会遇到随机错误、错误消息、 缺少 GPU 加速以及各种其他问题。 如果使用非标准安装,请不要报告任何问题*,因为 几乎所有此类问题都是无效的。

此外,uvpip 快 115 倍, 这是拥抱 Python 项目管理新行业标准的另一个极佳理由。

  1. 安装所需依赖:

我们使用 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(或更高版本)。

  1. 通过 uv 工具 下载所需模型:

通过 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"

🖥️ 检查 PyTorch GPU 加速

如果您需要诊断环境以查看检测到哪些 GPU, 可以使用我们包含的工具检查您的系统:

uv run tools/gpu_check.py

🔥 IndexTTS2 快速开始

🌐 Web 演示

uv run webui.py

打开浏览器访问 http://127.0.0.1:7860 即可查看演示。

您还可以调整设置以启用 FP16 推理(降低 显存使用)、DeepSpeed 加速、编译的 CUDA 内核以提高速度等功能。所有 可用选项可以通过以下命令查看:

uv run webui.py -h

尽情享受吧!

IMPORTANT

使用 FP16(半精度)推理会非常有帮助。它更快 且使用更少的显存,质量损失很小。

DeepSpeed 可能也会在某些系统上加速推理,但也可能 使其变慢。性能影响高度取决于您的具体 硬件、驱动程序和操作系统。请尝试开启和关闭它, 以发现在您的个人系统上效果最佳的方式。

最后,请注意所有 uv 命令都会自动激活正确的 每项目虚拟环境。在运行 uv 命令之前不要手动激活任何环境, 因为这可能导致依赖冲突!

📝 在 Python 中使用 IndexTTS2

要运行脚本,必须使用 uv run <file.py> 命令以确保 代码在您当前的 "uv" 环境中运行。有时可能还需要 将当前目录添加到您的 PYTHONPATH,以帮助它找到 IndexTTS 模块。

通过 uv 运行脚本的示例:

PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_v2.py

以下是在您自己的脚本中使用 IndexTTS2 的几个示例:

  1. 使用单个参考音频文件合成新语音(声音克隆):
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)
  1. 使用独立的情感参考音频文件来调节语音合成:
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)
  1. 当指定情感参考音频文件时,您可以选择设置 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)
  1. 也可以省略情感参考音频,改为提供 一个 8 个浮点数的列表,指定每种情感的强度,顺序为: [开心、愤怒、悲伤、恐惧、厌恶、忧郁、惊讶、平静]。 您还可以使用 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)
  1. 或者,您可以启用 use_emo_text 基于您提供的 text 脚本来引导情感。您的文本脚本将自动 转换为情感向量。 使用文本情感模式时,建议 emo_alpha 设置为 0.6(或更低), 以获得更自然的语音。 您可以使用 use_random 引入随机性(默认:FalseTrue 启用随机性):
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)
  1. 也可以通过 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 用户指南

您还可以通过导入不同的模块来使用我们之前的 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 制品库部署指南

本项目已将模型文件和完整依赖打包存储至 CNB 制品库,支持一键部署。

仓库地址

https://cnb.cool/paimon/develop/ChuLyric.git

模型文件清单 (Git LFS)

文件说明大小
checkpoints/gpt.pthGPT 主模型3.3GB
checkpoints/s2mel.pthS2Mel 声码器模型1.2GB
checkpoints/qwen0.6bemo4-merge/model.safetensorsQwen 情感控制模型1.2GB
checkpoints/bpe.modelBPE 分词器465KB
checkpoints/feat1.pt特征文件 156KB
checkpoints/feat2.pt特征文件 2367KB
checkpoints/wav2vec2bert_stats.ptWav2Vec 统计文件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

UV 离线缓存说明

本项目已将 完整依赖包(12GB) 打包存储在 uv-cache/ 目录中,支持完全离线部署。

优势:

  • ✅ 无需从网络下载依赖
  • ✅ 避免因网络问题导致的安装失败
  • ✅ 部署速度更快
  • ✅ 依赖版本完全一致,避免兼容性问题

包含内容:

  • PyTorch 及其 CUDA 扩展
  • Transformers, Gradio, Librosa 等 190+ 个依赖包
  • 所有 wheel 文件和源码包

存储结构:

uv-cache/ ├── archive-v0/ # 归档的依赖包 ├── builds-v0/ # 构建缓存 ├── interpreter-v4/ # Python 解释器缓存 └── sdists-v9/ # 源码分发包

仓库总大小:

  • 模型文件: 5.5GB
  • UV 缓存: 12GB
  • 代码和文档: < 1MB
  • 总计: ~17.5GB

NOTE

UV 缓存通过 Git LFS 存储,克隆时会自动下载。如果网络较慢,可以使用 git lfs pull 命令单独拉取大文件。

使用 requirements-full.txt 安装

如果网络环境不稳定,可以使用导出的完整依赖文件:

# 使用 uv 安装 uv pip install -r requirements-full.txt # 或使用 pip 安装 pip install -r requirements-full.txt

环境要求

项目要求
Python>= 3.10
Git LFS>= 3.0
内存>= 16GB (推荐 32GB)
GPUCUDA 12.8+ (可选,CPU 模式可用但较慢)
磁盘>= 20GB 可用空间

辅助脚本

脚本说明
monitor_and_start.sh监控模型下载并自动启动 WebUI
start_webui.shWebUI 启动脚本
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 缓存"

我们的发布和演示

致谢

  1. tortoise-tts
  2. XTTSv2
  3. BigVGAN
  4. wenet
  5. icefall
  6. maskgct
  7. seed-vc

Bilibili 贡献者

我们衷心感谢 Bilibili 不同角色的同事,他们的共同努力使 IndexTTS 系列成为可能。

核心作者

  • 邓伟 - 核心作者;发起了 IndexTTS 项目,领导了 IndexTTS1 数据管道的开发、模型架构设计和训练,以及 IndexTTS 系列模型的迭代优化,专注于基础能力构建和性能优化。
  • 周思怡 – 核心作者;在 IndexTTS2 中,领导了模型架构设计和训练管道优化,专注于多语言和情感合成等关键特性。
  • 舒经辰 - 核心作者;致力于整体架构设计、跨语言建模解决方案和训练策略优化,推动模型迭代。
  • 周勋 - 核心作者;致力于跨语言数据处理和实验,探索多语言训练策略,为音频质量改进和稳定性评估做出贡献。
  • 王金朝 - 核心作者;致力于模型开发和部署,构建推理框架并支持系统集成。
  • 周宜权 - 核心作者;为模型实验和验证做出贡献,提出并实现了基于文本的情感控制。
  • 何益 - 核心作者;为模型实验和验证做出贡献。
  • 王露 – 核心作者;致力于数据处理和模型评估,支持模型训练和性能验证。

技术贡献者

  • 王一宁 - 支持贡献者;为开源代码实现和维护做出贡献,支持功能适配和社区发布。
  • 吴勇 - 支持贡献者;致力于数据处理和实验支持,确保模型训练和迭代的数据质量和效率。
  • 黄雅琴 – 支持贡献者;为系统的模型评估和效果跟踪做出贡献,提供反馈以支持迭代改进。
  • 许云瀚 – 支持贡献者;在录音和数据收集方面提供指导,同时从产品和运营角度提供反馈以提高可用性和实际应用。
  • 孙悦朗 – 支持贡献者;在音频录音和数据采集方面提供专业支持,确保模型训练和评估的高质量数据。
  • 梁益煌 - 支持贡献者;致力于系统的模型评估和项目推广,帮助 IndexTTS 扩大其覆盖范围和参与度。

技术指导

  • 孙胡杨 - 为 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} }