Wait for a composed scene before revealing Home previews, bound Settings scrolling, add the X community link, animate countdown replacement, and prevent transparent idle HUD regions or cancelled captures from taking focus.
Keep optional development onboarding dismissible across recording editor recreation, preserve restored accounts, and use consistent permission actions and footer layout.
Preserve renderer state through mute and export transitions, gate hover previews on a composed frame, and align timeline bounds with authored zoom intervals. Improve settings, cursor and webcam controls, inline recording countdown, project recovery and safe library cleanup.
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>
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>
Preserve both original author commits. Use the author's live-overlay sender guard for completion and context requests. Retain selection-only HUD behavior, existing failure toasts, and synchronous drag refs; add coverage for rapid area moves/resizes and failure versus cancellation messages.
- complete-capture-pick ignores any sender that isn't an open picker overlay
- when a pick fails for a reason other than cancel, like a window that
closed, the hud shows the message in a toast
- moving or resizing an area reads a flag on the drag itself instead of
react state, so a pointer move that lands before the next render still
counts as part of the drag
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"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>