2.1 - UI Customizations, Diagnostic Utilities, and Advanced Tuning
This update introduces a suite of features to enhance customization, diagnostic profiling, and stick tuning capabilities. We have added new GUI tabs, advanced curve equations, a terminology cleanup to prevent profile ambiguity, and a selective community maps downloader.
🎮 User-Facing Changes
- New Customization Tab: Toggle between Light/Dark appearance modes, switch between 7 dynamic color themes, and choose custom system fonts.
- New Profile Tab: Validate your configuration files, run interactive Git-style diffs between your settings and defaults, and export configs directly.
- New Utilities Tab: Real-time polling rate monitoring, synthetic throughput benchmarks, live raw input inspectors, and a hardware latency estimator.
- Advanced Analog Curves & Equation Preview:
- Implemented Cubic, Sigmoid, and Bezier response curves.
- Enter custom equations directly in the UI and preview their shapes instantly.
- Drag-and-shape custom curve shapes using interactive dots.
- Export LaTeX representations of your response curves directly to your clipboard.
- Tuning Enhancements: Sensitivity sliders are now functional for analog triggers.
- Calibration Confidence Engine: The calibration wizard now grades your controller's structural integrity (circularity, deadzone size, and center precision) after profiling.
- Selective Community Map Downloads: Connects to the community repository (
jesga06/UR-XD-community-HID-maps) to selectively fetch maps for your controllers rather than downloading a full ZIP. Includes an automated update scheduler. - Terminology Refactor: Cleaned up naming ambiguities across the app:
- Hardware layout descriptors are now HID maps.
- User preferences and remaps are user profiles.
- Main configurations (
config.ini) are wrapper configs.
- Bug Fixes:
- Shift Key Bindings Fix: Corrected shift mapping lookups in
config.inisections, restoring functional layer-shifting. - Fixed configuration reference lookups and method references in the GUI profile validator.
- Version numbering is now shown in the GUI dashboard.
- Shift Key Bindings Fix: Corrected shift mapping lookups in
⚙️ Under-the-Hood Changes
- Matplotlib Oscilloscope Integration: Integrated Matplotlib into the Utilities tab for real-time oscilloscope rendering without lagging the main GUI loop.
- Dynamic Theme Interpolation: Automatically queries CustomTkinter accent colors to dynamically invert tracers and lines for high contrast.
- Python
evalSafe Context: Created a localized, sandboxed environment to securely process custom user equations. - Performance Enhancements: Optimized update loop tick rates and reduced stdout logging overhead to prevent graphing latency.
- Phased Community Fetcher: Rewrote community downloading scripts to process queries through index checking before requesting raw GitHub files.
- Persistent Update Tracking: Saved community update metadata directly to the wrapper configuration file.
Check CHANGELOG.md for details and featurelist.md for the complete feature list.
How to use:
- Install all dependencies listed in the README.md file.
- Unzip it anywhere you want.
- Run
pip install -r requirements.txtin CMD or PowerShell. - Run
calibrate.bat - Run
run_wrapper.bat - Be happy.
NOTE: You will need to run the wrapper every time you want to use your controller in DInput, but you only need to run the calibration tool once for each controller you have that has a different make and model.