Skip to content

Razenko/extract-xiso-gui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Extract-XISO GUI

A cross-platform graphical tool for creating, listing, rewriting, and extracting Xbox ISO (XISO) images. Built on the original extract-xiso engine by "in" in@fishtank.com (2003), now wrapped in a modern Qt6 GUI.

XISO is a custom ISO 9660 variant used by the original Xbox and Xbox 360, with 2048-byte sectors and a proprietary binary directory entry format.

Features

Mode Description
Extract Extract files from an XISO to a local directory. Optionally skip $SystemUpdate.
Create Build an XISO from a local directory. Optional media-enable patching.
List Browse ISO contents in a tree view. Export to TXT, HTML, or CSV.
Rewrite Re-optimize an XISO directory tree (balanced AVL). Optionally delete the original after rewrite.

Download

Pre-built binaries are available on the Releases page.

Build from source

Prerequisites

  • CMake ≥ 3.16
  • C99 compiler (GCC, Clang, or MSVC 2019+)
  • Qt6 (Widgets + Core) — for the GUI
  • MinGW/MSYS2 (Windows MinGW builds)

All platforms

cmake -B build
cmake --build build -j $(nproc)

# CLI only (skip Qt dependency)
cmake -B build -DBUILD_GUI=OFF

# With tests
cmake -B build -DBUILD_TESTS=ON
ctest --test-dir build

Windows (MSVC)

cmake -B build -A x64
cmake --build build --config Release

Windows (MinGW via MSYS2)

From the MinGW64 shell (C:\msys64\mingw64.exe):

# One-time: install prerequisites
pacman -S --needed mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc mingw-w64-x86_64-qt6-base

cmake -B build_mingw -G "Unix Makefiles" -DBUILD_TESTS=ON
make -C build_mingw -j$(nproc)
ctest --test-dir build_mingw

macOS

brew install cmake qt@6
cmake -B build -DCMAKE_PREFIX_PATH="$(brew --prefix qt@6)"
cmake --build build -j $(sysctl -n hw.logicalcpu)

Linux (Ubuntu/Debian)

sudo apt install build-essential cmake qt6-base-dev
cmake -B build
cmake --build build -j $(nproc)

Usage

GUI

Launch extract-xiso-gui and select a tab:

  • Extract — pick an ISO and destination folder, click Extract
  • Create — pick a source folder, set output ISO name, click Create
  • List — pick an ISO, browse the tree, export via the Export dropdown
  • Rewrite — pick an ISO, optionally set a different output folder, click Rewrite

CLI

extract-xiso ./game.iso              # extract (default mode)
extract-xiso -l ./game.iso           # list contents
extract-xiso -r ./game.iso           # rewrite (re-optimize directory tree)
extract-xiso -c ./game-dir           # create XISO from directory
extract-xiso -c ./game-dir out.iso   # create with custom output name
extract-xiso -m -c ./game-dir        # create, disable media-enable patching
extract-xiso -s ./game.iso           # extract, skip $SystemUpdate folder

Project structure

├── CMakeLists.txt          # Build system
├── src/
│   ├── libxiso.h           # Public C API (context-based, reentrant)
│   ├── libxiso.c           # Core engine (~2400 lines)
│   ├── xiso_internal.h     # Internal structs shared with tests
│   ├── main.c              # CLI frontend
│   └── win32/              # Windows compatibility shims
│       ├── asprintf.c
│       ├── dirent.c
│       └── getopt.c
├── gui/
│   ├── main.cpp            # Qt6 application entry point
│   ├── mainwindow.h/cpp    # Main window + tab widget
│   ├── xisoworker.h/cpp    # Background worker thread (QThread)
│   ├── extractwidget.h/cpp # Extract tab
│   ├── createwidget.h/cpp  # Create tab
│   ├── listwidget.h/cpp    # List tab + export
│   ├── rewritewidget.h/cpp # Rewrite tab
│   ├── exportdialog.h/cpp  # TXT/HTML/CSV export
│   ├── style.h             # Shared widget stylesheet
│   ├── app.rc              # Windows icon resource
│   └── resources.qrc       # Qt resource file
├── tests/
│   ├── acutest.h           # Single-header test framework
│   ├── test_avl.c          # AVL tree unit tests
│   ├── test_bm.c           # Boyer-Moore search unit tests
│   ├── test_dir_calc.c     # Directory size/offset calculation tests
│   ├── test_integration.c  # List + extract integration tests
│   └── fixtures/           # Test ISO + expected output
├── LICENSE.TXT
└── .github/workflows/CI.yml

Technical notes

  • API: The core library (libxiso) exposes an opaque xiso_context — fully reentrant, callable from multiple threads. Progress and per-file log callbacks carry void *user_data for bridging into GUI toolkits.
  • Threading: The GUI runs XISO operations on a QThread worker. Progress and log signals are throttled (100 ms interval) and delivered via queued connections.
  • Unicode paths on Windows: UTF-8 paths are converted to wide-character with \\?\ long-path prefix, supporting UNC paths and international characters.
  • XISO disc layout: The library auto-detects four layout offsets: standard (0), GLOBAL (0xFD90000), XGD3 (0x2080000), XGD1 (0x18300000).

Credits

  • Original engine: "in" in@fishtank.com (2003–2011)
  • XGD3 support: somski (2011)
  • Xbox 360 support: aiyyo (2010)
  • GUI + refactoring: Modern cross-platform Qt6 port by the XboxDev community
  • Original repo:: XboxDev/extract-xiso

License

Modified BSD 4-clause license — see LICENSE.TXT. Original copyright by in@fishtank.com. Note the advertising clause (clause 3).

About

Xbox ISO Creation/Extraction utility. GUI version of extract-xiso.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors