Qwen3-TTS-integration
Kör Alibabas Qwen3-TTS lokalt. Guiden konfigurerar den OpenAI-kompatibla TTS-server som ingår i Libre WebUI.
Översikt
Qwen3-TTS erbjuder nio färdiga röster på engelska, kinesiska, japanska och koreanska; stöd för tio språk; röstkloning från tre sekunders ljud; röstdesign från naturligt språk; och instruktioner för känsla och prosodi. Servern omsluter modellen med ett OpenAI-kompatibelt API för standardsystemet med insticksprogram.
Krav
| Komponent | Minimum | Rekommenderat |
|---|---|---|
| Python | 3.12+ | 3.12 (inte 3.14) |
| GPU VRAM | 4GB (0.6B) | 8GB+ (1.7B) |
| RAM | 8GB | 16GB+ |
| Disk | 5GB | 10GB |
Plattformar
| Plattform | Backend | Kommentar |
|---|---|---|
| NVIDIA GPU | CUDA | Bäst prestanda, bfloat16 |
| Apple Silicon | MPS | Använd 0.6B för minnet |
| CPU | PyTorch | Långsammare, använd 0.6B |
Använd customvoice-0.6b på Mac. 1.7B kan göra 16 GB enhetligt minne instabilt.
Snabbstart
1. Installera servern
cd examples/qwen-tts-server
# Create virtual environment (Python 3.12 required)
python3.12 -m venv venv
source venv/bin/activate # Linux/macOS
# or: venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
2. Starta servern
# NVIDIA GPU (recommended)
python server.py --model customvoice-1.7b
# Apple Silicon
python server.py --model customvoice-0.6b
# CPU (slower)
python server.py --model customvoice-0.6b
Standardadressen är http://localhost:8100.
3. Konfigurera Libre WebUI
plugins/qwen-tts.json är förkonfigurerad. Aktivera Settings → Plugins → Qwen3 TTS.
4. Testa
curl http://localhost:8100/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "qwen3-tts", "input": "Hello, welcome to Libre WebUI!", "voice": "Ryan"}' \
--output speech.wav
Tillgängliga modeller
| Modell | Storlek | Användning |
|---|---|---|
customvoice-1.7b | ~3.5GB | Färdiga röster och instruktioner |
customvoice-0.6b | ~1.5GB | Lätt variant |
voicedesign-1.7b | ~3.5GB | Röst från textbeskrivning |
base-1.7b | ~3.5GB | Kloning från tre sekunder |
base-0.6b | ~1.5GB | Lätt kloning |
Röster
Färdiga röster (CustomVoice)
| Röst | Språk | Beskrivning |
|---|---|---|
| Ryan | Engelska | Manlig, tydlig, naturlig |
| Aiden | Engelska | Manlig, varm |
| Vivian | Kinesiska | Kvinnlig, professionell |
| Serena | Kinesiska | Kvinnlig, vänlig |
| Uncle_Fu | Kinesiska | Manlig, mogen |
| Dylan | Kinesiska | Manlig, Beijingdialekt |
| Eric | Kinesiska | Manlig, Sichuandialekt |
| Ono_Anna | Japanska | Kvinnlig |
| Sohee | Koreanska | Kvinnlig |
OpenAI-röstalias
| OpenAI-röst | Mappas till |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_Anna |
API-referens
Talgenerering
Endpoint: POST /v1/audio/speech
{
"model": "qwen3-tts",
"input": "Text to convert to speech",
"voice": "Ryan",
"response_format": "wav",
"instruct": "Speak with enthusiasm",
"language": "English"
}
| Parameter | Typ | Standard | Beskrivning |
|---|---|---|---|
model | string | qwen3-tts | Modell-id |
input | string | krävs | Text, högst 10 000 tecken |
voice | string | ryan | Röstnamn |
response_format | string | wav | Endast wav |
instruct | string | "" | Känsla/prosodi |
language | string | automatisk | Överstyr språkdetektering |
Svar: ljudfil (audio/wav)
Röstdesign
Endpoint: POST /v1/audio/voice-design
{
"model": "qwen3-tts-voicedesign",
"input": "Welcome to our service.",
"voice_description": "A warm, friendly female voice with a slight British accent",
"language": "English"
}
Kräver voicedesign-1.7b.
Röstkloning
Endpoint: POST /v1/audio/voice-clone
curl -X POST http://localhost:8100/v1/audio/voice-clone \
-F "input=Hello, this is my cloned voice." \
-F "reference_audio=@reference.wav" \
-F "reference_text=This is what was said in the reference." \
--output cloned.wav
| Parameter | Typ | Beskrivning |
|---|---|---|
input | string | Text att syntetisera |
reference_audio | file | Minst tre sekunders ljud |
reference_text | string | Transkript av referensen |
Kräver base-1.7b eller base-0.6b.
Lista röster
Endpoint: GET /v1/voices
{
"voices": [
{"id": "ryan", "name": "Ryan", "language": "English"},
{"id": "aiden", "name": "Aiden", "language": "English"},
...
]
}
Hälsokontroll
Endpoint: GET /health
{ "status": "healthy", "model_loaded": true }
Serverkonfiguration
python server.py [OPTIONS]
| Alternativ | Standard | Beskrivning |
|---|---|---|
--host | 0.0.0.0 | Bindningsvärd |
--port | 8100 | Bindningsport |
--model | customvoice-1.7b | Modellvariant |
Nätverksåtkomst
# Start server on all interfaces
python server.py --host 0.0.0.0 --port 8100
# Access from another machine
curl http://192.168.1.100:8100/v1/audio/speech ...
Uppdatera plugins/qwen-tts.json:
{
"endpoint": "http://192.168.1.100:8100/v1/audio/speech",
"capabilities": {
"tts": {
"endpoint": "http://192.168.1.100:8100/v1/audio/speech"
}
}
}
Produktionsfunktioner
Textsanering
Servern tar bort emoji, symboler och Markdown som *bold* och _italic_, tar bort scenanvisningar som *(action)* och (whispers), förkortar FUUUUU till FUU och normaliserar blanksteg för att undvika modellstopp.
Textuppdelning
Lång text delas vid meningsgränser: högst 500 tecken per del, 30 sekunders timeout, misslyckade delar hoppas över och resten sammanfogas till ett ljudsvar.
Flera GPU:er
Servern tvingar en GPU för att undvika enhetskonflikter:
device_map = {"": "cuda:0"} # Uses first GPU only
CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b
Felsökning
Modellhämtning misslyckas
# Set Hugging Face token for gated models
export HF_TOKEN=hf_...
# Or download manually
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
Slut på minne (Apple Silicon)
RuntimeError: MPS backend out of memory
python server.py --model customvoice-0.6b
Slut på CUDA-minne
torch.cuda.OutOfMemoryError: CUDA out of memory
Stäng andra GPU-appar, använd 0.6B eller minska max_chunk_size=300.
Servern får timeout
Servern delar automatiskt texten. Kontrollera loggen för timeout och korta vid behov.
Ljudet låter fel
Upprepningar orsakas ofta av symboler, fel språk löses med language, och onaturliga pauser kan bero på ovanlig interpunktion.
Insticksprogramskonfiguration
{
"id": "qwen-tts",
"name": "Qwen3 TTS",
"type": "tts",
"endpoint": "http://localhost:8100/v1/audio/speech",
"auth": {
"header": "",
"key_env": ""
},
"model_map": [
"qwen3-tts",
"qwen3-tts-customvoice",
"qwen3-tts-voicedesign",
"qwen3-tts-clone"
],
"capabilities": {
"tts": {
"endpoint": "http://localhost:8100/v1/audio/speech",
"model_map": [
"qwen3-tts",
"qwen3-tts-customvoice",
"qwen3-tts-voicedesign",
"qwen3-tts-clone"
],
"config": {
"voices": [
"Ryan",
"Aiden",
"Vivian",
"Serena",
"Uncle_Fu",
"Dylan",
"Eric",
"Ono_Anna",
"Sohee"
],
"default_voice": "Ryan",
"formats": ["wav"],
"default_format": "wav",
"max_characters": 10000,
"supports_streaming": false,
"no_auth_required": true
}
}
},
"description": "Qwen3-TTS local TTS server (NVIDIA CUDA, Apple MPS, or CPU)",
"documentation_url": "https://github.com/QwenLM/Qwen3-TTS"
}
Resurser
- Qwen3-TTS GitHub — officiellt repository
- Qwen3-TTS Demo — prova online
- Alibaba Cloud TTS — moln-API