VoiceStudio alcanzó el #1 de GitHub Trending en septiembre. La parte de la descripción que me atrapó fue: la alternativa a ElevenLabs de código abierto y totalmente local — clonación de voz, doblaje, un catálogo de 646 idiomas, sin cuenta, sin clave de API y sin factura por carácter.
Había pagado a ElevenLabs cerca de $200 por la narración en inglés y japonés. Así que no era una pregunta abstracta. ¿Puede un Mac de 16 GB ejecutar esto? ¿Qué tan difícil es configurarlo? ¿La voz es suficientemente buena para ponerla delante de clientes que pagan? Y si la respuesta es sí, ¿qué vende exactamente ElevenLabs que una app local no pueda ofrecer?
El historial de git de este experimento va del 17 de octubre de 2026 (el primer commit con la especificación del TTS local) al 26 de octubre (las dos ediciones localizadas terminadas). Son nueve días, no un trimestre. Los audios en chino y coreano están completos: 258 pares cada uno, 3 h 06 min y 3 h 25 min de narración.
Qué es realmente VoiceStudio
VoiceStudio es una app de escritorio, no un script de Python que tengas que vigilar. Envuelve una API local y ofrece un catálogo de 16 motores de TTS y 11 motores de reconocimiento de voz detrás de una sola interfaz. Funciona en macOS, Windows, Linux y Docker. La app es AGPL-3.0 (repositorio, consultado el 25 de octubre de 2026).
El repositorio tenía aproximadamente 85,000 estrellas para el 25 de octubre, unos seis meses después de su creación el 9 de abril de 2026. Fue el repositorio principal de GitHub Trending durante al menos dos días de septiembre. La licencia es la primera sorpresa. La app es de código abierto; los pesos del modelo no tienen automáticamente la misma licencia. El motor OmniVoice predeterminado tiene condiciones propias, y sus pesos preentrenados son no comerciales (tarjeta del modelo, consultada el 25 de octubre de 2026). CosyVoice 3 — el motor que terminé usando — es Apache-2.0. VoxCPM2 también es Apache-2.0.
Esa distinción es la primera lección real. «Alternativa a ElevenLabs de código abierto» es una afirmación sobre la aplicación. No lo es sobre los pesos, las voces ni el resultado. Si vas a usarla para un trabajo remunerado, tienes que hacer tú mismo la arqueología de licencias, motor por motor.
¿Puede un Mac de 16 GB ejecutarlo?
Sí. No siempre bien, y no siempre con el motor que querías.
La configuración no fue lo difícil. Instala la app, ábrela, elige un motor y deja que descargue los pesos. Lo difícil fue encontrar un motor capaz de terminar un lote de 258 diapositivas en esta máquina sin venirse abajo.
Probé primero VoxCPM2. Funciona con MPS de Apple y suena bien. Bajo carga en un Mac de 16 GB con Apple Silicon, la memoria libre bajó hasta aproximadamente 8%, el swap superó los 9 GB y las solicitudes agotaron el tiempo de espera. Un piloto del módulo 1 produjo 1 de 36 diapositivas antes de que lo detuviera. El modelo no estaba produciendo una mala voz; no lograba completar un lote largo bajo presión de memoria.
Pasé a CosyVoice 3 en la CPU. Completó la carga de trabajo. El clip de referencia debe durar 30 segundos o menos, una limitación real cuando clonas una voz. La muestra de 30 segundos que utilicé era mono a 24 kHz.
Después, el lote siguió fallando, por una razón que no tenía nada que ver con el modelo.
El fallo que parecía un problema del modelo
Después de una hora, tenía 4 de 258 pares de audio. Los logs mostraban reintentos, luego errores 429 del pool local de workers y después trabajos huérfanos. La conclusión obvia era que el motor local no podía con el chino.
Sí podía. El problema era el fetch de Node. Su tiempo de espera predeterminado para los headers es de cinco minutos. Algunas diapositivas chinas tardaban entre cinco y siete minutos en sintetizarse. El cliente abandonaba la solicitud mientras el worker todavía la generaba, luego reintentaba y ponía en cola un segundo trabajo para la misma diapositiva. La cola se llenó de trabajo que nadie esperaba.
Un reintento no soluciona nada si el servidor sigue trabajando en la solicitud que abandonaste.
Cuando el habla pasó por un transporte http/https de Node con un tiempo de espera más largo, el módulo 1 terminó 36/36. El primer punto de control chino completo alcanzó 258/258 pares y 3 h 05 m 57 s de narración. Tardó 28 h 12 m 41 s de tiempo de calendario desde el primer archivo hasta el último, una cifra que incluye fallos, pausas, endurecimiento y reintentos, no un benchmark de síntesis limpio. La peor diapositiva tardó 37 minutos en tres intentos.
Esa es la forma honesta de la inferencia local. El modelo no es una caja mágica que convierte texto en audio a la velocidad de la demo. Es un trabajo por lotes con una cola larga, y la ingeniería vive en esa cola.
La máquina definió la arquitectura
Un Mac de 16 GB no es un servidor de TTS. Las diapositivas normales terminaron en 2–6 minutos; las patológicas tardaron 13–23. La peor tardó 37m 09s en tres intentos. Cada mejora seria del pipeline buscaba sobrevivir a la máquina lenta, no ganar en velocidad a un servicio alojado.
Los controles que sobrevivieron:
- Una abstracción mediante
TtsEngine, para poder elegir explícitamente entre narración local y alojada en lugar de dejarla fijada en el código. La abstracción llegó el 19 de octubre; la selección local, el 21 de octubre. - Un tiempo de espera real del transporte, porque la suposición predeterminada de cinco minutos era más corta que el trabajo.
- Bloqueos de ejecución única y de workers, detención ante fallos y un worker vaciado antes de reintentar, porque reintentar contra un motor ocupado no es un reintento.
- Fragmentos de frases reanudables, porque reiniciar desde cero una diapositiva de 30 minutos desperdicia el único recurso escaso de la máquina.
- Sustitución segura, porque una nueva toma fallida no debe destruir una antigua que era buena.
- Un reinicio del worker por módulo, como precaución contra la deriva de memoria durante una ejecución larga.
- Normalización de la frecuencia de muestreo, porque un ensamblado produjo una pista de audio de 63 minutos al concatenar segmentos de 24 kHz y 44.1 kHz. Parecía un archivo plausible hasta que comprobé la duración.
caffeinate -i, documentado el 24 de octubre: el octavo día. Había estado ejecutando lotes de varias horas en un Mac que era libre de echarse una siesta. Es la línea menos sofisticada del pipeline y posiblemente la más importante. Me sentí como un novato. Y lo era.
La cuestión no es que el pipeline sea impresionante. Es que el pipeline es el producto. Los ocho días se dedicaron a hacer que un motor local lento se comportara como infraestructura: detenerse ante un fallo, reanudar donde se rompió, no sustituir nunca una buena toma por otra sin verificar y mantener despierta la máquina.
Por qué falta el cantonés
El 21 de octubre saqué el cantonés del programa. La razón fue la evidencia, no la ideología: no había una ruta local validada para el cantonés de este curso. VoxCPM2 no era compatible con yue. CosyVoice incluye yue, pero yo no lo había validado para este curso. Podría haber publicado una suposición o usado una voz que nadie había escuchado en ese idioma. Una edición cantonesa incorrecta es peor que ninguna edición cantonesa. El sitio todavía tiene una configuración regional zh-HK para los artículos; el curso está en chino simplificado, no en chino tradicional ni en cantonés.
El pipeline puede producir un archivo en un idioma para el que el modelo no ha sido validado. El filtro tiene que ser una persona que diga que no.
258/258 no es lo mismo que correcto
El primer punto de control chino completo tenía 16 diapositivas con al menos una frase omitida. El número de diapositivas era correcto. Los pares existían. La narración seguía siendo incorrecta en dieciséis diapositivas. Se encontraron al comprobar la cobertura del texto contra el guion y se repararon una por una.
Eso cambió el filtro. «Todos los archivos existen» pasó a ser «todos los archivos existen, la narración cubre el guion y se ha escuchado una muestra de cada módulo». La paridad total es el filtro; un lote en verde no es el producto.
¿La calidad es suficientemente buena?
Las muestras reparadas que escuché son suficientemente buenas para este curso; la aceptación completa es un filtro aparte. Es mi juicio como responsable, no una validación externa.
Transcribí el audio con el ASR local y lo comparé con el guion. La media de la primera comprobación por muestreo fue 0.903. La media del punto de control chino completo fue 0.908. Son puntuaciones normalizadas de similitud textual, no medidas de naturalidad ni de similitud con el hablante. La peor diapositiva — módulo 4, diapositiva 8 — obtuvo 0.776; transcribió mal un nombre de marca. Una diapositiva con cambio de idioma en el módulo 6 produjo primero un texto ininteligible, luego un párrafo repetido y después un corte; la fragmentación a nivel de frase la reparó hasta 0.909.
La voz es clara, consistente y, para mi oído, reconociblemente mía. No tiene el acabado de ElevenLabs. Las ediciones china y coreana no fueron revisadas frase por frase por un hablante nativo; las revisé con un editor de IA y escuché muestras. Esa limitación debe figurar en la página del curso, no solo en un artículo del blog.
Si tu listón es «que suene como una locución de estudio», paga a alguien. Si tu listón es «clara, consistente, mía y suficientemente buena para enseñar», la opción local ya está a tu alcance.
Cuánto costó
ElevenLabs: cerca de $200 por la narración en inglés y japonés, incluido el clon de voz.
Local: un Mac, ninguna factura adicional de TTS por carácter en estas ejecuciones y ningún gasto en TTS o ASR en la nube. El primer punto de control chino costó 28 horas de tiempo de calendario para 3 horas de audio, además del tiempo de ingeniería y control de calidad de la tabla anterior. No medí el consumo eléctrico.
Los $200 compraron una voz, un flujo de trabajo y el tiempo de actividad que mantiene otra persona. La vía local compró menos dependencia de una API de narración alojada, procesamiento local de la voz y una factura que no crece con cada nuevo renderizado; y costó días de ingeniería por un tiempo de espera que nunca estuvo en el modelo. La redacción de las traducciones siguió usando Claude en la nube; solo la narración y el ASR permanecieron en el Mac.
Entonces, ¿hasta qué punto es defendible ElevenLabs?
Aquí tengo que andar con cuidado, porque un curso en un Mac no es un mercado.
Lo que cambió para esta carga de trabajo fue la factura marginal de narración. Si tienes autorización para clonar la voz, la carga de trabajo es por lotes, puedes verificar el resultado y toleras una cola lenta, la inferencia local elimina el costo por carácter de otra pasada u otro idioma. Es una consideración real para un desarrollador que elige una API para un pipeline por lotes.
Lo que todavía ofrece un servicio alojado es más difícil de sustituir:
- Un techo de calidad. El resultado que probé en local no es la mejor voz alojada que he escuchado.
- Latencia. Un lote local tarda minutos por diapositiva. Un producto que responde en tiempo real plantea un problema de ingeniería distinto.
- Fiabilidad operativa. Tuve que depurar un tiempo de espera de cinco minutos, un límite de memoria, el vaciado del worker y una licencia.
- Derechos sobre la voz y cumplimiento. La clonación es una cuestión legal, no una función. Usar una API alojada no transfiere la responsabilidad del cliente de contar con los derechos y consentimientos.
- Amplitud. CosyVoice declara compatibilidad con mis cuatro idiomas de lanzamiento; validé el chino y la validación del coreano está en curso. Un producto global necesita muchos más.
La conclusión honesta es más limitada que «el código abierto acaba con ElevenLabs». La inferencia local cambió el cálculo para mi carga de trabajo de rerenderizado por lotes. No sustituyó al producto al que recurres cuando importan la latencia interactiva, un catálogo amplio de voces, el soporte contratado o un techo de calidad concreto. Estos son mis juicios a partir de un proyecto, no una previsión de mercado.
Por qué esto se convirtió en una historia sobre el curso
No me propuse escribir sobre modelos de voz. Me propuse publicar un curso en más idiomas de los que podía producir por mi cuenta.
El mismo modelo operativo que enseña el curso produjo la edición china y está produciendo la coreana: investigar, planificar, construir un pipeline, verificar el resultado y conservar las partes de las que una persona tiene que hacerse cargo. Una sola persona encargada de las operaciones publicitarias, Claude para los borradores de traducción, una voz local de pesos abiertos para la narración, sin proveedor de localización y sin estudio de doblaje.
Así apliqué partes del modelo operativo a mi propio producto.
Si trabajas en publicidad y te preguntas si la IA es una amenaza o una palanca, este es el caso en que funciona como palanca. No necesitas un equipo grande. Necesitas criterio, una lista de verificación y la voluntad de depurar la última milla.
Qué le diría a otro desarrollador
- Prueba la opción local cuando tengas autorización para clonar la voz, la carga de trabajo sea por lotes, puedas verificar el resultado y toleres una cola lenta.
- Paga por el servicio alojado cuando necesites latencia en tiempo real, un catálogo amplio de voces, tiempo de actividad contratado o un techo de calidad concreto.
- Comprueba la licencia de los pesos antes de construir un producto de pago sobre una app «de código abierto». AGPL-3.0 permite el uso comercial bajo sus condiciones; los pesos del modelo y los derechos sobre la voz son cuestiones independientes.
- Prueba el peor caso, no la demo. El peor caso no es un prompt más largo. Es una diapositiva larga con cambio de idioma, un tiempo de espera del transporte y una cola de reintentos al mismo tiempo.
FAQ
¿Puede un Mac de 16 GB ejecutar clonación de voz local?
Sí. CosyVoice 3 funciona en la CPU; VoxCPM2 necesitaba más margen de memoria del que tenía esta máquina bajo carga. Espera minutos por diapositiva, no segundos.
¿El TTS de código abierto es suficientemente bueno para un curso de pago?
Las muestras chinas reparadas que escuché son claras y consistentes, no tienen acabado de estudio. Es mi juicio como responsable, no una revisión realizada por un hablante nativo.
¿VoiceStudio es gratuito para uso comercial?
La app es AGPL-3.0, que permite el uso comercial bajo sus condiciones. Los pesos del modelo tienen sus propias licencias; los pesos preentrenados de OmniVoice son no comerciales. Comprueba cada motor antes de publicar.
¿Las ediciones china y coreana fueron traducidas con IA?
Sí: Claude redactó los borradores y un editor de IA los revisó, sin revisión por parte de un hablante nativo. La narración y el ASR se ejecutaron en local con CosyVoice 3 y el modelo de transcripción local; la redacción de las traducciones usó la nube.
¿Cuánto tarda un curso de 258 diapositivas?
El punto de control chino: 28 horas de tiempo de calendario para 3 h 06 m de audio, incluidos fallos y reintentos, seguido de una pasada de reparación de 16 diapositivas. El punto de control coreano: 31 horas para 3 h 25 m, incluidos un desvío por un worker atascado y la reparación de dos diapositivas.
El curso
El curso es AI-Native Media Operations — siete módulos, dieciséis plantillas y narración en inglés, japonés, chino simplificado y coreano.