# ποΈ Vanilla True Builder
**The ultimate canonical Vanilla mod builder for [League of Legends](https://www.leagueoflegends.com) & [LTK Manager](https://github.com/LeagueToolkit).**
*Build a pure, zero-bloat Vanilla mod `.fantome` in seconds.*
[](https://github.com/gsmeven/vanilla-true-builder/releases)
[](https://github.com/gsmeven/vtb-ltk-tools)
[](https://www.python.org/downloads/)
[](https://www.microsoft.com/windows)
[-785a28?style=for-the-badge&logo=zip&logoColor=white)](https://github.com/LeagueToolkit)
[](LICENSE)
[π Overview](#-overview) β’
[π Setup](#-setup) β’
[π οΈ For Developers](#οΈ-for-developers-run-from-source) β’
[π§° Modules](#-modules) β’
[βοΈ Core Technical](#οΈ-core-technical) β’
[ποΈ Architecture](#οΈ-architecture) β’
[π¬ Forensic Curation](#-forensic-curation) β’
[π₯ Ecosystem & Credits](#-author--ecosystem)
## π Overview
**Vanilla True Builder (VTB)** is an automated desktop mod generator engineered specifically for **[LTK Manager](https://github.com/LeagueToolkit)**. With a single click, it compiles a clean and custom base-grade restoration mod (`.fantome`) directly from your local game installation.
Traditional custom mods often rely on hacky placeholder textures, foreign dummy meshes, or destructive overrides that trigger DirectX crashes and hitbox desynchronization. Instead, VTB operates natively on official Riot archives using reverse-engineering toolchains [ritobin](https://github.com/LeagueToolkit/ritobin-tools) & [wadtools](https://github.com/LeagueToolkit/wadtools).
The engine performs surgical, in-place property patchingβmodifying strictly what is necessary and rebinding champion rigs, faction structures, minions, and wards 100% canonically to the game's own native Base definitions already compiled in your client. No third-party assets are ever imported: whenever an asset is strictly required to neutralize visual clutter, it is synthesized on the fly via raw hexadecimal bytecode (such as hardware-compliant 144-byte micro-textures). This guarantees zero foreign bloat, flawless client stability, and a completely purified default experience.
> [!IMPORTANT]
> * **First-Time Build Duration:** The initial compilation takes a few minutes as VTB processes and sanitizes multiple WADs in parallel.
> * **Temporary Scratch Space:** Decompressed archives are processed in an isolated `%TEMP%` buffer without touching your game installation, and pruned automatically upon completion.
> * **LTK Game Overlay:** When patching **for the first time**, LTK Manager constructs a staged game overlay requiring **~21 GB of disk space** and takes a few minutes to finish. This initial duration and storage footprint are inherent characteristics of LTK's virtual filesystem.
> * **Dual-Hash Cache:** Validated via `WAD_HASH:SCRIPT_HASH`. Subsequent builds are near-instant, maintaining a compact local cache (**~1 GB**) of strictly necessary decompiled game files.
> * **Patch-Resilient:** Intelligent patch tracking monitors your root `.fantome` file against live game archives. You only need to run **`BUILD PACKAGE`** when prompted, updating altered files in seconds.
> * **Skin Curation:** Over **95% of champion skins revert automatically**. Edge cases with unique submeshes or animation conflicts can be resolved in under two minutes via the built-in Auditor (**`SKIN FIX`**) and reasoning AI.
## π Setup
1. **Download the latest release:**
Download [`VanillaTrueBuilder.zip`](https://github.com/gsmeven/vanilla-true-builder/releases/latest) from the [Releases](https://github.com/gsmeven/vanilla-true-builder/releases) page.
2. **Extract archive:**
Extract the `.zip` to any folder on your computer.
3. **Launch:**
Double-click `VanillaTrueBuilder.exe`. *(The app automatically checks for updates and silently hot-swaps itself in seconds whenever a new version is released).*
4. **Build your restoration mod:**
Select the modules you wish to normalize (or click **Select All**) and press **`BUILD PACKAGE (.FANTOME)`**.
5. **Install into League of Legends:**
Click **`π OPEN FANTOME FOLDER`**, drag `VanillaTrueMod.fantome` into [**LTK Manager**](https://github.com/LeagueToolkit) and enable it!
> [!TIP]
> If any skin has model vanishing, submesh, or animation issues, you can curate it yourself in under 2 minutes.
### π©Ί How to fix problematic skin (AI Curation)
1. Click **`SKIN FIX`** in the top-right corner of the main app to launch the **Auditor**.
2. Drag-and-drop, upload, or copy the contents of `ai_context.md` from your root folder.
3. Send it into any reasoning AI chat (Claude, ChatGPT, DeepSeek).
4. Select the champion and skin, click **`AUDIT`**, then click **`π COPY REPORT`** at the bottom and paste it into the AI.
5. If the AI determines a fix is required:
* Right-click the requested row to **`Copy payload`** and send it to the AI.
* Double-click the row to open the override file, paste the AI-generated template, and save.
* Click **`TEST`** inside the Auditor to compile and test an isolated `.fantome` package instantly!
**Recommended LTK Manager Setup**
* **Auto run:** `ON` *(Automatically launches LTK Manager when you start Windows)*
* **Start in tray unless update available:** `ON` *(Keeps LTK completely hidden in the system tray upon startup)*
* **Always start patcher at launch:** `ON` *(Automatically mounts and starts your active profile whenever the app launches)*
> [!NOTE]
> **"Unexplained Game Exit [GAME STOPPED]"** is a harmless cosmetic notice that occurs if your PC is shut down while the patcher was active without entering a match.
> Ignore or simply click **Dismiss** and launch League normally (Your mod is completely functional).
## π οΈ For Developers (Run from Source)
If you want to inspect, debug, or contribute to the Python codebase directly:
**Prerequisites:** Windows 10/11 x64 and [Python 3.10+](https://www.python.org/downloads/).
```powershell
# 1. Clone repository
git clone https://github.com/gsmeven/vanilla-true-builder.git
cd vanilla-true-builder
# 2. Launch Master Builder
python main.py
# 3. Launch Forensic Auditor directly
python auditor.py
```
> [!NOTE]
> On the first run from source, VTB will automatically connect to [vtb-ltk-tools](https://github.com/gsmeven/vtb-ltk-tools) to download verified binaries (`wadtools.exe`, `ritobin.exe`) and merge the latest CommunityDragon game hash dictionaries (`hashes.game.txt`).
## π§° Modules
Every restoration module can be toggled independently in the Hextech UI to match your competitive preferences:
| Module | Target Scope | Technical Implementation | Competitive Impact |
| :--- | :--- | :--- | :--- |
| [**Champions**](#-1-champions) | All champion skins | Rebinds animation graph to `Skin0`, clones base rig/mesh properties, resets CAC, and injects in-place submesh aliases. | Identical hitboxes, zero animation latency, consistent spell read. |
| [**Structures**](#-2-structures) | Turrets, Rubble, Inhibitors, Nexus, Shopkeepers | Reverts team structures to default Order/Chaos bases; preserves ARAM/Bilgewater logic through structural integrity filters. | Eliminates oversized turret visual clutter and rubble confusion. |
| [**Minions**](#-3-minions) | Melee, Ranged, Siege, and Super Minions | Re-indexes skin assignments to Faction IDs 0 and 1 without full map decompilation bloat. | Canonical creep silhouette and clean wave readability. |
| [**Wards**](#-4-wards) | Sight, Yellow Trinket, Control/Jammer, Blue Trinket | Re-maps ward skin hashes to default base models across all inventory items. | Instantly identifiable ward health bars and uniform models. |
| [**Map Accents**](#-5-map-accents) | Clash banners, world cup trophies, sponsor ads, godrays | Intercepts `mWorldParticlesINI`, neutralizes `StaticMaterialDef` diffuse passes, and assigns 144-byte micro-textures. | Clean competitive Rift with zero billboard distraction. |
| [**Nexus Finishers**](#-6-nexus-finishers) | Victory/Defeat cinematic overlays and audio banks | Clears `complexEmitterDefinitionData`, sets `m_Enabled = false`, and purges end-of-game audio banks in `UI.wad.client`. | Immediate clean victory screen pan without cinematic interruptions. |
| [**Special Recalls**](#-7-special-recalls) | Honor 5, Challenger, and event recall crests | Rewrites shared telemetry blocks in `Global.wad.client` to enforce canonical home recall VFX. | Consistent recall silhouette, no misleading aura crests. |
## βοΈ Core Technical
The pipeline operates directly on the game client's serialized property trees (`PROP`) and in-memory binary descriptors. Instead of importing external files or patching game logic, every character rig, animation controller, particle emitter, and faction asset is rebound to official Base definitions already compiled in the game archives. This preserves exact collision volumes, audio bank routing, and DirectX 11 pipeline stability without introducing foreign assets:
### 1. In-Place Binary Submesh Descriptor Patching (`patch_skn_submesh_inplace`)
Certain legendary and mythic skins (e.g., True Damage Ekko) introduce divergent 3D submesh names in their `.skn` definitions. When spell scripts execute vanishing, visibility, or material shader callbacks (such as hiding a weapon mesh during cast animations or morph states), the rigid Base animation graph fails to locate the expected submesh string, causing invisible models or stuck geometry artifacts.
VTB resolves this entirely in memory without hosting or distributing external 3D models. The engine parses the native Riot `.skn` binary structure (`0x00112233` header), locates the target submesh within the 64-byte null-padded descriptor array, and patches the identifier in **0ms**:
```python
def patch_skn_submesh_inplace(base_skn_bytes: bytes, old_name: str, new_name: str) -> bytes:
old_name_bytes = old_name.encode("utf-8")
new_name_bytes = new_name.encode("utf-8")[:63]
idx = base_skn_bytes.find(old_name_bytes + b"\x00")
if idx == -1:
idx = base_skn_bytes.find(old_name_bytes)
if idx == -1:
return base_skn_bytes
new_name_padded = new_name_bytes + b"\x00" * (64 - len(new_name_bytes))
patched = bytearray(base_skn_bytes)
patched[idx : idx + 64] = new_name_padded
return bytes(patched)
```
When an override in `overrides/` declares `# SUBMESH_ALIAS: