Bug
Recordings that run longer than approximately 10 minutes never appear in the editor after stopping. The app shows the recording stopped successfully but no file is accessible.
Root Cause
The entire recording is buffered in the renderer process as a Blob[] array throughout the session. On stop, three additional in-memory copies are made:
fixWebmDuration(screenBlob, duration) — duplicates the full blob to patch the WebM duration header
.arrayBuffer() — converts the fixed blob to an ArrayBuffer
Buffer.from(payload.screen.videoData) in the main process — fourth copy before fs.writeFile
For an 18-minute 1080p screencast this results in 400–600 MB being duplicated 3–4× in the Electron renderer. The process exceeds its memory limit and crashes silently — no file is written and no error is shown to the user.
Steps to Reproduce
- Start a screen recording at 1080p
- Record for more than ~10 minutes
- Stop the recording
- The editor never opens / no recording file is saved
Expected Behavior
Recordings of any length should save successfully.
Fix
Stream each ondataavailable chunk (every 1 second) directly to disk via IPC as it arrives, so the renderer never holds more than a single 1-second chunk in memory at a time. A PR with a fix is attached.
Bug
Recordings that run longer than approximately 10 minutes never appear in the editor after stopping. The app shows the recording stopped successfully but no file is accessible.
Root Cause
The entire recording is buffered in the renderer process as a
Blob[]array throughout the session. On stop, three additional in-memory copies are made:fixWebmDuration(screenBlob, duration)— duplicates the full blob to patch the WebM duration header.arrayBuffer()— converts the fixed blob to an ArrayBufferBuffer.from(payload.screen.videoData)in the main process — fourth copy beforefs.writeFileFor an 18-minute 1080p screencast this results in 400–600 MB being duplicated 3–4× in the Electron renderer. The process exceeds its memory limit and crashes silently — no file is written and no error is shown to the user.
Steps to Reproduce
Expected Behavior
Recordings of any length should save successfully.
Fix
Stream each
ondataavailablechunk (every 1 second) directly to disk via IPC as it arrives, so the renderer never holds more than a single 1-second chunk in memory at a time. A PR with a fix is attached.