Qwen3-TTS-Integration
Diese Anleitung richtet den enthaltenen OpenAI-kompatiblen Server für Alibaba Qwen3-TTS ein.
Überblick
Qwen3-TTS bietet 9 vorgefertigte englische, chinesische, japanische und koreanische Stimmen, 10 Sprachen einschließlich Deutsch, Französisch, Spanisch, Italienisch, Portugiesisch und Russisch, Klonen aus 3-Sekunden-Aufnahmen, Stimmendesign aus Beschreibungen und Anweisungen für Emotion und Prosodie.
Voraussetzungen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| Python | 3.12+ | 3.12 (nicht 3.14) |
| GPU VRAM | 4GB (0.6B-Modelle) | 8GB+ (1.7B) |
| RAM | 8GB | 16GB+ |
| Speicher | 5GB | 10GB |
Plattformunterstützung
| Plattform | Backend | Hinweise |
|---|---|---|
| NVIDIA-GPU | CUDA | Beste Leistung, bfloat16 |
| Apple Silicon | MPS | 0.6B für Speichereffizienz |
| CPU | PyTorch | Langsamer, 0.6B verwenden |
Verwende customvoice-0.6b; 1.7B kann Systeme mit 16GB Unified Memory destabilisieren.
Schnellstart
1. Server installieren
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. Server starten
# 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
Standard: http://localhost:8100.
3. Libre WebUI konfigurieren
Aktiviere plugins/qwen-tts.json unter Einstellungen → Plugins → Qwen3 TTS.
4. Testen
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
Verfügbare Modelle
| Modell | Größe | Einsatz |
|---|---|---|
customvoice-1.7b | ~3.5GB | Vorgefertigte Stimmen und Anweisungen |
customvoice-0.6b | ~1.5GB | Leichtgewichtig |
voicedesign-1.7b | ~3.5GB | Stimmen aus Beschreibungen |
base-1.7b | ~3.5GB | Klonen aus 3 Sekunden |
base-0.6b | ~1.5GB | Leichtes Klonen |
Stimmen
Vorgefertigte Stimmen (CustomVoice)
| Stimme | Sprache | Beschreibung |
|---|---|---|
| Ryan | Englisch | Männlich, klar, natürlich |
| Aiden | Englisch | Männlich, warm |
| Vivian | Chinesisch | Weiblich, professionell |
| Serena | Chinesisch | Weiblich, freundlich |
| Uncle_Fu | Chinesisch | Männlich, reif |
| Dylan | Chinesisch | Peking-Dialekt |
| Eric | Chinesisch | Sichuan-Dialekt |
| Ono_Anna | Japanisch | Weiblich |
| Sohee | Koreanisch | Weiblich |
OpenAI-Stimmen-Aliase
| OpenAI-Stimme | Zuordnung |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_Anna |
API-Referenz
Spracherzeugung
Endpunkt: 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 | Beschreibung |
|---|---|---|---|
model | string | qwen3-tts | Modell-ID |
input | string | erforderlich | Text, maximal 10,000 Zeichen |
voice | string | ryan | Stimmenname |
response_format | string | wav | Nur wav |
instruct | string | "" | Emotion/Prosodie |
language | string | automatisch | Spracherkennung überschreiben |
Antwort: Audio (audio/wav)
Stimmendesign
Endpunkt: 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"
}
Benötigt voicedesign-1.7b.
Stimmenklonen
Endpunkt: 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 | Beschreibung |
|---|---|---|
input | string | Zu synthetisierender Text |
reference_audio | file | Aufnahme ab 3 Sekunden |
reference_text | string | Transkript |
Benötigt base-1.7b oder base-0.6b.
Stimmen auflisten
Endpunkt: GET /v1/voices
{
"voices": [
{"id": "ryan", "name": "Ryan", "language": "English"},
{"id": "aiden", "name": "Aiden", "language": "English"},
...
]
}
Gesundheitsprüfung
Endpunkt: GET /health
{ "status": "healthy", "model_loaded": true }
Serverkonfiguration
python server.py [OPTIONS]
| Option | Standard | Beschreibung |
|---|---|---|
--host | 0.0.0.0 | Bind-Adresse |
--port | 8100 | Port |
--model | customvoice-1.7b | Modellvariante |
Netzwerkzugriff
# 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 ...
{
"endpoint": "http://192.168.1.100:8100/v1/audio/speech",
"capabilities": {
"tts": {
"endpoint": "http://192.168.1.100:8100/v1/audio/speech"
}
}
}
Produktionsfunktionen
Textbereinigung
Emojis und Symbole, Markdown wie *bold* und _italic_, Wiederholungen (FUUUUU → FUU), Regieanweisungen wie *(action)* und (whispers) sowie Leerraum werden bereinigt.
Textaufteilung
Maximal 500 Zeichen pro Abschnitt, 30 Sekunden Timeout; fehlerhafte Abschnitte werden übersprungen, übrige zu einer Antwort verbunden. So bleiben lange Antworten natürlich und vermeiden Timeouts.
Multi-GPU-Einrichtung
device_map = {"": "cuda:0"} # Uses first GPU only
CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b
Fehlerbehebung
Modelldownload schlägt fehl
# Set Hugging Face token for gated models
export HF_TOKEN=hf_...
# Or download manually
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
Speichermangel (Apple Silicon)
RuntimeError: MPS backend out of memory
python server.py --model customvoice-0.6b
CUDA-Speichermangel
torch.cuda.OutOfMemoryError: CUDA out of memory
- Andere GPU-Anwendungen schließen.
- 0.6B verwenden.
max_chunk_size=300setzen.
Server-Timeout
Automatische Aufteilung und Logs prüfen, Eingabe bei Bedarf kürzen.
Audio klingt falsch
- Wiederholungen: Sonderzeichen bereinigen.
- Falsche Sprache:
languagesetzen. - Unnatürliche Pausen: Zeichensetzung prüfen.
Plugin-Konfiguration
{
"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"
}
Ressourcen
- Qwen3-TTS GitHub – offizielles Repository
- Qwen3-TTS Demo – online testen
- Alibaba Cloud TTS – Cloud-API