ChatTTS-ui 本地语音合成实测:从部署到调通 TTS API 的完整记录
【免费下载链接】ChatTTS-ui一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into speech, along with support for external API interfaces.项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui
ChatTTS-ui 是一个把 ChatTTS 语音合成封装成本地网页 + API 服务的项目:输入文字,输出 wav 音频,全程在自己机器上完成。部署门槛不高,Docker 或 Python 环境一条命令即可启动,首次运行会联网下载模型,之后可离线使用。
项目定位
它本质上是一个 ChatTTS 的封装层,补足的是"调用 ChatTTS 太麻烦"这件事:不用写 Python 推理代码,不用手动管理音色文件,浏览器打开就能合成,外部程序也能通过 HTTP 接口调用。它适合三类人:想要本地配音而不愿依赖在线接口的内容创作者、需要批量文本转语音的小工具作者,以及想给自己的软件接 TTS 能力的开发者。
快速跑起来:Docker 一条命令
最省事的路径是 Docker,以 CPU 版为例:
git clone https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui cd ChatTTS-ui && docker compose -f docker-compose.cpu.yaml up -d容器启动后访问http://127.0.0.1:9966即可。GPU 版把文件名换成docker-compose.gpu.yaml,需要 NVIDIA 显卡加 CUDA 12.8。
其余方式压缩成三行:Windows 用户可从 Releases 下载预编译包,解压后双击app.exe;Mac/Linux 源码部署用 Python 3.9–3.11(不支持 3.12+),依次执行pip3 install -r requirements.txt和python3 app.py;启动时自动打开浏览器。完整步骤见 README.md。
能力拆解:仓库里实际给了什么
网页界面 + REST 接口,一套服务两个入口。app.py 用 Flask 同时提供首页和/tts接口,网页填什么参数,接口就收什么参数,默认值完全一致(voice 默认 2222、temperature 0.3、top_p 0.7、top_k 20)。效果:浏览器点"合成"或脚本 POST 请求,走的是同一条推理链路。
中文数字、日期、电话号码的自动读法转换。uilib/zh_normalization/ 内置中文文本规范化,能把"12块5""0421-33441122"这类内容转成口播读法;英文数字则尝试用 nemo_text_processing 处理,失败时回退到自带实现。效果:直接粘贴带数字、标点的原始文案也能正常读。
音色可固定、可复用。传一个整数音色值(如 2222)会据此生成随机音色并自动存为 csv 到 speaker/ 目录;之后把 csv 或 pt 文件放进 speaker/ 文件夹,就能当固定音色选。效果:满意的音色调出来一次,后续所有合成直接点名调用。
设备自动选择。启动时根据显卡显存判断:显存大于 4G 走 CUDA,不足 4G 强制 CPU,Mac 走 MPS,也可以在 .env 里手动指定device。效果:普通笔记本开箱即用,不折腾。
一个完整使用场景:把一段文案变成 wav
以源码部署为例,端到端走一遍:
- 启动后浏览器停在
http://127.0.0.1:9966,页面只有几项:文本框、音色选择、音色值、Prompt、语速、temperature、top_p 等; - 文本框按行输入,比如第一行"大家好,我是你们的配音助手",选音色 2222,语速保持默认 5;
- 点合成,页面开始加载,音频生成后浏览器直接可试听;
- 文件落在
static/wavs/目录,文件名自带耗时、音色、参数信息,方便回溯是哪次生成的。
如果走接口,产物一样:POST 成功后返回 json,audio_files里同时给本地绝对路径和可下载 url,取哪个都行。
进阶:接口怎么调、.env 改什么
调用/tts接口。只传text就能跑,其余参数全部有默认值:
res = requests.post('http://127.0.0.1:9966/tts', data={"text": "要合成的内容", "voice": "2222"}) print(res.json()["audio_files"][0]["url"])改服务地址。编辑 .env 里WEB_ADDRESS=127.0.0.1:9966,换成局域网 IP 后其他设备也能访问网页和接口。
控制停顿与语气。prompt参数支持[break_6](停顿)、[laugh_0](笑)等控制符,适合给文案加节奏感;文本里直接写控制符效果不好时,勾选"跳过 refine text"(接口即skip_refine=1)。
限制与常见坑
- 模型下载卡住:默认从 modelscope 下载,期间不能挂代理,否则报 proxy 类错误;国内网络直连通常无问题。报错对照见 faq.md。
- GPU 不生效:显存低于 4G 会被强制回退 CPU;N 卡需要 CUDA 12.8+ 且装的是对应 CUDA 版 torch,装错就重装。
- 相同音色值 ≠ 相同声音:不同机器用同一 seed 音色不同,同一机器多次生成音调也可能漂移。想要稳定音色,务必把生成过的 csv/pt 存进 speaker/ 目录复用。
- 长文本处理:超过约 200 字符的段落会按标点自动分段合成再拼接,分段边界处节奏可能略生硬,关键文案建议自己按行分行。
写在最后
ChatTTS-ui 做的事情不复杂,但把"下载模型、管理音色、调推理参数"这几件麻烦事都收进了一个服务里,对只想拿结果的场景是合适的。功能更新以项目提交记录为准,升级前先看下 changelog 再重建容器即可。
【免费下载链接】ChatTTS-ui一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into speech, along with support for external API interfaces.项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考