Keep the recording HUD visible on screen without burning it into captures, and make cursor sway match cursor motion while preserving the old 2x strength at the new 1x slider position.
- Add tray.on('click') to call focusOrCreateMainWindow() so left-click
on the systray icon opens/focuses the app on all platforms (was
previously only possible via right-click → Open).
- On Linux/Wayland, compositors often ignore focus() for security;
Electron's tray does not yet handle ProvideXdgActivationToken like
Qt apps (e.g. Telegram). Workaround: when the HUD exists but is
not focused, destroy and recreate it so the new window receives
focus (creation path works). Applied only for the HUD overlay, not
the editor.
- Reorder: show() before restore(), then moveTop(), focus() for
more reliable raise-on-restore.
Made-with: Cursor
Added `-target` flag to swiftc compilation to explicitly specify arm64-apple-macos14.0 or x86_64-apple-macos14.0 based on process architecture, ensuring proper binary compilation for darwin-arm64 native helpers.
When cursor-monitor.exe is missing, fails to spawn, or exits early,
keep cursorVisualType as 'arrow' instead of undefined. This prevents
the frontend from falling back to heuristic cursor type inference
which can produce incorrect results.
Build a standalone C++ helper (same pattern as wgc-capture) that polls
GetCursorInfo() every 50ms and emits STATE:<type> to stdout — identical
protocol to the macOS Swift helper. Windows recordings now capture
correct cursor types (text, pointer, resize, etc.) instead of always
falling back to arrow.
The HUD overlay window (500px) was narrower than the HUD bar's
max-width (560px), causing content to clip on both sides and a
horizontal scrollbar to appear.
- Widen HUD overlay window from 500px to 600px
- Add overflow-hidden to the root container
- Remove unnecessary max-w-[560px] from the HUD bar
- Use getRecordingsDir() instead of hardcoded RECORDINGS_DIR
- Fix stop order: video first, then audio save, then mux via new
mux-wgc-recording IPC
- Explicitly stop MediaStream tracks for audio resource cleanup
- Add native WASAPI audio capture (system loopback + mic) in C++ process
for sample-accurate sync; browser audio APIs crash with WGC
- Add window capture support (CreateForWindow) with window: source prefix
- Kill WGC capture process on app before-quit
- Add even-dimension guard in MFEncoder
- Fix ffmpeg asar path backslash handling on Windows
- Remove dead browser-side WGC audio code (storeWgcAudio IPC,
ScriptProcessorNode refs, stopWgcAudioCapture)
Uses Windows.Graphics.Capture to record the screen without the OS cursor
or the yellow capture border. Falls back to Electron capture on older Windows
or when the helper exe isn't available.
- Move recordings path control into HUD menu bar and refine separators/layout
- Show underlined Path: /folder/ label next to Record controls
- Add native folder picker to change recordings location
- Persist selected recordings directory and route recording/project defaults through it
uiohook-napi ships a native .node binary that cannot be loaded from
inside an .asar archive. Without asarUnpack, nodeRequire('uiohook-napi')
fails silently in packaged builds, the hook never starts, and cursor
telemetry stays empty on Windows.
Changes:
- Add node_modules/uiohook-napi/** to asarUnpack so the native binary
is extracted to app.asar.unpacked/ where require() can reach it
- Extend loadUiohookModule() fallback chain to handle variant export
shapes across platform builds (uIOhook / uiohook / Uiohook / default)
- Add normalizeHookMouseButton() and getHookMouseButton() helpers for
robust cross-platform button code handling (codes 38/39 variants)
- Add diagnostic log to startInteractionCapture() to surface hook load
state in future debug sessions
- Added electron IPC handler 'reveal-in-folder' to show exported file in finder
- Created toast notification with clickable action to reveal exported video
- Added Show in Folder button in export success dialog
- Implemented proper state management for exported file path
- Fixed timing issue where exportedFilePath was reset too early
Implements GIF export alongside MP4, including new export types, a GIF exporter module, UI components for format selection and GIF options, and integration into the export dialog and video editor. Adds property-based and unit tests for GIF export correctness, updates dependencies to include gif.js and related types, and refines Electron save dialog to support GIF files.