Hacking Emulation Gaming Homebrew Misc Wii System Menu Extractor & Normalizer

  • Thread starter Thread starter Tikilou
  • Start date Start date
  • Views Views 1,513
  • Replies Replies 6
  • Likes Likes 4

Tikilou

Active Member
Newcomer
Joined
Mar 19, 2018
Messages
28
Reaction score
40
Trophies
0
Age
40
XP
179
Country
France
Wii System Menu Extractor Logo

Wii System Menu Extractor & Normalizer​

An advanced reverse engineering tool written in Rust, designed to extract, decompress, and normalize as many Wii System Menu assets as possible into standard, open formats (glTF, PNG, JSON, WAV). It can also, even though it is not the primary goal, extract/convert files from certain Wii games.

🎯 Goal and Purpose​

This project is dedicated to digital preservation and historical analysis, with the aim of a complete rewrite of USB Loader GX and other Wii homebrew for SteamOS, and more generally, Linux on PC.
The Wii System Menu (and its associated channels) relies on proprietary file formats (U8, TPL, BRLYT, ASH, BRSAR, BRRES) that standard tools cannot read. For analysis, UI emulation, customization, or historical preservation, it is essential to transform this binary data into assets usable by platforms that rely on documented file formats.
This program does not merely extract files: it recursively converts and normalizes them.

⚙️ Normalization Methodology​

The tool runs up to 20 recursive passes to resolve nested dependencies (e.g., a .app containing a compressed .ash, containing a U8 .arc, containing a .brres itself full of TEX0 textures). Recursion stops automatically after two passes with no extraction, to ensure process reliability.

1. Data Access (Extraction Engines)​

  • ASH (.ash) : Custom integrated Huffman/LZ77 virtual machine for bit-perfect decompression.
  • LZ77 (.LZ, .lz7) : Full support for 0x10 variants with robust detection.
  • Yaz0 (.szs) : High-performance LZSS decompressor for channel archives.
  • Standard Archives (.app, .arc, .zip) : Full extraction of U8 and ZIP directory trees.
  • NW4R Containers (.brres, .breft) : Heuristic pattern scanning to extract subfiles.

2. Asset Normalization (Museum Grade)​

  • Graphics (Pixel-Perfect):
    • TEX0 / TPL / BTI -> PNG : Full GX decoding. Unique Improvement : "White-Alpha" strategy handling for intensity formats (I4, IA4), ensuring UI elements without black artifacts. Full support for RGBA8 (planar) and CMPR (Wii BC1/DXT1).
    • Palette Support (PLT0) : Automatic application to indexed textures (CI4/CI8).
  • Interface (UI-Dependent):
    • BRLYT -> JSON : Reconstruction of the complex hierarchical scene tree.
    • BRLAN -> JSON : Extraction of animation curves.
  • 3D Models:
    • MDL0 -> glTF 2.0 : Export of complete geometry (v1 to v11).
  • Typography:
    • BRFNT -> JSON & PNG : Bit-perfect decoding including the Wii-specific 8x4 tiling used by fonts (Rodin). Extraction of glyph metrics (CWDH) and Unicode maps (CMAP).
  • Audio & Music:
    • BWAV -> WAV : Support for these System Menu files.
    • RWAV/RWSD/RBNK -> WAV : 16-bit hardware DSP-ADPCM decoding.
    • BRSEQ -> MIDI & JSON : Musical sequences. (Work still in progress)
  • Reverse Engineering:
    • SEL -> JSON : Support for binary files (Static Executable Linker). Recovery of the original build path (.elf) and the complete symbol table (internal function names).

🚀 Usage​

Build​

Code:
cargo build --release

Run​

Code:
./target/release/wii_system_menu_extractor <TITLE_FOLDER_OR_FILE_PATH>

The program processes files idempotently: it detects extractions already performed and only processes new files or modifications. Running the program directly (without a terminal) in the current directory has the same effect on its contents, even without any graphical output. There is no official release nor version number yet, as the program is still under development, but it is functional and effective enough for most needs.

AppImage​

An AppImage build script is provided in the scripts folder, and a ready-to-use AppImage is also available in the packages folder. This program was compiled on Debian 13 and will require at minimum the versions of certain libraries bundled in that reference distribution. Logically, this AppImage should run on all up-to-date Linux distributions.

📊

📖 Glossary of Formats and Normalized JSON​

📦 Archives and Compression​

  • ASH / LZ77 / Yaz0: Proprietary compression formats.
    • Normalization : Decompressed into the original files (.arc, .brres).
  • U8 / ARC / APP: Uncompressed file archives.
    • Normalization : Extracted into _extracted subfolders.

🖼️ Graphics and Typography​

  • TPL / TEX0 / BTI (Wii textures) -> PNG
    • GX tiled storage. IA4/IA8 formats are normalized using "White-Alpha" for UI.
  • BRFNT (Binary font) -> PNG atlas + JSON
    • The JSON contains metrics (height, baseline) and Unicode mapping (code -> glyph_index).
    • JSON fields : ascent (height above baseline), widths (per-glyph width).

📐 Interface and Animation​

  • BRLYT (Layout) -> JSON
    • Stores the hierarchical interface tree (Panes).
    • JSON fields : root contains the Pane stack with name, x/y/z, scale, rotation, and children for hierarchy.
  • BRLAN (Layout Animation) -> JSON
    • Animation sequences for BRLYT Panes.
    • JSON fields : animations lists targets, keyframes contains time (frame) and property (value) values.

🔊 Audio​

  • RWAV / BWAV -> WAV
    • Raw audio files, often DSP-ADPCM (hardware 4-bit compressed) or PCM16.
  • BRSAR / RWSD -> WAV + JSON
    • The JSON lists sounds and their properties (volume, pitch).

🔍 Reverse Engineering​

  • SEL (Symbol Table) -> JSON
    • Contains linking metadata for Wii code (often present in .app).
    • JSON fields : internal_path (original path on the Nintendo developer’s PC), symbols (list of all recovered C++ function names).
  • BMG (Message Group) -> JSON
    • Localized text table.
    • JSON fields : messages maps a numeric ID to the translated string.

📜 License​

GNU GENERAL PUBLIC LICENCE 3 (GPL 3) - Tikilou


Download AppImage executable : https://github.com/Tikilou/Wii-Syst...ges/wii_system_menu_extractor-x86_64.AppImage
Github repository : https://github.com/Tikilou/Wii-System-Menu-Extractor-Normalizer

Ps : this project is a part of a most bigger "Museum Project" (It's a surprise !), I'll let you know about that soon, it's still in development, and I'm rather in favor of Valve's approach in this regard.
 
Last edited by Tikilou,
At least I find it interesting, especially since it's 2026. I like that the Wii community is still active.
 
Doesn't anyone care?
It's an interesting project, but I'm going to be honest, I'm not a fan of how much AI looks to be used in this post. That Wii in the logo looks really bad and the description seems to have been heavily written by an AI.
I'm not an AI hater and I'm also not saying the project is automatically bad because of it, I just wish for it to be used more wisely for a better presentation.
 
It's an interesting project, but I'm going to be honest, I'm not a fan of how much AI looks to be used in this post. That Wii in the logo looks really bad and the description seems to have been heavily written by an AI.
I'm not an AI hater and I'm also not saying the project is automatically bad because of it, I just wish for it to be used more wisely for a better presentation.


To be perfectly clear, I am not a graphic designer, and I do what I can to save time. I wasn't even sure about releasing this tool, which I originally used for my own needs for museum projects.

As a business owner in the fruit plant industry, my free time is limited. I would like to contribute more, but between work and family life, I can't always do what I want.

AI is more a means than an end here. I think that, ultimately, it's the result that counts.
 
  • Like
Reactions: Levine91
To be perfectly clear, I am not a graphic designer, and I do what I can to save time. I wasn't even sure about releasing this tool, which I originally used for my own needs for museum projects.

As a business owner in the fruit plant industry, my free time is limited. I would like to contribute more, but between work and family life, I can't always do what I want.

AI is more a means than an end here. I think that, ultimately, it's the result that counts.
It's understandable, the point of my message is that the way AI was used here may give a bad impression to some people, giving this project a negative perception that it doesn't deserve since this looks pretty cool.
With that said, if you like the idea I could work on a new logo for the project myself that you can use and do whatever you want with it. I'm eager to contribute to the project.
 
this is very interesting
would this be able repack any of the files back up?
say i want to try and replace the music on the wii menu can this tool unpack everything then repack it after replacing the files or am i completely wrong on this.
 

Site & Scene News

Popular threads in this forum