Skip to content

Releases

v0.1.0 - experimental test build

Choose a tag to compare

@SnakeTheDev SnakeTheDev released this 19 Oct 05:18

Test build - experimental, never run on hardware

Every line of code in this release was written by an AI coding agent
(OpenCode, model Space Bunny Free). There is no human-written code in it.

It has never been run on a Steam Deck. No gadget has been created, no frame
captured, no host enumerated. 61 unit tests pass.

What it does

Turns the Deck into a USB camera, so another machine sees the Deck's screen over
one cable. No capture hardware, and nothing installed on the host.

Deck screen ──DRM──▶ ffmpeg ──MJPEG──▶ /dev/videoN ──USB──▶ host

The same trick the controller emulation uses, one USB class up: a configfs
gadget with a uvc.0 function instead of hid.0. A host with a capture-card app
— Meta Quest's HDMI Link, for one — will then show what this streams.

MJPEG only, and that is what makes it possible at all: YUYV at 1080p is about
186 MB/s and does not fit USB 2.0, while MJPEG is roughly 4 MB/s.

Three unknowns, in the order you will hit them

  1. Game Mode will not work. kmsreadout needs the DRM master and gamescope
    owns it. Exit to desktop mode first.
  2. The host may refuse a bare UVC webcam. Meta's docs say "UVC and UAC
    compatible capture card", which is not quite the same thing. This gadget has
    no EDID and no HDMI identity.
  3. The kernel may not ship the UVC gadget module. First thing to check:
    lsmod | grep uvc. If g_webcam is missing, nothing else matters.

If it does enumerate

The plugin reports the negotiated link speed, because that decides whether
better compression could ever be viable. High (USB 2.0) is expected;
SuperSpeed would be a surprise worth reporting.

If you report a problem

The plugin log at ~/homebrew/logs/decky-capture/ is the most useful thing,
along with lsmod | grep -E 'uvc|libcomposite' and cat /sys/class/udc/*/speed.