rom-weaverA ROM & Patch toolkit

Pick a compression format

CHD, RVZ, Z3DS, 7z, ZIP. This guide explains which compressed format fits which console, when trimming beats compressing, and what compression does to your checksums.

Two kinds of compression

There are two different things people mean by "compressing a ROM", and they behave differently.

A general archive such as ZIP or 7z wraps any file. To play the game, the bytes usually have to come back out first, either by extracting or by an emulator unpacking the archive itself.

A compressed disc image such as CHD or RVZ is a purpose-built container for one disc. Emulators that support it read it directly, so the file stays small on disk and still boots. When your console has one of these formats, it is almost always the better choice.

Compressed disc images: CHD, RVZ, Z3DS

CHD is the MAME-family container and the standard answer for CD- and DVD-based consoles: PlayStation 1 and 2, Saturn, Sega CD, TurboGrafx-CD, and Dreamcast GD-ROM discs all compress well into it, and emulators such as DuckStation, PCSX2, and Flycast read it natively. rom-weaver creates CHD from .cue/.gdi/.iso inputs, with output validated byte-for-byte against chdman:

rom-weaver compress --input disc.cue --output disc.chd

RVZ is Dolphin's format for GameCube and Wii discs. It understands the disc's own padding, so it shrinks images far beyond what a general archive manages, and Dolphin plays it directly. rom-weaver's RVZ output matches dolphin-tool byte for byte.

Z3DS is the zstd-compressed container for Nintendo 3DS images (.z3ds and friends), read by Azahar-family emulators.

Formats rom-weaver can open but not create, like GCZ, WIA, WBFS, and CSO, are worth converting: extract them and recompress into the modern format for that console.

General archives: ZIP and 7z

Cartridge ROMs are small, and many emulators load them straight from a ZIP. That makes ZIP the safe default for NES through GBA-era files: universally readable, fast, and good enough at these sizes. 7z compresses tighter but fewer emulators open it directly, so it fits long-term storage more than a play library. rom-weaver creates both, and the archive formats guide covers everyday extract and convert workflows.

Avoid double-wrapping: a CHD inside a 7z gains almost nothing and has to be extracted before it can boot.

Trim, compress, or both

Some cartridge and disc formats carry padding rather than data. Trimming cuts it off instead of squeezing it: rom-weaver trims NDS, GBA, and 3DS ROMs, Xbox XISO images, and RVZ scrub candidates, and --revert-marker makes the trim reversible byte for byte. For flashcarts and tight storage, a trimmed ROM needs no decompression at all. The trim support list has the details.

Compression changes your checksums

A compressed file never hashes the same as the dump inside it, so a .chd will not match a database entry for the .bin it was made from. That is normal. rom-weaver's probe and checksum commands read inside supported containers, so you can verify the payload without unpacking it. If a patch guide expects a specific checksum, check it against the extracted image, and see Fix a checksum error when it still disagrees.

Which format should I choose?

  • CD/DVD console (PS1, PS2, Saturn, Sega CD, Dreamcast): CHD.
  • GameCube or Wii: RVZ.
  • Nintendo 3DS: Z3DS.
  • Cartridge ROMs you play: ZIP, or trimmed files where padding dominates.
  • Cold storage: 7z for the tightest general-purpose ratio.
  • Already in GCZ, WIA, WBFS, or CSO: convert to the modern format above.

The Supported formats reference is the authoritative table of every container, extension, and codec, including the --codec values each output accepts. Back to the guide index.