Version 4.6 Release [Legacy]
[4.6] - 2026-06-08
Fixed
World model detection — derive_world_base() now correctly derives the flat w_models/w_<name>.mdl path structure TF2 uses, rather than the nested folder structure that was assumed. World models now pack correctly for standard weapons.
All-class cosmetic class filtering — per-class variants of all-class items (e.g. the Demoman variant of the Cozy Camper) no longer appear in searches for other classes. Handles shortened path names (_demo, _engi, _solly etc).
Duplicate weapon search results — weapons appearing from multiple VPK paths with the same basename are deduplicated before displaying the pick list.
Weapon search clutter — animation rigs, arm models, festivized variants, and seasonal reskins are filtered from weapon search results by default. Searching for a variant term directly (e.g. festivizer) still shows them.
Path validation — custom output paths are validated before building. If a path isn't writable, the tool falls back to the output folder and tells the user, rather than writing to an unknown location silently.
Subfolder mod scanning — list/remove mods now scans subfolders within the output directory, displayed separately from root-level mods.
Added
Keyword normalisation — search keywords are lowercased, spaces converted to underscores, and punctuation (apostrophes etc) stripped before matching. crusader's getup now finds hwn2015_firebug_suit correctly.
Friendly name reverse search — if a keyword returns no VPK hits, the tool searches schema friendly names and retries with the matching internal stem. Works for both cosmetics and weapons.
Auto-select single results — if a search returns exactly one match it is selected automatically with a confirmation line, skipping the pick prompt.
Menu selection confirmation — choosing cosmetic swap or weapon swap from the main menu prints a confirmation line before the first step, so a wrong choice is immediately obvious.
Smarter "did you mean" — suggestions are pre-filtered to stems sharing the same starting characters before running difflib, reducing unrelated matches.
Melee world model note — when no world model is found for a melee weapon, the message now clarifies this is expected behaviour rather than an error.
Still learning how to use Github so apologies for any confusion in layout / documentation especially of past releases & thank you for your support!