Integrasi Qwen3-TTS
Jalankan Qwen3-TTS Alibaba secara lokal untuk teks-ke-ucapan multibahasa berkualitas tinggi. Panduan ini menjelaskan server TTS kompatibel OpenAI yang disertakan Libre WebUI.
Ringkasan
Qwen3-TTS menyediakan:
- 9 suara bawaan untuk Inggris, Mandarin, Jepang, Korea
- 10 bahasa, termasuk Jerman, Prancis, Spanyol, Italia, Portugis, Rusia
- Kloning suara dari sampel 3 detik
- Desain suara dari deskripsi bahasa alami
- Kendali instruksi untuk emosi dan prosodi
Server membungkus Qwen3-TTS dalam API kompatibel OpenAI agar Libre WebUI dapat memakainya melalui plugin.
Persyaratan
| Komponen | Minimum | Disarankan |
|---|---|---|
| Python | 3.12+ | 3.12 (bukan 3.14) |
| GPU VRAM | 4GB (0.6B) | 8GB+ (1.7B) |
| RAM | 8GB | 16GB+ |
| Disk | 5GB | 10GB |
Dukungan Platform
| Platform | Backend | Catatan |
|---|---|---|
| GPU NVIDIA | CUDA | Kinerja terbaik, bfloat16 |
| Apple Silicon | MPS | Gunakan 0.6B untuk efisiensi |
| CPU | PyTorch | Lebih lambat; gunakan 0.6B |
Gunakan customvoice-0.6b pada Mac. Model 1.7B dapat menekan sistem dengan memori terpadu 16GB.
Mulai Cepat
1. Pasang Server
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. Jalankan Server
# 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 berjalan di http://localhost:8100.
3. Konfigurasi Libre WebUI
Plugin sudah dikonfigurasi di plugins/qwen-tts.json. Aktifkan melalui Settings → Plugins → Qwen3 TTS.
4. Uji
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
Model Tersedia
| Model | Ukuran | Penggunaan |
|---|---|---|
customvoice-1.7b | ~3.5GB | Suara bawaan dengan instruksi |
customvoice-0.6b | ~1.5GB | Ringan untuk VRAM terbatas |
voicedesign-1.7b | ~3.5GB | Suara dari deskripsi |
base-1.7b | ~3.5GB | Kloning 3 detik |
base-0.6b | ~1.5GB | Kloning ringan |
Suara
Suara Bawaan
| Suara | Bahasa | Deskripsi |
|---|---|---|
| Ryan | Inggris | Pria, jelas, alami |
| Aiden | Inggris | Pria, hangat |
| Vivian | Mandarin | Wanita, profesional |
| Serena | Mandarin | Wanita, ramah |
| Uncle_Fu | Mandarin | Pria, matang |
| Dylan | Mandarin | Pria, dialek Beijing |
| Eric | Mandarin | Pria, dialek Sichuan |
| Ono_Anna | Jepang | Wanita |
| Sohee | Korea | Wanita |
Alias Suara OpenAI
| Suara OpenAI | Dipetakan ke |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_Anna |
Referensi API
Membuat Ucapan
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 | Tipe | Bawaan | Deskripsi |
|---|---|---|---|
model | string | qwen3-tts | ID model |
input | string | wajib | Teks (maksimal 10.000 karakter) |
voice | string | ryan | Nama suara |
response_format | string | wav | Format (hanya wav) |
instruct | string | "" | Instruksi emosi/prosodi |
language | string | otomatis | Timpa bahasa |
Respons: berkas (audio/wav)
Desain Suara
Endpoint: POST /v1/audio/voice-design
Buat suara dari deskripsi bahasa alami.
{
"model": "qwen3-tts-voicedesign",
"input": "Welcome to our service.",
"voice_description": "A warm, friendly female voice with a slight British accent",
"language": "English"
}
Memerlukan voicedesign-1.7b.
Kloning Suara
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 | Tipe | Deskripsi |
|---|---|---|
input | string | Teks |
reference_audio | file | Sampel 3+ detik |
reference_text | string | Transkrip referensi |
Memerlukan base-1.7b atau base-0.6b.
Daftar Suara
Endpoint: GET /v1/voices
{
"voices": [
{"id": "ryan", "name": "Ryan", "language": "English"},
{"id": "aiden", "name": "Aiden", "language": "English"},
...
]
}
Pemeriksaan Kesehatan
Endpoint: GET /health
{ "status": "healthy", "model_loaded": true }
Konfigurasi Server
python server.py [OPTIONS]
| Opsi | Bawaan | Deskripsi |
|---|---|---|
--host | 0.0.0.0 | Host |
--port | 8100 | Port |
--model | customvoice-1.7b | Model |
Akses Jaringan
# 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 ...
Perbarui 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"
}
}
}
Fitur Produksi
Sanitasi Teks
Server otomatis:
- Menghapus emoji dan simbol
- Menghapus Markdown (
*bold*,_italic_) - Menyingkat pengulangan (
FUUUUU→FUU) - Menghapus arahan panggung (
*(action)*,(whispers)) - Menormalkan spasi
Pemenggalan Teks
- Maksimal 500 karakter per bagian
- Batas 30 detik
- Bagian gagal dilewati
- Bagian digabung menjadi satu audio
Ini mencegah habis waktu pada jawaban panjang sambil mempertahankan aliran alami.
Banyak GPU
Server memaksa satu GPU agar tensor tidak berbeda perangkat:
device_map = {"": "cuda:0"} # Uses first GPU only
CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b
Pemecahan Masalah
Unduhan Model Gagal
# Set Hugging Face token for gated models
export HF_TOKEN=hf_...
# Or download manually
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
Kehabisan Memori Apple Silicon
RuntimeError: MPS backend out of memory
python server.py --model customvoice-0.6b
Kehabisan Memori CUDA
torch.cuda.OutOfMemoryError: CUDA out of memory
- Tutup aplikasi GPU lain
- Gunakan 0.6B
- Kurangi
max_chunk_size=300di server.py
Server Kehabisan Waktu
Periksa log, biarkan pemenggalan otomatis berjalan, atau pendekkan teks.
Audio Salah
- Suku kata berulang: emoji/simbol
- Bahasa salah: tetapkan
language - Jeda tidak alami: periksa tanda baca
Konfigurasi Plugin
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"
}