100% Local
Latencia Cero
Sin Conexión

Dictation App

Habla, no escribas.

Transcripción de voz nativa para macOS con Whisper AI local.
100% offline. Privacidad absoluta.

D
Ready
Record
Capacidades

Diseñado para el escritorio.

No es una web app disfrazada. Es una aplicación macOS nativa que se siente como parte del sistema.

whisper.cpp Local

Motor Whisper de OpenAI compilado nativamente con flash-attention. Sin conexión a internet, sin enviar datos a la nube. Privacidad absoluta.

Atajo Global

Cmd+Shift+D desde cualquier aplicación. El overlay aparece al instante sin interrumpir tu flujo de trabajo.

Overlay Flotante

Panel NSPanel con ultraThinMaterial. Se auto-redimensiona según el texto (120px → 70% de pantalla). Sin robar el foco.

Dos Modelos Whisper

Small (466MB) para velocidad diaria o Large v3 Turbo (547MB) para máxima precisión. Seleccionables en cada sesión.

9 Idiomas

Español (ES/LA), English (US/UK), Français, Deutsch, Italiano, Português (BR) y Català. Selección manual por sesión.

Inyección Triple

AX API → AppleScript → CGEvent. El texto llega a tu app activa pase lo que pase, con restauración automática del foco.

Cómo funciona

Máquina de estados de 5 fases.

Cada transición es un evento discreto. Sin estados colgantes, sin callbacks anidados.

Fase 1

Idle

En la menubar

La app vive como icono en la barra de menú. Sin ventanas visibles, sin consumir recursos. Espera silenciosamente.

Fase 2

Ready

Listo para grabar

Pulsa Cmd+Shift+D. Aparece el overlay flotante con selector de modelo y lenguaje. Todo listo en milisegundos.

Fase 3

Recording

Capturando audio

AVAudioRecorder captura PCM 16kHz mono a un archivo WAV temporal. Contador ascendente. Detén con Esc o Cmd+Shift+D.

Fase 4

Transcribing

Whisper procesando

whisper-cli se lanza con flash-attention y 4 hilos CPU. El actor Swift espera el resultado y limpia timestamps del texto.

Fase 5

Done

Texto listo

El overlay muestra el texto editable. Cópialo, inyéctalo en la app activa o edítalo antes de enviar. Un toque y vuelta a empezar.

Ciclo continuo: Idle → Ready → Recording → Transcribing → DoneReset
Arquitectura

Cómo está construido.

Swift nativo, APIs del sistema, y whisper.cpp compilado desde fuente.

Máquina de Estados

5 fases con @Published properties. La UI reacciona a cada transición con animaciones específicas. Ciclo continuo sin fugas de memoria.

Overlay + Audio

NSPanel no-activador con material visual ultraThin. Audio PCM 16kHz mono vía AVAudioRecorder con gestión de permisos en primer uso.

Whisper Pipeline

Modelos descargados de HuggingFace, whisper-cli compilado con CMake. Subproceso con --flash-attn, post-procesamiento con limpieza de timestamps.

Inyección + Hotkeys

Carbon RegisterEventHotKey para Cmd+Shift+D. Triple fallback de inyección (AX → AppleScript → CGEvent) con restauración de foco de la app activa.

Capa de UI
Menu BarNSStatusItem

Icono de micrófono en la barra de menú con menú desplegable

Overlay FlotanteNSPanel

Panel translúcido con 4 estados: ready → recording → transcribing → done

AjustesSwiftUI

Idioma, modelo, atajos y acerca de

Lógica de Negocio
State Machine@Published

5 fases: idle → ready → recording → transcribing → done

idlereadyrectransdone
AudioAVAudioRecorder

Captura PCM 16kHz mono → archivo WAV temporal

TranscripciónActor

Swift actor que lanza whisper-cli con flash-attention

Inyección3-tier

AX API → AppleScript Cmd+V → CGEvent keystroke

Sistema & IA
Hotkey GlobalCarbon

RegisterEventHotKey para ⌘⇧D, funciona en toda la app

whisper.cppC++

Compilado con CMake, optimizado con flash-attention, 4 threads

Small 466MBLarge v3 Turbo 547MB
Build PipelineMakefile

XcodeGen → xcodebuild → deploy con whisper-cli + modelos empaquetados

Tecnologías

Stack nativo.

Todo corre localmente en el hardware del usuario. Sin servidores, sin dependencias cloud.

Lenguaje & Frameworks
Swift 5.7AppKitSwiftUICombine
AI / Machine Learning
whisper.cppwhisper-cliggmlflash-attention
System APIs
Carbon HotkeysAXUIElementCGEventAVFoundation
Build & Tooling
XcodeGenCMakeMakefilemacOS 12.0+

¿Hablamos?

Si buscas a alguien que construya herramientas nativas, rápidas y bien diseñadas, este proyecto es mi carta de presentación.

Volver al Portfolio