Articulo
Chatterbox en Mac M4 sin humo: lo que funciona, lo que falla y como sacar audio util en espanol
Probe Chatterbox Turbo y Multilingual en un Mac mini M4 de 16 GB. Turbo va bien para ingles, pero en espanol colapsa. Multilingual si sirve, aunque obliga a aceptar mas peso, mas tiempo y trocear textos largos.
No te vendo TTS local. Te cuento lo que pasa cuando intentas correr Chatterbox en un Mac M4 modesto, que rompe, que se puede salvar y cuando conviene usar Turbo o Multilingual.
La sesion real fue esta: primero ingles, despues espanol y al final una pieza bilingue tipo profesor de ingles para hispanohablante.
La idea no era hacer benchmarks ni jugar a la demo bonita. La idea era sacar audio util y quedarme con un patron operativo repetible.
1) Contexto real
La prueba fue en un Mac mini M4 con 16 GB de RAM. No es una maquina ridicula, pero tampoco es el tipo de equipo que te deja ignorar peso de modelos, tiempos de carga o problemas de compatibilidad.
El objetivo era concreto: TTS local primero en ingles, luego en espanol y despues una pieza bilingue tipo profesor, con una frase en espanol seguida de su traduccion en ingles.
La primera decision buena fue no pelearme con el Python del sistema. Monte un entorno aislado con Python 3.11 porque el Python de macOS ya iba demasiado por delante y no tenia sentido meter otra variable de caos.
2) Lo primero que parecia facil: Chatterbox Turbo
La ruta obvia fue instalar `chatterbox-tts` dentro de un `venv`, comprobar que `torch` detectaba MPS y probar Turbo primero. Hasta ahi, el escenario parecia razonable.
Tambien aparecio pronto un detalle poco glamuroso pero importante: la descarga via `huggingface_hub` fue erratica y lenta. En vez de insistir, me resulto mucho mas predecible bajar los pesos concretos y dejarlos locales.
Con eso hecho, Turbo cargo y genero audio en ingles sin un problema serio. La conclusion practica fue rapida: para ingles, si. Para espanol, todavia no estaba nada claro.
python scripts/chatterbox_tts.py \
--model turbo \
--lang en \
--text "This is a local test on a Mac mini M4." \
--output out/turbo-en.wav3) El primer fallo serio: dependencias y watermarking
La primera rotura seria no vino por MPS. Vino por dependencias.
El paquete `resemble-perth` estaba dejando `PerthImplicitWatermarker` en `None`, asi que la generacion petaba en cuanto entraba por esa parte. La causa real era un import roto o una dependencia mal encajada en el entorno.
Aqui habia dos opciones: esperar la solucion bonita o desbloquear la prueba. Lo pragmatico fue parchear el entorno con un `DummyWatermarker` para poder generar audio y evaluar calidad real.
No es la solucion elegante, pero si la que te da una respuesta tecnica. Sin ese workaround, no habia prueba. Con ese workaround, si.
4) Lo que pasa cuando intentas usar Turbo en espanol
Con Turbo funcionando en ingles, el siguiente paso fue lanzar una muestra larga en espanol para ver hasta donde llegaba.
La respuesta fue bastante clara: no sonaba realmente en espanol y, ademas, la salida tendia a acortarse o deformarse. No era solo cuestion de acento; era una degradacion visible del resultado.
La conclusion aqui conviene decirla sin rodeos: Turbo esta orientado a ingles. Si quieres espanol, no insistas por romanticismo tecnico porque vas a perder tiempo y no vas a arreglar el sesgo base del modelo.
5) El salto al modelo bueno para espanol: Chatterbox Multilingual
La salida real llego al pasar al modelo principal, el multilingual. La jugada pragmatica fue descargar solo los pesos necesarios, dejarlos locales y ajustar la carga de checkpoints para CPU/MPS porque el soporte del paquete en Mac no estaba del todo fino.
El parche del watermarker seguia siendo necesario, asi que lo reutilice tal cual. No tenia sentido hacer de eso una religion cuando el objetivo era validar la calidad de voz.
La diferencia importante fue inmediata: cargando el multilingual con `language_id="es"`, ahora si salia audio en espanol real.
El trade-off tambien quedo claro: mas peso, mas tiempo y menos ligereza que Turbo. Pero por primera vez estabas resolviendo el problema correcto.
audio = model.generate(
text="Hoy vamos a escuchar una frase en espanol y despues su traduccion.",
language_id="es"
)6) El segundo fallo serio: textos largos
Que el modelo sacara espanol no significaba que ya estuviera resuelto el caso real. Con textos largos, el multilingual empezaba bien y luego degradaba: repeticiones, cortes raros, perdida de entonacion o cierre forzado demasiado pronto.
Esto no era imaginacion. El propio modelo acababa entrando en patrones de repeticion y forzando EOS para salir de ahi.
La solucion pragmatica fue trocear el texto en bloques cortos y concatenar con pausas pequenas. Es menos elegante que una llamada unica, pero es la forma correcta de sacar audio largo util.
blocks = split_text(text, max_chars=220)
audio_parts = [generate_block(block, language_id="es") for block in blocks]
final_audio = join_with_pause(audio_parts, pause_ms=250)7) Caso final util: audio bilingue tipo profesor
La prueba mas util al final no fue una narracion larga. Fue una pieza bilingue donde primero se oye la frase en espanol y despues la traduccion en ingles.
Ese formato tipo profesor si tiene un caso de uso realista: estudio, repeticion y material guiado para hispanohablantes que quieren fijar estructuras en ingles.
Ademas, aqui el troceado deja de ser un parche feo y pasa a ser parte natural del flujo. Trabajas con unidades pequenas, claras y reutilizables.
8) Conclusiones claras
- Turbo: valido para ingles, rapido dentro de lo razonable y bastante mas ligero.
- Multilingual: el correcto para espanol, pero mas pesado y mas lento.
- En un Mac M4 con 16 GB se puede correr, pero no es una experiencia perfecta.
- Si el objetivo es espanol real, usa multilingual y trocea el texto.
- Si el objetivo es ingles rapido, Turbo merece la pena.
- Si quieres controlar genero o una voz concreta, necesitas `audio_prompt_path`; no existe un parametro magico tipo `female=true`.
No me quedo con la demo bonita. Me quedo con el patron operativo que si repetiria: entorno controlado, pesos locales, MPS si entra, workaround pragmatico para desbloquear pruebas, multilingual para espanol y textos troceados cuando buscas calidad estable.
Si lo que buscas es ingles rapido, Turbo tiene sentido. Si lo que buscas es espanol util, ve directo a Multilingual y ahorrate la parte romantica del experimento.
Ese es el resumen honesto de la sesion: no todo entra fino en un Mac M4 pequeno, pero si ordenas bien el entorno y aceptas los trade-offs, puedes sacar audio local que sirva de verdad.