Integrarea Kyutai TTS
Rulați local modelele TTS Kyutai pentru conversia textului în vorbire de înaltă calitate. Acest ghid prezintă atât Pocket TTS (CPU), cât și TTS 1.6B (GPU), cu servere compatibile cu OpenAI incluse în Libre WebUI.
Prezentare generală
Kyutai oferă două modele TTS:
| Model | Parametri | Dispozitiv | Ideal pentru |
|---|---|---|---|
| Pocket TTS | 100M | Numai CPU | Laptopuri, medii cu resurse reduse |
| TTS 1.6B | 1.6B | GPU/MPS/CPU | Servere, sinteză de înaltă calitate |
Ambele folosesc cadrul CALM (Continuous Audio Language Models) și acceptă clonarea vocii din eșantioane audio.
Pocket TTS (CPU)
TTS ușor care rulează în timp real pe CPU. Nu necesită GPU.
Cerințe
| Componentă | Minim |
|---|---|
| Python | 3.10 - 3.14 |
| PyTorch | 2.5+ |
| RAM | 4GB |
| Disk | 500MB |
Pornire rapidă
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
Serverul rulează la http://localhost:8200.
Testare
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
Voci
| Voce | Descriere |
|---|---|
| Alba | Feminină, clară și naturală |
| Marius | Masculină, ton cald |
| Javert | Masculină, autoritară |
| Jean | Masculină, blândă |
| Fantine | Feminină, delicată |
| Cosette | Feminină, tânără |
| Eponine | Feminină, expresivă |
| Azelma | Feminină, luminoasă |
Performanță
- ~6x mai rapid decât timpul real pe MacBook Air M4
- ~200ms latență pentru primul fragment audio
- Folosește doar 2 nuclee CPU
TTS 1.6B (GPU)
TTS de înaltă calitate cu accelerare GPU. Selectare automată a dispozitivului: CUDA > MPS > CPU.
Cerințe
| Componentă | Minim | Recomandat |
|---|---|---|
| Python | 3.10+ | 3.12 |
| GPU VRAM | 6GB | 8GB+ |
| RAM | 8GB | 16GB+ |
| Disk | 4GB | 8GB |
Platforme acceptate
| Platformă | Backend | Note |
|---|---|---|
| NVIDIA GPU | CUDA | Cea mai bună performanță, acceptă bfloat16 |
| Apple Silicon | MPS | Folosește float16 |
| CPU | PyTorch | Mai lent, float32 |
Pornire rapidă
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
Serverul rulează la http://localhost:8201.
Selectarea dispozitivului
# 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
Testare
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
Voci
Alba MacKenna (CC BY 4.0):
| Voce | Stil |
|---|---|
alba / alba-casual | Conversație informală |
alba-merchant | Personaj de negustor |
alba-announcer | Stil de crainic |
Expresso (CC BY-NC 4.0 - non-commercial):
| Voce | Emoție |
|---|---|
expresso-happy | Fericită |
expresso-sad | Tristă |
expresso-angry | Furioasă |
VCTK (CC BY 4.0):
vctk-p225,vctk-p226,vctk-p227,vctk-p228
Clonarea vocii
Ambele servere acceptă clonarea vocilor din fișiere audio.
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
Transmiteți orice cale vocală HuggingFace ca parametru 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
Referință API
Generarea vorbirii
Adresă API: POST /v1/audio/speech
{
"model": "kyutai-tts",
"input": "Text to convert to speech",
"voice": "alba",
"response_format": "wav",
"stream": false
}
| Parametru | Tip | Implicit | Descriere |
|---|---|---|---|
model | string | variază | kyutai-tts sau kyutai-tts-1.6b |
input | string | obligatoriu | Text de sintetizat (max. 10,000 de caractere) |
voice | string | alba | Numele vocii sau calea HuggingFace |
response_format | string | wav | Format audio (este acceptat numai wav) |
stream | boolean | false | Activează redarea în flux (numai Pocket TTS) |
cfg_coef | float | 2.0 | Ghidare fără clasificator (numai 1.6B) |
Răspuns: Fișier audio (audio/wav)
Aliasuri de voce OpenAI
Pentru compatibilitate cu clienții OpenAI TTS:
| Voce 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 |
Lista vocilor
Adresă API: GET /v1/voices
Verificarea stării
Adresă API: GET /health
Configurarea pluginului
Pocket TTS
Activați în Setări > Pluginuri > Kyutai TTS
Fișier 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
Activați în Setări > Pluginuri > Kyutai TTS 1.6B
Fișier 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
}
}
}
}
Acces în rețea
Pentru acces de pe alte computere:
# 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 ...
Actualizați în mod corespunzător endpoint-ul pluginului:
{
"endpoint": "http://192.168.1.100:8200/v1/audio/speech"
}
Depanare
Descărcarea modelului eșuează
Modelele se descarcă de la HuggingFace la prima rulare:
# Set token for gated models
export HF_TOKEN=hf_...
Memorie CUDA insuficientă
Pentru TTS 1.6B cu VRAM limitată:
- Închideți alte aplicații GPU
- Încercați
cfg_coef=1.5pentru utilizare mai redusă a memoriei - Folosiți Pocket TTS (bazat pe CPU)
Probleme de calitate audio
- Sunet robotic: Încercați o altă voce
- Sunet întrerupt: Textul poate fi prea lung; serverul îl împarte automat
- Pronunție greșită: Modelul este optimizat pentru engleză și franceză
Probleme MPS (Apple Silicon)
RuntimeError: MPS backend error
Modelul 1.6B folosește float16 pe MPS. Dacă problemele persistă, impuneți CPU:
python server.py --device cpu
Comparație cu Qwen3-TTS
| Funcție | Kyutai Pocket | Kyutai 1.6B | Qwen3-TTS |
|---|---|---|---|
| Parametri | 100M | 1.6B | 0.6B-1.7B |
| GPU necesar | Nu | Opțional | Da |
| Limbi | Engleză | EN/FR | 10 limbi |
| Clonarea vocii | Da | Da | Da |
| Proiectarea vocii | Nu | Nu | Da |
| Port | 8200 | 8201 | 8100 |
Alegeți Kyutai pentru utilizări axate pe engleză și o configurare mai simplă. Alegeți Qwen3-TTS pentru suport multilingv și funcții de proiectare a vocii.
Resurse
- Kyutai TTS - Pagina oficială a proiectului
- Pocket TTS GitHub - Model CPU
- Delayed Streams Modeling - Model 1.6B
- Colecție de voci - Voci disponibile
- Fișa modelului - Detalii tehnice