Commit Graph
309 Commits
Author SHA1 Message Date
Alan Trebugeais fbb6d2e649 del: removed compatibility layers which were no ops 2026-05-07 00:56:10 +02:00
Alan Trebugeais 01960510e5 better code in sources/launchwindow/source
add: caching for 1.2s for a better user experience, less refreshing, it's actually instant now.
2026-05-06 23:32:58 +02:00
Alan Trebugeais 428f4ea4a3 fix: hud overlay was flashing white (because I added a fullscreen window to render the overlay, otherwise it wouldn't stop jittering.)
add: launchTheme.css to have everything under the same variables.
2026-05-06 23:16:52 +02:00
Alan Trebugeais 6df02e847d fix: overflow, add window in fullscreen mode to avoid jittering when opening up select...
add: launchTheme.css for consistent styling accross the whole components spectrum related to LaunchWindow
add: correct styles accross the popovers! with unstyled parameters in Popover.tsx because it was needed to make sure its the same
2026-05-06 23:12:03 +02:00
Alan Trebugeais b682663fba add: LaunchWindow source selector without that much of a jitter. it's still weirdly behaving but it's better 2026-05-06 21:50:07 +02:00
Alan Trebugeais 7f85bd0e70 edit: LaunchWindow, RecordingControls for seperations of concern
fix: SourceSelection performances
add: seperator.tsx for "divider" component, instead of a non-generic component. can be reused elsewhere!
2026-05-06 19:34:21 +02:00
webadderall 0ffbcff9b2 fix: address PR feedback regressions 2026-05-05 16:17:47 +10:00
webadderall 248a5db8c1 Reapply "feat: bundle cursor motion and temporal blur updates"
This reverts commit 132c77a5cc.
2026-05-05 16:16:56 +10:00
webadderall cb4bb66f2a Merge pull request #413 from webadderallorg/codex/cursor-telemetry-write-api
feat: add writable cursor telemetry API
2026-05-05 14:57:09 +10:00
webadderall c4e60e7f05 fix: address PR review regressions 2026-05-05 11:43:04 +10:00
webadderall 132c77a5cc Revert "feat: bundle cursor motion and temporal blur updates" 2026-05-04 18:17:04 +10:00
webadderall 0d72a03c80 Merge pull request #414 from webadderallorg/codex/behavior-3-13
feat: bundle cursor motion and temporal blur updates
2026-05-04 18:15:30 +10:00
webadderall 7660bedeb4 feat: bundle cursor motion and temporal blur updates 2026-05-04 18:12:47 +10:00
webadderall ab24e496f5 feat: add writable cursor telemetry API 2026-05-04 17:28:10 +10:00
shafeq aa024cf497 fix(export): return temp path from buffer-mode FFmpeg muxer (>2 GiB)
Exports of recordings whose muxed output exceeds 2 GiB failed with
RangeError [ERR_FS_FILE_TOO_LARGE]: Node's fs.readFile rejects files
larger than kIoMaxLength (2 ** 31 - 1). The legacy export pipeline hit
this in muxExportedVideoAudioBuffer, which called
  await fs.readFile(finalized.outputPath)
to ship the muxed bytes back to the renderer.

Mirror the path-based contract that mux-exported-video-audio-from-path
already uses:

- muxExportedVideoAudioBuffer now returns { outputPath, metrics } and
  collects byte size via fs.stat instead of fs.readFile. The unmuxed
  intermediate is still cleaned up; the muxed output is left for the
  IPC handler to register and the renderer to finalize.
- The mux-exported-video-audio IPC handler registers the muxed output
  via registerOwnedExportPath and returns { tempPath, metrics }.
- preload.ts and electron-env.d.ts: tempPath replaces data in the
  renderer-facing return type.
- videoExporter.ts and modernVideoExporter.ts (the
  finalizeExportWithFfmpegAudio fallback paths) now return
  { tempFilePath } so VideoEditor's existing finalize-exported-video
  flow handles the move — the same path the modern stream-mode export
  already takes.

The renderer already preferred tempFilePath over blob in
VideoEditor.tsx for MP4 saves (with the explicit comment "avoids ever
allocating a multi-GiB ArrayBuffer in the renderer"), so this just
removes the buffer-mode regression for large legacy exports.

Adds electron/ipc/export/native-video.test.ts asserting the new
contract: muxExportedVideoAudioBuffer returns a path, never calls
fs.readFile, and still records muxedVideoBytes via stat.

Closes #380
2026-05-02 09:48:05 +08:00
webadderall 1c461734d8 [codex] Fix cursor sync after recording pause (#399)
* Fix cursor sync after recording pause

* Align recorder and cursor pause boundaries
2026-05-01 17:18:35 +10:00
webadderall c7493fe3e4 Revert gradient changes and clean previews 2026-04-28 09:39:48 +10:00
webadderall a9615c486e Improve project autosave and media path handling 2026-04-27 20:07:32 +10:00
webadderall 2bd01c9a46 Fix video wallpaper sync and streamline updater UI 2026-04-27 15:48:38 +10:00
webadderall 945c5cae1c Merge pull request #237 from Andrii-Vovk/fix/macos-screen-highlight-bounds
fix(highlight): screen highlight clipping on macOS
2026-04-27 14:43:16 +10:00
Wiii 4ec33d67b6 fix(export): use tempo filters for speed audio
Use FFmpeg atempo filters for native edited-track speed changes, including near-unity speed tolerance coverage.
2026-04-26 22:59:20 +07:00
Andrii-Vovk f90e7af66f fix(highlight): screen highlight clipping on macOS
On macOS, the screen highlight overlay's right and bottom edges were
   running off-screen. macOS clamps window positions below the menu bar,
   so the outward padding only appeared on the left/top while the
   right/bottom extended beyond the visible area.

   Use display workArea instead of full bounds for screen highlights on
   macOS, and keep the border/glow within the overlay window.
2026-04-26 17:31:28 +03:00
webadderall cd4ea8fc05 Improve HUD and update prompt UI 2026-04-25 21:34:55 +10:00
Wiii 8da7209bae fix(recording): normalize native Windows mic loudness

2026-04-25 18:15:51 +07:00
Wiii d04fc00fd8 fix(recording): use native audio start timestamps for Windows sync

2026-04-25 17:47:39 +07:00
webadderall c6aa98117e Merge pull request #295 from BillLucky/fix/export-large-files-upstream
fix(export): stream MP4 output to disk to unblock >2 GiB exports
2026-04-25 00:45:44 +10:00
webadderall 58e298c250 Merge pull request #321 from meiiie/fix/win10-floating-webcam-preview
fix(launch): disable floating webcam preview without passthrough
2026-04-25 00:44:41 +10:00
大彪 1280670740 chore(smoke-export): let the smoke harness open .recordly project files
Previously the smoke-export harness only accepted a raw MP4 input path.
Validating the export pipeline on a real editor project (with its own
zoom regions, wallpaper, annotations, and webcam state) required
opening the editor by hand and clicking through the GUI.

This adds three new environment variables that are picked up by the
existing smoke-export query string plumbing:

- RECORDLY_SMOKE_EXPORT_PROJECT  — path to a .recordly project file;
  when set, the editor opens it via openProjectFileAtPath and applies
  the saved state before the auto-export fires.
- RECORDLY_SMOKE_EXPORT_QUALITY  — overrides the hard-coded "good"
  quality used by the auto-export trigger; accepts medium / good /
  high / source.
- RECORDLY_SMOKE_EXPORT_FPS      — overrides the frame rate; accepts
  24 / 30 / 60.

No behavior change for existing RECORDLY_SMOKE_EXPORT_INPUT runs;
the new inputs are strictly additive and optional. The startup log
line prefers the project path over the raw-input path when both are
populated.
2026-04-24 16:02:37 +08:00
大彪 bd8a941c12 fix(export): stream MP4 output to disk to unblock >2 GiB exports
Long recordings (35-minute screencaps were the motivating case) fail at
the 99% "Finalizing" step with a RangeError once the muxed MP4 would
exceed V8's ~2 GiB per-ArrayBuffer limit. Both export paths accumulate
the whole file in renderer memory and round-trip it through IPC, so no
output size past that point can complete:

- Legacy: src/lib/exporter/muxer.ts uses mediabunny's BufferTarget,
  which holds the entire MP4 in a single ArrayBuffer. finalize() → Blob
  → blob.arrayBuffer() → ipcRenderer.invoke('write-exported-video-to-
  path', arrayBuffer, path) — every step wants a ≥2 GiB contiguous
  allocation.
- Lightning: native-video-export-finish did fs.readFile(finalizedPath)
  and shipped the bytes back to the renderer, which re-serialized them
  again. Same ceiling.

This change moves the finished MP4 across the renderer↔main boundary
via a temp file instead of an ArrayBuffer:

- New electron/ipc/export/exportStream.ts manages streaming temp files
  via fh.write(buf, 0, len, position) so out-of-order writes (moov box
  rewrites, etc.) stay safe. Each session lives in a 0700 mkdtemp()
  directory opened with O_CREAT | O_EXCL so a hostile local user on a
  shared tempdir cannot pre-plant a symlink at the predicted path.
- New renderer-facing IPCs: export-stream-open/write/close,
  finalize-exported-video (renames temp to final path, copy+unlink
  fallback on EXDEV/EPERM/ENOTEMPTY with console.warn on leaked bytes),
  mux-exported-video-audio-from-path (FFmpeg audio fallback that takes
  a path instead of an ArrayBuffer), and discard-exported-temp. Every
  handler validates the caller-supplied path against an owned-export-
  paths registry before touching disk, so a compromised renderer cannot
  route arbitrary filesystem paths into main-process deletes/moves.
- The muxer now picks mediabunny's StreamTarget automatically when the
  Electron bridge is available (BufferTarget stays for tests and any
  non-Electron callers). finalize() returns { mode, tempFilePath,
  bytesWritten } or { mode, blob } so the exporter can branch.
- Exporters forward tempFilePath through ExportResult. Lightning's
  finish returns the ffmpeg temp path directly; the FFmpeg audio
  fallback forks on the muxer result type. modernVideoExporter's
  Lightning success branch now accepts tempFilePath (previously it
  checked blob only, which regressed every native export).
- VideoEditor.tsx dispatches on tempFilePath: finalize via the new IPC,
  keep the temp in place when the save dialog is canceled so "Save
  Again" still works without re-rendering, keep the pending-save entry
  alive on non-canceled save failures, and discard the temp on unmount
  or explicit clear. GIF and smoke-test code paths still use the
  legacy Blob path unchanged.
- app.on('before-quit') also reaps any open streaming sessions via
  cleanupAllExportStreams().

Chunk size is 16 MiB — well under Electron/Mojo IPC message limits
while keeping total writes low (~160 for a 2.5 GB export).

Tested locally: exported a 35:13 source (~2.7 GiB H.264 input) at
Original 1920×1080 + Balanced. Previously failed on finalize with a
RangeError; with this patch the Legacy pipeline produced a valid 3.7
GiB MP4 whose ffmpeg -i duration/streams match the source.

Addresses #194.
2026-04-24 16:02:37 +08:00
webadderall 3283ee9213 Fix companion audio sync for trimmed and long exports 2026-04-24 12:04:21 +10:00
webadderall f056a22afc Fix embedded audio fallback handling and audio diagnostics (#309)
* Fix embedded audio fallback handling and audio diagnostics

* Add recording fallback diagnostics toasts

* Fix Windows audio fallback cleanup and path matching

* Format rebased recording fallback changes

* Fix embedded audio preview and export fallback handling
2026-04-24 11:30:10 +10:00
Uri 782324f9af fix(linux): allow dragging HUD overlay on Wayland via native OS drag
BrowserWindow.setBounds() with x/y is silently ignored on Wayland (the
compositor owns window placement), so the IPC-driven HUD drag never
moved the window \u2014 it stayed put even though pointer events fired and
the cursor changed to grabbing.

Mark the drag handle as -webkit-app-region: drag on Linux (only in the
IPC/overlay mode; webcam-preview mode still uses the in-window CSS
transform) so the OS performs a real xdg_toplevel.move. Mirror the
resulting bounds into hudUserPosition via the window 'moved' event so
commit 224a480's in-place resize behavior keeps working on Linux.
2026-04-23 14:52:40 +03:00
wiiiii123 82e7a698f6 fix(launch): disable floating webcam preview without passthrough 2026-04-23 10:52:41 +07:00
webadderall eaa67fce80 Merge pull request #302 from meiiie/fix/linux-wayland-gpu-switches
fix(linux): avoid forcing EGL on Wayland
2026-04-23 12:37:18 +10:00
wiiiii123 76954785c6 fix(linux): ignore invalid ozone overrides 2026-04-22 17:46:20 +07:00
webadderall e6f5243e11 Merge pull request #314 from soufian3hm/fix/windows-recording-validation
Fix invalid Windows recording finalization
2026-04-22 17:19:56 +10:00
webadderall 75700be9d5 Merge pull request #313 from meiiie/fix/fullscreen-countdown-recovery
fix(recording): recover from fullscreen countdown failures
2026-04-22 17:19:11 +10:00
webadderall 992ccd5e35 Merge pull request #310 from meiiie/fix/native-audio-lead
fix(recording): keep longer audio tracks anchored
2026-04-22 17:18:51 +10:00
webadderall fea1f99463 Merge pull request #308 from meiiie/fix/local-media-url-approval
fix(media): approve loopback video paths when minting URLs
2026-04-22 17:18:33 +10:00
soufian3hm 87ae990b22 Fix invalid Windows recording finalization 2026-04-21 17:38:37 +01:00
wiiiii123 4207664c4a fix(recording): recover from fullscreen countdown failures 2026-04-21 20:46:37 +07:00
wiiiii123 dc6a88786b fix(recording): keep longer audio tracks anchored 2026-04-21 19:53:10 +07:00
wiiiii123 2a566a16ca fix(media): restrict loopback approvals to supported files 2026-04-21 19:15:02 +07:00
wiiiii123 326f56840e fix(media): approve loopback video paths when minting URLs 2026-04-21 19:00:29 +07:00
wiiiii123 8b5f972349 test(export): cover slowdown filtergraph inputs 2026-04-21 18:09:23 +07:00
wiiiii123 2c44f0f551 test(export): tighten native filtergraph assertions 2026-04-21 18:09:23 +07:00
wiiiii123 ff5b644578 fix(export): harden edited-track filter validation 2026-04-21 18:09:23 +07:00
wiiiii123 ff3dac70c0 fix(export): validate edited-track fast-path inputs 2026-04-21 18:09:23 +07:00
wiiiii123 c8431c1f26 fix(export): fast-path simple edited audio tracks 2026-04-21 18:09:23 +07:00
webadderall 709b86bb90 Merge pull request #284 from meiiie/research/export-pipeline-profiling
chore(export): expand finalization profiling
2026-04-21 18:26:03 +10:00