Qwen3-TTS-integration
Kør Alibabas Qwen3-TTS lokalt til flersproget tekst til tale i høj kvalitet. Guiden konfigurerer den OpenAI-kompatible TTS-server, der følger med Libre WebUI.
Oversigt
Qwen3-TTS tilbyder ni færdige stemmer på engelsk, kinesisk, japansk og koreansk; understøttelse af ti sprog; stemmekloning fra tre sekunders lyd; stemmedesign ud fra beskrivelser i naturligt sprog; og instruktioner til følelse og prosodi. Serveren omslutter modellen med et OpenAI-kompatibelt API, så Libre WebUI kan bruge den gennem standardsystemet til plugins.
Krav
| Komponent | Minimum | Anbefalet |
|---|---|---|
| Python | 3.12+ | 3.12 (ikke 3.14) |
| GPU VRAM | 4GB (0.6B) | 8GB+ (1.7B) |
| RAM | 8GB | 16GB+ |
| Disk | 5GB | 10GB |
Platforme
| Platform | Backend | Bemærkning |
|---|---|---|
| NVIDIA GPU | CUDA | Bæst ydeevne, bfloat16 |
| Apple Silicon | MPS | Brug 0.6B for hukommelsen |
| CPU | PyTorch | Langsommere, brug 0.6B |
Brug customvoice-0.6b på Mac. 1.7B kan gøre 16 GB samlet hukommelse ustabilt.
Hurtig start
1. Installer serveren
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. Start serveren
# 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 er http://localhost:8100.
3. Konfigurer Libre WebUI
plugins/qwen-tts.json er førkonfigurerad. Aktivera Settings → Plugins → Qwen3 TTS.
4. Test
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
Tilgængelige modeller
| Model | Størrelse | Anvændning |
|---|---|---|
customvoice-1.7b | ~3.5GB | Færdiga stemmer og instruktioner |
customvoice-0.6b | ~1.5GB | Lætt variant |
voicedesign-1.7b | ~3.5GB | Stemme fra tekstbeskrivelse |
base-1.7b | ~3.5GB | Kloning fra tre sekunder |
base-0.6b | ~1.5GB | Lætt kloning |
Røster
Færdiga stemmer (CustomVoice)
| Stemme | Språk | Beskrivelse |
|---|---|---|
| Ryan | Engelska | Manlig, tydelig, 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-stemme | Mappas til |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_Anna |
API-reference
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 | Beskrivelse |
|---|---|---|---|
model | string | qwen3-tts | Model-id |
input | string | kræves | Text, højst 10 000 tegn |
voice | string | ryan | Røstnamn |
response_format | string | wav | Kun wav |
instruct | string | "" | Kænsla/prosodi |
language | string | automatisk | Øverstyr språkdetektering |
Svar: lydfil (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 | Beskrivelse |
|---|---|---|
input | string | Text at syntetisera |
reference_audio | file | Minst tre sekunders lyd |
reference_text | string | Transkript af referensen |
Kræver base-1.7b eller base-0.6b.
Vis stemmer
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 | Beskrivelse |
|---|---|---|
--host | 0.0.0.0 | Bindningsværd |
--port | 8100 | Bindningsport |
--model | customvoice-1.7b | Modelvariant |
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 ...
Opdatera 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
Serveren fjerner emoji, symboler og Markdown som *bold* og _italic_, fjerner sceneanvisninger som *(action)* og (whispers), forkorter FUUUUU til FUU og normaliserer mellemrum for at undgå modelstop.
Textuppdeling
Lång tekst deles ved meningsgrænser: højst 500 tegn per del, 30 sekunders timeout, mislykkede deler hoppas over og resten sammanfogas til et lydsvar.
Flera GPU'er
Serveren tvinger brugen af én GPU for at undgå konflikter mellem tensorenheder:
device_map = {"": "cuda:0"} # Uses first GPU only
CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b
Fejlfinding
Modelhæmtning mislykkes
# 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å hukommelse (Apple Silicon)
RuntimeError: MPS backend out of memory
python server.py --model customvoice-0.6b
Slut på CUDA-hukommelse
torch.cuda.OutOfMemoryError: CUDA out of memory
Luk andre GPU-apps, brug 0.6B eller minska max_chunk_size=300.
Serveren får timeout
Serveren opdeler automatisk teksten. Kontrollér loggen for at se, hvilke dele der fik timeout, og forkort inputteksten efter behov.
Lydet låter fejl
Upprepningar orsakas ofta af symboler, fejl sprog løses med language, og onaturliga pauser kan bero på ovanlig interpunktion.
Pluginskonfiguration
{
"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 — cloud-API