Commit Graph
177 Commits
Author SHA1 Message Date
phantomptrandClaude Opus 5.5 b7dd979198 Payload Manager 0.6 support: request marker, POST actions, slots (#458)
Payload Manager 0.6.0 refuses a mutation without a same-origin Origin/Referer
unless it carries X-PLDMGR-Request: 1 (403 "Mutation origin or request marker
rejected"), and answers 405 to GET on /loadpayload and /manage:delete. Every
request now carries the marker, and launch/delete are POSTs; 0.5.2 ignores both.

0.6 also moved storage to slots (repo/<id>@<source>, local/<stem>) and lists
them in "items"; its autoload list names slots. The list parser reads items
(with name/version/source) and the Payloads tab keys "Load at boot" by slot,
falling back to the file name on 0.5.

Verified on a FW 13.60 Phat with 0.6.1: overview, store, launch, autoload
add/remove and delete through the engine, and the live installer launch test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-14 19:36:37 -07:00
quer3q f37508feb5 Fast verification by default (#459)
For all type of conversions: packages, images and "Compress and image"
is now using new fast verification.

Toggle can be used to disable this behaviour and enabled full-scan
verification.
2026-10-14 19:36:34 -07:00
phantomptr 01afdf8926 Release v7.0.22 2026-10-12 02:17:36 -07:00
phantomptr f7b411c6db Release v7.0.21 2026-10-12 02:07:18 -07:00
phantomptrandClaude Fable 5.1 8e87800be9 Fix: image format snapped back to .ffpkg; an image can be rewritten as another image format
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-12 02:07:15 -07:00
phantomptr cdda1e0e11 Release v7.0.20 2026-10-12 00:25:25 -07:00
phantomptr 0b9659b436 Release v7.0.19 2026-10-12 00:17:59 -07:00
phantomptrandClaude Fable 5.1 7f6047a332 Fix: the game page crashed when the measuring status reply had no state; refusal test follows the no-AMPR wording
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-12 00:17:56 -07:00
phantomptr 10dd8e8520 Release v7.0.18 2026-10-11 23:38:54 -07:00
phantomptrandClaude Fable 5.1 2be9b2b986 LZ4 packs: install ampr_emu 0.4.2.1 into the image when the game's is missing or old (own copy kept as .orig); a non-AMPR game is pointed at .ffpfsc
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 23:38:51 -07:00
phantomptr 6b646d818b Release v7.0.17 2026-10-11 22:47:06 -07:00
phantomptrandClaude Fable 5.1 679d005958 Open a save decrypted and edit its files (save.mount / save.unmount in the helper, pfsmgr + sceFsMountSaveData from a /data copy, write-back only when changed); verified on FW 13.60
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 22:47:04 -07:00
phantomptr b74365dbc0 Release v7.0.16 2026-10-11 22:30:52 -07:00
phantomptrandClaude Fable 5.1 40bcd3a9f1 Measure how a game plays and pack it that way: ampr_emu debug build in fakelib2, sessions collected, a profile generated (port of drakmor's ampr_pack_profile.py); i18n gate fix for 7.0.15
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 22:30:50 -07:00
phantomptr a0a5edb7a0 Release v7.0.15 2026-10-11 21:58:11 -07:00
phantomptrandClaude Fable 5.1 0036298778 Images regenerate a stale ampr_emu.index (#449), connection says which of three helper states it found (#447), HDR screenshots as 16-bit PQ PNG with cICP (#448)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 21:58:08 -07:00
phantomptr b18c7de5a6 Release v7.0.14 2026-10-11 21:16:26 -07:00
phantomptrandClaude Fable 5.1 4d3086d82f Convert: a game on the PS5 or a saved server can become a game image; Options hide package-only choices for an image
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 21:08:00 -07:00
phantomptr 774577a499 Release v7.0.13 2026-10-11 20:07:49 -07:00
phantomptrandClaude Fable 5.1 564e757bbe Image read-back check at drive speed, a lighter game page, 7z corruption stops retrying (#446), console-to-console route and dial address (#444)
exFAT reader: FAT held in memory, a cursor so a big file's chain is not re-walked per read,
runs of consecutive clusters read in one call; hashing on all cores; verify_chunk_kib on the
image build request with a Convert preference (8 MiB measured fastest, 169 MiB/s -> 3.7 GiB/s).

Game page: the Overview card that repeated the hero is gone; path, last played and captures
live in the hero; each copy is one compact row with a primary action and an overflow menu.

7z: lzma-rust2 raises "dist overflow" as ErrorKind::Other; it is now a corrupt-archive fault
that names the entry, so the queue stops instead of retrying the same bytes.

Console to console: route auto/direct/relay and an optional dial address per pair, in the
send dialog and the engine request.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 20:07:43 -07:00
phantomptr b390165ae1 Release v7.0.12 2026-10-11 13:12:51 -07:00
phantomptrandClaude Fable 5.1 ab8cbcdd44 Convert: Stored (uncompressed) package option as the fallback for consoles that refuse a compressed package
Compressed packages are verified to play on FW 5.10 only; stored blocks are the other form
that has played. Level::Stored writes the block layout with raw blocks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 13:03:18 -07:00
phantomptr 004d7becbb Release v7.0.11 2026-10-11 12:47:02 -07:00
phantomptr 48fb4ee1c1 Release v7.0.10 2026-10-11 11:19:16 -07:00
phantomptr 2d062c6b60 Release v7.0.9 2026-10-11 10:46:23 -07:00
phantomptrandClaude Fable 5.1 e3a1afd15b Uploads: resume ids live 7 days like the console's journal; Stop buttons say what is kept (#440)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 10:27:59 -07:00
phantomptrandClaude Fable 5.1 44e0aba609 Connections: WebDAV and WebDAV (HTTPS) servers (#442)
PROPFIND listings, ranged GET reads, Basic auth, optional self-signed certificate per
connection. Same read-only RemoteFs as SMB/FTP/SFTP, so uploads and installs stream from
the server. Loopback-server test covers sign-in, listing, walk and ranged reads.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 10:26:11 -07:00
phantomptr d14718960d Merge branch 'main' into pr-441 2026-10-11 10:14:36 -07:00
phantomptrandClaude Fable 5.1 5d41f564e2 Volumes: Eject a USB drive (usb.eject, method 144)
A plain unmount first; FW 13.60's shell keeps /mnt/usbN open, so the app offers
"Eject anyway", which syncs and force-unmounts. Verified on the Phat: /mnt/usb0
gone and stayed gone, helper unaffected.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 10:02:51 -07:00
phantomptrandClaude Fable 5.1 051ea1cc81 Payloads: a Payload Manager tab (list, launch, delete, boot list) and "Store in Payload Manager"; catalogue + scene-tool entries for Payload Manager and LZ4 Compression
Engine routes /api/ps5/pldmgr{,/launch,/delete,/autoload,/store} over Payload Manager's
own HTTP API (:8084). Storing into an existing folder is confirmed first, since Payload
Manager's import removes that folder's other files. Scene-tool pills with a web page
(Payload Manager :8084, LZ4 Compression :5920) open it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-11 09:52:30 -07:00
Aleksey Zelenskiy 5dac982774 fix(webui): serve local game cover (sce_sys/icon0.png) from the engine 2026-10-11 12:19:41 +02:00
phantomptr 82e86c63b5 Release v7.0.8 2026-10-11 02:44:28 -07:00
phantomptrandClaude Opus 5.5 92ed5c2af1 Upload: the "network" label for an idle console no longer changes how lanes grow (#437)
cea5c5c2 made a credit wait with an idle console report BN_NETWORK, and
the governor grows lanes (and caps the chunk) on BN_NETWORK, so it began
trying an extra lane where 7.0.6 held. Unintended: more lanes cannot
fetch credit the console has not granted. Control is back to 7.0.6's
rule; only the reported label says "network". A test pins it: a credit
wait with an idle console steers lanes and chunks tick for tick like a
credit wait with no word from the console. The throughput gates measure
the same with the old and new governor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-11 02:15:49 -07:00
phantomptr fed3cf2146 Release v7.0.7 2026-10-11 01:32:20 -07:00
phantomptrandClaude Opus 5.5 ece147d720 Games: hide a title's icon from the PS5 home screen, and show it again (#407)
For shortcuts and loaders that, once set up, only clutter the home
screen. ⋯ → "Hide from home screen" on a Games card; a "Hidden" badge
marks it, "N hidden from the home screen" at the top filters to them,
and ⋯ → "Show on home screen" puts it back.

How: every user's icon table in app.db (tbl_iconinfo_<user>) has a
`visible` flag; the system hides some of its own apps with it. The
helper (app.icon_set, app.hidden_list) flips only that flag: nothing is
deleted, the title stays installed and playable. Guards: title ids only,
system apps (NPXS) refused, tables found by shape (titleId + visible),
app.db backed up once to /data/ps5upload/app.db.before-hide before the
first change, BEGIN IMMEDIATE (fails before any change if the system
holds the lock), and rolled back unless at least one and at most one
row per table changed. The hidden list is read live from app.db, so it
cannot drift from the console, and leaves out the system's own hidden
apps. The home screen redraws when an app is next opened and closed;
the console shows a notification saying so.

Verified on the Phat (FW 13.60): WebKit Autoloader hidden, listed, shown
again; a system app and an unknown id refused; the backup written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-11 00:36:44 -07:00
phantomptrandClaude Opus 5.5 ba48655988 Lab: the late-listener port test reserves its ports instead of releasing them
wait_for_ports_waits_for_listeners_that_appear_late picked ports by
binding and dropping them, so on CI (1,500 tests in parallel) another
test could take one and answer on it before the test listened: CI saw
'ready' after 452 ms when the second listener only opened at 800 ms.
The ports are now bound and held without listening (socket2, already in
the lockfile) and start listening on cue. 12 parallel copies pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-11 00:21:49 -07:00
phantomptrandClaude Opus 5.5 cea5c5c264 Upload: "Limited by: console memory" when the console was idle was really the network (#437)
The sender called any wait for the console's credit "console memory"
unless the console reported its disk or workers as the limit. When the
console reports its queue ran dry, it is idle, waiting for data: the
credit is slow in transit (here a Windows Internet Connection Sharing
bridge on a CPU busy converting), so the cause is the network.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-11 00:18:56 -07:00
phantomptr 2ace14e90f Release v7.0.6 2026-10-10 23:26:42 -07:00
phantomptrandClaude Opus 5.5 eac9f670a4 Changelog for 7.0.6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 23:21:56 -07:00
phantomptrandClaude Opus 5.5 516bfee468 A console whose address changed is found and offered (#430)
When the router hands the PS5 a new address, the saved one stops
answering and the app said the helper was not running. Now, while the
active console is down, the desktop and Android apps scan the network
(at most every five minutes) and ask the engine about each PS5 running
our helper: POST /api/ava1/same-console {old, new} connects to the new
address expecting the key pinned for the old one and answers same,
different or unknown. Only "same" shows a banner: "Your PS5 now answers
at X", with Switch (re-points the console, keeping its name and history)
and Dismiss. Another PS5 is never offered; the check pins nothing.

Tested against the C server (same at a new address, another console, no
pin, nothing answering) and against the real consoles: the Pro's key
pinned under a made-up old address matches the Pro and not the Phat.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 23:21:44 -07:00
phantomptr 6cd4f021d8 Release v7.0.5 2026-10-10 23:11:20 -07:00
phantomptr 9e17809797 Release v7.0.4 2026-10-10 23:05:52 -07:00
phantomptrandClaude Opus 5.5 d2dc3f703c 7z on 32-bit Android: archives over 4 GiB no longer fail with "dist overflow" (#434)
sevenz-rust2 turns 7z sizes (u64 in the format) into usize before using
them as read limits: a block's packed size caps the decoder's input, and
block and file unpacked sizes cap the output and the CRC check. On the
32-bit Android build (armv7, in the APK next to arm64) usize is 32 bits,
so a limit past 4 GiB wraps: a 4.7 GB block was cut to 405 MB of input,
the LZMA decoder ran out inside a chunk and said "dist overflow", and any
file over 4 GiB was cut short. Game backups are tens of GB in one block.

sevenz-rust2 0.23.0 is vendored in third_party/ (as unrar is) with those
sizes kept u64 end to end; nothing changes on 64-bit. 0.24.0 still has
the casts. Verified on linux/arm/v7: a 4.7 GB single-block archive failed
after 405 MB before and decodes in full with its CRC after, and 6 GiB of
LZMA-coded output decodes correctly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 23:03:10 -07:00
phantomptr c7fa4d068a Release v7.0.3 2026-10-10 22:49:21 -07:00
phantomptr 72fe7f84d8 Release v7.0.2 2026-10-10 22:33:31 -07:00
phantomptr bc973486ad Release v7.0.1 2026-10-10 19:19:38 -07:00
phantomptrandClaude Opus 5.5 f8906c3271 Collection: show a scan's progress, and join a running scan instead of failing
The engine reports what a scan is doing (finding, reading, naming, saving),
which folder and item, and how many games are named; the screen shows it as a
progress card with the item being read and the time so far, and a last-scanned
line afterwards. A second scan request joins the running one: the Collection is
one per computer, and pressing Scan during the automatic refresh used to show
'The collection could not be read: a scan is already running'.

Also removes Import from PS Game Library (the engine route, its code and the
menu items): that tool was never public.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 19:15:50 -07:00
phantomptrandClaude Opus 5.5 90489a84a2 Android: install and download from a link, install from a saved server, and the online title lookup work in the Android build
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 16:07:54 -07:00
phantomptrandClaude Opus 5.5 493fec8e7a Android: the community cheat search and download work in the Android build
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 16:07:54 -07:00
phantomptrandClaude Opus 5.5 d89eabe0bb Drop-downs draw their own chevron; Bug report fills the page; no Android build warnings
Also restores the lockfile's libc fields lost when the bundled font was removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:18:55 -07:00