Cover all new features: cancel extraction, background override rebuild, zip-slip protection, extractor auto-detection order, readonly dropdowns, and selection preservation. Reorganize into per-tab sections with tables.
5.8 KiB
Asset Pipeline GUI
WoWee includes a Python GUI for extraction and texture-pack management:
python3 tools/asset_pipeline_gui.py
The script is also executable directly: ./tools/asset_pipeline_gui.py
Supported Platforms
- Linux
- macOS
- Windows
The app uses Python's built-in tkinter module. If tkinter is missing, install the platform package:
- Linux (Debian/Ubuntu):
sudo apt install python3-tk - Fedora:
sudo dnf install python3-tkinter - Arch:
sudo pacman -S tk - macOS: use the official Python.org installer (includes Tk)
- Windows: use the official Python installer and enable Tcl/Tk support
What It Does
- Runs
asset_extract(or shell/PowerShell script fallback) to extract MPQ data - Saves extraction config in
asset_pipeline/state.json - Installs texture packs from ZIP or folders (with zip-slip protection)
- Lets users activate/deactivate packs and reorder active pack priority
- Rebuilds
Data/overridefrom active pack order (runs in background thread) - Shows current data state (
manifest.json, entry count, override file count, last runs)
Configuration Tab
Path Settings
| Field | Description |
|---|---|
| WoW Data (MPQ source) | Path to your WoW client's Data/ folder containing .MPQ files |
| Output Data directory | Where extracted assets land. Defaults to <project root>/Data |
| Extractor binary/script | Optional. Leave blank for auto-detection (see below) |
Extractor Auto-Detection
When no extractor path is configured, the GUI searches in order:
build/bin/asset_extract— CMake build with bin subdirectorybuild/asset_extract— CMake build without bin subdirectorybin/asset_extract— standalone binary- Windows only:
extract_assets.ps1— invoked viapowershell -ExecutionPolicy Bypass -File - Linux/macOS only:
extract_assets.sh— invoked viabash
On Windows, .exe is appended to binary candidates automatically.
Extraction Options
| Option | Description |
|---|---|
| Expansion | auto, classic, turtle, tbc, or wotlk. Read-only dropdown. |
| Locale | auto, enUS, enGB, deDE, frFR, etc. Read-only dropdown. |
| Threads | Worker thread count. 0 = auto (uses all cores). |
| Skip DBC extraction | Skip database client files (faster if you only want textures). |
| Generate DBC CSV | Output human-readable CSV alongside binary DBC files. |
| Verify CRC | Check file integrity during extraction (slower but safer). |
| Verbose output | More detail in the Logs tab. |
Buttons
| Button | Action |
|---|---|
| Save Configuration | Writes all settings to asset_pipeline/state.json. |
| Run Extraction | Starts the extractor in a background thread. Output streams to the Logs tab. |
| Cancel Extraction | Terminates a running extraction. Grayed out when idle, active during extraction. |
| Refresh State | Reloads the Current State tab. |
Texture Packs Tab
Installing Packs
- Install ZIP: Opens a file picker for
.ziparchives. Each member path is validated against zip-slip attacks before extraction. - Install Folder: Opens a folder picker and copies the entire folder into the pipeline's internal pack storage.
Managing Packs
| Button | Action |
|---|---|
| Activate | Adds the selected pack to the active override list. |
| Deactivate | Removes the selected pack from the active list (stays installed). |
| Move Up / Move Down | Changes priority order. Pack #1 is the base layer; higher numbers override lower. |
| Rebuild Override | Merges all active packs into Data/override/ in a background thread. UI stays responsive. |
| Uninstall | Removes the pack from disk after confirmation. |
Pack list selection is preserved across refreshes — you can activate a pack and immediately reorder it without re-selecting.
Pack Format
Supported pack layouts:
PackName/Data/...PackName/data/...PackName/...where top folders include game folders (Interface,World,Character,Textures,Sound)- Single wrapper directory containing any of the above
When multiple active packs contain the same file path, later packs in active order win.
Current State Tab
Shows a summary of pipeline state:
- Output directory existence and
manifest.jsonentry count - Override folder file count and last build timestamp
- Installed and active pack counts with priority order
- Last extraction time, success/failure, and the exact command used
- Paths to the state file and packs directory
Click Refresh to reload, or it auto-refreshes after operations.
Logs Tab
All extraction output, override rebuild messages, cancellations, and errors stream here in real time via a log queue polled every 120ms. Click Clear Logs to reset.
State Files and Folders
| Path | Description |
|---|---|
asset_pipeline/state.json |
All configuration, pack metadata, and extraction history |
asset_pipeline/packs/<pack-id>/ |
Installed pack contents (one directory per pack) |
<Output Data>/override/ |
Merged output from active packs |
The asset_pipeline/ directory is gitignored.
Typical Workflow
- Launch:
python3 tools/asset_pipeline_gui.py - Configuration tab: Browse to your WoW
Data/folder, pick expansion, click Save Configuration. - Click Run Extraction — watch progress in the Logs tab. Cancel with Cancel Extraction if needed.
- Switch to Texture Packs tab. Click Install ZIP and pick a texture pack.
- Select the pack and click Activate.
- (Optional) Install more packs, activate them, and use Move Up/Down to set priority.
- Click Rebuild Override — the status bar shows progress, and the result appears in Logs.
- Run wowee — it loads override textures on top of the extracted base assets.