Інтеграція Qwen3-TTS
Запускайте Qwen3-TTS від Alibaba локально для якісного багатомовного перетворення тексту на мовлення. Посібник описує налаштування сумісного з OpenAI сервера TTS, який входить до Libre WebUI.
Огляд
Qwen3-TTS — передова система синтезу мовлення з такими можливостями:
- 9 готових голосів для англійської, китайської, японської та корейської
- Підтримка 10 мов, зокрема німецької, французької, іспанської, італійської, португальської та російської
- Клонування голосу за 3-секундним записом
- Проєктування голосу за описом природною мовою
- Керування інструкціями для емоцій і просодії
Вбудований сервер обгортає Qwen3-TTS у сумісний з OpenAI API, даючи Libre WebUI змогу використовувати його через стандартну систему плагінів.
Вимоги
| Компонент | Мінімум | Рекомендовано |
|---|---|---|
| Python | 3.12+ | 3.12 (не 3.14) |
| GPU VRAM | 4GB (моделі 0.6B) | 8GB+ (моделі 1.7B) |
| Оперативна пам’ять | 8GB | 16GB+ |
| Диск | 5GB | 10GB |
Підтримка платформ
| Платформа | Серверна частина | Примітки |
|---|---|---|
| GPU NVIDIA | CUDA | Найкраща швидкодія, підтримка bfloat16 |
| Apple Silicon | MPS | Моделі 0.6B заощаджують пам’ять |
| CPU | PyTorch | Повільніше; використовуйте 0.6B |
На 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 | Відповідає |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_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"
}
| Параметр | Тип | Типово | Опис |
|---|---|---|---|
model | string | qwen3-tts | Ідентифікатор моделі |
input | string | обов’язково | Текст синтезу (до 10 000 символів) |
voice | string | ryan | Назва голосу (див. таблицю) |
response_format | string | wav | Формат аудіо (тільки wav) |
instruct | string | "" | Інструкція емоцій/просодії |
language | string | автовизначення | Перевизначення мови |
Відповідь: аудіофайл (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
| Параметр | Тип | Опис |
|---|---|---|
input | string | Текст синтезу |
reference_audio | file | Запис щонайменше 3 секунди |
reference_text | string | Розшифрування еталонного запису |
Потребує завантаженої 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]
| Параметр | Типово | Опис |
|---|---|---|
--host | 0.0.0.0 | Хост прив’язки |
--port | 8100 | Порт прив’язки |
--model | customvoice-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_тощо) - Скорочує повторення (
FUUUUU→FUU) - Вилучає ремарки (
*(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
- Закрийте інші програми GPU
- Використовуйте модель 0.6B
- Зменште фрагмент у server.py (
max_chunk_size=300)
Сервер перевищує час очікування
Якщо довгий текст перевищує ліміт:
- Сервер автоматично ділить текст і продовжує решту фрагментів
- Перевірте журнали перевищень часу
- Скоротіть вхідний текст
Неправильне звучання
- Повторення складів: зазвичай через емодзі або спеціальні символи; очищення має виправити.
- Неправильна мова: явно задайте
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"
}
Ресурси
- Qwen3-TTS GitHub - Офіційний репозиторій
- Демонстрація Qwen3-TTS - Спробувати онлайн
- Документація Alibaba Cloud TTS - Документація хмарного API