docs: italian editions + front-page links

- docs/GUIDE.it.md and docs/BUILD.it.md: full italian translations
- docs/index.it.html: italian HTML guide with language switcher
- README: guide/build links right under the badges (EN + IT)
- GUIDE.md / BUILD.md: link to their italian editions
This commit is contained in:
fstat13 committed 2026-10-15 15:14:21 +02:00
1 parent 0daa328a3c
commit a3692b1e25
7 files changed
+653 -1

No files matched your search

+10
View File
@@ -15,6 +15,16 @@ No capture card. No Remote Play. No cloud. Just your console and your network.<b
<b>by fstat13</b>
</p>
<p align="center">
📖 <b><a href="docs/GUIDE.md">How to use it — step-by-step guide</a></b>
&nbsp;·&nbsp;
🇮🇹 <b><a href="docs/GUIDE.it.md">Guida passo-passo in italiano</a></b>
&nbsp;·&nbsp;
🔧 <b><a href="docs/BUILD.md">Build from source</a></b>
&nbsp;·&nbsp;
🇮🇹 <b><a href="docs/BUILD.it.md">Build dai sorgenti</a></b>
</p>
---
## ✨ What you get
+162
View File
@@ -0,0 +1,162 @@
# PSCapture — build dai sorgenti, passo per passo
Tutto il necessario per passare da questi sorgenti a un `PSCapture.exe`
funzionante e a un `pscapture.elf` per la console. Ogni comando è scritto
esattamente come va eseguito, in ordine. Qui dentro non c'è magia: l'ordine
conta e ogni passo è spiegato.
Ci sono due metà, che si compilano in posti diversi:
| Metà | Output | Dove si compila | Toolchain |
|---|---|---|---|
| Payload console | `payload/pscapture.elf` | Docker (container Linux) | PS5 payload SDK (prospero-clang) |
| Lato PC | `pc/pscapture.exe` + `pc/pscapture.dll` | Windows | MinGW-w64 (`gcc` + `windres`) |
🇬🇧 English version: [BUILD.md](BUILD.md)
---
## Parte 1 — Il payload per la console
### 1.1 Cosa serve
- **Docker** (Docker Desktop su Windows, o Docker normale su Linux/macOS).
- **L'immagine del PS5 payload SDK.** È il payload SDK della community per
PS5 (`prospero-clang`, `make`, `PS5_PAYLOAD_SDK` nell'ambiente) impacchettato
in una immagine. Sulla macchina di sviluppo l'immagine si chiama `ps5sdk:18`
— qualsiasi nome va bene, basta adattare i comandi.
Controlla che l'immagine ci sia:
```bash
docker images | grep ps5sdk
```
### 1.2 Build
Dalla radice della repo:
```bash
docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 make
```
Su Windows (PowerShell/cmd) metti il percorso completo al posto di
`"$PWD/payload"`, es.: `-v "C:\Users\tuonome\PSCapture\payload:/payload"`.
Risultato: **`payload/pscapture.elf`** (~175 KB).
Il `Makefile` fa l'unica cosa che conta: compila `main.c` con il clang
Prospero dell'SDK e linka l'ELF finale. Nessun altro input.
### 1.3 Opzionale — mandarlo alla console
Con la console jailbroken (payload loader sulla porta 9021):
```bash
docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 \
make deploy PS5_HOST=192.168.0.36
```
(oppure carica `pscapture.elf` con il loader che usi di solito).
Come si presenta un avvio sano sulla console:
- appare `/data/pscapture.log` con il log di partenza,
- appare `/data/pscapture.port` con la porta TCP dello stream,
- la console mostra la notifica *PSCapture is streaming on:PORT*.
---
## Parte 2 — Il lato PC
### 2.1 Cosa serve (Windows)
**MinGW-w64 64-bit** con `gcc` e `windres`. Sulla macchina di sviluppo:
```powershell
winget install BrechtSanders.WinLibs.POSIX.UCRT
```
(oppure qualsiasi MSYS2 con `mingw-w64-x86_64-gcc` — `pacman -S mingw-w64-x86_64-gcc`).
Controlla che entrambi siano nel PATH:
```bash
gcc --version
windres --version
```
### 2.2 Build — l'ordine è obbligatorio
`pscapture.res` è un bundle che **incastra i file così come sono su disco**:
l'icona, il payload della console e il driver della capture card. Quindi la
DLL va compilata *prima* del passo risorse, e il payload deve già trovarsi in
`pc/` quando gira `windres`. L'EXE si compila per ultimo.
```bash
cd pc
# 0) porta il payload appena compilato accanto al .rc (viene incastrato così com'è)
cp ../payload/pscapture.elf .
# 1) il driver della capture card (filtro sorgente DirectShow)
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
-lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
# 2) bundle: icona + payload + driver in un unico oggetto risorse
# (pscapture.rc => 1 ICON pscapture.ico / 2 RCDATA pscapture.elf
# / 3 RCDATA pscapture.dll)
windres pscapture.rc -O coff -o pscapture.res
# 3) l'app — un unico eseguibile autocontenuto
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
-lws2_32 -lshell32 -ladvapi32 -luxtheme
```
### 2.3 Verifica della build
```bash
# il driver deve dipendere SOLO da DLL di sistema (niente libgcc/libwinpthread):
objdump -p pscapture.dll | grep "DLL Name"
# le dimensioni giuste: exe ~500 KB, dll ~220 KB
ls -la pscapture.exe pscapture.dll
# payload e driver sono davvero dentro l'eseguibile:
strings pscapture.exe | grep -c PSCapture
```
Avvia `pscapture.exe`: si apre la finestra (prompt UAC → Sì) e il pannello log
mostra la sequenza controllo driver → estrazione payload → tentativo di
deploy. È la stessa sequenza descritta in `docs/INSTALLER.md`.
### 2.4 Trappole (imparate sul campo)
- **`-static -static-libgcc` sulla DLL non è cosmetico.** Senza, il driver
può ritrovarsi a dipendere dalle DLL runtime di mingw che *non* sono nel
PATH di sistema quando Windows (o un'altra app) lo carica — il classico
*"impossibile trovare il modulo specificato"*.
- **Ordine di build.** `windres` legge `pscapture.dll` e `pscapture.elf` da
`pc/` al momento della compilazione. Ricompili la DLL → rifai `windres` →
ricompili l'EXE, ogni volta. Dimenticare il passo centrale spedisce il
driver vecchio dentro l'exe nuovo.
- **Solo ASCII** nelle stringhe passate alle API Win32 `*A` (titoli, bottoni,
log). Byte UTF-8 in una stringa ANSI si vedono come caratteri rotti.
- Il **manifest** (`pc/pscapture.manifest`) è tenuto solo per riferimento;
la build attuale **non** lo incastra — l'auto-elevazione è fatta nel codice
(`ShellExecuteEx … "runas"`), cosa che evita il `.rsrc merge failure` di
mingw con più manifest.
### 2.5 Preparare una release
```bash
mkdir -p dist
cp pc/pscapture.exe pc/pscapture.dll dist/
```
Per gli utenti basta `pscapture.exe` da solo (la DLL e il payload viaggiano
dentro). La `pscapture.dll` sciolta si allega per le installazioni manuali:
```bash
rundll32 "pscapture.dll",DllRegisterServer
```
+2
View File
@@ -1,5 +1,7 @@
# PSCapture — build from source, step by step
🇮🇹 Versione italiana: [BUILD.it.md](BUILD.it.md)
Everything needed to go from these sources to a working `PSCapture.exe` and a
`pscapture.elf` for the console. Every command is written exactly as it is
run, in order. Nothing here is optional magic — the order matters and each
+116
View File
@@ -0,0 +1,116 @@
# PSCapture — la guida a prova di scemo
Da zero alla tua PS5 dentro Discord. Ogni passo dice esattamente cosa devi
vedere sullo schermo. Se qualcosa non torna, salta alla tabella dei problemi
in fondo.
🇬🇧 English version: [GUIDE.md](GUIDE.md)
---
## 0. Cosa serve
**Sulla console** — tutto standard nei setup jailbreak di oggi:
| Cosa | Porta | A che serve |
|---|---|---|
| Payload loader (tipo `elfldr`) | TCP **9021** | esegue il payload che gli mandiamo |
| FTP anonimo | TCP **2121** | l'app legge/scrive file sulla console |
| `pldmgr` autoloader (opzionale) | — | fa partire il payload a ogni boot |
**Sul PC**: Windows 10/11 64-bit, rete cablata consigliata.
**L'app**: `PSCapture.exe` — **un solo file**. Scaricalo dalla pagina Releases
della repo. È il pacchetto completo: il payload per la console e il driver
per Windows sono dentro di lui.
---
## 1. Primo avvio sul PC
1. Metti `PSCapture.exe` dove vuoi (va benissimo il Desktop) e **fai doppio click**.
2. Windows chiede *"Consenti a questa app di apportare modifiche al
dispositivo?"* → clicca **Sì**.
*Perché:* registrare la webcam virtuale per tutti i programmi del PC
richiede i privilegi di amministratore, una volta sola. L'app si eleva da
sola — niente tasto destro.
3. Si apre la finestra (scura, con il bottone blu grande **START STREAMING**).
Se la tua PS5 non è a `192.168.0.36`: scrivi il suo indirizzo nel campo
**PS5 IP** e premi **Apply**.
4. Da qui in poi l'app fa tutto da sola. Guarda il pannello log scuro:
| Dovresti leggere | Significa |
|---|---|
| `driver gia' installato` | la camera è già registrata — ok |
| `driver estratto dall'eseguibile (… byte)` + `driver registrato - la webcam 'PS5 Capture' e' pronta` | primo avvio: driver installato |
| `payload dall'eseguibile (… byte)` + `payload avviato - la PS5 deve mostrare la notifica PSCapture` | il payload sta girando sulla console |
| `porta stream: 9xxx` poi `collegato a 192.168.0.36:9xxx` | stream connesso |
| la pillola diventa **verde**: `STREAMING - scegli 'PS5 Capture' in Discord` | sei live |
5. Sulla PS5 compare la notifica di sistema: **PSCapture is streaming on:PORT**.
(Quel toast è la console che ti dice che il payload è vivo.)
> Se la pillola resta su *"IN ATTESA DELLA PS5 — accesa e col jailbreak
> avviato?"* la console è spenta, non è jailbroken, o l'IP è sbagliato.
> Vedi la sezione 5.
## 2. Usarlo
**Discord (in chiamata)** — *Impostazioni → Voce e video → Telecamera* →
**PS5 Capture**. In chiamata l'immagine è 720p: è il motore di Discord, chiede
1280x720 a *tutte* le camere (capture card incluse).
**OBS** — *Sorgenti → **+** → Video Capture Device* → **PS5 Capture**.
Qui va alla piena risoluzione **1920x1080**.
**ffmpeg** — `ffmpeg -f dshow -i video="PS5 Capture" registrazione.mkv`
## 3. Uso quotidiano
- Apri `PSCapture.exe` → **Sì** all'UAC. L'app si ricollega da sola: se il
payload è già sulla console (autoloader) lo stream parte subito; se la
console è spenta la pillola dice *"IN ATTESA DELLA PS5"* e si connette nel
momento in cui la console è pronta.
- Premi **Stop** (o chiudi l'app) per fermare lo stream. La camera si congela
sull'ultimo frame; gli altri programmi continuano a vedere il dispositivo.
- **Deploy payload** rimanda il payload a mano (utile dopo un riavvio della
console senza autoloader). **Install driver** riregistra la camera a mano
(utile se il log mostra un errore del driver).
## 4. Le due manopole
| Manopola | Cosa fa | Regole |
|---|---|---|
| `gain` | forza del colore (croma) | `1.0` = grezzo, è il valore giusto. Toccala solo se i colori sembrano sbagliati. |
| `shift px` | sposta l'immagine a destra/sinistra | **solo numeri PARI** (un numero dispari inverte i colori). Regola finché l'immagine non è centrata: il testo del titolo della console è un buon riferimento. |
Entrambe si applicano in diretta (circa un secondo) e sono salvate in
`pscapture.ini` accanto all'exe, quindi sopravvivono ai riavvii.
## 5. Problemi — sintomo per sintomo
| Sintomo | Causa | Rimedio |
|---|---|---|
| La pillola resta su `AVVIO...` / `IN ATTESA DELLA PS5` | console spenta, **non jailbroken**, o IP sbagliato | accendi la console, avvia il jailbreak (le porte 9021/2121 devono essere aperte), controlla il campo IP |
| Il log ripete `PS5 non raggiungibile (...), riprovo` | come sopra | come sopra |
| La camera `PS5 Capture` non appare in Discord/OBS | driver mai registrato (install fallito) | premi **Install driver**; leggi la riga di log che segue — ora riporta l'errore *vero* |
| Log: `ERRORE: driver non scrivibile in C:\Program Files\PSCapture (serve admin?)` | app non elevata | chiudi e riavvia `PSCapture.exe` accettando il prompt UAC |
| Log: `ERRORE caricando la dll (err=126)` | l'antivirus ha messo in quarantena la dll estratta | controlla la quarantena dell'antivirus per `pscapture.dll`, sbloccala, premi di nuovo **Install driver** |
| La camera appare ma l'immagine è nera | stream non partito | controlla la pillola; premi **Deploy payload** e/o **START STREAMING** |
| I colori sembrano sbagliati (pelle rossastra, cielo arancione) | qualcuno ha toccato `gain` | rimetti `gain` a `1.0` → Apply |
| Immagine decentrata / barra nera | allineamento | regola `shift px` con numeri pari finché non è centrata |
| Discord continua a mostrare 720p | il motore di Discord limita ogni camera a 720p | usa OBS per il 1080p, o la condivisione schermo di Discord (1080p60 con Nitro) |
| OBS vede la camera, Discord no | Discord era già aperto quando hai installato il driver | chiudi Discord COMPLETAMENTE (anche dalla tray) e riaprilo |
| Tutto il resto | — | leggi `pscapture-app.log` (accanto all'exe, o in `%TEMP%`) e il log della console `/data/pscapture.log` (via FTP) |
## 6. Disinstallazione
1. Chiudi l'app.
2. `rundll32 "%ProgramFiles%\PSCapture\pscapture.dll",DllUnregisterServer`
(rimuove la registrazione della camera).
3. Cancella `C:\Program Files\PSCapture`.
4. Opzionale, sulla console: cancella `/data/pldmgr/payloads/pscapture/` così
l'autoloader smette di avviarlo.
+2
View File
@@ -1,5 +1,7 @@
# PSCapture — the fool-proof guide
🇮🇹 Versione italiana: [GUIDE.it.md](GUIDE.it.md)
From zero to your PS5 inside Discord. Every step says exactly what you should
see on screen. If something doesn't match, jump to the troubleshooting table
at the bottom.
+3 -1
View File
@@ -77,11 +77,13 @@
.toc{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}
.toc a{border:1px solid var(--line);background:var(--card);border-radius:999px;
padding:4px 12px;font-size:13px}
.lang{position:absolute;top:18px;right:22px;font-size:13.5px}
</style>
</head>
<body>
<header>
<header style="position:relative">
<div class="lang">🇮🇹 <a href="index.it.html">Italiano</a></div>
<div class="wrap">
<div class="brand">
<img src="pscapture.png" alt="PSCapture">
+358
View File
@@ -0,0 +1,358 @@
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PSCapture di fstat13 — la PS5 come scheda di acquisizione sul PC</title>
<style>
:root{
--bg:#0d1015; --card:#151a22; --card2:#1b222d; --line:#242c38;
--fg:#e8edf4; --dim:#96a0b0; --accent:#0070d1; --accent2:#35a3ff;
--rec:#e22236; --ok:#1fbf6b;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);
font:16px/1.65 "Segoe UI",system-ui,-apple-system,Roboto,sans-serif;}
a{color:var(--accent2);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:880px;margin:0 auto;padding:0 20px}
header{background:
radial-gradient(900px 320px at 20% -40%, rgba(0,112,209,.35), transparent 60%),
radial-gradient(700px 300px at 90% -30%, rgba(226,34,54,.22), transparent 60%),
var(--bg);
border-bottom:1px solid var(--line);padding:56px 0 40px}
.brand{display:flex;align-items:center;gap:18px}
.brand img{width:84px;height:84px;border-radius:20px;box-shadow:0 8px 30px rgba(0,0,0,.5)}
h1{font-size:44px;margin:0;letter-spacing:.5px}
.tag{color:var(--dim);font-size:18px;margin-top:6px}
.badges{margin-top:22px;display:flex;gap:10px;flex-wrap:wrap}
.badge{border:1px solid var(--line);background:var(--card);
padding:5px 12px;border-radius:999px;font-size:13px;color:var(--dim)}
.badge b{color:var(--fg)}
h2{margin:52px 0 14px;font-size:26px}
h3{margin:26px 0 10px;font-size:19px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
.card h3{margin:0 0 8px;font-size:17px}
.card p{margin:0;color:var(--dim);font-size:14.5px}
.flow{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap;margin-top:16px}
.box{flex:1;min-width:180px;background:var(--card2);border:1px solid var(--line);
border-radius:12px;padding:14px 16px}
.box b{display:block;margin-bottom:6px}
.box div{color:var(--dim);font-size:13.5px}
.arrow{align-self:center;color:var(--accent2);font-size:22px;padding:0 2px}
ol.steps{counter-reset:s;list-style:none;padding:0;margin:18px 0 0}
ol.steps li{counter-increment:s;position:relative;padding:0 0 18px 54px}
ol.steps li::before{content:counter(s);position:absolute;left:0;top:0;
width:34px;height:34px;border-radius:10px;background:var(--accent);
color:#fff;font-weight:600;display:flex;align-items:center;justify-content:center}
ol.steps b{color:var(--fg)}
ol.steps span{color:var(--dim)}
ul.plain{color:var(--dim);padding-left:22px}
ul.plain b{color:var(--fg)}
table{width:100%;border-collapse:collapse;margin-top:14px;font-size:14.5px}
th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);
vertical-align:top}
th{color:var(--dim);font-weight:500}
td code,th code{white-space:nowrap}
code,kbd{background:#0a0d12;border:1px solid var(--line);border-radius:6px;
padding:1px 7px;font:13.5px/1.5 Consolas,monospace;color:#cfe3ff}
pre{background:#0a0d12;border:1px solid var(--line);border-radius:12px;
padding:14px 16px;overflow-x:auto;font:13.5px/1.6 Consolas,monospace;
color:#cfe3ff}
pre .c{color:#5f7186}
details{background:var(--card);border:1px solid var(--line);border-radius:12px;
padding:14px 18px;margin:10px 0}
summary{cursor:pointer;font-weight:600}
details p{color:var(--dim);margin:10px 0 0}
.note{background:linear-gradient(0deg,rgba(0,112,209,.08),rgba(0,112,209,.08)),
var(--card);border:1px solid #23405f;border-radius:12px;padding:14px 18px;color:#cfe3ff}
.warn{background:linear-gradient(0deg,rgba(226,34,54,.07),rgba(226,34,54,.07)),
var(--card);border:1px solid #5f2330;border-radius:12px;padding:14px 18px;color:#f3cdd3}
footer{color:var(--dim);border-top:1px solid var(--line);margin-top:70px;
padding:26px 0 40px;font-size:13.5px}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;
background:var(--rec);margin-right:8px;vertical-align:1px}
.ok{color:var(--ok);font-weight:600}
.toc{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}
.toc a{border:1px solid var(--line);background:var(--card);border-radius:999px;
padding:4px 12px;font-size:13px}
.lang{position:absolute;top:18px;right:22px;font-size:13.5px}
</style>
</head>
<body>
<header style="position:relative">
<div class="lang">🇬🇧 <a href="index.html">English</a></div>
<div class="wrap">
<div class="brand">
<img src="pscapture.png" alt="PSCapture">
<div>
<h1>PSCapture</h1>
<div class="tag">Lo schermo della PlayStation&nbsp;5, live sul tuo PC — come una vera scheda di acquisizione.</div>
</div>
</div>
<div class="badges">
<span class="badge"><b>PS5</b> jailbroken</span>
<span class="badge"><b>Windows</b> 10 / 11</span>
<span class="badge"><span class="dot"></span><b>Niente</b> capture card</span>
<span class="badge"><b>Niente</b> Remote&nbsp;Play</span>
<span class="badge">1080p &middot; ~30 fps</span>
</div>
<div class="toc">
<a href="#start">Avvio rapido</a>
<a href="#daily">Uso quotidiano</a>
<a href="#trouble">Problemi</a>
<a href="#build">Build dai sorgenti</a>
<a href="#faq">FAQ</a>
</div>
</div>
</header>
<div class="wrap">
<h2>Cos'è</h2>
<div class="cards">
<div class="card">
<h3>🎥 Scheda di acquisizione virtuale</h3>
<p>PSCapture registra un dispositivo DirectShow chiamato <b>PS5 Capture</b>.
Discord, OBS e ffmpeg lo vedono come un'Elgato — scegli la camera e vai
live.</p>
</div>
<div class="card">
<h3>⚡ Direttamente dalla GPU</h3>
<p>Il payload sulla console legge direttamente il buffer di scan-out del
display engine e manda i frame NV12 sulla tua LAN. Nessuna
ricodifica, nessun cloud.</p>
</div>
<div class="card">
<h3>🖱️ Un solo eseguibile</h3>
<p><b>PSCapture.exe</b> contiene già il payload per la console:
installa il driver, manda il payload, avvia lo stream — una finestra,
un click.</p>
</div>
</div>
<h2>Come funziona</h2>
<div class="flow">
<div class="box"><b>PS5 &middot; payload</b>
<div>legge il ring di scan-out del display engine, costruisce i frame
NV12, li serve su una porta TCP e mostra il toast:
<i>“PSCapture is streaming on:PORT”</i>.</div></div>
<div class="arrow">→</div>
<div class="box"><b>PC &middot; feeder</b>
<div>riceve i frame e li pubblica in un ring di memoria condivisa.</div></div>
<div class="arrow">→</div>
<div class="box"><b>PC &middot; driver</b>
<div>il filtro DirectShow espone il ring come una camera per tutti i
programmi.</div></div>
</div>
<h2 id="start">Avvio rapido — passo per passo</h2>
<div class="note" style="margin-bottom:20px">
<b>Cosa serve prima.</b> Una PS5 jailbroken con il setup standard:
un payload loader sulla porta TCP <code>9021</code> (tipo
<code>elfldr</code>), FTP anonimo sulla <code>2121</code>, e opzionalmente
l'autoloader <code>pldmgr</code> così il payload parte a ogni boot.
PC e console sulla stessa LAN. Scarica <b>PSCapture.exe</b> dalla pagina
Releases — <b>è un unico file</b>: il payload per la console e il driver
per Windows sono dentro di lui.
</div>
<ol class="steps">
<li><b>Fai il jailbreak della console</b><br>
<span>Qualsiasi jailbreak kernel-capable che ti dia il payload loader
(:9021), l'FTP anonimo (:2121) e — opzionale — l'autoloader
<code>pldmgr</code>.</span></li>
<li><b>Doppio click su <code>PSCapture.exe</code></b><br>
<span>Windows chiede <i>“Consenti a questa app di apportare modifiche?”</i>
→ <b>Sì</b>. L'app si eleva da sola; i privilegi servono una volta, per
registrare la webcam virtuale per tutti i programmi.</span></li>
<li><b>Controlla l'IP</b><br>
<span>Se la tua PS5 non è a <code>192.168.0.36</code>, scrivi il suo
indirizzo nel campo <b>PS5 IP</b> e premi <b>Apply</b>.</span></li>
<li><b>Guarda e non premere niente</b><br>
<span>L'app fa tutto da sola, e te lo racconta nel pannello log scuro
(tabella qui sotto). Sulla console vedrai anche la notifica di sistema
<i>“PSCapture is streaming on:PORT”</i>.</span></li>
<li><b>Usalo in qualsiasi programma</b><br>
<span>Discord (in chiamata): <i>Impostazioni → Voce e video →
Telecamera</i> → <b>PS5 Capture</b> (720p — Discord chiede 720p a tutte
le camere, capture card incluse). OBS: aggiungi un <i>Video Capture
Device</i> → <b>1920x1080</b> pieno. ffmpeg:
<code>-f dshow -i video="PS5 Capture"</code>.</span></li>
</ol>
<h3>Cosa devi vedere nel log dell'app</h3>
<table>
<tr><th>Riga</th><th>Significato</th></tr>
<tr><td><code>driver gia' installato</code></td>
<td>camera già registrata — niente da fare</td></tr>
<tr><td><code>driver estratto dall'eseguibile (… byte)</code><br>
<code>driver registrato - la webcam 'PS5 Capture' e' pronta</code></td>
<td>primo avvio: il driver è stato estratto dall'exe e registrato</td></tr>
<tr><td><code>payload dall'eseguibile (… byte)</code></td>
<td>il payload sta viaggiando verso la PS5</td></tr>
<tr><td><code>payload avviato - la PS5 deve mostrare la notifica PSCapture</code></td>
<td>il payload sta girando sulla console</td></tr>
<tr><td><code>porta stream: 9xxx</code> → <code>collegato a …:9xxx</code></td>
<td>stream connesso — la pillola diventa <span class="ok">verde: STREAMING</span></td></tr>
</table>
<div class="warn" style="margin-top:18px">
<b>Pillola ferma su “IN ATTESA DELLA PS5 — accesa e col jailbreak avviato?”</b><br>
La console è spenta, non ancora jailbroken, o l'IP è sbagliato. L'app
riprova ogni 2 secondi: nel momento in cui la console è pronta si connette
da sola. Porte da controllare sulla console: <code>9021</code> e
<code>2121</code> devono essere aperte.
</div>
<h2 id="daily">Uso quotidiano e regolazioni</h2>
<ul class="plain">
<li>Apri <b>PSCapture.exe</b> (UAC → Sì). Se il payload è già sulla console
(autoloader) lo stream parte da solo; altrimenti premi
<b>Deploy payload</b> una volta.</li>
<li><b>Stop</b> / chiudere l'app ferma lo stream — la camera si congela
sull'ultimo frame e gli altri programmi continuano a vedere il
dispositivo.</li>
<li><b>gain</b> — forza del colore. <b>Lascia 1.0</b> (grezzo) a meno che i
colori non sembrino sbagliati.</li>
<li><b>shift px</b> — allineamento orizzontale. <b>Solo numeri PARI</b>
(un valore dispari inverte i colori). Si applica in diretta ed è
salvato in <code>pscapture.ini</code> accanto all'exe.</li>
</ul>
<h2 id="trouble">Problemi — sintomo → rimedio</h2>
<table>
<tr><th>Sintomo</th><th>Causa → rimedio</th></tr>
<tr><td>La pillola resta su <code>AVVIO…</code> / <code>IN ATTESA DELLA PS5</code></td>
<td>Console spenta o non jailbroken, o IP sbagliato → accendila, avvia
il jailbreak, controlla il campo IP</td></tr>
<tr><td>Il log ripete <code>PS5 non raggiungibile</code></td>
<td>Come sopra — l'app riprova da sola</td></tr>
<tr><td>La camera <b>PS5 Capture</b> non appare in Discord/OBS</td>
<td>Driver mai registrato → premi <b>Install driver</b>; il log ora
riporta l'errore vero</td></tr>
<tr><td><code>ERRORE: driver non scrivibile in C:\Program Files\PSCapture (serve admin?)</code></td>
<td>App non elevata → riavvia PSCapture.exe e accetta il prompt UAC</td></tr>
<tr><td><code>ERRORE caricando la dll (err=126)</code></td>
<td>L'antivirus ha messo in quarantena la dll estratta → sblocca
<code>pscapture.dll</code> nell'antivirus, poi premi di nuovo
<b>Install driver</b></td></tr>
<tr><td>La camera appare ma l'immagine è nera</td>
<td>Stream non partito → controlla la pillola, premi <b>Deploy
payload</b> e/o <b>START STREAMING</b></td></tr>
<tr><td>I colori sembrano sbagliati</td>
<td>Hai toccato <code>gain</code> → rimettilo a 1.0 e Apply</td></tr>
<tr><td>Immagine decentrata / barra nera</td>
<td>Allineamento → regola <code>shift px</code> con numeri pari</td></tr>
<tr><td>Discord mostra 720p</td>
<td>Il motore di Discord limita ogni camera a 720p → usa OBS per il
1080p</td></tr>
<tr><td>OBS vede la camera, Discord no</td>
<td>Discord era aperto prima dell'installazione del driver → chiudilo
COMPLETAMENTE (anche dalla tray) e riaprilo</td></tr>
<tr><td>Tutto il resto</td>
<td>Leggi <code>pscapture-app.log</code> (accanto all'exe o in
<code>%TEMP%</code>) e il log della console
<code>/data/pscapture.log</code> via FTP</td></tr>
</table>
<h2 id="build">Build dai sorgenti</h2>
<p style="color:var(--dim)">Solo sorgenti — nella repo non ci sono binari.
Due metà, due toolchain. Il walk-through completo (installazione toolchain,
verifiche, trappole) è in <a href="BUILD.it.md">docs/BUILD.it.md</a>.</p>
<h3>1 · Payload console → <code>pscapture.elf</code></h3>
<pre><span class="c"># servono Docker + l'immagine del PS5 payload SDK (prospero-clang; qui tag ps5sdk:18)</span>
docker run --rm -v "&lt;repo&gt;/payload:/payload" -w /payload ps5sdk:18 make</pre>
<h3>2 · Lato PC → <code>pscapture.exe</code> + <code>pscapture.dll</code></h3>
<p style="color:var(--dim)">Serve MinGW-w64 (<code>gcc</code> +
<code>windres</code>). <b>L'ordine è obbligatorio</b>: il
<code>.res</code> incastra driver e payload così come sono su disco.</p>
<pre><span class="c"># dalla radice della repo</span>
cp payload/pscapture.elf pc/ <span class="c"># viene incastrato così com'è</span>
cd pc
<span class="c"># 1) il driver della capture card (filtro sorgente DirectShow)</span>
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
-lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
<span class="c"># 2) bundle: icona + payload + driver nell'oggetto risorse</span>
windres pscapture.rc -O coff -o pscapture.res
<span class="c"># 3) l'app a file unico</span>
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
-lws2_32 -lshell32 -ladvapi32 -luxtheme</pre>
<details>
<summary>Perché quest'ordine? (e i due errori classici di build)</summary>
<p><b>windres incastra i file come sono su disco:</b> se la DLL o il
payload vengono ricompilati dopo il passo 2, l'exe continua a portarsi
dentro quelli vecchi. Rebuild = DLL → windres → exe, ogni volta.<br>
<b><code>-static -static-libgcc</code> sulla DLL è obbligatorio:</b>
senza, Windows può rifiutarsi di caricare il driver con il cryptico
“impossibile trovare il modulo specificato” (runtime mingw mancante).</p>
</details>
<h2>Requisiti</h2>
<table>
<tr><th>Dove</th><th>Cosa</th></tr>
<tr><td>PS5</td><td>Jailbroken (payload loader + FTP + autoloader pldmgr)</td></tr>
<tr><td>PS5</td><td>Firmware testato: <b>13.60</b> — vedi la FAQ per le altre versioni</td></tr>
<tr><td>PC</td><td>Windows 10/11 64-bit, rete cablata consigliata</td></tr>
<tr><td>Rete</td><td>Entrambi sulla stessa LAN (il gigabit basta per 1080p30)</td></tr>
</table>
<h2 id="faq">FAQ</h2>
<details>
<summary>Funziona su firmware precedenti al 13.60?</summary>
<p>Il lato PC funziona su qualsiasi firmware: app e driver parlano solo
TCP/FTP e memoria condivisa. La parte version-specifica è il payload
della console — è stato compilato e tarato sul <b>13.60</b>, usando gli
ancoraggi del display engine trovati su quel firmware. Su altri
firmware può servire un piccolo lavoro di porting (cioè ritrovare gli
stessi ancoraggi su quel sistema). Se hai un'altra versione, apri una
issue con il tuo firmware e possiamo aggiungere un profilo.</p>
</details>
<details>
<summary>Perché la camera in chiamata è 720p e non 1080p?</summary>
<p>Quel limite è del motore vocale di Discord, non di PSCapture: chiede
1280x720 a ogni camera. Per la qualità piena usa OBS (dove PS5 Capture
va a 1920x1080) o la condivisione schermo di Discord, che arriva a
1080p60 con Nitro.</p>
</details>
<details>
<summary>Servono una capture card o il Remote Play?</summary>
<p>No. PSCapture non tocca mai il Remote Play: il payload legge il display
engine sulla console stessa e manda i frame grezzi sulla tua LAN.</p>
</details>
<details>
<summary>Come si disinstalla?</summary>
<p>Chiudi l'app, poi <code>rundll32 "%ProgramFiles%\PSCapture\pscapture.dll",DllUnregisterServer</code>,
cancella <code>C:\Program Files\PSCapture</code>, e opzionalmente
cancella <code>/data/pldmgr/payloads/pscapture/</code> sulla console
così l'autoloader smette di avviare il payload.</p>
</details>
<footer>
PSCapture — porta lo schermo della PS5 ovunque nella tua LAN, senza card e senza cloud.
<br><b>di fstat13</b> &middot; source-available. Fatto per la community homebrew. <span class="ok">Gioca responsabilmente.</span>
<br><br>
Documenti: <a href="GUIDE.it.md">guida a prova di scemo (md)</a> &middot;
<a href="BUILD.it.md">build dai sorgenti (md)</a> &middot;
<a href="INSTALLER.md">cosa fa l'installer dentro</a> &middot;
<a href="REVERSE_ENGINEERING.md">reverse engineering</a> &middot;
<a href="ENGINEERING_LOG.md">engineering log</a>
</footer>
</div>
</body>
</html>