Przejdź do głównej zawartości

Integracja Qwen3-TTS

Uruchom Qwen3-TTS firmy Alibaba lokalnie, aby uzyskać wysokiej jakości wielojęzyczną zamianę tekstu na mowę. Ten przewodnik opisuje konfigurację serwera TTS zgodnego z OpenAI, dołączonego do Libre WebUI.

Omówienie

Qwen3-TTS to zaawansowany system zamiany tekstu na mowę oferujący:

  • 9 gotowych głosów w języku angielskim, chińskim, japońskim i koreańskim
  • Obsługę 10 języków, w tym niemieckiego, francuskiego, hiszpańskiego, włoskiego, portugalskiego i rosyjskiego
  • Klonowanie głosu z 3-sekundowych próbek audio
  • Projektowanie głosu za pomocą opisów w języku naturalnym
  • Sterowanie instrukcjami dla emocji i prozodii

Dołączony serwer udostępnia Qwen3-TTS przez API zgodne z OpenAI, dzięki czemu Libre WebUI może używać go przez standardowy system wtyczek.

Wymagania

KomponentMinimumZalecane
Python3.12+3.12 (nie 3.14)
GPU VRAM4GB (modele 0.6B)8GB+ (modele 1.7B)
RAM8GB16GB+
Dysk5GB10GB

Obsługa platform

PlatformaBackendUwagi
GPU NVIDIACUDANajlepsza wydajność, obsługa bfloat16
Apple SiliconMPSUżywaj modeli 0.6B dla oszczędności pamięci
CPUPyTorchWolniej; używaj modeli 0.6B
Użytkownicy Apple Silicon

Na komputerach Mac używaj wariantu customvoice-0.6b, aby ograniczyć presję na pamięć. Modele 1.7B mogą destabilizować systemy z 16GB pamięci zunifikowanej.

Szybki start

1. Instalowanie serwera

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. Uruchamianie serwera

# 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

Serwer domyślnie działa pod adresem http://localhost:8100.

3. Konfigurowanie Libre WebUI

Wtyczka jest wstępnie skonfigurowana w plugins/qwen-tts.json. Włącz ją w Settings → Plugins → Qwen3 TTS.

4. Testowanie

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

Dostępne modele

ModelRozmiarZastosowanie
customvoice-1.7b~3.5GBGotowe głosy ze sterowaniem instrukcjami
customvoice-0.6b~1.5GBLekki wariant dla ograniczonego VRAM
voicedesign-1.7b~3.5GBTworzenie głosów z opisów tekstowych
base-1.7b~3.5GBKlonowanie głosu z 3-sekundowych próbek
base-0.6b~1.5GBLekkie klonowanie głosu

Głosy

Gotowe głosy (modele CustomVoice)

GłosJęzykOpis
RyanAngielskiMęski, wyraźny i naturalny
AidenAngielskiMęski, ciepły ton
VivianChińskiŻeński, profesjonalny
SerenaChińskiŻeński, przyjazny
Uncle_FuChińskiMęski, dojrzały
DylanChińskiMęski, dialekt pekiński
EricChińskiMęski, dialekt syczuański
Ono_AnnaJapońskiŻeński
SoheeKoreańskiŻeński

Aliasy głosów OpenAI

Dla zgodności z klientami OpenAI TTS serwer mapuje nazwy głosów OpenAI:

Głos OpenAIMapowanie
alloyRyan
echoAiden
fableVivian
onyxUncle_Fu
novaSerena
shimmerOno_Anna

Dokumentacja API

Generowanie mowy

Punkt końcowy: POST /v1/audio/speech

{
"model": "qwen3-tts",
"input": "Text to convert to speech",
"voice": "Ryan",
"response_format": "wav",
"instruct": "Speak with enthusiasm",
"language": "English"
}
ParametrTypDomyślnieOpis
modelstringqwen3-ttsIdentyfikator modelu
inputstringwymaganyTekst do syntezy (maks. 10 000 znaków)
voicestringryanNazwa głosu (zobacz tabelę wyżej)
response_formatstringwavFormat audio (obsługiwany tylko wav)
instructstring""Instrukcja emocji/prozodii
languagestringwykrywanie automatyczneNadpisanie wykrywania języka

Odpowiedź: plik audio (audio/wav)

Projektowanie głosu

Punkt końcowy: POST /v1/audio/voice-design

Tworzy niestandardowe głosy z opisów w języku naturalnym.

{
"model": "qwen3-tts-voicedesign",
"input": "Welcome to our service.",
"voice_description": "A warm, friendly female voice with a slight British accent",
"language": "English"
}
notatka

Wymaga załadowania modelu voicedesign-1.7b.

Klonowanie głosu

Punkt końcowy: POST /v1/audio/voice-clone

Klonuje głos z próbki audio o długości co najmniej 3 sekund.

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
ParametrTypOpis
inputstringTekst do syntezy
reference_audiofilePróbka audio co najmniej 3-sekundowa
reference_textstringTranskrypcja audio referencyjnego
notatka

Wymaga załadowania modelu base-1.7b lub base-0.6b.

Lista głosów

Punkt końcowy: GET /v1/voices

{
"voices": [
{"id": "ryan", "name": "Ryan", "language": "English"},
{"id": "aiden", "name": "Aiden", "language": "English"},
...
]
}

Kontrola stanu

Punkt końcowy: GET /health

{ "status": "healthy", "model_loaded": true }

Konfiguracja serwera

python server.py [OPTIONS]
OpcjaDomyślnieOpis
--host0.0.0.0Host do powiązania
--port8100Port do powiązania
--modelcustomvoice-1.7bWariant modelu do załadowania

Dostęp sieciowy

Aby korzystać z serwera z innych komputerów w sieci:

# 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 ...

Zaktualizuj punkt końcowy wtyczki w 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"
}
}
}

Funkcje produkcyjne

Oczyszczanie tekstu

Serwer automatycznie oczyszcza tekst wejściowy, aby zapobiegać zawieszaniu modelu:

  • Usuwa emoji i symbole
  • Usuwa formatowanie Markdown (*bold*, _italic_ itp.)
  • Skraca powtarzane znaki (FUUUUUFUU)
  • Usuwa didaskalia (*(action)*, (whispers))
  • Normalizuje białe znaki

Dzielenie tekstu

Długi tekst jest automatycznie dzielony na granicach zdań:

  • Maksymalnie 500 znaków na fragment
  • Limit 30 sekund na fragment
  • Nieudane fragmenty są pomijane, a pozostałe są kontynuowane
  • Fragmenty są łączone w jedną odpowiedź audio

Zapobiega to przekraczaniu limitu czasu przy długich odpowiedziach AI, zachowując naturalny przepływ mowy.

Konfiguracja wielu GPU

W systemach z wieloma GPU serwer wymusza wykonanie na jednym GPU, aby uniknąć niezgodności urządzeń tensorów:

device_map = {"": "cuda:0"} # Uses first GPU only

Aby użyć konkretnego GPU:

CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b

Rozwiązywanie problemów

Nieudane pobieranie modelu

Przy pierwszym uruchomieniu model jest pobierany z Hugging Face. Jeśli pobieranie się nie powiedzie:

# Set Hugging Face token for gated models
export HF_TOKEN=hf_...

# Or download manually
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice

Brak pamięci (Apple Silicon)

RuntimeError: MPS backend out of memory

Użyj mniejszego wariantu modelu:

python server.py --model customvoice-0.6b

Brak pamięci CUDA

torch.cuda.OutOfMemoryError: CUDA out of memory
  1. Zamknij inne aplikacje używające GPU
  2. Użyj wariantu 0.6B
  3. Zmniejsz rozmiar fragmentu w server.py (max_chunk_size=300)

Serwer przekracza limit czasu

Jeśli generowanie długiego tekstu przekracza limit czasu:

  1. Serwer automatycznie dzieli tekst i kontynuuje pozostałe fragmenty
  2. Sprawdź w logach, które fragmenty przekroczyły limit
  3. Rozważ skrócenie tekstu wejściowego

Dźwięk brzmi nieprawidłowo

  • Powtarzane sylaby: zwykle powodują je emoji lub znaki specjalne. Oczyszczanie powinno obsłużyć je automatycznie.
  • Niewłaściwy język: jawnie ustaw parametr language w żądaniu.
  • Nienaturalne pauzy: tekst może być dzielony w niewłaściwych miejscach. Sprawdź nietypową interpunkcję.

Konfiguracja wtyczki

Dołączona wtyczka (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"
}

Zasoby