Read the live framebuffer into a 2D canvas. Async to match the underlying post-processing readback (sync today, async under WebGPU).
Build a recording filename for a given extension.
Build the bundled encode_video.sh script. The panel supplies the
recording mode, output naming and (for EXR) the viewer's grade, so
the driver only has to say how many frames of what it wrote.
Trigger a browser download.
Compute the H.264/H.265/etc. bitrate for the canvas size.
Show a non-blocking toast notification.
Logger for warnings + errors (panel pre-bound to its module tag).
Image quality in [0, 1] for jpeg/webp (matches canvas.toBlob); ignored for png.
User-selected video codec.
Browser environment for showSaveFilePicker (so tests can stub).
AbortSignal for the offline-capture session. Drivers MAY check
signal.aborted in long-running setup/finalize work to
short-circuit cleanly when the panel is disposed mid-capture or
the user cancels. The panel also checks the signal between
frames so abort during an await propagates within ~1 frame.
Dependencies a driver needs from the panel. Mostly wrapped panel methods that the driver doesn't construct itself, plus the few recording options that affect per-mode behaviour.