- La generación de voz local ahora puede ofrecer una calidad suficientemente realista incluso sin una GPU dedicada, y en el entorno de ejemplo se deja la GPU para la inferencia de LLM mientras la CPU se encarga del TTS
- Kokoro es un modelo de 82M de parámetros, pero admite varios idiomas como inglés, chino e hindi, ofrece unas 50 voces y está mejor optimizado para inglés
- La configuración más sencilla es ejecutar el contenedor Kokoro-FastAPI, y como incluye previamente los modelos de voz, la imagen pesa alrededor de 5 GB
- Ofrece una interfaz compatible con la API de voz de OpenAI, por lo que los programas existentes basados en API de voz pueden adaptarse con relativa facilidad a TTS local
- La síntesis de párrafos cortos toma alrededor de 4.7 segundos en un Intel Core i7-4770K, 4.5 segundos en un Apple M2 Pro y 1.5 segundos en un AMD Ryzen 7 8745HS, lo que permite un modo de uso en el que se escucha la respuesta del LLM en lugar de leerla
Kokoro TTS ejecutado solo con CPU
- Hace apenas unos años era difícil lograr una generación de voz local realista, pero ahora es posible crear audio de alta calidad sin confiar datos privados a servicios externos
- El ejemplo se ejecuta en una máquina con GTX 1080 Ti para LLM local, mencionada anteriormente
- La GPU dedicada de esa máquina queda reservada para la inferencia del LLM
- La síntesis de voz usa solo la CPU
- El modelo utilizado es Kokoro
- Es un modelo de 82M de parámetros
- Genera voces realistas en varios idiomas, como inglés, chino e hindi
- Ofrece unas 50 voces y está optimizado principalmente para inglés
- La configuración de servidor más simple consiste en usar la imagen de contenedor de Kokoro-FastAPI
- Incluye modelos de voz descargados previamente
- Por eso la imagen del contenedor ocupa alrededor de 5 GB
- Comando de ejecución con Docker o Podman:
podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu - Después de iniciarlo, la interfaz web puede abrirse en
localhost:8880/web, donde se puede ingresar texto para generar audio y reproducirlo automáticamente
API compatible con OpenAI y ejecución de ejemplos
- Además de la interfaz web, el contenedor Kokoro-FastAPI ofrece una interfaz TTS compatible con la API de voz de OpenAI
- Los programas existentes que usan la API de voz de OpenAI pueden adaptarse fácilmente
- Hay ejemplos de código en JavaScript y Python en github.com/remotebrowser/speak
- Ejemplo de ejecución en JavaScript:
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.js "Good morning! How are you today?" - Ejemplo de ejecución en Python:
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.py "Good morning! How are you today?" - El audio generado se guarda como archivo MP3
- Si SoX o Sound eXchange está instalado, el audio se reproduce automáticamente
- La información sobre SoX puede consultarse en sox.sf.net
- Para elegir otra voz, se configura la variable de entorno
TTS_VOICEexport TTS_API_BASE_URL=http://127.0.0.1:8880/v1 export TTS_VOICE="am_eric" ./speak.js "Good morning! How are you today?" - La lista completa de voces disponibles está en Kokoro VOICES.md
Tiempos de síntesis por CPU y alternativas
- Al sintetizar un párrafo corto de prueba con la voz
am_eric, el mejor tiempo de generación entre 3 ejecuciones fue el siguiente- Intel Core i7-4770K: 4.7 segundos
- Apple M2 Pro: 4.5 segundos
- AMD Ryzen 7 8745HS: 1.5 segundos
- La primera CPU de la lista fue lanzada hace 12 años, lo que muestra que incluso CPUs antiguas pueden manejar esta tarea
- También existe Speaches como alternativa de TTS en contenedor compatible con OpenAI
- A diferencia de Kokoro-FastAPI, la imagen del contenedor no incluye los pesos de voz y deben descargarse explícitamente mediante la API
- También ofrece funciones de STT de alta calidad, incluido Whisper
- Si una aplicación necesita tanto TTS como STT, puede ser una opción para manejar ambos en un solo lugar
- Al combinarlo con un LLM local, se hace posible un modo de uso en el que, en lugar de leer la respuesta del LLM, se escucha en voz alta
1 comentarios
Opiniones de Hacker News
He usado bastante Kokoro en productos de accesibilidad, y fue agradable trabajar con él porque no requiere una GPU de NVidia como varios otros TTS de calidad similar
En particular, me gusta que se puedan introducir manualmente guías de pronunciación IPA. Había casos en los que palabras importantes eran homógrafas y Kokoro las pronunciaba mal
Eso sí, se debilita cuando le haces decir solo una o dos palabras. Por ejemplo, si le haces decir solo "six", casi siempre dice algo como "ah-six-ah". En cambio, si le das una oración más larga como "The word is: six", lo lee bien, y como la API de Kokoro da marcas de tiempo para cada palabra dentro de la oración, puedes recortar solo la palabra que quieres con un script de Python. La entonación es un poco plana, pero es muy estable
Pregunté en Discord y me dijeron que era una limitación del pequeño tamaño de parámetros, y en defensa de Kokoro, las voces de eleven-labs a veces también tienen este problema
Mi caso de uso es casi por completo de palabras individuales, así que no me conviene porque no quiero lidiar con procesar entradas y salidas para unirlas o dividirlas
Este es un tema que de verdad me interesa, así que está bueno
Antes mantenía whisperx por separado, porque consideraba importantes no solo la transcripción simple, sino también la sincronización y la identificación de hablantes necesarias para cosas como subtítulos. Pero depende de pyannote, y como la licencia es ambigua, automatizar la instalación también es más complicado
Así que, buscando algo que diera mejor transcripción y además soportara diarización, terminé eligiendo parakeet para transcripción y softformer para diarización. Pero la mayoría de los motores disponibles no incluyen softformer
Hice un servidor compatible con OpenAI para parakeet-rs con soporte para softformer (https://github.com/altunenes/parakeet-rs) y lo estoy usando junto con OpenWhispr, una app de transcripción de escritorio que maneja varias funciones de conveniencia
Como uso la GPU para otras cosas, todavía no agrego una ruta con GPU, así que por ahora transcribe solo con CPU, pero se siente muy potente poder ejecutar transcripción localmente cuando quieras
Para lo que quieres hacer, si usas Senko junto con parakeet, la diarización funciona muy bien. En mi MacBook fue más rápido y más preciso que Pyannote y whisper
Este modelo es realmente bueno. Me daba pena no haber podido jugar casi nada con modelos locales por falta de GPU, pero hace como un mes instalé Kokoro en una GTX1650 e hice un TTS para leer artículos
En una WebUI sencilla pegas una URL o un bloque de texto copiado, Python lo limpia y lo envía a Kokoro para generar TTS, y el resultado se sirve como RSS para Apple Podcasts. Lo uso para ponerme al día con artículos guardados o posts de blog durante el manejo de la mañana
Algún día también me gustaría hacer algo tipo NotebookLM, usando varias voces, para leer noticias guardadas como si fuera un programa matutino de radio
Hace unos meses hice una extensión de Chrome que hace esto en cualquier página web y va resaltando al mismo tiempo la oración que está leyendo
Como se salta tanto el paso de levantar el contenedor como el de copiar y pegar el contenido del sitio, puede ser útil para quien quiera usar Kokoro de forma más cómoda
https://chromewebstore.google.com/detail/local-reader-ai-on-...
El TTS ha avanzado muchísimo y hay muchas opciones. Está Kokoro, y Pocket TTS es un modelo pequeño de 100M que además puede clonar voces
Chatterbox Turbo es un poco más grande, pero soporta mejor el control emocional de la voz, y Fish Audio S2 es más grande todavía, pero permite un control mucho más fino y prácticamente sin límites del tono y la emoción. Todo esto corre fácilmente en una MacBook
Un buen repositorio para empezar a comparar modelos TTS es https://github.com/5uck1ess/tts-bench
Kokoro es un modelo realmente bueno considerando que fue publicado hace 1.5 años, y rinde excelente para su tamaño: https://5uck1ess.github.io/tts-bench/scores.html
Antes probé Piper para TTS local, y Kokoro también se ve interesante
Está muy bueno. Como uso Linux y no puedo usar Aqua ni Whipsrflow ni otros, desde enero vengo usando una solución que hice yo mismo
Hace poco la ordené y la dejé más fácil de instalar. Si te interesa, puedes verla aquí: https://github.com/Hugo0/voiceio
Se va mejorando sola con el tiempo, corre en la máquina local y, en general, es software bastante usable. Hoy en día el 60% de mi interacción con la PC es puro input por voz
Me gusta mucho Kokoro. Lo uso para leer ebooks que no tienen audiolibro, y para eso funciona bastante bien
Tengo un script de Python que lee epub/html, ejecuta el modelo y luego escribe el mp3
La cantidad de idiomas que soporta Kokoro es limitada, así que para soporte de neerlandés tuve que usar otro modelo, pero la calidad no es tan buena. Normalmente también son mucho más lentos y más grandes, así que resultan demasiado para 8 GB de VRAM
Al final hasta probé el TTS integrado de Windows; no suena natural, pero al menos puede pronunciar la mayoría de las palabras y es muy rápido
Me pasé un día jugueteando con AI y le quité las capas caras a Kokoro, y ahora corre 3 veces más rápido en CPU de teléfono y con MNN
La calidad es muy parecida. Puede variar según el entorno, pero el script está aquí: https://github.com/DavidVentura/translator-rs/blob/master/sc...