A full PS2 library in raw ISO format eats more than 3TB. Convert the same discs to CHD and that number drops by roughly half, according to compression data documented across current emulator guides. If your emulator folder is bloating your SSD and you’re tired of juggling BIN/CUE pairs, GDI folders, and oversized ISOs, chdman is the fix nearly every serious emulation setup relies on in 2026.
This tutorial walks through installing chdman, ripping your own physical discs the legal way, converting PS1, PS2, GameCube, Wii, Dreamcast, and Saturn images into CHD, verifying the results, and wiring everything into DuckStation, PCSX2, Dolphin, Flycast, and RetroArch. It also covers the emulators that don’t read CHD natively (RPCS3, Xenia) and how to work around that gap. By the end you’ll have a compressed, verified, emulator-ready disc library instead of a folder full of oversized, unlabeled dumps.
What CHD Is and Why It Matters for Emulation
CHD stands for Compressed Hunks of Data. It’s a container format born inside the MAME project that stores an entire disc image, tracks and all, as a single file split into individually compressed chunks called hunks. A header describes the original disc’s track layout, so when an emulator reads a CHD it only decompresses the specific hunk it needs at that moment rather than unpacking the whole file into memory, according to a September 2026 breakdown of the format from RetroHandheldHQ.
That matters for two practical reasons. First, space: CHD compression is lossless, meaning every bit of the original disc data survives the round trip, but the file on disk shrinks. Second, convenience: a PS1 or Saturn game that used to be a folder of a dozen .bin track files plus a .cue sheet becomes one .chd file. A Dreamcast GDI dump, which is normally a loose folder of track files and a .gdi index, becomes one file too. That alone eliminates a huge source of “missing track” and “wrong file order” errors that trip up first-time emulation builders.
The compression itself isn’t uniform across every disc type, and knowing the rough numbers helps you plan storage before you start converting a multi-hundred-game library.
| Console / Disc Type | Source Format | Typical CHD Space Savings | chdman Subcommand |
|---|---|---|---|
| PS1 / Sega Saturn / Sega CD | BIN/CUE | 30-50% smaller | createcd |
| Sega Dreamcast / Naomi | GDI | 40-60% smaller | createcd |
| PS2 / PSP | ISO (DVD) | ~50% smaller | createdvd |
| GameCube / Wii | ISO | ~50% smaller (title-dependent) | createdvd |
| Arcade hard disk images | Raw HDD dump | Varies by content | createhd |
Those figures come from current 2026 emulator documentation and community guides rather than a single official chart, so treat them as realistic ranges, not guarantees for every disc. A game that’s mostly compressed FMV footage will shrink less than a game that’s mostly repetitive audio data, since chdman’s compression works best on redundant patterns.
Prerequisites: What You Need Before You Start
Gather these before you touch a single disc. Skipping this step is the single biggest reason people redo their entire conversion pass a week later.
- MAME tools package (bundled with the MAME 0.278 64-bit release as of September 2026) — chdman ships inside it rather than as a standalone download.
- A disc drive capable of reading your physical media, or existing verified-good disc dumps you already own the rights to.
- DiscImageCreator (Windows) or a comparable ripping utility if you’re dumping physical discs from scratch.
- 50-200GB of free scratch space, temporarily, since you need room for the uncompressed source file alongside the CHD output during conversion.
- 7-Zip or a similar archive tool if any of your source dumps arrive pre-zipped.
- Windows 10/11, macOS 13+, or a modern Linux distro — chdman is cross-platform and ships prebuilt for all three.
- DuckStation, PCSX2, Dolphin, Flycast, or RetroArch already installed, since this guide assumes you’re converting for one of those front ends.
- Basic comfort with a command-line terminal. chdman has no official GUI from the MAME team; some third-party front ends exist, but the reliable path is the command line.
If you’d rather skip manual ripping altogether, prebuilt distributions like EmuDeck and RetroDECK bundle CHD-ready emulators out of the box, though you’ll still need to supply your own legally dumped disc images. A quick legal note before step one: only rip and convert discs you physically own. CHD conversion is a preservation and convenience tool for your own media, the same category as ripping a CD you bought into MP3. Downloading pre-made ROM or CHD files for games you don’t own is a different act entirely and isn’t what this tutorial covers.
Step 1: Download and Extract chdman
Head to the official MAME release page and grab the current 64-bit Windows build, or the equivalent package for macOS/Linux through your package manager or the MAME source tools. On Windows, the archive is typically named something like mame0278b_64bit.exe or a matching .7z tools package for that release.
Extract the archive to a permanent folder, for example C:ToolsMAME. Inside you’ll find chdman.exe alongside the main MAME emulator binary and a pile of supporting DLLs. You only need chdman.exe and the DLLs sitting next to it — you don’t need to run MAME itself for any of this.
On Linux, most distributions package chdman separately from the full MAME emulator. On Arch-based systems it’s part of the mame-tools package, and the man page confirms the tool is actively maintained as of the 2026 documentation refresh. On macOS, Homebrew’s MAME formula includes chdman, or you can build the MAME tools target from source if you want the bleeding-edge version.
Confirm the install worked by opening a terminal in that folder and running:
chdman --help
You should see a list of subcommands: createcd, createdvd, createhd, createraw, extractcd, extractdvd, extracthd, extractraw, verify, info, and update — full syntax for every flag is documented on the official chdman reference page. If the command isn’t recognized, add the tool’s folder to your system PATH, or simply run the executable from inside that same directory for every command in this guide.
Step 2: Add chdman to Your System PATH (Optional but Recommended)
This step saves you from typing full file paths every time. On Windows, search for “Environment Variables” in the Start menu, open “Edit the system environment variables,” click Environment Variables, select Path under System variables, click Edit, then New, and paste in the folder where chdman.exe lives.
On macOS or Linux, add a line to your shell profile:
export PATH="$PATH:/opt/mame-tools"
Reload your terminal (or run source ~/.zshrc or the equivalent for your shell) and test with chdman --help again from any directory. If it prints the same help output regardless of your current folder, the PATH is configured correctly.
Step 3: Rip Physical Discs the Right Way (If You’re Starting From Scratch)
If you already have disc images from a prior backup, skip to Step 4. If you’re dumping discs you own for the first time, the quality of your rip determines the quality of your CHD, since chdman preserves whatever data it’s given, errors included.
For CD-based systems (PS1, Saturn, Sega CD, Dreamcast), DiscImageCreator is the tool most current guides recommend on Windows. It produces accurate BIN/CUE sets with subchannel data intact, which matters for copy-protected PS1 titles and for matching known-good hash databases. Run it against your optical drive with a redumping-focused profile rather than a quick single-pass rip.
For DVD-based systems (PS2, GameCube, Wii), ImgBurn (Windows) or ddrescue (Linux/macOS) produce a straightforward single ISO file. GameCube and Wii discs generally rip clean as long as your drive can read the disc without scratches interfering — a drive rated for reading slightly worn media, or a cleaning pass on the disc first, avoids most read errors.
Once you have your raw dump, cross-check it against redump.org, the community database that tracks known-good hashes for disc-based games across most consoles. Compare your rip’s CRC32, MD5, or SHA-1 hash against the listed value for that exact regional release. A mismatch means your rip has an error somewhere — usually a scratch-related read failure — and re-ripping before converting saves you from baking a corrupted file into your permanent CHD library.
Step 4: Convert a CD-Based Game (PS1, Saturn, Dreamcast) to CHD
For any disc that came from a CD (PS1, Saturn, Sega CD) or a Dreamcast GDI dump, use the createcd subcommand. Point it at the .cue file for CD dumps, or the .gdi file for Dreamcast — never point it directly at a .bin or .iso file when a .cue or .gdi index exists, since that index is what tells chdman how the tracks fit together.
chdman createcd -i "Final Fantasy VII (USA) (Disc 1).cue" -o "Final Fantasy VII (USA) (Disc 1).chd"
For a Dreamcast GDI-based game:
chdman createcd -i "Shenmue (USA).gdi" -o "Shenmue (USA).chd"
chdman reads the index file, pulls in every referenced track automatically, and writes a single .chd file in the same folder unless you specify a different output path. A typical PS1 game finishes in under a minute on modern hardware; a full Dreamcast GDI set can take a few minutes depending on disc size and your CPU.
Step 5: Convert a DVD-Based Game (PS2, PSP, GameCube, Wii) to CHD
DVD-based discs use a different subcommand: createdvd. This applies to PS2 and PSP ISO dumps, and in most current emulator workflows to GameCube and Wii ISOs as well, since those are DVD-structured discs.
chdman createdvd -i "God of War II (USA).iso" -o "God of War II (USA).chd"
This is the single most common mistake people make: running createcd on a PS2 ISO instead of createdvd. The command will often complete without an obvious error, but you’ll end up with a broken or oversized file, or Dolphin/PCSX2 will refuse to load it. Always match the subcommand to the disc type, not just the file extension.
PS2 discs typically take several minutes to convert given their larger size — a 4.7GB single-layer disc or an 8.5GB dual-layer disc both process fine, just budget more time for the bigger ones.
Step 6: Batch Convert an Entire Library
Converting one game at a time is fine for a handful of discs, but nobody wants to type 200 individual commands for a full PS1 or PS2 collection. A simple batch script handles the repetitive work.
On Windows, save this as batch_convert.bat in a folder containing your .cue files (for CD-based systems), then run it:
@echo off
for %%f in (*.cue) do (
chdman createcd -i "%%f" -o "%%~nf.chd"
)
echo Done.
pause
For a folder of PS2 or GameCube ISOs, swap the subcommand and extension:
@echo off
for %%f in (*.iso) do (
chdman createdvd -i "%%f" -o "%%~nf.chd"
)
echo Done.
pause
On macOS or Linux, a one-line loop in bash accomplishes the same thing:
for f in *.cue; do chdman createcd -i "$f" -o "${f%.cue}.chd"; done
Run these one subfolder at a time if your library is organized by console, and double-check the extension pattern matches what’s actually in that folder before you let it run unattended on a few hundred games overnight.
Step 7: Handle Multi-Disc Games Correctly
Games that shipped across multiple discs — Final Fantasy VII through IX, Metal Gear Solid, Xenogears — need each disc converted to its own separate CHD file, not merged into one. Name them consistently so your frontend or emulator’s disc-swap feature can find them:
- Final Fantasy IX (USA) (Disc 1).chd
- Final Fantasy IX (USA) (Disc 2).chd
- Final Fantasy IX (USA) (Disc 3).chd
- Final Fantasy IX (USA) (Disc 4).chd
DuckStation and most RetroArch cores detect the “(Disc 1)”, “(Disc 2)” naming pattern automatically and offer an in-game disc-swap menu once you’ve loaded the .cue-style multi-disc grouping or an .m3u playlist pointing at each CHD in order. An .m3u file is just a plain text list, one CHD filename per line, saved with an .m3u extension in the same folder — load that in your emulator instead of a single disc and it treats the whole set as one game with swappable discs.
Step 8: Verify Your Converted Files
Never assume a conversion succeeded just because chdman didn’t print an error. Run the built-in verification pass on every batch before you delete your source files:
chdman verify -i "Final Fantasy VII (USA) (Disc 1).chd"
This checks the internal checksums stored in the CHD against the actual compressed data, catching corruption introduced during conversion or file transfer. You can also pull metadata about a specific file with:
chdman info -i "Final Fantasy VII (USA) (Disc 1).chd"
The info output shows the CHD format version, track layout, compression method used, and original vs. compressed size — useful for confirming a batch job actually shrank your files instead of silently failing and copying the source data uncompressed.
Step 9: Point Your Emulator at the New CHD Files
Native CHD support varies by emulator. Knowing which ones read CHD directly, and which need a workaround, saves you from converting a library only to discover half your emulators can’t open the result.
| Emulator | System | Native CHD Support |
|---|---|---|
| DuckStation | PS1 | Yes |
| PCSX2 | PS2 | Yes |
| Dolphin | GameCube / Wii | Yes |
| Flycast | Dreamcast / Naomi | Yes |
| RetroArch (Beetle PSX, Genesis Plus GX cores) | Multi-system | Yes |
| MAME | Arcade | Yes (native format) |
| BizHawk | Multi-system | Yes |
| RPCS3 | PS3 | No — requires a mounting utility |
| Xenia | Xbox 360 | No — requires a mounting utility |
For DuckStation: open Settings, go to the Game List tab, and add the folder containing your .chd files as a search directory. DuckStation scans and indexes CHD files exactly like it would ISO or BIN/CUE files, no extra configuration needed.
For PCSX2: File > Open, then navigate to your .chd file directly, or add the folder to your configured game directories under Settings > Folders so it shows up in the library grid automatically.
For Dolphin: right-click the Games list, choose “Add Folder,” and select your directory of GameCube/Wii CHDs. Dolphin’s game scanner picks up .chd alongside .iso and .rvz without any extra setting.
For Flycast: drop your CHDs into Flycast’s configured content folder, or point the app directly at the file through its Games tab. Flycast has treated CHD as a first-class Dreamcast format since well before 2026, and most current setup guides recommend it as the default choice over raw GDI for exactly this reason.
For RPCS3 and Xenia, which don’t read CHD natively, a mounting utility bridges the gap. SimpleLauncher, an open-source frontend, ships a built-in tool called CHDMounter specifically for this — it exposes a CHD as a virtual ISO that RPCS3, Xenia, Cxbx-Reloaded, and a long list of other CHD-blind emulators can load as if it were an uncompressed disc image. If you’re mixing PS3 or Xbox 360 games into an otherwise CHD-based library, install SimpleLauncher and let CHDMounter handle the translation rather than keeping a separate uncompressed copy just for those two systems.
Step 10: Convert CHD Back to ISO or BIN/CUE (When You Need To)
Sometimes you need the original format back — burning a disc, running the game through a tool that doesn’t support CHD, or transferring a save file that a different emulator expects in ISO form. chdman’s extract commands reverse the process losslessly.
For a CD-based CHD, back to BIN/CUE:
chdman extractcd -i "Final Fantasy VII (USA) (Disc 1).chd" -o "Final Fantasy VII (USA) (Disc 1).cue"
For a DVD-based CHD, back to a raw ISO:
chdman extractdvd -i "God of War II (USA).chd" -o "God of War II (USA).iso"
Because CHD compression is lossless, the extracted file matches the original bit-for-bit, so you don’t lose any fidelity converting back and forth. This is also a good way to double check your conversion pipeline: convert to CHD, extract back to ISO, and hash-compare the extracted file against your original source dump.
Step 11: Update Older CHD Files to the Current Format
If you converted a library years ago and are just now revisiting it, your old CHDs may predate a format revision. MAME’s CHD format moved to version 4 with a change that computes and stores separate checksums for raw disc data and for metadata, closing a gap where malformed metadata could slip past validation. If you want your whole library on the current format for consistency and full checksum coverage, run:
chdman -update "OldGame.chd" "OldGame_v4.chd"
This isn’t mandatory — older CHDs still play fine in most emulators — but it’s worth doing if you’re troubleshooting a hash mismatch against a database like redump.org and suspect an outdated CHD structure is the culprit.
Step 12: Organize Your Library for Frontend Tools
Once your CHDs are converted and verified, naming and folder structure determine how well tools like Steam ROM Manager, LaunchBox, or Playnite pick them up. Stick to one folder per console, use the No-Intro or Redump naming convention (Region in parentheses, revision tags where relevant), and keep multi-disc .m3u files alongside their CHDs rather than in a separate folder.
A clean structure looks like this:
ROMs/
PS1/
Final Fantasy VII (USA) (Disc 1).chd
Final Fantasy VII (USA) (Disc 2).chd
Final Fantasy VII (USA) (Disc 3).chd
Final Fantasy VII (USA).m3u
PS2/
God of War II (USA).chd
Dreamcast/
Shenmue (USA).chd
This structure scans cleanly in DuckStation, PCSX2, Flycast, and RetroArch alike, and it’s exactly what most frontend scrapers expect when pulling box art and metadata by filename match.
5 Common Pitfalls When Converting to CHD
These mistakes account for the vast majority of “my CHD won’t load” reports across emulation communities.
- Pointing chdman at the wrong subcommand for the disc type. Using createcd on a PS2 ISO or createdvd on a PS1 CUE produces a file that some tools will refuse to open, or that loads with corrupted audio and broken cutscenes.
- Feeding chdman a .bin file directly instead of the .cue index. For multi-track CD games, the .cue file tells chdman how tracks are ordered and where the audio tracks live. Skip it and you’ll lose in-game music or FMV audio entirely.
- Converting a bad rip and assuming CHD “fixed” it. CHD compression is lossless — it preserves errors in your source dump exactly as faithfully as it preserves good data. A corrupted original produces a corrupted CHD every time.
- Deleting source files before running verify. Skipping the verification step and immediately wiping your original BIN/CUE or ISO means you have no fallback if the conversion silently failed.
- Mixing region tags and naming conventions mid-library. Inconsistent file naming (some games tagged “(USA)”, others untagged, others using abbreviations) breaks automated scrapers and multi-disc .m3u detection down the line.
Expected Output: What a Successful Conversion Looks Like
Running a createcd conversion on a typical PS1 game produces console output similar to this:
chdman - MAME Compressed Hunks of Data (CHD) manager
Output CHD: Final Fantasy VII (USA) (Disc 1).chd
Input file: Final Fantasy VII (USA) (Disc 1).cue
Input tracks: 25
Compressing, 100.0% complete... (ratio=42.1%)
Compression complete ... final ratio = 42.1%
The “ratio” figure tells you how much smaller the output is relative to the source — a 42.1% ratio here means the CHD ended up 42.1% smaller than the original BIN/CUE set, right in line with the 30-50% range typical for PS1 discs. If your ratio comes back near 0% or the process errors out partway through, the source file is either already compressed, corrupted, or you pointed chdman at the wrong file type.
CHD vs. Other Compressed Formats: How It Compares
CHD isn’t the only compressed ROM format in circulation, and it’s worth knowing when it’s the right choice versus PBP (used for PSP/PS1 on Sony’s own tools) or CSO (a PSP-focused compressed ISO variant).
| Format | Best For | Compression | Emulator Support |
|---|---|---|---|
| CHD | PS1, PS2, GameCube, Wii, Dreamcast, Saturn, arcade | 30-60% smaller, lossless | DuckStation, PCSX2, Dolphin, Flycast, RetroArch, MAME, BizHawk |
| PBP | PSP, some PS1 via PSP tools | Moderate, format-dependent | PPSSPP, PSP hardware, some PS1 emulators |
| CSO | PSP | Good for PSP UMD images | PPSSPP primarily |
| RVZ | GameCube, Wii | Strong, Dolphin-native | Dolphin only |
For a mixed library spanning multiple console generations, CHD wins on breadth — it’s the one format with meaningful native support across five or six different emulator families rather than being locked to a single platform’s tooling. If you’re exclusively building a GameCube/Wii collection for Dolphin, RVZ is worth comparing since it’s purpose-built for that emulator and can edge out CHD on compression for Wii discs specifically. For everything else, CHD is the safer default.
Advanced Tips for Power Users
Once the basic workflow is second nature, a few extra techniques save meaningful time on large libraries.
Run conversions with your source files on a fast SSD rather than an external HDD — chdman’s compression step is CPU-bound, but disk I/O becomes the bottleneck on slow drives when you’re processing dozens of large PS2 or GameCube images back to back.
Use chdman info across your whole library with a simple script to audit compression ratios in bulk, flagging any file with an unusually low ratio for a manual re-check — that’s often a sign of an already-corrupted or already-compressed source file slipping through your batch job unnoticed.
Keep your original verified-good rips archived separately (even after converting to CHD) if you have the drive space to spare. CHD round-trips losslessly, but having the untouched source available means you never have to re-rip a disc if a future format revision or a different emulator’s quirks call for a fresh extraction.
For anyone running a Steam Deck or another storage-constrained handheld, CHD is generally the better default over RVZ or PBP specifically because of its wide native support — you won’t need format-specific plugins on most cores, which matters more on a device where you’re also trying to conserve CPU cycles for emulation itself rather than on-the-fly decompression overhead.
If you’re syncing a converted library between a desktop and a handheld, transfer the .chd files themselves rather than re-converting on each device. CHD files are portable across operating systems without any regeneration, so a batch converted on a Windows desktop plays identically on a Linux-based handheld or a Mac, provided the target emulator on that platform also reads CHD natively. This is one of the format’s underrated advantages over do-it-yourself compression schemes that sometimes bake in platform-specific assumptions.
Finally, if you maintain a very large collection across multiple consoles, consider standardizing your folder naming and running a scheduled batch job (a monthly cron entry or Windows Task Scheduler item) that scans an “incoming” folder for new ISO/CUE/GDI dumps and automatically converts, verifies, and moves them into your organized library structure. That turns a one-time conversion project into an ongoing pipeline instead of a chore you have to remember to repeat every time you add a handful of new discs.
Complete Working Project: Batch-Convert a Mixed Library
Here’s a complete script that walks a top-level folder containing PS1 (CUE), PS2/GameCube (ISO), and Dreamcast (GDI) subfolders, converts everything to CHD, verifies each output, and logs the results. Save this as convert_library.sh on macOS/Linux, or adapt the loop syntax for a .bat file on Windows.
#!/bin/bash
# Complete CHD library converter
LOG="conversion_log.txt"
echo "CHD Conversion started: $(date)" > "$LOG"
convert_and_verify() {
local infile="$1"
local subcmd="$2"
local outfile="${infile%.*}.chd"
chdman "$subcmd" -i "$infile" -o "$outfile" &&
chdman verify -i "$outfile" >> "$LOG" 2>&1
if [ $? -eq 0 ]; then
echo "OK: $outfile" >> "$LOG"
else
echo "FAILED: $outfile" >> "$LOG"
fi
}
find ./PS1 -name "*.cue" | while read -r f; do convert_and_verify "$f" createcd; done
find ./PS2 -name "*.iso" | while read -r f; do convert_and_verify "$f" createdvd; done
find ./GameCube -name "*.iso" | while read -r f; do convert_and_verify "$f" createdvd; done
find ./Dreamcast -name "*.gdi" | while read -r f; do convert_and_verify "$f" createcd; done
echo "Conversion finished: $(date)" >> "$LOG"
echo "See $LOG for a full report."
Run it with bash convert_library.sh from the top of your library folder. It processes every subfolder in sequence, verifies each output automatically, and writes a plain-text log so you can spot failures without babysitting the terminal for however many hours a few hundred games takes to process.
Troubleshooting: 8 Issues and How to Fix Them
1. “chdman is not recognized as an internal or external command.”
The tool’s folder isn’t in your PATH, or you’re running the command from a different directory. Either add the folder to PATH per Step 2, or cd into the folder containing chdman.exe before running commands.
2. A converted PS1 game has no music or the FMV cutscenes have no audio.
You converted from the .bin file directly instead of the .cue index, or your .cue file references tracks that weren’t in the same folder during conversion. Re-run createcd pointed at the .cue file with all referenced .bin tracks present alongside it.
3. PCSX2 or Dolphin says the CHD file is invalid or corrupted.
You likely used createcd on a DVD-based disc (or vice versa). Re-convert using createdvd for PS2/GameCube/Wii and createcd only for CD-based systems.
4. chdman verify reports a checksum mismatch.
The CHD was corrupted during creation or file transfer. Delete it and re-convert from your original source — if the source itself fails a redump.org hash check, re-rip the disc.
5. Multi-disc games don’t prompt for a disc swap in-game.
Your .m3u playlist either wasn’t loaded (you opened Disc 1’s CHD directly instead of the .m3u), or the filenames inside the .m3u don’t exactly match the CHD filenames on disk, including capitalization on Linux systems.
6. RPCS3 or Xenia won’t open a CHD file at all.
Neither emulator reads CHD natively. Install SimpleLauncher and use its CHDMounter utility to expose the CHD as a virtual ISO those emulators can load, or keep uncompressed copies specifically for PS3 and Xbox 360 titles.
7. Conversion ratio comes back near 0%, meaning barely any space was saved.
The source file may already be a compressed format (like a .7z-packed ISO extracted incorrectly), or the disc’s data is genuinely low-redundancy content that doesn’t compress well. Check that you’re feeding chdman a raw, uncompressed source image.
8. Batch script stops partway through a large library with no clear error.
You likely ran out of scratch disk space, since both the source and the output need to exist simultaneously during conversion. Free up space or process the library in smaller batches, deleting verified sources as you go rather than keeping the whole set uncompressed at once.
chdman Command Reference Cheat Sheet
Keep this nearby while you’re converting so you don’t have to look up syntax mid-batch.
# CD-based systems (PS1, Saturn, Sega CD, Dreamcast GDI)
chdman createcd -i "input.cue" -o "output.chd"
# DVD-based systems (PS2, PSP, GameCube, Wii)
chdman createdvd -i "input.iso" -o "output.chd"
# Raw/arcade hard disk images
chdman createhd -i "input.img" -o "output.chd"
# Extract CHD back to source format
chdman extractcd -i "input.chd" -o "output.cue"
chdman extractdvd -i "input.chd" -o "output.iso"
# Verify integrity
chdman verify -i "file.chd"
# Show metadata and compression info
chdman info -i "file.chd"
# Update to current CHD format version
chdman -update "old.chd" "new.chd"
Storage Math: Planning Your Library Before You Convert
Before you start a multi-day conversion job, it helps to know roughly what you’re gaining. Using the documented compression ranges, here’s what a moderately sized collection looks like before and after.
| Library | Approx. Raw Size | Approx. CHD Size | Space Saved |
|---|---|---|---|
| 200 PS1 games (BIN/CUE) | ~140GB | ~80-95GB | ~35-45% |
| 100 PS2 games (ISO) | ~600GB | ~300GB | ~50% |
| 50 Dreamcast games (GDI) | ~60GB | ~28-36GB | ~40-55% |
| 75 GameCube games (ISO) | ~110GB | ~55-65GB | ~45-50% |
These are extrapolated from the documented per-disc compression ranges rather than an official aggregate benchmark, so your actual results will vary by title mix, but they’re close enough to plan drive capacity before you start. For a mixed multi-console library sitting on a single SSD, this is frequently the difference between needing a 2TB drive and getting by comfortably on 1TB.
Why chdman Beats Manual Zip Compression for ROMs
A natural question once you understand CHD’s compression ratios: why not just zip your ISOs and BIN/CUE files instead of learning a new tool? Generic compression formats like ZIP or 7z can shrink a disc image too, sometimes by a comparable percentage on the first pass. The difference shows up the moment you try to actually play the game.
A zipped ISO has to be fully decompressed to disk before most emulators can read it, which means you’re back to the original uncompressed size sitting on your drive the moment you want to play, plus the zip file taking up additional space until you delete it. CHD instead decompresses on the fly, hunk by hunk, as the emulator reads specific sectors during gameplay — the file stays compressed on disk the entire time you’re playing. That’s the structural reason DuckStation, PCSX2, Dolphin, and Flycast build in native CHD readers instead of just asking users to zip their libraries and unzip on demand.
CHD also preserves the disc’s internal track structure and metadata directly in the container, so a single .chd file correctly represents a 20-plus track PS1 disc without needing an accompanying .cue sheet, subchannel data file, or folder structure. Zip a BIN/CUE set and you still need to extract the whole folder correctly, with every track file intact and named exactly as the .cue expects, before anything will load. One wrong filename during extraction and the game won’t boot. CHD sidesteps that entire class of error by keeping everything in one validated container from the start.
Frequently Asked Questions
Is CHD compression lossless?
Yes. Every bit of the original disc data is preserved exactly; only the on-disk file size changes. Extracting a CHD back to its source format produces a bit-for-bit match with the original.
Does converting to CHD slow down load times in my emulator?
In practice, no meaningful difference on modern hardware. chdman decompresses only the specific data chunk being read at that moment, and current CPUs handle that overhead well below the threshold where you’d notice it during gameplay.
Can I convert PS2 ISOs to CHD?
Yes, using the createdvd subcommand rather than createcd. PCSX2 reads the resulting CHD natively without any plugin or extra configuration.
Does CHD work for GameCube and Wii games?
Yes. Dolphin reads CHD natively alongside its own RVZ format. For Wii discs specifically, RVZ can sometimes compress slightly better since it’s purpose-built for Dolphin, but CHD remains a solid, broadly compatible choice.
What happens to my save files when I switch from ISO to CHD?
Nothing. Save files in DuckStation, PCSX2, and Dolphin are tied to the game’s internal serial number or hash, not the container file format, so existing memory card saves and save states continue working after you swap to the CHD version.
Why won’t RPCS3 open my CHD file?
RPCS3 doesn’t read CHD natively as of September 2026. Use a mounting tool like SimpleLauncher’s CHDMounter to expose the CHD as a virtual ISO, or keep a small number of uncompressed PS3 discs separate from your CHD-based library.
Is there an official GUI for chdman?
Not from the MAME development team directly — it’s a command-line tool by design. Several community front ends (including options bundled inside frontends like SimpleLauncher and various ROM manager utilities) wrap chdman with a graphical interface if you’d rather avoid the terminal entirely.
Can I convert a CHD to a different compressed format, like RVZ or CSO?
Not directly with chdman. Extract the CHD back to its raw ISO/BIN-CUE form first with extractcd or extractdvd, then use a format-specific tool (Dolphin’s built-in converter for RVZ, or a PSP-focused CSO tool) to produce the other compressed format from that raw file.