Saltar al contenido principal

Integración de Qwen3-TTS

Ejecuta Qwen3-TTS de Alibaba localmente para obtener síntesis de voz multilingüe de alta calidad. Esta guía explica cómo configurar el servidor TTS compatible con OpenAI incluido en Libre WebUI.

Descripción general​

Qwen3-TTS es un sistema avanzado que ofrece:

  • 9 voces predefinidas en inglés, chino, japonés y coreano
  • Compatibilidad con 10 idiomas, incluidos alemán, francés, español, italiano, portugués y ruso
  • Clonación de voz a partir de muestras de 3 segundos
  • Diseño de voces mediante descripciones en lenguaje natural
  • Control por instrucciones de la emoción y la prosodia

El servidor incluido envuelve Qwen3-TTS en una API compatible con OpenAI para que Libre WebUI lo use mediante el sistema estándar de plugins.

Requisitos​

ComponenteMínimoRecomendado
Python3.12+3.12 (no 3.14)
GPU VRAM4GB (modelos 0.6B)8GB+ (modelos 1.7B)
RAM8GB16GB+
Disco5GB10GB

Plataformas compatibles​

PlataformaBackendNotas
GPU NVIDIACUDAMejor rendimiento, compatible con bfloat16
Apple SiliconMPSUsa modelos 0.6B para ahorrar memoria
CPUPyTorchMás lento; usa modelos 0.6B
Usuarios de Apple Silicon

Usa la variante customvoice-0.6b en Mac para evitar presión de memoria. Los modelos 1.7B pueden causar inestabilidad en equipos con 16GB de memoria unificada.

Inicio rápido​

1. Instalar el servidor​

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. Iniciar el servidor​

# 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

El servidor se ejecuta en http://localhost:8100 de forma predeterminada.

3. Configurar Libre WebUI​

El plugin está preconfigurado en plugins/qwen-tts.json. Actívalo en Ajustes → Plugins → Qwen3 TTS.

4. Probarlo​

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

Modelos disponibles​

ModeloTamañoUso
customvoice-1.7b~3.5GBVoces predefinidas con control por instrucciones
customvoice-0.6b~1.5GBVariante ligera para VRAM limitada
voicedesign-1.7b~3.5GBCrear voces desde descripciones
base-1.7b~3.5GBClonar voces desde muestras de 3 segundos
base-0.6b~1.5GBClonación ligera

Voces​

Voces predefinidas (modelos CustomVoice)​

VozIdiomaDescripción
RyanInglésMasculina, clara y natural
AidenInglésMasculina, tono cálido
VivianChinoFemenina, profesional
SerenaChinoFemenina, amable
Uncle_FuChinoMasculina, madura
DylanChinoMasculina, dialecto de Pekín
EricChinoMasculina, dialecto de Sichuan
Ono_AnnaJaponésFemenina
SoheeCoreanoFemenina

Alias de voces de OpenAI​

Para ser compatible con clientes TTS de OpenAI, el servidor asigna estos nombres:

Voz OpenAISe asigna a
alloyRyan
echoAiden
fableVivian
onyxUncle_Fu
novaSerena
shimmerOno_Anna

Referencia de la API​

Generación de voz​

Endpoint: POST /v1/audio/speech

{
"model": "qwen3-tts",
"input": "Text to convert to speech",
"voice": "Ryan",
"response_format": "wav",
"instruct": "Speak with enthusiasm",
"language": "English"
}
ParámetroTipoPredeterminadoDescripción
modelstringqwen3-ttsIdentificador del modelo
inputstringobligatorioTexto que sintetizar (máx. 10,000 caracteres)
voicestringryanNombre de voz
response_formatstringwavFormato (solo se admite wav)
instructstring""Instrucción de emoción o prosodia
languagestringdetección automáticaSustituye la detección del idioma

Respuesta: archivo de audio (audio/wav)

Diseño de voces​

Endpoint: POST /v1/audio/voice-design

Crea voces personalizadas desde descripciones en lenguaje natural.

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

Requiere cargar el modelo voicedesign-1.7b.

Clonación de voz​

Endpoint: POST /v1/audio/voice-clone

Clona una voz desde una muestra de al menos 3 segundos.

curl -X POST http://localhost:8100/v1/audio/voice-clone \
-F "input=Hello, this is my cloned voice." \
-F "reference_text=This is what was said in the reference." \
--output cloned.wav
ParámetroTipoDescripción
inputstringTexto que sintetizar
reference_audiofileMuestra de al menos 3 segundos
reference_textstringTranscripción del audio de referencia
nota

Requiere cargar base-1.7b o base-0.6b.

Listar voces​

Endpoint: GET /v1/voices

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

Comprobación de salud​

Endpoint: GET /health

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

Configuración del servidor​

python server.py [OPTIONS]
OpciónPredeterminadoDescripción
--host0.0.0.0Host al que vincularse
--port8100Puerto al que vincularse
--modelcustomvoice-1.7bVariante que cargar

Acceso de red​

Para acceder desde otras máquinas:

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

Actualiza el endpoint en 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"
}
}
}

Funciones de producción​

Saneamiento del texto​

El servidor sanea automáticamente la entrada para evitar bloqueos:

  • Elimina emojis y símbolos
  • Quita formato markdown (*bold*, _italic_, etc.)
  • Reduce caracteres repetidos (FUUUUU → FUU)
  • Elimina acotaciones (*(action)*, (whispers))
  • Normaliza espacios

División del texto​

Los textos largos se dividen automáticamente en límites de oración:

  • Máximo de 500 caracteres por fragmento
  • Tiempo de espera de 30 segundos por fragmento
  • Los fragmentos fallidos se omiten y los demás continúan
  • Los fragmentos se concatenan en una sola respuesta

Así se evitan tiempos de espera en respuestas largas manteniendo una voz natural.

Configuración multi-GPU​

En sistemas con varias GPU, el servidor fuerza una sola GPU para evitar incompatibilidades de dispositivo entre tensores:

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

Para usar una GPU concreta:

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

Solución de problemas​

Falla la descarga del modelo​

El modelo se descarga de Hugging Face en la primera ejecución. Si falla:

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

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

Memoria insuficiente (Apple Silicon)​

RuntimeError: MPS backend out of memory

Usa la variante pequeña:

python server.py --model customvoice-0.6b

Memoria CUDA insuficiente​

torch.cuda.OutOfMemoryError: CUDA out of memory
  1. Cierra otras aplicaciones de GPU
  2. Usa la variante 0.6B
  3. Reduce el tamaño en server.py (max_chunk_size=300)

El servidor agota el tiempo​

Si la generación de un texto largo agota el tiempo:

  1. El servidor divide automáticamente el texto y continúa
  2. Consulta los registros para saber qué fragmentos fallaron
  3. Considera acortar la entrada

El audio suena mal​

  • Sílabas repetidas: suelen deberse a emojis o caracteres especiales; el saneador debe eliminarlos.
  • Idioma incorrecto: define explícitamente language.
  • Pausas poco naturales: revisa la puntuación inusual.

Configuración del plugin​

El plugin incluido (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"
}

Recursos​