-
Notifications
You must be signed in to change notification settings - Fork 6
Home
Make any input look like any controller.
Plug in a steering wheel. The game sees a PlayStation pad. Use a DualSense. The game sees an Xbox 360. Map your keyboard. The game sees a flight stick. Open a tab on your phone. That tab becomes a gamepad your PC games can use.

Powered by HIDMaestro. One driver, 225+ device profiles.
The headline change in 3.2 is a rebuilt mapping engine. One virtual output can read from any number of physical sources, with shift layers and a chip-based formula editor sitting on top. The other big change is a gyro overhaul that closes the gap with Steam Input. Plus a dedicated Impulse Triggers tab and a year's worth of smaller fixes.
- Shift Layers. Each slot can carry extra mapping tables that activate while a button, chord, or axis is engaged. Five activation modes (Hold, Toggle, Sticky, Cycle, Custom jump-to). Per-layer color, emoji icon, and a Win11-style flyout that confirms the active layer. Layers replace the Base table or overlay it (with per-row no-inherit). Layers are cross-device. Activator chords work across two pads.
- Multi-source rows. The Mappings tab is now per-virtual-controller, not per-device. One row can take input from any number of physical sources, on any device. Combine modes: Strongest, Combined, Average, Either, Both, Only one, Custom formula.
- Custom formula editor. Drag-and-drop chips for arithmetic, comparisons, logic, if-then-else, abs / min / max / clamp / sign / lerp. Live parse status. Starter recipes (Half scale, Weighted blend, Threshold gate, Both pressed, A unless idle, …).
- Source kinds. Each source can be Direct, Incremental (rate-of-change via Up/Down buttons with sticky/clamp), or Invert On Hold (flip the row while a modifier is held).
- Bidirectional half-axis. A half-axis source can fire past the deadzone in either direction. Renamed from "Either" to spell out what it does.
- Per-source gyro sensitivity. When a row reads from a Gyro source, the sensitivity dial sits on the row, not buried in the Sticks tab.
- Dedicated Gyro Pad-page tab. Moved out of Devices, given proper section cards (Calibration, Sensitivity, Response Shaping, Engage, Easy Aim).
- Reference frames. Local, Player, World.
- Aim Engage. Cross-device button picker that gates gyro to a button hold or stick deflection. Device-name subtitle under the picker.
- Dual-threshold smoothing, real-world calibration, per-axis invert, per-(device, slot) persistence.
- Gyro-to-virtual-stick is rate-direct (not integrated). Stick recenters on engage release.
- Gyro motion bindings in the Mappings table. Bind Gyro Pitch / Yaw / Roll like any other source.
- Dedicated tab for Xbox One / Elite / Series and DualSense pads. Three sections in one place.
- Game-driven passthrough. Forza, Gears, Halo, and any game that drives Xbox impulse trigger motors reaches the real trigger motors on the assigned pad. DualSense receives the same data as Adaptive Trigger Vibration. No setup.
- Constant Trigger Force. Per-device toggle plus Left / Right sliders apply a continuous force to each trigger motor until you turn it off. Game-driven force overrides while active and resumes when the game stops.
- Audio Bass Trigger Rumble. Trigger motors run their own audio-driven rumble with separate sensitivity, bass cutoff, and per-trigger level. Runs alongside the existing main-motor audio rumble.
- Xbox One+ rumble now writes raw HID directly. Fixes inconsistent rumble across XInput, WGI, and GameInput backends.
- Custom Expression trigger mode. Macros can fire on a formula crossing 0.5. Variables a, b, c, … bound to Input Device (a button / POV / axis) or Output Controller (the slot's combined virtual output). Same chip palette and recipes as the mapping formula editor.
- Multi-device combos in macro triggers, axes included.
- Per-entry axis options for axis triggers: Invert, Half-axis, Deadzone. Matches the merge-mapping options.
- Bulk virtual-controller toggle. A new Profile Shortcut mode toggles every created controller on or off with one combo press. A bottom-of-screen flyout confirms the new state.
- Stable selection across language switches. The Profile Shortcuts dropdowns no longer clear their selection when you change the app language.
- Strobe mode for DualSense and DualShock 4. Square-wave flash at the configured period.
- Battery mode. Lightbar color reflects current battery level (red → yellow → green). Push-driven refresh.
- 2026 Steam Controller supported. Once Valve's mainline change landed in upstream SDL, PadForge's SDL3 fork picked it up. The new pad shows up on the Devices page and maps like any other gamepad.
-
TouchpadClick is now a first-class button (Buttons[21] =
SDL_GAMEPAD_BUTTON_TOUCHPAD). Web Controller and overlays use the canonical channel. - Misc 1 → Share label on the Xbox virtual controller, with auto-map.
-
SDL3 and OpenXInput forks bumped to 16-slot XInput builds. SDL3 surfaces the Share button via OpenXInput's
XInputGetSystemButtons. - KBM virtual controller: sub-pixel accumulator on mouse delta and scroll.
-
App and Engine assemblies share
SharedVersion.csso versions cannot drift.
See the Release Notes for the full per-version change list.
Three pages cover everything you need to install PadForge and create your first virtual controller.
| Page | What it covers | |
|---|---|---|
| ⬇️ | Installation | Download the portable EXE. System requirements (Windows 10/11, x64). First-run setup. Optional drivers. |
| 🎮 | Dashboard | The main screen. Engine status, controller slots, motion server, web controller, and driver health on one screen. |
| ➕ | Controller Slots | How to add, configure, reorder, enable, disable, and delete virtual controllers. Up to 16, across five types. |
Each type maps your physical inputs to a different shape of virtual device. Pick the one matching the game you're playing.
| Type | Use when |
|---|---|
| Xbox (360 / One / Series / Elite / Adaptive) | The game wants an Xbox-style controller. The most common choice for Steam, Epic, and Microsoft Store games. |
| PlayStation (DualShock 4 / DualSense / DualSense Edge) | The game has special DualShock or DualSense features (PlayStation prompts, touchpad, gyro, adaptive triggers, lightbar). |
| Extended | Flight sticks, racing wheels, HOTAS throttles, third-party gamepads. 225+ HIDMaestro profiles cover specific hardware. A Custom mode lets you build a HID descriptor from scratch (up to 8 axes, 128 buttons, 4 POV hats). |
| MIDI | You're using the controller for music. Sticks become Control Change. Buttons become Note On / Off. |
| Keyboard + Mouse | The game has no controller support at all. Map physical inputs to virtual key presses and mouse moves. |
Three ways to bind a mapping. Pick whichever feels faster for what you're doing.
- Press the button on your physical controller while the Mappings tab is open. PadForge records it.
- Pick from a dropdown. Every input the controller exposes is in the list (including raw HID buttons past the standard 11).
- Click Map All. PadForge walks you through every output button and axis one at a time. PlayStation slots end the sequence with TouchpadClick.
| Page | What it covers | |
|---|---|---|
| 🎯 | Button and Axis Mappings | The Mappings tab end-to-end. Multi-source rows. Cross-device chords. Six combine modes plus a chip-based custom formula editor. |
| ⇧ | Shift Layers | A second mapping table that turns on while a button, chord, or axis is held. Hold, Toggle, Sticky, Cycle, and Custom modes. Per-layer color and emoji icon. |
| Page | What it covers | |
|---|---|---|
| ○ | Stick Deadzones | Six deadzone shapes (Scaled Radial, Radial, Axial, Hybrid, Sloped Scaled Axial, Sloped Axial). Per-axis anti-deadzone. Draggable sensitivity curves. Per-direction max range. Center calibration. |
| ▮ | Trigger Deadzones | Trigger floor and ceiling. Anti-deadzone. Sensitivity curves. Up to 8 triggers shared with sticks for Extended profiles. |
| 〰 | Force Feedback | Body rumble passthrough. HID PID 1.0 force feedback for wheels and joysticks. Audio bass rumble synthesized from system audio. Constant force vector. |
| 💥 | Impulse Triggers | Xbox impulse trigger passthrough for Forza, Gears, and Halo. The same data routes to DualSense as Adaptive Trigger Vibration. Audio-bass-driven trigger rumble. Constant trigger force. |
| ∧ | Adaptive Triggers | Seven DualSense trigger effect modes. Live preview that draws the resistance and amplitude curve. One-click GameCube preset. |
| ☀ | Lighting | Thirteen DualSense and DualShock 4 lightbar modes including audio-pulse, audio-band, input-reactive, Strobe, and Battery. |
| 🌀 | Gyro | Motion-sensor mapping at Steam Input parity. Local, Player, and World reference frames. Real-world calibration. Cross-device Aim Engage button. Per-(device, slot) tuning persistence. |
| Page | What it covers | |
|---|---|---|
| ⚡ | Macros | Combo triggers (up to 8 buttons, axes, POV directions). Custom Expression triggers fire on a formula. Action sequences with key presses, mouse moves, scroll, volume, lightbar overrides, rumble overrides. Four fire modes. |
| 🔄 | Profiles | Per-app profiles that switch when a matching game gains focus. Controller-shortcut combos to cycle profiles, toggle the PadForge window, or toggle every virtual controller on or off in one combo. |
| 🧷 | Devices | Every detected gamepad, joystick, keyboard, mouse, and touchpad as a card. Per-device hiding. Live raw input. Force Raw Joystick mode for SDL3 misidentification. |
| ➡️ | DSU Motion Server | Broadcast gyro and accelerometer to Cemu, Dolphin, Yuzu, and Ryujinx over UDP port 26760. |
| 🌐 | Web Controller | Built-in server. Open a browser tab on any phone over Wi-Fi. Touch buttons, sticks, triggers, rumble feedback. |
| Page | What it covers | |
|---|---|---|
| ⚙️ | Settings | Language (10 locales). Theme. Polling interval. Auto-start. Window behavior. Driver install controls. |
| ⚒ | Driver Management | HIDMaestro (required, auto-installed on first run). HidHide (optional, for hiding physical controllers). Windows MIDI Services (optional, for the MIDI controller type). |
| ⏱ | Input Precision | 1000 Hz polling with sub-millisecond jitter. Bit-perfect axis pipeline. The math behind deadzones and sensitivity curves. |
| ❓ | Troubleshooting | Common problems and fixes. No devices detected. Virtual controller not appearing in games. Double input. Driver install failures. Rumble issues. |
PadForge is open source. These pages document every layer of the codebase for contributors and forks.
| Page | What it covers | |
|---|---|---|
| 🏗 | Architecture Overview | The 2-project .NET 10 solution. Project layout. SDL3-only input philosophy. MVVM model. Multi-thread layout. |
| 🔁 | Input Pipeline | The 6-step polling loop from SDL device enumeration through mapping, merge, macros, virtual controller output. |
| 📡 | SDL3 Integration | The P/Invoke layer. Hint configuration. Device enumeration with HIDMaestro filter. Gamepad vs joystick API dispatch. Custom SDL3 fork. |
| 🕹 | Virtual Controllers | The IVirtualController interface across five backends. HM lifecycle. Bubble-up cascade. |
| 📝 | HIDMaestro Deep Dive | The contract between PadForge and HIDMaestro. SDK surface. OpenXInput shim. Three-surface architecture. |
| 💾 | Settings and Serialization | PadForge.xml file format. UserDevice / UserSetting / PadSetting. AppSettingsData. Cross-layout mapping translation. Backward compatibility. |
| 🔗 | Services Layer | InputService, SettingsService, DeviceService, RecorderService, DsuMotionServer, ForegroundMonitorService, WebControllerServer. |
| 📊 | ViewModels | ViewModelBase. MainViewModel. DashboardViewModel. PadViewModel. DevicesViewModel. SettingsViewModel. Weak-event CultureChanged for live language switching. |
| 🖼 | XAML Views | MainWindow shell, page hierarchy, custom controls, value converters, theme switching. |
| 🎮 | 3D Model System | HelixToolkit rendering. ControllerModelBase. Per-controller meshes. Click-to-record via ray-cast hit testing. |
| 🗺 | 2D Overlay System | Resolution-independent PNG overlays. ControllerOverlayLayout generation. Schematic view for Extended profiles. |
| 📨 | DSU Protocol Implementation | MotionSnapshot. DsuMotionServer UDP socket. Packet format. CRC32. Subscription management. |
| 🔧 | Driver Installation Internals | DriverInstaller class. HIDMaestro INF install. HidHide WiX bootstrapper. Windows MIDI Services release query. |
| 📦 | Engine Library | PadForge.Engine assembly. Gamepad struct. ExtendedRawState. KbmRawState. ForceFeedbackState. IInputDevice surface. |
| 🛠 | Build and Publish | Building from source. Single-file publish. Native DLL packaging. Release workflow. |
Built on SDL3, HIDMaestro, OpenXInput, HelixToolkit, .NET 10 WPF, and Fluent Design.
