ov-selkies/skills/wl-record-pixelflux/SKILL.md
Desktop video recorder via selkies WebSocket capture bridge for selkies-desktop. Use when working with the wl-record-pixelflux layer.
npx skillsauth add overthinkos/overthink-plugins wl-record-pixelfluxInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Install files | layer.yml, tasks:, pixelflux-record (Python script) |
| Depends | selkies (capture bridge + WebSocket stream), ffmpeg (MP4 muxing) |
Provides pixelflux-record for recording desktop video on selkies-desktop. Connects to the capture bridge at /tmp/ov-capture.sock which relays the same H.264 frames that the browser sees via the selkies WebSocket stream. No direct ScreenCapture API access -- taps into the existing selkies streaming pipeline to avoid creating a second capture instance (the Rust backend only supports one active capture at a time).
Why not wf-recorder? labwc running nested inside pixelflux can't deliver wlr-screencopy frames. The capture bridge bypasses this by tapping into the selkies WebSocket stream directly.
/tmp/ov-capture.sock (started by selkies-capture-server)STREAM\n to request continuous H.264 frame data4-byte length + raw H.264 data pairs-use_wallclock_as_timestamps 1| Property | Value |
|----------|-------|
| Depends | selkies (capture bridge + stream), ffmpeg (muxing) |
| Install | ~/.local/bin/pixelflux-record (Python script) |
| Capture | Via /tmp/ov-capture.sock (selkies WebSocket bridge) |
| Output | MP4 (H.264 video + optional AAC audio) |
| Audio | PulseAudio monitor source via ffmpeg |
# Direct usage
pixelflux-record output.mp4 # 30fps, video only
pixelflux-record output.mp4 --fps 60 # 60fps
pixelflux-record output.mp4 --audio # video + audio
pixelflux-record output.mp4 --fps 60 --audio # 60fps + audio
# Stop with Ctrl-C
ov eval record# Start desktop video recording (auto-detects pixelflux-record)
ov eval record start selkies-desktop -n demo --mode desktop --audio
# Run commands (visible in recording)
ov eval record cmd selkies-desktop "echo hello" -n demo
# Interact with desktop
ov eval cdp open selkies-desktop "https://example.com"
ov eval wl click selkies-desktop 640 360
# Stop and copy to host
ov eval record stop selkies-desktop -n demo -o demo.mp4
selkies process (single ScreenCapture singleton — process-wide)
├── ScreenCapture (captures full composited desktop)
├── WebSocket server :8081 (broadcasts H.264 frames)
└── Capture bridge thread (internal WebSocket client)
└── Unix socket /tmp/ov-capture.sock
└── pixelflux-record connects here (STREAM mode)
└── pipes H.264 frames to ffmpeg
Singleton note: The ScreenCapture instance is process-wide and lives inside the selkies Python process. pixelflux-record never spawns its own capture; it only attaches to the existing STREAM socket. This is architecturally important because pixelflux's WaylandBackend construction is expensive (EGL context + dmabuf allocators + GPU texture pools) and was the subject of a memory leak fix in commits 6be85eb (singleton enforcement) and 7977b91 (per-frame cleanup_texture_cache()). If you ever see two selkies-capture processes inside the container, that's a regression — see /ov-selkies:selkies (Pixelflux Memory Management) for the diagnostic recipe.
selkies-desktop metalayer/ov-selkies:selkies-desktop (via selkies-desktop metalayer)/ov-selkies:selkies-desktop-nvidia (via selkies-desktop metalayer)/ov-advanced:record -- ov eval record start --mode desktop auto-detects pixelflux-record/ov-core:update -- Per-instance update pattern used to roll out the per-frame cleanup_texture_cache() fix across live instances/ov-selkies:wl-screenshot-pixelflux -- Screenshot companion (same capture bridge, same singleton)/ov-selkies:wf-recorder -- Alternative for sway-desktop (wlr-screencopy)/ov-selkies:selkies -- Parent layer (provides capture bridge, WebSocket stream, and the ScreenCapture singleton — see Pixelflux Memory Management)/ov-selkies:selkies-desktop -- Metalayer that composes this recorder into the full browser-accessible desktop/ov-selkies:ffmpeg -- Required dependency (MP4 muxing)Use when the user asks about:
wl-record-pixelflux layer/ov-build:layer — layer authoring reference (layer.yml schema, task verbs, service declarations)/ov-build:eval — declarative testing (eval: block, ov eval image, ov eval live)development
Claude Code multi-agent support in Overthink — sub-agents, dynamic workflows, and agent teams, and how each drives the existing `ov eval` disposable beds to test and verify. MUST be invoked before authoring or invoking an ov sub-agent / dynamic workflow / agent team, wiring agent-lifecycle hooks, or asking "which primitive should drive the R10 beds?".
tools
Mounts a virtiofs share tagged `workspace` at /workspace inside a VM guest via a systemd .mount unit. Use when a kind:vm entity shares a host directory into the guest and you need it auto-mounted (and re-mounted at every boot).
development
MUST be invoked before any work involving: the `kind: android` schema kind, a `target: android` deploy, the `apk:` layer package format (installing Android apps declaratively), AndroidDeployTarget, an in-pod emulator OR a remote/physical adb-endpoint device, or nested `pod → android` deployment. The first-class Android device + app surface that sits above `ov eval adb`/`appium`.
tools
Use when committing, branching, pushing, merging, tagging, creating PRs, or approving/merging PRs with gh — the feat/-branch, R10-gated, never-force-push landing workflow across the main repo + the plugins submodule + image/<distro> submodules. Covers sync-to-upstream, branch/worktree pruning, the fork+PR path for contributors without write access, and cross-repo @github landing order.