mirror of
https://github.com/fstat13/PSCapture.git
synced 2026-10-17 14:00:36 +02:00
445 lines
31 KiB
HTML
445 lines
31 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" class="no-js">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>PSCapture — your PS5 screen as a capture card on PC</title>
|
||
<meta name="description" content="PSCapture turns a jailbroken PS5 into a capture card for your PC: the console screen streams over your LAN and shows up in Discord, OBS and ffmpeg as a camera called “PS5 Capture”.">
|
||
<meta name="theme-color" content="#07090d">
|
||
<link rel="icon" type="image/png" href="pscapture.png">
|
||
<link rel="alternate" hreflang="en" href="https://fstat13.github.io/PSCapture/">
|
||
<link rel="alternate" hreflang="it" href="https://fstat13.github.io/PSCapture/index.it.html">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="PSCapture — your PS5 screen, live on your PC">
|
||
<meta property="og:description" content="The PS5 screen shows up in Discord, OBS and ffmpeg as the camera “PS5 Capture”. No capture card, no Remote Play, no cloud.">
|
||
<meta property="og:image" content="https://fstat13.github.io/PSCapture/social-preview.png">
|
||
<meta property="og:image:width" content="1280">
|
||
<meta property="og:image:height" content="640">
|
||
<meta property="og:url" content="https://fstat13.github.io/PSCapture/">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
||
<link rel="stylesheet" href="style.css">
|
||
</head>
|
||
<body>
|
||
|
||
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
|
||
<symbol id="i-download" viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></symbol>
|
||
<symbol id="i-star" viewBox="0 0 24 24"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></symbol>
|
||
<symbol id="i-check" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></symbol>
|
||
<symbol id="i-video" viewBox="0 0 24 24"><path d="m22 8-6 4 6 4V8Z"/><rect x="2" y="6" width="14" height="12" rx="2"/></symbol>
|
||
<symbol id="i-zap" viewBox="0 0 24 24"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></symbol>
|
||
<symbol id="i-file" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></symbol>
|
||
<symbol id="i-refresh" viewBox="0 0 24 24"><polyline points="23 4 23 10 17 10"/><polyline points="1 20 1 14 7 14"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/></symbol>
|
||
<symbol id="i-sliders" viewBox="0 0 24 24"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
|
||
<symbol id="i-lock" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
|
||
<symbol id="i-console" viewBox="0 0 24 24"><rect x="2" y="6" width="20" height="12" rx="3"/><line x1="6" y1="12" x2="10" y2="12"/><line x1="8" y1="10" x2="8" y2="14"/><circle cx="16" cy="11" r=".6"/><circle cx="18" cy="13" r=".6"/></symbol>
|
||
<symbol id="i-monitor" viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
|
||
<symbol id="i-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></symbol>
|
||
<symbol id="i-alert" viewBox="0 0 24 24"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></symbol>
|
||
<symbol id="i-search" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
|
||
</svg>
|
||
|
||
<nav class="nav">
|
||
<div class="wrap">
|
||
<a class="logo" href="#top"><img src="pscapture.png" alt="">PSCapture</a>
|
||
<div class="nav-links">
|
||
<a href="#how">How it works</a>
|
||
<a href="#start">Setup</a>
|
||
<a href="#trouble">Troubleshooting</a>
|
||
<a href="#build">Build</a>
|
||
<a href="#faq">FAQ</a>
|
||
</div>
|
||
<div class="nav-right">
|
||
<a class="lang" href="index.it.html" hreflang="it">Italiano</a>
|
||
<a class="btn btn-ghost btn-sm" href="https://github.com/fstat13/PSCapture"><svg class="i"><use href="#i-star"/></svg>Star <span class="stars" data-stars hidden></span></a>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<header class="hero" id="top">
|
||
<div class="wrap hero-grid">
|
||
<div>
|
||
<span class="eyebrow"><span class="tagv">v0.1</span>Tested on PS5 firmware 13.60</span>
|
||
<h1>Your PS5 screen,<br><span class="grad">live on your PC.</span></h1>
|
||
<p class="lead">PSCapture turns a jailbroken PlayStation 5 into a capture card.
|
||
The console streams its own screen over your LAN, and Windows sees it as a
|
||
camera called <b>PS5 Capture</b>, ready for Discord, OBS and ffmpeg.</p>
|
||
<div class="cta">
|
||
<a class="btn btn-primary" href="https://github.com/fstat13/PSCapture/releases"><svg class="i"><use href="#i-download"/></svg>Download for Windows</a>
|
||
<a class="btn btn-ghost" href="https://github.com/fstat13/PSCapture"><svg class="i"><use href="#i-star"/></svg>Star on GitHub <span class="stars" data-stars hidden></span></a>
|
||
</div>
|
||
<div class="hero-meta">
|
||
<span><svg class="i"><use href="#i-check"/></svg>No capture card</span>
|
||
<span><svg class="i"><use href="#i-check"/></svg>No Remote Play</span>
|
||
<span><svg class="i"><use href="#i-check"/></svg>No cloud</span>
|
||
<span><svg class="i"><use href="#i-check"/></svg>One .exe</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="app" role="img" aria-label="The PSCapture window: the log shows the driver check, the payload being sent and the stream connecting; the status pill reads STREAMING.">
|
||
<div class="app-bar">
|
||
<img src="pscapture.png" alt="">
|
||
<span class="t">PSCapture by fstat13 - PS5 screen to PC</span>
|
||
<span class="w"><span>–</span><span>□</span><span>✕</span></span>
|
||
</div>
|
||
<div class="app-body">
|
||
<div class="app-head">
|
||
<div class="app-title">PSCapture<small>PS5 screen to PC</small></div>
|
||
<span class="pill live"><i></i> STREAMING 29.8 fps</span>
|
||
</div>
|
||
<div class="app-row">
|
||
<span class="app-lbl">PS5 IP</span><span class="app-in">192.168.0.36</span>
|
||
<span class="app-btn">Deploy payload</span><span class="app-btn">Install driver</span>
|
||
</div>
|
||
<div class="app-row">
|
||
<span class="app-btn big">START STREAMING</span><span class="app-btn stop">STOP</span>
|
||
<span class="app-knobs app-row" style="margin:0">
|
||
<span class="app-lbl">gain</span><span class="app-in">1.0</span>
|
||
<span class="app-lbl">shift px</span><span class="app-in">0</span>
|
||
</span>
|
||
</div>
|
||
<div class="app-log" aria-hidden="true">
|
||
<div>PSCapture pronto: premo Start e faccio tutto da solo.</div>
|
||
<div>--- AVVIO AUTOMATICO ---</div>
|
||
<div>driver gia' installato</div>
|
||
<div>payload dall'eseguibile (175480 byte)</div>
|
||
<div>payload 175480 byte, invio a 192.168.0.36</div>
|
||
<div>autoloader aggiornato (pldmgr)</div>
|
||
<div class="hl">payload avviato - la PS5 deve mostrare la notifica PSCapture</div>
|
||
<div>porta stream: 5599</div>
|
||
<div class="ok">collegato a 192.168.0.36:5599</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="wrap">
|
||
<div class="stats">
|
||
<div class="stat"><div class="n">1920×1080</div><div class="l">full HD in OBS</div></div>
|
||
<div class="stat"><div class="n">~30 fps</div><div class="l">over a plain LAN</div></div>
|
||
<div class="stat"><div class="n">0</div><div class="l">re-encodes on the console</div></div>
|
||
<div class="stat"><div class="n">1 file</div><div class="l">driver and payload inside</div></div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="wrap">
|
||
|
||
<section id="why" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Why PSCapture</div>
|
||
<h2>A capture card, without the capture card.</h2>
|
||
<p class="sub">Everything runs on hardware you already own: the console, your network and your PC.</p>
|
||
</div>
|
||
<div class="grid g3">
|
||
<div class="card"><div class="ico"><svg class="i"><use href="#i-video"/></svg></div>
|
||
<h3>A real camera device</h3>
|
||
<p>A DirectShow source filter named <b>PS5 Capture</b>. Any app that can open a webcam can open your console.</p></div>
|
||
<div class="card"><div class="ico v"><svg class="i"><use href="#i-zap"/></svg></div>
|
||
<h3>Straight from the display engine</h3>
|
||
<p>The payload reads the console's scan-out buffer and sends raw NV12 frames. Nothing is re-encoded, so nothing waits for an encoder.</p></div>
|
||
<div class="card"><div class="ico g"><svg class="i"><use href="#i-file"/></svg></div>
|
||
<h3>One file, one window</h3>
|
||
<p><b>PSCapture.exe</b> installs the driver, sends the payload, registers it in the autoloader and connects, all on its own.</p></div>
|
||
<div class="card"><div class="ico a"><svg class="i"><use href="#i-refresh"/></svg></div>
|
||
<h3>Recovers by itself</h3>
|
||
<p>Console still off? It retries every 2 seconds. Stream dropped? It reconnects. You don't have to babysit it.</p></div>
|
||
<div class="card"><div class="ico"><svg class="i"><use href="#i-sliders"/></svg></div>
|
||
<h3>Live tuning</h3>
|
||
<p>Colour <code>gain</code> and horizontal <code>shift</code> apply in about a second and are saved in <code>pscapture.ini</code>.</p></div>
|
||
<div class="card"><div class="ico v"><svg class="i"><use href="#i-lock"/></svg></div>
|
||
<h3>Stays on your network</h3>
|
||
<p>No accounts, no cloud relay, no Remote Play. Frames go from the console to your PC and nowhere else.</p></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="how" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">How it works</div>
|
||
<h2>Three small pieces, one camera.</h2>
|
||
<p class="sub">A payload on the console, a feeder and a driver on the PC. The apps you already use just see a webcam.</p>
|
||
</div>
|
||
<div class="pipe">
|
||
<div class="node"><div class="where">PS5</div><h3>Payload</h3>
|
||
<p>Reads the display engine's scan-out ring, builds NV12 frames and serves them on TCP <code>5599</code>. Pops the toast <i>“PSCapture is streaming on:5599”</i>.</p></div>
|
||
<div class="link"><span>TCP · NV12<br>your LAN</span><div class="line"></div></div>
|
||
<div class="node"><div class="where">PC · PSCapture.exe</div><h3>Feeder</h3>
|
||
<p>Receives the frames and publishes them into a shared-memory ring.</p></div>
|
||
<div class="link"><span>shared<br>memory</span><div class="line"></div></div>
|
||
<div class="node"><div class="where">PC · pscapture.dll</div><h3>Driver</h3>
|
||
<p>A DirectShow source filter that exposes the ring as the camera <b>PS5 Capture</b>.</p></div>
|
||
<div class="link"><span>DirectShow</span><div class="line"></div></div>
|
||
<div class="node end"><div class="where">Your apps</div><h3>Any camera app</h3>
|
||
<p>Pick <b>PS5 Capture</b> like any webcam.</p>
|
||
<div class="chips"><span class="chip">Discord</span><span class="chip">OBS</span><span class="chip">ffmpeg</span></div></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="requirements" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Before you start</div>
|
||
<h2>What you need.</h2>
|
||
</div>
|
||
<div class="grid g2">
|
||
<div class="req">
|
||
<div class="req-h"><div class="ico"><svg class="i"><use href="#i-console"/></svg></div><h3>On the PS5</h3></div>
|
||
<ul>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span>A jailbroken console<small>Built and tuned on firmware <b>13.60</b>. See the FAQ for other versions.</small></span></li>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span>Payload loader on TCP <code>9021</code><small><code>elfldr</code>-style, as in every current jailbreak setup.</small></span></li>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span>Anonymous FTP on TCP <code>2121</code><small>The app reads and writes a few files on the console.</small></span></li>
|
||
<li class="opt"><svg class="i"><use href="#i-check"/></svg><span><code>pldmgr</code> autoloader <span class="tagopt">optional</span><small>Starts the payload on every boot, so you never deploy by hand.</small></span></li>
|
||
</ul>
|
||
</div>
|
||
<div class="req">
|
||
<div class="req-h"><div class="ico v"><svg class="i"><use href="#i-monitor"/></svg></div><h3>On the PC</h3></div>
|
||
<ul>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span>Windows 10 or 11, 64-bit<small>The camera is a DirectShow device, so the PC side is Windows-only.</small></span></li>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span>Same network as the console<small>Wired recommended. Gigabit is plenty for 1080p at 30 fps.</small></span></li>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span>Admin rights, once<small>To register the camera for every program on the machine.</small></span></li>
|
||
<li><svg class="i"><use href="#i-check"/></svg><span><b>PSCapture.exe</b> from <a href="https://github.com/fstat13/PSCapture/releases">Releases</a><small>One single file: the payload and the driver are inside it.</small></span></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="start" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Setup</div>
|
||
<h2>From zero to live in five steps.</h2>
|
||
<p class="sub">After step 2 you mostly watch: the app does the rest and tells you what it's doing.</p>
|
||
</div>
|
||
<ol class="steps">
|
||
<li><h3>Jailbreak the console</h3>
|
||
<p>Run your usual jailbreak so the payload loader (<code>9021</code>) and FTP (<code>2121</code>) are up.</p></li>
|
||
<li><h3>Double-click <code>PSCapture.exe</code></h3>
|
||
<p>Windows asks <i>“Do you want to allow this app to make changes to your device?”</i>. Click <b>Yes</b>. The app elevates itself, no right-click needed.</p></li>
|
||
<li><h3>Check the IP</h3>
|
||
<p>The default is <code>192.168.0.36</code>. If your PS5 has a different address, type it in <b>PS5 IP</b> and press <b>Apply</b>. It's remembered. You can find it on the console under <i>Settings → Network → Connection Status → View Connection Status</i>.</p></li>
|
||
<li><h3>Hands off</h3>
|
||
<p>On the first run the app installs the driver, then sends the payload and connects. The console shows <i>“PSCapture is streaming on:5599”</i> and the status pill turns <b style="color:var(--green)">green: STREAMING</b>.</p></li>
|
||
<li><h3>Pick <b>PS5 Capture</b> in your app</h3>
|
||
<p>Discord, OBS or ffmpeg. See <a href="#use">where to find it</a> below.</p></li>
|
||
</ol>
|
||
|
||
<h3 style="margin:30px 0 6px">Reading the log</h3>
|
||
<p style="color:var(--dim)">The app's log is in Italian. Here's what each line means, in the order you'll see them.</p>
|
||
<div class="term" style="margin-top:14px">
|
||
<div class="term-bar"><i></i><i></i><i></i><b>pscapture-app.log</b></div>
|
||
<div class="term-row"><code>driver gia' installato</code><span class="m">The camera is already registered. Nothing to do.</span></div>
|
||
<div class="term-row"><code>driver non installato: lo installo ora (primo avvio)<br>driver estratto dall'eseguibile (… byte)<br>driver registrato - la webcam 'PS5 Capture' e' pronta</code><span class="m">First run: the driver is unpacked from the exe and registered.</span></div>
|
||
<div class="term-row"><code>payload dall'eseguibile (… byte)<br>payload … byte, invio a 192.168.0.36</code><span class="m">The payload is on its way to the console.</span></div>
|
||
<div class="term-row"><code>autoloader aggiornato (pldmgr)</code><span class="m">The payload was copied to the autoloader, so it'll start on every boot.</span></div>
|
||
<div class="term-row"><code>payload avviato - la PS5 deve mostrare la notifica PSCapture</code><span class="m">The payload is running. Look for the toast on the TV.</span></div>
|
||
<div class="term-row ok"><code>porta stream: 5599<br>collegato a 192.168.0.36:5599</code><span class="m">Connected. The pill reads <b>STREAMING</b> with the live fps.</span></div>
|
||
</div>
|
||
|
||
<div class="callout warn" style="margin-top:18px">
|
||
<svg class="i"><use href="#i-alert"/></svg>
|
||
<p><b>Pill stuck on “IN ATTESA DELLA PS5”</b> (“waiting for the PS5”)? The console is off, not jailbroken yet, or the IP is wrong. You don't need to restart anything: the app retries every 2 seconds and connects the moment ports <code>9021</code> and <code>2121</code> answer.</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="use" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Use it</div>
|
||
<h2>Works wherever a webcam works.</h2>
|
||
</div>
|
||
<div class="grid g3">
|
||
<div class="card target"><h3>Discord</h3>
|
||
<div class="path"><i>Settings → Voice & Video → Camera</i> → <b>PS5 Capture</b></div>
|
||
<p style="margin-top:10px">Discord asks every camera for 720p, capture cards included. For 1080p60 use screen-share (Nitro).</p>
|
||
<div class="res">in calls <b>1280×720</b></div></div>
|
||
<div class="card target"><h3>OBS Studio</h3>
|
||
<div class="path"><i>Sources → + → Video Capture Device</i> → <b>PS5 Capture</b></div>
|
||
<p style="margin-top:10px">Full resolution, ready for recording or streaming.</p>
|
||
<div class="res">native <b>1920×1080</b></div></div>
|
||
<div class="card target"><h3>ffmpeg</h3>
|
||
<div class="path"><code>ffmpeg -f dshow -i video="PS5 Capture" capture.mkv</code></div>
|
||
<p style="margin-top:10px">Scripted captures and quick tests.</p>
|
||
<div class="res">native <b>1920×1080</b></div></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="daily" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Daily use</div>
|
||
<h2>Open it and play.</h2>
|
||
</div>
|
||
<div class="grid g3">
|
||
<div class="card knob"><span class="k">every day</span>
|
||
<p>Open <b>PSCapture.exe</b> and accept the UAC prompt. With the autoloader the stream starts by itself.</p>
|
||
<ul>
|
||
<li><b>Deploy payload</b>: re-sends the payload by hand, after a reboot without autoloader.</li>
|
||
<li><b>Install driver</b>: re-registers the camera if the log shows a driver error.</li>
|
||
<li><b>STOP</b> or closing the app: the camera freezes on the last frame and stays listed.</li>
|
||
</ul></div>
|
||
<div class="card knob"><span class="k">gain</span>
|
||
<p>Colour (chroma) strength.</p>
|
||
<ul><li><code>1.0</code> is raw and correct.</li><li>Only touch it if colours look off.</li></ul></div>
|
||
<div class="card knob"><span class="k">shift px</span>
|
||
<p>Moves the picture left or right.</p>
|
||
<ul><li><b>Even numbers only</b>: an odd value swaps the colours.</li><li>The console's title text makes a good reference.</li></ul></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="trouble" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Troubleshooting</div>
|
||
<h2>Symptom → fix.</h2>
|
||
<p class="sub">Type what you see, or paste a line from the log.</p>
|
||
</div>
|
||
<div class="search"><svg class="i"><use href="#i-search"/></svg>
|
||
<input id="q" type="search" placeholder="e.g. black, 720p, err=126, ATTESA…" autocomplete="off" aria-label="Filter problems"></div>
|
||
<div class="issues">
|
||
<div class="issue"><div class="sym">Pill stays on <code>AVVIO…</code> or <code>IN ATTESA DELLA PS5</code></div>
|
||
<div class="fix"><span class="cause">console off, not jailbroken, or wrong IP</span>Turn the console on, run the jailbreak (ports 9021 and 2121 must be up), check the <b>PS5 IP</b> field. The app keeps retrying.</div></div>
|
||
<div class="issue"><div class="sym">Log repeats <code>PS5 non raggiungibile (…), riprovo</code></div>
|
||
<div class="fix"><span class="cause">console not reachable</span>Same as above. It connects by itself as soon as the console answers.</div></div>
|
||
<div class="issue"><div class="sym">Log: <code>elfldr :9021 non raggiungibile</code></div>
|
||
<div class="fix"><span class="cause">payload loader not running</span>Run the jailbreak again, then press <b>Deploy payload</b>.</div></div>
|
||
<div class="issue"><div class="sym">No <b>PS5 Capture</b> camera in Discord or OBS</div>
|
||
<div class="fix"><span class="cause">driver not registered</span>Press <b>Install driver</b> and read the next log line: it reports the real error.</div></div>
|
||
<div class="issue"><div class="sym">Log: <code>ERRORE: driver non scrivibile in C:\Program Files\PSCapture (serve admin?)</code></div>
|
||
<div class="fix"><span class="cause">app not elevated</span>Close it, start <code>PSCapture.exe</code> again and answer <b>Yes</b> to the UAC prompt.</div></div>
|
||
<div class="issue"><div class="sym">Log: <code>elevazione rifiutata: continuo senza privilegi</code></div>
|
||
<div class="fix"><span class="cause">UAC prompt answered “No”</span>Streaming can still work, but the driver can't be installed. Restart the app and click <b>Yes</b>.</div></div>
|
||
<div class="issue"><div class="sym">Log: <code>ERRORE caricamento dll (err=126)</code></div>
|
||
<div class="fix"><span class="cause">antivirus quarantined the driver</span>Restore and allow <code>pscapture.dll</code> in your antivirus, then press <b>Install driver</b> again.</div></div>
|
||
<div class="issue"><div class="sym">Log: <code>autoloader: copia FALLITA (pldmgr c'e'?)</code></div>
|
||
<div class="fix"><span class="cause"><code>pldmgr</code> not installed</span>Harmless: streaming works now. Without the autoloader, press <b>Deploy payload</b> after every console reboot.</div></div>
|
||
<div class="issue"><div class="sym">Camera is listed but the image is black</div>
|
||
<div class="fix"><span class="cause">stream not running</span>Check the pill. Press <b>Deploy payload</b> and/or <b>START STREAMING</b>.</div></div>
|
||
<div class="issue"><div class="sym">Log: <code>stream caduto, riconnetto</code></div>
|
||
<div class="fix"><span class="cause">network hiccup or console went to rest mode</span>The app reconnects by itself. If it happens often, use a cable instead of Wi-Fi.</div></div>
|
||
<div class="issue"><div class="sym">Colours look wrong (reddish skin, orange sky)</div>
|
||
<div class="fix"><span class="cause"><code>gain</code> was changed</span>Set <code>gain</code> back to <code>1.0</code> and press <b>Apply</b>.</div></div>
|
||
<div class="issue"><div class="sym">Colours inverted, black bar, picture off-centre</div>
|
||
<div class="fix"><span class="cause">alignment</span>Tune <code>shift px</code> using <b>even</b> values only. An odd value swaps the colours.</div></div>
|
||
<div class="issue"><div class="sym">Discord shows only 720p</div>
|
||
<div class="fix"><span class="cause">Discord's limit, not PSCapture's</span>Discord caps every camera at 720p in calls. Use OBS for 1080p, or Discord screen-share (1080p60 with Nitro).</div></div>
|
||
<div class="issue"><div class="sym">OBS sees the camera, Discord doesn't</div>
|
||
<div class="fix"><span class="cause">Discord was open during the driver install</span>Quit Discord completely (tray icon too) and reopen it.</div></div>
|
||
<div class="issue"><div class="sym">Anything else</div>
|
||
<div class="fix"><span class="cause">read the logs</span><code>pscapture-app.log</code> (next to the exe, or in <code>%TEMP%</code>) and the console log <code>/data/pscapture.log</code> over FTP. Then <a href="https://github.com/fstat13/PSCapture/issues">open an issue</a> with both.</div></div>
|
||
<div class="noresult" hidden>No match. <a href="https://github.com/fstat13/PSCapture/issues">Open an issue</a> with your <code>pscapture-app.log</code>.</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="build" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">Build from source</div>
|
||
<h2>Two halves, two toolchains.</h2>
|
||
<p class="sub">The repository holds sources only; ready-made binaries are on <a href="https://github.com/fstat13/PSCapture/releases">Releases</a>. The full walkthrough (toolchain install, checks, pitfalls) is in <a href="https://github.com/fstat13/PSCapture/blob/main/docs/BUILD.md">BUILD.md</a>.</p>
|
||
</div>
|
||
|
||
<div class="build-step">
|
||
<div class="num">Step 1 · console</div>
|
||
<h3>Payload → <code>pscapture.elf</code></h3>
|
||
<p>Needs Docker and the PS5 payload SDK image (prospero-clang; any tag works, here <code>ps5sdk:18</code>).</p>
|
||
<div class="codeblock"><pre><span class="p">$ </span>docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 make</pre></div>
|
||
</div>
|
||
|
||
<div class="build-step">
|
||
<div class="num">Step 2 · PC</div>
|
||
<h3>App and driver → <code>pscapture.exe</code> + <code>pscapture.dll</code></h3>
|
||
<p>Needs MinGW-w64 (<code>gcc</code> + <code>windres</code>). <b>The order matters</b>: the <code>.res</code> embeds the driver and the payload exactly as they are on disk.</p>
|
||
<div class="codeblock"><pre><span class="c"># from the repo root</span>
|
||
cp payload/pscapture.elf pc/
|
||
cd pc
|
||
|
||
<span class="c"># 1) the capture-card driver (DirectShow source filter)</span>
|
||
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
|
||
-lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
|
||
|
||
<span class="c"># 2) bundle icon + payload + driver into the resource object</span>
|
||
windres pscapture.rc -O coff -o pscapture.res
|
||
|
||
<span class="c"># 3) the single-file app</span>
|
||
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
|
||
-lws2_32 -lshell32 -ladvapi32 -luxtheme</pre></div>
|
||
</div>
|
||
|
||
<div class="callout info" style="margin-top:22px">
|
||
<svg class="i"><use href="#i-info"/></svg>
|
||
<p><b>The two classic mistakes.</b> Rebuilding the DLL or the payload <i>after</i> <code>windres</code> leaves the old ones inside the exe, so always go DLL → windres → exe. And <code>-static -static-libgcc</code> on the DLL is mandatory: without it Windows may refuse to load the driver with “the specified module could not be found” (missing MinGW runtime).</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="faq" class="reveal">
|
||
<div class="sec-head">
|
||
<div class="kicker">FAQ</div>
|
||
<h2>Questions.</h2>
|
||
</div>
|
||
<div class="faq">
|
||
<details><summary>Does it work on firmwares other than 13.60?</summary>
|
||
<div class="body"><p>The PC side works with any firmware: the app and the driver only use TCP, FTP and shared memory. The console payload is the version-specific part. It was built and tuned on <b>13.60</b> using display-engine anchors found on that firmware. Other versions may need a small porting pass to find the same anchors. <a href="https://github.com/fstat13/PSCapture/issues">Open an issue</a> with your firmware version.</p></div></details>
|
||
<details><summary>Why is the camera 720p in Discord calls?</summary>
|
||
<div class="body"><p>That's Discord's voice engine: it requests 1280×720 from every camera. In OBS, PS5 Capture runs at the full 1920×1080. Discord's screen-share goes up to 1080p60 with Nitro.</p></div></details>
|
||
<details><summary>Do I need a capture card or Remote Play?</summary>
|
||
<div class="body"><p>No. PSCapture never touches Remote Play. The payload reads the display engine on the console itself and sends raw frames over your LAN.</p></div></details>
|
||
<details><summary>Does it capture game audio?</summary>
|
||
<div class="body"><p>Not yet. PSCapture is video-only for now.</p></div></details>
|
||
<details><summary>Does it work on macOS or Linux?</summary>
|
||
<div class="body"><p>The PC side is Windows-only, because the camera is a DirectShow device.</p></div></details>
|
||
<details><summary>How do I uninstall it?</summary>
|
||
<div class="body"><ol>
|
||
<li>Close the app.</li>
|
||
<li>Run <code>rundll32 "%ProgramFiles%\PSCapture\pscapture.dll",DllUnregisterServer</code> to remove the camera.</li>
|
||
<li>Delete <code>C:\Program Files\PSCapture</code>.</li>
|
||
<li>Optional, on the console: delete <code>/data/pldmgr/payloads/pscapture/</code> so the autoloader stops starting it.</li>
|
||
</ol></div></details>
|
||
</div>
|
||
</section>
|
||
|
||
<div class="band reveal">
|
||
<div>
|
||
<h2>Useful? Leave a star.</h2>
|
||
<p>PSCapture is free. A star on GitHub helps other PS5 homebrew users find it.</p>
|
||
</div>
|
||
<div class="cta">
|
||
<a class="btn btn-primary" href="https://github.com/fstat13/PSCapture"><svg class="i"><use href="#i-star"/></svg>Star on GitHub <span class="stars" data-stars hidden></span></a>
|
||
<a class="btn btn-ghost" href="https://github.com/fstat13/PSCapture/issues">Report an issue</a>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<footer>
|
||
<div class="wrap">
|
||
<div class="foot">
|
||
<div>
|
||
<a class="logo" href="#top"><img src="pscapture.png" alt="">PSCapture</a>
|
||
<p>Your PS5 screen anywhere on your LAN. No card, no cloud.<br>by <b>fstat13</b></p>
|
||
</div>
|
||
<div>
|
||
<h4>Guides</h4>
|
||
<ul>
|
||
<li><a href="https://github.com/fstat13/PSCapture/blob/main/docs/GUIDE.md">Step-by-step guide</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/blob/main/docs/BUILD.md">Build from source</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/blob/main/docs/INSTALLER.md">What the installer does</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/blob/main/docs/REVERSE_ENGINEERING.md">Reverse engineering</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/blob/main/docs/ENGINEERING_LOG.md">Engineering log</a></li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<h4>Project</h4>
|
||
<ul>
|
||
<li><a href="https://github.com/fstat13/PSCapture">GitHub</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/releases">Releases</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/issues">Issues</a></li>
|
||
<li><a href="https://github.com/fstat13/PSCapture/blob/main/LICENSE">License</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="legal">
|
||
<span>© 2026 fstat13 · source-available</span>
|
||
<span>Not affiliated with Sony Interactive Entertainment. “PlayStation” and “PS5” are trademarks of their respective owners.</span>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script src="main.js"></script>
|
||
</body>
|
||
</html>
|