{"id":45702266,"url":"https://github.com/hifihedgehog/padforge","last_synced_at":"2026-06-06T05:01:16.513Z","repository":{"id":339902385,"uuid":"1163663306","full_name":"hifihedgehog/PadForge","owner":"hifihedgehog","description":"The ULTIMATE Windows controller remapper. Any input device in, any virtual controller out: Xbox, PlayStation, flight sticks, wheels, third-party gamepads, MIDI, or keyboard+mouse. Built on SDL3, HIDMaestro, HidHide, and .NET 10.","archived":false,"fork":false,"pushed_at":"2026-05-30T06:52:42.000Z","size":141929,"stargazers_count":118,"open_issues_count":8,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-30T08:21:46.471Z","etag":null,"topics":["controller","controller-mapping","directinput","gamepad","hid","hidmaestro","joystick","keyboard-remapper","padforge","sdl3","steam-controller","virtual-controller","windows","x360ce","xinput"],"latest_commit_sha":null,"homepage":"https://padforge.org/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hifihedgehog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-22T00:27:42.000Z","updated_at":"2026-05-27T22:44:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"3a785acc-c8bb-490d-b41f-726d7b5e47c7","html_url":"https://github.com/hifihedgehog/PadForge","commit_stats":null,"previous_names":["hifihedgehog/padforge"],"tags_count":61,"template":false,"template_full_name":null,"purl":"pkg:github/hifihedgehog/PadForge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hifihedgehog%2FPadForge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hifihedgehog%2FPadForge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hifihedgehog%2FPadForge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hifihedgehog%2FPadForge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hifihedgehog","download_url":"https://codeload.github.com/hifihedgehog/PadForge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hifihedgehog%2FPadForge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33844687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["controller","controller-mapping","directinput","gamepad","hid","hidmaestro","joystick","keyboard-remapper","padforge","sdl3","steam-controller","virtual-controller","windows","x360ce","xinput"],"created_at":"2026-02-24T23:02:17.944Z","updated_at":"2026-06-03T02:01:08.655Z","avatar_url":"https://github.com/hifihedgehog.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/icon.png\" alt=\"PadForge\" width=\"128\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ePadForge\u003c/h1\u003e\n\n*\"And we talk of Christ, we rejoice in Christ, we preach of Christ, we prophesy of Christ, and we write according to our prophecies, that our children may know to what source they may look for a remission of their sins.\"* — 2 Nephi 25:26\n\n*Glory, honor, and praise to the Lord Jesus Christ, the source of all truth, forever and ever.*\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/hifihedgehog/PadForge/actions/workflows/build.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/hifihedgehog/PadForge/build.yml?branch=v3-dev\u0026label=build\" alt=\"Build status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://somsubhra.github.io/github-release-stats/?username=hifihedgehog\u0026repository=PadForge\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/hifihedgehog/PadForge/total\" alt=\"Total downloads\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/qawTZHVhNH\"\u003e\u003cimg src=\"https://img.shields.io/discord/1507059039844962425?label=Discord\u0026logo=discord\u0026logoColor=white\u0026color=5865F2\" alt=\"Discord\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://padforge.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/website-padforge.org-blue\" alt=\"Website\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/hifihedgehog\"\u003e\u003cimg src=\"https://img.shields.io/github/followers/hifihedgehog?style=social\u0026label=Follow\" alt=\"GitHub followers\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://x.com/hifihedgehog\"\u003e\u003cimg src=\"https://img.shields.io/badge/X-@hifihedgehog-black?logo=x\u0026logoColor=white\" alt=\"Follow on X\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**PadForge makes 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.\n\nFree Windows app. No subscription. No paywall. No nag screens. Built on SDL3, [HIDMaestro](https://github.com/hifihedgehog/HIDMaestro), [OpenXInput](https://github.com/hifihedgehog/OpenXinput), HidHide, Windows MIDI Services, HelixToolkit, WPF UI, and .NET 10.\n\nPadForge is for sim racers running wheels in games that only understand Xbox controllers. For DualSense owners who want adaptive triggers and lightbar effects in Steam games that ignore them. For accessibility users mapping whatever hardware they can use. For anyone whose controller doesn't match what their game expects.\n\n\u003e **New in 3.3.** Touchpad tab grew two output cards: **Mouse Output** (per-axis sensitivity + invert for a touchpad finger driving mouse X/Y) and **Stick / D-Pad Output** (a touchpad finger becomes a virtual analog stick or wedge-thresholded D-pad). Gesture engine fanned out per slot. Two slots sharing one physical touchpad each carry their own toggles, tuning, and gesture context. Keyboard / Mouse virtual controller adds Print Screen, Scroll Lock, Pause, and Num Lock. Every touchpad feature toggle is off by default so gestures and outputs are opt-in. Gyro tab grew a Motion Passthrough card. One slot-wide toggle gates whether the tab's tuning reaches the virtual controller's motion report and the DSU motion server. Off by default. Copy and Copy From snapshot every assigned device's tuning (gyro, touchpad, FFB, AT, lighting) and re-attach it on Paste by matching InstanceGuid, then ProductGuid. Carrying forward from 3.2: the rebuilt mapping engine (multi-source rows, shift layers, cross-device chords, drag-and-drop formula editor), gyro at Steam Input parity, Impulse Triggers tab, and 2026 Steam Controller support through the bundled SDL3 fork. [Wiki](https://github.com/hifihedgehog/PadForge/wiki).\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/hifihedgehog/HIDMaestro\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"screenshots/hidmaestro-logo-dark.png\"\u003e\n      \u003cimg src=\"screenshots/hidmaestro-logo-light.png\" alt=\"HIDMaestro\" width=\"96\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003cem\u003ePowered by HIDMaestro. One driver, 225+ device profiles.\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\n## What PadForge does for you\n\n### That game that won't read your wheel? It will now.\n\nPadForge translates a PS5 DualSense into the Xbox pad a Steam game expects. A Logitech G29 wheel into the gamepad a racing game accepts. A Saitek HOTAS into the gamepad a flight game stubbornly insists on. The game never knows the difference.\n\n![Mappings tab](screenshots/mappings.jpg)\n\n### Pedals, wheel, and HOTAS throttle. One virtual stick.\n\nOne mapping row can read from any number of physical inputs across any number of physical devices. Six combine modes (Strongest, Combined, Average, Either, Both, Only one) plus a drag-and-drop custom formula editor. Cross-device chords so a button on the wheel and a button on the shifter trigger one virtual press.\n\n![Multi-source mapping row with combine modes and formula editor](screenshots/mappings.jpg)\n\n### Caps Lock for your controller.\n\nEach slot can carry extra mapping tables that turn on while a button, chord, or axis is held. Five activation modes (Hold, Toggle, Sticky, Cycle, Custom jump-to). Per-layer color and emoji icon. A Win11-style flyout pops to confirm the active layer the moment it engages.\n\n![Shift layer tab strip above the mapping grid](screenshots/mappings.jpg)\n\n### Aim with the controller, not the stick.\n\nReference frames (Local, Player, World). Dual-threshold smoothing. Real-world calibration. A cross-device Aim Engage button. Tuning saves per pad per slot, so the same pad on two slots can feel two different ways. Gyro Pitch / Yaw / Roll bind as first-class sources in the mapping table.\n\n![Gyro tab](screenshots/gyro.jpg)\n\n### Forza, Gears, and Halo on your real Xbox pad.\n\nPadForge passes Xbox impulse trigger data straight to the assigned physical Xbox One, Elite, or Series pad. The same data routes to DualSense as Adaptive Trigger Vibration so a DualSense playing Forza buzzes the triggers in step with an Xbox One pad doing the same. Plus audio-bass-driven trigger rumble and a constant trigger force that resumes when the game stops.\n\n![Impulse Triggers tab](screenshots/impulse-triggers.jpg)\n\n### Adaptive triggers and lightbar that don't need the game's blessing.\n\nSeven adaptive trigger modes with a live preview that draws the resistance curve as you drag. Fifteen lightbar modes, six of them tied to your system audio (three Audio Pulse variants, three Audio Bands variants). The DualSense lights and triggers light up in games that have never heard of a DualSense.\n\n| ![Adaptive Triggers tab](screenshots/adaptive-triggers.jpg) | ![Lighting tab](screenshots/lighting.jpg) |\n|:---:|:---:|\n\n### Turn the DualSense pad into a mouse, a stick, or a D-pad.\n\nA Touchpad tab on every slot whose source carries a touchpad surface (DualSense, DualSense Edge, DS4, Web Controller, on-screen Touchpad Overlay, Windows Precision Touchpad). Map a finger to mouse X/Y with per-axis sensitivity and invert. Anchor a virtual analog stick where your finger lands. Drop a wedge-thresholded D-pad on top. The gesture stack covers 4-way and 8-way swipes, taps, longpress, pinch, rotate, three- to five-finger gestures, and shape templates (Circle, Square, Triangle, Z, Checkmark — Circle binds clockwise and counter-clockwise separately). Every toggle saves per slot.\n\n![Touchpad tab](screenshots/touchpad.jpg)\n\n### Open a browser. Press buttons.\n\nPadForge runs a tiny web server. Any device with a browser on your Wi-Fi can load it, pick a layout (Xbox 360, DualShock 4, or multi-touch touchpad), and play. Up to 16 phones at once, each a separate virtual pad. Touch buttons, dual analog sticks, an 8-way D-pad. Rumble feedback through the Vibration API. No app to install on the phone.\n\nNo phone handy? Turn on **Touchpad Overlay** from the Dashboard. A transparent on-screen touch surface pins to any monitor and drives the DS4 or DualSense touchpad directly.\n\n![Web controller](screenshots/web-controller.jpg)\n\n### Local co-op without limits.\n\nTwo sim racers on two wheels at once. A flight stick plus throttle plus rudder pedals as one virtual HOTAS. Mixed gamepad types in one session. Up to 16 controllers. One combo press toggles every virtual controller on or off when you need to step away.\n\n![Dashboard with multiple slots](screenshots/dashboard.jpg)\n\n### Gyro into Cemu, Dolphin, Yuzu, and Ryujinx.\n\nThe built-in DSU / Cemuhook server broadcasts gyroscope and accelerometer on UDP port 26760 so emulators can use real motion for Splatoon, Wii titles, 3DS games, and anything else that asks for it. DualSense, DualShock 4, Switch Pro, and 2026 Steam Controller sources all work out of the box.\n\n![Dashboard Motion Server section with port and enable toggle](screenshots/dashboard.jpg)\n\n### A 16-channel MIDI controller, no extra hardware.\n\nMap sticks to Control Change messages. Map buttons to Note On / Note Off. Set velocity per slot. PadForge creates a real Windows MIDI endpoint through Windows MIDI Services that DAWs (Ableton Live, FL Studio, Reaper), VJ tools, and stage lighting apps can subscribe to. No loopMIDI bridge.\n\n![MIDI virtual controller](screenshots/midi.jpg)\n\n---\n\n## PadForge vs other controller mappers\n\n| | PadForge | x360ce | XOutput | reWASD | DS4Windows | Steam Input |\n|---|:---:|:---:|:---:|:---:|:---:|:---:|\n| Free | ✅ | ✅ | ✅ | $9.99+ | ✅ | ✅ |\n| Open source | ✅ | ✅ | ✅ archived | ❌ | ✅ | ❌ |\n| Works outside Steam | ✅ | ✅ | ✅ | ✅ | ✅ | only via Add Non-Steam Game |\n| Actively developed | ✅ 2026 | no release since Nov 2020 | deprecated 2024 | ✅ v9.4 (2026) | ✅ v3.5 (Feb 2026) | ✅ |\n| Xbox 360 virtual output | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n| Xbox One / Series virtual output | ✅ | ❌ | ❌ | ✅ Xbox One | ❌ | ❌ |\n| DualShock 4 virtual output | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |\n| DualSense virtual output | ✅ | ❌ | ❌ | ❌ input only | ❌ | ❌ |\n| Switch Pro virtual output | ✅ via HIDMaestro | ❌ | ❌ | ✅ | ❌ | ❌ |\n| Flight stick / wheel / HOTAS virtual output (DirectInput) | ✅ 225+ HM profiles | ❌ | ❌ | ❌ | ❌ | ❌ |\n| MIDI virtual output | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Keyboard + Mouse virtual output | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ |\n| Multi-source per row (one output, many inputs) | ✅ 6 combine modes + formula | ⚠️ \"Combine Into\" merges pads | ⚠️ MapperDataCollection (basic) | ❌ uses per-input Activators | ❌ | ⚠️ per-input Activators |\n| Custom formula editor (arithmetic, logic, if-then-else) | ✅ drag-and-drop operators + 10 starter recipes | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Shift layers / modifier overlays | ✅ Hold / Toggle / Sticky / Cycle / Custom | ❌ | ❌ | ✅ up to 10 (Hold / Toggle / Custom) | ✅ Mode Shifts | ✅ Action Set Layers (stackable) |\n| Cross-device chords (input on pad A + input on pad B) | ✅ | ❌ | ❌ | ✅ via Group of devices | ❌ | ❌ same controller only |\n| Gyro mapping | ✅ Local / Player / World, RWC, Aim Engage | ❌ | ❌ | ✅ since v5.3 (curves, Flick Stick) | ✅ gyro-to-mouse, gyro-to-RS | ✅ |\n| Xbox Impulse Trigger passthrough | ✅ + DualSense AT Vibration auto-route | ❌ | ❌ | ✅ Xbox One output only | ❌ | ❌ |\n| Constant trigger force | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Audio-bass trigger rumble | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Audio-bass body rumble | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| DualSense Adaptive Triggers | ✅ 7 modes + GameCube preset | ❌ | ❌ | ✅ 11 presets | ⚠️ limited | ❌ |\n| DualSense lightbar | ✅ 15 modes inc. Strobe + Battery | ❌ | ❌ | ✅ 6 modes + Player LED + Mic LED | ⚠️ basic, no audio | ⚠️ unverified |\n| Touchpad: joystick / D-pad / mouse + gesture engine | ✅ joystick (anchor-relative), wedge D-pad, per-axis mouse (sensitivity + invert), in-box gestures (4-way / 8-way swipes, taps, longpress, pinch, rotate, two- to five-finger), shape templates (Circle in either direction, Square, Triangle, Z, Checkmark), custom recorded shapes | ❌ | ❌ | ⚠️ touchpad-as-mouse / -as-stick + click, no gesture engine | ⚠️ touchpad-as-mouse + four-direction Touchpad Swipe bindings | ⚠️ joystick / D-pad / mouse / touch menu, no multi-finger or shape recognition |\n| HID PID 1.0 force feedback (wheels) | ✅ | ✅ constant + periodic (DirectInput) | ⚠️ basic passthrough only | ❌ | ❌ | ❌ |\n| DSU / Cemuhook motion server (Cemu, Dolphin, Yuzu, Ryujinx) | ✅ | ❌ | ❌ | ✅ port 26760 | ✅ | ❌ |\n| Phone as controller | ✅ in-browser, no app install, up to 16 phones at once, touchpad layout included | ❌ | ❌ | ⚠️ reWASD Mobile app (one phone, no touchpad layout) | ❌ | ❌ |\n| Per-app profile switching | ✅ | ✅ since v4.17.12 (Nov 2020) | ❌ | ✅ Autodetect | ✅ | ✅ per-game by design |\n| Max simultaneous virtual controllers | 16 | 4 (hard-coded PAD1-4 in UI) | 4 (UI matches XInput slot indices) | 4 (Slot UI cap) | 4 (Output Slots UI cap) | 1 per physical pad |\n| 1000 Hz polling | ✅ | ⚠️ unverified | ⚠️ unverified | ✅ user-selectable 500 / 1000 Hz | ✅ on USB DS4 | ⚠️ unverified |\n| 3D + 2D controller visualization | ✅ | ⚠️ 2D Xbox 360 only | ❌ | ⚠️ 2D only | ⚠️ basic | ⚠️ configurator preview |\n| Multi-point sensitivity curve editor | ✅ draggable points | ⚠️ single slider | ⚠️ deadzone only | ✅ custom 4-point | ⚠️ preset curves | ✅ response curves |\n| 2026 Steam Controller support | ✅ via SDL3 fork | ❌ | ❌ | ⚠️ unverified | ❌ | ✅ |\n\nComparison reflects each tool's shipping release at the time of this README. Verified against each project's own docs and source: x360ce v4.17.15.0 changelog; XOutput README + 3.x source; reWASD help.rewasd.com (v9.4); ds4windowsapp/DS4Windows v3.5; Steamworks Documentation (Action Set Layers / Activators / Mode Shifting / Input Source Modes). ⚠️ means the feature exists but is limited or unverified at the level of detail PadForge implements it.\n\n---\n\n## Quick start\n\n1. Download `PadForge.exe` from the [latest release](https://github.com/hifihedgehog/PadForge/releases/latest).\n2. Run it. PadForge always runs elevated, so Windows shows the UAC prompt at startup. The first launch installs HIDMaestro inside that same elevated session.\n3. Click **Add Controller** on the Dashboard. Pick Xbox, PlayStation, Extended, MIDI, or Keyboard+Mouse.\n4. On the new slot, drag a physical device onto it from the sidebar.\n5. Most controllers auto-map on assign. For the rest, click **Map All** to walk every button in one pass, or use the **Mappings** tab to bind one at a time.\n6. Launch your game. The game sees the virtual controller as real hardware.\n\nMost games \"just work\" after step 5. If a game sees both your physical and virtual controller at once, install HidHide from **Settings → Drivers** to hide the physical one.\n\n---\n\n## Screenshots\n\n### Dashboard\n![Dashboard](screenshots/dashboard.jpg)\nPolling rate, device count, every virtual controller slot, DSU motion server, web controller server, and driver health on one screen.\n\n### 3D controller visualization\n![Controller](screenshots/controller.jpg)\nInteractive 3D model per profile. Rotate, zoom, pan. Buttons, sticks, and triggers highlight while you press them. Xbox Series profiles add a clickable Share button.\n\n### 2D controller visualization\n![Controller 2D](screenshots/controller-2d.jpg)\nFlat schematic of the same controller, same live state. Useful on small monitors or for streaming overlays.\n\n### Button and axis mappings\n![Mappings](screenshots/mappings.jpg)\nRecord a binding by pressing a button. Pick from a dropdown of every available input (including raw HID buttons past the standard 11). Set Invert, Half-axis, or a per-mapping threshold for axis-to-button activation.\n\n### Stick deadzones\n![Sticks](screenshots/sticks.jpg)\nSix deadzone shapes (Scaled Radial, Radial, Axial, Hybrid, Sloped Scaled Axial, Sloped Axial). Per-axis deadzone, anti-deadzone, linear response, center calibration, and a custom sensitivity-curve editor with draggable points.\n\n### Trigger deadzones\n![Triggers](screenshots/triggers.jpg)\nFloor and ceiling per trigger. Anti-deadzone. Sensitivity curves. Live value bars at 0.1% precision.\n\n### Force feedback and rumble\n![Force Feedback](screenshots/force-feedback.jpg)\nPer-motor strength, overall gain, motor swap. Live motor activity bars. Audio Bass Rumble captures system audio, isolates bass through a 48 dB/octave filter, and pushes it to the rumble motors. Music feels physical even when the game is silent.\n\n### DualSense Adaptive Triggers\n![Adaptive Triggers](screenshots/adaptive-triggers.jpg)\nSeven trigger effect modes. Off, Feedback, Weapon, Vibration, Multi-Position Feedback, Slope, Multi-Position Vibration. A live preview draws the resistance and amplitude curve while you drag Range, Strength, and Frequency. One-click GameCube preset loads parameters that mimic the click of a real GameCube trigger.\n\n### DualSense lightbar\n![Lighting](screenshots/lighting.jpg)\nFifteen lightbar modes including three Audio Pulse variants and three Audio Bands variants that react to system audio in real time. Three Input Reactive variants flash on button presses (Random Color, Cycle Through Palette, Base Color). Strobe is a square-wave flash at the period you set. Battery paints the bar by charge level (red at low, yellow at mid, green at full). Plus the indicator-LED card for player pattern, mute LED, and brightness.\n\n### Touchpad\n![Touchpad](screenshots/touchpad.jpg)\nPer-slot touchpad tuning on any source with a touchpad surface (DualSense, DualSense Edge, DS4, Web Controller, on-screen Touchpad Overlay, Windows Precision Touchpad). Five cards: Stick / D-Pad Output (anchor-relative virtual stick + wedge D-pad), Mouse Output (per-axis sensitivity and invert), Gesture Detection (master enable + cooldown), In-Box Gestures (swipes, taps, longpress, pinch, rotate, three- to five-finger, shape templates), Custom Gestures (recorded shape templates per profile).\n\n### Macros\n![Macros](screenshots/macros.jpg)\nCombo triggers from buttons, axes, and POV directions. Action sequences with key presses, mouse moves, scroll, delays, system volume, app volume, lightbar overrides, and rumble overrides. Four fire modes (on press, on release, while held, always).\n\n### Per-app profiles\n![Profiles](screenshots/profiles.jpg)\nEach profile holds its own mappings, deadzones, force feedback, lighting, and macros. PadForge watches the foreground window and switches profiles automatically when a matching app gains focus. Controller-shortcut combos cycle profiles without touching the keyboard.\n\n### Keyboard + Mouse virtual controller\n![KBM Preview](screenshots/kbm-preview.jpg)\nMap a controller stick to mouse movement. Map face buttons to WASD. The preview lights up every mapped key and mouse button in real time.\n\n### Extended virtual controller\n![Extended](screenshots/extended.jpg)\nFlight sticks, racing wheels, HOTAS, third-party gamepads. 225+ HIDMaestro profiles plus a Custom mode that builds a HID descriptor from scratch. Up to 8 axes, 128 buttons, 4 POV hats. Configurable VID, PID, and product string.\n\n### PlayStation virtual controller\n![PlayStation](screenshots/playstation.jpg)\nDualShock 4, DualSense, and DualSense Edge through HIDMaestro. Source gyro, accelerometer, touchpad, and battery passed through to the game.\n\n### MIDI virtual controller\n![MIDI](screenshots/midi.jpg)\nChannel 1-16. Configurable CC mapping, note mapping, and velocity. Axes send Control Change. Buttons send Note On / Off. No loopMIDI required. PadForge creates its own system endpoint via Windows MIDI Services.\n\n### Add controller\n![Add Controller](screenshots/add-controller-popup.jpg)\nPick the virtual controller type. Buttons dim when you hit the per-type limit.\n\n### Devices\n![Devices](screenshots/devices.jpg)\nEvery detected gamepad, joystick, keyboard, mouse, and touchpad as a card. Live raw axes, buttons, POV compass, gyro / accelerometer values, and touchpad finger positions for the selected device. Per-device HidHide toggle and Force Raw Joystick mode for when SDL3 guesses the gamepad layout wrong.\n\n### Web controller\n![Web Controller](screenshots/web-controller.jpg)\nConnect a phone or tablet over Wi-Fi. Browser shows an Xbox 360 layout, a DualShock 4 layout, or a multi-touch touchpad layout with virtual sticks, D-pad, triggers, and rumble. Touch the sticks to push them. Tap to click.\n\n### Settings\n![Settings](screenshots/settings.jpg)\nLanguage (10 locales, live-switch with no restart). Theme (System / Light / Dark). Polling interval (1-16 ms). Auto-start at login, minimize to tray, master input-hiding toggle.\n\n---\n\n## Known limits\n\n- PadForge runs elevated so it can install and manage the HIDMaestro driver. Non-elevated games still read the virtual controllers normally.\n- HidHide's device hiding is global per user account, not per-game.\n- The MIDI virtual controller needs Windows MIDI Services (Windows 11 24H2 / build 26100 or later). On older systems the MIDI type is hidden.\n\n---\n\n## Requirements\n\nWindows 10 or 11 on x64. The [.NET 10 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet/10.0) is bundled in the single-file release, so there is nothing else to install.\n\n### Drivers\n\nPadForge installs **HIDMaestro** on first run. HIDMaestro is the engine that creates virtual controllers. Add a slot and HIDMaestro spins up a HID device matching the controller \"shape\" you picked.\n\nTwo more drivers are optional. PadForge offers to install each one only when you need its feature:\n\n| Driver | Install when |\n|---|---|\n| [HidHide](https://github.com/nefarius/HidHide) | A game sees both your physical and virtual controller at once |\n| [Windows MIDI Services](https://github.com/microsoft/MIDI) | You want the MIDI virtual controller type |\n\n**OpenXInput** is bundled inside `PadForge.exe`. No separate install. It filters PadForge's own virtual controllers out of its own XInput view so device enumeration stays clean.\n\n---\n\n## Build from source\n\n```bash\ndotnet publish PadForge.App/PadForge.App.csproj -c Release\n```\n\nOutput: `PadForge.App/bin/Release/net10.0-windows10.0.26100.0/win-x64/publish/PadForge.exe`\n\nSee [BUILD.md](BUILD.md) for project structure, architecture notes, and developer reference. See the [wiki](https://github.com/hifihedgehog/PadForge/wiki) for deeper dives into the input pipeline, virtual controller backends, settings file format, and visualization renderer.\n\n---\n\n## Don't see your controller in the picker?\n\nPadForge's controller picker is the set of HIDMaestro profiles that ship with a captured HID descriptor. A few controllers are missing their captures, so they don't appear yet. If you own one of those controllers, you can capture it yourself from inside PadForge. No extra tools, no admin.\n\nTo capture and use a profile locally:\n\n1. Create or open any **Extended**-type slot.\n2. On the Controller page, click **Imported profiles…** on the Extended config bar.\n3. Under **Connected devices available to import**, pick your plugged-in device and click **Import**.\n4. The new profile appears in the slot's dropdown with a \"(User Generated)\" suffix and stays available across every Extended slot from then on.\n\nProfiles live inside `PadForge.xml` and travel with your settings.\n\nTo share a captured profile upstream:\n\n1. In the same dialog, select your imported profile under **Your imported profiles**.\n2. Click **Export…** and save the JSON.\n3. Open a [profile contribution issue on HIDMaestro](https://github.com/hifihedgehog/HIDMaestro/issues/new?template=profile-contribution.yml) and attach the file. Once merged, the profile ships in the next HIDMaestro release for everyone.\n\nTo import a profile someone else captured:\n\n1. Click **Import from file…** in the same dialog and pick the `.json` they sent you.\n\nPadForge reads only the HID descriptor during capture. It does not record or forward your controller's input.\n\n---\n\n## Built on the work of these projects\n\nPadForge stands on these projects. Please consider supporting them directly.\n\n| Project | Role | License |\n|---|---|---|\n| [x360ce](https://github.com/x360ce/x360ce) | Original codebase this fork started from | MIT |\n| [SDL3](https://github.com/libsdl-org/SDL) | Controller input: joystick, gamepad, and sensor enumeration | zlib |\n| [HIDMaestro](https://github.com/hifihedgehog/HIDMaestro) | User-mode UMDF2 virtual HID controller engine with 225+ device profiles | MIT |\n| [OpenXInput](https://github.com/hifihedgehog/OpenXinput) | Drop-in `xinput1_4.dll` replacement that filters PadForge's own virtual controllers from its own XInput view | upstream trademark disclaimer |\n| [Handheld Companion](https://github.com/Valkirie/HandheldCompanion) | 3D controller OBJ meshes (Xbox 360, Xbox One, DualShock 4, DualSense) | CC BY-NC-SA 4.0 |\n| [Gamepad-Asset-Pack](https://github.com/AL2009man/Gamepad-Asset-Pack) | 2D controller PNG schematics (Xbox 360, Xbox One S, Xbox Series, DualShock 4, DualSense) | MIT |\n| [HelixToolkit](https://github.com/helix-toolkit/helix-toolkit) | 3D viewport rendering for WPF | MIT |\n| [WPF UI](https://github.com/lepoco/wpfui) | Fluent 2 design system for WPF | MIT |\n| [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet) | MVVM data binding framework | MIT |\n| [NAudio.Wasapi](https://github.com/naudio/NAudio) | WASAPI loopback capture for audio-bass rumble | MIT |\n| [HidHide](https://github.com/nefarius/HidHide) | Per-device hiding driver to prevent double input | MIT |\n| [Windows MIDI Services](https://github.com/microsoft/MIDI) | Virtual MIDI device SDK | MIT |\n| [$Q Recognizer](https://depts.washington.edu/acelab/proj/dollar/qdollar.html) | Touchpad shape-template matcher: re-derived C# port of the canonical JS reference by Magrofuoco / Vatavu / Anthony / Wobbrock | BSD 3-Clause |\n| [GestureSign](https://github.com/TransposonY/GestureSign) | Touchpad angular-margin matcher: scoring approach re-derived from GestureSign's PointPatternAnalyzer | BSD 3-Clause |\n\n---\n\n## Donations\n\nKnowing PadForge is useful is reward enough. If you truly insist on donating, please donate to your charity of choice and bless humanity. If you can't think of one, consider [Humanitarian Services of The Church of Jesus Christ of Latter-day Saints](https://philanthropies.churchofjesuschrist.org/humanitarian-services). Also consider donating directly to the upstream projects above. They made all of this possible.\n\n**My promise:** PadForge will never become paid, freemium, or Patreon early-access paywalled. Free means free.\n\n---\n\n## License\n\nThis project is licensed under **CC BY-NC-SA 4.0** (Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International).\n\n- **3D controller models** adapted from [Handheld Companion](https://github.com/Valkirie/HandheldCompanion) (CC BY-NC-SA 4.0). Copyright (c) CasperH2O, Lesueur Benjamin, trippyone.\n- **2D controller assets** from [Gamepad-Asset-Pack](https://github.com/AL2009man/Gamepad-Asset-Pack) (MIT), by AL2009man.\n- **Original codebase** forked from [x360ce](https://github.com/x360ce/x360ce) (MIT).\n- **SDL3** is licensed under the [zlib License](https://github.com/libsdl-org/SDL/blob/main/LICENSE.txt).\n- **HIDMaestro** is licensed under the MIT License.\n- **WPF UI** is licensed under the MIT License.\n- **Windows MIDI Services** is licensed under the MIT License.\n- **HidHide** is licensed under the MIT License.\n- **OpenXInput** ships only an upstream Microsoft-trademark disclaimer (no OSS license grant). Redistributed as-is under the same terms.\n- **$Q Recognizer** is licensed under the BSD 3-Clause License. Copyright (c) 2018-2019, Nathan Magrofuoco, Jacob O. Wobbrock, Radu-Daniel Vatavu, and Lisa Anthony. The touchpad shape-matcher in PadForge.Engine.Touchpad.ShapeRecognizer is a C# re-derivation of the canonical JavaScript reference at depts.washington.edu/acelab/proj/dollar/qdollar.js.\n- **GestureSign's PointPatternAnalyzer** is licensed under the BSD 3-Clause License. Copyright (c) 2016, TransposonY. The angular-margin scoring in PadForge.Engine.Touchpad.AngularMarginRecognizer is a C# re-derivation of that approach.\n\nSee [LICENSE](LICENSE) for the full license text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhifihedgehog%2Fpadforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhifihedgehog%2Fpadforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhifihedgehog%2Fpadforge/lists"}