Introduction

Wiithon is a Python library for reading, writing and patching Wii ISO disc images.

It provides a high-level API to inspect and modify a disc image in place, without extracting it to disk first:

  • List, read, add, replace and remove files inside an ISO

  • Extract a full ISO to a directory

  • Build an ISO back from a directory

  • Patch the DOL executable and the banner

  • Read and write files nested in U8, RARC and Yaz0 archives

Note

Wiithon does not ship any game data. You need to provide your own disc image, dumped from a disc you own.

Requirements

  • Python 3.11 or newer

  • pycryptodome 3.0+ - AES decryption of partitions

  • typer and rich - command line interface

Installing

pip install wiithon

Or from a clone, in editable mode:

git clone https://github.com/Demorck/wiithon
cd wiithon
pip install -e .

A first look

from wiithon import WiiIsoPatcher

with WiiIsoPatcher("game.iso") as patcher:
    patcher.modify_title("My super romhack")
    patcher.add_file("ObjectData/NewFile.arc", file_data)

    patcher.build("game_patched.iso")

Important

Wiithon never writes to the source ISO. Every modification is buffered and only materialised in the file passed to build().

Where to go next

See also

Quickstart

The shortest path to reading and patching an ISO.

Reading a Wii ISO

Inspecting a disc without modifying it.

Patching a Wii ISO

Modifying files, the disc header and the DOL.

Wii ISO Structure and Decryption Process

How a Wii disc is actually laid out, if you want to know why.