-
Notifications
You must be signed in to change notification settings - Fork 6
Gyro
Per-pad motion-sensor mapping with calibration, sensitivity, smoothing, and engage gates.

The Gyro tab appears when the slot's assigned physical device exposes a gyroscope. Each tuned value is kept per (device, slot), so the same pad on two different slots can carry two different feels.
The tab is visible only when the selected mapped device reports a gyro sensor. DualSense, DualShock 4, Joy-Con, Switch Pro, Steam Controller, Steam Deck, and any Extended profile that wires gyro axes all qualify. Pads with no gyro never see the tab.
Zero the at-rest reading so gyro mappings don't drift the mouse or stick while you hold still.
- Put the controller on a flat surface. Hands off.
- Click Calibrate Gyro.
- PadForge samples for about 1.5 seconds. The averaged reading becomes the device bias.
- The bias is subtracted from every raw sample going forward.
The timestamp under the buttons shows the last successful calibration. A live readout below the button shows the current Pitch, Yaw, and Roll rate in degrees per second so you can confirm the rest-state floor.
Reset Calibration clears the bias and the timestamp. The next polling cycle re-runs the auto-calibration.
Top-level scaling, axis inversion, and the reference frame the gyro is interpreted in. Every gyro mapping on this device inherits these values.
| Mode | What the slider means |
|---|---|
| Multiplier | Internal × scale. 1.00 is the engine baseline. The default. |
| Degrees per screen turn | Steam-style. Slider reads as physical controller degrees needed for one full in-game camera turn. |
The sensitivity sliders share the same underlying value. Picking a different unit changes the label and live "≈ N°/turn" hint without resetting the tuning.
| Slider | Drives |
|---|---|
| Horizontal Sensitivity | Yaw and Roll gyro contribution |
| Vertical Sensitivity | Pitch gyro contribution |
The two axes are independent. Set Horizontal to 2.5× and Vertical to 1.0× for fast turning with conservative tilt aim.
Per-axis flip applied after the reference-frame projection. The Yaw checkbox also covers the Roll and horizontal-blend gyro sources. These run independently from any Invert flags on the mapping table.
In-game degrees per physical degree of controller rotation. 0 turns the correction off. 1.0 means a 90° wrist rotation produces a 90° camera turn.
Calibrate once per game: turn the pad a full physical rotation, look at how far the in-game camera turned, and adjust until the two match.
The Space dropdown picks how raw gyro motion is mapped to camera input.
| Space | Behavior |
|---|---|
| Local | Raw controller axes. Pitch is whatever the IMU calls pitch. Holding the pad tilted changes which way feels like "horizontal." |
| Player | Horizontal motion is projected onto the real-world vertical (gravity). The same wrist twist always turns the camera, regardless of how you're holding the pad. |
| World | World additionally re-projects vertical motion onto world axes. Useful when the pad pitches around a lot during play. |
Player Space arrived alongside dual-threshold smoothing in the Steam Input parity overhaul. Local stays as the default so existing configs feel identical.
A dead zone, two smoothing thresholds, a smoothing window, an acceleration term, and an output curve.
Rotation rate (°/s) below which gyro output is treated as zero. Rejects at-rest hand tremor. Rates past the threshold pass through with the threshold subtracted, so there's no jump at the boundary.
Two sliders set the rate window where smoothing kicks in.
| Slider | Effect |
|---|---|
| Tightening | Below this rate, the signal is replaced by the smoothing buffer's average. Drops hand tremor. Default 3°/s. |
| Smoothing Threshold | Above this rate, raw signal passes through. Fast turns keep their precision. Default 8°/s. |
| Smoothing Window | How long a window the buffer averages over. Larger = heavier smoothing below the tightening threshold. Default 50 ms. |
Between Tightening and Smoothing Threshold a linear ramp blends raw and averaged signal.
Rate-dependent gain. 0 is off (plain linear scaling). Higher values pass slow rates through unchanged while amplifying fast rates. Lets precision aim and fast turns share one sensitivity setting.
Reshape applied after smoothing and acceleration.
| Curve | Feel |
|---|---|
| Linear | Pass-through. 1:1 input to output. |
| Aggressive | x² (slow stays slow, fast amplifies hard) |
| Relaxed | √x (slow amplifies, fast saturates) |
| Wide | Sits between Aggressive and saturated |
| Extra wide | Wider still |
Output Curve composes with Acceleration. Both feed the same output stage.
The Engage card limits when the gyro is active. Gates are optional. Gyro fires only while every configured gate is active.
Two gates ship in PadForge 3.2: right-stick deflection (Easy Aim) and a held button (Aim Engage). Leave both at their disabled values for always-on gyro.
Right-stick deflection (0–100%) below which gyro output is zeroed.
| Value | Behavior |
|---|---|
| 0% | Disabled. Gyro is always on. |
| 1–100% | Gyro fires only while right-stick deflection exceeds this percentage. |
Above the threshold the gyro signal passes through. Below it the gyro output goes to zero, which recenters any virtual stick the gyro is bound to.
Cross-device picker that gates gyro on a held button.
- The dropdown lists every input on every device the slot has access to, grouped by physical device.
- The device-name subtitle under the picker shows which device owns the chosen input. Matches the mapping-row pattern in the rest of the app.
- The Record button next to the picker records the next physical input press as the aim engage button.
- Leave the field unset to disable the button gate.
When both Easy Aim and Aim Engage are configured, both must be active for gyro to fire. Releasing either gate zeroes the gyro output.
Gyro doesn't have a tab-level "send to mouse" or "send to stick" switch. The destination is whatever the mapping table says.
- Bind Gyro Pitch / Yaw / Roll to MouseX / MouseY to get a gyro mouse.
- Bind Gyro Pitch / Yaw / Roll to RightStickX / RightStickY (or any virtual stick axis) to get a gyro stick.
- Bind to any Extended axis if you're driving a custom HID profile.
Stick output recenters as soon as the engage gates close, because zeroed gyro output writes zero stick deflection. Mouse output just stops moving.
See Button and Axis Mappings for the full source/destination reference.
Every mapping row whose source is a Gyro axis carries its own Gyro Sensitivity dial. 1.0 is the engine's default 500°/s → ±1 deflection scale. The per-row multiplier composes with the device-level Horizontal and Vertical sensitivities on this tab.
Use the per-row dial when one mapping needs to feel different from the rest. A camera bind at 1.0× alongside a steering bind at 0.3× lets you keep the camera fast while taming the wheel.
Calibration, sensitivity, smoothing, curve, and engage values live on the (device, slot) pair. Assigning the same pad to two slots gives you two independent tunings. Removing the pad from a slot keeps the values cached against that pair for next time.
The values are written to PadForge.xml whenever you change anything on this tab.
Every row has a reset button (circular arrow icon). Each card has a Reset All button next to its title that snaps every value in the card back to defaults.
| Button | Resets |
|---|---|
| Reset Calibration | Auto-cal bias + timestamp |
| Reset Sensitivity | Units, Space, Horizontal, Vertical, both Invert flags, Real-World Calibration |
| Reset Response Shaping | Dead Zone, Tightening, Smoothing Threshold, Smoothing Window, Acceleration, Output Curve |
| Reset Engage | Easy Aim Threshold, Aim Engage Button |
Starting values only. Tune against the live rate readout and in-game feel.
| Setting | Value |
|---|---|
| Space | Player |
| Units | Degrees per screen turn |
| Horizontal Sensitivity | 360° per screen turn |
| Vertical Sensitivity | 360° per screen turn |
| Dead Zone | 3°/s |
| Tightening | 3°/s |
| Smoothing Threshold | 8°/s |
| Smoothing Window | 50 ms |
| Acceleration | 0 |
| Output Curve | Linear |
| Easy Aim Threshold | 0% (always on) or 15% if stick aim shares the right stick |
| Aim Engage Button | L2 or unset |
| Setting | Value |
|---|---|
| Space | Player |
| Units | Multiplier |
| Horizontal Sensitivity | 2.5× |
| Vertical Sensitivity | 1.5× |
| Dead Zone | 5°/s |
| Tightening | 5°/s |
| Smoothing Threshold | 12°/s |
| Acceleration | 0.5 |
| Output Curve | Wide |
| Easy Aim Threshold | 10% |
| Aim Engage Button | Unset |
| Setting | Value |
|---|---|
| Space | Local |
| Units | Multiplier |
| Horizontal Sensitivity | 1.0× |
| Vertical Sensitivity | 0.5× |
| Dead Zone | 8°/s |
| Tightening | 6°/s |
| Smoothing Threshold | 15°/s |
| Acceleration | 0 |
| Output Curve | Relaxed |
| Easy Aim Threshold | 0% |
| Aim Engage Button | Unset |
- Button and Axis Mappings: bind Gyro Pitch / Yaw / Roll to virtual destinations and set per-row multipliers.
- Stick Deadzones: the right stick's own deadzone shapes how Easy Aim Threshold engages.
- DSU Motion Server: broadcast the calibrated gyro and accelerometer feed to Cemu, Dolphin, Yuzu, and Ryujinx over UDP.
Last updated for PadForge 3.2.0.