Skip to content

Releases: knutwurst/ps5-ultrapack

2.0.2 — Retry failed jobs, keep finished ones, skip outputs that are already there

Choose a tag to compare

@knutwurst knutwurst released this 01 Oct 16:09

PS5 UltraPack 2.0.2 — macOS (Apple Silicon).

A failed job can be changed and run again, the queue keeps what it finished, an output that is already there is no longer overwritten without a word, and a broken archive is no longer mistaken for a missing password.

What's new

A failed job can be changed and run again.

  • Edit works on a failed or cancelled job. It used to open on the extracted copy the app had just deleted, and Add refused the missing source.
  • Retry, next to Edit, runs that one job again. The error window has Edit job and Retry buttons too.
  • A failed job keeps what it extracted from its archive, so a retry does not unpack the archive again. When the next job of a batch needs the space, the copies of failed jobs go first, with a line in the log.

A backport is checked before the game is unpacked. A backport job on a .pkg, .ffpfs or .ffpfsc reads only the game's executables out of it and checks them first; a target that cannot work is refused after seconds instead of after the full unpack. Check in Add job reads these containers too, and so does --backport-analyze.

Finished jobs stay in the queue, marked Done with a green check, until you clear them. Clear completed sits in the queue header; a right-click on it (or on a job) offers Clear failed and Clear all. Settings › Interface can remove finished jobs right away instead; failed jobs always stay.

An output that is already there is skipped. Before anything is unpacked, Start checks which jobs would write a file that is already in the output folder. Settings › Interface › "When the output is already there" sets the rule: Skip (the default), Ask, Overwrite, or Keep both, where the new build gets a numbered name within the ShadowMount name limit. A job whose name is only known after its archive is unpacked (a solid archive, a .pkg inside an archive) is checked right after the unpack, before the long packing step. Until now every job replaced an existing file at the end of the run, and a .pkg got a second copy.

Jobs are named after their game, "Example Quest [PPSA01234]", as soon as the app can read it: from a folder, a .ffpfs/.ffpfsc/.exfat/.pkg, and from a ZIP, RAR or 7z that is not solid, whose param.json is read out of the archive alone.

Adding many jobs no longer freezes the window. Add job builds its jobs in the background; each one joins the queue when it is ready, a line with a bar counts them, and a Start pressed meanwhile begins once the last one is in.

A broken archive is not a password question. A damaged or incomplete archive used to bring up the password prompt and refuse the right password. The app now asks only when the archive answers with a password error, and otherwise names the damage, such as "1 part of the set is missing (….part2.rar)". A part that goes away during extraction (a drive that drops out) ends the job with an error; the extraction used to wait for it forever.

The queue header adapts to narrow windows, "Game n/N" counts only the jobs that run, and the details pane names an archive's problem.

Compatibility

  • Same output bytes as 2.0.1: the retail reference .pkg builds with hash 701f28f04b616a3d, unchanged.
  • Settings, queue and history carry over.
  • macOS Apple Silicon.

Verified

  • Every backend suite: 117 fPKG pipeline checks, 37 backport, 34 archive, 24 CLI guard, 17 chain-mode CLI cases, 10 copy-job, 9 chain-item, 9 BPS, 7 backport-libs and the rest.
  • 12 RAR tests against sets built with the rar tool: encrypted headers, many parts, brackets in the name, a dot in the password, a missing, a damaged and a vanishing part, a solid set.
  • GUI wiring driver: 279 checks.
  • End-to-end with a real game against the built app: 17 checks, folder → .pkg → extract deterministic (701f28f04b616a3d vs 701f28f04b616a3d).
  • No new console test since fPKGs built by 1.1.12 launched on FW 11.60.

Install

Ad-hoc signed. On a Mac other than the one it was built on, clear the quarantine flag before the first launch:

xattr -d com.apple.quarantine "PS5 UltraPack.app"

SHA-256 (PS5-UltraPack-2.0.2-macos-arm64.zip): f7c80e4e95b93f7e37be9138b7d8319e2f0000ae572d967a726793ffbfdf402b

2.0.1 — Parent folders, honest progress for .pkg jobs, the real size of a package

Choose a tag to compare

@knutwurst knutwurst released this 30 Sep 11:38

PS5 UltraPack 2.0.1 — macOS (Apple Silicon).

Fixes for 2.0.0: parent folders work again, the progress bars tell the truth while a .pkg is unpacked and rebuilt, the space check knows how big a package really is, and the password prompt and the backport editor stop getting in the way.

What's fixed

Parent folders: every source in them, one job each. Add job takes a folder of sources again. It searches the folder and its subfolders for game folders, archives (.zip, .rar, .7z; a multi-part RAR set once) and containers (.ffpfs, .ffpfsc, .pkg, .exfat, .ffpkg), and queues one job per source with the changes and output you chose. In 2.0.0 only unpacked game folders counted. An archive that holds a .pkg is unpacked and converted like any other package.

Progress while a .pkg is unpacked.

  • The package tool prints nothing until it is done, and it works in three steps on the temp drive: decrypt the package into a temp file, unpack the game image into a second temp file as large as the game, write the game files. The backend now asks the system how many bytes the tool has written. 2.0.0 counted the folder size, which reached 99 % after the second step and then stood still for the whole third one.
  • The line says where and which step: extract the .pkg on SAMSUNG, step 3 of 3: write the game files (150.2 of 204.5 GB written) @ 170 MB/s ETA 5m.
  • "Temp PFS" moves while MkPFS writes the uncompressed image. MkPFS counts whole files, so a game with one 57 GB file showed "0 % write" for ten minutes. The backend counts the bytes instead: write the PFS image on SAMSUNG: 34.0 of 80.9 GB.
  • A job that unpacks first no longer reports 94 % after the unpack alone. Its bar follows the order the job runs in: unpack, changes, build, compress.
  • The job's bar in the queue no longer jumps. The 30-second heartbeat and the progress lines computed the percentage in two ways, 20 points apart, and adding a folder during a run set the bar to 0 % for a moment. One value feeds the bar, it never moves backward, and messages about other jobs go to the footer.
  • The log and the details pane name the drive a job unpacks to and where it writes.

Space for a .pkg. The data in a package is compressed: a 46 GB .pkg can hold an 81 GB game, and unpacking it needs about twice the game on the temp drive (the unpacked image and the files side by side). The space check now reads the game's size from the package's directory. 2.0.0 used the file size and showed "Temp image ~55 GB" for a job that needed about 170 GB.

A cancelled job keeps what it unpacked. Cancel after the archive was extracted, and the copy stays: Start runs from it again, removing the job deletes it. A job whose copy is gone starts again at its archive instead of failing on a missing source.

Archive passwords. The prompt fits its content (the OK button sat below the window). It only comes up when none of your saved passwords opens the archive; 2.0.0 also asked when a saved password worked but the header size looked too small to trust.

Backport without a libraries field. Add job no longer asks for patched libraries; a job takes the set for its target from Settings › Backport. The field kept coming back after you cleared it. A patched libraries setting that points at the firmware libraries folder is cleared at start, with a line in the log.

Compatibility

  • Same output bytes as 2.0.0: the retail reference .pkg builds with hash 701f28f04b616a3d, unchanged.
  • Settings, queue and history carry over.
  • macOS Apple Silicon.

Verified

  • Every backend suite: 116 fPKG pipeline checks, 37 backport unit tests, 30 archive, 24 CLI guard (incl. the write counter and the MkPFS meter), 15 chain-mode CLI cases, 10 copy-job, 9 chain-item, 9 BPS, 7 backport-libs and the rest.
  • GUI wiring driver: 240 checks.
  • End-to-end with a real game against the built app: 17 checks, folder → .pkg → extract deterministic (701f28f04b616a3d vs 701f28f04b616a3d).
  • The write counter and the three extract steps were measured on a real 46 GB package (81 GB game): 201.7 GB written against 204.5 GB predicted.
  • No new console test since fPKGs built by 1.1.12 launched on FW 11.60.

Install

Ad-hoc signed. On a Mac other than the one it was built on, clear the quarantine flag before the first launch:

xattr -d com.apple.quarantine "PS5 UltraPack.app"

SHA-256 (PS5-UltraPack-2.0.1-macos-arm64.zip): b9aced38559b17958080984fa5f06a108193c44c79016bdd1085260aaa5ee216

2.0.0 — Backport for signed sources, one editor for every job, the firmware in the file name

Choose a tag to compare

@knutwurst knutwurst released this 29 Sep 11:35

PS5 UltraPack 2.0.0 — macOS (Apple Silicon).

A new main window, one editor for every job, a backport that reads and writes fake-signed executables, and every firmware in your library as a target.

What's new

A new main window. Sidebar with Queue, History, Log and Settings, the job list in the middle, a details pane on the right that opens on a click and closes when you don't need it. The details pane names the job's status (with the reason when it failed), source, changes, compression and space; the log fills the remaining height. Menu bar with the same commands and shortcuts as the buttons.

Compression per job. Add job shows one row under the output format: level 1 to 9 for .ffpfsc, normal or fast for .pkg. Settings › Compression holds the defaults and the CPU cores. The block size is fixed at 64 KiB, the size the PS5 needs.

Backport, signed sources and every firmware in your folder.

  • Fake-signed executables are lowered in place. The app writes the two SDK values inside the signed file and keeps every other byte. Encrypted executables stop the job with a message.
  • Settings › Backport takes one firmware libraries folder with a subfolder per firmware (7.61, 10.01, …). Every subfolder is a backport target with the SDK values its own libraries carry. A subfolder whose libraries are encrypted, or come from a newer firmware than its name, is refused with the reason.
  • Every build runs Check first. If the target has every function the game uses, lowering the SDK is enough. If it lacks some, patched libraries for that target are required; public sets exist only for 7.61 and 6.02. Functions the game's own modules export count as present.
  • The patched libraries folder cannot be the firmware libraries folder — the editor and the build refuse that mistake.
  • One-click Prepare downloads BestPig BackPork's current .bps patches for 7.61 or 6.02 and applies them to your 10.01 libraries.

One editor for every job. Edit opens the same editor for pack, convert, patch, sign, fPKG build, fPKG extract and chain jobs. Add refuses a target it cannot build with a clear message.

The firmware a game needs, in the file name. Organized files end with [fwN.NN]: Title [PPSA12345] [v01.003] [fw10.00].pkg. The app reads it from the SDK version in eboot.bin, from .ffpfs/.ffpfsc and .pkg through the container's headers only. A backport lowers the tag to the target; an integrated patch counts with its own eboot.bin. When it cannot be read, the tag is left out rather than guessed. Organize writes the same names.

Command line. --sdk-of SRC prints the firmware a game needs for a folder, a .ffpfs/.ffpfsc or a .pkg. --backport-target accepts any firmware from --fw-libs-root. --backport-analyze prints one verdict line and exits 1 while functions are missing.

Compatibility

  • Same output bytes as 1.1.19: the retail reference .pkg builds with hash 701f28f04b616a3d, unchanged.
  • Settings, queue and history are picked up from earlier installs.
  • macOS Apple Silicon.

Verified

  • Every backend suite: 116 fPKG pipeline checks, 37 backport unit tests, 15 chain-mode CLI cases, 26 archive, 10 copy-job, 9 BPS, 7 backport-libs and the rest.
  • GUI wiring driver: 211 checks.
  • End-to-end with a real game against the built app: 17 checks, folder → .pkg → extract deterministic (701f28f04b616a3d vs 701f28f04b616a3d).
  • fPKGs built by 1.1.12 launch on FW 11.60 (kstuff-lite 1.13-dr-test3, drakmor + ArkSama's fpkg-launch fixes); no new console test since.

Install

Ad-hoc signed. On a Mac other than the one it was built on, clear the quarantine flag before the first launch:

xattr -d com.apple.quarantine "PS5 UltraPack.app"

Windows

Planned. Not started, not verified.

Thanks

drakmor (LibProsperoPkg, fpkg-launch fixes), PSBrew (MkPFS), BestPig (BackPork), EchoStretch (kstuff-lite), idlesauce and the community around the fakelib work.

SHA-256 (PS5-UltraPack-2.0.0-macos-arm64.zip): 929ee8999c63d6ac2f1f8863d824333503f2dbdca7a65d16fb37ca9cdbb1d4ce

1.1.18 — No more leftover copies under ~/.net

Choose a tag to compare

@knutwurst knutwurst released this 27 Sep 19:42

No more leftover copies under ~/.net

fPKG helper

  • The helper used to unpack its ImageMagick library into ~/.net/ffpfsc-pkg-tool/ on first run: a new folder of about 27 MB for every version, never removed. The library now ships next to the helper and nothing is unpacked. On first run the helper deletes the folders older versions left behind.

Building from source

  • The helper binary is no longer tracked in git. BUILD_MACOS_APP.sh builds it first with the new BUILD_PKG_TOOL.sh, which needs the .NET SDK 9 or newer. The release app contains it as before.

Install

  1. Download PS5-FFPFSC-ULTRA-1.1.18-macos-arm64.zip and unzip it.
  2. On first launch on another Mac: xattr -dr com.apple.quarantine "PS5 FFPFSC ULTRA.app"

macOS on Apple Silicon. SHA-256: d7beb8f0671445dab8ead2fa6b6fd34e6fa6e1abcc7703cfabe77c90eb334161

Full changelog: CHANGELOG.txt

1.1.17 — Publishing rules for sce_sys, complete unpack

Choose a tag to compare

@knutwurst knutwurst released this 27 Sep 19:07

Publishing rules for sce_sys, complete unpack

fPKG builds

  • The builder applies the publishing tools' rules for sce_sys in its staging copy and never touches the source. Presentation images become 8-bit, non-interlaced PNGs in their required mode, with icon0 at 512×512. An image that is no PNG at all is rebuilt from its DDS. A stale or mislabeled DDS is generated again.
  • A PlayGo set that does not describe the packed files is rebuilt. A set that matches is kept.
  • A title without a DRM type now gets its license entries too, so it no longer shows a padlock.
  • A param.json that is not JSON, or an empty eboot.bin, stops the build with a clear message.

Validate

  • The checklist after every build also covers the images and their DDS, both license entries, the NP files, snd0.at9, the title, the version formats and the required system software.

Unpacking

  • A package unpacks with its whole sce_sys: DDS images, pic2, sound, trophy and uds data, nptitle and license.
  • Package → folder → package is a fixed point. A deterministic build of the unpacked folder has the same bytes as the package.

Reports

  • --param-report also shows each title's required system software and SDK version.

Install

  1. Download PS5-FFPFSC-ULTRA-1.1.17-macos-arm64.zip and unzip it.
  2. On first launch on another Mac: xattr -dr com.apple.quarantine "PS5 FFPFSC ULTRA.app"

macOS on Apple Silicon. SHA-256: 320c9425888d4624954554295ad16d833bcf9a86d46c43d0dc24d15d7ea3e697

Full changelog: CHANGELOG.txt

1.1.16 — Backported titles, HDR report

Choose a tag to compare

@knutwurst knutwurst released this 27 Sep 17:59

Backported titles, HDR report, faster on slow drives

fPKG

  • Backported titles that ship the AMPR emulator get an emulator index that matches the packed files. Verified on a PS5: such a package installs and runs.
  • Deterministic builds from a game folder and from its container are byte-identical.

HDR

  • Whether a game supports HDR is declared in its own param.json; the console follows that flag. --param-report <folder> lists every game in a folder with its title id, version and HDR flag, read-only.

App

  • The drive-space dialog shows exactly what the pre-flight check tests, so it no longer warns about runs that fit.
  • Adding folders and archives touches the disk far less and no longer blocks the window while archive headers are read.

Tests

  • An end-to-end check on a real game covers every conversion path: container, folder, .ffpfsc, .ffpfs and .pkg, in both directions.

Install

  1. Download PS5-FFPFSC-ULTRA-1.1.16-macos-arm64.zip and unzip it.
  2. On first launch on another Mac: xattr -dr com.apple.quarantine "PS5 FFPFSC ULTRA.app"

macOS on Apple Silicon. SHA-256: 9d02d0d5572c2f521f3e3eb8cf992281e6a21d7e8c809a13352ec96a5d6de990

Full changelog: CHANGELOG.txt

1.1.15 — Safer file handling, sturdier fPKG builds

Choose a tag to compare

@knutwurst knutwurst released this 27 Sep 14:02

Safety and reliability release

1.1.15 closes every path where the app could delete or overwrite files it did not create, and makes fPKG builds fail loudly instead of producing packages that install but do not start.

Your files

  • Cleanup only removes the app's own working folders.
  • Building over an existing output keeps the old file until the new one is complete.
  • Moves to another drive are synced and size-checked before the source is removed.
  • Auto-organize keeps both packages when a name already exists.
  • Queue items on an unplugged drive stay in the queue; settings are saved atomically.

fPKG

  • A failed preparation step stops the build. The source folder is never written to.
  • Cancel removes every temporary file and the partial package.
  • The checklist after each build covers 19 points.

Archives

  • All saved passwords are tried for .7z; AES-encrypted ZIPs open via 7-Zip.
  • An archive with a game and its patch side by side is packed from the game.

Also

  • Sources with a PS4-style param.sfo no longer crash the metadata reader.
  • No false "insufficient temp space" errors before compression.

Install

  1. Download PS5-FFPFSC-ULTRA-1.1.15-macos-arm64.zip and unzip it.
  2. On first launch on another Mac: xattr -dr com.apple.quarantine "PS5 FFPFSC ULTRA.app"

macOS on Apple Silicon. SHA-256: 1714c5c94026decb27160bc62de0ca9305114fd67ae53dc5391491fbf322337a

Full changelog: CHANGELOG.txt