Last updated: September 2026

A PS1 library in BIN/CUE takes around 500 MB per disc. The same library in CHD takes 200 to 300, loads faster on a microSD card, and cannot lose its cue sheet because there is no cue sheet. Every disc-based system you emulate on a handheld, from PC Engine CD through PS2, benefits from the same conversion, and it is lossless: you can turn a CHD back into the original BIN/CUE byte for byte.

I converted my whole disc library once, years ago, and never thought about track files or missing cues again. This is how.


What a CHD Actually Is

CHD stands for Compressed Hunks of Data. It is MAME’s container format for disc and hard-drive images: one file, internally split into chunks that are compressed individually, with a header that describes the original disc’s track layout. Because each chunk is separate, an emulator reads only the part of the disc it needs, which is why CHD games load as fast as raw images despite the compression.

Two things follow from that design. It is lossless, so verification tools and emulators see the exact original disc. And the compression is real: PS1 discs shrink 40 to 60 percent because their audio tracks and padding compress well, PS2 DVDs shrink 20 to 40 percent, and Dreamcast GDIs, which are mostly empty padding, shrink by half or more.

SystemOriginal formatTypical saving
PS1BIN/CUE40 to 60 percent
PS2ISO20 to 40 percent
Sega SaturnBIN/CUE40 to 60 percent
DreamcastGDI50 to 70 percent
Sega CDBIN/CUE40 to 60 percent
PC Engine CDBIN/CUE40 to 60 percent
Neo Geo CDBIN/CUE40 to 60 percent
PSPISO20 to 40 percent

Which Emulators Read CHD

Nearly everything current:

Emulator or coreSystemsCHD support
DuckStation, Beetle PSX, PCSX ReARMed, SwanStationPS1Yes
PCSX2 2.x, NetherSX2, AetherSX2PS2Yes
Flycast (standalone and core)Dreamcast, NaomiYes
Beetle Saturn, Yabause, KronosSaturnYes
Genesis Plus GX, PicoDriveSega CDYes
Beetle PCE, Beetle PCE FastPC Engine CDYes
PPSSPPPSPYes
RetroArch on every Linux handheld firmwareAll of the aboveYes, through the cores
DolphinGameCube, WiiNo. Dolphin uses RVZ instead.

The one system that does not use CHD is GameCube and Wii. Dolphin’s own RVZ format does the same job there, and Dolphin can convert to it from Tools > Convert without a command line.


Get chdman

chdman is part of MAME. You do not need MAME itself, just the tool.

  • Windows: download the MAME release from mamedev.org, extract it, and chdman.exe is in the folder. Or install namDHC, a graphical front end that bundles chdman and handles batches by drag and drop.
  • macOS: brew install rom-tools gives you chdman on the command line.
  • Linux: the package is mame-tools on Debian and Ubuntu, mame-tools on Fedora, mame-tools on Arch. All include chdman.
  • Steam Deck: in Desktop Mode, Discover has MAME; installing it via Flatpak also provides chdman inside the Flatpak. EmuDeck’s tools include a CHD converter that wraps the same binary.

Converting One Game

Every command follows the same shape: the input file, the output file, and a subcommand that tells chdman what kind of disc it is.

CD-based systems (PS1, Saturn, Sega CD, PC Engine CD, Neo Geo CD):

chdman createcd -i "Game.cue" -o "Game.chd"

Point it at the .cue, not the .bin. chdman reads the cue sheet, pulls in every track it lists, and packs them all into the one CHD.

Dreamcast (GDI):

chdman createcd -i "Game.gdi" -o "Game.chd"

Same command; the .gdi plays the role of the cue.

PS2 and PSP (DVD ISO):

chdman createdvd -i "Game.iso" -o "Game.chd"

createdvd exists in chdman from MAME 0.262 onward. Older builds only have createcd, which also works on an ISO but produces a CHD that PCSX2 1.6 rejects. Get a current MAME and use createdvd for anything DVD-sized.

Faster compression:

chdman createcd -i "Game.cue" -o "Game.chd" -c zstd

Zstandard encodes several times faster than the default with a near-identical file size. I use it for everything.

A PS1 disc converts in ten to thirty seconds. A 4 GB PS2 DVD takes one to three minutes.


Batch Conversion

A folder of a hundred PS1 games is one line.

Windows (Command Prompt), in the folder with the cues:

for %i in (*.cue) do chdman createcd -i "%i" -o "%~ni.chd"

In a .bat file, double the percent signs: %%i and %%~ni.

macOS and Linux:

for f in *.cue; do chdman createcd -i "$f" -o "${f%.cue}.chd"; done

PS2 folder of ISOs:

for f in *.iso; do chdman createdvd -i "$f" -o "${f%.iso}.chd"; done

namDHC does the same with a drag of the folder onto the window and a click, and it shows per-file progress, which is nicer for a big library. Verify a couple of the outputs in your emulator before deleting the originals.


Converting Back

Lossless means reversible.

chdman extractcd -i "Game.chd" -o "Game.cue"
chdman extractdvd -i "Game.chd" -o "Game.iso"

extractcd writes the .cue and a .bin beside it with the original track layout. I have only needed this once, to feed a game to an old emulator that predates CHD, and it produced a byte-identical image.


Multi-Disc Games

Multi-disc PS1 and Saturn games still use an .m3u playlist so the emulator can swap discs. Convert each disc to its own CHD, then make a plain text file:

Final Fantasy VII (Disc 1).chd
Final Fantasy VII (Disc 2).chd
Final Fantasy VII (Disc 3).chd

Save it as Final Fantasy VII.m3u in the same folder, and load the .m3u in RetroArch or DuckStation. On handheld firmwares, hide the individual discs from the menu by moving them into a subfolder the playlist references, or use the firmware’s built-in hide-file option; muOS and Knulli both have one.


CHD on Handhelds

Every Linux firmware I cover, muOS, Knulli, ROCKNIX, ArkOS, OnionOS, GarlicOS and stock Anbernic, runs RetroArch cores that read CHD. Drop the .chd into the system’s ROM folder exactly where the .cue would have gone. On Android, DuckStation, NetherSX2, Flycast and PPSSPP all scan for CHD by default.

The practical benefit on a handheld goes beyond space. A microSD card reads one large sequential file much faster than a cue plus a dozen track files, and a CHD cannot break because someone renamed the .bin and orphaned the .cue. Half the “PS1 game won’t load” reports I see are a cue sheet pointing at a file that was renamed.


Common Problems

“Unable to open input file” on a cue. The cue references a .bin with a different name. Open the cue in a text editor and fix the FILE line to match the bin’s actual filename.

PCSX2 refuses a PS2 CHD. It was made with createcd on an old chdman, or you are on PCSX2 1.6. Reconvert with createdvd on a current build; PCSX2 2.x reads it.

Audio tracks silent in a PS1 game. The original rip was missing its audio tracks, and the CHD preserved that. Re-rip the disc.

A game is bigger as a CHD. It was already compressed (an ECM or a PBP). Decompress to BIN/CUE first, then convert.

RetroArch shows the game but it will not boot. The core assigned to the folder does not support CHD. Beetle PSX and PCSX ReARMed both do; a very old core version does not. Update the core.


CHD vs PBP vs CSO

FormatSystemsLosslessNotes
CHDAll CD and DVD systemsYesThe standard. Use it.
PBPPS1Yes for data, optional lossy audioThe PSP’s format. Fine on a PSP, pointless elsewhere.
CSOPSPYesPPSSPP’s own compression. CHD does the same job and works in more places.
RVZGameCube, WiiYesDolphin’s format. The right choice for those two systems.

FAQ

Is CHD lossless?

Yes. Extracting a CHD reproduces the original image exactly.

Does CHD slow down loading?

No. Chunks decompress on demand and the single-file layout reads faster from a microSD than a cue with many tracks.

Can I convert PS2 ISOs to CHD?

Yes, with chdman createdvd. PCSX2 2.x and NetherSX2 both read them.

Does CHD work for GameCube?

No. Use Dolphin’s RVZ format for GameCube and Wii.

What about my save files?

Saves are stored by the emulator, keyed on the game’s serial or filename. Converting the disc image does not touch them. If a save fails to load after conversion, the emulator is keying on the filename and the CHD’s name differs from the cue’s; rename to match.


MAME (chdman) | namDHC | Recalbox chdman wiki


Last verified: September 2026