Commit Graph
35 Commits
Author SHA1 Message Date
webadderall 9d7285a118 Keep audio finalization alive while encoding progresses 2026-10-17 18:26:03 +11:00
webadderall 9fc4df1bdb Bound gap recovery work and tighten alignment checks 2026-10-17 18:15:38 +11:00
webadderall 08c245b636 Preserve macOS audio timing through encoder stalls 2026-10-17 18:12:31 +11:00
sourabhxyzandClaude Opus 5.5 13edd56a44 Prefer a known device ID over the stripped-label match
Resolve the microphone by exact label, then by a device ID that names a
real capture device, and only then by the label without Chromium's
transport suffix, so the name heuristic cannot override a precise
identifier.

Move the matching into a pure function and replace the source-text
assertions with a test that compiles it with swiftc and checks the
results against a fixed device list, following the lifecycle test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:16:56 +05:30
sourabhxyzandClaude Opus 5.5 e029d11663 Match the selected macOS microphone despite Chromium's label suffix
The renderer passes the microphone's enumerateDevices() label to the
ScreenCaptureKit helper, which resolves it by exact comparison with
AVCaptureDevice.localizedName. Chromium decorates that label with a
transport suffix ("Shure MV7 (14ed:1012)", "MacBook Pro Microphone
(Built-in)", "BlackHole 16ch (Virtual)"), so the comparison failed for
almost every device and the helper silently recorded the system default
input instead. With the lid closed that default is the built-in mic,
which delivers digital silence, so recordings came out without a voice.

Try the raw label first, then the label without its trailing
parenthetical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:02:35 +05:30
KevinandClaude Opus 5.5 f91d1a1288 Pick a window, a screen or an area on screen
"Select area or window" in the source menu opens a picker over every
display. Hovering highlights the window under the cursor, or the whole
screen over the desktop, and a click picks it. Dragging draws an area,
and moving or resizing any pick turns it into an area. Record, Enter or
a double-click starts recording, Select only picks, Escape cancels.

The window-list helper gains a --z-order mode that lists windows front
to back with their owner process, so the picker hits the frontmost
window and skips Recordly's own. A picked window or screen becomes the
same source the lists offer. An area becomes an area:<displayId> source
that the capture helper crops like a window that never moves, cursor
telemetry normalizes to, and a dashed outline marks while recording.
The main process validates every pick: a window must be one the picker
offered. Picker windows stay hidden until they have painted, so opening
the picker does not flash the app background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 11:14:23 -07:00
webadderall ef4ca06068 Guard failed capture shutdown and address dashboard review feedback 2026-09-23 15:43:43 +10:00
webadderall 0979839fee Stop macOS capture helper when parent closes its input 2026-09-23 14:56:55 +10:00
webadderall d8bdc4a939 Start recordings at the first accepted video frame 2026-09-15 17:36:21 +10:00
young 0c3cdb24ce Keep window crops aligned as windows change 2026-09-04 20:06:05 +10:00
young af968551f1 Record selected windows by cropping full-screen captures 2026-09-04 19:48:22 +10:00
young 58faea68f1 Fix HUD capture protection across recording backends 2026-09-03 11:38:03 +10:00
young f411b2ac64 Fix washed-out Mac screen recordings 2026-09-01 18:49:33 +10:00
webadderall bb268188dc Correct colour handling during recording
Record captured frames with BT.709 conversion and explicit limited-range metadata. Share the Windows conversion code between capture engines and apply matching colour metadata on macOS and FFmpeg fallbacks.
2026-08-31 12:25:28 +10:00
webadderall bfe1de884a fix macOS countdown resume recording race 2026-08-24 18:05:16 +10:00
webadderall 31d8db76f7 fix: harden native capture lifecycle 2026-08-24 17:14:21 +10:00
young bc7d44f11f fix macOS capture finalization race 2026-08-24 14:14:01 +10:00
young 53be186b93 fix: address follow-up capture review 2026-08-24 13:19:17 +10:00
young 6819440371 fix: address native capture review feedback 2026-08-24 11:43:50 +10:00
young 117bbfe0eb fix: stabilize macOS countdown capture 2026-08-24 10:29:43 +10:00
webadderall d95686ffcc fix: avoid duplicate mic audio in native mac recordings 2026-06-02 10:24:50 +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 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 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 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 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
webadderall e2198d80b0 History reorganized for upstream alignment. 2026-03-13 21:36:30 +11:00
webadderall 5eb4d9b19c Make ScreenCaptureKit microphone APIs runtime-compatible across SDKs 2026-03-13 21:14:05 +11:00
webadderall 0cf009c08b Initial release of Recordly 2026-03-13 21:14:05 +11:00