Reference
Media
Screenshots, recordings, and local media storage in OpenNOW
OpenNOW captures screenshots and recordings from the renderer video stream and stores them locally. Media is managed through the preload API and surfaced in the app UI. Native external rendering uses a separate surface, so renderer canvas/MediaRecorder capture behavior applies to the web/embedded video path.
Storage locations
| Type | Directory | Format |
|---|---|---|
| Screenshots | app.getPath("pictures")/OpenNOW/Screenshots/ | PNG, JPG, or WebP |
| Recordings | app.getPath("pictures")/OpenNOW/Recordings/ | MP4 or WebM |
| Thumbnails | app.getPath("userData")/media-thumbs/ | JPEG |
Screenshots
- Triggered by the screenshot shortcut (default
F11) or the stream overlay button. - In the web/embedded renderer path, the renderer captures the current video frame as a data URL and sends it to the main process.
- The main process writes the image to the screenshots directory with a timestamped filename.
- Limited to the newest 60 entries.
- Screenshots can be exported to a user-selected location via a save dialog.
Recordings
- Triggered by the recording shortcut (default
F12) or the stream overlay button. - In the web/embedded renderer path, the renderer uses
MediaRecorderto capture the stream. - Recording bitrate is configurable in Settings.
Autoleaves bitrate selection toMediaRecorder; custom values are rounded and clamped to 1–200 Mbps before being passed asvideoBitsPerSecond. - Chunks are streamed to the main process, which writes to a temp file.
- On finish, the file is renamed with duration and game title metadata.
- Limited to the newest 20 entries.
- Format depends on browser codec support — MP4 (preferred when available) or WebM.
Media listing
- Screenshots and recordings can be listed together via
listMediaByGame(), optionally filtered by game title. - Thumbnails are generated on demand: video thumbnails use a companion
-thumb.jpgfile when present, or fall back toffmpegextraction. - Media can be revealed in the system file manager or deleted from the app.
Capture flow
Renderer Main process
│ │
├─ saveScreenshot(dataUrl) ───────►│── write PNG to disk
│◄─── ScreenshotEntry ────────────┤
│ │
├─ beginRecording(mimeType) ──────►│── create temp file
├─ sendRecordingChunk(data) ──────►│── append to temp file
├─ finishRecording(duration) ─────►│── rename + save metadata
│◄─── RecordingEntry ─────────────┤Source files
opennow-stable/src/main/ipc/mediaHandlers.ts— screenshot, recording, and media gallery IPC handlersopennow-stable/src/main/media/screenshots.ts— screenshot persistence and listingopennow-stable/src/main/media/recordings.ts— recording temp/final file lifecycleopennow-stable/src/main/media/thumbnails.ts— thumbnail reads and regenerationopennow-stable/src/main/media/mediaFiles.ts— filename and data URL validation helpersopennow-stable/src/main/mediaPaths.ts— trusted OpenNOW media paths and playback URLsopennow-stable/src/preload/index.ts— media API bridgeopennow-stable/src/shared/gfn/—ScreenshotEntry,RecordingEntry,MediaListingResulttypesopennow-stable/src/renderer/src/components/StreamView.tsx— capture UI controls