Skip to content
hifihedgehog edited this page May 20, 2026 · 36 revisions

Macros

Fire action sequences from controller inputs. Hold a combo, deflect a stick, push the D-pad, or run a macro every frame with no trigger at all.

Macros tab showing trigger setup and action list

Each slot has its own macro list. Open a slot, switch to the Macros tab, and click Add.


Make a macro

  1. Open a slot. Click the Macros tab.
  2. Click Add and name the macro.
  3. Set a trigger. The input combo that fires the macro.
  4. Add one or more actions. The steps that run when the trigger fires.
  5. Pick a fire mode and a repeat mode.

Each row has an enable checkbox. Unchecked macros stay in your settings but do not fire.


Triggers

A trigger can mix buttons, axes, and D-pad directions. Up to 8 inputs in one combo. All of them must be active at the same time. Combo entries can come from more than one physical controller. A left-hand pad and a right-hand pad can fire one shared macro.

Trigger source

You pick where the trigger reads its inputs:

Source Reads from Use when
Output Controller The virtual controller after mapping (A, B, X, Y, LB, LT, etc.) Most setups. The trigger keeps working when you swap physical devices.
Input Device Raw inputs on one specific physical controller The button is outside the standard 11 (touchpad click, pressure buttons, flight-stick extras), or you want a device-specific combo.

Record a trigger

  1. Click Record Trigger.
  2. Hold the buttons you want.
  3. Push a stick or pull a trigger past the threshold to add an axis input.
  4. Tap a D-pad direction to add a hat input.
  5. Click Stop when the inputs you want are listed.

Trigger input types

Type Behavior
Button Pressed buttons go into the combo. LB + A means both held.
Axis Fires when the stick or trigger crosses the threshold. Each axis entry has its own Invert, Half, Bidirectional, and Deadzone options, the same set the merge-mapping editor uses on axis-to-button sources. Half by itself picks one side of center (Invert flips which side). Half plus Bidirectional fires past the deadzone on either side. This lets you bind separate macros to left-stick-left and left-stick-right, or one macro to "deflected past N percent in any direction".
D-pad / POV hat Fires when the hat matches the recorded direction. The match is a 45-degree sector, so "Up" also catches small diagonals.

A mixed example: LB + Right Stick X (Positive) + D-pad Up. All three must hold for the macro to fire.

Axis threshold

When the trigger has an axis, a threshold slider appears (1 to 100 percent, default 50). The axis must cross that percent to count.

  • 10 percent. A tiny push fires the macro.
  • 90 percent. You need to push almost all the way.
  • With a direction filter, the threshold only applies to that half of the axis.

Custom Expression trigger mode

A trigger mode that fires when a formula crosses 0.5 on the rising edge. Pick this when a chord, a not-condition, or any logic past a fixed combo is the right shape. The Trigger picker lists Custom Expression alongside the combo modes.

Variables

Each row in the Variables table binds one letter (a, b, c, …) to one input. The formula references those letters.

Source Reads from
Input Device A button, POV, or axis on any physical device on the slot.
Output Controller A channel on the slot's combined virtual controller output. The macro reacts to whatever the slot is actually emitting after merge, so a macro can react to its own VC output.

Each row has Record and Clear buttons. Click Record, push the input you want, and PadForge fills the row. Click Clear to wipe the binding.

Trigger Formula

The Trigger Formula text box accepts:

  • Variables: a, b, c, … (or the indexed form s[0], s[1], …).
  • Operators: +, -, *, /, &&, ||, ?:.
  • Math functions: abs, min, max, clamp, sign, lerp.

Starter recipes

Recipe What it does
a alone Fire when variable a goes from 0 to 1.
a and b Fire only when both a AND b are active (chord).
a or b Fire when either a OR b is active.
a but not b Fire when a is active and b is NOT active.
Axis past 50% Fire when stick axis a is deflected more than 50% from rest.

Click a recipe to drop it into the formula box.

How it fires

Rising-edge detection. The macro fires once when the formula's value crosses 0.5 going up. It does not fire again until the value drops below 0.5 and rises past it.

Boolean variables (button held, POV match) read as 0 or 1. Axis variables read from 0 to 1 by deflection. A chord of two buttons crosses 0.5 when both go high. An axis past 50 percent crosses 0.5 on the first frame the deflection exceeds half-range.

See Button and Axis Mappings for the chip-style picker the variable rows share with the rest of the app.


Fire modes

Mode When it fires
On Press Once, the moment the trigger becomes active. Good for one-shot commands and toggles.
On Release Once, the moment the trigger releases. Good for charged shots.
While Held Every frame while the trigger is active. Good for turbo fire and live mouse control.
Always Every frame, with no trigger. Good for stick-to-mouse and a permanent volume knob.

Actions

Actions run in list order, top to bottom, each time the macro fires.

Button Press / Button Release

Press or release a virtual controller button. Button Press has a duration in milliseconds and auto-releases.

  • Names follow the slot's output type (Xbox labels, PlayStation labels, or numbered buttons for Extended Custom).
  • Select more than one button to fire them together.

Key Press / Key Release

Send a keyboard keystroke. The game sees it as a real key.

  • Combos work (Ctrl+C, Ctrl+Alt+Delete, etc.). Keys press in order and release in reverse.
  • Type the combo string or pick from the dropdown.

Delay

Pause the sequence for the given number of milliseconds.

Axis Set

Force a virtual controller axis to a fixed value.

Axis Value range
Stick (LX, LY, RX, RY) -32768 to 32767. 0 is center.
Trigger (LT, RT) 0 to 32767. 0 is released.

System Volume

Map an axis to Windows master volume. Updates every frame.

  • Axis. Which axis drives volume.
  • Invert. Release-to-louder.
  • Show volume OSD. The Windows volume flyout. On by default. Updates at about 5 Hz so it does not spam.
  • Volume Limit. Caps the maximum. 30 to 50 percent is a safe start for protecting your ears.

App Volume

Same as System Volume, but it drives one app in the Windows audio mixer.

  • Process name. The app to control (Spotify, Firefox, Discord). The dropdown lists apps that are playing audio right now.
  • The other options match System Volume.

Mouse Move

Map an axis to cursor movement. Updates every frame.

  • Sensitivity (1 to 100). Pixels per frame at full deflection. 10 to 15 is a good start.
  • X axes move horizontally, Y axes move vertically.
  • Sub-pixel accumulation keeps the cursor smooth at low sensitivity.

Mouse Button Press / Mouse Button Release

Press or release a mouse button. Press has a duration in milliseconds and auto-releases. Buttons: Left, Right, Middle, X1 (Back), X2 (Forward).

Mouse Scroll

Map an axis to scroll wheel movement. Updates every frame.

  • Sensitivity. Scroll units per frame at full deflection. 3 to 5 is a good start.
  • Stick Y scrolls in both directions. Triggers scroll one way.

Lightbar Color

Push an RGB color to every Sony pad on the slot as a temporary override. The override beats the base lightbar mode and the Input Reactive overlay. Game-driven writes still win at the packet level.

Two hold modes:

  • Reactive. Run at full brightness, then fade to black over the Fade window. Good for damage flashes and kill confirms.
  • Sticky. Hold the color at full brightness until a Lightbar Color Clear action or a fresh override replaces it. Good for armed / disarmed markers.

Available on slots that have at least one Sony pad (DualShock 4, DualSense, DualSense Edge).

Lightbar Color Clear

Drop any active macro lightbar override on the slot. The base mode and Input Reactive overlay come back.

Lightbar Mode Set

Change the slot's base lightbar mode to a specific value (Static, Rainbow, Audio Pulse, etc.). Every Sony pad on the slot renders the new mode with its own palette and decay settings. Old Input Reactive base values translate to LightbarMode = Off plus the matching overlay.

Lightbar Mode Cycle

Step through an ordered list of base lightbar modes. Each fire advances one step. The list wraps at the end.

Rumble

Drive the slot's physical rumble from a macro. Per-motor strength from 0 to 100 percent, so a macro can hit one motor by itself or both together. Two hold modes match Lightbar Color:

  • Reactive. Run at full strength across the Hold window, then fade to zero across the Fade window. Good for hit / shoot / confirm pulses.
  • Sticky. Hold at full strength until a Stop Rumble action runs. Good for armed states and click-and-hold sustain.

Macro rumble layers over game rumble with max(), so user feedback always reaches the motors. Sony slots write through the same dispatcher that drives game rumble. Non-Sony slots use the SDL rumble path.

Stop Rumble

End any active macro rumble override on the slot, no matter which motor was running. Pair this with a Sticky Rumble action to give the macro a clean release.

Axis source for continuous actions

System Volume, App Volume, Mouse Move, and Mouse Scroll all read from one of two sources:

Source What you get
Output Controller (default) The virtual controller's combined output after deadzone, range, and inversion. Device-independent.
Input Device Raw input on one specific physical controller. Pick the device and axis from dropdowns.

Pick Input Device when the axis is unmapped (a throttle lever you want for volume) or you want to skip the deadzone and curve math.

Axis options

  • Invert axis. Reverse the direction. Volume: release-to-louder. Mouse: opposite cursor.
  • Show volume OSD. The Windows volume flyout. System Volume only. On by default.

Build the sequence

  1. Click Add Action and pick the type.
  2. Set it up (button, key, delay, etc.).
  3. Add more rows. They run top to bottom.
  4. Use the delete icon to remove a row.

Quick melee combo:

  1. Button Press: Y (50 ms)
  2. Delay: 100 ms
  3. Button Press: B (50 ms)

Stick-to-mouse aiming (Always mode):

  1. Mouse Move: Right Stick X, sensitivity 15
  2. Mouse Move: Right Stick Y, sensitivity 15

Repeat modes

Mode Behavior
Once Runs one time.
Fixed Count Runs N times in a row.
Until Release Loops while the trigger is held. Requires While Held.

Fixed Count and Until Release both have a Repeat Delay in milliseconds between runs.

Turbo fire: While Held plus Until Release, Button Press A (50 ms), repeat delay 50 ms. A presses every 100 ms (about 10 times a second) while held.


Consume trigger buttons

On by default. The trigger's buttons are stripped from the virtual controller output, so the game only sees the macro's actions.

State Game sees
On (default) Macro output only. LB + RB are hidden.
Off The trigger buttons and the macro output, both.

Consume only applies to buttons on the Output Controller source. Input Device triggers are not part of the combined gamepad state, so there is nothing to consume.


How actions run together

Type Actions Behavior
Sequential Button Press / Release, Key Press / Release, Mouse Button Press / Release, Delay, Axis Set One at a time, top to bottom.
Continuous System Volume, App Volume, Mouse Move, Mouse Scroll Every frame, all in parallel.

Both types mix in one macro. Two Mouse Move actions (X and Y) run in parallel while a Button Press in the same list runs in sequence next to them.


Recipes

Left Trigger as a volume knob

  • Fire mode: Always
  • Action: System Volume. Axis: Left Trigger. Volume Limit 50 percent. OSD on.

Always mode means there is no trigger combo. The Volume Limit prevents an accidental blast.

Right Stick as a mouse cursor

  • Fire mode: Always
  • Actions:
    1. Mouse Move: Right Stick X, sensitivity 15
    2. Mouse Move: Right Stick Y, sensitivity 15

Lower sensitivity gives you precision. Higher gives you speed. Pair this with the bumper recipe below for full mouse control.

Bumpers as mouse clicks

Macro Fire mode Trigger Action
Left Click On Press LB Mouse Button Press: Left (50 ms)
Right Click On Press RB Mouse Button Press: Right (50 ms)

Turbo fire

  • Fire mode: While Held
  • Trigger: Right Trigger axis, threshold 50 percent
  • Repeat: Until Release, delay 50 ms
  • Action: Button Press: A (30 ms)

A presses about every 80 ms (30 ms press plus 50 ms delay) while the trigger is past 50 percent. Release to stop.

Per-app music volume

  • Fire mode: While Held
  • Trigger: LB
  • Consume trigger buttons: On
  • Action: App Volume. Axis: Left Stick Y. Process: Spotify. Volume Limit 80 percent.

Hold LB and move the left stick up or down to set Spotify volume. The game never sees LB. The level stays where you leave it.

Quick chat combo

  • Fire mode: On Press
  • Trigger: D-pad Down + A
  • Actions:
    1. Key Press: T (50 ms). Opens chat.
    2. Delay: 100 ms
    3. Key Press: G (50 ms)
    4. Delay: 50 ms
    5. Key Press: G (50 ms)
    6. Delay: 50 ms
    7. Key Press: Return (50 ms). Sends the message.

Increase the delays if the game needs more time between keystrokes.


Extended Custom button support

Extended slots set to Custom support up to 128 buttons. The trigger recorder and the Button Press dropdown grow to match the slot's ButtonCount. Xbox, PlayStation, and gamepad-shaped HIDMaestro profiles use the standard button names.


Tips

  • Delays under 10 ms may not register in some games. Start at 50 ms and work down.
  • Test in the actual game. Timing needs change per title.
  • Mixing button and axis inputs in one trigger cuts down on accidental fires.
  • Mouse sensitivity 10 to 15 for cursor work. 3 to 5 for scrolling.
  • Macros save per profile. Different games can have different macro lists through Profiles.

Limitations

  • Macro lightbar overrides do not override what the game writes at the packet level. A game that drives the lightbar each frame wins.
  • Macro rumble layers with max(), so a game holding a motor at full strength masks a weaker macro pulse.
  • Input Device triggers cannot use Consume trigger buttons. The raw input layer is upstream of the combined gamepad state.

Related pages

Last updated for PadForge 3.2.0.

Clone this wiki locally