Skip to content

Compression

DeLFuS77 edited this page Nov 11, 2026 · 4 revisions

Solid or in blocks

Solid (the default) In blocks (-B)
Size The smallest A little bigger
Installers All: DBI, Tinfoil, Awoo, CyberFoil, Sphaira All but Awoo
Emulators that read NSZ Decompress it first Run it as it is
XCZ — Always in blocks, as nsz writes them

In the window it is chosen in Made for: Installers or Emulators and installers. Recompress turns an NSZ from solid to blocks, or to another level, without the NSP in between.

The level

It goes from 1 to 19. The buttons group it in three bands: Light (1–6), Medium (7–14) and Maximum (15–19). 18, the default of nsz, is the one of NXPress: 19 makes the files barely smaller and takes much longer. Above 19 the zstd window would grow past the 8 MiB installers decompress with, so NXPress uses 19.

Three tools help to choose, and none of them writes anything:

  • Estimate (--estimate): the size and the time a compression would give, from samples of each file.
  • Compare the levels on this computer (--estimate --levels): the same at the levels 3, 9, 12, 15, 18 and 19.
  • Measure this PC (--measure): tries threads and files at once on a few seconds of a game of the list and keeps the fastest. It takes a heavier setting only when it is at least 5% faster, and says why it keeps the lighter one.

How every file is checked

  1. While the original is read, every NCA is hashed.
  2. The new file is written under a hidden name and saved to the disk.
  3. It is decompressed again, and every NCA has to give back its original hash. When an NCA rewritten by a tool no longer matches its content ID, its hash trees are checked, as hactool does.
  4. Only then does it get its name. With Delete originals once checked (--rm-source), the original is deleted only when its new file passed the whole check. One that could be checked only in part never replaces its original.

A new file never takes the place of an original or of another file of the same work, and a power cut does not lose a game: the new file is on the disk before it takes its name and before an original is deleted.

Extra compression (experimental)

Extra compression, NXPress only, under Advanced (--extra on the command line), compresses two things other compressors leave as they are, and gives them back byte for byte:

  • Base games in sparse storage, released cut down to go with their day-one update. The NCZ format cannot hold them, so nsz and every other compressor leave them as they are. NXPress writes them in an extension of NCZ, NCZSECT2 (specification).
  • The data Nintendo compressed with LZ4 inside many recent games and updates, which zstd can hardly shrink. NXPress keeps those blocks decompressed and makes them again, byte for byte, with the two LZ4 compressors of Nintendo when the file is decompressed: NCZSECT3 (specification).

Each file gets what it needs, and one that needs neither stays a plain NSZ. Installers and emulators do not read the two extensions yet: decompress such a file with NXPress before installing it. Its row and Details say so. The option is off by default, and turning it on first shows what it changes. --sparse and --archive turn on one half each.

In the tests, a game in sparse storage came out 6% smaller, and an update with LZ4 blocks about 6% smaller than as a plain NSZ. Decompressed with NXPress, both gave back the original byte for byte. Tested with DBI.

Optimize for install (experimental)

Optimize for install, in Compress (--optimize on the command line), makes a game and its update one game that takes the least room once installed:

  • one Application of the version of the update, with no update apart;
  • its data compressed with the LZ4 the system reads since firmware 12.0.0, block by block, keeping the smaller of Nintendo's block and the new one;
  • what the game holds twice, stored once.

In the window it comes out as an NSZ (the optimized NSP with zstd over it); on the command line, as an NSP, or an NSZ with -C. Before it gets its name, NXPress opens it again and checks it whole.

In the tests, installed, the games with their update took between 44% and 84% less room. Games with a lot of audio or video already compressed save much less. Tested with DBI.

What to know:

  • It installs with NXDock or DBI, with sigpatches and firmware 12.0.0 or newer.
  • Official updates do not go over it. When a newer update comes, optimize the original game again with it: that is why the originals are never deleted, even with Delete originals once checked.
  • DLC are not touched: install them as usual, next to the optimized game.
  • Games of several programs are not optimized yet; NXPress says so and leaves them as they are.

What you lose with it:

  • Official updates. They cannot be installed over it, not even from the eShop. To move to a newer version, optimize the original game again with the new update, so keep the original game and its update.
  • The signature of Nintendo. The program and the metadata are made again, so sigpatches and firmware 12.0.0 or newer are needed. DBI marks them as Fake when it installs them.
  • Going back to version 1.0 just like that. The optimized game is already at the version of the update; to go back, install the original again.
  • Time and room on the PC. Optimizing takes from seconds to about a minute per game in the tests. While it works it needs room for the new file and, for an NSZ or XCZ, for the decompressed NSP too.
  • DLC save nothing. They stay as they are.

What you do not lose: your saves, the DLC installed and the game itself. What the game reads is the same as with its update, byte for byte, and that is checked before the file gets its name.

How it is made: specification.

Games that are skipped

Some games have nothing to compress and are marked Skipped, with why: a game in sparse storage, which installs as it is and which only the extra compression compresses; sections with an encryption NXPress does not read; NCA files with no game data; or a file compressed already, under another name.

Clone this wiki locally