Grabador de pantalla nativo lite para Windows / macOS / Linux. Vive en la barra del sistema (menubar/tray). Versión lite estilo TapRecord.
Stack: Tauri 2 (Rust) + React + FFmpeg como sidecar.
Referencia técnica rápida (gotchas, comandos, arquitectura) en CLAUDE.md. Roadmap y futuro en ROADMAP.md. Cambios por versión en CHANGELOG.md.
source "$HOME/.cargo/env" # cargo no está en PATH por defecto
bash scripts/start.sh # dev (hot reload) — app NATIVA, no navegador
bash scripts/stop.sh # detener todo
cargo test --manifest-path src-tauri/Cargo.toml # tests backend
pnpm exec tsc --noEmit # typecheck frontend
bash scripts/build-mac.sh # instalador .dmg| Fase | Qué | Estado |
|---|---|---|
| 1 — Cimientos | Tray, menú, list_devices, settings store, scripts |
✅ |
| 2 — Esencial | Grabar pantalla/área + audio, countdown, RAM live, autostart | ✅ |
| 3 — Funcionalidades | Reproducir + cut/trim | ✅ |
| 4 — Web detect | Extensión navegador + listener + grabar instantáneo | ✅ |
| 5 — Export + pulir | Instaladores por OS, permisos, UI | 🟡 Mac listo |
- Node + pnpm
- Rust (rustup) —
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - FFmpeg (dev usa el del sistema; build empaqueta uno por OS en
src-tauri/binaries/)
bash scripts/start.sh # modo dev (hot reload) — ESTE para iterar
bash scripts/start.sh --preview # build release sin empaquetar
bash scripts/stop.sh # detener app + ffmpeg huérfano + listenerIMPORTANTE: la app es nativa, NO se abre en el navegador.
localhost:1420en Chrome = solo el frontend, sin backend → no funciona. Al arrancar, la ventana del menú se abre sola. También sale un icono●RECen el menubar de macOS (arriba). Click en él muestra/oculta el menú.
- Editas React (
src/) → recarga sola, instantánea. - Editas Rust (
src-tauri/src/) → recompila auto (~5s) y reinicia. - Si el watcher se cae,
bash scripts/stop.shy vuelve abash scripts/start.sh.
● Grabar pantalla— graba la pantalla completa.▭ Grabar área— oscurece la pantalla; arrastra un rectángulo sobre la zona deseada y suelta.Esccancela.- Antes de grabar corre el countdown 3-2-1 (se puede apagar en Settings).
■ Detenertermina y guarda. La ruta del archivo sale en pantalla.
- Arrastra desde el header ("insta-record"). El cursor cambia a mano.
- Botón ⛶ (header) expande la ventana; 🗗 la compacta. También es redimensionable desde los bordes.
- ⌘⇧J — grabar / detener (funciona aunque la ventana esté oculta).
- ⌘⇧X — cancelar todo: mata la grabación y descarta el archivo.
Accesibilidad (macOS): los atajos usan
RegisterEventHotKey(Carbon), que NO requiere permiso de Accesibilidad — funcionan directo. Si algún día no responden, revisa/abre el panel:# Abrir el panel de Accesibilidad directo open "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility" # Abrir Grabación de pantalla (este SÍ es obligatorio para grabar) open "x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture" # Abrir Micrófono open "x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone" # Resetear permisos del bundle si quedan en mal estado (pide de nuevo) tccutil reset Accessibility com.insta-record tccutil reset ScreenCapture com.insta-record tccutil reset Microphone com.insta-record
- ▁ (header) — oculta la ventana. Vuelve con ⌘⇧J o el icono
●RECdel menubar. - ✕ (header) — cierra la app.
- Al grabar, la ventana se encoge a una barra mini y se aparta a la esquina superior para no estorbar.
Durante la grabación: ✕ Cancelar (descartar) mata ffmpeg y borra el
archivo parcial (no guarda nada). ■ Detener y guardar finaliza y conserva.
📼 Grabaciones→ lista de archivos.- Click en un video → se abre el reproductor.
- Mueve el video al punto deseado →
⟦ Inicio; ve al final →Fin ⟧. ✂ Cortar segmento→ crea<nombre>-cut.mp4.- Marca Corte exacto para re-encode (más lento, corte preciso); sin marcar
usa
-c copy(instantáneo, corta en keyframe).
- Marca Corte exacto para re-encode (más lento, corte preciso); sin marcar
usa
- Renombrar (✎), borrar (🗑), abrir carpeta — en la lista.
Carpeta destino · juntos/separados · audio (mic/sistema/ambos) · micrófono · countdown · autostart · detección de páginas web (dominios, umbral seg, instantáneo).
System Settings → Privacy & Security:
- Screen Recording → permite
insta-record(en dev puede aparecer como la Terminal). - Microphone → permite.
Sin esto: pantalla negra / sin audio.
bash scripts/build-mac.sh # .app + .dmg (correr en macOS)
bash scripts/build-win.sh # .exe + .msi (correr en Windows)
bash scripts/build-linux.sh # .AppImage + .deb (correr en Linux)Artefactos en src-tauri/target/<triple>/release/bundle/.
# Tests unitarios del backend (ffmpeg args, parse devices, trim, duración)
cargo test --manifest-path src-tauri/Cargo.toml
# Typecheck del frontend
pnpm exec tsc --noEmit
# Listener web (con la app corriendo): simula la señal de la extensión
curl -X POST http://127.0.0.1:8787/seen \
-H 'Content-Type: application/json' \
-d '{"url":"https://youtube.com","seconds":16}'
# → debe disparar el prompt "¿Grabar?" en la app
# Enumerar dispositivos como lo hace la app (macOS)
src-tauri/binaries/ffmpeg-aarch64-apple-darwin -f avfoundation -list_devices true -i ""Tauri empaqueta un binario por target, nombrado con el triple de Rust:
src-tauri/binaries/ffmpeg-aarch64-apple-darwin
src-tauri/binaries/ffmpeg-x86_64-pc-windows-msvc.exe
src-tauri/binaries/ffmpeg-x86_64-unknown-linux-gnu
Estado actual:
ffmpeg-aarch64-apple-darwinyffmpeg-x86_64-apple-darwin= build estático de evermeet.cx (x86_64, sin dylibs). En Apple Silicon corre vía Rosetta (instálala consoftwareupdate --install-rosettasi falta).- El de Homebrew quedó respaldado como
*.homebrew-devpor si quieres dev nativo arm. - Pendiente: ffmpeg arm64 nativo (evermeet solo da Intel) + binarios Win/Linux.
macOS pide permisos vía entitlements.plist + Info.plist
(NSMicrophoneUsageDescription, cámara, LSUIElement para ocultar del Dock).
Default macOS: ~/Movies/insta-record (dirs::video_dir() = Movies en Mac).
Linux/Windows: ~/Videos/insta-record. Configurable en Settings.
Ver scripts/load-extension.md. Resumen:
- Chrome:
chrome://extensions→ modo desarrollador → "Cargar descomprimida" →browser-extension/. - Firefox:
about:debugging→ "Cargar complemento temporal" →browser-extension/manifest.json.
| Síntoma | Causa | Fix |
|---|---|---|
Errores invoke undefined en consola |
Abriste en navegador | Usa la ventana nativa; no abras localhost:1420 |
| No veo icono en menubar | Saturado / notch | Busca texto ●REC; la ventana abre sola igual |
| Pantalla negra al grabar | Sin permiso Screen Recording | Privacy & Security → permite |
| Sin audio del sistema | Mac no captura loopback nativo | Instala BlackHole o usa solo mic |
ELIFECYCLE 143 en el log |
pnpm al matar dev | Ruido, ignorar; o stop.sh + start.sh |
