Integrace Qwen3-TTS
Spusťte Qwen3-TTS od Alibaba místně pro kvalitní vícejazyčný převod textu na řeč. Příručka nastavuje server TTS kompatibilní s OpenAI, který je součástí Libre WebUI.
Přehled
Qwen3-TTS nabízí devět hotových hlasů v angličtině, čínštině, japonštině a korejštině, podporu deseti jazyků, klonování hlasu ze tří sekund zvuku, návrh hlasu z přirozeného popisu a instrukce pro emoce a prozódii. Server model obaluje API kompatibilním s OpenAI pro standardní systém pluginů.
Požadavky
| Komponenta | Minimum | Doporučeno |
|---|---|---|
| Python | 3.12+ | 3.12 (nikoli 3.14) |
| GPU VRAM | 4GB (0.6B) | 8GB+ (1.7B) |
| RAM | 8GB | 16GB+ |
| Disk | 5GB | 10GB |
Podporované platformy
| Platforma | Backend | Poznámka |
|---|---|---|
| NVIDIA GPU | CUDA | Nejlepší výkon, bfloat16 |
| Apple Silicon | MPS | Pro úsporu paměti používejte 0.6B |
| CPU | PyTorch | Pomalejší, používejte 0.6B |
Na Macu používejte customvoice-0.6b. Modely 1.7B mohou na stroji s 16GB sdílené paměti způsobit nestabilitu.
Rychlý start
1. Instalace serveru
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. Spuštění serveru
# 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
Server ve výchozím stavu běží na http://localhost:8100.
3. Konfigurace Libre WebUI
Plugin je přednastaven v plugins/qwen-tts.json. Zapněte jej v 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
Dostupné modely
| Model | Velikost | Použití |
|---|---|---|
customvoice-1.7b | ~3.5GB | Hotové hlasy s instrukcemi |
customvoice-0.6b | ~1.5GB | Lehká varianta pro omezenou VRAM |
voicedesign-1.7b | ~3.5GB | Hlas z textového popisu |
base-1.7b | ~3.5GB | Klonování ze tří sekund |
base-0.6b | ~1.5GB | Lehké klonování |
Hlasy
Hotové hlasy (CustomVoice)
| Hlas | Jazyk | Popis |
|---|---|---|
| Ryan | Angličtina | Mužský, jasný a přirozený |
| Aiden | Angličtina | Mužský, teplý tón |
| Vivian | Čínština | Ženský, profesionální |
| Serena | Čínština | Ženský, přátelský |
| Uncle_Fu | Čínština | Mužský, zralý |
| Dylan | Čínština | Mužský, pekingský dialekt |
| Eric | Čínština | Mužský, sečuánský dialekt |
| Ono_Anna | Japonština | Ženský |
| Sohee | Korejština | Ženský |
Aliasy hlasů OpenAI
| Hlas OpenAI | Mapuje se na |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_Anna |
Reference API
Generování řeči
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"
}
| Parametr | Typ | Výchozí | Popis |
|---|---|---|---|
model | string | qwen3-tts | Identifikátor modelu |
input | string | povinné | Text, nejvýše 10 000 znaků |
voice | string | ryan | Název hlasu |
response_format | string | wav | Pouze wav |
instruct | string | "" | Instrukce pro emoce/prozódii |
language | string | autodetekce | Přepsání detekce jazyka |
Odpověď: zvukový soubor (audio/wav)
Návrh hlasu
Endpoint: POST /v1/audio/voice-design
Vytváří vlastní hlas z popisu v přirozeném jazyce.
{
"model": "qwen3-tts-voicedesign",
"input": "Welcome to our service.",
"voice_description": "A warm, friendly female voice with a slight British accent",
"language": "English"
}
Vyžaduje načtený model voicedesign-1.7b.
Klonování hlasu
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
| Parametr | Typ | Popis |
|---|---|---|
input | string | Text k syntéze |
reference_audio | file | Nejméně tři sekundy zvuku |
reference_text | string | Přepis referenčního zvuku |
Vyžaduje načtený base-1.7b nebo base-0.6b.
Seznam hlasů
Endpoint: GET /v1/voices
{
"voices": [
{"id": "ryan", "name": "Ryan", "language": "English"},
{"id": "aiden", "name": "Aiden", "language": "English"},
...
]
}
Kontrola zdraví
Endpoint: GET /health
{ "status": "healthy", "model_loaded": true }
Konfigurace serveru
python server.py [OPTIONS]
| Volba | Výchozí | Popis |
|---|---|---|
--host | 0.0.0.0 | Hostitel pro bind |
--port | 8100 | Port pro bind |
--model | customvoice-1.7b | Varianta modelu |
Síťový přístup
# 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 ...
Aktualizujte endpoint v 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"
}
}
}
Produkční funkce
Očištění textu
Server automaticky odstraňuje emoji a symboly, Markdown jako *bold* či _italic_, scénické pokyny jako *(action)* a (whispers), zkrátí FUUUUU na FUU a normalizuje mezery, aby se model nezasekl.
Dělení textu
Dlouhý text se automaticky dělí na hranicích vět: nejvýše 500 znaků na část, timeout 30 sekund, neúspěšná část se přeskočí a zbytek se spojí do jediné zvukové odpovědi.
Více GPU
Server vynucuje jednu GPU, aby zabránil neshodám tensorových zařízení:
device_map = {"": "cuda:0"} # Uses first GPU only
Pro konkrétní GPU:
CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b
Řešení problémů
Selhání stahování modelu
# Set Hugging Face token for gated models
export HF_TOKEN=hf_...
# Or download manually
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
Nedostatek paměti (Apple Silicon)
RuntimeError: MPS backend out of memory
python server.py --model customvoice-0.6b
Nedostatek paměti CUDA
torch.cuda.OutOfMemoryError: CUDA out of memory
Zavřete jiné GPU aplikace, použijte model 0.6B nebo snižte max_chunk_size=300.
Timeout serveru
Server text automaticky dělí. V logu zjistěte, které části vypršely, a podle potřeby text zkraťte.
Zvuk zní špatně
Opakování obvykle způsobují symboly, chybný jazyk vyřeší explicitní language a nepřirozené pauzy mohou pocházet z neobvyklé interpunkce.
Konfigurace pluginu
Dodávaný plugin (plugins/qwen-tts.json):
{
"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"
}
Zdroje
- Qwen3-TTS GitHub — oficiální repository
- Qwen3-TTS Demo — online ukázka
- Alibaba Cloud TTS — dokumentace cloudového API