mirror of
https://github.com/jstrdev/ps5directo.git
synced 2026-10-29 04:01:51 +01:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5de6399e0 | ||
|
|
6fe219eea7 | ||
|
|
75462232fe | ||
|
|
92eefb4d87 | ||
|
|
8f1870aefd | ||
|
|
dd1bd517b4 |
No files matched your search
@@ -1,6 +1,8 @@
|
||||
# Publica una version: al subir una etiqueta vX.Y.Z crea la release de GitHub con dos .zip:
|
||||
# - PS5Directo-X.Y.Z.zip la app (la que usa "Actualizar" dentro del programa)
|
||||
# - PS5Directo-X.Y.Z-portable-windows.zip la app + Python incluido: descomprimir y abrir, sin instalar nada
|
||||
# Publica una version: al subir una etiqueta vX.Y.Z (o con "Run workflow" en Actions) crea o rehace
|
||||
# la release de GitHub con:
|
||||
# - PS5Directo-X.Y.Z-Setup.exe el instalador: doble clic, «Instalar» y listo. Es la descarga normal.
|
||||
# - PS5Directo-X.Y.Z-Windows.zip lo mismo sin instalar (con Python incluido). Tambien lo usa
|
||||
# «Actualizar» dentro del programa, que solo copia los archivos.
|
||||
name: Publicar version
|
||||
|
||||
on:
|
||||
@@ -14,25 +16,26 @@ permissions:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
ver: ${{ steps.v.outputs.ver }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Version de app.py
|
||||
id: v
|
||||
run: echo "ver=$(grep -oP 'VERSION = "\K[^"]+' app.py)" >> "$GITHUB_OUTPUT"
|
||||
run: echo "ver=$(grep -m1 -oP '^VERSION = "\K[^"]+' app.py)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: La etiqueta tiene que coincidir con la version
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
run: test "${GITHUB_REF_NAME#v}" = "${{ steps.v.outputs.ver }}"
|
||||
|
||||
- name: Paquete normal
|
||||
- name: Archivos del programa
|
||||
run: |
|
||||
mkdir -p dist/PS5Directo
|
||||
git archive HEAD | tar -x -C dist/PS5Directo
|
||||
rm -rf dist/PS5Directo/.github
|
||||
(cd dist && zip -qr "PS5Directo-${{ steps.v.outputs.ver }}.zip" PS5Directo)
|
||||
rm -rf dist/PS5Directo/.github dist/PS5Directo/installer
|
||||
|
||||
- name: Paquete portable (con Python para Windows)
|
||||
- name: Python incluido
|
||||
run: |
|
||||
PY=3.12.10
|
||||
curl -fsSL -o py.zip "https://www.python.org/ftp/python/$PY/python-$PY-embed-amd64.zip"
|
||||
@@ -40,9 +43,41 @@ jobs:
|
||||
unzip -q py.zip -d dist/PS5Directo/python
|
||||
# que el Python incluido vea la carpeta del programa
|
||||
for f in dist/PS5Directo/python/python*._pth; do printf '..\n' >> "$f"; done
|
||||
(cd dist && zip -qr "PS5Directo-${{ steps.v.outputs.ver }}-portable-windows.zip" PS5Directo)
|
||||
|
||||
- uses: softprops/action-gh-release@v2
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
- name: Zip para Windows
|
||||
run: (cd dist && zip -qr "PS5Directo-${{ steps.v.outputs.ver }}-Windows.zip" PS5Directo)
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
files: dist/*.zip
|
||||
name: dist
|
||||
path: dist/
|
||||
retention-days: 3
|
||||
|
||||
setup:
|
||||
needs: build
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: dist
|
||||
path: dist
|
||||
|
||||
- name: Instalador (Inno Setup)
|
||||
shell: pwsh
|
||||
run: |
|
||||
$iscc = Join-Path ${env:ProgramFiles(x86)} 'Inno Setup 6\ISCC.exe'
|
||||
if (-not (Test-Path $iscc)) { choco install innosetup -y --no-progress | Out-Null }
|
||||
& $iscc /Q "/DMyVer=${{ needs.build.outputs.ver }}" installer\PS5Directo.iss
|
||||
if ($LASTEXITCODE -ne 0) { exit 1 }
|
||||
Get-ChildItem dist\*.exe, dist\*.zip | Format-Table Name, Length
|
||||
|
||||
# Con una etiqueta crea la release. Pulsando "Run workflow" en Actions añade (o rehace) los archivos
|
||||
# de la release de la version que pone app.py, aunque ya exista.
|
||||
- uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: v${{ needs.build.outputs.ver }}
|
||||
files: |
|
||||
dist/PS5Directo-*-Setup.exe
|
||||
dist/PS5Directo-*-Windows.zip
|
||||
@@ -10,8 +10,7 @@ Lo que necesitas antes:
|
||||
|
||||
Paso 1. Descarga
|
||||
En la página de GitHub del programa, entra en "Releases" y descarga
|
||||
PS5Directo-X.Y.Z-portable-windows.zip (trae todo, no hay que instalar
|
||||
nada más). Descomprímelo en una carpeta, por ejemplo en Documentos.
|
||||
PS5Directo-X.Y.Z-Windows.zip (trae todo, no hay que instalar nada más). Descomprímelo en una carpeta, por ejemplo en Documentos.
|
||||
|
||||
Paso 2. Ábrelo
|
||||
Doble clic en "PS5 Directo.vbs". Se abre en su propia ventana y crea un
|
||||
@@ -120,8 +119,7 @@ lo tiene y que sabes cargar payloads (.elf).
|
||||
|
||||
EN EL PC
|
||||
- Windows 10 u 11.
|
||||
- Python 3.9 o superior: https://www.python.org/downloads/
|
||||
Al instalarlo marca "Add python.exe to PATH".
|
||||
- Nada más: el instalador lo trae todo (también Python).
|
||||
- 7-Zip (solo si usas "Descomprimir en el PC"): https://www.7-zip.org/
|
||||
|
||||
EN LA PS5 (se cargan como payloads, por ejemplo con Payload Manager:
|
||||
@@ -155,9 +153,15 @@ BFpilot, sin PS5 Directo.
|
||||
|
||||
PRIMERA VEZ
|
||||
-----------
|
||||
Doble clic en "Crear accesos directos.bat". Crea:
|
||||
- Un icono "PS5 Directo" en el escritorio.
|
||||
Abre PS5Directo-X.Y.Z-Setup.exe y pulsa "Instalar". No pide permisos de
|
||||
administrador. Crea:
|
||||
- Un icono "PS5 Directo" en el escritorio y en el menú Inicio.
|
||||
- "Enviar a > PS5 Directo" en el clic derecho de los archivos.
|
||||
Si Windows dice "Windows protegió su PC": "Más información" > "Ejecutar
|
||||
de todos modos" (el instalador no está firmado; es el aviso normal en
|
||||
programas pequeños y gratuitos).
|
||||
Con el .zip en vez del instalador: descomprímelo donde quieras y haz
|
||||
doble clic en "Crear accesos directos.bat".
|
||||
Desde entonces abre PS5 Directo con el icono del escritorio: sale en su
|
||||
propia ventana, sin pestañas y sin ventana negra.
|
||||
|
||||
@@ -293,14 +297,28 @@ PAYLOADS, DIAGNÓSTICO, MÓVIL Y PROGRAMAR
|
||||
suspende solo.
|
||||
|
||||
|
||||
VERSIÓN PORTABLE
|
||||
----------------
|
||||
En cada versión hay dos descargas: PS5Directo-X.Y.Z.zip (necesita Python
|
||||
instalado) y PS5Directo-X.Y.Z-portable-windows.zip, que trae Python dentro:
|
||||
descomprimir y abrir, sin instalar nada.
|
||||
QUÉ DESCARGAR
|
||||
-------------
|
||||
- PS5Directo-X.Y.Z-Setup.exe: el instalador. Es el que debes bajar. Lo
|
||||
trae todo (también Python): ábrelo, pulsa "Instalar" y listo.
|
||||
- PS5Directo-X.Y.Z-Windows.zip: lo mismo sin instalar, para quien
|
||||
prefiera descomprimirlo en una carpeta. También lo usa "Actualizar".
|
||||
Para quitarlo: Configuración de Windows > Aplicaciones > PS5 Directo >
|
||||
Desinstalar. Tus ajustes se conservan por si vuelves a instalarlo.
|
||||
|
||||
|
||||
NOVEDADES 1.20.4
|
||||
- Icono propio en la barra de tareas: la ventana ya no se mete dentro del
|
||||
icono de Edge o Chrome, y al anclarla se ancla PS5 Directo.
|
||||
- Si ya está abierto y lo vuelves a abrir, trae al frente la ventana que
|
||||
tenías en vez de abrir otra.
|
||||
- Si lo anclaste antes de esta versión, desáncla el icono viejo y ancla
|
||||
el nuevo (clic derecho en el icono de la barra > Anclar).
|
||||
|
||||
NOVEDADES 1.20.3
|
||||
- Instalador para Windows (PS5Directo-1.20.3-Setup.exe): doble clic,
|
||||
"Instalar" y listo, con todo incluido. Sigue habiendo .zip para quien
|
||||
no quiera instalar.
|
||||
- Biblioteca: «Comprobar» en cada aplicación, para cuando no abre o se
|
||||
cierra al arrancar. Revisa la carpeta (ejecutable, param.json, permisos,
|
||||
firmware, backports y el empaquetado LZ4), muestra los registros (.log) y
|
||||
|
||||
+23
-23
@@ -1,23 +1,23 @@
|
||||
' Abre PS5 Directo sin ventana negra (en su propia ventana de aplicacion).
|
||||
' Puedes arrastrar archivos encima de este archivo o de su acceso directo.
|
||||
Set sh = CreateObject("WScript.Shell")
|
||||
Set fso = CreateObject("Scripting.FileSystemObject")
|
||||
dir = fso.GetParentFolderName(WScript.ScriptFullName)
|
||||
sh.CurrentDirectory = dir
|
||||
args = ""
|
||||
For Each a In WScript.Arguments
|
||||
args = args & " """ & a & """"
|
||||
Next
|
||||
py = ""
|
||||
If fso.FileExists(dir & "\python\pythonw.exe") Then
|
||||
py = """" & dir & "\python\pythonw.exe"""
|
||||
ElseIf sh.Run("cmd /c where pyw >nul 2>nul", 0, True) = 0 Then
|
||||
py = "pyw -3"
|
||||
ElseIf sh.Run("cmd /c where pythonw >nul 2>nul", 0, True) = 0 Then
|
||||
py = "pythonw"
|
||||
End If
|
||||
If py = "" Then
|
||||
MsgBox "No encuentro Python. Descarga la version portable (trae Python) o instala Python 3 (marca 'Add to PATH').", 48, "PS5 Directo"
|
||||
Else
|
||||
sh.Run py & " """ & dir & "\app.py""" & args, 0, False
|
||||
End If
|
||||
' Abre PS5 Directo sin ventana negra (en su propia ventana de aplicacion).
|
||||
' Puedes arrastrar archivos encima de este archivo o de su acceso directo.
|
||||
Set sh = CreateObject("WScript.Shell")
|
||||
Set fso = CreateObject("Scripting.FileSystemObject")
|
||||
dir = fso.GetParentFolderName(WScript.ScriptFullName)
|
||||
sh.CurrentDirectory = dir
|
||||
args = ""
|
||||
For Each a In WScript.Arguments
|
||||
args = args & " """ & a & """"
|
||||
Next
|
||||
py = ""
|
||||
If fso.FileExists(dir & "\python\pythonw.exe") Then
|
||||
py = """" & dir & "\python\pythonw.exe"""
|
||||
ElseIf sh.Run("cmd /c where pyw >nul 2>nul", 0, True) = 0 Then
|
||||
py = "pyw -3"
|
||||
ElseIf sh.Run("cmd /c where pythonw >nul 2>nul", 0, True) = 0 Then
|
||||
py = "pythonw"
|
||||
End If
|
||||
If py = "" Then
|
||||
MsgBox "Faltan archivos de PS5 Directo (la carpeta python). Vuelve a instalarlo con PS5Directo-Setup.exe desde github.com/jstrdev/ps5directo/releases", 48, "PS5 Directo"
|
||||
Else
|
||||
sh.Run py & " """ & dir & "\app.py""" & args, 0, False
|
||||
End If
|
||||
@@ -8,39 +8,30 @@ An all-in-one Windows tool for jailbroken PS5 consoles: it **downloads, converts
|
||||
|
||||
<sub>Demo with a sample homebrew app served from a NAS on the local network.</sub>
|
||||
|
||||
- ✅ Streams downloads straight to the console: nothing is saved on the PC
|
||||
- ✅ Works from download links, ftp:// links (e.g. a NAS), torrents (magnet or .torrent) or files on your PC
|
||||
- ✅ Joins split parts (.part1, .part2… / .001, .002…) and extracts RAR, 7z, ZIP and tar (.gz/.bz2/.xz)
|
||||
- ✅ Extracts on the console (BFpilot) or on the PC (7-Zip, every file CRC-checked)
|
||||
- ✅ Fixes the file permissions that stop BFpilot-extracted content from launching (CE-107750-0)
|
||||
- ✅ Pause, resume and retry where it left off, even after a dropped connection
|
||||
- ✅ Built-in console file browser (works over plain FTP, BFpilot optional): right-click menu, shortcuts, move/copy to…, extract archives on the console, drag & drop uploads, download to PC
|
||||
- ✅ Notification bell: finished or failed transfers, disconnections and new versions
|
||||
- ✅ Storage view: a pie chart of what fills the console, by app name and size, flagging duplicates and leftovers you can delete
|
||||
- ✅ Send whole PC folders over several connections, skipping what's already there and resuming what got cut off
|
||||
- ✅ Watches free space so the console never fills up
|
||||
- ✅ Speed limit and built-in speed test
|
||||
- ✅ Download-manager style downloads: several reused connections per file, auto-backoff when a host complains
|
||||
- ✅ Optional browser extension: links arrive by themselves with your browser session (same speed and access as the browser)
|
||||
- ✅ Drag and drop, or "Send to" from Explorer
|
||||
- ✅ Welcome guide, one-click updates, English and Spanish
|
||||
- ✅ **Library tab**: covers, versions and the firmware each app needs, flagging what won't launch on your console (backport-aware), duplicates and incomplete folders. Also shows what's installed (PS4 and PS5), your PC/NAS collection with what's missing on the console, and links to each title's public update list
|
||||
- ✅ **Backup tab**: saved data, ShadowMountPlus/payload settings and the app database copied to the PC, manually or daily; restore saved data to the same console
|
||||
- ✅ **Captures tab**: view the console's screenshots and videos and download them
|
||||
- ✅ **Diagnosis** on failed transfers (cause, codes and fixes) and a one-click problem report (.zip, no passwords)
|
||||
- ✅ **Format converter** with [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge) (optional): send it as is, or turn it on the PC into a plain folder, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs` or `.fpkg`, with a "Which one?" guide by need. Archives with a normal version plus a backport are split automatically
|
||||
- ✅ Shows your PS5 firmware at the top and tells you which formats and apps will work on it
|
||||
- ✅ "Download again" from the queue or the history, without pasting the link
|
||||
- ✅ Asks before sending something that's already on the console (send anyway, replace or cancel)
|
||||
- ✅ Checks every part against its `.sfv` / `.md5` / `.sha1` while sending
|
||||
- ✅ "Make room": suggests what to delete when space runs out
|
||||
- ✅ Loads ftpsrv and BFpilot on the PS5 from the app (ELF loader, port 9021)
|
||||
- ✅ "Why is it slow?" network diagnostics (Wi-Fi band and signal, 100 Mb/s cables, VPNs, ping)
|
||||
- ✅ Open it from your phone with a QR code; schedule the queue and sleep or shut down the PC when it's done
|
||||
### ⚡ One step instead of three tools
|
||||
- ✅ **Download and send at once:** files go straight to the console while they download, nothing stored on your PC
|
||||
- ✅ **Or convert on the fly** with [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge) (downloaded and updated automatically): folder, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs` or `.fpkg`, with a "Which one?" guide by need
|
||||
- ✅ **Any source:** download links, `ftp://` (e.g. a NAS), torrents (magnet or `.torrent`) or files and folders on your PC (drag and drop or "Send to")
|
||||
- ✅ **Extracts and places:** joins split parts, extracts RAR, 7z, ZIP and tar on the console (BFpilot) or on the PC (7-Zip, CRC-checked), splits archives with a backport and places apps in `/data/homebrew` for ShadowMountPlus
|
||||
- ✅ **Reliable:** pause, resume and retry where it left off, several connections per file, `.sfv`/`.md5` checks, free-space watch and permission fixes (CE-107750-0)
|
||||
|
||||
### 📚 Your console from your PC and phone
|
||||
- ✅ **Library:** covers, versions and required firmware for everything on the console, including images and installed PS4/PS5 content; flags what won't launch on your firmware, duplicates and broken folders, and links to each title's public update list
|
||||
- ✅ **On your PC:** point it at your PC/NAS folders, see what's missing on the console and send it with one click
|
||||
- ✅ **Backup:** saved data, ShadowMountPlus/payload settings and the app database copied to the PC, manually or daily; restore saved data to the same console
|
||||
- ✅ **Console files, Space and Captures:** file browser (copy, move, rename, upload, download), storage chart with "Make room", and the console's screenshots and videos
|
||||
- ✅ **Phone and browser:** use it from your phone with a QR code, and send links from your browser with the optional extension
|
||||
|
||||
### 🩺 When something goes wrong
|
||||
- ✅ **Diagnosis** on failed transfers: cause, error codes and how to fix it
|
||||
- ✅ **Launch check:** if an app closes on launch, it checks the folder (executable, permissions, firmware, backports, LZ4 packing) and shows recent logs and captures
|
||||
- ✅ **Problem report** in one click (.zip, no passwords) to share when asking for help
|
||||
- ✅ **Warnings:** your PS5 firmware always visible, speed-drop alerts, "Why is it slow?" network check, and it loads ftpsrv/BFpilot from the app
|
||||
- ✅ **Self-updating**, with a welcome window and a user guide, in English and Spanish
|
||||
|
||||
## Requirements
|
||||
|
||||
- **PC:** Windows 10/11. Get the `-portable-windows.zip` (Python included, nothing to install), or the plain `.zip` with [Python 3.9+](https://www.python.org/downloads/) installed (tick "Add python.exe to PATH"). For extracting on the PC, also install [7-Zip](https://www.7-zip.org/).
|
||||
- **PC:** Windows 10/11. Nothing else to install: the download includes everything it needs. Optional: [7-Zip](https://www.7-zip.org/), only if you want to extract on the PC instead of on the console.
|
||||
- **Jailbroken PS5:**
|
||||
- An FTP server, for example [ftpsrv](https://github.com/ps5-payload-dev/ftpsrv) on port 2121.
|
||||
- [BFpilot](https://github.com/ItsBlurf/BFpilot) on port 5905.
|
||||
@@ -49,10 +40,13 @@ An all-in-one Windows tool for jailbroken PS5 consoles: it **downloads, converts
|
||||
|
||||
## Getting started
|
||||
|
||||
1. Download the `-portable-windows.zip` (or the plain `.zip` if you have Python) from the latest [release](../../releases) and extract it anywhere.
|
||||
2. Run `Crear accesos directos.bat` ("create shortcuts"). It adds a desktop icon and a "Send to → PS5 Directo" entry.
|
||||
3. Open **PS5 Directo** from the desktop. The language follows Windows; switch it with the **English / Español** button at the top.
|
||||
4. Follow the welcome guide, enter your PS5's IP in Settings, then paste links or drop files.
|
||||
1. Download **`PS5Directo-X.Y.Z-Setup.exe`** from the latest [release](../../releases), open it and click **Install**. No admin rights needed, nothing else to install.
|
||||
2. Open **PS5 Directo** from the desktop or the Start menu. The language follows Windows; switch it with the **English / Español** button at the top.
|
||||
3. Follow the welcome guide, enter your PS5's IP in Settings, then paste links or drop files.
|
||||
|
||||
> If Windows shows "Windows protected your PC", click **More info → Run anyway**. The installer isn't signed (signing costs money); it's the usual warning for small free programs.
|
||||
>
|
||||
> Rather not install? Download `PS5Directo-X.Y.Z-Windows.zip` instead, extract it anywhere and run `Crear accesos directos.bat`. Both update themselves the same way.
|
||||
|
||||
> **About BFpilot and permissions:** up to at least v0.4.4, BFpilot's archive extractor leaves files without the execute bit, so the PS5 refuses to launch them (CE-107750-0). This also happens when you extract from BFpilot's own web UI. PS5 Directo fixes it automatically after every extraction. For content you already have, use **Settings → Fix permissions**.
|
||||
|
||||
@@ -60,7 +54,7 @@ The full guide is in [README_EN.txt](README_EN.txt) (Spanish: [LEEME.txt](LEEME.
|
||||
|
||||
## Publishing a release
|
||||
|
||||
Bump `VERSION` in `app.py`, add the notes to `LEEME.txt` / `README_EN.txt`, then push a tag (`git tag v1.20.3 && git push --tags`). The GitHub Action builds both zips (plain and portable with Python) and creates the release.
|
||||
Bump `VERSION` in `app.py`, add the notes to `LEEME.txt` / `README_EN.txt`, then push a tag (`git tag v1.20.3 && git push --tags`). The GitHub Action builds the installer `PS5Directo-X.Y.Z-Setup.exe` and `PS5Directo-X.Y.Z-Windows.zip` (both with Python included) and creates the release. The installer script is `installer/PS5Directo.iss` (Inno Setup).
|
||||
|
||||
## Disclaimer
|
||||
|
||||
@@ -79,12 +73,19 @@ Independent project, not affiliated with Sony or with the authors of the tools m
|
||||
|
||||
Herramienta todo en uno para Windows y PS5 con jailbreak: **descarga, convierte y envía** en un solo paso. Tal cual, los archivos van a la consola por FTP **mientras se descargan**, sin pasar por el disco del PC; o los **convierte sobre la marcha** (LZ4, `.exfat`, carpeta, `.ffpfsc`…) dentro del mismo trabajo, sin usar otro programa. Descomprime en la consola (BFpilot) o en el PC (7-Zip), coloca las aplicaciones en `/data/homebrew` para que ShadowMountPlus las muestre en el menú, y te deja ver la biblioteca de la consola con portadas y controlarlo todo desde el móvil.
|
||||
|
||||
**Novedades 1.20.3:** ventana de bienvenida, Biblioteca con lo instalado (PS4 y PS5) y con tu colección del PC/NAS, copias de seguridad de partidas y ajustes, capturas y vídeos, diagnóstico de errores con informe, torrents y avisos de actualización automáticos.
|
||||
**Un programa en vez de tres:** descarga y envío a la vez sin ocupar el PC, o conversión sobre la marcha (carpeta, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs`, `.fpkg`) con [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge). Vale con enlaces, `ftp://`, torrents o archivos del PC; une partes, descomprime y lo deja colocado.
|
||||
|
||||
**Novedades 1.20:** pestaña Biblioteca con portadas y aviso de firmware, convertidor de formatos con [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge) (carpeta, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs` y `.fpkg`), firmware de tu PS5 siempre a la vista, «Descargar de nuevo», pregunta si ya está en la consola, comprobación con `.sfv`/`.md5`, "Hacer sitio", cargar ftpsrv/BFpilot desde el programa, diagnóstico de red, acceso desde el móvil con QR y programar la cola.
|
||||
**Tu consola desde el PC y el móvil:** Biblioteca con portadas, versión y firmware (también lo instalado de PS4 y PS5), vista «En tu PC» para enviar lo que falta, copias de seguridad de partidas y ajustes, explorador de archivos, espacio, capturas y modo móvil con QR.
|
||||
|
||||
**Requisitos:** Windows 10/11. Descarga el `-portable-windows.zip` (trae Python, no hay que instalar nada) o el `.zip` normal con [Python 3.9+](https://www.python.org/downloads/). Para descomprimir en el PC, [7-Zip](https://www.7-zip.org/). En la PS5: servidor FTP ([ftpsrv](https://github.com/ps5-payload-dev/ftpsrv)), [BFpilot](https://github.com/ItsBlurf/BFpilot) y [ShadowMountPlus](https://github.com/drakmor/ShadowMountPlus).
|
||||
**Cuando algo falla:** diagnóstico de errores con causa y solución, «Comprobar» si algo se cierra al abrirlo, informe de fallo en un clic y avisos automáticos de versiones y de bajadas de velocidad.
|
||||
|
||||
**Uso:** descarga el `.zip` de la última [release](../../releases), ejecuta `Crear accesos directos.bat` y abre **PS5 Directo** desde el escritorio. La guía completa está en [LEEME.txt](LEEME.txt).
|
||||
**Requisitos:** Windows 10/11, sin instalar nada más: la descarga lo trae todo. Opcional: [7-Zip](https://www.7-zip.org/), solo si quieres descomprimir en el PC en vez de en la consola. En la PS5: servidor FTP ([ftpsrv](https://github.com/ps5-payload-dev/ftpsrv)), [BFpilot](https://github.com/ItsBlurf/BFpilot) y [ShadowMountPlus](https://github.com/drakmor/ShadowMountPlus).
|
||||
|
||||
**Cómo instalarlo:**
|
||||
1. Descarga **`PS5Directo-X.Y.Z-Setup.exe`** de la última [release](../../releases), ábrelo y pulsa **Instalar**. No pide permisos de administrador ni hay que instalar nada más.
|
||||
2. Abre **PS5 Directo** desde el escritorio o el menú Inicio.
|
||||
3. Sigue la ventana de bienvenida y pon la IP de tu PS5 en Ajustes.
|
||||
|
||||
Si Windows dice «Windows protegió su PC», pulsa **Más información → Ejecutar de todos modos** (el instalador no está firmado, que cuesta dinero; es el aviso normal en programas pequeños y gratuitos). ¿Prefieres no instalar? Descarga el `.zip`, descomprímelo y ejecuta `Crear accesos directos.bat`. La guía completa está en [LEEME.txt](LEEME.txt).
|
||||
|
||||
**Aviso:** proyecto independiente, sin relación con Sony ni con los autores de las herramientas citadas. No incluye contenido de terceros, claves ni archivos de Sony, ni enlaces a sitios de descargas. Úsalo solo con contenido que tengas derecho a usar (copias de seguridad propias y homebrew). No hace el jailbreak ni salta ninguna protección: solo copia archivos a una consola que ya has modificado tú. No se da ayuda para conseguir contenido sin licencia. Se ofrece tal cual, sin garantías, y lo que hagas con él es responsabilidad tuya.
|
||||
+28
-9
@@ -6,7 +6,7 @@ QUICK START (5 MINUTES)
|
||||
You need: a PS5 that is already jailbroken (PS5 Directo doesn't do that)
|
||||
and a Windows 10/11 PC on the same network.
|
||||
|
||||
1. Download PS5Directo-X.Y.Z-portable-windows.zip from the GitHub Releases
|
||||
1. Download PS5Directo-X.Y.Z-Windows.zip from the GitHub Releases
|
||||
page (nothing else to install) and extract it, e.g. into Documents.
|
||||
2. Double-click "PS5 Directo.vbs". If Windows asks whether to open a file
|
||||
downloaded from the internet, click "Open".
|
||||
@@ -96,8 +96,7 @@ jailbroken and that you know how to load payloads (.elf).
|
||||
|
||||
ON THE PC
|
||||
- Windows 10 or 11.
|
||||
- Python 3.9 or newer: https://www.python.org/downloads/
|
||||
When installing, tick "Add python.exe to PATH".
|
||||
- Nothing else: the installer includes everything (Python too).
|
||||
- 7-Zip (only for "Extract on the PC"): https://www.7-zip.org/
|
||||
|
||||
ON THE PS5 (loaded as payloads, for example with Payload Manager:
|
||||
@@ -130,9 +129,15 @@ BFpilot's own web page, without PS5 Directo.
|
||||
|
||||
FIRST TIME
|
||||
----------
|
||||
Double-click "Crear accesos directos.bat" ("create shortcuts"). It adds:
|
||||
- A "PS5 Directo" icon on the desktop.
|
||||
Open PS5Directo-X.Y.Z-Setup.exe and click "Install". No admin rights
|
||||
needed. It adds:
|
||||
- A "PS5 Directo" icon on the desktop and in the Start menu.
|
||||
- "Send to > PS5 Directo" in the right-click menu of your files.
|
||||
If Windows says "Windows protected your PC": "More info" > "Run anyway"
|
||||
(the installer isn't signed; it's the usual warning for small free
|
||||
programs).
|
||||
With the .zip instead of the installer: extract it anywhere and
|
||||
double-click "Crear accesos directos.bat" ("create shortcuts").
|
||||
From then on, open PS5 Directo from the desktop icon: it runs in its own
|
||||
window, with no tabs and no black console window.
|
||||
|
||||
@@ -306,14 +311,28 @@ PAYLOADS, DIAGNOSTICS, PHONE AND SCHEDULE
|
||||
- "Schedule" (queue): start at a set time and sleep or shut down the PC when
|
||||
done. The PC doesn't go to sleep while transfers are running.
|
||||
|
||||
PORTABLE VERSION
|
||||
WHAT TO DOWNLOAD
|
||||
----------------
|
||||
Each release has PS5Directo-X.Y.Z.zip (needs Python installed) and
|
||||
PS5Directo-X.Y.Z-portable-windows.zip, which includes Python: extract and run.
|
||||
- PS5Directo-X.Y.Z-Setup.exe: the installer. This is the one to get.
|
||||
Everything included (Python too): open it, click "Install", done.
|
||||
- PS5Directo-X.Y.Z-Windows.zip: the same without installing, if you'd
|
||||
rather extract it to a folder. "Update" uses it too.
|
||||
To remove it: Windows Settings > Apps > PS5 Directo > Uninstall. Your
|
||||
settings are kept in case you install it again.
|
||||
|
||||
WHAT'S NEW
|
||||
----------
|
||||
1.20.3 - Library: "Check" on each app, for when it won't open or closes on
|
||||
1.20.4 - Its own taskbar icon: the window no longer hides inside the Edge
|
||||
or Chrome icon, and pinning it pins PS5 Directo.
|
||||
- If it's already open and you open it again, it brings the existing
|
||||
window to the front instead of opening another one.
|
||||
- If you pinned it before this version, unpin the old icon and pin
|
||||
the new one (right-click the taskbar icon > Pin).
|
||||
|
||||
1.20.3 - Windows installer (PS5Directo-1.20.3-Setup.exe): double-click,
|
||||
"Install", done, everything included. The .zip is still there if
|
||||
you'd rather not install.
|
||||
- Library: "Check" on each app, for when it won't open or closes on
|
||||
launch. It checks the folder (executable, param.json, permissions,
|
||||
firmware, backports and LZ4 packing), shows logs (.log) and captures
|
||||
from the last minutes, explains the error code shown on the TV and
|
||||
|
||||
@@ -24,7 +24,7 @@ sys.path.insert(0, HERE)
|
||||
import engine as E # noqa: E402
|
||||
import features as F # noqa: E402
|
||||
|
||||
VERSION = "1.20.3"
|
||||
VERSION = "1.20.4"
|
||||
# Repositorio de GitHub donde se publican las versiones (usuario/nombre). Si lo rellenas,
|
||||
# todas las copias buscan actualizaciones ahi sin tener que configurar nada.
|
||||
DEFAULT_REPO = "jstrdev/ps5directo"
|
||||
@@ -5634,7 +5634,10 @@ def github_latest(repo):
|
||||
j = json.load(r)
|
||||
url = None
|
||||
zips = [a for a in j.get("assets") or [] if a.get("name", "").lower().endswith(".zip")]
|
||||
zips.sort(key=lambda a: "portable" in a.get("name", "").lower())
|
||||
# el mas ligero primero: "without-Python" (o el normal de antes); el que trae Python, el ultimo
|
||||
zips.sort(key=lambda a: (0 if "without-python" in a.get("name", "").lower() else
|
||||
2 if ("portable" in a.get("name", "").lower() or "-windows.zip" in a.get("name", "").lower())
|
||||
else 1))
|
||||
if zips:
|
||||
url = zips[0].get("browser_download_url")
|
||||
url = url or j.get("zipball_url")
|
||||
@@ -6452,6 +6455,133 @@ def _find_app_browser():
|
||||
return None
|
||||
|
||||
|
||||
APP_USER_MODEL_ID = "PS5Directo.App"
|
||||
_TITLE_RX = re.compile(r"^PS5 Directo( v[\d.]+)?$")
|
||||
|
||||
|
||||
def _app_windows():
|
||||
"""Ventanas de la interfaz (modo aplicacion de Edge/Chrome). En una pestaña normal del
|
||||
navegador el titulo lleva " - Microsoft Edge" detras, asi que no se confunden."""
|
||||
if os.name != "nt":
|
||||
return []
|
||||
import ctypes
|
||||
from ctypes import wintypes
|
||||
u32 = ctypes.windll.user32
|
||||
found = []
|
||||
proto = ctypes.WINFUNCTYPE(wintypes.BOOL, wintypes.HWND, wintypes.LPARAM)
|
||||
|
||||
def cb(hwnd, _):
|
||||
try:
|
||||
if not u32.IsWindowVisible(hwnd):
|
||||
return True
|
||||
cls = ctypes.create_unicode_buffer(64)
|
||||
u32.GetClassNameW(hwnd, cls, 64)
|
||||
if cls.value != "Chrome_WidgetWin_1":
|
||||
return True
|
||||
buf = ctypes.create_unicode_buffer(256)
|
||||
u32.GetWindowTextW(hwnd, buf, 256)
|
||||
if _TITLE_RX.match(buf.value.strip()):
|
||||
found.append(hwnd)
|
||||
except Exception:
|
||||
pass
|
||||
return True
|
||||
u32.EnumWindows(proto(cb), 0)
|
||||
return found
|
||||
|
||||
|
||||
def _set_window_identity(hwnd):
|
||||
"""Le dice a Windows que esa ventana es "PS5 Directo" y no Edge: icono propio en la
|
||||
barra de tareas, y al anclarla se ancla PS5 Directo (con su icono y su acceso)."""
|
||||
import ctypes
|
||||
import uuid
|
||||
from ctypes import wintypes
|
||||
|
||||
class GUID(ctypes.Structure):
|
||||
_fields_ = [("d1", ctypes.c_ulong), ("d2", ctypes.c_ushort), ("d3", ctypes.c_ushort),
|
||||
("d4", ctypes.c_ubyte * 8)]
|
||||
|
||||
def guid(s):
|
||||
b = uuid.UUID(s).bytes_le
|
||||
g = GUID()
|
||||
ctypes.memmove(ctypes.byref(g), b, 16)
|
||||
return g
|
||||
|
||||
class PROPERTYKEY(ctypes.Structure):
|
||||
_fields_ = [("fmtid", GUID), ("pid", ctypes.c_ulong)]
|
||||
|
||||
class PROPVARIANT(ctypes.Structure):
|
||||
_fields_ = [("vt", ctypes.c_ushort), ("r1", ctypes.c_ushort), ("r2", ctypes.c_ushort),
|
||||
("r3", ctypes.c_ushort), ("p", ctypes.c_void_p), ("p2", ctypes.c_void_p)]
|
||||
|
||||
fmt = "9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3" # PKEY_AppUserModel_*
|
||||
vbs = os.path.join(HERE, "PS5 Directo.vbs")
|
||||
wscript = os.path.join(os.environ.get("WINDIR", r"C:\Windows"), "System32", "wscript.exe")
|
||||
props = []
|
||||
if os.path.isfile(vbs):
|
||||
props += [(2, '"%s" "%s"' % (wscript, vbs)), # RelaunchCommand
|
||||
(3, os.path.join(HERE, "web", "ps5directo.ico")), # RelaunchIconResource
|
||||
(4, "PS5 Directo")] # RelaunchDisplayName
|
||||
props.append((5, APP_USER_MODEL_ID)) # ID (el ultimo)
|
||||
|
||||
shell32 = ctypes.windll.shell32
|
||||
shell32.SHGetPropertyStoreForWindow.argtypes = [wintypes.HWND, ctypes.POINTER(GUID),
|
||||
ctypes.POINTER(ctypes.c_void_p)]
|
||||
store = ctypes.c_void_p()
|
||||
iid = guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99") # IPropertyStore
|
||||
if shell32.SHGetPropertyStoreForWindow(hwnd, ctypes.byref(iid), ctypes.byref(store)) != 0 or not store:
|
||||
return False
|
||||
vtbl = ctypes.cast(store, ctypes.POINTER(ctypes.POINTER(ctypes.c_void_p)))[0]
|
||||
set_value = ctypes.WINFUNCTYPE(ctypes.c_long, ctypes.c_void_p, ctypes.POINTER(PROPERTYKEY),
|
||||
ctypes.POINTER(PROPVARIANT))(vtbl[6])
|
||||
commit = ctypes.WINFUNCTYPE(ctypes.c_long, ctypes.c_void_p)(vtbl[7])
|
||||
release = ctypes.WINFUNCTYPE(ctypes.c_ulong, ctypes.c_void_p)(vtbl[2])
|
||||
ok = True
|
||||
try:
|
||||
for pid, text in props:
|
||||
key = PROPERTYKEY(guid(fmt), pid)
|
||||
s = ctypes.create_unicode_buffer(text)
|
||||
pv = PROPVARIANT()
|
||||
pv.vt = 31 # VT_LPWSTR (SetValue hace su propia copia)
|
||||
pv.p = ctypes.cast(s, ctypes.c_void_p).value
|
||||
ok = set_value(store, ctypes.byref(key), ctypes.byref(pv)) == 0 and ok
|
||||
commit(store)
|
||||
finally:
|
||||
release(store)
|
||||
return ok
|
||||
|
||||
|
||||
def taskbar_watch():
|
||||
"""Pone la identidad de PS5 Directo a cada ventana nueva de la interfaz."""
|
||||
done = set()
|
||||
while True:
|
||||
try:
|
||||
for h in _app_windows():
|
||||
if h not in done:
|
||||
if _set_window_identity(h):
|
||||
done.add(h)
|
||||
except Exception as e:
|
||||
print("Barra de tareas:", e)
|
||||
return
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
def focus_window():
|
||||
"""Si la ventana ya esta abierta, la trae al frente (en vez de abrir otra). True si habia."""
|
||||
try:
|
||||
import ctypes
|
||||
u32 = ctypes.windll.user32
|
||||
wins = _app_windows()
|
||||
if not wins:
|
||||
return False
|
||||
h = wins[0]
|
||||
if u32.IsIconic(h):
|
||||
u32.ShowWindow(h, 9) # SW_RESTORE
|
||||
u32.SetForegroundWindow(h)
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def open_window(url):
|
||||
"""Abre la interfaz como ventana de aplicacion. Devuelve el proceso o None."""
|
||||
exe = _find_app_browser()
|
||||
@@ -6590,7 +6720,7 @@ def main():
|
||||
if paths:
|
||||
forward_to_running(ses, paths)
|
||||
print("Anadido a la cola de PS5 Directo (ya estaba abierto)")
|
||||
else:
|
||||
elif "--browser" in sys.argv or not focus_window():
|
||||
open_window(ses[0] + "/#t=" + ses[1]) # ya funcionaba: solo enseno la ventana
|
||||
sys.exit(3)
|
||||
load_state()
|
||||
@@ -6622,6 +6752,8 @@ def main():
|
||||
if "--no-browser" not in sys.argv:
|
||||
threading.Timer(0.5, lambda: open_window(url)).start()
|
||||
threading.Thread(target=watch_ui, daemon=True).start()
|
||||
if os.name == "nt":
|
||||
threading.Thread(target=taskbar_watch, daemon=True).start()
|
||||
try:
|
||||
srv.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
; Instalador de PS5 Directo (Inno Setup 6). Lo compila GitHub Actions en cada version:
|
||||
; ISCC /DMyVer=X.Y.Z installer\PS5Directo.iss
|
||||
; Espera la carpeta del programa ya montada (con Python incluido) en dist\PS5Directo
|
||||
; y deja dist\PS5Directo-X.Y.Z-Setup.exe.
|
||||
; Se instala para el usuario actual (sin pedir permisos de administrador), en
|
||||
; %LOCALAPPDATA%\Programs\PS5 Directo, para que «Actualizar» pueda escribir en la carpeta.
|
||||
|
||||
#ifndef MyVer
|
||||
#define MyVer "0.0.0"
|
||||
#endif
|
||||
#ifndef SrcDir
|
||||
#define SrcDir "..\dist\PS5Directo"
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
AppId={{BD789BF5-0254-4A4C-92CB-332BB22CEE42}
|
||||
AppName=PS5 Directo
|
||||
AppVersion={#MyVer}
|
||||
AppVerName=PS5 Directo {#MyVer}
|
||||
AppPublisher=PS5 Directo
|
||||
AppPublisherURL=https://github.com/jstrdev/ps5directo
|
||||
AppSupportURL=https://github.com/jstrdev/ps5directo/issues
|
||||
AppUpdatesURL=https://github.com/jstrdev/ps5directo/releases
|
||||
DefaultDirName={localappdata}\Programs\PS5 Directo
|
||||
DefaultGroupName=PS5 Directo
|
||||
DisableProgramGroupPage=yes
|
||||
DisableReadyPage=no
|
||||
DisableDirPage=yes
|
||||
UsePreviousAppDir=yes
|
||||
PrivilegesRequired=lowest
|
||||
ArchitecturesAllowed=x64compatible
|
||||
ArchitecturesInstallIn64BitMode=x64compatible
|
||||
MinVersion=10.0
|
||||
OutputDir=..\dist
|
||||
OutputBaseFilename=PS5Directo-{#MyVer}-Setup
|
||||
SetupIconFile={#SrcDir}\web\ps5directo.ico
|
||||
WizardSmallImageFile=small.bmp,small2x.bmp
|
||||
UninstallDisplayIcon={app}\web\ps5directo.ico
|
||||
UninstallDisplayName=PS5 Directo
|
||||
Compression=lzma2/max
|
||||
SolidCompression=yes
|
||||
WizardStyle=modern
|
||||
CloseApplications=yes
|
||||
RestartApplications=no
|
||||
ShowLanguageDialog=no
|
||||
LanguageDetectionMethod=uilanguage
|
||||
|
||||
[Languages]
|
||||
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
|
||||
Name: "en"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Files]
|
||||
Source: "{#SrcDir}\*"; DestDir: "{app}"; Excludes: "Crear accesos directos.bat,__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
|
||||
[InstallDelete]
|
||||
; restos de una version anterior que ya no se usan
|
||||
Type: files; Name: "{app}\Crear accesos directos.bat"
|
||||
|
||||
[Icons]
|
||||
Name: "{autoprograms}\PS5 Directo"; Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; IconFilename: "{app}\web\ps5directo.ico"; Comment: "PS5 Directo"; AppUserModelID: "PS5Directo.App"
|
||||
Name: "{autodesktop}\PS5 Directo"; Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; IconFilename: "{app}\web\ps5directo.ico"; Comment: "PS5 Directo"; AppUserModelID: "PS5Directo.App"
|
||||
Name: "{usersendto}\PS5 Directo"; Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; IconFilename: "{app}\web\ps5directo.ico"; Comment: "PS5 Directo"; AppUserModelID: "PS5Directo.App"
|
||||
|
||||
[Run]
|
||||
Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; Description: "{cm:LaunchProgram,PS5 Directo}"; Flags: postinstall nowait skipifsilent
|
||||
|
||||
[UninstallRun]
|
||||
; cierra PS5 Directo si sigue abierto, para poder borrar sus archivos
|
||||
Filename: "{sys}\WindowsPowerShell\v1.0\powershell.exe"; Parameters: "-NoProfile -ExecutionPolicy Bypass -Command ""Get-Process python,pythonw -ErrorAction SilentlyContinue | Where-Object {{ $_.Path -like '{app}\*' } | Stop-Process -Force"""; Flags: runhidden; RunOnceId: "CerrarPS5Directo"
|
||||
|
||||
[UninstallDelete]
|
||||
; tambien lo que añadio «Actualizar» despues de instalar. Los ajustes del usuario
|
||||
; (carpeta .ps5directo) no se tocan.
|
||||
Type: filesandordirs; Name: "{app}"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
Reference in new issue
Block a user