Lewati ke konten utama

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

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

Dukungan Platform

PlatformBackendCatatan
GPU NVIDIACUDAKinerja terbaik, bfloat16
Apple SiliconMPSGunakan 0.6B untuk efisiensi
CPUPyTorchLebih lambat; gunakan 0.6B
Pengguna Apple Silicon

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

ModelUkuranPenggunaan
customvoice-1.7b~3.5GBSuara bawaan dengan instruksi
customvoice-0.6b~1.5GBRingan untuk VRAM terbatas
voicedesign-1.7b~3.5GBSuara dari deskripsi
base-1.7b~3.5GBKloning 3 detik
base-0.6b~1.5GBKloning ringan

Suara

Suara Bawaan

SuaraBahasaDeskripsi
RyanInggrisPria, jelas, alami
AidenInggrisPria, hangat
VivianMandarinWanita, profesional
SerenaMandarinWanita, ramah
Uncle_FuMandarinPria, matang
DylanMandarinPria, dialek Beijing
EricMandarinPria, dialek Sichuan
Ono_AnnaJepangWanita
SoheeKoreaWanita

Alias Suara OpenAI

Suara OpenAIDipetakan ke
alloyRyan
echoAiden
fableVivian
onyxUncle_Fu
novaSerena
shimmerOno_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"
}
ParameterTipeBawaanDeskripsi
modelstringqwen3-ttsID model
inputstringwajibTeks (maksimal 10.000 karakter)
voicestringryanNama suara
response_formatstringwavFormat (hanya wav)
instructstring""Instruksi emosi/prosodi
languagestringotomatisTimpa 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"
}
catatan

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
ParameterTipeDeskripsi
inputstringTeks
reference_audiofileSampel 3+ detik
reference_textstringTranskrip referensi
catatan

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]
OpsiBawaanDeskripsi
--host0.0.0.0Host
--port8100Port
--modelcustomvoice-1.7bModel

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 (FUUUUUFUU)
  • 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
  1. Tutup aplikasi GPU lain
  2. Gunakan 0.6B
  3. Kurangi max_chunk_size=300 di 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"
}

Sumber Daya