Releases: ReSerendipity/TTS_MultiModel
Release list
v2.2.6
🔐 完整性验证
下载发布物后,请验证 SHA256 校验和:
# Linux/macOS
sha256sum -c SHA256SUMS
# Windows PowerShell
Get-FileHash -Algorithm SHA256 dist/*.whl
#对比 SHA256SUMS 文件中的值如已导入官方 GPG 公钥,可验证签名:
gpg --verify SHA256SUMS.sig SHA256SUMSWhat's Changed
📦 Other Changes
- docs(release): 自动发版路径的三条边界(手工位/DCO/不吃镜像)+ 第 10 处版本位入闸 by @ReSerendipity in #136
- ci(release): exclude-paths 让纯文档改动不再 mint 版本(附 RP 匹配语义的三条坑) by @ReSerendipity in #138
- docs(release): 更正"只改发版配置仍会 mint 版本"这个推论(被 RP 实测否掉)+ 记下 sdist 里 tests 的分发面 by @ReSerendipity in #139
- fix(deploy): k8s 清单的镜像名从"tts-multimodel"改成工作流真推的"tts_multimodel",并加一条同源闸 by @ReSerendipity in #140
- ci(docker): 加并发组 + k8s 清单声明 ghcr 拉取凭证要求(并清掉一条 RP 不消费的手写 [Unreleased]) by @ReSerendipity in #143
- chore(main): release 2.2.6 by @github-actions[bot] in #141
Full Changelog: v2.2.5...v2.2.6
v2.2.5
🔐 完整性验证
下载发布物后,请验证 SHA256 校验和:
# Linux/macOS
sha256sum -c SHA256SUMS
# Windows PowerShell
Get-FileHash -Algorithm SHA256 dist/*.whl
#对比 SHA256SUMS 文件中的值如已导入官方 GPG 公钥,可验证签名:
gpg --verify SHA256SUMS.sig SHA256SUMSWhat's Changed
📦 Other Changes
- docs(DOD): 记 v2.2.4 发版前这一轮验收,并写明没重跑的格子 by @ReSerendipity in #131
- ci(docker): 层缓存改 mode=min + 固定 scope(9.52 GiB 的 buildkit 把配额吃满了) by @ReSerendipity in #133
- ci(release): 加发布条件闸(release PR 拿不到 CI,合并前需要机器判据) by @ReSerendipity in #134
- fix(ci): DCO 按提交作者豁免自动化 —— 否则自动发版路径结构上不可用 by @ReSerendipity in #135
- chore(main): release 2.2.5 by @github-actions[bot] in #132
Full Changelog: v2.2.4...v2.2.5
TTS MultiModel v2.2.4
这个版本里用户能感觉到的两处
- 12GB 显存档直切引擎不再 503(#84):切换路径原先是"先预检再清场",于是预检永远看见上一个引擎还占着显存。改成先清场再预检,报错文案给可操作下一步。
真机复验:voxcpm2 → indextts2 → indextts20 → voxcpm2连续四次直切(全程不手动 unload,load 前空闲最低 609 MiB)→ 四步全HTTP 200 / status=ok,一次 503 都没有;末了真合成一段并回读/api/audio/*.wav,得 206,580 B 的 RIFF 音频。 - persona / 历史卡片的
onclick注入面收口(#99):数据不再拼进 HTML 属性,改事件闭包接线;信息面板的同源裸插值一并处理。服务端吐出的command_palette.js现在只有gotoTab(activateTab0 处)。
发布链路(这个版本的另一半内容)
- 性能门禁(issue #118):判据从
mean:20%双向换成median单向 >50%,并逐条打印对比表。同一份代码在 runner 间的实测摆动是 17%–80%,而旧判据抓到的"回退"全是变快。 - 顺着查下去发现门禁的三级基线原本三条都不通:Actions 缓存 10.23 GB / 配额 10 GB,main 存的基线两小时就被驱逐;Release 资产那两步的
if startsWith(ref,'refs/tags/')在现有触发器下永不成立;仓内benchmarks/baseline.json是 0 条占位且没人读。现在按 L1 → L3 退让、空占位单独告警,L3 已用 main 真 run 填了 5 条 median。 - release-please 的
extra-files第一次在真 release PR 上验证:type: yaml会整份重写config.yaml(160 增 / 160 删,注释行 96 → 0),已摘掉,并加闸要求每条自动位"今天确实命中"。 - 记一条会咬人的机制:release PR 拿不到任何 CI 检查(
GITHUB_TOKEN产生的提交不级联触发 workflow)→ 手工同步位不会红在 PR 上,只会红在发布之后的 main 上。本次因此走手工路径(关掉 #120)。 - §7b 依赖复算跑完 ①②③:候选锁与真锁不同源(97 vs 92 条),复算会把
transformers抬到 4.52.4 而 IndexTTS 要 4.52.1 → 候选锁未采纳;④ 的 GB 级真装仍待验收。 - 治理文件锁 LF;
.mailmap补上此前漏掉的 249 个提交(第三个"贡献者");CODEOWNERS指到真实路径(注意它现在拦不住合并,require_code_owner_reviews未开)。
验收数字
| 项 | 结果 |
|---|---|
| 全量测试(非 e2e,与 CI 同口径) | 2131 passed / 38 skipped / 0 failed(collected 2169) |
| Playwright E2E | 在该改动合入的那次 push 上 completed/success(本 PR 未触发改模板) |
python -m build + twine check |
双 PASSED |
| wheel 内容 | 1065 条;完整性三件套(清单 / Ed25519 签名 / 验签公钥)全部在场 |
解包后 run_startup_selfcheck(enforce=True) |
total=16 passed=16 failed=0 manifest_signed=true |
| 卸载与收尾 | nvidia-smi used 9489 → 3344 MiB;停服后 7869 无监听、无进程,used 2790 MiB |
已知未覆盖(说清楚,别让人自己踩)
- 资产只有 wheel + sdist + SHA256SUMS:不含 26 GB 便携分卷(core / torch / 13 个 model 卷)与桌面增量包。
Setup.exe的真机安装验收没做过(NSIS 那条链路零 workflow 覆盖)。- tag 是注解 tag、无 GPG 签名(仓库没有
GPG_PRIVATE_KEY这个 secret,与 v2.0.1–v2.2.3 一致)。 ghcr.io/.../tts-multimodel:2.2.4由docker-publish.yml在本次 tag push 时构建(Trivy 阻断逻辑在前),发布说明这边不预先声称镜像已在 —— 本机的 token 看不到 ghcr(匿名 403、gh api packages404)。- §7b 的 ④(复算锁真装 + 三引擎复验)未做,#89/#90/#91 三条 dependabot 因此仍挂着。
- 新立的账:issue #130 —— 服务端模板里还有 7 处在
onclick属性内用 HTML 转义保护 JS 字符串(persona 名可截断字符串字面量)。它需要浏览器侧验收,所以没有塞进这个被 tag 的构建里。
装法
本仓不往 PyPI 发布(包名只是 sdist/wheel 的元数据),装的是本 Release 的资产:
pip install ./tts_multimodel-2.2.4-py3-none-any.whl # 或 gh release download v2.2.4
sha256sum -c SHA256SUMS.txt # 装前先比哈希
python scripts/generate_integrity_manifest.py && python scripts/sign_integrity_manifest.py # 源码检出想开 enforce 时权重不随包分发(约 26 GB),按 README 的 model/ 说明挂载。
TTS MultiModel v2.2.3
v2.2.3
补丁版,只有一个理由:把修好的 wheel 交出去。
v2.2.2 的 tag 打在一处修复之前,所以已发布的 wheel 仍然缺完整性自检的三件套 ——
integrity_manifest.json、它的 Ed25519 签名、验签公钥都没打进包,而配置默认
security.integrity_selfcheck.enforce: true,且"清单不存在"分支只写一行 info 日志就跳过。
后果是:通过 pip install 拿到包的用户,P0 的核心模块完整性保护一条都没有在运行,
而配置声称它在强制运行(Docker 镜像与便携包另外拷了源码树,所以那两条路一直是好的 ——
也正因如此,这个缺口躲过了所有门禁,直到发布后把 wheel 解开看内容才发现)。
自 v2.2.2 以来的变化
- security(本次发布的目的):三件套随包分发;
enforce开着却没清单 → 直接RuntimeError
拒绝启动,报错给三条出路(源码检出生成清单 / 装出来的包漏打说明是构建问题 /
确实要关保护就显式写enforce=false)。非强制模式保持原来的"跳过"语义。
CI 的Build (sdist/wheel)作业新增一步:解开 wheel 断言三件在场 ——
只查pyproject声明不算数,setuptools 行为一变就会重新出现"声明对、产物里没有"。 - ci:
release-please.yml的三处静默失效已修(skip-github-pull-request+ 从无 release PR、
5 个入参被 action 忽略、build-release依赖的 job outputs 从未声明)。
修好后它当场自动开出了下一条 release PR,说明路径通了。 - test:版本位一致性守卫两处自我修正 —— 撤掉
minimum_shell_version == 本次版本
(它是下界,强令相等等于每次发版把上一版壳判死;本版仍是2.2.2),
以及把"装配中间物"scripts/installer/version.json从硬性存在改为若在场则必须等于源
(它被.gitignore排除,硬要求会让 CI 在干净检出上直接报错)。
产物
| 文件 | 大小 (B) | SHA256 |
|---|---|---|
tts_multimodel-2.2.3-py3-none-any.whl |
28,378,301 | 7528654771543b7457634fa3c2db5dc2f2bf28697972adc10fae3d54e6dc3f96 |
tts_multimodel-2.2.3.tar.gz |
28,324,368 | f73015373827df6daccd925f4df139d286fdb6a5433c567c496983b02bd88feb |
SHA256SUMS.txt |
198 | — |
python -m build 产出、twine check 两件均 PASSED。这次发布的验证点本身就落在产物上:
解开 wheel 确认 integrated_app/security/ 里三件套在场,且包内那份清单与仓库里的
integrity_manifest.json 字节一致(sha256 相同);METADATA 也带上
Requires-Dist: einops>=0.7.0 / addict>=2.4.0。发布后再从 Release 页面下载回来比对 SHA256。
不含 ~26 GB 便携分卷与桌面增量包(需 release_gate.ps1 真实构建 + 单独授权;本批无权重变化)。
无 GPG 分离签名:仓库只有 MANIFEST_SIGNING_KEY_B64 一个 secret,gpg-signed-release.yml 只会 notice 跳过。
tag 为注解 tag、不做 GPG 签名(与本仓历史一致)。
已知未覆盖(与 v2.2.2 相同,未变)
- 桌面安装包链路(staging → 7z 分卷 → NSIS)无任何 workflow 覆盖,本机也无从安装验证。
- GPU 冒烟(真加载 + 真合成)在 CI 上恒为
skipped:仓库没有注册 runner,真机验收由维护者本人完成。 - 锁集的全新 venv 真装复验(GB 级下载)仍待执行。
Performance Benchmark门禁仍在制造随机红(同一份代码在 runner 间 mean 摆动 17%–80%,
门槛 20%,且会拿同一 PR 两分钟前的 run 当"历史基线")→ 见 issue #118。
TTS MultiModel v2.2.2
v2.2.2
三引擎本地 TTS(VoxCPM2 / IndexTTS 2.5 / IndexTTS 2.0)+ FastAPI/htmx 界面 + OpenAI 兼容口。
本版主要是 v2.2.1 之后累积的桌面/便携分发链路 + 一轮发布前置回归的修复。
一定要知道的四条
- 干净环境装出来的镜像/便携包此前起不来默认引擎。 vendored VoxCPM 在模块顶层
from einops import rearrange,而einops只在trainingextra 里声明过,funasr/modelscope
又只在 extras 里要它 —— 于是任何按requirements.txt/[project].dependencies
装出来的环境(Docker 镜像、便携包)导入tts-1引擎就ModuleNotFoundError。
开发机永远看不见这件事(einops从训练链路传递进来了)。现已提为核心依赖,并补上同样缺席的
addict,另加守卫:核心声明的每个包必须在两份钉版集里都有钉版。 - 镜像构建的间歇性失败已根治。 真因不是日志里那条
update-alternatives ... bash-builtins.7.gz
(它是良性噪声),而是apt-get update对「某个索引没抓下来」只报W:并返回 0,
两行之后才炸成E: Unable to locate package python3.12。现在两段 RUN 都以
「PPA 索引里真查得到 python3.12」为前置条件,重试 5 轮仍取不到就硬停并给出可操作原因。 - IndexTTS 的 device-side assert 已修,且真因不是"第二次引擎切换"。 是预热绕过了串行队列、
与用户请求并发(预热从后台加载线程直接调engine.infer,用户侧那把 per-engine 信号量管不到它),
而 IndexTTS 推理不可重入 → 整个 CUDA context 被毒化,同进程后续合成全废。
修法在引擎层按注册名加锁;真机并发下字节数与串行完全一致(2.5 = 336,642 B / 2.0 = 239,674 B)。 - CSRF 防护不再会静默关闭。 以前
data/.csrf_secret写不出来时只 warning,然后以空密钥
继续挂中间件(等于把 HMAC 绑定摘掉照常接请求);现在直接拒绝启动并说明怎么修
(容器/桌面部署要给data/可写卷)。密钥改0o600落盘,老文件自动收紧。
安全与依赖台账
- Dependabot:20 条告警已逐条 triage + 绑定理由 dismiss(open 归零),台账在
docs/SECURITY_DEPENDABOT_TRIAGE.md。注意:其中 8 条只有 PYSEC 号、没有 GHSA 记录,
Dependabot 从没为它们开过单 —— 别把"告警清零"当"风险登记完成"。 - transformers 停在 4.52.1 是实测决定的:
indextts 2.0.0钉transformers==4.52.1+
tokenizers==0.21.0;抬到 4.57.6 时 IndexTTS 2.0/2.5 直接 ImportError(三引擎只剩一个能用)。
代价按 OSV 实测是 16 个公告,其中 8 条上游根本没有修复版本;已逐条写可达性判据与理由后
在 pip-audit / Trivy 里绑由头豁免(Trivy 侧带 2026-12-31 到期,pip-audit 没有到期机制,靠文档复审约定)。 - CodeQL 存量:open 110 → 76,critical 1 → 0,差额逐条对上账;
分诊表见docs/SECURITY_CODEQL_TRIAGE.md。 - 发布物已剔除曾随包分发的本机 HTTPS 私钥(
app/cert.pem/key.pem),并加进门禁负向断言。
其它
- OpenAI 口
tts-1-hd(IndexTTS 2.5)此前必然 500(该口没有参考音频通道),现返回 400 并指明应走哪个端点。 - 桌面/便携链路:Tauri 壳自绘标题栏与窗口控制、NSIS 安装器(中文安装须知 + 许可页)、
便携三组件分卷(core/torch/model)+ SHA256SUMS 全覆盖 + 回读校验、增量更新契约、
完整性自检 Ed25519 签名 +enforce阻断、篡改模拟门禁。 - CI 两处"永远绿的假信号"已修:
gpu-smoke的 job 因缺 secret + 零注册 runner 一直skipped
而 run 顶层 success(现会 warning + 写进 step summary);镜像内的引擎模块此前从没被导入过(新增探针)。
本次 Release 附带的资产
tts_multimodel-2.2.2-py3-none-any.whl(28,375,881 B)tts_multimodel-2.2.2.tar.gz(28,318,388 B)SHA256SUMS.txt(对上述两件;已做回读校验)
两件产物由 python -m build 产出并通过 twine check。
wheel 的 METADATA 现在带 Requires-Dist: einops>=0.7.0 与 Requires-Dist: addict>=2.4.0
(已安装包内核对),所以这条修复对 pip 安装方同样生效,不只是镜像与便携包。
不含 ~26 GB 的便携分卷(core/torch/model)与桌面增量包 —— 那需要
scripts/release_gate.ps1 -ModelDir ... -RuntimeDir ... -TorchWheelDir ... 真实构建并单独确认;
本批改动不含权重变化,重传 13 个 model 分卷是逐字节浪费。
也没有 GPG 分离签名:仓库只配了 1 个 Actions secret(MANIFEST_SIGNING_KEY_B64),
GPG_PRIVATE_KEY 不存在,所以 gpg-signed-release.yml 只会 notice 跳过。
tag 为注解读但不过 GPG 签名 —— 与本仓历史一致(v2.1.0/v2.2.0/v2.2.1 是轻量 tag,
v2.0.1 是无签名的注解 tag),不做无法验证的签名承诺。
版本口径(如实说明)
本批含 43 个 feat: 提交,按 SemVer 应为 2.3.0;仍标 2.2.2 是仓库所有者的显式决定 ——
内容与 2026-09-16 那次建了又撤销的 v2.2.2 tag 属同一批,CHANGELOG 沿用该号。
另:release-please.yml 此前是结构性空转(skip-github-pull-request: true 而仓库从无 release PR,
且 5 个入参被 action 静默忽略、配置文件根本不存在、job 没声明 outputs),
所以本次 Release 是手工打的 tag + 手工建的 Release,不是 CI 自动发的。
已知未覆盖(发版时点的事实,不粉饰)
- 桌面安装包链路(staging → 7z 分卷 → NSIS)没有任何 workflow 覆盖,本机也无从安装验证;
上面的"干净环境缺依赖"结论在镜像侧是实测(探针 run 35618578940),在便携侧只到
"清单缺项"的证据强度。 - GPU 冒烟(真加载 + 真合成)需要一台带
gpu标签的 self-hosted runner,本仓库没有注册 runner,
因此它在 CI 上永远 skipped。真机验收由维护者本人完成。 - 锁集的"全新 venv 真装"复验(GB 级下载)仍待执行。
- 新查出、本次未动的一处打包缺口:wheel 里
integrated_app/security/只有.py,
integrity_manifest.json与其.sig.ed25519、签名公钥都没被打进包(已按产物核对)。
而integrity_selfcheck.py:166在清单不存在时只logger.info("跳过自检")并返回
skipped=16 / manifest_signed=False,enforce=True也不会拦 —— 也就是说
纯pip install那条部署路径上,Ed25519 完整性保护实际从不运行。
桌面便携包与 Docker 镜像不受影响(两者都另外拷了源码树,所以容器启动探测是绿的)。
修法两步:补package-data;并把"enforce 模式下没有清单"从 info 跳过改成硬失败。
发版当天不改它 —— 它会改变随包内容,且 enforce 行为得在装出来的环境里实测,不是照读代码。
v2.2.1
TTSMultiModel v2.2.1 便携分卷包
资产清单
| 组件 | 文件 | 大小 | 说明 |
|---|---|---|---|
| core | TTSMultiModel-Portable-v2.2.1-win-x64-core.7z.001 |
131 MB | 应用 + WinPython 3.12 运行时 |
| torch | TTSMultiModel-Portable-v2.2.1-win-x64-torch.7z.001 |
1.87 GB | PyTorch 2.13.0+cu132 |
| model | TTSMultiModel-Portable-v2.2.1-win-x64-model.7z.001~.013 |
23.2 GB | 全部引擎权重(IndexTTS-2.0/2.5、VoxCPM2、SenseVoiceSmall、speech_zipenhancer) |
| 辅助 | unpack_portable_bundle.ps1 + portable_bundle_lib.ps1 + manifest.json + SHA256SUMS.txt |
<1 MB | 解包器 + 验签清单 |
快速开始
- 下载全部文件到同一目录(core + torch + model 全部分卷 + unpack 脚本)
- 右键
unpack_portable_bundle.ps1→ 用 PowerShell 运行 - 解包完成后双击
start-portable.bat,浏览器打开 http://127.0.0.1:7869
模型可选下载
模型权重(model 组件,23GB)体积较大,也可选择不下载 model 分卷,改用官方源单独下载:
- 先下载 core + torch + 辅助文件,运行解包器
- 解包器检测到 model 缺失会提示目录位置
- 从官方源下载各模型放入
TTSMultiModel-Portable\model\或checkpoints\ - 支持的模型:IndexTTS-2.0/2.5、VoxCPM2、SenseVoiceSmall、speech_zipenhancer
完整性
- 所有分卷 SHA256 见
SHA256SUMS.txt - 核心模块 Ed25519 签名验签,启动时自动自检(enforce 模式)
- 解包器自动校验分卷完整性,损坏/被篡改的分卷会被拒绝
v2.2.0
2.2.0 (2026-08-21)
Features
- add GitHub Pages online demo (pure frontend simulation) (dad34bc)
- compliance: add script workshop legal warning (5 locales) - prohibit synthesizing protected voices per IndexTTS DISCLAIMER (4ae3cbd)
- full-feature demo v2 - 15 tabs/command palette/persona/history (fef46c1)
- logging: 完善日志机制 - 统一格式(PID/TID/模块位置/request_id) + 环境变量覆盖 + 双通道输出 (9097178)
- security: complete security hardening based on assessment report (f623304)
- tests: 安全测试补盲与 M1 里程碑达成(最终轮次) (b6b5e48)
- tests: 新增安全测试覆盖与引擎协议合规性测试 (M1 里程碑) (4a2c010)
- text-processing: G2P manager, text segmenter, content safety, prompt expander (9f005b8)
- update integrated app features and clean up deprecated components (c0728cd)
- 添加性能监控脚本与计划文档 (91b8ddd)
- 累计提交历史任务成果 - IndexTTS2 引擎完善/多语言/文档/学习报告 (36a94f2)
- 跨项目借鉴改造 — 安全/配置/断点续跑/模型共享/音频水印 (11a0e57)
- 路线图落地 — 数字水印、spec 契约层、断点续跑恢复接线、前端冒烟 (27e2a7d)
Bug Fixes
- .gitignore static/ 规则过宽导致前端资源未入库(CI 页面无 CSS/JS);锚定根目录并补提交 static 39 个文件 (fc9c484)
- app_server 补充 main 入口(python -m 启动失败根因,E2E 服务器无法启动) (611422c)
- build: 移除 license classifier(PEP 639 与 license 表达式冲突,新版 setuptools 拒绝构建) (aca3fc7)
- check_local.py 移除未使用 import 并通过 black (8834c15)
- ci+tests: 修复流水线、激活 smoke marker 并更新 AGENTS.md (89bbcdd)
- ci: pytest 加 180s 超时保护(pytest-timeout),防止测试挂起导致 job 卡 6 小时 (e47fe7b)
- ci: release-please 改为仅手动触发(避免 push 时误报失败) (2676fe2)
- e2e: collapse_toggle 与 theme_toggle 测试前 dismiss onboarding overlay(CI 全新环境无 localStorage 缓存) (87769a3)
- e2e: test_collapse_toggle 完整版 onboarding dismiss(等 2.2s 覆盖 setTimeout boot + 二扫 DOM) (590d257)
- e2e: 修正失效的 /tabs/ 路由为 /?tab=,修复 wait_for_function arguments 兼容性(Playwright 新版) (d58a03f)
- e2e: 停止 JS 定时器 + 禁用 CSS 动画消除动画帧差异;临时重建 Linux baseline (fa50990)
- e2e: 冻结 Math.random 消除波形随机绘制导致的截图差异 (ce84dca)
- e2e: 引擎 tab 切换用 JS click 绕过 model-tabs 容器指针拦截(headless 布局差异) (5903281)
- e2e: 截图测试点击折叠分组内 tab 前先展开;E2E job 超时 15→30 分钟 (c89f2dc)
- e2e: 拦截远程字体 + 等待 fonts.ready 消除字体加载时序差异 (c34afc3)
- e2e: 视觉回归测试统一稳定化(onboarding dismiss + 渲染等待)+ 更新全部 baseline (ad2132f)
- e2e: 等待 htmx 异步内容加载完成再截图(消除跨 run 加载时序差异) (7359fc0)
- hide watermark from user-visible surfaces (logs to debug, README, demo, agreement wording) (b1acdc5)
- remove local-only Chinese docs from remote; add gitignore rules (56e7efc)
- resolve ruff lint & format issues to pass CI (Lint job) (8cde27a)
- ruff import 排序(audio_watermark 拆分 import,修复 CI lint 失败) (435c19f)
- SSE 测试线程改 daemon 防 pytest 挂死(根因:SSE 无限流线程永不退出);矩阵排除 tests/e2e(Playwright 由独立 workflow 跑) (0c37acb)
- test: correct whitespace and length calculation in text segmenter crossfade, fix whitespace and empty text trim in G2P manager/prompt expander, align G2P is_available with design that supported language is always available on download (15b3f64)
- test: pretrained_models 目录测试改为自动创建(目录被 gitignore,CI checkout 不含模型目录) (2503f0f)
- tests: 修复测试反模式-PytestReturnNotNone/硬编码/残缺断言/吞没异常/视觉回归无对比, 删除废弃脚本 (f0bcc63)
- tests: 消除永真断言与零断言反模式并强化认证行为级测试 (a982676)
- treat dots_tts as optional in compat check; skip playwright test when dep missing (629a1bd)
- zh voice warning in script dubbing play paths (0f82d8a)
- zh voice warning, full-text display in continue generation to match spoken text (b7c9f0a)
- 修复 task_queue 协程泄漏并消除测试弃用警告 (4f1f4e0)
- 补 psutil 依赖(health.py 顶层导入,CI 测试收集失败) (d961d90)
Reverts
- pyproject addopts 移除 --timeout(与 pytest-playwright 同名选项冲突致 visual gate 失败);CI 命令里保留 --timeout=180 (c2d347e)
Documentation
- add model download & verification examples (0c4384f)
- add module responsibility boundaries (model_manager/registry/config/service_layer/optimizer); gitignore: unify template (1b70a86)
- compliance: add independent third-party declaration vs model owners (ByteDance Seed / Alibaba Tongyi / bilibili) (499355b)
- compliance: rebrand subtitle, unify IndexTTS version naming, add third-party disclaimer to demo footer (61fa452)
- link MODEL_DOWNLOADS.md from README (93bc422)
- record watermark v2 known boundaries (1s-white-noise payload info-theoretic limit, SNR-crest coupling) with measured data and optional breakthrough paths (fc2585f)
- remove dots.tts references and add VoxCPM source baseline (c24ec79)
- restore open-source essentials (LICENSE, NOTICE, USER_AGREEMENT, COC, SECURITY, upstream source declaration) (dea71ee)
- restore README, CI, demo, screenshots to remote; gitignore local-only content; restore pyproject readme ref (2816758)
- restore README, CI, demo, screenshots to remote; restore pyproject; gitignore...
TTS MultiModel v2.1.0 - Triple Engine Release
TTS MultiModel v2.1.0
多模型语音合成平台 - VoxCPM2 + IndexTTS 2.0 + dots.tts 三引擎正式发布
🎯 三引擎架构
| 引擎 | 说明 | 特色功能 |
|---|---|---|
| VoxCPM2 | OpenBMB 开源 TTS | 声音设计、极致克隆、剧本配音、LoRA 微调、流式生成 |
| IndexTTS 2.0 | IndexTeam 开源 TTS | 声音克隆、情绪控制、高质量合成 |
| dots.tts | dots-studio/dots.tts-base | 轻量高性能声音克隆 |
✨ 核心功能
- 一站式平台: 三引擎集成,声音克隆、声音设计、剧本配音、LoRA 微调
- 多角色剧本配音: 自动分配说话人,批量生成配音
- LoRA 微调训练: 自定义数据集微调 VoxCPM2
- 流式生成: 长文本实时流式音频输出 (SSE)
- 9 种预置音色: 开箱即用
- 多语言界面: 中文 / English / 日本語 / 한국어
- 多 GPU 后端: NVIDIA CUDA / Apple MPS / CPU
🖥️ Web UI
- FastAPI + HTMX + Jinja2 现代化响应式界面
- 暗色 / 亮色主题切换
- 批量处理 + 历史记录管理 (SQLite 全文搜索)
🚀 快速开始
Windows (内置 WinPython):
`�ash
git clone https://github.com/ReSerendipity/TTS_MultiModel.git
cd TTS_MultiModel
install.bat
下载模型后
start.bat
`
Docker:
`�ash
docker compose up -d
访问 http://localhost:7869
`
📦 技术栈
- Web: FastAPI + Uvicorn + HTMX + Jinja2 + Bootstrap
- TTS: VoxCPM2 + IndexTTS 2.0 + dots.tts
- ASR: SenseVoiceSmall
- 音频: speech_zipenhancer + FFmpeg + SoX
- 深度学习: PyTorch + Transformers + FunASR
- 容器: Docker + Docker Compose
📝 许可证
Apache License 2.0
🙏 致谢
v2.0.1 - UI Overhaul & Community Improvements
Highlights
- Dual-engine architecture: VoxCPM2 + IndexTTS2 with runtime switching
- Emotion tag system: 30+ emotion/style tags for fine-grained voice control
- Neural watermarking: Spread-spectrum audio watermarking for ownership protection
- vLLM backend: Optional acceleration for high-throughput inference
- CLI batch processing: JSON/CSV input with progress reporting and ETA
- Enhanced documentation: Model download guide, examples, contribution guide
- GitHub community: Release notes config, issue templates, Good First Issues
New Features
emotion_tags.py— 30+ emotion/style tags inspired by Fish Speechwatermark.py— Neural watermarking inspired by Chatterbox Perthvllm_backend.py— Optional vLLM integration with auto-fallbackcli.py— Batch processing with JSON/CSV input supportexamples/— API usage examples (clone, design, batch)
Documentation
- Fixed model download guide with correct repo IDs
- Added "Why TTS MultiModel?" section to README
- Enhanced CONTRIBUTING.md with dev setup and Good First Issues
Design Documents
- Model Tiering Plan (Turbo/Nano/Standard)
- Training Toolchain Plan
- RL Alignment Plan (GRPO)
- TensorRT Integration Plan
- Dialect Support Plan
- Multi-Speaker Plan
- Edge Deployment Plan
- OpenAI Compatible API Plan
Full Changelog: https://github.com/ReSerendipity/TTS_MultiModel/blob/master/CHANGELOG.md