Commit Graph
120 Commits
Author SHA1 Message Date
webadderall d855fd9a10 Merge remote-tracking branch 'origin/main' into feat/export-pipeline
# Conflicts:
#	electron/electron-env.d.ts
#	electron/ipc/handlers.ts
2026-04-17 13:47:15 +10:00
webadderall b03753f8e8 fix: address remaining ui overhaul review feedback 2026-04-16 23:39:27 +10:00
webadderall f2b13c8244 fix: address ui overhaul review feedback 2026-04-16 22:36:23 +10:00
webadderall 77af3e58f6 fix: address export pipeline review feedback 2026-04-16 18:49:01 +10:00
webadderall 26f1ce2476 feat: add H.264 stream-copy export, overhaul exporter pipeline, rename native binaries
- IPC: new inputMode 'h264-stream' — browser VideoEncoder output stream-copied
  into MP4 via ffmpeg rather than piping raw RGBA frames, cuts memory usage
- Security: replace flat approvedLocalReadPaths with userApprovedPaths fed from
  dialog pickers and project load; isAllowedLocalReadPath uses it alongside
  dir prefix / existsSync checks
- nativeVideoExport: add buildNativeH264StreamExportArgs for stream-copy path
- frameRenderer / modernFrameRenderer: cursor-follow camera integration,
  annotation blur post-processing, shadow profile, squircle geometry
- audioEncoder / streamingDecoder / gifExporter / muxer: full pipeline
  hardening — drift correction, backpressure, proper teardown
- Rename native helpers openscreen-* → recordly-* on darwin-arm64 and
  darwin-x64; update helpers-manifest.json for win32-x64
- electron/main, windows, updater, rendererServer: startup and window
  lifecycle improvements
- preload: expose inputMode and new IPC surface to renderer
2026-04-16 17:51:41 +10:00
webadderall 8999cf5405 fix: allow local export media files 2026-04-15 18:02:46 +10:00
webadderall abda1e05e1 fix: hotfix export regressions 2026-04-15 17:19:49 +10:00
webadderall c37472c9d6 fix(export): remove output path restriction 2026-04-14 22:28:30 +10:00
Wing900 63f8ff27ae Fix silent MP4 exports with FFmpeg audio fallback 2026-04-12 20:55:34 +08:00
webadderall 20f42d3fca fix(audio): add browser microphone fallback for macOS < 14
On macOS versions before Sonoma (14.0), SCStreamConfiguration does not
support the captureMicrophone/microphoneCaptureDeviceID selectors. The
native helper was throwing a fatal error, blocking recording entirely
when microphone was enabled.

Now the Swift helper logs MICROPHONE_CAPTURE_UNAVAILABLE and continues
capture without microphone. The Node handler detects this signal and
returns microphoneFallbackRequired to the renderer, which starts a
browser-side MediaRecorder capturing the mic via getUserMedia. On stop,
the audio blob is saved as a .mic.webm sidecar alongside the native
recording, where the existing companion audio detection picks it up.

Fixes: 'Native microphone capture is unavailable on this macOS/Xcode
runtime' error on older macOS versions.
2026-04-12 16:59:06 +10:00
webadderall 3a11981bc2 feat(extensions): marketplace integration, wallpaper thumbnails, cursor packs, and bug fixes
- Extension marketplace UI with browsing, installing, screenshot gallery
- Wallpaper & cursor style registration API for extensions
- Wallpaper thumbnail system (nativeImage resize + disk cache, OOM-safe)
- Fix HUD crash: check configurable before redefining electronAPI
- Fix zip-slip false positive on macOS (fs.realpath for symlinks)
- Extension icon sizing and description truncation improvements
- Eager extension activation in SettingsPanel
2026-04-12 01:38:36 +10:00
webadderall 983a08758c security: restrict read-local-file and open-external-url IPC handlers
- read-local-file: whitelist to RECORDINGS_DIR, USER_DATA_PATH, asset root, and temp only
- open-external-url: reject non-http/https protocols (blocks file://, javascript:, etc.)

Prevents malicious renderer code from reading arbitrary files (SSH keys,
credentials) or opening dangerous URLs via shell.openExternal.
2026-04-12 01:37:28 +10:00
webadderall b751c43599 chore(audio): clean up probeMediaDurationSeconds after #216
- Remove dead time= progress matching (no decode pass = no progress output)
- Remove stale comments about ffmpeg success/fallback behavior
- Lower timeout from 30s to 5s (header read is near-instant)
- Drop maxBuffer override (minimal stderr output now)
- Add -hide_banner to reduce stderr noise
2026-04-11 16:20:12 +10:00
Mohamed 1892c03f69 fix(audio): drop null muxer from probe to restore duration parsing
- Remove -f null - from probeMediaDurationSeconds() ffmpeg args
  so the command always exits non-zero (no output file specified)
- Without -f null -, ffmpeg exits code 1 and stderr lands in the
  catch block where Duration is parsed, fixing the bug where
  duration returned 0 on valid recordings
- probeMediaDurationSeconds returning 0 caused the
  videoDuration > 0 gate to skip all audio sync correction,
  leaving system audio misaligned in the final recording
2026-04-10 19:33:26 +02:00
webadderall a114f5b05f fix(whisper): reset download state on model deletion failure
When deleting the Whisper model failed, the frontend kept stale state
(whisperModelDownloadStatus stayed as 'downloaded'), which blocked
re-downloading because the download handler saw the model as already
present. On the backend, no progress event was sent on failure, leaving
the renderer out of sync.

Frontend: reset whisperModelDownloadStatus and progress to idle on
delete failure so re-download is unblocked.
Backend: verify whether the file was actually removed despite the error
and send appropriate progress events in either case.

Closes #152
2026-04-09 23:27:14 +10:00
webadderall ee0c3a67f3 fix(windows): use per-display scale factor for window cursor position
When recording a window on a secondary monitor with a different DPI,
getNormalizedCursorPoint() used the primary display's scale factor for
both cursor and window-bounds conversion. This produced incorrect
normalised coordinates. Now resolves the display that contains the
target window and uses that display's scale factor instead.

Fixes #204
2026-04-09 21:23:48 +10:00
webadderall fffb47c1a4 fix: harden cursor-monitor spawn against ENOENT on Windows
Use F_OK instead of X_OK for Windows fs.access check (X_OK is meaningless
on Windows). Wrap spawn() in try/catch to prevent uncaught exception if the
binary is missing or blocked by antivirus.
2026-04-09 16:07:57 +10:00
webadderall 26186b6fb2 fix: cursor DPI normalization for Windows/Linux scaled displays
On non-macOS platforms, platform APIs (iohook, GetWindowRect, xwininfo)
return physical pixel coordinates while Electron returns DIP coordinates.
Apply scaleFactor correction so cursor normalization uses a consistent
coordinate space. Fixes ~30-40px cursor offset on Windows 11 and Linux
Mint when display scaling is >100%.

Also fixes winget-releaser workflow (use v2 tag instead of invalid @latest).
2026-04-09 15:58:17 +10:00
webadderall 91c5331a21 revert(recording): remove editor finalization phase 2026-04-04 22:26:25 +11:00
webadderall 6edc6d293d fix(audio): reduce recording and export drift 2026-04-04 21:53:25 +11:00
webadderall 9a165dc782 add native export ipc handlers 2026-04-04 13:07:49 +11:00
webadderall eef6357fc3 add native export ffmpeg helpers 2026-04-04 13:07:42 +11:00
webadderall e90f8f654b fix(recording): improve webcam audio sync and delay compensation 2026-04-02 16:29:43 +11:00
webadderall 1d3d876c6e Add sidecar audio fallback for silent recordings 2026-04-01 15:40:40 +11:00
webadderall 2c778cfd08 Fix macOS recording audio playback 2026-04-01 15:01:51 +11:00
webadderall 76025313a6 fix(recording): align auto-zoom cursor data for windows capture 2026-03-31 00:06:53 +11:00
webadderall 5c74d8dd6e fix(recording): trim paused audio from native windows captures 2026-03-31 00:04:00 +11:00
webadderall 6d1e55a8e1 fix(recording): persist microphone and system-audio preferences 2026-03-30 23:49:56 +11:00
webadderall b833fc33cb fix(recording): wrap recovery mux in try/catch to prevent video loss on audio failure 2026-03-30 22:55:53 +11:00
Azeem Tariq 6c6aca0fed fix(recording): preserve mic audio when recovering mac capture 2026-03-30 15:47:13 +05:00
webadderall a4fdeca71d fix: use CGWindowID bounds for highlight animation instead of AppleScript
- Remove AppleScript 'front window' bounds query which returned wrong window
  for multi-window apps (e.g. Arc highlighting invisible auxiliary window)
- Use resolveMacWindowBounds() which queries by exact CGWindowID
- Keep AppleScript 'activate' call for bringing the app to front
2026-03-30 15:16:35 +11:00
webadderall 09341587d4 fix: filter auxiliary windows and remove thumbnail requirement from source list
- Swift helper: filter out untitled auxiliary windows from multi-window apps (e.g. Arc sidebar/tab-bar chrome)
- Swift helper: increase minimum window size from 1x1 to 50x50
- Remove .filter(source => Boolean(source.thumbnail)) that hid valid sources
- Remove hasUsableSourceThumbnail filter in fallback path
- Recompile prebundled openscreen-window-list binary
2026-03-30 15:16:28 +11:00
webadderall 4f33e6d509 fix(sources): gracefully handle desktopCapturer.getSources failure
Catch errors from desktopCapturer.getSources() in the get-sources IPC
handler and return an empty array instead of crashing the handler.
Prevents repeated 'Failed to get sources' errors when screen recording
permission is not granted (common in dev mode on macOS 26).
2026-03-30 13:33:49 +11:00
webadderall 9786157062 fix(recording): make video validation non-blocking and use single timestamp
- finalizeStoredVideo now catches validateRecordedVideo errors instead of
  propagating them, so the editor opens even if ffmpeg validation fails
  (restores v1.1.3/v1.1.5 resilient behavior)
- Use a single Date.now() call for all native capture filenames on macOS
  to prevent timestamp drift between video/audio files
2026-03-30 13:32:16 +11:00
webadderall cac0126109 fix: TCC permission handling for native helpers on macOS 26
- Add CGPreflightScreenCaptureAccess pre-check in Swift helper
- Add microphone TCC pre-flight when mic capture is requested
- Warm up TCC via desktopCapturer.getSources before spawning helper
- Request mic access from Electron before helper spawn
- Remove unreliable systemPreferences.getMediaAccessStatus pre-checks
- Add camera entitlements to plist files for webcam support
- Guard getScreen() calls behind app.isReady()
- Make tray icons lazy to avoid early screen access
- Suppress duplicate permission error alerts in renderer
2026-03-29 19:15:18 +11:00
webadderall fc5249c8e9 fix video editor not opening sometimes in prod 2026-03-29 13:13:15 +11:00
webadderall 45adb7f437 fixed webcam disappearing 2026-03-29 10:31:50 +11:00
webadderall 7bd52918c0 fix(dev): isolate app data paths from production 2026-03-28 22:00:15 +11:00
webadderall 3074ba7445 test(windows): cover WGC display selection 2026-03-28 16:15:27 +11:00
webadderall 92d0a6c5ec fix(recording): validate video outputs before open 2026-03-28 16:10:49 +11:00
webadderall 6a9754bace feat(debug): add native capture diagnostics 2026-03-28 16:08:43 +11:00
webadderall 691d90b126 fix(windows): restore WGC monitor fallback 2026-03-28 15:18:56 +11:00
webadderall b85374dee0 fix(windows): bundle native capture helpers 2026-03-28 14:56:16 +11:00
webadderall 20f9259d50 Revert "feat: Advanced Video Editor Implementation, Native WGC Integration, and AI Auto-Captions" 2026-03-28 14:12:25 +11:00
Mahdy Arief b04e4b2b62 fix(export, native, ui): resolve critical data integrity and resource management bugs in PR #122
- Implement comprehensive solo/mute export pipeline in audioEncoder.ts
- Fix duplicate caption IDs by adding chunk-specific indices in handlers.ts
- Prioritize native monitor selection by bounds in monitor_utils.cpp
- Fix alignment for blur annotations extending beyond canvas boundaries
- Resolve timeline selection desync and sidebar visibility for blur annotations
- Fix memory leaks in audio waveform generation with AudioContext cleanup
2026-03-28 06:09:50 +07:00
Mahdy Arief 933d804118 chore: Finalize PR #116 stability and privacy improvements
- Hardened IPC with safety guards for all webContents.send calls
- Scrubbed sensitive absolute paths from caption logs
- Realigned Windows artifact naming logic
2026-03-27 23:14:12 +07:00
Mahdy Arief 76d39c8ad9 feat: improve timeline selection interaction with Shift+drag and closure fixes 2026-03-27 21:59:03 +07:00
webadderall 78d6b1712c fix(stability): restore export and recording session compatibility 2026-03-27 23:58:08 +11:00
Mahdy Arief bcf8aa9bcc feat: Implement native Windows Graphics Capture monitor utilities and introduce video editor UI components. 2026-03-27 17:22:55 +07:00
Mahdy Arief 25ca604d88 feat: add blur annotation and Whisper model selection for autocaption 2026-03-27 13:27:57 +07:00