Tu voz. Tu hardware. Cero nube. Cero rastro. Dictado por voz local de verdad para KDE Plasma — escrito en C++ nativo, acelerado por GPU vía Vulkan, sin Python, sin servicios externos, sin pretextos.
«Lo dije una vez en alto y apareció en mi editor.
Eso es todo. Eso es la promesa.»
Llevo años viendo cómo Linux pierde la batalla del dictado por voz frente a macOS. Mientras los usuarios de Mac estrenaban VoiceInk y dictaban a velocidad de pensamiento dentro de cualquier app nativa, en KDE seguíamos atrapados entre tres opciones igual de frustrantes:
- Mandar tu voz a OpenAI/Google/Microsoft — adiós privacidad, hola facturas mensuales y dependencia de internet.
- Pelear con un script en Python que invoca whisper, escribe en un archivo temporal, y que se rompe cada vez que actualizas el sistema.
- Resignarte y seguir tecleando.
Probé las tres. Ninguna sirve cuando lo que quieres es dictar mientras programas, mientras chateas, mientras escribes documentación — sin pensar en el flujo, sin pegar manualmente, sin esperar 4 segundos a que un round-trip a la nube te conteste.
Un día abrí el repo de VoiceInk en GitHub para ver qué hacía exactamente. Es un proyecto bonito de macOS: Swift puro, AVFoundation, whisper.cpp embebido, paste vía AppleScript. Funciona porque Apple lo permite. En Linux nada de eso existe — pero todo lo equivalente sí existe: PipeWire para audio, Qt6 para UI, KGlobalAccel/portal para hotkeys, ydotool para inyección de texto, whisper.cpp con Vulkan para acelerar en cualquier GPU. Solo había que pegarlo todo.
Ese pegamento es VoxDrop.
Mantén pulsado Ctrl+Espacio. Habla. Suelta.
Tu voz nunca sale de tu máquina. La transcripción aparece donde tienes el cursor, sea Konsole, VSCode, Firefox, Telegram, LibreOffice o el editor de bugs de tu jefe. Entre que sueltas la tecla y ves el texto pegado pasan menos de 600ms con el modelo large-v3-turbo corriendo en una GPU AMD/Intel/NVIDIA decente.
No hay modo "espera, déjame conectarme a la API". No hay diálogo de cookies. No hay backend. Solo eres tú, una GPU, y un archivo de modelo en ~/.local/share/voxdrop/models/.
| VoxDrop | Servicios cloud (Google, OpenAI, …) | Scripts caseros con Whisper | |
|---|---|---|---|
| 🔒 100% offline | ✅ | ❌ | ✅ |
| ⚡ GPU Vulkan (AMD/Intel/NVIDIA) | ✅ | N/A | Tal vez |
| 🎙️ Push-to-talk real (hold) | ✅ | ❌ | ❌ |
| 📋 Auto-paste sin tocar el clipboard del usuario | ✅ | Manual | Manual |
| 🌍 99 idiomas out of the box | ✅ | $$$ | ✅ |
| 🤖 AI cleanup opcional con Ollama local | ✅ | ❌ | ❌ |
| 📖 Diccionario regex post-transcripción | ✅ | ❌ | ❌ |
| 🪟 Per-app profiles (Power Mode) | ✅ | ❌ | ❌ |
| 🔇 VAD auto-stop al detectar silencio | ✅ | A veces | ❌ |
| 📡 Streaming partial transcripts | ✅ | ✅ | ❌ |
| 💎 Nativo Qt/KDE (no Electron) | ✅ | ❌ | ❌ |
| 💰 Costo mensual | $0 | $$$ | $0 |
┌─────────────────┐
│ Ctrl+Espacio │ ← XDG portal GlobalShortcuts
│ (mantén) │ (push-to-talk real, no toggle)
└────────┬────────┘
│
▼
┌────────────────────────┐
│ PipeWire │ ← captura mono float32 16kHz
│ (libpipewire-0.3) │ con VAD opcional auto-stop
└────────────┬───────────┘
│
▼
┌────────────────────────┐
│ whisper.cpp + │ ← static linked, GGML_VULKAN=ON
│ Vulkan (RADV/ANV) │ selector de dispositivo GPU
└────────────┬───────────┘
│
▼
┌────────────────────────┐
│ Diccionario regex │ ← QRegularExpression PCRE
│ (SQLite persistente) │ case-sensitive opcional
└────────────┬───────────┘
│
▼
┌────────────────────────┐
│ Ollama (opcional) │ ← localhost:11434/api/generate
│ AI cleanup local │ prompt configurable, fallback OK
└────────────┬───────────┘
│
▼
┌────────────────────────┐
│ ydotool / wtype / │ ← autodetecta sesión
│ xdotool autodetect │ Wayland/X11, Ctrl+V sintético
└────────────┬───────────┘
│
▼
Aparece en tu app focada.
Cero round-trips. Cero telemetría.
- C++20 / Qt 6.10 / KDE Frameworks 6 — sin Electron, sin Python, sin nodejs, sin Java. Binario único de ~58 MB autocontenido (whisper.cpp linkeado estático).
- PipeWire nativo (no PulseAudio shim) para captura.
- whisper.cpp con backend Vulkan — acelera en cualquier GPU moderna sin tocar drivers propietarios.
- xdg-desktop-portal
GlobalShortcutspara PTT real (Activated/Deactivatedevents) — sin libei, sin grupoinput, sin permisos especiales. - ydotool vía systemd user service (con fallback a wtype/xdotool) para inyectar texto en Wayland sin pisar tu portapapeles.
- KGlobalAccel + KStatusNotifierItem + KNotifications + KConfig para integración nativa con Plasma.
- SQLite (vía QtSql) para historial, diccionario y perfiles Power Mode.
- QML/Qt Quick Controls 2 para la UI — estilo Breeze, animaciones nativas.
- KWin scripting JS instalado automáticamente para Power Mode en Wayland.
- Push-to-talk real vía portal XDG (mantén tecla → graba; suelta → transcribe).
- Toggle alterno vía KGlobalAccel para quien prefiera tap-tap.
- VAD auto-stop con umbral RMS y duración de silencio configurables.
- Streaming partial transcripts durante la grabación (texto azul cursiva en vivo).
- Selector de modelo descargable:
tiny,base,small,medium,large-v3-turbo. - Selector de GPU Vulkan cuando tienes iGPU + dGPU (elige cuál usar).
- 99 idiomas con detección automática o lenguaje fijo.
- Auto-paste vía ydotool (Wayland) / xdotool (X11) / wtype (legacy).
- Bandeja del sistema con indicador de estado (idle / recording / transcribing).
- Notificaciones KDE nativas en cada paso.
- Historial SQLite con búsqueda y exportación.
- Diccionario de reemplazos regex (perfecto para nombres propios, jerga, marcas).
- AI enhancement con Ollama local — corrige puntuación, gramática y typos sin tocar el sentido.
- Power Mode: perfiles por aplicación con override de idioma, modelo y prompt AI. Funciona en X11 y Wayland (mediante un script JS de KWin que VoxDrop instala automáticamente).
- Build estático — un solo binario, sin dependencias
libwhisper.soque romper. - Ningún acceso root en runtime. ydotool corre como usuario.
- Tests Qt Test para los componentes críticos (4 suites pasando).
- CI GitHub Actions con build matrix Fedora 43.
- Makefile + Justfile con todos los workflows: build, run, test, RPM, Flatpak, install.
- RPM spec funcional con Vulkan + spec hardened-friendly.
- Flatpak manifest con runtime KDE 6.8.
git clone https://github.com/Jazb/VoxDrop
cd VoxDrop
just rpm-install # o: make rpm-installEsto instala las BuildRequires automáticamente, compila whisper.cpp con Vulkan, genera el RPM, y lo instala vía dnf.
./scripts/bootstrap-nobara.sh # solo Nobara/Fedora
just run # o: make runVoxDrop descarga ggml-base (multilingüe, ~150 MB) automáticamente al primer arranque. Para mejor calidad, abre la pestaña Settings y descarga large-v3-turbo (~1.6 GB). Si tienes GPU dedicada, ve a Settings → GPU device y elige el dispositivo correcto (suele ser 1).
| Acción | Atajo |
|---|---|
| Push-to-talk (hold) | Ctrl+Espacio |
| Toggle dictación | Meta+V |
Los puedes cambiar desde System Settings → Shortcuts la primera vez que la app pide permisos al portal de KDE.
Este proyecto nació de una sola frase que dije en voz alta una tarde de domingo, frustrado mirando la pantalla:
«¿Por qué tengo que elegir entre la privacidad y la productividad?»
VoiceInk había salido para macOS y la respuesta de la comunidad fue inmediata: gente que quería volver a sentir que la computadora reaccionaba a su voz como si fuera parte del cuerpo. Sin diálogos, sin esperas, sin "ahora estoy escuchando", sin bombardear la cuenta del banco con suscripciones de SaaS de IA.
Pero VoiceInk era macOS-only. Y yo uso KDE Plasma 6 sobre Nobara, con una AMD Radeon RX 9060 XT esperando hacer trabajo útil más allá de juegos. Tenía todo el hardware. Tenía todo el software libre necesario. Lo único que faltaba era que alguien tuviera la paciencia de conectar las piezas correctas en el orden correcto.
Esa tarde decidí ser ese alguien. No con un fork — los forks heredan las decisiones del proyecto original. Desde cero, en C++ nativo, pensando en KDE primero. Una sesión maratónica después, VoxDrop hablaba español con 99% de exactitud, pegaba el texto donde mi cursor estaba, y todo corría en mi GPU sin tocar internet.
Lo que aprendí en el proceso vale la pena compartirlo:
- El ecosistema Linux para audio/UI/atajos globales es maduro. PipeWire, Qt6, KF6, xdg-desktop-portal, ydotool — todo funciona. La fricción está en la integración, no en las primitivas.
- whisper.cpp + Vulkan es ridículamente bueno. Un modelo
large-v3-turbocorriendo en una GPU consumer transcribe español casi en tiempo real. No necesitas CUDA, no necesitas Python, no necesitas nada de NVIDIA. - El portal
GlobalShortcutsresuelve el problema histórico de hacer push-to-talk real sin libei ni evdev ni grupos de permisos. Solo D-Bus. - KDE Plasma 6 ha llegado al punto donde puedes construir software de calidad sin pelearte con el toolkit.
Si construir esto te inspira, fork it, mejóralo, mándame un PR. Si lo usas para escribir tu novela, tu tesis, tu próximo bug fix mientras te preparas un café — eso es exactamente para lo que existe.
- 🪟 Power Mode visual con captura automática del app id activa al crear perfiles.
- 🎙️ Selector de dispositivo de entrada en UI (ahora usa el default de PipeWire).
- 🌐 Empaquetado Flatpak publicado en Flathub.
- 🔌 Plugin para KRunner — invocar dictado desde la búsqueda de Plasma.
- 📊 Estadísticas de uso locales (palabras dictadas / día, tiempo ahorrado).
- 🎨 Tema light/dark sincronizado con Plasma.
- 🦻 Modo dictado continuo con segmentación automática (para sesiones largas).
- 🇪🇸 Localización completa de la UI a español, francés, alemán, japonés.
¿Te falta algo? Abre un issue. ¿Lo quieres ya? Abre un PR.
VoxDrop es software libre bajo GPL-3.0-or-later, inspirado directamente en el trabajo de Prakash Joshi Pax en VoiceInk (también GPL-3.0). Si te gusta esta filosofía y tienes Mac, paga su app y apóyalo — sin VoiceInk no existiría VoxDrop.
Dependencias técnicas que hacen esto posible:
- whisper.cpp por Georgi Gerganov — el motor C++ que hace toda la magia ML en CPU/GPU sin Python.
- ggml + backend Vulkan por la misma comunidad.
- PipeWire por Wim Taymans y el equipo de RedHat.
- Qt 6 y KDE Frameworks 6 por las comunidades Qt y KDE.
- ydotool por ReimuNotMoe.
- Ollama por hacer que correr LLMs locales sea trivial.
GPL-3.0-or-later. Si lo modificas y lo distribuyes, comparte tus cambios. Es software libre como se entiende libre: libre de pelo, libre de cookies, libre de cláusulas tontas.
VoxDrop — porque tu voz no debería ser un commodity.
Hecho con ☕, frustración bien canalizada, y una RX 9060 XT que ya no se aburre.