Перейти к основному содержимому

Интеграция 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 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Соответствует
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"
}

Ресурсы