Skip to the content.

1. Project Overview

Batch Convert to CHD is a high-performance Windows desktop utility designed to streamline the conversion of various disk image formats into the Compressed Hunks of Data (CHD) format — the format used by MAME, and increasingly by emulation frontends for PlayStation, Dreamcast, and other systems.

Developed by Pure Logic Code, the application combines a modern WPF-UI dashboard with battle-tested MAME tooling (chdman) and pure-C# libraries (CHDSharp, CCDSharp, CSOSharp, PBPSharp) for a fully local, offline-capable conversion experience.


1.1 Key Features

Modern Side-by-Side Dashboard

Multi-Architecture Support

Intelligent Conversion & Extraction

Content-Based Format Detection

A file’s extension is the least reliable thing about it. Every input’s leading bytes are inspected before the extension is trusted (MainWindow.TryResolveByContentAsync), which turns several “corrupt file” failures into successful conversions.

Awkward Format Support

Integrity, Safety & Verification

Performance & UI

Updates & Stability


1.2 Supported Formats

Category Formats
Standard images .iso, .cue (+.bin), .img, .ccd (+.img), .raw, .toc, bare .bin
Console-specific .gdi (Dreamcast), .pbp (PlayStation)
Compressed .cso (Compressed ISO), .isz (UltraISO), .ecm (Error Code Modeler)
Alcohol 120% .mds (+.mdf), including 2448-byte subchannel sectors
Split sets .001/.002…, .i00/.i01… (add the first volume; the rest are found)
Archives .zip, .7z, .rar
Output .chd

The full input set is defined in FileExtensions.AllSupportedInputExtensionsForConversion: .cue, .iso, .img, .gdi, .toc, .raw, .ccd, .bin, .mds, .ecm, .isz, .001, .i00, .zip, .7z, .rar, .cso, .pbp. All extension checks are case-insensitive.

Only the descriptor or first volume of a multi-file set is listed for conversion: the .mdf behind a .mds, the .bin behind a .cue, and the later parts of a split set are found automatically, so each disc converts once. Every format above is handled in-process — apart from the bundled chdman and 7za there is nothing else to install, and x64 and ARM64 get the same feature set.


1.3 Technical Logic (Command Selection)

Content is inspected first; the extension only decides the outcome for files whose content did not settle it.

  1. Content inspection — the leading bytes are read. A raw CD image, an Alcohol descriptor, an ISZ, an ECM, an archive or an existing CHD is routed on what it is, whatever it is called. A raw CD image gets a generated cue and goes to createcd.
  2. Split volume sets — numbered pieces are rejoined into one image, which is then classified as above.
  3. Compressed containers.isz, .ecm and .cso are decompressed in-process and the restored image is classified as above.
  4. Descriptors.cue/.gdi/.toccreatecd after cue normalization. .ccd becomes a cue via CCDSharp, .mds via the Alcohol parser, .pbp is extracted to CUE/BIN via PBPSharp.
  5. .iso (DVD images)createdvd, once content inspection has ruled out a mislabelled raw CD dump
  6. .img (hard disk images)createhd, unless an accompanying .cue exists → createcd
  7. .raw (raw data)createraw (with an explicit unit size -us 2352). Cue descriptors referencing .raw audio tracks also receive -us 2352 automatically.

The user can override 5–7 via Force CD / Force DVD checkboxes. PBP always extracts first.

Generated cue sheets reference the disc image where it already lies rather than copying it, because chdman resolves a cue’s FILE entry against the cue’s own directory. That also means such a cue must be written on the same volume as the image: chdman joins the FILE string to the cue’s directory unconditionally, so an absolute path becomes C:\temp\D:\game.iso and fails.


1.4 Project History Highlights