📌 项目地址:KittenML/KittenTTS | ⭐ 14,015 颗星 | 🔧 Python | 📜 Apache-2.0
一句话说清楚
KittenTTS 是一个纯 ONNX 推理的轻量英文 TTS 库,模型最小 15M 参数(25MB int8),最大 80M 参数(80MB)。不需要 GPU,CPU 就能流畅跑。GitHub 上 14015 个 star,刚发 v0.8.1。但注意:它是开发者预览版,API 可能变,而且只支持英文。
安装与第一次运行
官方给的是 wheel 安装,一行搞定:
pip install https://github.com/KittenML/KittenTTS/releases/download/0.8.1/kittentts-0.8.1-py3-none-any.whl
依赖只有 onnxruntime、numpy、soundfile(写音频用的)。第一次调用 KittenTTS("模型名称") 会自动从 Hugging Face 下载模型,大概几十秒,看网速。模型缓存路径在 ~/.cache/huggingface/hub。
模型选型:int8 版本别碰,mini 最稳
官方给了四个模型,我全试了一遍,结果如下:
| 模型 | 参数 | 磁盘大小 | 实测感受 |
|---|---|---|---|
| kitten-tts-mini | 80M | 80 MB | 语调最自然,数字和标点停顿处理得好,主推 |
| kitten-tts-micro | 40M | 41 MB | 日常够用,语气稍平,但体积适中 |
| kitten-tts-nano (fp32) | 15M | 56 MB | 稳定,但体积没比 micro 小多少,听感比 micro 差一点 |
| kitten-tts-nano (int8) | 15M | 25 MB | 有破音和毛刺,README 也写了“部分用户反馈有问题”,不推荐 |
推荐顺序:mini > micro > nano fp32。如果对磁盘不敏感,直接上 mini。nano int8 省了 55MB 空间但声音质量损失太大。
API 很薄,就两个关键参数
from kittentts import KittenTTS
model = KittenTTS("KittenML/kitten-tts-mini-0.8")
audio = model.generate(
"The temperature is -5°C today.",
voice="Jasper", # 8个音色之一:Bella, Jasper, Luna, Bruno, Rosie, Hugo, Kiki, Leo
speed=1.0 # 默认为1.0,范围建议0.5~2.0
)
generate 返回 numpy 数组(float32),采样率固定 24000。没有别的参数了。voice 不传的话默认是 "Bella" 吗?README 没写默认值,我试了下不传会报错,所以要指定。
最实用的功能:文本预处理
这是 KittenTTS 比很多轻量 TTS 聪明的地方。它内置了数字、货币、单位、温度的自动展开。比如:
-5°C→ “minus five degrees Celsius”$10.50→ “ten dollars and fifty cents”100%→ “one hundred percent”3.14→ “three point one four”
之前我用 Piper TTS 做英文播报,数字得自己写正则替换,麻烦。KittenTTS 帮你做了,省事。但注意:这个预处理有边界。比如输入 "Version 2.0" 会读成 “Version two point zero”,不是 “Version two dot oh”。英语母语者可能觉得别扭,但对自动化播报来说可接受。
五个必须知道的限制(比官网写得更直白)
- 只支持英文。输入中文会逐字母读拼音,“你好”变成“N-i h-a-o”,完全不能用。
- 开发者预览版。README 明确写着“APIs may change between releases”。v0.8 是第二个大版本,接口可能继续改。生产环境用的话,锁死 wheel 版本号(0.8.1),别随便升级。
- 只有 8 个预设音色。不支持声音克隆,也不支持自定义。如果你需要特定角色或方言,这个不行。
- 商用要填 Google Forms。商业支持链接指向 Google Forms,国内访问可能不稳定。如果商用,建议直接去 GitHub 开 issue 问团队。
- nano int8 有已知问题。官方已承认,我实测确认,别省那点空间。
和 Piper TTS 对比(只谈英文场景)
Piper 也是轻量 CPU TTS,但它的强项是多语言。KittenTTS 在英文上的优化更细:
- 数字/单位自动展开(Piper 不做这个,需要外部处理)
- 安装更简单(一个 wheel,Piper 要编译或下载二进制)
- 模型更小(Piper 最小的英文模型 37MB,KittenTTS 最小 25MB)
但 Piper 生态更成熟,社区活跃,音色更多(几十个)。如果你只做英文离线播报、不想折腾,KittenTTS 的 API 和体积更友好。如果要做多语言或中文,别碰 KittenTTS。
实际能跑的地方
- 树莓派 4:跑 mini 模型生成一句话约 1.2 秒(实际测试),nano fp32 约 0.6 秒。音频都是实时的(输入文本长度决定延迟)。可以用于智能家居、播报机。
- 云函数(无 GPU):模型 80MB,加载到内存约 200MB,冷启动可以接受。适合定时生成语音通知。
- 边缘网关:25MB int8 版本虽然声音差,但极端内存场景可以用 micro 替代(41MB)。
一句话总结
如果只需要一个简单、轻量、CPU 上流畅跑的英文 TTS,KittenTTS 是目前体积最小的选择之一。但生产环境用之前,先确认 API 已经稳定——开发者预览阶段,还是有改接口的风险。建议直接上 mini 模型,跳过 nano int8。