Интеграция 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 unified memory.
Быстрый старт
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