模型 / 数据集
lenML/Speech-AI-Forge avatar
lenML/Speech-AI-Forge

Speech-AI-Forge:把十来个 TTS 模型塞进同一个 API 和 WebUI

🍦 Speech-AI-Forge is a project developed around TTS generation model, implementing an API Server and a Gradio-based WebUI.

1,418 个 Star187 个 ForkPythonAGPL-3.0
GitHub

秒懂

它是什么?
它解决的是模型碎片化的问题:同一个接口后面挂着 ChatTTS、CosyVoice、F5-TTS、GPT-SoVITS 等实现,附带 Gradio 界面和 ASR。代价是 AGPL-3.0 和一份需要你自己拼起来的依赖环境。
适合谁用?
如果你需要在本地同时对比多个开源 TTS 模型,或者要给内部工具挂一个统一的语音接口,Speech-AI-Forge 省掉的是逐个模型搭环境、逐个模型写接口的重复劳动,值得先跑 python webui.py 试一遍。如果你的产品要闭源分发、又不打算开源自己的修改,AGPL-3.0 这条线需要先跟法务过一遍,别等到集成完再回头改架构。
能商用吗?
可以,但条件严格。AGPL-3.0 是网络 copyleft 许可证:如果别人通过网络使用你修改过的版本(例如作为托管服务),你必须以同一许可证向他们提供源代码。
还在维护吗?
在维护。仓库最近一次提交在 117 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

一个接口后面站着十几个模型

开源 TTS 这两年出的模型不少,但每个模型都有自己的推理脚本、自己的权重目录结构、自己的采样参数。想比较 ChatTTS 和 CosyVoice 在同一段文本上的效果,得先搭两套环境。Speech-AI-Forge 针对的就是这个摩擦:README 把它描述为「一个围绕 TTS 生成模型开发的项目,实现了 API Server 和基于 Gradio 的 WebUI」,模型支持表里同时列着 Index-TTS、Qwen3-TTS、FishSpeech、CosyVoice、FireRedTTS、F5-TTS、Spark-TTS、GPT-SoVITS 和 ChatTTS。它面向的是需要在本地或自建服务器上跑语音合成、又不想为每个模型维护一套独立服务的开发者,以及想直接拖拽试听、调音色和分割参数的语音内容制作者。

从文本到音频之间夹了多少层

WebUI 的功能清单暴露了这条流水线的形状。文本先过分割器,分割器有 eos 结束符和分割阈值两个可调项,决定长文本在哪里断开;ChatTTS 走原生 refiner,README 称其支持无限长文本处理。分割之后进入模型推理,Batch size 影响批量推理模型的长文本速度。推理出来的音频再经过调节器,调整速度、音调、音量,并带一个响度均衡开关,之后可以交给 Enhancer 模型做人声增强。生成历史只保留最近三次结果,这个数字很小,说明它把 WebUI 定位在试听和挑选,不是素材管理。SSML 那一支是另一条路径:Podcast 用来做长文本多角色音频,From Subtitle 从字幕文件生成 SSML 脚本,脚本编辑器支持把分割器结果导出成 SSML 再手工编辑。也就是说,这套东西的核心不是某个模型的推理优化,而是把「切分、合成、后处理」这三段做成可配置的中间表示。

启动方式和需要盯住的配置项

本地跑起来的前提是先按 docs/dependencies.md 装好依赖,并按模型下载一节把权重放到位,然后执行 python webui.py。只要 API 不要界面,就执行 python launch.py,README 说启动后访问 http://localhost:7870/docs 可以看到开放了哪些端点,脚本参数用 python launch.py -h 查。容器部署分两条 compose 文件:docker-compose.webui.yml 和 docker-compose.api.yml,环境变量分别读 .env.webui 和 .env.api。发布记录里 portable_v0.7 是 Windows 整合包,解压即用,Colab 也有现成 notebook。需要注意的是 API 版本:241111 那次变更加入了 v2/tts,如果你的客户端是按更早的接口写的,迁移时得确认端点前缀。

音色管理是这套东西里最重的一块

音色部分的设计比推理部分更复杂。内置音色是 27 个 ChatTTS 音色、7 个 CosyVoice 音色加 1 个参考音色。自定义音色可以上传文件实时推理,也可以直接上传参考音频和参考文本做零样本推理。音色构建器支持从 ChatTTS seed 生成音色,或者用参考音频生成音色。ChatTTS 调试工具里有音色抽卡和音色融合两个功能,前者用随机种子抽取音色,后者把不同种子生成的音色混合。音色 Hub 则从 Speech-AI-Forge-spks 这个独立仓库下载音色到本地。这套机制说明项目对 ChatTTS 的 seed 体系依赖很深,音色在这套框架里是一等公民,而不是模型推理的附属参数。

模型支持表背后的版本碎片

支持列表里带括号的版本号值得单独看:Index-TTS 标注 v1/v1.5,CosyVoice 标注 v2/v3,F5-TTS 标注 v0.6/v1,FishSpeech 标注 1.4。这意味着同一类模型在项目里可能存在多条推理路径,而不是一个统一抽象。Breaking change logs 的密度也说明了这一点,从 240723 支持 CosyVoice 到 260402 接入 MiniMax Cloud TTS,几乎每隔一两个月就有新模型进来或者旧模型升版本。对使用者的实际影响是:升级这个项目不等于小步快跑,每次拉新版本都可能碰到模型加载路径、采样参数或者 API 结构的变化,锁定一个 commit 再升级是更稳的做法。

什么时候它不该出现在你的依赖里

最直接的一条是许可。仓库使用 AGPL-3.0,这个协议对通过网络提供服务的行为有传染性要求。如果你的产品是闭源 SaaS,并且不愿意按 AGPL 的条款开放对应源码,把它直接嵌进服务端是有风险的,具体怎么判定要找法务,不是技术选型能拍板的事。另一条是资源:README 没有给出任何显存或内存门槛,模型支持表里列的这些模型权重体积和推理开销差异很大,把多个模型同时挂在一个进程里意味着显存要按最重的那个预留。如果你的场景只需要一种音色、一种语言,直接调用上游模型仓库的推理脚本,依赖面会小得多,出问题时排查路径也短。

和直接调用上游仓库的差别在哪

以上游的 CosyVoice 或 F5-TTS 仓库为对照,差别不在模型质量,这两边用的是同一批权重。差别在接口层:上游仓库通常给的是推理脚本和示例,你要自己包一层 HTTP 服务、自己处理长文本切分、自己做音色文件管理。Speech-AI-Forge 把这些都做完了,代价是引入了额外的抽象层和一套固定的目录约定。反过来,如果你需要的是对某个特定模型的推理过程做深度改造,比如换采样策略、改 vocoder,那么中间这层抽象会变成阻碍,直接改上游代码比在这套框架里找扩展点更快。

维护成本落在谁头上

这个项目的维护节奏相当快,Breaking change logs 显示模型接入和版本升级持续在发生,release 里目前可见的是 portable_v0.7 这个整合包版本。对使用者来说,成本主要不在读代码,而在跟着升级:每次上游模型发新版,项目跟进之后你的部署脚本、模型缓存目录、API 调用代码都可能要动。AGPL-3.0 还带来一层额外义务,如果你修改了它并以网络服务形式提供,需要按协议开放修改后的源码。这两件事叠在一起,意味着把它放进生产链路之前,先确认团队有没有能力跟住这个节奏,或者干脆固定版本不做跟进。

编辑结论

如果你需要在本地同时对比多个开源 TTS 模型,或者要给内部工具挂一个统一的语音接口,Speech-AI-Forge 省掉的是逐个模型搭环境、逐个模型写接口的重复劳动,值得先跑 python webui.py 试一遍。如果你的产品要闭源分发、又不打算开源自己的修改,AGPL-3.0 这条线需要先跟法务过一遍,别等到集成完再回头改架构。上生产之前要确认的是三件事:目标模型是否真的在你的硬件上跑得动、v2/tts 这个端点的请求与返回结构是否满足你的并发形态、以及 docs/dependencies.md 里列的依赖你能不能在自己的部署环境里装齐。

官方来源

  1. Issues
  2. lenML/Speech-AI-Forge on GitHub
  3. License: AGPL-3.0
  4. README
  5. Releases
社区笔记

社区笔记