The Ultimate ROM File Compression Guide

Last updated: 08FEB2023 (see Changelog for details)

Organizing your ROM library can be confusing and tedious, and so in this guide I will show you how I use CHD, PBP, and RVZ files to optimize my collection.

For this guide I will focus on CD-based games, as they often pose the most issues when it comes to compatibility. (Secret tip: for cartridge-based systems like NES, you can generally just use zip files or leave them uncompressed).

Note that the video guide is made with Windows PCs in mind, but I have included Mac instructions where applicable below.

Table of Contents

CHD files
PBP files (PS1)
m3u playlist files (multi-disc games)
RVZ files (GameCube and Wii)
CSO files (PSP)
WUA files (Wii U)

Changelog

CHD files

CHD (“Compressed Hunks of Data”) files are compressed data files that can be used on most CD-based systems. They are in a lossless compression format, meaning that they perfectly preserve all game data while reducing file sizes. CHDs were originally developed for MAME to compress CD-based arcade games, but now the are compatible with a variety emulators and CD-based consoles.

CHD files are compatible with most emulators for the following systems:

  • Sony PlayStation
  • Sony PlayStation 2
  • Sega CD
  • Sega Saturn
  • Sega Dreamcast
  • NEC TurboGrafx-CD (PC Engine CD)
  • Neo Geo CD
  • Panasonic 3DO
  • Amiga CD32
  • Philips CD-I

The most common file type to convert to CHD are BIN/CUE files. If you happen to have only BIN files without their corresponding CUE file, use this tool to easily generate CUE files.

Windows instructions:

The MAME-developed tool for CHD conversion is called CHDman, which works well but requires some knowledge of command line to get working. If you would like to try your hand at it, here is a pretty good guide. Luckily, there is now a program that uses a graphical user interface (GUI) to navigate CHDman, and it is called namDHC. That’s what we are going to use in this guide.

  1. Download the chdman.exe and namDHC.exe files from the latest namDHC GitHub release. You can place these files wherever you would like.
  2. Open the namDHC.exe file and select “Add files” from the Input Files section. Choose the files you want to convert to CHD. These file types can be cue, toc, gdi, iso, or zip files. You can select many files at once.
  3. Select your desired Output Folder and then click the “Create CHD” button.
  4. When complete, you can read a report to verify that all CHD files were created successfully.

Linux instructions:

Check out this handy tool called the tochd converter.

Mac instructions:

Converting game files to CHD format on a Mac is tricky, but very possible. This code is written for bin/cue files but you could do the same with ISO files (see the bottom of the instructions).

  • Install Homebrew on your Mac. To do so, open a Terminal window and type:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Install rom-tools on your Mac via Homebrew. To do so, open a Terminal window and type:
brew install rom-tools
  • On your Mac, create a folder and put all of your BIN/CUE files inside.
  • Open a Terminal window and change your directory to the folder that hosts all those BIN/CUE files.
    • The easiest way to do that is to type “cd” (without the quotes) and the path of your folder
    • To find your folder path, navigate to the folder with your games, and make sure you can see the Path Bar at the bottom of your Finder window (if you don’t, go to Finder > View > Show Path Bar). Drag the folder name from the Path Bar in your Finder window into the Terminal window.
    • The full command should be “cd (name of path)” but without the quotes
  • Once Terminal is pointed to the folder and you have all your BIN/CUE files inside, copy and paste the following code:
#!/bin/bash

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

Some notes for Mac users:

  • Thanks to the Redditors from this post for figuring all this out.
  • This code above could be altered for ISO files by using “*.iso” instead of “*.cue”.
  • If using an older version of MacOS, you may have to use MacPorts which contains an older version of CHDman (thanks Lourens for the tip)

PBP files (PS1)

Many PS1 games came in multiple discs, and there is a special tool that will let you convert multi-disc PS1 games into one single PBP file. It will also compress the game files to reduce file size, but bear in mind that this is a lossy compression, meaning that you cannot go back to a different file type after converting to PBP (for example, you can switch back and forth with CHD files). There is also some concern that game data is lost in this conversion process, and so if you want to maintain pristine files this may not be the format for you. But for my own use case I haven’t ever ran into issues with PBP files and I prefer the single-file solution they bring.

One downside for PBP files is that they are not compatible with RetroAchievements (more info here). So if you want to earn achievements for your PS1 games, you will need to stick with CHD files and use m3u playlists for multi-disc games.

Note that this conversion tool is only available on Windows, but it is possible for Mac users to run this application via Wine.

PBP conversion instructions (Windows only):

  1. Go to this page and download PSX2PSP, then extract the zip file onto your computer.
  2. Open the PSX2PSP.exe file, and choose “Clasic Mode”
  3. In the ISO/PBP File section, choose “File 1” and then press the button to the right to choose your first disc’s game file. This works best with bin/cue or ISO files.
  4. In the same section, choose “File 2” from the drop-down and press the button to the right again to choose your second disc’s game file. Repeat this step if you have more discs.
  5. Under “Output PBP folder” choose wherever you would like to save the file, and then press the “Convert” button near the bottom of the window.
  6. When complete, you will have a folder in your output folder that is named after that game’s serial number, and inside will be a file named EBOOT.PBP — rename this file to your game (like “Final Fantasy VII.PBP”) and you are ready to go.
  7. See the video above to learn how to switch between discs while playing a game.

If you have a multi-disc game that uses multiple BIN files, creating a PBP file can be a challenge since it only will load the first BIN file. To get around this limitation, you can combine the BIN files using an app called CDMage. This tool is only available on Windows, but can be run via Wine on Mac too.

  1. Download the latest (beta) version of CDMage, it is a self-extracting zip file; open it to extract the .exe file
  2. Open CDMage and select File > Open, then navigate to and select the CUE file of the game that has multiple BIN files.
  3. Once the game is loaded in CDMage, select File > Save As… and choose somewhere other than where the original files are located (so you don’t mix them up once they are created). Click on the “Save” button, you will get another dialog window, just click the “Ok” button and let the conversion happen.
  4. Once complete, you should have a new BIN/CUE file in the output location you selected. Repeat this process for the other discs in you collection, and then you can being the PBP conversion process above.

m3u playlist files (multi-disc games)

The PBP method above only works for PS1 games, so if you have other systems with multi-disc games, I recommend trying m3u playlists. This method is also great for Mac users who don’t want to deal with using workarounds like Wine to create PBP files for PSX games.

  • To start, I recommend converting each of your game disc files to single CHD files following the guide above.
  • On your computer, make a new blank text file using Notepad (Windows) or TextEdit (Mac).
    • If using Mac, go to the Menu Bar and select Format > Make Plain Text to remove any rtf formatting from the file
  • Within this file, list the name of each CHD file in the multi-game disc, such as:
Shenmue (Disc 1) (USA).chd
Shenmue (Disc 2) (USA).chd
Shenmue (Disc 3) (USA).chd
  • Save the file with whatever name you’d like, but save it as a .m3u file extension, such as “Shenmue (USA).m3u”.
  • In your emulator, launch the m3u file and it should load the first disc; you can then use the emulator’s disc-swapping option to change different discs.
  • If you want to hide your CHD files from multi-disc games, you can rename the CHD files to a different extension; for most emulators, they will still run the files as long as the m3u playlist file matches the new file extension. For example, with Shenmue as our example, you can change the file extension for each disc from “chd” to “cd”, and then alter the m3u playlist as follows:
Shenmue (Disc 1) (USA).cd
Shenmue (Disc 2) (USA).cd
Shenmue (Disc 3) (USA).cd

This will effectively hide your .chd files from the emulator menu, but still allow you to launch your games via the m3u playlist.

RVZ files (GameCube and Wii)

When using the Dolphin emulator for GameCube and Wii emulation, you can take advantage of a special compressed format known as RVZ. Converting to this file is super easy, as it can be done in the Dolphin GUI. Note that in order for this to work you need to use Dolphin 5.0-12188 or later. This can be done on Windows or Mac versions of Dolphin.

  1. Load your games into the Dolphin emulator
  2. Right-click on the game and select “Convert File”
  3. Under “Format”, choose RVZ, then click the “Convert” button
  4. That’s it! Depending on the game, this tool will compress the file by up to 90%.

Note: While in the video above I mention that you have to convert the files one at a time, I have since learned that you can multi-click on the games within the Dolphin window, and then right-click and select “Convert Selected Files” to batch convert them.

CSO files (PSP)

Typical PSP files will come in ISO format, but they are easy to compress into .cso files. I would expect a ~20% reduction in file size with this method. This process is done using a Windows-based tool called UMDGen, but it may be possible to run this app via Wine on Mac, too.

Note that CSO files are currently not compatible with RetroAchievements, and so if you want to earn achievements (for now) you must use the original .iso format. There are multiple user requests with the RetroAchievements team to add CSO binaries to their code, and so this may be resolved in the future.

  1. Download UMDGen from this link and extract the UMDGen.exe file.
  2. Open UMDGen and navigate to the “Batch Image Converter” tab
  3. Drag and drop your ISO files into the main window within this Batch Image Converter tab; they should all load up with a “Queued” status.
  4. Below the window, select the option Convert To: > CSO and click on the “Start Batch Conversion” button.
  5. When complete, the .cso files will appear in the same folder as your .iso files.

WUA files (Wii U)

Another file type that is super handy are .wua files, which are compressed files that will work within the Cemu (Wii U) emulator. These will compress everything together into a single file: the base game, DLC, updates, etc.

To get started, you need to be running Cemu 1.27 or later. You also need to load your games, updates, and DLC into the emulator beforehand.

  1. When running Cemu, go to Tools > Title Manager. Here you will see a list of all the games, updates, and DLC loaded for each game.
  2. Click the “Type” column header to sort by type, then find the list of games under the “base” type.
  3. Right-click on a game and select “Convert to compressed Wii U archive (.wua)” and it will confirm all of the data that will be compressed into a single file. Click on OK to confirm.
  4. Choose your output folder for the .wua file, and you are good to go! Re-load this file into Cemu, and discard the other files if you would like (you can delete them from the Title Manager tool).

Changelog

12APR2023
– added tochd converter as a Linux option

08FEB2023
– added PSP (cso) section by request

07FEB2023
– added Wii U (wua) section by request

06FEB2023
– published guide
– added CDMage instructions for consolidating multiple BIN files into a single BIN file, to aid in PBP conversion process.
– added m3u section
– added note about RetroAchievements not working with PBP files

38 thoughts on “The Ultimate ROM File Compression Guide

  1. This is awesome. I spent a ton of hours figuring this out for myself last year. I sure wish your guide was available then!

    Like

  2. Amazing guide, you saved me about 50GB of space on my drive, now I can fit way more games on my RP3+.

    Is PSP ISO->CSO worth mentioning or can you use CHD for that as well?

    Like

  3. Anyone having issues iwth namDHC? I go to add files > select my .ZIP and nothing happens, it won’t add them into the program, selecting the folder doesn’t work either. I’ve tested with five different .zip and none work and I’ve tried three different versions of DHC….

    Like

    1. Issue was trying to take the .7z > zip. That just put the .7z in the .zip. Have to extract and then re-zip contents, PITA since everyone does .7z for these titles….

      Like

  4. I used the guide to convert my PSP games from .iso to .cso, but the games end up as (WWE SmackDown vs. Raw 2009 (USA).iso.cso) for example, with iso still in the name but the file showing as .cso. Will that effect anything as far as scraping for media and the like?

    Like

    1. You can safely remove the “.iso”. Just make sure the end of the file name is “.cso” But regardless, this shouldn’t affect scraping in most cases.

      Like

  5. Although it’s covered already in the EmuDeck video, thought it could be worth mentioning that EmuDeck comes with a CHD compressor script tool for Steam Deck users wanting to compress their files that way.

    For Linux users in general, most distributions should have a package in their app stores called “mame-tools” which will contain the chdman command. This requires using the command from the terminal, but it isn’t difficult to figure out. Some useful commands:

    To convert a single CD image:
    chdman createcd -i -o

    To compress every file in a directory, use:
    cd /path/to/folder
    for i in *.cue; do chdman createcd -i “$i” -o “${i%.*}.chd”; done

    To compress every file in subdirectories within a folder, use:
    cd /path/to/folder
    for i in */*.cue; do chdman createcd -i “$i” -o “${i%.*}.chd”; done

    Remember file names in Linux are case sensitive, so make sure the commands match your filenames. IE if your cuesheets end in .CUE, make sure they are capitalized in the commands also.

    Like

    1. Whoops, the parser didn’t like the lt/gt brackets for that first command, let’s try again.

      To convert a single CD image:
      chdman createcd -i examplegame.cue -o examplegame.chd

      Like

  6. Just a heads up that Neo Geo CD and Philips CD-i are also readable in CHD format (at least, in the cores available in RetroArch).

    Like

  7. Hi all,

    If I change PS1 files into CHD files will I lose saved games? I’m currently playing Metal Gear Solid on my RG351P and I’m starting disc 2. If I change the file to CHD will I lose my progress?
    Thanks

    Like

  8. Should I be concerned that my GameCube games are .nkit.iso? Dolphin says it can’t convert .nkit.iso. I also have .ciso but Dolphin doesn’t even give me the option to convert those.

    Like

  9. What are the options for multi disk gamecube games? do we create a playlist like with the dreamcast example?

    Like

  10. Duckstation does support PBP files for retro achievements, they don’t see, to be checking the hashes right. Swan station however is not. So I’m sticking to the PBP files I’ve had since the psp days.

    Like

  11. hi
    want is the best file Compression software for Sony vita?
    want the best emulator for for windows 10 or 11 pro

    Like

  12. For 3DS-Users: CHD-Files dont work in combination with Retroachievements on the RetroArch Version for the 3DS due to some compatibilty issue with the MAME-Cores. For PSX-Emulation with achievements, Bin/Cue is probably still the best option.

    Like

  13. AMAZING guide. Just one thing; using namDHC., I’ve found that after a while the application stops working; if you navigate away and then try to go back the window just doesn’t show up. When this happens and then closing/ re-opening the app window will NOT show (although the app itself appears to open) unless I close it, delete the created namDHC config file (it’s in the same folder that the namDHC.exe is in). Then, upon opening, it works again, at least for a bit.

    Do you know if there is any other app we could use that’s a bit more stable?

    Like

  14. Thank you for this guide.
    About “One downside for PBP files is that they are not compatible with RetroAchievements (more info here). So if you want to earn achievements for your PS1 games, you will need to stick with CHD files and use m3u playlists for multi-disc games.”
    Are you able to get retroachievements for CHD files at all ? (single disk PS1 games for example). I have to stick to BIN + CUE so far to get it working…

    Like

  15. ok I get it, the problem is not the CHD format, it’s the PAL versions I tended to test. It’s working on the fan translation of Ace Combat 3 (J) compressed in CHD.

    Like

  16. iso to cso conversion on Linux…. 1. Install ciso using package manager – eg apt install ciso. 2. Use the following command to convert… ‘ciso X infile.iso outfile.cso’ – substitute X with a compression level between 1 and 9 (9 being highest compression) and infile / outfile with actual filename. Reverse the filenames and use compression level 0 to convert from cso back to iso. 3. You can also batch convert an entire directory by running the following script in the same directory (compression level is hardcoded in script): https://gist.github.com/mark4409/dc7f48ea671f9448c01ce1b10d9bfa0a

    Like

  17. PPSSPP supports CHD in the latest dev builds, should be added to the main build in 1.16.7/1.17 soon. Note the devs still suggest CSOs as they are compatible with a real PSP, CHD is not. see this thread for more details (https://old.reddit.com/r/emulation/comments/16ymp7m/chd_support_added_to_ppsspp/)

    Also, MAME introduce a new createdvd command in chdman which compresses PS2 files better, however these don’t work with AeitherSX2 and you’ll want to use createcd still.

    Also, 3DS files can be trimmed (https://old.reddit.com/duplicates/3g933n/guide_reduce_the_size_of_your_ps2_gc_wii_x360_ds/) though some games are incompatible (https://wiki.gbatemp.net/wiki/3DS_flashcarts_game_compatibility#Problematic_games)

    Like

  18. For anybody having trouble with duplicates using m3u files and Emudeck on the Steam Deck, a solution I found is:

    1. Convert to chd and put into folder with a “.” in the beggining (a hidden folder in Linux).

    2. Create a .m3u referencing these files.

    3. On Emulation Station in game mode, go to “menu -> other settings -> show hidden files and folders” and disable it.

    Folder structure example:
    ├── .Resident Evil 2
    │   ├── Resident Evil 2 (USA) (Disc 1).chd
    │   └── Resident Evil 2 (USA) (Disc 2).chd
    ├── Resident Evil 2 (USA).m3u

    Like

  19. to trim 3ds files I found this exe file called NDSTokyoTrim31. I was able to reduce storage by 4GB. Please update your video with this info.

    Adam

    Like

Leave a comment