En resumen
- JustRec genera los subtítulos con Whisper funcionando en el Mac a través de WhisperKit, así que tu voz nunca sale de tu ordenador.
- Usamos una versión Core ML comprimida de Whisper large-v3 turbo de unos 626 MB, que se descarga una sola vez.
- La primera carga tardó unos tres minutos y usó mucho espacio temporal en disco, porque Core ML especializa el modelo para tu chip; después carga en segundos.
- La transcripción empieza a partir de la pista del micrófono en cuanto detienes la grabación, en paralelo con la exportación del vídeo.
Puedes usar Whisper en un Mac completamente en local: los pesos del modelo son de código abierto, y WhisperKit los ejecuta a través de Core ML en Apple Silicon. Así es como JustRec genera los subtítulos de cada grabación sin enviar ni un segundo de audio a nadie. A continuación: cómo lo configuramos, qué modelo elegimos y qué nos sorprendió (una descarga de 626 MB, una primera carga de unos tres minutos y, una vez, el disco lleno).
Por qué los subtítulos tenían que generarse en el Mac
La promesa de nuestra página de inicio es sencilla: tu voz nunca se envía a una IA externa. Nuestros usuarios graban trabajo para clientes: una revisión de diseño con nombres en pantalla, un presupuesto explicado línea a línea, un error en el panel de administración de un cliente. Enviar ese audio a una API de transcripción significaría una empresa más tratando datos de sus clientes, una línea más en una política de privacidad y una cosa más que explicar a un cliente cuidadoso. Mantener la voz en el Mac encaja con el resto del producto, que está hecho local-first y guarda las copias compartidas en la UE.
También había razones prácticas:
- Sin coste por minuto. Una API en la nube cobra cada minuto de audio. En el Mac, el coste es la electricidad del usuario.
- Funciona sin conexión. Una vez descargado el modelo, los subtítulos funcionan en un tren.
- Subtítulos antes de la subida. La transcripción puede empezar en el momento en que pulsas parar, mientras el vídeo todavía se está exportando.
Escribimos una comparación más larga y no técnica en transcripción en local o en la nube. Este artículo es la parte de ingeniería.
WhisperKit y Core ML
Whisper es el modelo de reconocimiento de voz de OpenAI, publicado con su código y sus pesos bajo licencia MIT. Hace reconocimiento de voz multilingüe e identificación de idioma, que es lo que necesitamos para generar subtítulos en el idioma en que hablas.
Para que funcione bien en un Mac lo necesitas en formato Core ML, para que pueda usar el Neural Engine y la GPU. Usamos WhisperKit, parte del SDK de Swift de código abierto de Argmax (licencia MIT). Descarga versiones Core ML de Whisper desde Hugging Face, las guarda en caché en local y te da una API en Swift para transcribir con marcas de tiempo por palabra y detección de actividad de voz. Requiere macOS 14, por debajo de nuestro mínimo de macOS 15.
También miramos SpeechAnalyzer, de la propia Apple. Promete, pero necesita macOS 26, y JustRec es compatible con macOS 15. WhisperKit funciona allí donde funciona nuestra app.
Elegir el modelo
Whisper viene en varios tamaños, y el equilibrio es el de siempre: los modelos más grandes son más precisos y más lentos. La tabla de la propia OpenAI:
| Tamaño | Parámetros | Memoria necesaria | Velocidad relativa |
|---|---|---|---|
| tiny | 39 M | unos 1 GB | unas 10x |
| base | 74 M | unos 1 GB | unas 7x |
| small | 244 M | unos 2 GB | unas 4x |
| medium | 769 M | unos 5 GB | unas 2x |
| large | 1550 M | unos 10 GB | 1x |
| turbo | 809 M | unos 6 GB | unas 8x |
Según el README de openai/whisper, consultado en noviembre de 2026. La velocidad relativa compara los modelos entre sí, no con un Mac.
Turbo es la fila interesante: cerca del modelo large, con la mitad de parámetros y muchas veces su velocidad. Eso sí, en un Mac no descargas estos checkpoints de PyTorch. Descargas una conversión a Core ML, y Argmax publica muchas variantes. Algunas de su repositorio, con el tamaño de cada descarga:
| Variante | Tamaño de la descarga | Notas |
|---|---|---|
| small | unos 216 MB | Rápido y ligero; menos preciso |
| distil-large-v3 | unos 594 MB | Modelo large destilado |
| large-v3-v20240930 (turbo) | unos 547 MB o 626 MB | Dos versiones comprimidas de large-v3 turbo |
| large-v3 | unos 947 MB | El modelo large completo |
Tamaños según el repositorio argmaxinc/whisperkit-coreml en Hugging Face, consultado en noviembre de 2026.
Usamos large-v3-v20240930_626MB. El nombre v20240930 corresponde a la versión en la que OpenAI añadió large-v3 turbo, que OpenAI describe como una versión optimizada de large-v3 con transcripción más rápida y una pérdida de precisión mínima. Su configuración confirma el truco: el codificador completo de 32 capas, pero solo 4 capas en el decodificador.
¿Por qué este? Necesitábamos que el italiano saliera bien, no solo el inglés, y con este modelo el italiano salía correcto en nuestras pruebas. En nuestro Mac de desarrollo transcribía unos 15 segundos de audio en 3 segundos. Es también el modelo que Argmax usa en los ejemplos de su propio README.
El precio es el tamaño: 626 MB es mucho pedir para una app que, por lo demás, es pequeña. Lo descargamos una sola vez, en la carpeta Application Support de la app, y le contamos al usuario lo que está pasando.
La primera carga: tres minutos y el disco lleno
La descarga no era la parte lenta. La primera vez que cargamos el modelo tardó unos tres minutos antes de transcribir nada, y usó mucho espacio temporal en disco. Una vez, llenó el disco.
Primera carga
Unos tres minutos antes de la primera palabra
Y mucho espacio temporal en disco. Una vez, llenó el disco.
La causa
La especialización de Core ML
El modelo se compila para tu chip en la primera carga y se guarda en caché fuera de la app.
El cambio
Cargarlo durante la configuración
El modelo se descarga y se carga una vez durante la configuración inicial, así que la espera llega antes de la primera grabación.
La propia documentación de WhisperKit explica por qué. Los modelos Core ML se descargan en un formato independiente del dispositivo y hay que «especializarlos» para tu chip antes de que funcionen. Core ML lo hace la primera vez que se carga el modelo y guarda los archivos especializados en caché en el disco, fuera de la app. Esa caché la gestiona Apple, y se borra tras cada actualización del sistema o si el modelo lleva mucho tiempo sin usarse. Cuando se usa la caché, la carga tarda segundos: unos 3 segundos en nuestro caso.
Lo que cambiamos al saberlo:
- Preparar el modelo durante la configuración inicial. Mientras das los permisos y eliges un atajo, JustRec descarga el modelo, lo carga una vez y lo descarga de memoria. Los tres minutos pasan antes de tu primera grabación, no después.
- Mostrar el progreso. La descarga informa de su progreso, para que una primera descarga grande no parezca una app colgada.
- Contar con que vuelva a pasar tras las actualizaciones de macOS. Como la caché se puede borrar, la primera transcripción después de una actualización puede volver a ser lenta. Es normal.
- Dejar espacio en el disco. Si tu Mac está casi lleno, el paso de especialización es donde lo notarás.
De la grabación al archivo de subtítulos
El proceso es corto, y casi todo el trabajo está en los detalles.
El audio de la pista adecuada. Grabamos el micrófono y el audio del sistema en archivos separados (el artículo sobre ScreenCaptureKit explica por qué). Para los subtítulos usamos solo el micrófono, o el audio del sistema si no hay micrófono. Así no hay sonidos de notificaciones ni bandas sonoras de vídeos que confundan al modelo, y la transcripción puede empezar enseguida en lugar de esperar al MP4 exportado.
16 kHz mono. Whisper espera audio mono a 16 kHz. Leemos la pista con un AVAssetReaderAudioMixOutput que convierte mientras lee. Si una grabación tiene varios fragmentos de micrófono (cambiaste de micrófono a mitad), se colocan en sus horas de inicio reales y los huecos se rellenan con silencio, para que las marcas de tiempo sigan alineadas con el vídeo.
let options = DecodingOptions(
language: code, // nil significa «detectar»
detectLanguage: code == nil,
skipSpecialTokens: true,
wordTimestamps: true,
chunkingStrategy: .vad // dividir según la actividad de voz
)
let results = try await pipe.transcribe(audioArray: samples, decodeOptions: options)
De marcas de tiempo por palabra a subtítulos legibles. Los segmentos de Whisper suelen ser demasiado largos para un subtítulo. Pedimos marcas de tiempo por palabra y reconstruimos nosotros los fragmentos: como máximo 84 caracteres y 6 segundos por fragmento, un corte tras un punto o un signo de interrogación cuando la línea ya tiene cierta longitud, y dos líneas equilibradas en longitud. Los fragmentos que se solapan se recortan para que nunca aparezcan dos a la vez.
Dos archivos junto al vídeo. El resultado se guarda como SRT y VTT junto al MP4 en tu biblioteca. Cuando compartes, el VTT se sube con el vídeo; si los subtítulos terminan después de la subida, se añaden al enlace cuando están listos. Las primeras palabras también se convierten en el título sugerido del vídeo.
Si quieres hacer lo mismo con tus propias grabaciones con cualquier herramienta, nuestra guía para poner subtítulos a una grabación de pantalla en Mac repasa las opciones.
Detección de idioma
En Ajustes, los subtítulos se pueden configurar en automático, italiano o inglés. En automático, Whisper identifica el idioma antes de transcribir, y registramos lo que ha detectado. Funciona con los idiomas que admite JustRec, incluidos inglés, italiano, español, francés, alemán y portugués, algo que importa a las agencias que trabajan con clientes de varios países.
La detección automática tiene los puntos débiles de siempre: grabaciones muy cortas, grabaciones que empiezan en silencio o alguien que cambia de idioma a mitad. Si siempre hablas el mismo idioma, fíjalo a mano y la adivinanza desaparece.
Lo que le diríamos a otro desarrollador
Incluir Whisper en una app para Mac
- Elige el modelo según los idiomas de tus usuarios, no según benchmarks en inglés.
- Cuenta con la primera carga: descarga, después especialización de Core ML y después el trabajo real.
- Haz esa primera carga durante la configuración inicial, con el progreso visible.
- Transcribe la pista de audio más limpia que tengas, no la mezcla final.
- Construye tus propios fragmentos a partir de las marcas de tiempo por palabra; los segmentos en bruto se leen mal.
- Prueba con poco espacio en disco y después de una actualización de macOS.
Lo que viene
Los subtítulos traducidos están previstos: la transcripción se queda en el Mac, y la traducción también lo haría. También seguimos de cerca SpeechAnalyzer de Apple para el día en que nuestro macOS mínimo lo permita.
Para saber por qué los subtítulos importan a quienes ven los vídeos, consulta con subtítulos, tus vídeos se ven también sin sonido. Para lo demás que hace la app, la lista de funciones lo reúne en un solo sitio.
Fuentes
- OpenAI Whisper en GitHub: tamaños del modelo, parámetros, memoria y velocidad relativa, turbo, licencia MIT, consultado en noviembre de 2026.
- Registro de cambios de OpenAI Whisper: la versión v20240930 añade el modelo large-v3-turbo, consultado en noviembre de 2026.
- Argmax OSS Swift (WhisperKit) en GitHub: requisitos, descargas de modelos, licencia MIT, consultado en noviembre de 2026.
- Código de configuración de WhisperKit, precarga y especialización de Core ML, consultado en noviembre de 2026.
- Modelos Core ML de WhisperKit de Argmax en Hugging Face: nombres y tamaños de las variantes, consultado en noviembre de 2026.
- Configuración del modelo openai_whisper-large-v3-v20240930_626MB: 32 capas de codificador, 4 capas de decodificador, consultado en noviembre de 2026.
- Apple Developer: SpeechAnalyzer (macOS 26.0), consultado en noviembre de 2026.
Preguntas frecuentes
¿Se puede usar Whisper en un Mac sin la nube?
Sí. Los pesos de Whisper son de código abierto con licencia MIT, y bibliotecas como WhisperKit los convierten a Core ML para que funcionen en local en Apple Silicon. Una vez descargado el modelo, la transcripción no necesita conexión a internet.
¿Cuánto ocupa el modelo de Whisper?
Depende de la variante. Entre las versiones Core ML de Argmax, small ocupa unos 216 MB y el large-v3 completo unos 947 MB. JustRec usa una versión comprimida de large-v3 turbo de unos 626 MB.
¿Por qué la primera carga de Whisper es tan lenta en un Mac?
Core ML especializa el modelo para tu chip concreto la primera vez que se carga y guarda el resultado en caché en el disco. Con nuestro modelo eso tardó unos tres minutos. Las cargas siguientes usan la caché y tardan unos segundos, hasta que una actualización de macOS la borra.
¿Whisper detecta el idioma automáticamente?
Sí, Whisper puede identificar el idioma hablado antes de transcribir. Si siempre hablas el mismo idioma, fijarlo a mano evita algún error ocasional en grabaciones cortas o que mezclan idiomas.
¿JustRec envía mi voz a un servicio de IA?
No. Los subtítulos se generan en tu Mac con un modelo de voz a texto que funciona en local. Solo el archivo de subtítulos se sube con el vídeo cuando lo compartes.



