Skip to content

TTS MultiModel v2.2.4

Choose a tag to compare

@ReSerendipity ReSerendipity released this 22 Sep 11:08
· 34 commits to main since this release
d4d80b7

这个版本里用户能感觉到的两处

  • 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 现在只有 gotoTabactivateTab 0 处)。

发布链路(这个版本的另一半内容)

  • 性能门禁(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.yaml160 增 / 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.4docker-publish.yml 在本次 tag push 时构建(Trivy 阻断逻辑在前),发布说明这边不预先声称镜像已在 —— 本机的 token 看不到 ghcr(匿名 403、gh api packages 404)。
  • §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/ 说明挂载。