Commit Graph
69 Commits
Author SHA1 Message Date
webadderall 5d040fbf2c refactor: split large files into focused modules
Split all source files exceeding 500 lines into smaller, focused modules:

- electron/main.ts → mainBootstrapHelpers, mainRuntimeState, mainUpdateIntegration, mainWindowControls
- electron/windows.ts → editorWindows, hudWindows, windowShared
- electron/updater.ts → updaterDialogs, updaterEventHandlers, updaterShared
- electron/preload.ts → preloadExtensionsBridge, preloadUpdateBridge
- electron/ipc/register/recording.ts → recording/ directory with focused handlers
- src/components/video-editor/VideoEditor.tsx → EditorContent, EditorHeader, EditorSidebar, EditorToolbar, hooks/
- src/components/video-editor/SettingsPanel.tsx → settings/ directory with per-section components
- src/components/video-editor/AnnotationSettingsPanel.tsx → tab components
- src/components/video-editor/ExtensionManager.tsx → extension-manager/ directory
- src/components/video-editor/VideoPlayback.tsx → videoPlaybackComponent/ directory
- src/components/video-editor/projectPersistence.ts → projectPersistence{Normalization,Paths,Regions,Shared}.ts
- src/components/video-editor/timeline/TimelineEditor.tsx → TimelineEditor/ directory
- src/components/video-editor/types.ts → focused type modules
- src/components/launch/LaunchWindow.tsx → LaunchWindow/ directory
- src/hooks/useScreenRecorder.ts → useScreenRecorder/ directory
- src/lib/exporter/audioEncoder.ts → audioEncoder/ directory
- src/lib/exporter/frameRenderer.ts → frameRenderer modules
- src/lib/exporter/modernFrameRenderer.ts → filters and lifecycle modules
- src/lib/exporter/modernVideoExporter.ts → modernVideoExporter/ directory
- src/lib/exporter/videoExporter.ts → video-exporter/ directory
- src/lib/exporter/streamingDecoder.ts → streamingDecoderHelpers.ts
- src/lib/extensions/extensionHost.ts → extensionHost{ApiFactory,QueryApi,RegistrationApi,Shared,State}.ts
- src/lib/extensions/types.ts → focused type modules
- electron/native/ScreenCaptureKitRecorder.swift → ScreenCaptureKitRecorder/ directory
- scripts/benchmark-export-queues.mjs → benchmark-export-queues/ directory
- .github/workflows/release.yml → extracted merge-macos-metadata composite action
- scripts/build-native-helpers.mjs → updated for multi-file Swift compilation

Also incorporates upstream default export quality change (good → source).
2026-04-20 20:41:42 +10:00
Uri 571bbb9434 fix(linux/wayland): collapse 3-step capture flow into a single portal dialog
Previously on Linux/Wayland, starting a fullscreen recording required three
separate picker interactions: an in-app source dropdown plus two xdg-desktop-portal
dialogs. The duplicate portal dialogs were caused by:

1. resolveBrowserCaptureSource() calling desktopCapturer.getSources() in the
   renderer, which itself triggers the portal on Wayland.
2. setDisplayMediaRequestHandler() in main also calling getSources(), which
   triggers another portal.
3. Returning a pre-enumerated source id to Chromium, which on Wayland is stale
   and forces Chromium to re-prompt via the portal during MediaStream creation.

Additionally, the editor window failed to appear after recording on some
Wayland sessions because 'ready-to-show' did not fire reliably.

Changes:
- LaunchWindow: skip the in-app source dropdown on Linux and start recording
  directly; the OS portal becomes the source picker.
- useScreenRecorder: introduce a 'screen:linux-portal' sentinel source. When
  set, route capture through navigator.mediaDevices.getDisplayMedia() so the
  portal handles selection in a single dialog. Skip resolveBrowserCaptureSource
  for the sentinel to avoid an extra getSources() call.
- electron/main: in setDisplayMediaRequestHandler, when the sentinel is set,
  skip desktopCapturer.getSources() entirely and return a synthetic source so
  Chromium opens the portal exactly once for the actual capture.
- electron/windows: in createEditorWindow, also call win.show() from
  did-finish-load as a fallback for Linux/Wayland where ready-to-show may
  not fire.
2026-04-18 16:17:08 +03:00
webadderall d4a7c863e8 fix: Linux GPU fallback and HUD window show safety net
- Add Linux GPU config: use EGL (better Wayland compat), disable VAAPI
  video decoder/encoder (many distros ship broken drivers causing
  'vaInitialize failed' and preventing renderer from loading)
- Add ready-to-show fallback for HUD window: if did-finish-load never
  fires (GPU failure), show the window after 500ms via ready-to-show

Ref #261
2026-04-18 21:32:18 +10:00
webadderall 8abceaa914 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
Andrew Foster dc39031990 resolve coderabbit nitpick listeners 2026-04-11 12:10:19 -05:00
Andrew Foster 192947cfed resolve coderabbit feedback on applyHudOverlayBounds 2026-04-11 12:10:19 -05:00
Andrew Foster a78f7d45d4 fix(hud): preserve user-dragged position across recording state changes
The HUD overlay snaps back to the centered default position whenever
recording starts because the idle-to-recording UI swap triggers a
resize, and applyHudOverlayBounds() always recomputes a centered
location. This is disruptive when the user has intentionally moved
the bar out of the way before a timed recording.

Remember the position after a drag ends and reuse it for subsequent
bounds updates, clamped to the current work area. The position resets
on app restart or when displays change so the bar cannot get stranded
off-screen.
2026-04-11 12:10:19 -05:00
Mohamed 0c5fa40c1f fix(hud): resolve overlay snap to primary on multi-monitor
- Add getHudOverlayDisplay() helper using getDisplayMatching()
  to detect which display the HUD is currently on
- Replace getPrimaryDisplay() in getHudOverlayBounds(),
  set-hud-overlay-compact-width, set-hud-overlay-measured-height
  handlers, and createHudOverlayWindow() maxHeight constraint
- Falls back to primary display when HUD window doesn't exist

Tested on Windows 11 with dual-monitor setup. HUD stays on
the external monitor through recording start/stop and
expand/collapse cycles.
2026-04-09 14:00:50 +02:00
Mohamed 20209cc02d fix(windows): use path.posix for URL path resolution
- replace path.normalize() with path.posix.normalize() in
  resolveRequestedFilePath to preserve forward slashes on Windows
- add empty-string guard for degenerate pathnames
- remove win32 bypass in loadPackagedEditorWindow

path.normalize() converts / to \ on Windows, causing path.resolve
to escape to the drive root and return 403 Forbidden.
2026-04-07 06:18:45 +02:00
webadderall 2692b28604 Hotfix 1.1.18 2026-04-06 22:39:31 +10:00
webadderall 2a155faaf6 Hotfix 1.1.17 2026-04-06 18:10:29 +10:00
webadderall 96d2ca9e5c Improve tray and packaged editor restore paths 2026-04-06 15:22:58 +10:00
webadderall 498b5ef426 Load packaged renderer over localhost 2026-04-05 18:51:51 +10:00
webadderall 5901dc7b90 revert(recording): drop linux editor visibility workaround 2026-04-04 22:15:32 +11:00
webadderall 22ec58e48a fix(recording): improve post-capture handoff 2026-04-04 22:14:15 +11:00
webadderall 965d4efac7 fix(windows): align Win10 HUD restore with interactive fallback 2026-04-04 17:22:37 +11:00
webadderall dbe1eb314c Merge pull request #167 from TARO-gh/fix/floating-toolbar-drag-drift
fix(windows): stabilize HUD drag by locking bounds size during move
2026-04-04 16:12:45 +11:00
TARO-gh 2cfed3d02f Merge branch 'webadderall:main' into fix/floating-toolbar-drag-drift 2026-04-04 12:39:20 +09:00
webadderall 238281dcec configure smoke export window boot flow 2026-04-04 13:07:49 +11:00
TARO-gh 79c03f9039 fix(hud-overlay): keep drag bounds size fixed to prevent cursor drift on Windows 2026-04-03 16:45:31 +09:00
TARO-gh 302676bb77 fix(hud-overlay): ignore duplicate drag mousemove events to stop hold-drift 2026-04-03 15:35:29 +09:00
iRaziul 168d230c91 Fix Linux HUD input handling 2026-04-02 17:40:27 +06:00
webadderall c9f99ee498 fix(electron): Windows HUD visibility - moveTop after show, reassert mouse state on recording start 2026-04-02 21:09:32 +11:00
webadderall b08f4efb37 fix(electron): Win10 HUD click-through recovery 2026-04-02 16:29:51 +11:00
webadderall 0a30df9872 make dragger register 2026-03-30 14:21:00 +11:00
webadderall 9aac961c1d fix(hud): make transparent areas click-through
- Set setIgnoreMouseEvents(true, {forward: true}) on HUD overlay window
  so transparent areas pass clicks to apps behind
- Add hud-overlay-set-ignore-mouse IPC to toggle mouse events
- Re-enable mouse events on mouseenter over visible HUD content,
  disable again on mouseleave
2026-03-30 13:32:24 +11:00
webadderall 53c7aa7e77 feat(updater): Windows native notifications and toast window fixes
- Use native OS Notification on Windows instead of transparent overlay
  toast window (transparent BrowserWindows are unreliable on Windows)
- Set app user model ID on Windows for proper notification grouping
- Make toast window opaque with solid background on Windows
- Only set transparent body background on macOS for update-toast window
- Refactor UpdateToastWindow to inline styles for Windows compatibility
- Add primaryAction-based button rendering in toast UI
- Add polling fallback for toast payload in UpdateToastWindow
- Add global CSS variables for brand accent color
2026-03-29 19:30:02 +11:00
webadderall ac14768a62 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 cbde700ab7 fix video editor not opening sometimes in prod 2026-03-29 13:13:15 +11:00
webadderall bc54b2a8c9 fix(desktop): polish editor chrome 2026-03-28 23:24:34 +11:00
webadderall caf65cb59c fix(dev): isolate app data paths from production 2026-03-28 22:00:15 +11:00
webadderall 641d3d271f feat(updater): add explicit download toast flow 2026-03-28 21:06:41 +11:00
webadderall 6463cdff58 feat: add updater release infrastructure 2026-03-28 20:42:38 +11:00
webadderall 719fa78e9f Revert "feat: Advanced Video Editor Implementation, Native WGC Integration, and AI Auto-Captions" 2026-03-28 14:12:25 +11:00
Mahdy Arief 281a73b51a 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
webadderall 1df365b5a5 fix(projects): align HUD browser behavior 2026-03-23 21:18:18 +11:00
webadderall bc0ea3fdb4 tweak: open editor at 85 percent of screen 2026-03-21 10:47:28 +11:00
Gurpreet Kait eda0b26a56 Stop maximizing editor window on open 2026-03-21 10:39:10 +11:00
webadderall c1cb222995 Fix HUD overlay height sizing 2026-03-20 20:18:41 +11:00
webadderall dea8c76da7 Fix HUD layout and overlay sizing 2026-03-20 13:53:43 +11:00
webadderall ae521ed9d9 feat(windows): replace WGC with DXGI and fix HUD window bounds 2026-03-18 22:11:10 +11:00
webadderall ab1a163281 fix: re-release v1.1.1 mic capture + hud position 2026-03-18 21:00:39 +11:00
webadderall bd01f06c97 Refine HUD menu controls and positioning 2026-03-18 18:36:25 +11:00
Gurpreet Kait 9679e20e48 Merge branch 'main' into feature/ui-improvements 2026-03-18 10:58:56 +05:30
Gurpreet Kait 15f48538bc Merge branch 'main' into feature/ui-improvements 2026-03-18 10:39:07 +05:30
Gurpreet Kait 03c05c8464 - Fix dropdown menu pushing HUD bar down by using 100vh height container
with flex layout that reserves space above the bar for menu cards
  - Increase HUD window size to 620x520 for menu card headroom
  - Replace mic on/off toggle with mic selector card showing all available
    microphones with live audio level meters per device
  - Remove old separate mic controls panel
  - Increase bar size with larger buttons, padding, and separators
  - Fix TS null safety in stopRecording MediaRecorder accessfix
2026-03-17 20:54:49 +05:30
Gurpreet Kait a95f32a095 - Redesign HUD overlay bar with dark glassmorphism aesthetic and inline source dropdown
- Add pause, resume, and cancel recording controls with elapsed timer
  - Move folder, language, and system audio into three-dots overflow menu with source highlight
  wave
2026-03-17 16:05:23 +05:30
KBCats 6e7a034a93 merge main into feat/cursor-sway 2026-03-16 08:57:03 -07:00
webadderall 735e46c128 Merge pull request #32 from kmr-varun/feature/countdown-timer
feat: add countdown timer before recording starts
2026-03-16 17:03:18 +11:00
KBCats acf796b074 fix(hud): persist capture hiding review fixes 2026-03-15 20:36:27 -07:00