Hoppa till huvudinnehåll

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

KomponentMinimumRekommenderat
Python3.12+3.12 (inte 3.14)
GPU VRAM4GB (0.6B)8GB+ (1.7B)
RAM8GB16GB+
Disk5GB10GB

Plattformar

PlattformBackendKommentar
NVIDIA GPUCUDABäst prestanda, bfloat16
Apple SiliconMPSAnvänd 0.6B för minnet
CPUPyTorchLångsammare, använd 0.6B
Apple Silicon

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

ModellStorlekAnvändning
customvoice-1.7b~3.5GBFärdiga röster och instruktioner
customvoice-0.6b~1.5GBLätt variant
voicedesign-1.7b~3.5GBRöst från textbeskrivning
base-1.7b~3.5GBKloning från tre sekunder
base-0.6b~1.5GBLätt kloning

Röster

Färdiga röster (CustomVoice)

RöstSpråkBeskrivning
RyanEngelskaManlig, tydlig, naturlig
AidenEngelskaManlig, varm
VivianKinesiskaKvinnlig, professionell
SerenaKinesiskaKvinnlig, vänlig
Uncle_FuKinesiskaManlig, mogen
DylanKinesiskaManlig, Beijingdialekt
EricKinesiskaManlig, Sichuandialekt
Ono_AnnaJapanskaKvinnlig
SoheeKoreanskaKvinnlig

OpenAI-röstalias

OpenAI-röstMappas till
alloyRyan
echoAiden
fableVivian
onyxUncle_Fu
novaSerena
shimmerOno_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"
}
ParameterTypStandardBeskrivning
modelstringqwen3-ttsModell-id
inputstringkrävsText, högst 10 000 tecken
voicestringryanRöstnamn
response_formatstringwavEndast wav
instructstring""Känsla/prosodi
languagestringautomatiskÖ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"
}
anteckning

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
ParameterTypBeskrivning
inputstringText att syntetisera
reference_audiofileMinst tre sekunders ljud
reference_textstringTranskript av referensen
anteckning

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]
AlternativStandardBeskrivning
--host0.0.0.0Bindningsvärd
--port8100Bindningsport
--modelcustomvoice-1.7bModellvariant

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