Kyutai TTS-Integration
Führe Kyutais TTS-Modelle lokal für hochwertige Text-zu-Sprache-Ausgabe aus. Diese Anleitung behandelt Pocket TTS (CPU) und TTS 1.6B (GPU) mit den in Libre WebUI enthaltenen OpenAI-kompatiblen Servern.
Übersicht
Kyutai bietet zwei TTS-Modelle:
| Modell | Parameter | Gerät | Am besten geeignet für |
|---|---|---|---|
| Pocket TTS | 100M | Nur CPU | Laptops und ressourcenarme Umgebungen |
| TTS 1.6B | 1.6B | GPU/MPS/CPU | Server und hochwertige Synthese |
Beide verwenden das CALM-Framework (Continuous Audio Language Models) und unterstützen das Klonen von Stimmen aus Audioaufnahmen.
Pocket TTS (CPU)
Leichtgewichtiges TTS, das in Echtzeit auf der CPU läuft. Keine GPU erforderlich.
Anforderungen
| Komponente | Minimum |
|---|---|
| Python | 3.10 - 3.14 |
| PyTorch | 2.5+ |
| RAM | 4GB |
| Speicher | 500MB |
Schnellstart
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
Der Server läuft unter http://localhost:8200.
Testen
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
Stimmen
| Stimme | Beschreibung |
|---|---|
| Alba | Weiblich, klar und natürlich |
| Marius | Männlich, warmer Ton |
| Javert | Männlich, autoritär |
| Jean | Männlich, sanft |
| Fantine | Weiblich, weich |
| Cosette | Weiblich, jung |
| Eponine | Weiblich, ausdrucksstark |
| Azelma | Weiblich, hell |
Leistung
- Etwa 6x Echtzeit auf einem MacBook Air M4
- Etwa 200ms Latenz bis zum ersten Audioausschnitt
- Verwendet nur 2 CPU-Kerne
TTS 1.6B (GPU)
Hochwertiges TTS mit GPU-Beschleunigung. Automatische Gerätewahl: CUDA > MPS > CPU.
Anforderungen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| Python | 3.10+ | 3.12 |
| GPU VRAM | 6GB | 8GB+ |
| RAM | 8GB | 16GB+ |
| Speicher | 4GB | 8GB |
Plattformunterstützung
| Plattform | Backend | Hinweise |
|---|---|---|
| NVIDIA GPU | CUDA | Beste Leistung, unterstützt bfloat16 |
| Apple Silicon | MPS | Verwendet float16 |
| CPU | PyTorch | Langsamer, verwendet float32 |
Schnellstart
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
Der Server läuft unter http://localhost:8201.
Geräteauswahl
# 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
Testen
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
Stimmen
Alba MacKenna (CC BY 4.0):
| Stimme | Stil |
|---|---|
alba / alba-casual | Lockere Unterhaltung |
alba-merchant | Händlerfigur |
alba-announcer | Ansagerstil |
Expresso (CC BY-NC 4.0 - nicht kommerziell):
| Stimme | Emotion |
|---|---|
expresso-happy | Fröhlich |
expresso-sad | Traurig |
expresso-angry | Wütend |
VCTK (CC BY 4.0):
vctk-p225,vctk-p226,vctk-p227,vctk-p228
Stimmenklonen
Beide Server unterstützen das Klonen aus Audiodateien.
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
Übergib einen beliebigen HuggingFace-Stimmenpfad als Parameter 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-Referenz
Spracherzeugung
Endpunkt: POST /v1/audio/speech
{
"model": "kyutai-tts",
"input": "Text to convert to speech",
"voice": "alba",
"response_format": "wav",
"stream": false
}
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
model | string | verschieden | kyutai-tts oder kyutai-tts-1.6b |
input | string | erforderlich | Zu synthetisierender Text (maximal 10,000 Zeichen) |
voice | string | alba | Stimmenname oder HuggingFace-Pfad |
response_format | string | wav | Audioformat (nur wav unterstützt) |
stream | boolean | false | Streaming aktivieren (nur Pocket TTS) |
cfg_coef | float | 2.0 | Klassifikatorfreie Führung (nur 1.6B) |
Antwort: Audiodatei (audio/wav)
OpenAI-Stimmenaliase
Zur Kompatibilität mit OpenAI-TTS-Clients:
| OpenAI-Stimme | 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 |
Stimmen auflisten
Endpunkt: GET /v1/voices
Zustandsprüfung
Endpunkt: GET /health
Plugin-Konfiguration
Pocket TTS
Aktiviere es unter Einstellungen > Plugins > Kyutai TTS
Plugin-Datei: 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
Aktiviere es unter Einstellungen > Plugins > Kyutai TTS 1.6B
Plugin-Datei: 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
}
}
}
}
Netzwerkzugriff
Für den Zugriff von anderen Geräten:
# 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 ...
Aktualisiere den Plugin-Endpunkt entsprechend:
{
"endpoint": "http://192.168.1.100:8200/v1/audio/speech"
}
Fehlerbehebung
Modelldownload schlägt fehl
Modelle werden beim ersten Start von HuggingFace geladen:
# Set token for gated models
export HF_TOKEN=hf_...
CUDA-Speicher erschöpft
Für TTS 1.6B bei begrenztem VRAM:
- Schließe andere GPU-Anwendungen.
- Versuche
cfg_coef=1.5für geringeren Speicherbedarf. - Verwende Pocket TTS auf der CPU.
Probleme mit der Audioqualität
- Robotischer Klang: Probiere eine andere Stimme.
- Abgeschnittenes Audio: Der Text könnte zu lang sein; der Server teilt automatisch.
- Falsche Aussprache: Das Modell ist für Englisch und Französisch optimiert.
MPS-Probleme (Apple Silicon)
RuntimeError: MPS backend error
Das 1.6B-Modell verwendet float16 auf MPS. Erzwinge bei Problemen die CPU:
python server.py --device cpu
Vergleich mit Qwen3-TTS
| Funktion | Kyutai Pocket | Kyutai 1.6B | Qwen3-TTS |
|---|---|---|---|
| Parameter | 100M | 1.6B | 0.6B-1.7B |
| GPU erforderlich | Nein | Optional | Ja |
| Sprachen | Englisch | EN/FR | 10 languages |
| Stimmenklonen | Ja | Ja | Ja |
| Stimmendesign | Nein | Nein | Ja |
| Port | 8200 | 8201 | 8100 |
Wähle Kyutai für englischzentrierte Anwendungsfälle mit einfacher Einrichtung. Wähle Qwen3-TTS für Mehrsprachigkeit und Stimmendesign.
Ressourcen
- Kyutai TTS - Offizielle Projektseite
- Pocket TTS auf GitHub - CPU-Modell
- Delayed Streams Modeling - 1.6B-Modell
- Stimmensammlung - Verfügbare Stimmen
- Modellkarte - Technische Details