Commit Graph
344 Commits
Author SHA1 Message Date
wiiiii123 8ce5bf625d fix(export): harden post-merge file handling 2026-05-08 13:07:25 +07:00
Phạm Thị Minh Hồng 07c62de778 Merge pull request #410 from meiiie/perf/native-chunked-export-fastpath
Adds guarded native Windows D3D11 and NVIDIA CUDA export compositors for supported Lightning/static-layout MP4 exports, while keeping WebCodecs/WebGL fallback for unsupported feature combinations.

Includes release hardening for native output validation, safe file replacement, CJS bundle smoke checks, helper manifest verification, recording diagnostics, and the Windows browser mic path that fixed the reported crackle/noise issue in beta testing.

Validation before merge:
- `npx tsc --noEmit`
- focused export/audio/telemetry/unit coverage (`92` + `27` tests across the latest hardening passes)
- scoped Biome checks on touched release-gate files
- `npx vite build --config vite.config.ts`
- `node scripts/smoke-electron-main-cjs.mjs`
- `npm run smoke:packaged-binaries`
- `git diff --check`

Known release-safe gates still fall back intentionally: video backgrounds, annotation/caption/frame overlays, missing helper-readable webcam sources, unsupported audio modes, odd output dimensions, and any native helper output that fails validation.
2026-05-08 12:59:51 +07:00
wiiiii123 490a5eb305 fix(export): tighten native cursor and save cleanup 2026-05-08 12:41:00 +07:00
wiiiii123 ae40a13e85 fix(export): harden native release gates 2026-05-08 12:24:04 +07:00
webadderall a9cb62270a Only show update UI for real available updates 2026-05-08 14:39:37 +10:00
wiiiii123 93e1312978 merge main into beta/pr410-native-gpu-export-test
# Conflicts:
#	electron/ipc/project/manager.ts
#	electron/ipc/register/export.ts
#	src/lib/exporter/modernVideoExporter.ts
2026-05-08 10:44:13 +07:00
webadderall 0990ed7a09 Clarify local file read and media allowlist intent 2026-05-08 12:30:26 +10:00
webadderall d03054f723 Speed up Lightning export and relax local media reads 2026-05-08 11:32:04 +10:00
webadderall a95974c3c5 fix(hud): restore hide and linux fallback 2026-05-08 10:31:33 +10:00
webadderall 9d8979692c Merge pull request #419 from crbender/fix/local-read-allowlist-and-postinstall-fallback
fix: close local read allowlist bypass and make whisper-runtime postinstall non-fatal
2026-05-08 09:17:25 +10:00
wiiiii123 85bf77e5a4 fix(export): support native cropped layouts 2026-05-08 03:20:28 +07:00
wiiiii123 178fc2fc1e fix(export): enable native speed timelines 2026-05-08 02:28:35 +07:00
wiiiii123 3d6668fd60 fix(recording): account for mic pause gaps 2026-05-08 01:35:17 +07:00
wiiiii123 d5240170ce fix(export): gate native speed timelines 2026-05-08 00:39:14 +07:00
wiiiii123 678ece2f4a fix(export): harden native beta pipeline 2026-05-07 22:37:27 +07:00
Alan Trebugeais aa241d96a6 fix minimize after 2 clicks in the void, Recordly should always be on top 2026-05-07 13:35:02 +02:00
Alan Trebugeais 09743ca4ed chore: reset package-lock.json and electron/native to main 2026-05-07 10:18:44 +02:00
Alan Trebugeais fbb6d2e649 del: removed compatibility layers which were no ops 2026-05-07 00:56:10 +02:00
wiiiii123 45f05e78c4 fix(recording): default windows mic to browser processing 2026-05-07 04:51:30 +07: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
wiiiii123 5bb36ca5fa fix(recording): add windows mic diagnostics fallback 2026-05-07 04:00:46 +07:00
wiiiii123 b962d8a1b2 fix(recording): reduce native mic noise amplification 2026-05-07 03:29:58 +07: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
wiiiii123 98267e5f23 fix(recording): prefer staged windows capture helper 2026-05-06 23:46:13 +07:00
wiiiii123 b2e2410b7c fix(recording): compact silent mic discontinuities 2026-05-06 23:11:16 +07:00
wiiiii123 3a661db717 fix(export): support native background blur 2026-05-06 20:53:44 +07:00
wiiiii123 d15561723b fix(recording): compact short mic discontinuities 2026-05-06 20:16:32 +07:00
wiiiii123 3c3b8bb8bb fix(recording): declip native Windows mic peaks 2026-05-06 19:10:22 +07:00
wiiiii123 7a36240ccf fix(recording): soften native mic gap boundaries 2026-05-06 18:50:06 +07:00
wiiiii123 32708ce122 fix(export): allow native cursor overlay routing 2026-05-06 07:04:01 +07:00
wiiiii123 97abaa4f4e fix(export): preserve pitch for fallback speed audio 2026-05-06 06:43:40 +07:00
wiiiii123 3ab66c9057 feat(export): prepare native GPU beta candidate
Add validated native CUDA/D3D11 timeline retime, pause-aware capture timing, webcam source-time sampling, edited-track audio duration padding, packaged helper updates, and focused tests for PR #410 tester branch.
2026-05-06 01:50:12 +07:00
wiiiii123 762a5ba895 Merge remote-tracking branch 'origin/main' into perf/native-chunked-export-fastpath
# Conflicts:
#	electron/ipc/register/recording.ts
#	src/components/video-editor/VideoEditor.tsx
#	src/components/video-editor/VideoPlayback.tsx
#	src/hooks/useScreenRecorder.ts
#	src/lib/exporter/modernFrameRenderer.ts
#	src/lib/exporter/modernVideoExporter.ts
2026-05-05 16:59:32 +07: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
Recordly Reviewer 2d4d96bc4a fix: address PR review feedback - canonicalize via realpath and gate whisper soft-fail
isAllowedLocalReadPath now resolves the candidate via fs.realpathSync and requires both the lexical and canonical paths to satisfy the policy, so a symlink placed under an allowed prefix that points outside the allowlist is rejected. The redundant 'either resolved or realResolved is allowed' check in read-local-file and generate-wallpaper-thumbnail is removed since the function canonicalizes internally. Adds a regression test that creates such a symlink (skipping when Windows refuses to create it without Developer Mode).

build-whisper-runtime now only soft-fails when invoked from postinstall, in CI, or with WHISPER_RUNTIME_ALLOW_MISSING=1. Direct 'npm run build*' invocations fail loudly when CMake is missing and no bundled runtime is staged so we don't ship release builds with broken auto-captioning.
2026-05-04 14:31:09 -04:00
Recordly Reviewer c767d3a28b fix: tighten local read allowlist and gracefully skip whisper-runtime build without CMake
isAllowedLocalReadPath previously returned true for any existing path because of an existsSync fast-path, which made the read-local-file IPC handler and the local media URL policy effectively allow reading arbitrary files on disk. Drop the existsSync bypass so only paths under app-managed directories or paths that have been explicitly approved (via dialogs, exports, recording sessions, etc.) are accepted. Adjust the local media path policy tests to cover the new behaviour.

Also make build-whisper-runtime fall back to bundled artifacts when CMake is missing (mirroring build-windows-capture) so npm ci does not fail on machines without a C++ toolchain.
2026-05-04 14:21:49 -04: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
wiiiii123 3bfb07a3d7 Merge main into native GPU export PR 2026-05-04 11:42:27 +07:00
wiiiii123 b1433f9836 Add NVIDIA CUDA export compositor 2026-05-04 09:59:41 +07:00
wiiiii123 05327a12ce Add native GPU static layout export path 2026-05-03 22:43:23 +07: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