dwgx@blog:~$dwgx
> cd ../posts

VirtualTracker: A Full-Body Tracking Configurator for VD That Won't Wreck Your Config

// created

VirtualTracker is a configuration toolkit for full-body tracking in VRChat, streamed over Quest + Virtual Desktop. The older little tools for tweaking VD body-tracking basically just barged in and wrote to SteamVR; when things went wrong, best case your tracking points flew all over the place, worst case you were editing steamvr.vrsettings by hand. The idea here is to look first, back up first, then act: swap out gamble-style config edits for something you can preview and roll back.

What’s out now is Phase 1, called VT Configurator, version 0.1.1. The scope is deliberately restrained: it only reads and writes your own tracker config on your own machine. It doesn’t touch vendor binaries, doesn’t patch or crack anything. It’s just a safer configurator to replace the old barge-in-and-write tools.

At the core is a chunk of C++, wrapped in a CLI, plus a Dear ImGui desktop interface. It starts by finding the SteamVR path from %LOCALAPPDATA%\openvr\openvrpaths.vrpath, reads steamvr.vrsettings and VD’s OpenVR driver resources, and assembles a source-role list for VRChat full-body tracking so you can preview it and then decide whether to apply. Writing back only touches the driver_VirtualDesktop and trackers blocks; sections and keys it doesn’t recognize are preserved as-is. It ships with a few profiles: VT-VD-UpperBody, VT-VD-RealLowerBody, VT-VD-FullBodyDefault, plus VT-VD-DisableEmulatedTrackers specifically for turning off emulated trackers.

.\vt.exe inspect --json
.\vt.exe profile --list
.\vt.exe profile VT-VD-UpperBody

Output is redacted by default; local absolute paths and tracker serial numbers only come out with --raw, so you don’t leak machine info by casually taking a screenshot. The real focus is on not breaking the user: all write operations go through a single gate in src/vt/config_plan.cpp, and every preview carries a base_hash. If the file gets changed by something else after the preview, that preview is considered stale and the write is blocked by default. If vrserver.exe is still running, i.e. SteamVR is open, writes are blocked by default unless you explicitly force it. It backs up before applying, and before restoring it also creates a pre-restore safety backup; on restore it validates the .vtmeta schema version, type, and success status, and rejects anything whose path and content hash don’t match. The GUI dialogs are just UI-layer reminders; the real line of defense sits in the core. Also, the number of virtual devices you see in SteamVR is not the same thing as the body bindings you saved. Seeing more devices than bindings is normal.

0.1.1 does not do real-time SteamVR device enumeration, doesn’t grab Quest/OpenXR skeletons, has no real-time pose fusion, calibration, or filtering, and no OpenVR output or VRChat OSC. Those are left for Phase 2, VT Fusion, but that step will reuse the discovery, profile, backup, and diagnostics foundation ground out in Phase 1 rather than starting over. Building requires the CMake and C++20 that ship with VS 2026. There’s no open-source license decided yet, so it’s all-rights-reserved for now.