fstat13 876f8ef82b docs: redesign the guide site, fix inaccurate docs
- new modern layout for index.html / index.it.html with shared
  style.css + main.js: app-window mock, pipeline diagram, searchable
  troubleshooting, copy buttons on build commands, live star count
- stream port is 5599 (not 9xxx); real log line is
  "ERRORE caricamento dll"; button label is STOP
- troubleshooting covers more real log lines (UAC refused, pldmgr
  missing, elfldr unreachable, stream dropped)
- links to .md guides point to GitHub, download goes to /releases
  (v0.1 is a pre-release, /latest would miss it)
2026-10-15 15:28:12 +02:00

PSCapture

PSCapture

Turn a jailbroken PlayStation 5 into a real capture card for your PC.
The console screen is streamed over your LAN and shows up in Discord, OBS or ffmpeg
as a virtual camera called PS5 Capture.

No capture card. No Remote Play. No cloud. Just your console and your network.
by fstat13

📖 How to use it — step-by-step guide  ·  🇮🇹 Guida passo-passo in italiano  ·  🔧 Build from source  ·  🇮🇹 Build dai sorgenti

🌐 Illustrated guide: English  ·  Italiano

Release Stars License Platform


✨ What you get

  • One executable — PSCapture.exe carries the console payload inside itself: it installs the virtual capture driver, pushes the payload to the PS5, registers it in the autoloader and starts the stream. One window, one button.
  • A real camera device — a DirectShow source filter named PS5 Capture: pick it in Discord calls, record it in OBS at 1920x1080, open it from ffmpeg.
  • Low latency — frames are read straight from the console's display engine (NV12 over TCP); nothing is re-encoded on the console.
  • Live tuning — chroma gain and horizontal shift knobs, saved in pscapture.ini, applied without restarts.

🚀 Quick start

  1. Jailbreak your PS5 — you need the standard setup: a payload loader on TCP 9021 (elfldr-style), anonymous FTP on TCP 2121, and optionally pldmgr so the payload starts on every boot.
  2. Double-click PSCapture.exe (one file — the console payload and the Windows driver travel inside it). Accept the UAC prompt. If your PS5 isn't at 192.168.0.36, type its IP in the PS5 IP field and press Apply.
  3. Watch the log pane — the app installs the capture driver (first run only), sends the payload to the console and connects by itself. The status pill turns green: STREAMING. The console shows the system toast PSCapture is streaming on:PORT.
  4. In Discord (Settings → Voice & Video → Camera) or OBS pick the camera PS5 Capture.

Stuck on “IN ATTESA DELLA PS5”? Console off, not jailbroken yet, or wrong IP — the app retries by itself every 2 seconds.

📖 Step-by-step with every log line explained: docs/GUIDE.md — or the illustrated HTML guide. 🔧 What the app does under the hood when you press Start: docs/INSTALLER.md.

📦 Repository layout

payload/    PS5 side: display-engine reader + NV12 streamer (pscapture.elf)
pc/         PSCapture.exe — GUI + installer + payload deployer + feeder
pc/ps5cam.c the virtual capture-card driver (DirectShow source filter)
pc/shm.h    shared-memory contract between feeder and driver
docs/       guides: HTML, step-by-step, build, installer, RE, log

🔧 Build

Full walk-through (toolchain install, verification, gotchas): docs/BUILD.md. The short version, in the mandatory order (the .res embeds the driver and the payload as they are on disk):

Console payload → payload/pscapture.elf (needs Docker + the PS5 payload SDK image; any tag works, here ps5sdk:18):

docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 make

PC side → pscapture.exe + pscapture.dll (needs MinGW-w64 with gcc + windres):

cd pc
cp ../payload/pscapture.elf .   # gets embedded as-is
# 1) the capture-card driver (-static is mandatory, see BUILD.md)
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
    -lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
# 2) resources = icon + payload + driver
windres pscapture.rc -O coff -o pscapture.res
# 3) the app (one self-contained executable)
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
    -lws2_32 -lshell32 -ladvapi32 -luxtheme

Rebuild rule: DLL → windres → exe, every time — rebuilding only the exe ships the old driver inside it.

❓ FAQ

Does it work on firmwares older than 13.60? The PC side works everywhere. The console payload was built and tuned on 13.60; other firmwares may need a small porting pass (re-finding the same display-engine anchors). Open an issue with your firmware version.

720p in Discord but 1080p in OBS? That's Discord's voice engine — it requests 1280x720 from every camera (capture cards included). Use OBS for full quality, or Discord screen-share (up to 1080p60 with Nitro).

Remote Play involved? Never. The payload reads the display engine on the console itself.

🔬 Reverse engineering

The whole story of how the console's display engine was mapped — the scan-out ring, the pan, the chroma plane, the kernel-side notes and the delivery format for kernel payloads — lives in docs/REVERSE_ENGINEERING.md. The bench used to get there is in tools/: the library dumper payload, the disassembly hunters, the deterministic frame renderers.

No Sony binaries are distributed with this project: tools/dumplib/ extracts what you need from your own console to reproduce every finding.

📄 License

Source-available, copyright © 2026 fstat13. You may read and study the code and use the official binaries for personal projects; redistribution, reuse in other projects and commercial use are not allowed without permission. See LICENSE for the full terms.

Languages
C 90.8%
Python 8.8%
Makefile 0.4%