feat: 初始化 ps5-payloads-atlas 聚合清单

聚合 phantomptr/ps5upload 与 itsPLK/ps5-payloads-mirror 两边的 payload 元数据,
输出 ps5-payload-manager 兼容的 payloads.json:

- 顶层 name 在 payloads 之前;item 字段 name/filename/url/description/version/category/checksum。
- 数据全部采集自真实上游仓库(GitHub / Forgejo release),不经镜像。
- 不下载、不发布任何二进制;GitHub Action 每天 0:00 UTC 自动刷新 payloads.json + README。
- checksum 取 GitHub Release API 的 digest 字段(零下载);Forgejo 与无 digest 资产留空。
- sources.json 为 curated 上游种子,运行时再拉 ps5upload CATALOGUE 做展示名/描述富化。
- /releases/latest 404 时回退 /releases[0],覆盖纯 pre-release 仓库。
- zip-only 仓库按真实 zip 资产记录 filename/url。
This commit is contained in:
github-actions[bot] committed 2026-07-05 21:50:46 +08:00
commit 5833e1f5ea
6 files changed
+933

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
name: Refresh Payload Catalogue
on:
schedule:
- cron: '0 0 * * *' # Daily at midnight UTC
workflow_dispatch:
permissions:
contents: write
jobs:
refresh:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Aggregate catalogue
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: python update_payloads.py
- name: Commit and push
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add payloads.json README.md
git commit -m "Auto-refresh payload catalogue" || echo "No changes to commit"
git push
+2
View File
@@ -0,0 +1,2 @@
payloads/
.DS_Store
+57
View File
@@ -0,0 +1,57 @@
# ps5-payload-catalogue
Aggregated PS5 payload catalogue in [ps5-payload-manager](https://github.com/itsPLK/ps5-payload-manager) custom-repository format.
Data is sourced directly from real upstream release repositories (not mirrors). The catalogue merges entries discovered in:
- [itsPLK/ps5-payloads-mirror](https://github.com/itsPLK/ps5-payloads-mirror)
- [phantomptr/ps5upload](https://github.com/phantomptr/ps5upload) (`payloads.rs` CATALOGUE)
A GitHub Action refreshes `payloads.json` daily at 00:00 UTC.
## Files
- `payloads.json` — the catalogue consumed by ps5-payload-manager (`Settings → Manage Sources → Add Source`, paste the raw URL).
- `sources.json` — curated seed list of upstream repos that the aggregator reads.
- `update_payloads.py` — the aggregator.
## Notes
- Checksums come from the GitHub Release API `digest` field. Non-GitHub repos (e.g. Forgejo on `git.etawen.dev`) and assets without a published digest have an empty `checksum`.
- `LightningMods/Itemzflow` is intentionally excluded — its releases ship no `.elf`/`.bin` asset.
- Pre-release-only repos fall back to the most recent pre-release.
<!-- PAYLOADS_START -->
| Name | Version | Category | Description | Last Updated | Source |
| --- | --- | --- | --- | --- | --- |
| **kstuff-lite (EchoStretch)** | `v1.09` | Kernel | Kernel patcher for the full PS5 firmware range. Resolves kernel symbols at runtime via the SDK's NID table, so the same binary covers FW 1.00 → 12.x. Required by ShadowMountPlus and most other privileged payloads. Load this first. | `2026-07-04` | [Source](https://github.com/EchoStretch/kstuff-lite/releases) |
| **kstuff-lite (drakmor — fpkg-optimized)** | `1.2-dr-test1` | Kernel | Fork of EchoStretch/kstuff-lite with a hot path for .ffpkg (UFS) + PFS mounts and lower overhead in repeated mount/unmount cycles. Recent builds extended firmware coverage through FW 12.xx (the '12.xx Support' update) on top of the original 3.00→10.01 range — check the release notes for your exact firmware. Adds an option to disable automatic mounting (noautomount) for a controlled startup. Recommended when your primary workflow is ShadowMount+ with .ffpkg/.exfat/PFS images. Same load-first ordering as any other kstuff: must boot before ShadowMount+ or ps5upload. | `2026-05-31` | [Source](https://github.com/drakmor/kstuff-lite/releases) |
| **kstuff** | `v1.6.7` | Kernel | Full build of kstuff: dynamically patches the PS5 kernel to bypass security. | `2026-01-04` | [Source](https://github.com/EchoStretch/kstuff/releases) |
| **kstuff-toggle** | `0.6` | Kernel | Boost homebrew game performance on your PS5 by disabling Kstuff after launching the game. Ships as a zip; extract kstuff-toggle-3.elf after download. | `2026-05-07` | [Source](https://github.com/EchoStretch/kstuff-toggle/releases) |
| **ShadowMount+** | `1.6beta16` | Kernel | Watches scan folders (/mnt/usb*, /mnt/ext*, /data/homebrew, /mnt/shadowmnt) AND /data/shadowmount/manual.lst for game folders and .ffpkg/.exfat/.ffpfs/.ffpfsc images, then auto-mounts (LVD/MD), stages sce_sys + appmeta + trophy data, and registers them on the home screen — no per-image command, it's fully autonomous. Newer builds add nested/compressed-PFS (.ffpfsc) containers, trophy-data copy, and a watched manual-install list. Includes fakelib (backports) overlay + per-game kstuff autopause. Needs kstuff-lite v1.07+ loaded first. | `2026-06-28` | [Source](https://github.com/drakmor/ShadowMountPlus/releases) |
| **etaHEN** | `2.5B` | Kernel | Long-running homebrew enabler with toolbox features. Faster app jailbreak than the on-the-fly path; provides the HijackerCommand IPC many homebrew apps expect on :9028. | `2025-12-25` | [Source](https://github.com/etaHEN/etaHEN/releases) |
| **ftpsrv** | `v0.20` | File Transfer | Lightweight FTP server on :2121 with SELF↔ELF auto-decryption and remount-RW SITE commands. Lets you browse the PS5's filesystem from any FTP client. | `2026-05-12` | [Source](https://github.com/ps5-payload-dev/ftpsrv/releases) |
| **ftpsrv (drakmor)** | `1.15-ng-stable` | Misc | drakmor's fork of ftpsrv. | `2026-04-08` | [Source](https://github.com/drakmor/ftpsrv/releases) |
| **websrv** | `v0.33` | Networking | HTTP server on :8080 serving a homebrew launcher page. Pairs with the homebrew bundles distributed by ps5-payload-dev. | `2026-06-28` | [Source](https://github.com/ps5-payload-dev/websrv/releases) |
| **shsrv (telnet shell + ELF launcher + gdb)** | `v0.19` | Networking | Telnet server on :2323 with 42 POSIX-ish commands (sfoinfo, file, hexdump, find with -exec, etc.) plus hbldr (launch unsigned ELF with full A/V) and hbdbg (gdb-style debugger). Our Shell tab covers the same 42 built-ins via :9114 authenticated FTX2; install shsrv if you want hbldr/hbdbg or you prefer telnet access. Connect via `telnet <ps5-ip> 2323`. | `2026-06-28` | [Source](https://github.com/ps5-payload-dev/shsrv/releases) |
| **klogsrv** | `v0.8` | Kernel | Streams /dev/klog over TCP :3232 and tees it to /data/klog/klog.log (10-backup rotation). Useful for capturing kernel-log activity that happens while the ps5upload desktop app is closed, or for tailing klog via plain netcat without our payload. | `2026-05-12` | [Source](https://github.com/ps5-payload-dev/klogsrv/releases) |
| **elfldr** | `v0.23` | Launcher | An ELF loader for jailbroken PS5s that accepts payloads on port 9021. | `2026-05-12` | [Source](https://github.com/ps5-payload-dev/elfldr/releases) |
| **ps5-app-dumper** | `v1.10` | Launcher | Dumps installed PS5 apps to USB or internal storage in fakepkg/folder format. Reads config from /data/ps5-app-dumper/config.ini. | `2026-05-03` | [Source](https://github.com/EchoStretch/ps5-app-dumper/releases) |
| **nanoDNS** | `0.3` | Networking | A minimal DNS server that runs on the PS5 (UDP :53). Ships blocking PlayStation Network + update domains by default (0.0.0.0), and can redirect any domain to a LAN IP — handy for staying offline-friendly while jailbroken. Point the console's DNS at it (set bind=0.0.0.0 in the ini to serve the LAN). Config: /data/nanodns/nanodns.ini (auto-created with sane defaults). PS5 build only — never the -ps4 asset. | `2026-06-03` | [Source](https://github.com/drakmor/nanoDNS/releases) |
| **Ghostpad** | `v1.0.0` | Misc | Creates a virtual PS5 controller on the console and redirects input to it — useful for input automation, remote control, and accessibility setups. Send the payload to start it; pair it with the upstream's companion app for driving the virtual pad. | `2026-05-31` | [Source](https://github.com/StonedModder/Ghostpad/releases) |
| **ezremote-DPI (install daemon)** | `1.04` | Launcher | Long-lived loopback install daemon (127.0.0.1:9040). Owns Sony's PlayGo/AppInstUtil install state machine so installs don't evaporate when the calling process exits. Sonicloader and ezremote-client both use this as their primary install path. Once installed, ps5upload's install runner will offer a 'DPI' method that proxies to it (planned for follow-up). | `2025-07-01` | [Source](https://github.com/cy33hc/ps5-ezremote-dpi/releases) |
| **CheatRunner** | `v0.14` | Misc | Loads and applies game cheats on the PS5. Send it like any other payload, then browse and toggle cheats for supported titles on the console. | `2026-06-18` | [Source](https://github.com/notmaj0r/CheatRunner/releases) |
| **Lapy JB Daemon** | `v1.2` | Kernel | Standalone homebrew jailbreak daemon for PS5. Mimics etaHEN's jailbreak-on-demand API. Multi-firmware (3.00 to 12.00). No etaHEN required. Upstream voidwhisper/lapy-jb-daemon on git.etawen.dev is offline; this GitHub mirror is the live source. | `2026-06-01` | [Source](https://github.com/itsPLK/PS5-Lapy-JB-Daemon/releases) |
| **ps5debug-NG** | `1.3.0` | Debugger | PS5 debugger payload — userland TCP wire-protocol server hosted inside SceShellCore. | `2026-06-21` | [Source](https://github.com/OpenSourcereR-dev/ps5debug-NG/releases) |
| **zftpd** | `v1.5.0` | File Transfer | Zero-copy FTP/HTTP server. | `2026-06-14` | [Source](https://github.com/seregonwar/zftpd/releases) |
| **pldmgr** | `v0.3.1` | Networking | A modern, web-based dashboard to easily manage, import, and automatically load payloads on your PS5. | `2026-06-06` | [Source](https://github.com/itsPLK/pldmgr/releases) |
| **ps5-linux-loader** | `v2.3` | Kernel | Linux payload implementing HV exploits to run a custom bootloader. | `2026-07-01` | [Source](https://github.com/ps5-linux/ps5-linux-loader/releases) |
| **BackPork** | `0.1` | Misc | Lets you sideload system libraries into PS5 games. | `2026-04-30` | [Source](https://github.com/BestPig/BackPork/releases) |
| **Garlic Worker (community save processor)** | `v1.1.6` | Save Manager | Background worker that drains the community save-decryption queue from garlicsaves.com. Handles both PS4 and PS5 saves natively. **Privacy notice**: connects to garlicsaves.com and processes other users' encrypted save files. Off by default — install + run manually if you want to contribute back to the community queue. | `2026-07-04` | [Source](https://git.etawen.dev/earthonion/garlic-worker/releases) |
| **Garlic SaveMgr (decrypt your own saves)** | `v1.10` | Save Manager | On-console save decrypt/encrypt daemon. Lets you back up saves in plaintext, edit them on PC, and re-encrypt for the same console. No network — operates purely on saves you already own. Companion to ps5upload's Saves tab; install this for round-trip plaintext editing workflows. | `2026-06-11` | [Source](https://git.etawen.dev/earthonion/garlic-savemgr/releases) |
| **NP Fake Sign-in** | `v1.3` | Kernel | Headless payload that registers PS5 user slots directly via the system registry. Replaces having to sign into a real PSN account just to set up local users — handy for fresh jailbreaks, secondary accounts, or test profiles. One-shot ELF: send, runs, exits. | `2026-05-15` | [Source](https://git.etawen.dev/earthonion/np-fake-signin/releases) |
<!-- PAYLOADS_END -->
## Support & Suggestions
If you have suggestions for a new payload or a payload is mis-categorised, please open an issue.
+291
View File
@@ -0,0 +1,291 @@
{
"name": "PS5 Payload Catalogue",
"payloads": [
{
"name": "kstuff-lite (EchoStretch)",
"filename": "kstuff.elf",
"url": "https://github.com/EchoStretch/kstuff-lite/releases/download/v1.09/kstuff.elf",
"description": "Kernel patcher for the full PS5 firmware range. Resolves kernel symbols at runtime via the SDK's NID table, so the same binary covers FW 1.00 → 12.x. Required by ShadowMountPlus and most other privileged payloads. Load this first.",
"version": "v1.09",
"category": "Kernel",
"checksum": "ec5212794dc6e44ee8e70fd0549abec6d3dac8c3e03ddbeafd9f869ffe97d4e8",
"last_update": "2026-07-04",
"source": "https://github.com/EchoStretch/kstuff-lite/releases"
},
{
"name": "kstuff-lite (drakmor — fpkg-optimized)",
"filename": "kstuff.elf",
"url": "https://github.com/drakmor/kstuff-lite/releases/download/1.2-dr-test1/kstuff.elf",
"description": "Fork of EchoStretch/kstuff-lite with a hot path for .ffpkg (UFS) + PFS mounts and lower overhead in repeated mount/unmount cycles. Recent builds extended firmware coverage through FW 12.xx (the '12.xx Support' update) on top of the original 3.00→10.01 range — check the release notes for your exact firmware. Adds an option to disable automatic mounting (noautomount) for a controlled startup. Recommended when your primary workflow is ShadowMount+ with .ffpkg/.exfat/PFS images. Same load-first ordering as any other kstuff: must boot before ShadowMount+ or ps5upload.",
"version": "1.2-dr-test1",
"category": "Kernel",
"checksum": "9c1b242eaed3704ef18be45d001a2c4ebf2d9222cfe3cbb0f0c3db33309abac9",
"last_update": "2026-05-31",
"source": "https://github.com/drakmor/kstuff-lite/releases"
},
{
"name": "kstuff",
"filename": "kstuff.elf",
"url": "https://github.com/EchoStretch/kstuff/releases/download/v1.6.7/kstuff.elf",
"description": "Full build of kstuff: dynamically patches the PS5 kernel to bypass security.",
"version": "v1.6.7",
"category": "Kernel",
"checksum": "f1c1f4b2b6395644af04cbe9828aba58586acf7aacb9e01113cac92ce16e3569",
"last_update": "2026-01-04",
"source": "https://github.com/EchoStretch/kstuff/releases"
},
{
"name": "kstuff-toggle",
"filename": "kstuff-toggle.zip",
"url": "https://github.com/EchoStretch/kstuff-toggle/releases/download/0.6/kstuff-toggle.zip",
"description": "Boost homebrew game performance on your PS5 by disabling Kstuff after launching the game. Ships as a zip; extract kstuff-toggle-3.elf after download.",
"version": "0.6",
"category": "Kernel",
"checksum": "ec6b227b233810e2e9cea2895820b74b5185732d2c2153f3508a03bc68a7f14d",
"last_update": "2026-05-07",
"source": "https://github.com/EchoStretch/kstuff-toggle/releases"
},
{
"name": "ShadowMount+",
"filename": "ShadowMountPlus_1.6beta16.zip",
"url": "https://github.com/drakmor/ShadowMountPlus/releases/download/1.6beta16/ShadowMountPlus_1.6beta16.zip",
"description": "Watches scan folders (/mnt/usb*, /mnt/ext*, /data/homebrew, /mnt/shadowmnt) AND /data/shadowmount/manual.lst for game folders and .ffpkg/.exfat/.ffpfs/.ffpfsc images, then auto-mounts (LVD/MD), stages sce_sys + appmeta + trophy data, and registers them on the home screen — no per-image command, it's fully autonomous. Newer builds add nested/compressed-PFS (.ffpfsc) containers, trophy-data copy, and a watched manual-install list. Includes fakelib (backports) overlay + per-game kstuff autopause. Needs kstuff-lite v1.07+ loaded first.",
"version": "1.6beta16",
"category": "Kernel",
"checksum": "11f27b426562b4b500a2b71d0930c52fc882af4b4ea076d6d316e402a7d457ce",
"last_update": "2026-06-28",
"source": "https://github.com/drakmor/ShadowMountPlus/releases"
},
{
"name": "etaHEN",
"filename": "etaHEN-2.5B.bin",
"url": "https://github.com/etaHEN/etaHEN/releases/download/2.5B/etaHEN-2.5B.bin",
"description": "Long-running homebrew enabler with toolbox features. Faster app jailbreak than the on-the-fly path; provides the HijackerCommand IPC many homebrew apps expect on :9028.",
"version": "2.5B",
"category": "Kernel",
"checksum": "4845cac45095361b8983b14d6690622183b0dcfbf6d7fda16e161aa91ff0531e",
"last_update": "2025-12-25",
"source": "https://github.com/etaHEN/etaHEN/releases"
},
{
"name": "ftpsrv",
"filename": "ftpsrv-ps5.elf",
"url": "https://github.com/ps5-payload-dev/ftpsrv/releases/download/v0.20/ftpsrv-ps5.elf",
"description": "Lightweight FTP server on :2121 with SELF↔ELF auto-decryption and remount-RW SITE commands. Lets you browse the PS5's filesystem from any FTP client.",
"version": "v0.20",
"category": "File Transfer",
"checksum": "8f305a959fb9d70fd8d52ba88409e0d5a1632e83d4ecdd38646a0a33e54089da",
"last_update": "2026-05-12",
"source": "https://github.com/ps5-payload-dev/ftpsrv/releases"
},
{
"name": "ftpsrv (drakmor)",
"filename": "ftpsrv-ps5.elf",
"url": "https://github.com/drakmor/ftpsrv/releases/download/1.15-ng-stable/ftpsrv-ps5.elf",
"description": "drakmor's fork of ftpsrv.",
"version": "1.15-ng-stable",
"category": "Misc",
"checksum": "913a443af847b6861ec11748e2640f62d1fc1027076f576aa0ddccab8507311f",
"last_update": "2026-04-08",
"source": "https://github.com/drakmor/ftpsrv/releases"
},
{
"name": "websrv",
"filename": "websrv-ps5.elf",
"url": "https://github.com/ps5-payload-dev/websrv/releases/download/v0.33/websrv-ps5.elf",
"description": "HTTP server on :8080 serving a homebrew launcher page. Pairs with the homebrew bundles distributed by ps5-payload-dev.",
"version": "v0.33",
"category": "Networking",
"checksum": "4676a40ac4c7ca1adeb04980efa48dd33a8961446b42e6a12abfcbe96090c8ac",
"last_update": "2026-06-28",
"source": "https://github.com/ps5-payload-dev/websrv/releases"
},
{
"name": "shsrv (telnet shell + ELF launcher + gdb)",
"filename": "shsrv-ps5.elf",
"url": "https://github.com/ps5-payload-dev/shsrv/releases/download/v0.19/shsrv-ps5.elf",
"description": "Telnet server on :2323 with 42 POSIX-ish commands (sfoinfo, file, hexdump, find with -exec, etc.) plus hbldr (launch unsigned ELF with full A/V) and hbdbg (gdb-style debugger). Our Shell tab covers the same 42 built-ins via :9114 authenticated FTX2; install shsrv if you want hbldr/hbdbg or you prefer telnet access. Connect via `telnet <ps5-ip> 2323`.",
"version": "v0.19",
"category": "Networking",
"checksum": "797827b50a93dbf327abdca45063d76ea24b17e561d927f397a0b73cadb2e2bd",
"last_update": "2026-06-28",
"source": "https://github.com/ps5-payload-dev/shsrv/releases"
},
{
"name": "klogsrv",
"filename": "klogsrv-ps5.elf",
"url": "https://github.com/ps5-payload-dev/klogsrv/releases/download/v0.8/klogsrv-ps5.elf",
"description": "Streams /dev/klog over TCP :3232 and tees it to /data/klog/klog.log (10-backup rotation). Useful for capturing kernel-log activity that happens while the ps5upload desktop app is closed, or for tailing klog via plain netcat without our payload.",
"version": "v0.8",
"category": "Kernel",
"checksum": "f6eb1b415ecf3340b89a56a0cb04ba5c714430085851ada13a98012b63a5a4cf",
"last_update": "2026-05-12",
"source": "https://github.com/ps5-payload-dev/klogsrv/releases"
},
{
"name": "elfldr",
"filename": "elfldr-ps5.elf",
"url": "https://github.com/ps5-payload-dev/elfldr/releases/download/v0.23/elfldr-ps5.elf",
"description": "An ELF loader for jailbroken PS5s that accepts payloads on port 9021.",
"version": "v0.23",
"category": "Launcher",
"checksum": "092d16ee0ede0c494947efd38d1a17bbd7cc4b022d3858ea898833c188c703e8",
"last_update": "2026-05-12",
"source": "https://github.com/ps5-payload-dev/elfldr/releases"
},
{
"name": "ps5-app-dumper",
"filename": "ps5-app-dumper.elf",
"url": "https://github.com/EchoStretch/ps5-app-dumper/releases/download/v1.10/ps5-app-dumper.elf",
"description": "Dumps installed PS5 apps to USB or internal storage in fakepkg/folder format. Reads config from /data/ps5-app-dumper/config.ini.",
"version": "v1.10",
"category": "Launcher",
"checksum": "95382a9e37987d8eb931cbe5db618e77d293099ef4314e3288d9899bd5ac5c00",
"last_update": "2026-05-03",
"source": "https://github.com/EchoStretch/ps5-app-dumper/releases"
},
{
"name": "nanoDNS",
"filename": "nanodns.elf",
"url": "https://github.com/drakmor/nanoDNS/releases/download/0.3/nanodns.elf",
"description": "A minimal DNS server that runs on the PS5 (UDP :53). Ships blocking PlayStation Network + update domains by default (0.0.0.0), and can redirect any domain to a LAN IP — handy for staying offline-friendly while jailbroken. Point the console's DNS at it (set bind=0.0.0.0 in the ini to serve the LAN). Config: /data/nanodns/nanodns.ini (auto-created with sane defaults). PS5 build only — never the -ps4 asset.",
"version": "0.3",
"category": "Networking",
"checksum": "ce1c8b31036ab948da65b362a4b6f249ffca8a555fc5bc4b051ec65d041bc944",
"last_update": "2026-06-03",
"source": "https://github.com/drakmor/nanoDNS/releases"
},
{
"name": "Ghostpad",
"filename": "ghostpad.elf",
"url": "https://github.com/StonedModder/Ghostpad/releases/download/v1.0.0/ghostpad.elf",
"description": "Creates a virtual PS5 controller on the console and redirects input to it — useful for input automation, remote control, and accessibility setups. Send the payload to start it; pair it with the upstream's companion app for driving the virtual pad.",
"version": "v1.0.0",
"category": "Misc",
"checksum": "94d43a8db7ec9df6e18f0a0da25aac0f60e1a0b14d35bfff261f6f5cdeabdba1",
"last_update": "2026-05-31",
"source": "https://github.com/StonedModder/Ghostpad/releases"
},
{
"name": "ezremote-DPI (install daemon)",
"filename": "ezremote-dpi.elf",
"url": "https://github.com/cy33hc/ps5-ezremote-dpi/releases/download/1.04/ezremote-dpi.elf",
"description": "Long-lived loopback install daemon (127.0.0.1:9040). Owns Sony's PlayGo/AppInstUtil install state machine so installs don't evaporate when the calling process exits. Sonicloader and ezremote-client both use this as their primary install path. Once installed, ps5upload's install runner will offer a 'DPI' method that proxies to it (planned for follow-up).",
"version": "1.04",
"category": "Launcher",
"checksum": "54a57a7a68ee7d44064438d9a63fafc08ecbaf033dcbdee28f8f3119914ea109",
"last_update": "2025-07-01",
"source": "https://github.com/cy33hc/ps5-ezremote-dpi/releases"
},
{
"name": "CheatRunner",
"filename": "CheatRunner.elf",
"url": "https://github.com/notmaj0r/CheatRunner/releases/download/v0.14/CheatRunner.elf",
"description": "Loads and applies game cheats on the PS5. Send it like any other payload, then browse and toggle cheats for supported titles on the console.",
"version": "v0.14",
"category": "Misc",
"checksum": "5ffe8ed97fd6021cfad2b44a1be68c1b9f6e84c1e3a8d925f9e3b975235aa99f",
"last_update": "2026-06-18",
"source": "https://github.com/notmaj0r/CheatRunner/releases"
},
{
"name": "Lapy JB Daemon",
"filename": "lapy_jb_daemon-v1.2.elf",
"url": "https://github.com/itsPLK/PS5-Lapy-JB-Daemon/releases/download/v1.2/lapy_jb_daemon-v1.2.elf",
"description": "Standalone homebrew jailbreak daemon for PS5. Mimics etaHEN's jailbreak-on-demand API. Multi-firmware (3.00 to 12.00). No etaHEN required. Upstream voidwhisper/lapy-jb-daemon on git.etawen.dev is offline; this GitHub mirror is the live source.",
"version": "v1.2",
"category": "Kernel",
"checksum": "13559b858fc33cc7fa3dc89e10dccf139070d99ee5d378dd75c969293700799e",
"last_update": "2026-06-01",
"source": "https://github.com/itsPLK/PS5-Lapy-JB-Daemon/releases"
},
{
"name": "ps5debug-NG",
"filename": "ps5debug-NG_v1.3.0.elf",
"url": "https://github.com/OpenSourcereR-dev/ps5debug-NG/releases/download/1.3.0/ps5debug-NG_v1.3.0.elf",
"description": "PS5 debugger payload — userland TCP wire-protocol server hosted inside SceShellCore.",
"version": "1.3.0",
"category": "Debugger",
"checksum": "8f75fb90b45d7cc4d59147e3323577d7264cf572c78a27f76722202f492ad16a",
"last_update": "2026-06-21",
"source": "https://github.com/OpenSourcereR-dev/ps5debug-NG/releases"
},
{
"name": "zftpd",
"filename": "zftpd-ps5-zhttp-v1.5.0.elf",
"url": "https://github.com/seregonwar/zftpd/releases/download/v1.5.0/zftpd-ps5-zhttp-v1.5.0.elf",
"description": "Zero-copy FTP/HTTP server.",
"version": "v1.5.0",
"category": "File Transfer",
"checksum": "6cf6a738112fc339619ebe772690fa611f60ecdb20164a0e3f49e137277bc42b",
"last_update": "2026-06-14",
"source": "https://github.com/seregonwar/zftpd/releases"
},
{
"name": "pldmgr",
"filename": "pldmgr_v0.3.1.elf",
"url": "https://github.com/itsPLK/ps5-payload-manager/releases/download/v0.3.1/pldmgr_v0.3.1.elf",
"description": "A modern, web-based dashboard to easily manage, import, and automatically load payloads on your PS5.",
"version": "v0.3.1",
"category": "Networking",
"checksum": "518740adbacccb9094fadb07dd424c53ee290f38306449ccc9d6957fdf813c0b",
"last_update": "2026-06-06",
"source": "https://github.com/itsPLK/pldmgr/releases"
},
{
"name": "ps5-linux-loader",
"filename": "ps5-linux-loader.elf",
"url": "https://github.com/ps5-linux/ps5-linux-loader/releases/download/v2.3/ps5-linux-loader.elf",
"description": "Linux payload implementing HV exploits to run a custom bootloader.",
"version": "v2.3",
"category": "Kernel",
"checksum": "0723b5d5e09120861023e91780d9ec345a3aa2f32c8a17fdfb3a60a9e934e8a5",
"last_update": "2026-07-01",
"source": "https://github.com/ps5-linux/ps5-linux-loader/releases"
},
{
"name": "BackPork",
"filename": "ps5-backpork.elf",
"url": "https://github.com/BestPig/BackPork/releases/download/0.1/ps5-backpork.elf",
"description": "Lets you sideload system libraries into PS5 games.",
"version": "0.1",
"category": "Misc",
"checksum": "d74e4cd119b2bb1fd423f2f5b1c9a7f096b3e588c753af1ab48b983d56216a52",
"last_update": "2026-04-30",
"source": "https://github.com/BestPig/BackPork/releases"
},
{
"name": "Garlic Worker (community save processor)",
"filename": "garlic-worker-ps5.elf",
"url": "https://git.etawen.dev/earthonion/garlic-worker/releases/download/v1.1.6/garlic-worker-ps5.elf",
"description": "Background worker that drains the community save-decryption queue from garlicsaves.com. Handles both PS4 and PS5 saves natively. **Privacy notice**: connects to garlicsaves.com and processes other users' encrypted save files. Off by default — install + run manually if you want to contribute back to the community queue.",
"version": "v1.1.6",
"category": "Save Manager",
"checksum": "",
"last_update": "2026-07-04",
"source": "https://git.etawen.dev/earthonion/garlic-worker/releases"
},
{
"name": "Garlic SaveMgr (decrypt your own saves)",
"filename": "garlic-savemgr.elf",
"url": "https://git.etawen.dev/earthonion/garlic-savemgr/releases/download/v1.10/garlic-savemgr.elf",
"description": "On-console save decrypt/encrypt daemon. Lets you back up saves in plaintext, edit them on PC, and re-encrypt for the same console. No network — operates purely on saves you already own. Companion to ps5upload's Saves tab; install this for round-trip plaintext editing workflows.",
"version": "v1.10",
"category": "Save Manager",
"checksum": "",
"last_update": "2026-06-11",
"source": "https://git.etawen.dev/earthonion/garlic-savemgr/releases"
},
{
"name": "NP Fake Sign-in",
"filename": "np-fake-signin-ps5.elf",
"url": "https://git.etawen.dev/earthonion/np-fake-signin/releases/download/v1.3/np-fake-signin-ps5.elf",
"description": "Headless payload that registers PS5 user slots directly via the system registry. Replaces having to sign into a real PSN account just to set up local users — handy for fresh jailbreaks, secondary accounts, or test profiles. One-shot ELF: send, runs, exits.",
"version": "v1.3",
"category": "Kernel",
"checksum": "",
"last_update": "2026-05-15",
"source": "https://git.etawen.dev/earthonion/np-fake-signin/releases"
}
]
}
+196
View File
@@ -0,0 +1,196 @@
[
{
"host": "github.com",
"owner": "EchoStretch",
"repo": "kstuff-lite",
"asset_pattern": "kstuff",
"display_name": "kstuff-lite (EchoStretch)",
"description": "Kernel patcher for the full PS5 firmware range. Resolves kernel symbols at runtime via the SDK's NID table, so the same binary covers FW 1.00–12.x. Required by ShadowMountPlus and most other privileged payloads. Load this first."
},
{
"host": "github.com",
"owner": "drakmor",
"repo": "kstuff-lite",
"asset_pattern": "kstuff",
"display_name": "kstuff-lite (drakmor — fpkg-optimized)",
"description": "Fork of EchoStretch/kstuff-lite with a hot path for .ffpkg (UFS) + PFS mounts and lower overhead in repeated mount/unmount cycles. Adds an option to disable automatic mounting (noautomount) for a controlled startup."
},
{
"host": "github.com",
"owner": "EchoStretch",
"repo": "kstuff",
"display_name": "kstuff",
"description": "Full build of kstuff: dynamically patches the PS5 kernel to bypass security."
},
{
"host": "github.com",
"owner": "EchoStretch",
"repo": "kstuff-toggle",
"extract_file": "kstuff-toggle-3.elf",
"display_name": "kstuff-toggle",
"description": "Boost homebrew game performance on your PS5 by disabling Kstuff after launching the game. Ships as a zip; extract kstuff-toggle-3.elf after download."
},
{
"host": "github.com",
"owner": "drakmor",
"repo": "ShadowMountPlus",
"asset_pattern": "shadowmountplus",
"extract_file": "shadowmountplus.elf",
"display_name": "ShadowMount+",
"description": "Fully automated background 'Auto-Mounter' payload for jailbroken PS5. Watches scan folders for game folders and .ffpkg/.exfat/.ffpfs/.ffpfsc images, auto-mounts them, stages sce_sys + appmeta + trophy data, and registers them on the home screen."
},
{
"host": "github.com",
"owner": "etaHEN",
"repo": "etaHEN",
"display_name": "etaHEN",
"description": "Long-running homebrew enabler with toolbox features. Faster app jailbreak than the on-the-fly path; provides the HijackerCommand IPC many homebrew apps expect on :9028."
},
{
"host": "github.com",
"owner": "ps5-payload-dev",
"repo": "ftpsrv",
"display_name": "ftpsrv",
"description": "Lightweight FTP server on :2121 with SELF/ELF auto-decryption and remount-RW SITE commands. Browse the PS5 filesystem from any FTP client."
},
{
"host": "github.com",
"owner": "drakmor",
"repo": "ftpsrv",
"display_name": "ftpsrv (drakmor)",
"description": "drakmor's fork of ftpsrv."
},
{
"host": "github.com",
"owner": "ps5-payload-dev",
"repo": "websrv",
"display_name": "websrv",
"description": "HTTP server on :8080 serving a homebrew launcher page. Pairs with the homebrew bundles distributed by ps5-payload-dev."
},
{
"host": "github.com",
"owner": "ps5-payload-dev",
"repo": "shsrv",
"display_name": "shsrv",
"description": "Telnet server on :2323 with 42 POSIX-ish commands plus hbldr (launch unsigned ELF with full A/V) and hbdbg (gdb-style debugger)."
},
{
"host": "github.com",
"owner": "ps5-payload-dev",
"repo": "klogsrv",
"display_name": "klogsrv",
"description": "Streams /dev/klog over TCP :3232 and tees it to /data/klog/klog.log (10-backup rotation)."
},
{
"host": "github.com",
"owner": "ps5-payload-dev",
"repo": "elfldr",
"display_name": "elfldr",
"description": "An ELF loader for jailbroken PS5s that accepts payloads on port 9021."
},
{
"host": "github.com",
"owner": "EchoStretch",
"repo": "ps5-app-dumper",
"asset_pattern": "dumper",
"display_name": "ps5-app-dumper",
"description": "Dumps installed PS5 apps to USB or internal storage in fakepkg/folder format. Reads config from /data/ps5-app-dumper/config.ini."
},
{
"host": "github.com",
"owner": "drakmor",
"repo": "nanoDNS",
"asset_pattern": "nanodns.elf",
"display_name": "nanoDNS",
"description": "Minimal DNS server running on the PS5 (UDP :53). Blocks PlayStation Network + update domains by default and can redirect any domain to a LAN IP."
},
{
"host": "github.com",
"owner": "StonedModder",
"repo": "Ghostpad",
"asset_pattern": "ghostpad.elf",
"display_name": "Ghostpad",
"description": "Creates a virtual PS5 controller on the console and redirects input to it — useful for input automation, remote control, and accessibility setups."
},
{
"host": "github.com",
"owner": "cy33hc",
"repo": "ps5-ezremote-dpi",
"asset_pattern": "ezremote-dpi",
"display_name": "ezremote-DPI",
"description": "Long-lived loopback PKG install daemon (127.0.0.1:9040). Owns Sony's PlayGo/AppInstUtil install state machine so installs don't evaporate when the calling process exits."
},
{
"host": "github.com",
"owner": "notmaj0r",
"repo": "CheatRunner",
"display_name": "CheatRunner",
"description": "Loads and applies game cheats on the PS5. Send it like any other payload, then browse and toggle cheats for supported titles on the console."
},
{
"host": "github.com",
"owner": "itsPLK",
"repo": "PS5-Lapy-JB-Daemon",
"display_name": "Lapy JB Daemon",
"description": "Standalone homebrew jailbreak daemon for PS5. Mimics etaHEN's jailbreak-on-demand API. Multi-firmware (3.00 to 12.00). No etaHEN required. Upstream voidwhisper/lapy-jb-daemon on git.etawen.dev is offline; this GitHub mirror is the live source."
},
{
"host": "github.com",
"owner": "OpenSourcereR-dev",
"repo": "ps5debug-NG",
"display_name": "ps5debug-NG",
"description": "PS5 debugger payload — userland TCP wire-protocol server hosted inside SceShellCore."
},
{
"host": "github.com",
"owner": "seregonwar",
"repo": "zftpd",
"asset_pattern": "zhttp",
"display_name": "zftpd",
"description": "Zero-copy FTP/HTTP server."
},
{
"host": "github.com",
"owner": "itsPLK",
"repo": "pldmgr",
"display_name": "pldmgr",
"description": "A modern, web-based dashboard to easily manage, import, and automatically load payloads on your PS5."
},
{
"host": "github.com",
"owner": "ps5-linux",
"repo": "ps5-linux-loader",
"display_name": "ps5-linux-loader",
"description": "Linux payload implementing HV exploits to run a custom bootloader."
},
{
"host": "github.com",
"owner": "BestPig",
"repo": "BackPork",
"display_name": "BackPork",
"description": "Lets you sideload system libraries into PS5 games."
},
{
"host": "git.etawen.dev",
"owner": "earthonion",
"repo": "garlic-worker",
"asset_pattern": "garlic-worker-ps5",
"display_name": "Garlic Worker",
"description": "Background worker that drains the community save-decryption queue from garlicsaves.com. Handles both PS4 and PS5 saves natively. Opt-in: connects to garlicsaves.com."
},
{
"host": "git.etawen.dev",
"owner": "earthonion",
"repo": "garlic-savemgr",
"display_name": "Garlic SaveMgr",
"description": "On-console save decrypt/encrypt daemon. Back up saves in plaintext, edit on PC, re-encrypt for the same console. No network."
},
{
"host": "git.etawen.dev",
"owner": "earthonion",
"repo": "np-fake-signin",
"asset_pattern": "np-fake-signin-ps5",
"display_name": "NP Fake Sign-in",
"description": "Headless payload that registers PS5 user slots directly via the system registry. Offline account activation without PSN. One-shot ELF: send, runs, exits."
}
]
+353
View File
@@ -0,0 +1,353 @@
#!/usr/bin/env python3
"""Aggregate PS5 payload catalogue into payloads.json.
Reads `sources.json` (curated upstream repo list), enriches it with the live
`phantomptr/ps5upload` CATALOGUE when possible, queries each upstream repo's
latest release, picks the canonical asset, and writes `payloads.json` in the
ps5-payload-manager custom-repository schema.
Behaviour notes:
- No binaries are downloaded. Checksums come from the GitHub Release API
`digest` field (sha256:...). Forgejo/Gitea and missing-digest assets get an
empty checksum string.
- `/releases/latest` is tried first; if it 404s (pre-release-only repo) we fall
back to the first element of `/releases`.
- `name` key is emitted before `payloads` per the ps5-payload-manager spec.
"""
import json
import re
import subprocess
import urllib.request
from pathlib import Path
SOURCES_FILE = "sources.json"
OUTPUT_FILE = "payloads.json"
README_FILE = "README.md"
PS5UPLOAD_CATALOGUE_URL = (
"https://raw.githubusercontent.com/phantomptr/ps5upload/main/"
"client/src-tauri/src/commands/payloads.rs"
)
CATALOGUE_NAME = "PS5 Payload Catalogue"
# ─── HTTP helpers ──────────────────────────────────────────────────────
def http_get(url: str, headers: dict | None = None, timeout: int = 30) -> str:
req = urllib.request.Request(url, headers=headers or {"User-Agent": "ps5-payload-catalogue/1.0"})
with urllib.request.urlopen(req, timeout=timeout) as response:
return response.read().decode("utf-8")
def gh_api(endpoint: str) -> dict | list | None:
"""GitHub API via gh CLI (handles GITHUB_TOKEN auth in CI)."""
try:
result = subprocess.run(
["gh", "api", endpoint], capture_output=True, text=True, check=True
)
return json.loads(result.stdout) if result.stdout.strip() else None
except Exception as e:
print(f" gh api {endpoint} failed: {e}")
return None
def forgejo_api(host: str, endpoint: str) -> dict | list | None:
try:
url = f"https://{host}/api/v1/{endpoint}"
return json.loads(http_get(url, timeout=30))
except Exception as e:
print(f" forgejo {url} failed: {e}")
return None
def get_latest_release(host: str, owner: str, repo: str) -> dict | None:
"""Fetch /releases/latest with pre-release fallback."""
if host == "github.com":
release = gh_api(f"repos/{owner}/{repo}/releases/latest")
if release:
return release
releases = gh_api(f"repos/{owner}/{repo}/releases?per_page=1") or []
return releases[0] if releases else None
else:
release = forgejo_api(host, f"repos/{owner}/{repo}/releases/latest")
if release and isinstance(release, dict):
return release
releases = forgejo_api(host, f"repos/{owner}/{repo}/releases?limit=1") or []
return releases[0] if releases else None
# ─── Asset selection ──────────────────────────────────────────────────
def score_asset(name: str, asset_pattern: str, has_extract: bool, preferred_ext: str) -> float:
name_lower = name.lower()
if has_extract and name.endswith(".zip"):
return 20
if not (name.endswith(".elf") or name.endswith(".bin") or (has_extract and name.endswith(".zip"))):
if not name.endswith(preferred_ext):
return -1
if asset_pattern and not re.search(asset_pattern, name, re.IGNORECASE):
return -1
score = 0.0
if name.endswith(preferred_ext):
score += 5
if "ps5" in name_lower:
score += 10
if "ps4" in name_lower:
score -= 10
if "install" in name_lower:
score -= 5
score -= len(name) / 100.0
return score
def pick_asset(assets: list, asset_pattern: str, has_extract: bool, preferred_ext: str) -> dict | None:
selected = None
best = -2.0
for asset in assets:
s = score_asset(asset["name"], asset_pattern, has_extract, preferred_ext)
if s > best:
best = s
selected = asset
return selected if best > -1 else None
def get_checksum(asset: dict, host: str) -> str:
if host == "github.com":
digest = asset.get("digest") or ""
if digest.startswith("sha256:"):
return digest.split(":", 1)[1]
return ""
# ─── Category derivation ──────────────────────────────────────────────
CATEGORY_RULES = [
(r"kernel|kstuff|exploit|patch|jb|jailbreak", "Kernel"),
(r"\bftp\b|file transfer", "File Transfer"),
(r"\bhttp\b|web|telnet|\bdns\b", "Networking"),
(r"save", "Save Manager"),
(r"debug|gdb", "Debugger"),
(r"linux|loader|launch|homebrew|mount|backup|pkg", "Launcher"),
(r"cheat", "Misc"),
(r"controller|input|ghostpad|virtual pad", "Misc"),
(r"log|klog", "Networking"),
]
def derive_category(name: str, description: str) -> str:
text = f"{name} {description}".lower()
for pattern, category in CATEGORY_RULES:
if re.search(pattern, text):
return category
return "Misc"
# ─── ps5upload catalogue enrichment ──────────────────────────────────
def strip_block_comments(text: str) -> str:
return re.sub(r"/\*.*?\*/", "", text, flags=re.DOTALL)
def extract_catalogue_block(text: str) -> str:
marker = "const CATALOGUE: &[CatalogueEntry] = &["
start = text.find(marker)
if start == -1:
return ""
start += len(marker)
struct_depth = 0
array_depth = 0
in_str = False
escape = False
for i, ch in enumerate(text[start:], start):
if in_str:
if escape:
escape = False
elif ch == "\\":
escape = True
elif ch == '"':
in_str = False
else:
if ch == '"':
in_str = True
elif ch == "{":
struct_depth += 1
elif ch == "}":
struct_depth -= 1
elif ch == "[":
if struct_depth == 0:
array_depth += 1
elif ch == "]":
if struct_depth == 0:
if array_depth == 0:
return text[start:i]
array_depth -= 1
return ""
def split_entries(block: str) -> list[str]:
entries = []
for m in re.finditer(r"CatalogueEntry\s*\{", block):
s = m.start()
depth = 0
in_str = False
escape = False
for i, ch in enumerate(block[s:], s):
if in_str:
if escape:
escape = False
elif ch == "\\":
escape = True
elif ch == '"':
in_str = False
else:
if ch == '"':
in_str = True
elif ch == "{":
depth += 1
elif ch == "}":
depth -= 1
if depth == 0:
entries.append(block[s : i + 1])
break
return entries
def parse_str(entry: str, key: str) -> str | None:
m = re.search(rf"\b{re.escape(key)}\s*:\s*\"([^\"]*)\"", entry)
return m.group(1) if m else None
def fetch_ps5upload_enrichment() -> dict:
"""Return {(host, owner, repo): {display_name, description}} from ps5upload."""
try:
raw = strip_block_comments(http_get(PS5UPLOAD_CATALOGUE_URL, timeout=30))
except Exception as e:
print(f"ps5upload catalogue fetch failed (continuing without enrichment): {e}")
return {}
block = extract_catalogue_block(raw)
if not block:
print("ps5upload CATALOGUE block not found; skipping enrichment")
return {}
enrichment = {}
for entry_text in split_entries(block):
host = parse_str(entry_text, "repo_host")
owner = parse_str(entry_text, "repo_owner")
repo = parse_str(entry_text, "repo_name")
if not (host and owner and repo):
continue
display_name = parse_str(entry_text, "display_name")
description = parse_str(entry_text, "description")
enrichment[(host, owner.lower(), repo.lower())] = {
"display_name": display_name,
"description": description,
}
print(f"ps5upload enrichment loaded: {len(enrichment)} entries")
return enrichment
# ─── Main aggregation ────────────────────────────────────────────────
def build_payload_entry(src: dict, enrichment: dict) -> dict | None:
host = src["host"]
owner = src["owner"]
repo = src["repo"]
key = (host, owner.lower(), repo.lower())
enrich = enrichment.get(key, {})
display_name = enrich.get("display_name") or src.get("display_name") or repo
description = enrich.get("description") or src.get("description") or ""
asset_pattern = src.get("asset_pattern", "")
has_extract = bool(src.get("extract_file"))
preferred_ext = ".bin" if repo.lower() == "etahen" else ".elf"
print(f"Checking {owner}/{repo} on {host}...")
release = get_latest_release(host, owner, repo)
if not release:
print(" no release found, skipping")
return None
assets = release.get("assets", [])
if not assets:
print(f" no assets in release {release.get('tag_name')}, skipping")
return None
selected = pick_asset(assets, asset_pattern, has_extract, preferred_ext)
if not selected:
print(f" no suitable asset for {owner}/{repo}, skipping")
return None
version = release.get("tag_name", "")
last_update = (release.get("published_at") or "")[:10]
checksum = get_checksum(selected, host)
category = derive_category(display_name, description)
source_url = f"https://{host}/{owner}/{repo}/releases"
print(f" → {selected['name']} @ {version} ({category})")
return {
"name": display_name,
"filename": selected["name"],
"url": selected["browser_download_url"],
"description": description,
"version": version,
"category": category,
"checksum": checksum,
"last_update": last_update,
"source": source_url,
}
def update_readme(payloads: list[dict]) -> None:
rows = [
"| Name | Version | Category | Description | Last Updated | Source |",
"| --- | --- | --- | --- | --- | --- |",
]
for p in payloads:
name = p.get("name", "")
version = p.get("version", "")
category = p.get("category", "")
description = (p.get("description") or "No description provided.").replace("|", "\\|")
last_update = p.get("last_update", "")
source = p.get("source", "")
rows.append(
f"| **{name}** | `{version}` | {category} | {description} | `{last_update}` | [Source]({source}) |"
)
table = "\n".join(rows)
start = "<!-- PAYLOADS_START -->"
end = "<!-- PAYLOADS_END -->"
if not Path(README_FILE).exists():
return
with open(README_FILE, "r", encoding="utf-8") as f:
content = f.read()
if start in content and end in content:
pattern = re.compile(f"{re.escape(start)}.*?{re.escape(end)}", re.DOTALL)
content = pattern.sub(f"{start}\n{table}\n{end}", content)
with open(README_FILE, "w", encoding="utf-8") as f:
f.write(content)
print(f"Updated {README_FILE}")
def main() -> None:
with open(SOURCES_FILE, "r", encoding="utf-8") as f:
sources = json.load(f)
print(f"Loaded {len(sources)} sources from {SOURCES_FILE}")
enrichment = fetch_ps5upload_enrichment()
payloads = []
skipped = []
for src in sources:
item = build_payload_entry(src, enrichment)
if item:
payloads.append(item)
else:
skipped.append(f"{src['owner']}/{src['repo']}")
document = {"name": CATALOGUE_NAME, "payloads": payloads}
with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
json.dump(document, f, indent=2, ensure_ascii=False)
print(f"Wrote {OUTPUT_FILE} ({len(payloads)} payloads, {len(skipped)} skipped)")
if skipped:
print(f"Skipped: {', '.join(skipped)}")
update_readme(payloads)
if __name__ == "__main__":
main()