Communitygithub.com

hmisaki/voicebox

使用此技能向 Voicebox 添加新的 TTS 引擎。它涵盖了依赖研究、后端实现、前端集成、PyInstaller 打包以及冻结构建测试。务必在编写任何代码之前从阶段 0(依赖审计)开始。

voicebox 是什么?

此技能旨在引导开发者完成将新文本转语音引擎完全集成到 Voicebox 项目中的全过程。它从阶段 0 的依赖审计开始,强调在编码前进行彻底研究以避免常见错误(例如 v0.2.3 版本因跳过此步骤而发布失败)。技能详细阐述了后端 TTSBackend 协议实现、前端 UI 状态和组件连接、依赖管理以及关键的 PyInstaller 打包过程。该技能确保新引擎能够在捆绑的冻结构建中正常工作,并处理了诸如 `torch.load` 猴子补丁、`--collect-all` 指令用于包含数据文件以及 `--copy-metadata` 用于元数据访问等特殊要求。它适用于 Voicebox 代码库和 CLI 工具,最终交付给用户一个包含完整新引擎的本地可测试构建。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hmisaki/voicebox/tree/HEAD/.agents/skills/add-tts-engine

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

添加 TTS 引擎

目标

端到端地将新的文本转语音引擎集成到 Voicebox:包括依赖研究、后端协议实现、前端 UI 连接、PyInstaller 打包以及冻结构建验证。用户只需要在本地测试最终构建即可。

参考文档

完整分阶段指南位于 docs/content/docs/developer/tts-engines.mdx。在开始之前完整阅读此文件。 它包含:

  • 阶段 0:依赖研究(编写代码前必须完成)
  • 阶段 1:后端实现(TTSBackend 协议)
  • 阶段 2:路由和服务集成(通常零更改)
  • 阶段 3:前端集成(5 个文件)
  • 阶段 4:依赖项(requirements.txt、justfile、CI、Docker)
  • 阶段 5:PyInstaller 打包(build_binary.py + server.py)
  • 阶段 6:常见上游问题解决方法
  • 实施检查表(阶段间的门控)

工作流程

1. 阅读指南

# 阅读完整的 TTS 引擎文档
cat docs/content/docs/developer/tts-engines.mdx

内化所有阶段,特别是阶段 0 和阶段 5。v0.2.3 版本曾经历过三个补丁发布,因为跳过了阶段 0。

2. 依赖研究(阶段 0)

将模型仓库克隆到临时目录并进行审计。不要跳过此步骤。

mkdir /tmp/engine-research && cd /tmp/engine-research
git clone <model-library-url>

对照克隆的源代码及其传递依赖,运行指南阶段 0.2 中的 grep 搜索。生成一份书面的依赖审计,涵盖:

  1. PyPI 与非 PyPI 包
  2. 所需的 PyInstaller 指令(--collect-all、--copy-metadata、--hidden-import)
  3. 必须打包的运行时数据文件
  4. 在冻结构建中需要环境变量覆盖的原生库路径
  5. 需要的猴子补丁(torch.load、float64、MPS、HF token)
  6. 采样率
  7. 模型下载方法(from_pretrained 与 snapshot_download + from_local)

在继续之前,在一次性虚拟环境中测试模型加载和 CPU 上的生成。

3. 实施(阶段 1–4)

按顺序遵循指南中的阶段。需要修改的关键文件:

后端(阶段 1):

  • 创建 backend/backends/<engine>_backend.py
  • 在 backend/backends/__init__.py 中注册(ModelConfig + TTS_ENGINES + 工厂函数)
  • 更新 backend/models.py 中的正则表达式

前端(阶段 3):

  • app/src/lib/api/types.ts — 引擎联合类型
  • app/src/lib/constants/languages.ts — ENGINE_LANGUAGES
  • app/src/components/Generation/EngineModelSelector.tsx — ENGINE_OPTIONS、ENGINE_DESCRIPTIONS
  • app/src/lib/hooks/useGenerationForm.ts — Zod schema、模型名称映射
  • app/src/components/ServerSettings/ModelManagement.tsx — MODEL_DESCRIPTIONS

依赖项(阶段 4):

  • backend/requirements.txt
  • justfile(setup-python、setup-python-release 目标)
  • .github/workflows/release.yml
  • Dockerfile(如果适用)

4. PyInstaller 打包(阶段 5)

在 backend/build_binary.py 中注册引擎:

  • 为后端模块和模型包添加 --hidden-import
  • 为使用 inspect.getsource、分发数据文件或原生库的包添加 --collect-all
  • 为使用 importlib.metadata 的包添加 --copy-metadata

如果引擎有原生数据路径,在 backend/server.py 中 if getattr(sys, 'frozen', False): 块内添加 os.environ.setdefault()。

5. 在开发模式下验证

just dev

测试完整链:模型下载 → 加载 → 生成 → 语音克隆。

6. 使用检查表

逐项检查 tts-engines.mdx 底部的实施检查表。在将构建交给用户之前,每一项都必须通过检查。

关键经验教训(来自 v0.2.3)

这些是最常见的失败模式。阶段 0 的研究可以捕获所有这些:

模式冻结构建中的症状修复方法
@typechecked / inspect.getsource()“无法获取源代码”--collect-all <package>
包附带预训练模型文件FileNotFoundError 针对 .pth.tar、.yaml--collect-all <package>
带有硬编码系统路径的 C 库FileNotFoundError 针对 /usr/share/...--collect-all + 在 server.py 中设置环境变量
importlib.metadata.version()“未找到包元数据”--copy-metadata <package>
未指定 map_location 的 torch.load在 CPU 构建上 CUDA 设备不可用猴子补丁 torch.load
在 float64 数据上使用 torch.from_numpydtype 不匹配的 RuntimeError转换为 .float()
HF 下载调用中的 token=True没有存储的 HF token 时身份验证失败使用 snapshot_download(token=None) + from_local()

备注

  • 路由和服务层没有每个引擎的分发点。main.py 需要零修改。
  • backends/__init__.py 中的模型配置注册表自动处理所有分发。
  • 使用 backends/base.py 中的 get_torch_device() 和 model_load_progress() — 不要重新实现设备检测或进度跟踪。
  • 始终使用干净的 HuggingFace 缓存进行测试(不要有来自开发阶段的预下载模型)。
  • 不要推送或创建发布版本。将构建交给用户进行本地测试。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能