Commit Graph
53 Commits
Author SHA1 Message Date
webadderall 10c86f40b6 fix: address CodeRabbit review feedback
- Remove dead helperExists local in recording/windows.ts
- Hoist fs/promises import out of close handler in recording/ffmpeg.ts
- Guard fs.readdir with mkdir in recording/prune.ts (ENOENT resilience)
- Derive companion audio suffixes from COMPANION_AUDIO_LAYOUTS in prune.ts
- Guard mousemove hook registration to Linux only in cursor/interaction.ts
- Replace dynamic require('electron') with static import in cursor/monitor.ts
- Wrap nodeRequire in try/catch in ffmpeg/binary.ts for fallback safety
- Fix hardcoded timeOffsetMs: 0 in project/session.ts (use normalizer)
- Fix isPathInsideDirectory to normalize candidatePath in project/manager.ts
- Fix isAllowedLocalReadPath security: require path to be in allowlist (AND not OR)
- Derive extension regex from constants in project/manager.ts
- Consolidate duplicate Duration parsers in recording/diagnostics.ts
- Refactor ensureReadableFile to use options object instead of description string
- Make swiftc compilation async (execFile) in paths/binaries.ts
- Add socket timeout to httpsGet in captions/whisper.ts
2026-04-17 20:35:08 +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 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 4467b144a0 fix(macos): lower deployment target to macOS 13.0 for native helpers
The Swift helper binaries were compiled with -target macos14.0, causing
dyld symbol-not-found crashes on macOS 13. The ScreenCaptureKit audio
APIs require macOS 13.0 minimum, so the deployment target is lowered to
13.0 and an #available guard is added for the macOS 14-only
ignoreShadowsSingleWindow API. README updated accordingly.

Fixes #199, fixes #200
2026-04-09 21:23:33 +10:00
webadderall 6edc6d293d fix(audio): reduce recording and export drift 2026-04-04 21:53:25 +11:00
webadderall 3f8c8bb83d update native capture helper binaries 2026-04-04 13:08:12 +11:00
webadderall 70d4a4f92f fix(macos): use firstSampleTime as common time base in native recorder 2026-04-02 16:29:47 +11:00
webadderall 2c778cfd08 Fix macOS recording audio playback 2026-04-01 15:01:51 +11:00
webadderall a359636140 fix: add COM init on WASAPI capture thread for Windows 11 compatibility
- Call CoInitializeEx(MTA) at start of captureThread() and CoUninitialize() on exit
- Windows 11 enforces per-thread COM initialization more strictly than Win10,
  causing GetBuffer/GetNextPacketSize to fail silently without this
- Add HRESULT error logging for WASAPI capture failures (GetNextPacketSize, GetBuffer)
2026-03-30 15:27:40 +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 c7633162ff chore(native): rebuild win32-x64 native helper binaries
- Rebuild wgc-capture.exe and cursor-monitor.exe from unchanged source
- Update helpers-manifest.json with new binary hashes and timestamps
2026-03-29 19:30:02 +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 eec536e3b9 fix(desktop): polish editor chrome 2026-03-28 23:24:34 +11:00
webadderall cd8e981065 fix(windows): finalize WGC recordings safely 2026-03-28 17:03:41 +11:00
webadderall 227bcabe12 chore(windows): track bundled helper manifests 2026-03-28 16:17:29 +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
webadderall df70d291a3 fix(wgc): preserve full-width display identifiers 2026-03-27 23:34:39 +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
webadderall 1e83931120 Revert "fix(recording): validate native captures and tighten mic menu spacing"
This reverts commit d485c0b226.
2026-03-27 11:31:02 +11:00
webadderall ade26f2faf Revert "Fix WGC display selection and webcam sync"
This reverts commit 2b04e383e5.
2026-03-27 11:30:11 +11:00
webadderall 2363ae87bd Merge fix/wgc-display-webcam-sync into main 2026-03-26 22:09:59 +11:00
webadderall 2b04e383e5 Fix WGC display selection and webcam sync 2026-03-26 21:52:35 +11:00
webadderall 07bd87fdd3 fix(windows): honor selected microphone in native capture 2026-03-26 11:17:39 +11:00
webadderall c20772f11f chore(windows): remove stale DXGI capture helper 2026-03-26 11:05:38 +11:00
Pierre-Adrien Lair af93de1fb1 Fix corrupted MP4 recordings on Windows by serializing encoder writes
The WGC capture session uses Direct3D11CaptureFramePool::CreateFreeThreaded,
which dispatches FrameArrived callbacks on thread pool threads concurrently.
MFEncoder::writeFrame() accesses non-thread-safe resources (ID3D11DeviceContext,
IMFSinkWriter, shared staging texture and NV12 buffer) without synchronization,
causing MP4 container corruption when callbacks overlap at high frame rates.

Add a mutex to serialize writeFrame() and finalize() calls, preventing
concurrent access to the D3D context and Media Foundation sink writer.

Fixes #96
2026-03-24 17:59:27 +01:00
webadderall d485c0b226 fix(recording): validate native captures and tighten mic menu spacing 2026-03-24 19:04:24 +11:00
webadderall cd7231e927 fix(windows): preserve full monitor ids for native capture 2026-03-23 18:00:00 +11:00
webadderall 89ebfa79ed feat: add backend Whisper and native audio support
Add Electron IPC handlers and preload wiring for Whisper caption generation, small-model download management, and safer project media source resolution. Update native macOS capture helpers to mux separate system and microphone audio outputs before finalizing recordings.
2026-03-22 18:34:43 +11:00
webadderall 2b9777d8ab build: add bundled Whisper runtime pipeline
Add the Whisper runtime build script, package integration, runtime manifest, and staged darwin-arm64 Whisper binaries.
2026-03-22 18:30:19 +11:00
VoidGravity f4f73977d9 capturing silently, removing usless noisy warning 2026-03-20 22:29:51 +00:00
VoidGravity 69291eb101 Handle unsupported IsBorderRequired on Windows 10 causing Native Windows capture failure 2026-03-20 22:24:48 +00:00
webadderall 91cadd2b7a Fix missing WasapiCapture pause and resume methods 2026-03-19 19:53:44 +11:00
webadderall c8cbd05729 Selective merge of Windows system cursor fix #66 2026-03-19 11:10:44 +11:00
webadderall 3ff7f7aef1 Fix Windows DXGI capture helper flow 2026-03-19 00:05:58 +11:00
webadderall 8a5339549d feat(windows): replace WGC with DXGI and fix HUD window bounds 2026-03-18 22:11:10 +11:00
webadderall 285ca3a983 fix: restore cursor fallback and mac mic selection 2026-03-18 21:19:00 +11:00
webadderall 224f35c64e fix: re-release v1.1.1 mic capture + hud position 2026-03-18 21:00:39 +11:00
webadderall e064f738ae Pause native screen capture across platforms 2026-03-18 18:36:25 +11:00
KBCats df1d24f4a5 merge main into feat/cursor-sway 2026-03-16 08:57:03 -07:00
aras 3584b026b9 fix(macos): add explicit target architecture to Swift helper builds
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.
2026-03-15 18:01:14 +03:00
tokenflow1m 8e4f1acb96 fix: add missing <cstdio> include and flush stdout explicitly
Address Copilot review: include <cstdio> for std::setvbuf portability,
use std::endl instead of "\n" to guarantee flush on piped stdout.
2026-03-15 18:25:48 +09:00
tokenflow1m 192d3f3199 feat(windows): add native cursor type detection via cursor-monitor.exe
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.
2026-03-15 18:12:42 +09:00
tokenflow1m 004fe4d197 fix(wgc): address PR review feedback
- 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)
2026-03-15 03:37:27 +09:00
tokenflow1m e6f36a4d14 Add native WGC screen capture for Windows
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.
2026-03-14 23:02:29 +09:00
webadderall e2198d80b0 History reorganized for upstream alignment. 2026-03-13 21:36:30 +11:00