A complete PlayStation 1 library weighs several hundred gigabytes in BIN/CUE. The same library in CHD often fits on a card half the size, with a single file per game instead of a .cue file plus a stack of .bin files. The format comes from MAME, it is lossless, and almost every emulator for CD-based consoles reads it today.
Conversion is done with a command-line tool, chdman, or with a graphical interface. It isn't complicated, but three pitfalls can cost you an evening if you don't know about them: protected PAL games, multi-disc games, and a few emulators that reject certain variants of the format.
What a CHD file really is
CHD stands for Compressed Hunks of Data. The format was created to archive arcade machine hard drives in MAME, then extended to CD and DVD images. Two properties matter to you.
First, the compression is lossless. The restored data is bit-for-bit identical to the original image. It is not a re-encode: the music is not degraded, and neither are the videos.
Second, CHD is a single container. A Saturn game supplied as one .cue and twenty-three .bin files becomes a single .chd. Your folders become readable, and cover art scrapers find their way around much better. If your folder structure is already a mess, our guide to organising folders by firmware covers the subject in detail.
Technically, chdman splits the image into blocks (the hunks) and applies the best codec among those allowed to each one. For a CD, the default codecs are cdlz, cdzl and cdfl: LZMA, Deflate and FLAC, applied separately to data, audio and subchannels. This mix explains the differences in savings from one game to another.
Which systems benefit, and which gain nothing
CHD is only worthwhile for optical media. A cartridge is already a compact file, often already compressed by the core itself: converting a Super Nintendo ROM brings nothing, and no emulator will be able to read it.
| System | Recommended format | Comment |
|---|---|---|
| PlayStation 1 | CHD | The most worthwhile case. Read by DuckStation, Beetle PSX, SwanStation. |
| Sega Saturn | CHD | Beetle Saturn and Yabause accept .chd. No more folders with twenty tracks. |
| Dreamcast | CHD | Conversion from GDI or CUE, read by Flycast. |
| Mega CD, PC Engine CD, Neo Geo CD, 3DO, CD32 | CHD | Up-to-date libretro cores. The Opera core (3DO) accepts .chd. |
| PlayStation 2 | CHD | Works, but read the section on Android emulators below. |
| PSP | CHD or CSO | CHD supported since PPSSPP 1.17, slightly better than CSO. |
| GameCube, Wii | RVZ | Dolphin's own format, more efficient here. CHD is not read by Dolphin. |
| Cartridges (NES, SNES, Mega Drive, GBA, N64…) | None | ZIP or 7z archive if needed, never CHD. |
For GameCube and Wii, conversion is done in Dolphin: right-click the game, Convert File, then the RVZ format. The exact label varies depending on the emulator version.
The real savings, and why they vary so much
The order of magnitude generally observed is between 30 and 60% of space recovered. A few published measurements give an idea: Resident Evil 2 (PS1, disc 1) goes from 656 MB to 370 MB, Devil May Cry (PS2) from 4.69 GB to 1.84 GB, Summon Night 5 (PSP) from 912 MB to 337 MB. On a mixed batch, halving the size is a realistic goal.
The variation comes from the content of the disc. A PS2 DVD is overwhelmingly filled with empty space or redundant data: padding compresses enormously. Conversely, a CD with half of its surface taken up by audio tracks gains much less. These tracks are handled with FLAC, which is excellent but is still lossless audio compression: you typically recover a third to a half, not 90%.
The same logic applies to games packed with cutscenes. The videos are already compressed at source; recompressing them yields almost nothing. A short, lean PS1 platformer can shrink by 70%, while a Mega CD role-playing game with a full Redbook soundtrack will barely drop by 20%. Don't size your memory card purchase on the best case; our microSD card guide gives the capacities that make sense.
The method with chdman
Getting the tool
chdman is distributed with MAME. On Windows, it is in the official MAME archive under the name chdman.exe, and it is also supplied with the namDHC interface. On macOS, with Homebrew:
brew install rom-tools
On Debian and Ubuntu, the package is called mame-tools:
sudo apt install mame-tools
Then run chdman without any arguments: the program displays its version and the list of commands. Linux repositories sometimes ship a version that lags far behind MAME; if you are targeting PSP or PS2, go for a recent binary.
Converting a CD
For a CD image, whatever the system (PS1, Saturn, Dreamcast, Mega CD, PC Engine CD, 3DO):
chdman createcd -i "game.cue" -o "game.chd"
The command also accepts .gdi, .toc and .iso images as input. The .cue file must be correct and the .bin files it references must be in the same folder, otherwise the conversion stops immediately.
Converting a DVD (PS2, PSP)
For a DVD image, the command is different, and the block size matters:
chdman createdvd -hs 2048 -i "game.iso" -o "game.chd"
The -hs 2048 option sets the hunk size to 2,048 bytes. The PPSSPP documentation explicitly recommends it for PSP images: with the default values of some chdman versions, read performance collapses. Since PPSSPP 1.17.1, a Zstandard mode is also available and can be slightly faster:
chdman createdvd -hs 2048 -i "game.iso" -o "game.chd" -c zstd
Don't use createraw for a game: that command exists for arcade hard drive images.
Processing a whole folder
On Linux and macOS, a loop over the .cue files in the current folder:
for f in *.cue; do chdman createcd -i "$f" -o "${f%.cue}.chd"; done
To include subfolders:
find . -type f -name "*.cue" -exec sh -c 'chdman createcd -i "$1" -o "${1%.cue}.chd"' _ {} \;
On Windows, in a .bat file placed next to chdman.exe:
for /r %%i in (*.cue) do chdman createcd -i "%%i" -o "%%~dpni.chd"
If you type this same line directly into the command prompt, replace %%i with %i. Conversion is CPU-intensive: allow anywhere from a few seconds to several minutes per game, and much longer for a PS2 DVD.
Without the command line
Three common solutions, all built around the same chdman:
-
namDHC (Windows, free, GPL-3.0): drag and drop, batch conversion, extraction and verification. It needs
chdman.exein the same folder; the published releases include it. - CHDroid (Android, available on the Play Store and on GitHub): converts directly on your phone or on an Android console. Handy on a Retroid Pocket or an AYN, but slow on large DVDs.
-
Swift-CHD (macOS): a small interface that calls the
chdmaninstalled by Homebrew.
These interfaces expose the same options as the command line, hunk size included. Make sure they use DVD mode for PS2 and PSP.
The pitfalls that cost you an evening
Protected PAL PS1 games and their .sbi file
Some European PlayStation 1 games include a protection called LibCrypt, which relies on subchannel data missing from a standard BIN/CUE dump. This data is supplied separately, in a small .sbi file.
chdman does not include it in the CHD. Keep the .sbi next to the .chd, with exactly the same base name: Ape Escape (Europe).chd and Ape Escape (Europe).sbi. DuckStation and Beetle PSX then load it automatically. For a protected PAL game on several discs, the Beetle PSX documentation specifies a [name]_[disc number].sbi naming scheme. Without this file, the game starts and then freezes or loops on a screen, which looks exactly like a corrupted image.
Multi-disc games and the .m3u file
Converting each disc separately gives you as many .chd files. For the emulator to see them as a single game and handle disc swapping, create a text file with the .m3u extension named after the game, containing one file name per line, without a path, in the same folder:
Final Fantasy VII (France) (Disc 1).chdFinal Fantasy VII (France) (Disc 2).chdFinal Fantasy VII (France) (Disc 3).chd
You then launch the .m3u, never disc 1 directly. This is also what allows the virtual memory card to be shared between discs.
Emulators that won't take it
The most common case today concerns PlayStation 2 on Android: AetherSX2 and NetherSX2 reject CHDs created with createdvd. The known workaround is to generate these images with createcd, at the cost of a slightly larger file. These two apps are no longer maintained, so there will be no fix. On PC, PCSX2 doesn't have this problem. The subject is covered in our article on PS2 emulators on handhelds.
The other case is that of old cores shipped with some stock firmwares on entry-level consoles: CHD support arrived gradually in libretro cores, and a 2019 build may well not know about it. Typical symptom: the game doesn't appear in the list, or the emulator closes without a message. Updating the firmware solves the problem nine times out of ten — see our firmware compatibility table and, if the game still refuses, the list of reasons a game won't start.
Going back
A CHD is not a one-way trip. To rebuild the original image:
chdman extractcd -i "game.chd" -o "game.cue"
You get back a .cue and its .bin files. The extension of the output file determines the format produced: specify .gdi for a Dreamcast game dumped as GDI. For a DVD:
chdman extractdvd -i "game.chd" -o "game.iso"
Two useful commands before erasing anything: chdman info -i "game.chd" displays the container version and the codecs used, and chdman verify -i "game.chd" checks the file's integrity. The extracted content is identical to the original; only the track split may differ from your starting dump, with no consequence for emulation.
In practice
Start with a single game, using createcd, try it on the console concerned, then run the batch overnight. Keep the originals until everything is validated, and don't forget the .sbi and .m3u files when copying to the card. Once the library is converted, a 128 GB card easily holds what used to need 256 — and if you still need more capacity, our microSD cards go through a full write-and-read-back check before shipping.
Does CHD degrade the game's audio or video quality?
No. The compression is strictly lossless, including for audio tracks, which are handled with FLAC. The restored data is identical to that of the original image. You can confirm this with the chdman verify command, then by re-extracting the file.
Should I also convert my Game Boy Advance or Super Nintendo games?
No, there is no point. CHD is designed for optical disc images. Cartridges are already small files, and no cartridge console emulator reads CHD. If you want to save space, most libretro cores accept ZIP archives directly.
Why does my European PS1 game crash after conversion?
It is almost always the LibCrypt protection. The .sbi file that came with the original image must stay in the same folder as the .chd and have the same base name. It is not included in the CHD during conversion, and many people forget it when copying.
createcd or createdvd for a PlayStation 2 game?
On PC with PCSX2, createdvd gives the best result. On Android with AetherSX2 or NetherSX2, these CHDs are rejected and you have to use createcd. As these two apps are no longer maintained, the situation is unlikely to change.
How long does it take to convert an entire library?
It depends entirely on your processor and its number of cores. Allow a few dozen seconds for a PS1 CD on a recent machine, and several minutes for a PS2 DVD. For a collection of several hundred games, start the batch processing in the evening and collect the result the next day.
Can I convert directly on my Android handheld console?
Yes, with CHDroid. It is handy for a few titles, but a handheld console's processor is much slower than a desktop PC, and conversion puts heavy write load on the microSD card. For a large batch, do it on a computer and then copy the files.
