Pocket TTS: cloné mi voz en un CPU de 2019, sin GPU y sin nube
Un modelo de voz de 209 MB que corre en CPU, clona una voz con 25 segundos de referencia y es MIT. Instalación paso a paso, métricas medidas en un i5 de 2019 y mi opinión honesta frente a ElevenLabs y compañía.
Llevo un tiempo con el mismo problema: necesito voz sintética en español, de calidad decente, y no quiero pagar por segundo generado ni mandar la voz de nadie a un servidor ajeno. Probé Pocket TTS, de Kyutai, y el resumen es corto: 209 MB, corre en CPU, clona una voz con 25 segundos de referencia, licencia MIT.
Lo instalé en un servidor viejo con un Intel i5-9400F de 2019, seis núcleos y ninguna GPU. Funcionó. Estas son las métricas reales que medí, la instalación paso a paso, y mi opinión sin adornos.
Qué es y qué lo hace distinto
Casi todos los modelos de voz buenos asumen una GPU. Pocket TTS asume lo contrario: es un modelo pequeño — alrededor de 100 millones de parámetros — pensado para correr donde sea. Lo llamativo es lo que conserva siendo tan chico: clonación de voz zero-shot, es decir, le pasas un audio de referencia y sintetiza con ese timbre sin ningún entrenamiento previo.
Trae voces incorporadas por idioma (lola para español, alba por defecto) — flojas, dicho sea de paso — y soporte multilingüe. Y es MIT: puedes usarlo en producto comercial sin pedir permiso.
Instalación
Lo mejor de todo: no hay instalación real. Con uv en la máquina, se ejecuta directo.
# 1. uv, si no lo tienes
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. generar audio (descarga el modelo la primera vez)
uvx pocket-tts generate \
--text "Hola, esto es una prueba de síntesis de voz." \
--language spanish \
--output-path salida.wav
Eso es todo. La primera corrida descarga ~209 MB al caché de Hugging Face y las siguientes ya son instantáneas en ese aspecto.
Para clonar una voz, apuntas a un archivo de audio de referencia:
uvx pocket-tts generate \
--text "Ahora hablo con la voz de la referencia." \
--language spanish \
--voice mi_voz.wav \
--output-path clonado.wav
Y si vas a reutilizar la misma voz muchas veces, conviene precomputarla una vez:
uvx pocket-tts export-voice mi_voz.wav --output mi_voz.safetensors
También trae un servidor:
uvx pocket-tts serve # API FastAPI local
Dos tropiezos que te vas a encontrar
- Mac con Intel. En un Mac Intel falla al instalar: PyTorch ya no publica ruedas para
macosx_x86_64en las versiones que el paquete exige. Lo corrí en Linux x86_64 y listo. En Apple Silicon no hay problema. - Modelo con términos. Los pesos de clonación de voz están detrás de una aceptación de términos en Hugging Face. Si no aceptas, la descarga falla con un error poco descriptivo (
could not download weights for voice cloning). Se acepta una vez en la web del modelo y sigue.
Las métricas, medidas por mí
Todo esto en el i5-9400F, seis núcleos, sin GPU, con una frase de unas 15 palabras y una referencia de voz de 25 segundos:
| Configuración | Cómputo | Audio generado | Factor tiempo real |
|---|---|---|---|
| Voz incorporada (español) | 8.5 s | 6.4 s | 1.34× |
| Clon de mi voz | 9.5 s | 6.1 s | 1.55× |
| Clon + cuantización int8 | 9.7 s | 6.7 s | 1.45× |
Cómo leerlo: un factor de 1.34× significa que tarda un 34% más que la duración del audio que produce. Un minuto de voz sale en poco más de un minuto de cómputo.
Y aquí viene lo interesante. Repetí la prueba con un párrafo largo (el del audio de arriba) y el resultado cambia por completo:
| Texto | Cómputo | Audio | Factor tiempo real |
|---|---|---|---|
| Frase corta (15 palabras) | 9.5 s | 6.1 s | 1.55× |
| Párrafo largo (~140 palabras) | 23.8 s | 54.0 s | 0.44× |
Con textos largos genera más rápido que tiempo real: 54 segundos de audio en menos de 24 de cómputo. Lo que pesaba en la frase corta era el arranque — cargar el modelo y preparar la voz — que se amortiza apenas el texto crece.
Dos observaciones honestas:
- El costo fijo domina en frases cortas. Si tu caso son respuestas breves y sueltas, el arranque te mata. Si es narración, el modelo va sobrado en un CPU de hace seis años.
- La cuantización int8 no aceleró nada. Salió prácticamente igual (incluso un pelo peor en cómputo absoluto). Tiene sentido: en un modelo tan chico el cuello de botella no está donde la cuantización ayuda. Sirve para memoria, no para velocidad.
El mismo texto, dos motores, con gates de verdad
Comparar TTS “de oído” no sirve. Usé un texto agnóstico — 134 palabras de divulgación sobre el pulpo, con números escritos, una pregunta y palabras difíciles como hemocianina — y le apliqué los mismos gates que uso en producción: transcribir lo generado con Whisper y medir el WER (cuánto se desvía de lo que pedí), más las métricas de audio.
La versión pulida
El audio de arriba sale crudo del modelo, y así hay que juzgarlo. Pero nadie publica el crudo. Este es el mismo archivo pasado por el máster que uso en producción: filtro de graves, realce de presencia en 2.8 kHz, compresión suave y normalización a −16 LUFS con true peak a −1.5 dBTP.
Sube bastante. La masterización no arregla las palabras que se comió — eso es del modelo — pero sí el volumen bajo y la falta de cuerpo, que era la mitad de la mala impresión inicial.
Los resultados
| Métrica | Pocket TTS (CPU) | Qwen3-TTS (GPU) |
|---|---|---|
| WER (fidelidad al guion) | 13.4% | 3.7% |
| Cómputo / audio | 24.4 s → 50.9 s | 44.1 s → 48.2 s |
| Factor tiempo real | 0.48× | 0.91× |
| Tamaño del modelo | 209 MB | 4.3 GB |
| LUFS integrado | −23.5 | −17.6 |
| True peak | −3.3 dBTP | −0.4 dBTP |
| Rango dinámico (LRA) | 5.8 | 3.3 |
| Centroide espectral | 1493 Hz | 1522 Hz |
| Silencio | 28.8% | 16.0% |
Cómo leer esto
El WER es el veredicto duro. Un 13.4% contra un 3.7% significa que Pocket se come o deforma aproximadamente una palabra de cada siete, mientras Qwen falla una de cada veintisiete. Whisper transcribió 129 palabras del audio de Pocket contra las 134 originales: se saltó cinco. Para narración publicable, ese margen no pasa; para un prototipo o una herramienta interna, sí.
La velocidad va al revés de lo esperado. Pocket en un CPU de 2019 fue casi el doble de rápido que Qwen con GPU dedicada: 0.48× contra 0.91×. Un modelo 21 veces más chico compensa con creces la falta de acelerador.
El audio de Pocket sale más crudo. −23.5 LUFS es bajo — necesita masterización antes de publicarse — y su 28.8% de silencio revela pausas largas y erráticas, mientras Qwen mantiene un 16% mucho más cercano al habla natural. En contrapartida, el true peak de Pocket (−3.3 dBTP) deja margen para procesar, y el de Qwen (−0.4 dBTP) va peligrosamente al límite del clipping.
El centroide espectral es casi idéntico (1493 vs 1522 Hz): ambos reproducen el mismo timbre de la voz de referencia. La clonación funciona en los dos; lo que cambia es la ejecución.
Probé también la voz en español que ya trae el modelo (lola, sin referencia). Suena plana y con una dicción rara: más rápida, porque se salta el procesado de la muestra, pero no la publicaría. Si vas a usar Pocket TTS, clona una voz.
Mi conclusión de la prueba
Qwen3-TTS gana donde importa para publicar: fidelidad al guion y ritmo natural. Pocket TTS gana en velocidad, tamaño y dónde puede correr. No es un empate técnico: es elegir entre lo mejor que puedes tener con GPU y lo que consigues sin ninguna.
Mi opinión
Lo que me gustó:
- Corre donde sea. 209 MB y CPU. Puedes meterlo en un contenedor de 1 GB y desplegarlo en el VPS más barato que tengas. No hay cola de GPU, no hay cuota, no hay factura por segundo.
- La privacidad no depende de confiar en nadie. La voz de referencia nunca sale de tu máquina. Cuando trabajas con la voz de una persona concreta, eso deja de ser un detalle.
- MIT. Sin asteriscos.
- Zero-shot que funciona. 25 segundos de referencia limpia y el timbre es reconocible. No hay que entrenar nada.
Lo que no:
- La calidad no es de producción para una voz de marca. Es clara e inteligible, pero le falta el control fino de prosodia y emoción de un servicio comercial. Si tu contenido vive de que la voz emocione, se nota.
- Sin control emocional explícito. No hay etiquetas de emoción ni instrucciones de estilo. Tienes temperatura y poco más.
- El español no es su idioma estrella. Funciona, pero la naturalidad cae frente al inglés.
Mi conclusión: Pocket TTS no compite en calidad. Compite en dónde puede correr, que es otra categoría.
Comparación con lo que ya uso
- ElevenLabs: la mejor calidad y control emocional del mercado, por lejos. Pero es nube, se paga por crédito y tu audio de referencia viaja. Lo sigo usando para voces que salen al público.
- Qwen3-TTS: mucho mejor naturalidad en español y con emoción por beat, pero necesita GPU y bastante más disco. Es mi caballo de batalla cuando hay GPU disponible.
- RVC: no es TTS sino conversión de voz. Necesita 10-15 minutos de audio real y un entrenamiento previo. Otra herramienta para otro problema, y suele ir después de un TTS, no en su lugar.
- Suno: tampoco es competencia, genera música con voz cantada. Excelente para canciones, inútil para narrar un texto tuyo con una voz específica.
Pocket TTS no reemplaza a ninguno. Ocupa un hueco que ninguno cubría: necesito voz aquí mismo, en esta máquina modesta, sin pagar y sin subir nada.
¿Cuándo lo usaría?
- Prototipos y pruebas de guion, donde quemar créditos no tiene sentido.
- Herramientas internas y automatizaciones que hablan.
- Cualquier caso con datos sensibles donde subir la voz a un tercero no es opción.
- Volumen alto y sin urgencia: dejarlo generando por lotes en una máquina que ya tienes.
No lo usaría para la voz principal de un canal ni donde la interpretación emocional sostenga el contenido. Para eso sigo pagando.
Comentarios
Todavía no hay comentarios. El primero es tuyo.