New tab lets users explore extracted assets visually: BLP textures rendered via blp_convert+Pillow, M2/WMO wireframes with mouse-drag rotation and zoom, DBC/CSV tables with named columns from dbc_layouts.json, ADT heightmap grids, text file viewer, audio metadata, and hex dumps. Directory tree lazy-loads from manifest.json with search and file-type filtering.
8.4 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) - Browses extracted assets with inline previews (images, 3D wireframes, data tables, text, hex dumps)
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.
Asset Browser Tab
Browse and preview every extracted asset visually. Requires a completed extraction with a manifest.json in the output directory.
Layout
- Top bar: Search entry, file type filter dropdown, Search/Reset buttons, result count
- Left panel (~30%): Directory tree built lazily from
manifest.json - Right panel (~70%): Preview area that adapts to the selected file type
- Bottom bar: File path, size, and CRC from manifest
Search and Filtering
Type a substring into the search box and/or pick a file type from the dropdown, then click Search. The tree repopulates with matching results (capped at 5000 entries). Click Reset to restore the full tree.
File type filters: All, BLP, M2, WMO, DBC, ADT, Audio, Text.
Preview Types
| Type | What You See |
|---|---|
| BLP | Converted to PNG via blp_convert --to-png, displayed as an image. Cached in asset_pipeline/preview_cache/. |
| M2 | Wireframe rendering of model vertices and triangles on a Canvas. Drag to rotate, scroll to zoom. |
| WMO | Wireframe of group geometry (MOVT/MOVI chunks). Root WMOs auto-load the _000 group file. |
| CSV (DBC exports) | Scrollable table with column names from dbc_layouts.json. First 500 rows loaded, click "Load more" for the rest. |
| ADT | Colored heightmap grid parsed from MCNK chunks. |
| Text (XML, LUA, JSON, HTML, TOC) | Syntax-highlighted scrollable text view. |
| Audio (WAV, MP3, OGG) | Metadata display — format, channels, sample rate, duration (WAV). |
| Other | Hex dump of the first 512 bytes. |
Wireframe Controls
- Left-click drag: Rotate the model (azimuth + elevation)
- Scroll wheel: Zoom in/out
- Depth coloring: closer geometry renders brighter
Optional Dependencies
| Dependency | Required For | Fallback |
|---|---|---|
Pillow (pip install Pillow) |
BLP image preview | Shows install instructions |
blp_convert (built with project) |
BLP → PNG conversion | Shows "not found" message |
All other previews (wireframe, table, text, hex) work without any extra dependencies.
Cache
BLP previews are cached as PNG files in asset_pipeline/preview_cache/ keyed by path and file size. Delete this directory to clear the cache.
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) |
asset_pipeline/preview_cache/ |
Cached BLP → PNG conversions for the Asset Browser |
<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.
- (Optional) Switch to Asset Browser to explore extracted files — preview textures, inspect models, browse DBC tables.
- Run wowee — it loads override textures on top of the extracted base assets.