FoxImg is a disc image tool for Windows. It opens, edits, converts, and writes disc images through an explorer-style window. It is written in x86 assembly (MASM) against the Win32 API. The program is one small executable with no runtime dependencies.
- Browse an image as a folder tree with a file list, preview pane, and status bar.
- Add, rename, move, and delete files and folders inside an image.
- Drag and drop in both directions: from Explorer into the image, and from the image to Explorer.
- Save or convert any open image to ISO 9660 + Joliet + UDF 1.02, to BIN/CUE (2048 or raw), to cdrdao TOC, CloneCD, Nero, Alcohol 120% or ECM with the sector EDC and ECC generated, to a gzip- or zip-compressed ISO, or to CSO, ZSO, CHD, ISZ, DAX, JSO, GCZ, UIF, DAA or DMG.
- Keep El Torito boot records through a save. BIOS and UEFI entries survive, and isolinux/GRUB boot info tables are patched for the new layout.
- Open images of any size. A sliding 64 MB mapping window keeps memory use flat.
- Long operations run on a worker thread with a progress bar and a Cancel button.
- Dark mode follows the Windows setting. The window scales per monitor (PerMonitorV2).
- Preview pane shows text files and every frame of an .ico file.
- CD audio tracks appear as TrackNN.wav files: extract them as real WAVs, or double-click one to play it. Audio-only discs open too (CUE, MDS, CHD).
The Debian 11 netinst ISO: folder tree, file list, and a text preview of README.txt.
Save As lists 42 output formats. The first 30 are shown.
A convert to bzip2 runs on a worker thread. The status bar shows progress and a Cancel button.
An audio CD in a CHD. Each track appears as a WAV file.
FoxImg image.iso open an image
FoxImg image.iso out.isz convert without a window; the format follows the extension
FoxImg image.iso out.cue /raw BIN/CUE with MODE1/2352 raw sectors
FoxImg image.iso out.iso /xiso an Xbox XISO instead of ISO 9660
FoxImg image.iso out.iso /cdi ISO 9660 under a CD-i (Green Book) label
FoxImg image.imd outdir /extract every file and folder of the image into outdir
The convert returns exit code 0 on success and prints one line to the console it was started from.
| Format | Extensions | Read | Write | Notes |
|---|---|---|---|---|
| ISO 9660 + Joliet | .iso .img | Yes | Yes | Level 1 names with ~N de-duplication on write |
| UDF 1.02 - 2.60 | .iso | Yes | Yes | Writes a 1.02 bridge volume; reads metadata, virtual, and sparable partitions |
| El Torito boot | - | Yes | Yes | BIOS and UEFI entries; boot info table patching; FAT size detection for UEFI images |
| Raw sectors | .bin .img | Yes | Yes | Reads MODE1/2352, MODE2/2352, MODE2/2336, detected by sync sniff; writes MODE1/2352 with the EDC and ECC generated |
| BIN/CUE | .cue .bin | Yes | Yes | Writes MODE1/2048, or MODE1/2352 raw with the EDC and ECC generated; cue sheet included |
| Files over 4 GB | - | Yes | Yes | Stored in the UDF half only, as Windows install media does |
| Nero | .nrg | Yes | Yes | Reads v1 and v2, DAO and TAO chunk lists; writes v2 DAO with one raw track |
| Alcohol 120% | .mds .mdf | Yes | Yes | Reads the first data track of the first session; writes one raw track |
| Alcohol MDX | .mdx | Yes | No | Single-file v2 descriptor; encrypted and compressed declined |
| CloneCD | .ccd .img | Yes | Yes | Raw image beside the sheet; writes one MODE1 track with its TOC entries |
| DiscJuggler | .cdi | Yes | No | Found by signature scan |
| Dreamcast | .gdi | Yes | No | Data track with its 45000 block base |
| cdrdao | .toc | Yes | Yes | DATAFILE with track mode; writes MODE1_RAW |
| ECM | .ecm | Yes | Yes | Decoded once to a temporary raw image with the parity restored; writes MODE1 records |
| Xbox / Xbox 360 | .iso (XDVDFS) | Yes | Yes | Reads XISO and all redump partition offsets; writes XISO (the "Xbox XISO" save type, .xiso, or /xiso) |
| 3DO | .iso .cue .3do (Opera) | Yes | Yes | Reads the label, directory chains and copies; writes one copy of everything as .3do |
| CD-i | .iso .bin | Yes | Yes | Reads Green Book descriptors beside CD001; writes the ISO 9660 layout under a CD-I label (the "CD-i disc" save type, .cd-i, or /cdi), 2048-byte sectors, no XA attributes |
| gzip | .iso.gz .gz | Yes | Yes | Any image inside; Save As writes a gzip ISO |
| bzip2 | .iso.bz2 .bz2 | Yes | Yes | Any image inside; Save As writes a bzip2 ISO |
| zip | .zip | Yes | Yes | Reads the largest stored or deflated entry, CRC verified; Save As writes one deflated entry, zip64 past 4 GB |
| CSO / CISO | .cso .ciso | Yes | Yes | Reads v0/v1/v2, deflate and LZ4 blocks (PSP, Dreamcast tooling); Save As writes v1 with 2 KB deflate blocks |
| ZSO | .zso | Yes | Yes | CISO layout with LZ4 blocks |
| DAX | .dax | Yes | Yes | PSP: zlib frames and raw NC areas; writes 8 KB zlib frames |
| JSO | .jso | Yes | Yes | PSP: reads deflate and LZO methods; writes deflate, 2 KB blocks |
| PBP | .pbp | Yes | No | PS1 Classics EBOOT (PSISOIMG); multi-disc takes disc 1; encrypted PSP UMD declined |
| CHD | .chd | Yes | Yes | Reads v5: zlib, LZMA, FLAC, all CD codecs, stored and self hunks; parented CHDs declined. Writes v5 CD images as chdman createcd does: one MODE1 track, cdzl hunks, the compressed map and both SHA-1s |
| GCZ | .gcz | Yes | Yes | Dolphin: zlib and stored blocks with the Adler-32 block hashes Dolphin checks |
| RVZ | .rvz | Yes | Yes | Dolphin, GameCube discs: reads Zstandard or stored groups and packed junk, Wii (encrypted partitions) and WIA declined; writes a GameCube disc as stored groups, untested in Dolphin |
| WBFS | .wbfs | Planned | No | Wii backup file system |
| GCM | .gcm .iso | Yes | Yes | Reads the big-endian FST; the system files show under sys. Writes a disc back with them, or a browse-only one without |
| NKit | .nkit.iso | Planned | No | Wii / GameCube |
| ISZ | .isz | Yes | Yes | UltraISO: reads zlib, bzip2, raw and zero chunks, AES declined; writes zlib, raw and zero |
| DAA | .daa | Yes | Yes | PowerISO v0x100 deflate; v0x110, LZMA and encrypted declined |
| UIF | .uif | Yes | Yes | MagicISO: zlib, raw and zero blocks; passworded declined |
| BlindWrite 5/6 | .b5t .b6t | Yes | No | Descriptor beside the .b5i/.b6i data file |
| C2D | .c2d | Yes | No | WinOnCD / Roxio; compressed C2D declined |
| PDI | .pdi | Planned | No | Instant CD/DVD |
| DMG | .dmg | Yes | Yes | Apple UDIF: reads zlib, bzip2, raw and zero chunks, ADC and lzfse declined; writes zlib and zero |
| FAT12 / FAT16 / FAT32 | .img .ima | Yes | Yes | Reads floppy and disk images, plain or behind an MBR partition table: BIOS parameter block, long names, fragmented files. Writes the smallest standard floppy that fits, else a FAT16 disk image, with long names |
| VHD | .vhd | Yes | Yes | Reads Virtual PC / Hyper-V fixed and dynamic disks; differencing disks declined. Writes a fixed disk around a FAT image |
| ImageDisk | .imd | Yes | Yes | Reads track records with sector maps, stored, filled and absent sectors; flattened, then opened as FAT. Writes a FAT floppy as track records with filled sectors compressed |
| HFS (classic Macintosh) | .toast .img .hfs | Yes | Yes | Reads the master directory block, catalog and extents overflow B-trees, MacRoman names, Apple Partition Map; resource forks appear as name.rsrc. Writes an 800K or 1440K floppy or a sized disk with a proper catalog B-tree; name.rsrc siblings become resource forks |
| HFS+ / HFSX | .hfs .hfs+ .img .dmg | Yes | Yes | Reads the volume header, catalog and overflow B-trees with 32-bit extents, UTF-16 names, files over 4 GB, plain or inside an HFS wrapper; resource forks as name.rsrc. Writes a sized HFS+ volume (.hfs+) with 4 KB blocks and a proper catalog tree; name.rsrc siblings become resource forks |
| Disk Copy 4.2 | .image .dc42 | Yes | Yes | The 84-byte header and sector data; opened as HFS. Written around an 800K HFS volume with the data checksum |
| WinImage IMZ | .imz | Yes | Yes | A zip holding one floppy image; the zip reader unpacks it, then FAT. Written as a FAT floppy in a zip |
| Atari ST | .st .msa | Yes | Yes | Raw ST disks are FAT12 behind a 68000 boot jump; MSA unpacks the track records, stored or run-length. Writes MSA with run-length tracks |
| Amiga ADF | .adf | Yes | Yes | Reads OFS and FFS: root and directory hash chains, file headers with extension blocks, Latin-1 names. Writes FFS, 880K or 1760K as the tree needs, with hash chains, extension blocks, bitmap and boot checksum |
| Commodore D64 | .d64 | Yes | Yes | Reads 35 and 40 track 1541 images, with or without error bytes: directory and file sector chains, PETSCII names with the type as extension. Writes a 35-track disk: folders flattened, names to PETSCII, types from .prg/.seq/.usr/.rel, 1541-style sector interleave |
| HxC HFE | .hfe | Yes | No | Raw MFM bitstreams from the floppy emulator: IBM sectors (syncs, address marks, CRCs) flattened by cylinder, head and number; Amiga sectors (odd/even longs, checksums) laid out as an ADF; FM declined |
| Commodore G64 | .g64 | Yes | No | GCR track dumps decoded at bit level: sync marks, header and data blocks with their checksums; laid out as a D64 and opened as one |
| Commodore T64 | .t64 | Yes | Yes | Reads the tape archive directory: each program as a .prg with its load address; wrong in-use counts and end addresses tolerated. Writes one entry per file |
| Apple II DOS 3.3 | .dsk .do .po | Yes | Yes | Reads VTOC, catalog and track/sector lists in either sector order; binary, BASIC and text files cut to their real length, typed extensions. Writes a DOS-order disk (.do) with types from the extensions |
| Apple II ProDOS | .dsk .do .po | Yes | Yes | Reads volume and subdirectories, seedling, sapling and tree files with sparse blocks; 140K in either order, 800K and hard drive images as plain blocks. Writes a 140K, 800K or sized .po with sparse blocks left unallocated |
| Amstrad CPC / Spectrum +3 DSK | .dsk | Yes | No | Plain and extended DSK: track records flattened with sectors in id order, then CP/M |
| CP/M (CPC, +3, PCW) | .dsk | Yes | Yes | Reads 180K, 360K and 720K layouts; the reserved track count found by scoring the directory; extents joined, 8 and 16-bit block numbers, user areas as folders. Writes a CPC data-format disk in an extended DSK |
| TeleDisk | .td0 | Yes | Yes | Reads plain and advanced-compression (LZSS with adaptive Huffman) images; stored, pattern and run-length sector blocks; flattened in sector order, then opened as FAT or CP/M. Writes plain TD0 with CRCs and pattern blocks |
| Unknown containers | any | Yes | No | Signature scan finds an ISO 9660 volume at any offset |
Read-only formats convert on save: open the image, then save it in any writable format.
CD audio tracks (from cue sheets, Alcohol images and CHDs) show up as TrackNN.wav
pseudo-files: extraction writes real WAV files, and a double-click plays the track.
The exe carries its own DEFLATE (RFC 1951) codec - an inflate decoder and a compressor - because the built-in Windows compression APIs only speak their own framings
(MSZIP, XPRESS, LZMS), not the raw deflate streams these files hold. CRC-32 comes from
ntdll, so no table lives in the image. Compressed images expand once to %TEMP%\FoxImg\
and then open like any other image, the same way ECM does.
The other codecs share that same input and output path, so a container can mix them chunk by chunk - an ISZ may hold zlib and bzip2 blocks in one image.
| Codec | Status | Used by |
|---|---|---|
| DEFLATE (inflate) | Yes | .gz, .zip, .cso, .gcz, .dax, .jso, .isz, .pbp (raw and zlib framing, auto-detected) |
| DEFLATE (compress) | Yes | Save As gzip ISO: lazy matching over a 32 KB window; per block the cheaper of dynamic Huffman, fixed, or stored |
| LZMA | Yes | CHD hunks; DAA v0x110 and LZMA-compressed RVZ later |
| bzip2 | Yes | .bz2, ISZ and DMG chunks; bzip2-compressed RVZ later |
| bzip2 (compress) | Yes | Save As bzip2 ISO: 900 KB blocks, Burrows-Wheeler by prefix doubling, one Huffman table |
| Zstandard | Yes | RVZ groups and tables |
| LZ4 | Yes | ZSO, CISO v2; Save As ZSO encodes 2 KB blocks |
| FLAC | Yes | CHD cdfl and flac hunks (16-bit stereo) |
| LZO1X | Yes | JSO method 0 |
| CD-ROM EDC/ECC (generate) | Yes | Raw BIN/CUE, TOC, CCD and ECM writers; the ECM and CHD readers restore the parity those formats strip |
Get the latest build from the Releases page, or fetch the executable directly:
https://github.com/FoxCouncil/FoxImg/releases/latest/download/FoxImg.exe
There is nothing to install.
Requirements: Visual Studio Build Tools (MASM, the linker, and the Windows SDK).
build.cmd release build to build\FoxImg.exe
build.cmd debug build with debug information
CI builds every push and pull request. A tag that starts with v publishes a release
with the executable and a zip attached.
- Windows 10 version 1607 or later, x86 or x64.
- No runtime libraries. The executable imports only Windows system DLLs.
FoxImg is free. If it helps you, support us on Patreon. Product page: foxcouncil.com/software/foximg.html.
See LICENSE.



