OuteTTS: un modelo de voz que, en secreto, no es más que un LLM
Convierte texto y grabaciones en audio listo para escuchar
Doblaje, stems, covers y efectos de sonido, todo en el navegador.
- Texto a voz, y también clonación de voz
- Separa pistas, o genera un cover
- Regístrate para escuchar primero y decidir después
La mayoría de los modelos de TTS necesitan su propio pipeline de inferencia: un entorno de ejecución especializado que sepa manejar vocoders, mel-espectrogramas y las particularidades arquitectónicas propias del audio. OuteTTS, de OuteAI, evita todo eso al tratar la generación de habla como nada más que modelado del lenguaje: predecir el siguiente token, solo que los tokens representan audio en lugar de palabras. Como eso es realmente todo lo que hace internamente, OuteTTS se ejecuta directamente mediante llama.cpp —el mismo motor ligero que ejecuta cualquier otro modelo de lenguaje GGUF— sin necesidad de un entorno de ejecución específico para TTS.
¿Qué es OuteTTS?
OuteTTS es un proyecto experimental de texto a voz construido por completo sobre una arquitectura estándar de gran modelo de lenguaje. Utiliza prompts elaborados y tokens de audio, en lugar de un pipeline de TTS especializado al que se hayan añadido adaptadores externos o componentes específicos de un vocoder. Las primeras versiones se crearon sobre una base personalizada derivada de LLaMA (Oute3-350M-DEV); las versiones posteriores pasaron a backbones consolidados: Qwen-2.5-0.5B para la versión 0.2 y una arquitectura Llama para el modelo insignia actual, Llama-OuteTTS-1.0-1B. El hilo conductor de todas las versiones es el mismo: si puedes ejecutar un modelo de lenguaje, puedes ejecutar OuteTTS, porque, desde el punto de vista arquitectónico, eso es exactamente lo que es.
Historial de versiones
- OuteTTS-0.1-350M — la prueba de concepto original, que demostró que el modelado puro del lenguaje podía producir síntesis de voz utilizable sin una arquitectura de TTS hecha a medida. Con 350M de parámetros, es lo bastante compacto como para ejecutarse casi en cualquier parte, pero la contrapartida se nota: el modelo puede modificar, insertar u omitir palabras con frecuencia, lo que produce una calidad de salida visiblemente irregular.
- OuteTTS-0.2-500M — construido sobre Qwen-2.5-0.5B y entrenado con más de 5.000 millones de tokens de prompts de audio; añadió un codificador de audio DAC (Descript Audio Codec) con dos codebooks para mejorar de forma apreciable la calidad de reconstrucción del audio, además de perfeccionar la clonación de voz.
- OuteTTS-0.3-500M — un refinamiento intermedio con cambios en el formato de los prompts, lo que también explica por qué a veces hay que comprobar versión por versión la compatibilidad de las herramientas de la comunidad y las integraciones con llama.cpp.
- Llama-OuteTTS-1.0-1B — la versión insignia actual, que incorpora alineación automática de palabras (entrada de texto sin procesar, sin necesidad de preprocesamiento) y amplía de forma considerable la cobertura multilingüe, manteniendo al mismo tiempo un tamaño general compacto de 1.000 millones de parámetros.
Por qué llama.cpp en concreto
No se trata de una elección de compatibilidad arbitraria: es una consecuencia directa del diseño de modelado puro del lenguaje de OuteTTS, y existe una razón técnica concreta por la que llama.cpp produce los resultados más fiables entre los backends compatibles con OuteTTS.
El muestreo de OuteTTS 1.0 exige que la penalización por repetición se aplique a una ventana reciente de 64 tokens, no a toda la ventana de contexto; penalizar el contexto completo causa una salida dañada o degradada. llama.cpp gestiona correctamente y de forma predeterminada esta penalización por ventana, lo que explica en parte que históricamente haya ofrecido la calidad de salida más consistente entre los backends compatibles. Otros backends, incluido el Hugging Face Transformers estándar, no implementaban originalmente este enfoque por ventanas de forma nativa; desde entonces, la biblioteca de Python outetts ha añadido un parche específico para el backend Transformers que reproduce la misma penalización por ventana y reduce esa diferencia de calidad, pero el tratamiento nativo de llama.cpp sigue siendo la opción predeterminada más fiable.
Más allá de ese detalle concreto del muestreo, ejecutarse como un modelo GGUF estándar también permite que OuteTTS herede todo lo que ya ofrece el ecosistema más amplio de llama.cpp: opciones de cuantización para reducir el uso de memoria, descarga de capas a la GPU mediante n_gpu_layers y compatibilidad con herramientas ya creadas en torno a modelos de lenguaje en formato GGUF, en lugar de tener que levantar desde cero una solución de despliegue específica para TTS.
Clonación de voz y compatibilidad multilingüe
Llama-OuteTTS-1.0-1B admite clonación de voz one-shot a partir de solo 10 segundos de audio de referencia y cubre 23 idiomas, mientras el modelo gestiona automáticamente la alineación del texto. Esto incluye idiomas sin límites claros entre palabras, en los que la alineación automática importa más que en lenguas separadas por espacios, como el inglés. La reconstrucción del audio se realiza mediante el codificador DAC heredado de versiones anteriores, lo que contribuyó a mantener la calidad a medida que se ampliaba la cobertura multilingüe, en lugar de degradarla al añadir más idiomas.
Primeros pasos con OuteTTS
- Instala la biblioteca de Python.
pip install outettsproporciona la interfaz principal; si vas a usar específicamente modelos GGUF mediante llama.cpp, primero tendrás que instalar manualmentellama-cpp-python, siguiendo sus instrucciones de instalación para tu plataforma. - Usa el asistente de configuración automática para simplificar al máximo la puesta en marcha.
outetts.ModelConfig.auto_config(model=outetts.Models.VERSION_1_0_SIZE_1B, backend=outetts.Backend.LLAMACPP, quantization=outetts.LlamaCppQuantization.FP16)se encarga de seleccionar el modelo y configurar el backend sin gestionar rutas manualmente. - Configura de forma manual si necesitas rutas de archivo específicas. Un
ModelConfigmanual necesita tantomodel_path(que apunta al archivo.ggufdescargado) comotokenizer_path(que siempre está basado en Transformers, aunque el backend de inferencia sea llama.cpp); confundirlos es una causa habitual de errores de carga. - Descarga los pesos GGUF del repositorio dedicado. Los checkpoints en formato GGUF se alojan por separado de los pesos safetensors estándar; si utilizas el backend llama.cpp, asegúrate de descargarlos específicamente de la variante del repositorio terminada en
-GGUF. - Configura
n_gpu_layerssi quieres aceleración por GPU. Como en cualquier modelo basado en llama.cpp, la descarga de capas a la GPU se controla mediante este parámetro estándar, no mediante una opción específica de OuteTTS. - Deja que la biblioteca
outettsgestione automáticamente la configuración de muestreo. Dado lo específico y determinante que resulta el requisito de penalización por repetición en ventana, confía en la configuración de muestreo integrada en la biblioteca, en vez de volver a implementar por tu cuenta los parámetros de generación, salvo que tengas una razón clara.
Consejos para obtener mejores resultados
- Elige de forma predeterminada Llama-OuteTTS-1.0-1B en lugar de una versión anterior. Dados los problemas de precisión de palabras documentados en la versión original de 350M y las incoherencias de formato de prompts entre 0.2 y 0.3, la versión 1.0 actual es un punto de partida más fiable para proyectos nuevos.
- Confía en el comportamiento de muestreo predeterminado de llama.cpp antes que en una implementación personalizada. Salvo que tengas un motivo concreto para crear tu propio wrapper de inferencia, es fácil implementar mal desde cero la penalización por repetición en ventana que llama.cpp gestiona correctamente de manera predeterminada.
- Utiliza un clip de referencia limpio de 10 segundos para la clonación. Como la clonación one-shot está diseñada en torno a esa duración concreta, un clip bien grabado y de aproximadamente esa longitud tiene más probabilidades de ofrecer resultados fiables que una muestra mucho más corta o innecesariamente más larga.
- Introduce texto sin procesar en la versión 1.0 en lugar de preprocesarlo por tu cuenta. Como la alineación automática de palabras es una función específica de la versión actual, segmentar manualmente el texto de antemano va en contra de una capacidad que el modelo ya gestiona internamente.
- Comprueba la licencia antes de cualquier uso comercial. Las versiones GGUF de OuteTTS se distribuyen bajo una licencia CC-BY-NC-SA-4.0 —no comercial y de compartir igual—, cuyas condiciones difieren sustancialmente de las de una licencia permisiva como MIT o Apache 2.0. Revísalas con atención antes de desarrollar un producto comercial basado en el modelo.
OuteTTS frente a otros modelos de TTS ligeros y próximos a los LLM
| OuteTTS | Piper | Kokoro-82M | |
|---|---|---|---|
| Enfoque principal | Modelado puro del lenguaje sobre tokens de audio | VITS + ONNX + espeak-ng | StyleTTS 2 + ISTFTNet |
| Funciona en llama.cpp | Sí, de forma nativa (GGUF) | No | No |
| Clonación de voz | Sí, one-shot con unos 10 segundos | No, catálogo fijo de voces | No, catálogo fijo de voces |
| Idiomas | 23 | 35+ | 8 |
| Parámetros | 350M–1B según la versión | ~15M | 82M |
| Licencia | CC-BY-NC-SA-4.0 (no comercial) | MIT (original) / GPL-3.0 (fork actual) | Apache 2.0 |
El nicho específico de OuteTTS es la sencillez arquitectónica para quienes ya trabajan en el ecosistema de herramientas de LLM: si tu infraestructura ya está construida en torno a llama.cpp y modelos GGUF, añadir generación de voz no exige una pila de despliegue independiente como ocurre con la mayoría de las demás opciones de TTS.
Preguntas frecuentes
¿Por qué OuteTTS funciona con llama.cpp cuando la mayoría de los modelos de TTS no lo hacen?
Porque OuteTTS está construido como modelado puro del lenguaje: predice tokens de audio del mismo modo que un LLM estándar predice tokens de texto, sin superponer una arquitectura de TTS especializada. Eso lo hace compatible con cualquier herramienta creada para ejecutar modelos de lenguaje en formato GGUF, incluido llama.cpp.
¿Cuánto audio de referencia necesita OuteTTS para clonar una voz?
Unos 10 segundos para la clonación one-shot con la versión actual Llama-OuteTTS-1.0-1B.
¿Por qué mi implementación personalizada de OuteTTS produce audio dañado?
La causa más habitual es una penalización por repetición mal configurada. OuteTTS 1.0 exige aplicarla a una ventana reciente de 64 tokens en lugar de a todo el contexto; llama.cpp lo gestiona correctamente de forma predeterminada, pero una implementación personalizada debe reproducir explícitamente ese uso de ventanas.
¿OuteTTS es gratuito para uso comercial?
No sin revisar antes las condiciones. Las versiones GGUF de OuteTTS se distribuyen bajo una licencia CC-BY-NC-SA-4.0, que restringe el uso comercial y exige aplicar la misma licencia a las obras derivadas; consulta las condiciones vigentes antes de cualquier despliegue comercial.
¿Qué versión de OuteTTS debería utilizar?
Llama-OuteTTS-1.0-1B es la versión insignia actual y la opción más fiable para proyectos nuevos. Ofrece alineación automática de palabras y una compatibilidad multilingüe más amplia que las versiones anteriores 0.1, 0.2 y 0.3.
Convierte texto en voz con Echora
Para un flujo en el navegador con un objetivo similar, utiliza Texto a voz de Echora. Introduce hasta 5.000 caracteres, elige una voz integrada o una voz personalizada guardada, añade etiquetas de interpretación compatibles cuando las necesites y ajusta la estabilidad. Después podrás escuchar el resultado y descargar el MP3 terminado.