ChatTTS-ui 离线部署指南:让语音合成就此告别断网焦虑
【免费下载链接】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 接口。本文带你完成 ChatTTS-ui 的离线部署:把模型提前备齐,之后整个合成过程不依赖任何网络,适合涉密环境、内网机房、野外作业和断网区域。
为什么能「无网运行」:先搞懂它的联网逻辑
很多人以为离线部署需要复杂的开关配置,其实不用。翻看主程序 app.py 会发现,它的模型加载逻辑很朴素:
- 启动时先检查本地
models/pzc163/chatTTS目录里的模型是否完整; - 完整则直接加载,全程不碰网络;
- 只有本地文件缺失时,才会尝试联网从模型仓库下载。
也就是说,所谓离线部署只有一件事:在还连着网的那台机器上,让模型完整落盘一次。之后无论是拷到内网、U 盘还是光盘,程序都只读本地文件。合成链路「文本 → 本地分词 → 模型推理 → 音频输出」全部在机器内部完成,断网对音质和速度零影响。
模型文件本身放在 ChatTTS/config/config.py 里定义了相对路径,全部位于asset/子目录下,这也是我们稍后核对文件的依据。
准备工作:联网窗口期完成这三件事
把时间线倒过来想:只有一段联网时间,要把它用在刀刃上。
第一步:拿到源码
克隆一份代码即可(Windows、Linux、macOS 通用):
git clone https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui第二步:离线安装 Python 依赖
ChatTTS-ui 的依赖清单见 requirements.txt,核心是 torch、Flask、transformers、vocos 等。在联网机器上先按平台把所有 wheel 包下载下来,再连同源码一起打包拷走:
pip download -r requirements.txt -d ./offline_packages到离线机器上(Python 3.9–3.11,别用 3.12+,会报 Dynamo 不支持):
pip install --no-index --find-links=./offline_packages -r requirements.txt第三步:让模型完整落盘一次
在联网机器上直接启动一次程序:
python app.py看到模型下载完成、页面能正常合成后,models/目录就已经齐活了。整个models/文件夹就是你离线部署的「弹药库」,连同源码一起拷走。
动手配置:三步让离线环境跑起来
核对模型文件
离线机器上启动前,先对照 ChatTTS/config/config.py 确认models/pzc163/chatTTS/asset/下这些成员都在:
Vocos.safetensors(声码器,负责还原波形)DVAE.safetensors(变分自编码器)gpt/目录(主语言模型权重)Decoder.safetensors、tokenizer/、Embed.safetensorsspk_stat.pt(音色统计参数,缺了它音色无法生成)config/path.yaml(配置入口,缺了会直接启动失败)
任何一项缺失,都会导致启动时报文件找不到,补全后重启即可。
用 .env 声明运行方式
项目根目录的.env文件控制运行行为,离线部署建议这样填:
WEB_ADDRESS=127.0.0.1:9966 device=cpu compile=falsedevice默认是default(显存大于 4G 的 NVIDIA 显卡自动走 GPU),纯 CPU 机器显式写cpu最省心;compile是模型编译开关,离线 CPU 环境关掉可避免一些 triton 相关的报错;WEB_ADDRESS决定服务监听地址,单机自用保持默认即可。
启动并观察日志
python app.py启动时会打印Starting...,随后加载模型(CPU 上需要十几秒到半分钟不等),浏览器自动打开http://127.0.0.1:9966。运行日志按天滚动写在logs/目录,出问题时从这里找答案。
启动验证:怎么确认服务真的能用了
网页端验证
打开页面,输入一段中文,点合成。能听到自然的人声读出文字(中英文、数字混杂都没问题),网页端就通了。
API 端验证
ChatTTS-ui 同时是 API 服务,离线环境下的自动化调用(比如接入剪辑软件)走同一个入口。最简调用只需要一个text参数:
curl -X POST http://127.0.0.1:9966/tts -d "text=离线语音合成测试成功"返回 JSON 中code: 0且带audio_files数组(内含 wav 路径和下载地址),说明接口可用。音色用voice参数指定,项目自带了 20 多个预设音色,如2222、7869、6653,文件都放在 speaker/ 目录下。
终极验证:拔网线
最后一步最直观——断开这台机器的网络,再跑一次合成。一切照常,恭喜,离线部署完成。
局域网共享:让内网同事一起用
如果希望办公室多台电脑共用一台离线语音合成服务器,只需改.env里的监听地址:
WEB_ADDRESS=192.168.1.100:9966写成服务器内网 IP(或0.0.0.0:9966放行所有网卡)后重启,同事访问http://192.168.1.100:9966即可。另外项目自带 CPU 版 Docker 部署方案,在容器化环境里执行docker compose -f docker-compose.cpu.yaml up -d也能跑,容器会把./整个挂载进去,models/自然被带上,记得先把模型目录拷进项目。
常见问题速查
| 症状 | 大概率原因与解法 |
|---|---|
启动报FileNotFoundError ... path.yaml | 模型不完整,从联网机器补拷models/pzc163/chatTTS/config/path.yaml |
报Missing spk_stat.pt | asset/目录漏拷了spk_stat.pt,补上即可 |
报cannot find a working triton installation | .env里把compile=true改为compile=false |
报Dynamo is not supported on Python 3.12 | Python 版本过高,降到 3.9–3.11 |
| 合成很慢 | CPU 推理本就比 GPU 慢,长文本可拆短;内存紧张时减少并发请求 |
| 同一音色值每次声音略有差别 | 属正常现象,官方说明不同设备、甚至同设备不同时间,同一种子音色会有漂移 |
更完整的报错对照见项目自带的 faq.md,离线排障时它就是本地说明书。
进阶优化与日常维护
性能调优(改.env即可):有 4G 以上显存的 NVIDIA 显卡,把device设为default或cuda并装好 CUDA 12.8+,速度提升明显;GPU 机器可试compile=true进一步加速。
磁盘卫生:每次合成的 wav 都存在static/wavs/,长期跑服务会越攒越多,页面提供「清空」按钮,也可定期手动清理;logs/目录日志自动滚动(单文件 1MB、保留 5 份),无需人工干预。
备份三件套:models/(模型本体)、speaker/(你收藏的固定音色 csv/pt 文件)、.env(运行配置)。定期打包这三样,换机迁移只需十分钟。
音色管理:喜欢的声音以.csv或.pt形式丢进speaker/目录即可被网页和 API 直接选用,固定音色不随种子漂移,适合做「专属配音」场景。
照以上流程走一遍,ChatTTS-ui 就能在完全无网的环境里稳定输出语音——临时断网不必慌,长期离线也从容。
【免费下载链接】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),仅供参考