Kyutai TTS 集成
在本地运行 Kyutai 的 TTS 模型,获得高质量文字转语音。本指南介绍 Pocket TTS(CPU)和 TTS 1.6B(GPU),以及 Libre WebUI 内置的 OpenAI 兼容服务器。
概述
Kyutai 提供两个 TTS 模型:
| 模型 | 参数量 | 设备 | 最适合 |
|---|---|---|---|
| Pocket TTS | 100M | 仅 CPU | 笔记本电脑、低资源环境 |
| TTS 1.6B | 1.6B | GPU/MPS/CPU | 服务器、高质量合成 |
两者都使用 CALM(Continuous Audio Language Models)框架,并支持从音频样本克隆声音。
Pocket TTS(CPU)
可在 CPU 上实时运行的轻量 TTS,无需 GPU。
要求
| 组件 | 最低要求 |
|---|---|
| Python | 3.10 - 3.14 |
| PyTorch | 2.5+ |
| RAM | 4GB |
| 磁盘 | 500MB |
快速入门
cd examples/kyutai-tts-server
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Start server
python server.py
服务器运行在 http://localhost:8200。
测试
curl http://localhost:8200/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kyutai-tts", "input": "Hello, welcome to Libre WebUI!", "voice": "alba"}' \
--output speech.wav
声音
| 声音 | 说明 |
|---|---|
| Alba | 女声,清晰自然 |
| Marius | 男声,温暖 |
| Javert | 男声,权威 |
| Jean | 男声,柔和 |
| Fantine | 女声,柔和 |
| Cosette | 女声,年轻 |
| Eponine | 女声,富有表现力 |
| Azelma | 女声,明亮 |
性能
- 在 MacBook Air M4 上约为实时速度的 6 倍
- 首个音频片段延迟约 200ms
- 只使用 2 个 CPU 核心
TTS 1.6B(GPU)
支持 GPU 加速的高质量 TTS。自动设备选择顺序:CUDA > MPS > CPU。
要求
| 组件 | 最低要求 | 建议 |
|---|---|---|
| Python | 3.10+ | 3.12 |
| GPU VRAM | 6GB | 8GB+ |
| RAM | 8GB | 16GB+ |
| 磁盘 | 4GB | 8GB |
平台支持
| 平台 | 后端 | 说明 |
|---|---|---|
| NVIDIA GPU | CUDA | 性能最佳,支持 bfloat16 |
| Apple Silicon | MPS | 使用 float16 |
| CPU | PyTorch | 较慢,使用 float32 |
快速入门
cd examples/kyutai-tts-1.6b-server
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install PyTorch with CUDA (for NVIDIA GPUs)
pip install torch --index-url https://download.pytorch.org/whl/cu121
# Install dependencies
pip install -r requirements.txt
# Start server (auto-detects GPU)
python server.py
服务器运行在 http://localhost:8201。
设备选择
# Auto-detect (CUDA > MPS > CPU)
python server.py
# Force specific device
python server.py --device cuda
python server.py --device mps
python server.py --device cpu
测试
curl http://localhost:8201/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kyutai-tts-1.6b", "input": "Hello from the GPU!", "voice": "alba"}' \
--output speech.wav
声音
Alba MacKenna(CC BY 4.0):
| 声音 | 风格 |
|---|---|
alba / alba-casual | 日常对话 |
alba-merchant | 商人角色 |
alba-announcer | 播音风格 |
Expresso(CC BY-NC 4.0 - 非商业):
| 声音 | 情绪 |
|---|---|
expresso-happy | 开心 |
expresso-sad | 悲伤 |
expresso-angry | 愤怒 |
VCTK(CC BY 4.0):
vctk-p225,vctk-p226,vctk-p227,vctk-p228
声音克隆
两个服务器都支持从音频文件克隆声音。
Pocket TTS
# From local file
curl http://localhost:8200/v1/audio/voice-clone \
-F "input=Hello from a cloned voice" \
-F "reference_audio=@my_voice.wav" \
--output cloned.wav
# From HuggingFace URL
curl http://localhost:8200/v1/audio/voice-clone-url \
-H "Content-Type: application/json" \
-d '{
"input": "Hello world!",
"voice_url": "hf://kyutai/tts-voices/alba-mackenna/casual.wav"
}' \
--output speech.wav
TTS 1.6B
将任意 HuggingFace 声音路径作为 voice 参数传递:
curl http://localhost:8201/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "kyutai-tts-1.6b",
"input": "Custom voice synthesis",
"voice": "hf://kyutai/tts-voices/vctk/p230.wav"
}' \
--output speech.wav
API 参考
语音生成
端点: POST /v1/audio/speech
{
"model": "kyutai-tts",
"input": "Text to convert to speech",
"voice": "alba",
"response_format": "wav",
"stream": false
}
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | string | 视情况 | kyutai-tts 或 kyutai-tts-1.6b |
input | string | 必需 | 要合成的文本(最多 10,000 个字符) |
voice | string | alba | 声音名称或 HuggingFace 路径 |
response_format | string | wav | 音频格式(仅支持 wav) |
stream | boolean | false | 启用流式传输(仅 Pocket TTS) |
cfg_coef | float | 2.0 | 无分类器引导(仅 1.6B) |
响应: 音频文件(audio/wav)
OpenAI 声音别名
为兼容 OpenAI TTS 客户端:
| OpenAI 声音 | Pocket TTS | TTS 1.6B |
|---|---|---|
alloy | alba | alba |
echo | marius | vctk-p225 |
fable | cosette | expresso-happy |
onyx | javert | vctk-p226 |
nova | fantine | alba-announcer |
shimmer | eponine | alba-merchant |
列出声音
端点: GET /v1/voices
健康检查
端点: GET /health
插件配置
Pocket TTS
在 设置 > 插件 > Kyutai TTS 中启用
插件文件:plugins/kyutai-tts.json
{
"id": "kyutai-tts",
"name": "Kyutai TTS",
"type": "tts",
"endpoint": "http://localhost:8200/v1/audio/speech",
"capabilities": {
"tts": {
"config": {
"voices": [
"Alba",
"Marius",
"Javert",
"Jean",
"Fantine",
"Cosette",
"Eponine",
"Azelma"
],
"default_voice": "Alba",
"supports_streaming": true,
"no_auth_required": true
}
}
}
}
TTS 1.6B
在 设置 > 插件 > Kyutai TTS 1.6B 中启用
插件文件:plugins/kyutai-tts-1.6b.json
{
"id": "kyutai-tts-1.6b",
"name": "Kyutai TTS 1.6B",
"type": "tts",
"endpoint": "http://localhost:8201/v1/audio/speech",
"capabilities": {
"tts": {
"config": {
"voices": [
"Alba",
"Alba-Casual",
"Alba-Merchant",
"Alba-Announcer",
"Expresso-Happy",
"Expresso-Sad",
"Expresso-Angry",
"VCTK-P225",
"VCTK-P226"
],
"default_voice": "Alba",
"supports_streaming": true,
"no_auth_required": true
}
}
}
}
网络访问
从其他计算机访问:
# Start server on all interfaces
python server.py --host 0.0.0.0
# Access from another machine
curl http://192.168.1.100:8200/v1/audio/speech ...
相应更新插件端点:
{
"endpoint": "http://192.168.1.100:8200/v1/audio/speech"
}
故障排除
模型下载失败
模型首次运行时从 HuggingFace 下载:
# Set token for gated models
export HF_TOKEN=hf_...
CUDA 内存不足
VRAM 有限时运行 TTS 1.6B:
- 关闭其他 GPU 应用。
- 尝试
cfg_coef=1.5降低内存用量。 - 改用基于 CPU 的 Pocket TTS。
音频质量问题
- 声音机械: 尝试其他声音。
- 音频截断: 文本可能过长;服务器会自动分块。
- 发音错误: 模型针对英语和法语优化。
MPS(Apple Silicon)问题
RuntimeError: MPS backend error
1.6B 模型在 MPS 上使用 float16。问题持续时强制使用 CPU:
python server.py --device cpu
与 Qwen3-TTS 比较
| 功能 | Kyutai Pocket | Kyutai 1.6B | Qwen3-TTS |
|---|---|---|---|
| 参数量 | 100M | 1.6B | 0.6B-1.7B |
| 需要 GPU | 否 | 可选 | 是 |
| 语言 | 英语 | EN/FR | 10 languages |
| 声音克隆 | 是 | 是 | 是 |
| 声音设计 | 否 | 否 | 是 |
| 端口 | 8200 | 8201 | 8100 |
英语为主且希望简单配置时选择 Kyutai;需要多语言支持和声音设计功能时选择 Qwen3-TTS。
资源
- Kyutai TTS - 官方项目页
- Pocket TTS GitHub - CPU 模型
- Delayed Streams Modeling - 1.6B 模型
- 声音集合 - 可用声音
- 模型卡 - 技术详情