Repository navigation
Releases
v0.1.0 - experimental test build
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
- Game Mode will not work.
kmsreadoutneeds the DRM master and gamescope
owns it. Exit to desktop mode first. - 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. - The kernel may not ship the UVC gadget module. First thing to check:
lsmod | grep uvc. Ifg_webcamis 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.