Tích hợp Kyutai TTS
Chạy cục bộ các mô hình TTS của Kyutai để chuyển văn bản thành giọng nói chất lượng cao. Hướng dẫn này bao gồm cả Pocket TTS (CPU) và TTS 1.6B (GPU) với các máy chủ tương thích OpenAI đi kèm Libre WebUI.
Tổng quan
Kyutai cung cấp hai mô hình TTS:
| Mô hình | Tham số | Thiết bị | Phù hợp nhất |
|---|---|---|---|
| Pocket TTS | 100M | Chỉ CPU | Laptop, môi trường ít tài nguyên |
| TTS 1.6B | 1.6B | GPU/MPS/CPU | Máy chủ, tổng hợp chất lượng cao |
Cả hai dùng khung CALM (Continuous Audio Language Models) và hỗ trợ nhân bản giọng nói từ mẫu âm thanh.
Pocket TTS (CPU)
TTS nhẹ chạy theo thời gian thực trên CPU. Không cần GPU.
Yêu cầu
| Thành phần | Tối thiểu |
|---|---|
| Python | 3.10 - 3.14 |
| PyTorch | 2.5+ |
| RAM | 4GB |
| Disk | 500MB |
Bắt đầu nhanh
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
Máy chủ chạy tại http://localhost:8200.
Kiểm thử
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
Giọng nói
| Giọng | Mô tả |
|---|---|
| Alba | Nữ, rõ và tự nhiên |
| Marius | Nam, âm sắc ấm |
| Javert | Nam, uy nghiêm |
| Jean | Nam, nhẹ nhàng |
| Fantine | Nữ, mềm mại |
| Cosette | Nữ, trẻ trung |
| Eponine | Nữ, giàu biểu cảm |
| Azelma | Nữ, tươi sáng |
Hiệu năng
- Nhanh khoảng 6 lần thời gian thực trên MacBook Air M4
- Độ trễ khoảng 200ms cho đoạn âm thanh đầu tiên
- Chỉ dùng 2 lõi CPU
TTS 1.6B (GPU)
TTS chất lượng cao có tăng tốc GPU. Tự động chọn thiết bị: CUDA > MPS > CPU.
Yêu cầu
| Thành phần | Tối thiểu | Khuyến nghị |
|---|---|---|
| Python | 3.10+ | 3.12 |
| GPU VRAM | 6GB | 8GB+ |
| RAM | 8GB | 16GB+ |
| Disk | 4GB | 8GB |
Hỗ trợ nền tảng
| Nền tảng | Backend | Ghi chú |
|---|---|---|
| NVIDIA GPU | CUDA | Hiệu năng tốt nhất, hỗ trợ bfloat16 |
| Apple Silicon | MPS | Dùng float16 |
| CPU | PyTorch | Chậm hơn, float32 |
Bắt đầu nhanh
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
Máy chủ chạy tại http://localhost:8201.
Chọn thiết bị
# 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
Kiểm thử
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
Giọng nói
Alba MacKenna (CC BY 4.0):
| Giọng | Phong cách |
|---|---|
alba / alba-casual | Hội thoại tự nhiên |
alba-merchant | Nhân vật thương nhân |
alba-announcer | Phong cách phát thanh viên |
Expresso (CC BY-NC 4.0 - non-commercial):
| Giọng | Cảm xúc |
|---|---|
expresso-happy | Vui |
expresso-sad | Buồn |
expresso-angry | Giận dữ |
VCTK (CC BY 4.0):
vctk-p225,vctk-p226,vctk-p227,vctk-p228
Nhân bản giọng nói
Cả hai máy chủ đều hỗ trợ nhân bản giọng nói từ tệp âm thanh.
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
Truyền bất kỳ đường dẫn giọng HuggingFace nào làm tham số 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
Tham chiếu API
Tạo giọng nói
Endpoint: POST /v1/audio/speech
{
"model": "kyutai-tts",
"input": "Text to convert to speech",
"voice": "alba",
"response_format": "wav",
"stream": false
}
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
model | string | thay đổi | kyutai-tts hoặc kyutai-tts-1.6b |
input | string | bắt buộc | Văn bản cần tổng hợp (tối đa 10.000 ký tự) |
voice | string | alba | Tên giọng hoặc đường dẫn HuggingFace |
response_format | string | wav | Định dạng âm thanh (chỉ hỗ trợ wav) |
stream | boolean | false | Bật streaming (chỉ Pocket TTS) |
cfg_coef | float | 2.0 | Hướng dẫn không classifier (chỉ 1.6B) |
Phản hồi: Tệp âm thanh (audio/wav)
Bí danh giọng OpenAI
Để tương thích với máy khách OpenAI TTS:
| Giọng 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 |
Liệt kê giọng
Endpoint: GET /v1/voices
Kiểm tra sức khỏe
Endpoint: GET /health
Cấu hình plugin
Pocket TTS
Bật trong Cài đặt > Plugin > Kyutai TTS
Tệp plugin: 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
Bật trong Cài đặt > Plugin > Kyutai TTS 1.6B
Tệp plugin: 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
}
}
}
}
Truy cập mạng
Để truy cập từ máy khác:
# 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 ...
Cập nhật endpoint plugin tương ứng:
{
"endpoint": "http://192.168.1.100:8200/v1/audio/speech"
}
Khắc phục sự cố
Không tải được mô hình
Mô hình được tải từ HuggingFace ở lần chạy đầu:
# Set token for gated models
export HF_TOKEN=hf_...
CUDA hết bộ nhớ
Với TTS 1.6B trên VRAM hạn chế:
- Đóng các ứng dụng GPU khác
- Thử
cfg_coef=1.5để giảm mức dùng bộ nhớ - Dùng Pocket TTS thay thế (dựa trên CPU)
Vấn đề chất lượng âm thanh
- Giọng máy móc: Thử giọng khác
- Âm thanh bị cắt: Văn bản có thể quá dài; máy chủ tự động chia đoạn
- Phát âm sai: Mô hình được tối ưu cho tiếng Anh và tiếng Pháp
Vấn đề MPS (Apple Silicon)
RuntimeError: MPS backend error
Mô hình 1.6B dùng float16 trên MPS. Nếu vấn đề vẫn còn, hãy buộc dùng CPU:
python server.py --device cpu
So sánh với Qwen3-TTS
| Tính năng | Kyutai Pocket | Kyutai 1.6B | Qwen3-TTS |
|---|---|---|---|
| Tham số | 100M | 1.6B | 0.6B-1.7B |
| Cần GPU | Không | Tùy chọn | Có |
| Ngôn ngữ | Tiếng Anh | EN/FR | 10 ngôn ngữ |
| Nhân bản giọng | Có | Có | Có |
| Thiết kế giọng | Không | Không | Có |
| Cổng | 8200 | 8201 | 8100 |
Chọn Kyutai cho trường hợp tập trung vào tiếng Anh với thiết lập đơn giản hơn. Chọn Qwen3-TTS nếu cần hỗ trợ đa ngôn ngữ và tính năng thiết kế giọng.
Tài nguyên
- Kyutai TTS - Trang dự án chính thức
- Pocket TTS GitHub - Mô hình CPU
- Delayed Streams Modeling - Mô hình 1.6B
- Bộ sưu tập giọng - Các giọng hiện có
- Thẻ mô hình - Chi tiết kỹ thuật