ov-layers/skills/wl-screenshot-pixelflux/SKILL.md
Screenshot via selkies WebSocket capture bridge for selkies-desktop. Use when working with the wl-screenshot-pixelflux layer.
npx skillsauth add overthinkos/overthink-plugins wl-screenshot-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.
Provides pixelflux-screenshot for capturing screenshots on selkies-desktop. Connects to the in-process capture bridge at /tmp/ov-capture.sock (started by selkies-capture-server inside the selkies process). The capture bridge taps into the selkies WebSocket stream and decodes H.264 frames to PNG via ffmpeg.
Why not grim? labwc running nested inside pixelflux can't deliver wlr-screencopy frames. The capture bridge bypasses this by tapping into the selkies WebSocket stream which has direct access to the composited desktop.
depends:
- selkies
No RPM packages — uses the capture bridge provided by the selkies layer.
/tmp/ov-capture.sockSCREENSHOT\n4-byte length + PNG data response (or 0 + reason string on failure)The capture bridge (running inside the selkies process) handles frame collection, H.264 NAL filtering (drops Opus audio), and ffmpeg decode. On failure, the bridge sends a descriptive reason (e.g., "not connected", "ffmpeg exit N: ...") instead of bare exit status 1.
pixelflux-screenshot --status
# Returns: {"connected": true, "mode": "controller", "frames": 90, "seq": 1234, "active_streams": 0, "last_error": ""}
Fields: connected (WebSocket up), mode (controller/viewer/reconnecting), frames (buffered H.264), seq (total received), active_streams (active recordings), last_error (last ffmpeg error).
| Property | Value |
|----------|-------|
| Depends | selkies (capture bridge in selkies process) |
| Install | ~/.local/bin/pixelflux-screenshot (Python script) |
| Capture | Via /tmp/ov-capture.sock (selkies WebSocket bridge) |
Used by ov test wl screenshot — auto-detected when pixelflux-screenshot is available (preferred over grim).
ov test wl screenshot <image> [output.png]
selkies process (single ScreenCapture singleton)
├── WebSocket :8081 (H.264 frame broadcast)
└── Capture bridge thread → /tmp/ov-capture.sock
└── SCREENSHOT request → ffmpeg H.264→PNG decode → PNG response
Singleton guarantee: The ScreenCapture instance inside selkies is process-wide. pixelflux-screenshot taps into the same capture path that the browser client uses and that pixelflux-record (/ov-layers:wl-record-pixelflux) uses — there is never a second capture process spawned. This matters because pixelflux's WaylandBackend is expensive to construct (creates EGL context, dmabuf allocators, GPU texture pools), so spawning a new one per screenshot would leak GBM buffers on every call. The singleton was re-affirmed in commit 6be85eb (selkies ScreenCapture singleton to stop pixelflux WaylandBackend leak) and paired with the per-frame cleanup_texture_cache() fix in commit 7977b91. See /ov-layers:selkies (Pixelflux Memory Management) for the full leak diagnosis and fix.
selkies-desktop metalayer/ov-images:selkies-desktop (via selkies-desktop metalayer)/ov-images:selkies-desktop-nvidia (via selkies-desktop metalayer)/ov:wl — ov test wl screenshot auto-detects pixelflux-screenshot/ov-layers:wl-record-pixelflux — Recording companion (same capture bridge + same singleton)/ov-layers:wl-screenshot-grim — Alternative for sway-desktop (wlr-screencopy)/ov-layers:selkies — Parent layer providing the ScreenCapture singleton and capture bridge/ov-layers:selkies-desktop — Metalayer that composes this screenshot path into the selkies-desktop image/ov:record — Uses /ov-layers:wl-record-pixelflux via the same singleton/ov:layer — layer authoring reference (layer.yml schema, task verbs, service declarations)/ov:test — declarative testing (tests: block, ov image test, ov test)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.