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_audio=@reference.wav" \
-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 (FUUUUUFUU)
  • 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