A modern macOS application for converting disc images to and from CHD (Compressed Hunks of Data) format. Built with SwiftUI, this app provides an intuitive interface for working with ISO, BIN/CUE, GDI, and CHD files.
Swift-CHD is a native Mac app that provides a graphical frontend for the powerful chdman command-line tool. CHD is a highly compressed file format designed for archiving disc images, particularly useful for retro gaming emulation.
- ✅ Single File Mode: Convert individual disc images with full control
- ✅ Batch Mode: Process multiple files at once with progress tracking
- ✅ Multiple Format Support:
- ISO → CHD
- BIN/CUE → CHD
- GDI → CHD (Dreamcast)
- CHD → ISO
- CHD → BIN/CUE
- CHD → GDI
- ✅ Advanced Options: Customize compression codecs, hunk sizes, and more
- ✅ Real-time Progress: Live progress tracking and console output
- ✅ Automatic chdman Detection: Finds and verifies your chdman installation
- macOS: macOS 12.0 (Monterey) or later
- chdman: The MAME CHD Manager tool (installation instructions below)
Swift-CHD requires chdman, which is part of the MAME project. The easiest way to install it is using Homebrew.
If you don't have Homebrew installed, open Terminal and run:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Follow the on-screen instructions. After installation, you may need to add Homebrew to your PATH. The installer will provide instructions specific to your Mac.
Once Homebrew is installed, install rom-tools which includes chdman:
brew install rom-toolsThis will download and install rom-tools along with chdman and other ROM management utilities.
After installation completes, verify that chdman is available:
chdman --versionYou should see output showing the chdman version number. If you see "command not found", try the full path:
# For Apple Silicon Macs (M1, M2, M3, etc.)
/opt/homebrew/bin/chdman --version
# For Intel Macs
/usr/local/bin/chdman --versionIf you prefer not to use Homebrew, you can:
- Download MAME from the official website: https://www.mamedev.org/release.html
- Extract the download
- Locate the
chdmanexecutable - Note the full path to use in Swift-CHD
- Launch the app: Double-click Swift-CHD to open it
- Verify chdman: The app will automatically try to find chdman on your system
- If found automatically, you'll see a green checkmark ✅
- If not found, click "Verify" or manually enter the path to chdman
Perfect for converting individual disc images with full control over options.
- Select Conversion Type: Choose your conversion type from the sidebar (e.g., "ISO → CHD")
- Choose Input File: Click "Browse…" next to Input to select your source file
- Choose Output Location: Click "Browse…" next to Output to set where the converted file will be saved
- Configure Options (Optional):
- Expand the "Options" section to customize compression and other settings
- Common options include:
-f: Force overwrite existing files-c: Compression codec (cd, cdlz, cdzl, cdfl)-np: Proceed even if not perfect
- Run Conversion: Click the "Run" button (or press Return)
- Monitor Progress: Watch the progress bar and console output as conversion proceeds
Ideal for converting multiple files at once.
- Switch to Batch Mode: Click "Batch Mode" in the mode selector at the top
- Select Conversion Type: Choose your conversion type from the sidebar
- Add Files:
- Click "Add Files…" to select multiple files to convert
- You can add files multiple times to build your batch list
- Set Output Directory (Optional):
- By default, output files are saved next to their source files
- Click "Choose…" to select a different output directory for all files
- Configure Batch Options (Optional):
- "Skip existing files": Automatically skip files that have already been converted
- "Stop on first error": Stop batch processing if any conversion fails
- Review File List: Check the list of files to be converted and their status
- Run Batch: Click the "Run Batch" button
- Monitor Progress: Watch as each file is processed, with status indicators for each:
- ⚪️ Pending
- 🔵 Processing
- ✅ Completed
- ❌ Failed
- 🟠 Skipped
- View Summary: When complete, a summary shows total files processed, succeeded, failed, and skipped
- ISO files are single-track disc images
- Choose compression codec based on your needs:
cd: Standard CD compression (recommended)cdlz: LZMA compression (better compression, slower)cdzl: Zlib compression (faster, larger files)cdfl: FLAC compression (audio-focused)
- Always select the
.cuefile, not the.binfile - The .cue file references the .bin file(s), and chdman will handle them automatically
- Make sure the .cue and .bin files are in the same directory
- GDI is the Dreamcast disc image format
- Select the
.gdifile as input - Make sure all associated track files are in the same directory
- When extracting CHD → BIN/CUE or CHD → GDI, multiple files may be created
- The output path you specify will be the main file (cue or gdi)
- Associated track files will be created in the same directory
Enable "Advanced Mode" in the Options section to access more chdman parameters:
- Hunk Size (
-hs): Adjust the compression chunk size (advanced users only) - Output BIN Filename (
-ob): Specify custom output filename for BIN files when extracting - Custom Arguments: Add any additional chdman arguments manually
If you encounter issues, check the built-in troubleshooting guide:
- See
TROUBLESHOOTING.mdin the app's documentation folder - Common issues:
- "Permission Denied": May need to disable App Sandbox in development builds
- "chdman not found": Verify chdman is installed and the path is correct
- "File exists": Enable the
-f(force overwrite) option - Conversion fails immediately: Check that input file format matches conversion type
The console output section shows real-time output from chdman, including:
- Progress percentages
- Compression statistics
- Warnings or errors
- File verification results
You can select and copy text from the console output for sharing or debugging.
- Developed by the MAME team for disc image archiving
- Highly efficient compression specifically designed for disc images
- Supports CD-ROM, DVD-ROM, and hard drive images
- Widely supported in emulators (RetroArch, MAME, etc.)
- Raw uncompressed disc image
- Standard single-track format
- Simple but larger file sizes
- Multi-track disc image format
- .cue file contains track layout
- .bin file(s) contain actual data
- Supports audio tracks, mixed-mode CDs
- Dreamcast disc image format
- Contains multiple track files
- .gdi file lists track information
If you want to build Swift-CHD yourself:
- Clone the repository
- Open
Swift-CHD.xcodeprojin Xcode - Select your development team in Signing & Capabilities
- Build and run (Cmd+R)
Note: For development builds, you may need to disable App Sandbox to allow chdman execution:
- Select your target
- Go to Signing & Capabilities
- Remove the "App Sandbox" capability
For issues, feature requests, or questions:
- Check
TROUBLESHOOTING.mdfor common problems - Review console output for error messages
- Verify chdman installation with
chdman --versionin Terminal
- chdman: Part of the MAME project (https://www.mamedev.org)
- Swift-CHD: A modern Swift/SwiftUI frontend for macOS
This application is a frontend for chdman. Please respect the MAME project's licensing terms when using chdman.
Enjoy preserving your disc images with Swift-CHD! 🎮💿