Перейти до основного вмісту

Інтеграція Qwen3-TTS

Запускайте Qwen3-TTS від Alibaba локально для якісного багатомовного перетворення тексту на мовлення. Посібник описує налаштування сумісного з OpenAI сервера TTS, який входить до Libre WebUI.

Огляд

Qwen3-TTS — передова система синтезу мовлення з такими можливостями:

  • 9 готових голосів для англійської, китайської, японської та корейської
  • Підтримка 10 мов, зокрема німецької, французької, іспанської, італійської, португальської та російської
  • Клонування голосу за 3-секундним записом
  • Проєктування голосу за описом природною мовою
  • Керування інструкціями для емоцій і просодії

Вбудований сервер обгортає Qwen3-TTS у сумісний з OpenAI API, даючи Libre WebUI змогу використовувати його через стандартну систему плагінів.

Вимоги

КомпонентМінімумРекомендовано
Python3.12+3.12 (не 3.14)
GPU VRAM4GB (моделі 0.6B)8GB+ (моделі 1.7B)
Оперативна пам’ять8GB16GB+
Диск5GB10GB

Підтримка платформ

ПлатформаСерверна частинаПримітки
GPU NVIDIACUDAНайкраща швидкодія, підтримка bfloat16
Apple SiliconMPSМоделі 0.6B заощаджують пам’ять
CPUPyTorchПовільніше; використовуйте 0.6B
Користувачам Apple Silicon

На Mac використовуйте customvoice-0.6b, щоб зменшити навантаження на пам’ять. Моделі 1.7B можуть дестабілізувати комп’ютери з 16GB спільної пам’яті.

Швидкий старт

1. Установлення сервера

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. Запуск сервера

# 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

Типово сервер працює на http://localhost:8100.

3. Налаштування Libre WebUI

Плагін попередньо налаштовано в plugins/qwen-tts.json. Увімкніть його в Settings → Plugins → Qwen3 TTS.

4. Перевірка

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

Доступні моделі

МодельРозмірПризначення
customvoice-1.7b~3.5GBГотові голоси з керуванням інструкціями
customvoice-0.6b~1.5GBЛегкий варіант для обмеженої VRAM
voicedesign-1.7b~3.5GBСтворення голосів із текстових описів
base-1.7b~3.5GBКлонування за 3-секундними зразками
base-0.6b~1.5GBЛегке клонування

Голоси

Готові голоси (моделі CustomVoice)

ГолосМоваОпис
RyanАнглійськаЧоловічий, чистий і природний
AidenАнглійськаЧоловічий, теплий тон
VivianКитайськаЖіночий, професійний
SerenaКитайськаЖіночий, дружній
Uncle_FuКитайськаЧоловічий, зрілий
DylanКитайськаЧоловічий, пекінський діалект
EricКитайськаЧоловічий, сичуанський діалект
Ono_AnnaЯпонськаЖіночий
SoheeКорейськаЖіночий

Псевдоніми голосів OpenAI

Для сумісності з клієнтами OpenAI TTS сервер зіставляє назви:

Голос OpenAIВідповідає
alloyRyan
echoAiden
fableVivian
onyxUncle_Fu
novaSerena
shimmerOno_Anna

Довідник API

Генерування мовлення

Кінцева точка: POST /v1/audio/speech

{
"model": "qwen3-tts",
"input": "Text to convert to speech",
"voice": "Ryan",
"response_format": "wav",
"instruct": "Speak with enthusiasm",
"language": "English"
}
ПараметрТипТиповоОпис
modelstringqwen3-ttsІдентифікатор моделі
inputstringобов’язковоТекст синтезу (до 10 000 символів)
voicestringryanНазва голосу (див. таблицю)
response_formatstringwavФормат аудіо (тільки wav)
instructstring""Інструкція емоцій/просодії
languagestringавтовизначенняПеревизначення мови

Відповідь: аудіофайл (audio/wav)

Проєктування голосу

Кінцева точка: 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"
}
примітка

Потребує завантаженої моделі voicedesign-1.7b.

Клонування голосу

Кінцева точка: POST /v1/audio/voice-clone

Клонує голос за записом тривалістю щонайменше 3 секунди.

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
ПараметрТипОпис
inputstringТекст синтезу
reference_audiofileЗапис щонайменше 3 секунди
reference_textstringРозшифрування еталонного запису
примітка

Потребує завантаженої base-1.7b або base-0.6b.

Список голосів

Кінцева точка: GET /v1/voices

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

Перевірка стану

Кінцева точка: GET /health

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

Налаштування сервера

python server.py [OPTIONS]
ПараметрТиповоОпис
--host0.0.0.0Хост прив’язки
--port8100Порт прив’язки
--modelcustomvoice-1.7bВаріант для завантаження

Мережевий доступ

Для доступу з інших комп’ютерів мережі:

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

Оновіть кінцеву точку в 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"
}
}
}

Функції виробничого середовища

Очищення тексту

Сервер автоматично очищує текст, щоб модель не зависала:

  • Вилучає емодзі й символи
  • Вилучає Markdown (*bold*, _italic_ тощо)
  • Скорочує повторення (FUUUUUFUU)
  • Вилучає ремарки (*(action)*, (whispers))
  • Нормалізує пробіли

Поділ тексту

Довгий текст автоматично ділиться за межами речень:

  • До 500 символів на фрагмент
  • Час очікування 30 секунд на фрагмент
  • Помилкові фрагменти пропускаються, решта продовжуються
  • Фрагменти об’єднуються в одну аудіовідповідь

Це запобігає перевищенню часу довгими відповідями AI, зберігаючи природне мовлення.

Кілька GPU

У системах із кількома GPU сервер примусово використовує один, щоб уникнути невідповідності пристроїв тензорів:

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

Для конкретного GPU:

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

Усунення неполадок

Модель не завантажується

Під час першого запуску модель завантажується з Hugging Face. Якщо це не вдалося:

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

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

Бракує пам’яті (Apple Silicon)

RuntimeError: MPS backend out of memory

Використовуйте менший варіант:

python server.py --model customvoice-0.6b

Бракує пам’яті CUDA

torch.cuda.OutOfMemoryError: CUDA out of memory
  1. Закрийте інші програми GPU
  2. Використовуйте модель 0.6B
  3. Зменште фрагмент у server.py (max_chunk_size=300)

Сервер перевищує час очікування

Якщо довгий текст перевищує ліміт:

  1. Сервер автоматично ділить текст і продовжує решту фрагментів
  2. Перевірте журнали перевищень часу
  3. Скоротіть вхідний текст

Неправильне звучання

  • Повторення складів: зазвичай через емодзі або спеціальні символи; очищення має виправити.
  • Неправильна мова: явно задайте language.
  • Неприродні паузи: перевірте незвичну пунктуацію та межі поділу.

Конфігурація плагіна

Вбудований плагін (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"
}

Ресурси