Skip to content

Screen Capture and Recording

Scrimas edited this page Aug 18, 2026 · 2 revisions

Screen Capture & Recording

Capturing your screen in ii-p3drovfx is one continuous pipeline: the same Region Selector that takes screenshots also starts recordings, the shell tracks the recording live (bar indicator, Dynamic Island notch, pause/resume), and the finished file lands straight in the Video Editor — or LosslessCut, if that's more your speed.

This page covers the recording half. Screenshots and annotation live on the Screenshot Editor page.

Record something right now

Keys Action
Ctrl + Alt + R Record the full screen (no sound)
Super + Shift + Alt + R Record the full screen with system audio
Super + Shift + R Record a region — select it like a screenshot

Press the same keys (or the Bar's recording indicator, or the Dashboard's Screen Record toggle) to stop. While recording, the Bar shows a red indicator with pause/resume at hand, and when you stop, a "Recording finished — edit it?" prompt offers the Video Editor for a quick trim.

Recordings land in your configured video path (Settings → Screenshots & Recording), where you can also switch the backend, codec and frame rate — read on for that.


Starting a recording

  • From the Region Selector — the selector's actions include Record Region and Record Region with Sound: select an area exactly like a screenshot, and the geometry is handed to the recorder. If a recording is already running, invoking the selector's record action triggers the stop workflow instead.
  • Full-monitor recording is available alongside region capture.
  • From the shell — the recording indicator widget and utility buttons on the Bar, the Dashboard's Screen Record quick toggle, and a desktop Screen Record pill widget all start/stop recordings.

While recording, the shell shows an always-expressive recording indicator in the Bar, an optional Dynamic Island recording notch, and exposes pause/resume controls. A separate screen-sharing indicator (backed by the PipeWire-based Privacy service) shows when an app is capturing your screen — recording and sharing are tracked independently.


Two backends

Pick your recorder in Settings → Screenshots & Recording:

wf-recorder (default)

The shell manages wf-recorder directly. Configurable: save path, GPU acceleration, codec, bitrate, and target frame rate.

Hardware encoding — with the codec on Auto, the recording script inspects the FFmpeg encoders actually available and picks accordingly:

Vendor Encoders
NVIDIA h264_nvenc, hevc_nvenc
Intel / AMD (VA-API) h264_vaapi, hevc_vaapi
AMD (AMF) h264_amf, hevc_amf
CPU fallback libx264, libx265

Disable GPU acceleration and it simply falls back to software encoding.

Region + audio — the selected geometry is passed straight to wf-recorder. For Record Region with Sound, the script finds a PulseAudio/PipeWire monitor source (deriving one from the default sink if needed) so system audio lands in the file, in sync.

Pause — here's a fun implementation detail: wf-recorder has no pause feature at all. The shell pauses it anyway, by sending SIGSTOP to freeze the process and SIGCONT to resume — the output file stays alive, and the paused span shows up as a still frame in the video.

OBS Studio

Prefer OBS? The shell drives it programmatically over the OBS WebSocket API (default localhost:4455; override with OBS_API_HOST, OBS_API_PORT, and OBS_API_PASSWORD — so authentication never gets hardcoded into QML). The integration can launch OBS on demand, wait for its WebSocket server, start and stop recording, detect failures, close OBS afterward, retrieve the file, and forward it to the editor. Both native and Flatpak OBS installations work.

Two OBS-specific behaviors worth knowing:

  • Wayland portals — starting an OBS capture may pop the desktop portal's source-selection dialog. The script doesn't assume failure just because recording isn't active yet; it waits until OBS actually reports a recording in progress.
  • Region recording — OBS captures the screen; the selected region is cropped afterward with FFmpeg before the file reaches the editor.

Pause/resume is forwarded through the OBS control scripts.


Live state

The recording script maintains shell-visible state (active, loading, paused, elapsed time) through the Quickshell state system — that's what keeps the Bar indicator, the Dynamic Island notch and the quick toggles in sync with the real recorder, whichever backend is running.

When the recording stops

The recorder sends the file path back into the shell, and — with the edit prompt enabled — the compact "Recording finished — edit it?" popup appears. From there:

  • Edit Video opens the built-in Video Editor with the file loaded, or
  • with Open in LosslessCut enabled, the prompt hands the recording to LosslessCut instead — great for instant lossless trims.

Recordings deliberately don't trigger the screenshot shutter sound.


Configuration

Settings → Screenshots & Recording collects everything: recorder backend (wf-recorder / OBS), video record path, GPU acceleration, codec, bitrate, frame rate, recording notifications, the edit prompt toggle and the LosslessCut option — plus all the screenshot-side options described on the Screenshot Editor page. Persistent options live under Config.options.screenRecord.

Under the hood

Piece Role
scripts/videos/record.sh The conductor: backend selection, region + audio capture, encoder selection, pause/resume, state file updates, OBS lifecycle, post-recording editor launch
scripts/videos/obs_control.py / obs_pause.py Thin OBS WebSocket controllers (obsws_python): start, stop, toggle, status, pause
services/Privacy.qml PipeWire-based detection of active screen sharing and microphone use
scripts/screenShare/ Screen-share state helper for the Bar indicator
modules/ii/videoEditor/VideoEditorPopup*.qml The post-recording prompt

Dependencies: wf-recorder or OBS Studio (+ obsws-python), FFmpeg, jq, PipeWire/PulseAudio tools, notify-send. Only the backend you actually use needs to be installed.


Related pages

← Back to Home

Clone this wiki locally