Features
Input recording, macro playback, macro editing including trigger configuration and playback settings.
Overview
AdaptivePlay lets you record controller inputs and play them back with configurable triggers. Recorded inputs are saved as macros that can be organized into folders, edited, exported, and shared.
The typical workflow is:
- Record controller inputs on the Record Screen.
- Save the recording as a named macro.
- Manage macros on the Macros Screen — organize into folders, configure triggers, and activate.
- Edit macros in the Macro Editor to fine-tune individual inputs, timing, and playback settings.
- Play — activate macros and use triggers to start and stop them during live gameplay.
You can also create macros from scratch in the editor without recording, or import macros shared by others.
Using input automation features during competitive online multiplayer gameplay may violate the terms of service of the game or platform and may result in account suspensions or bans. You are responsible for ensuring that your use complies with any applicable terms or policies. See the EULA for full details.
Record Screen
The Record Screen is where you capture controller inputs and play them before saving. It is split into two sections: Record Input Macro (for capturing inputs) and Playback (for playing what you recorded).
Each section has its own start and stop triggers, a play/record button, and a settings icon for configuring options. Below both sections, the current macro status is displayed — the macro name, duration, and a Save button when a recording is ready.
Recording Inputs
To record, connect a controller to your phone via USB or Bluetooth, then tap the Record button (or use a configured Start Trigger). Inputs from the controller will start being recorded according to the recording options. The status area shows "Recording inputs..." in red while recording is active.
A controller must be connected to your phone before you can start recording. If no controller is detected, you'll see a "Connect a controller" message.
Recording stops when you tap the Stop button, use a configured Stop Trigger, or when a limit is reached (maximum 1 hour duration or storage limit of 5MB). If you navigates to a different screen or minimize app, the recording also stops and the macro is saved up to that point. If no inputs are detected during a recording, the recording is discarded and a message is shown.
Each input is saved as an individual macro entry the moment it is received from the controller. The exception is analog sticks — the left and right stick positions are always saved together in a single entry as per the remote play protocol.
Every entry is stamped with a high-precision timestamp in the format MM:SS.sssss, where MM is minutes (00–59), SS is seconds (00–59), and sssss is five sub-second digits giving a resolution of 0.01 milliseconds (10 microseconds). The full timestamp range is 00:00.00000 to 59:59.99999, supporting recordings up to 1 hour.
Recording Options
Tap the gear icon next to the Record button to open the Recording Options. These settings control what gets recorded and how recording starts and stops.
Input Filters
Each input type can be individually enabled or disabled. Disabled inputs are filtered out during recording so they don't appear in the final macro. For example, you might disable stick recording if you only want to capture button presses.
- Buttons — Cross, Circle, Square, Triangle, L1, R1, L3, R3, Options, Share, PS
- D-Pad — Directional d-pad inputs (Up, Down, Left, Right).
- L2 Trigger — Left analog trigger.
- R2 Trigger — Right analog trigger.
- Left Stick X — Left analog stick horizontal axis (-32768-32767).
- Left Stick Y — Left analog stick vertical axis (-32768-32767).
- Right Stick X — Right analog stick horizontal axis (-32768-32767).
- Right Stick Y — Right analog stick vertical axis (-32768-32767).
- Touchpad — Touchpad touch, movement events(X: 0–1920, Y: 0–942) and touchpad press button
Notifications
You can configure separate notifications for when recording starts and stops, so you get feedback without needing to look at the screen — useful when recording with triggers while focused on gameplay.
- None — No notification.
- Vibrate — A short vibration pulse on the connected controller (100ms, maximum intensity).
- Chime — An audio tone played through the phone speaker. The start tone is a higher pitch (880 Hz) and the stop tone is a lower pitch (587 Hz), making them easy to distinguish.
- Vibrate + Chime — Both vibration and audio tone together.
Recording Timing
- Start on First Input — When enabled, the recording timer begins at the moment the first controller input is detected rather than when the Record button is pressed. The first entry in your recorded macro will always be at time stamp
00:00.00000. This avoids a gap of silence at the beginning of the recording if you take a moment before pressing a button. When disabled, the timer starts immediately when recording begins. - End on Last Input — When enabled, the recording is trimmed to the last detected input when you stop recording, removing any trailing silence. When disabled, the full duration from start to stop is kept, including any time after the last input. The trailing time will appear as the End Delay(
+00:00.00000)in the macro.
Saving Recordings
When a recording is ready, its name and duration appear at the bottom of the screen. Name are incremented automatically for each recording.
A Save button also appears to the right of the macro name. Tap it to open the Save dialog, which shows a message indicating the macro will be saved to the Recorded Macros folder. Enter a name for the macro (up to 40 characters) and tap Save.
The macro's name and input entries are saved locally on the phone. Saved macros appear in the Recorded Macros folder on the Macros Screen. Newly saved macros are always saved with default trigger and playback settings:
- Start/stop trigger set to "None", both toggled active
- Loop macro: Off
- Playback speed: 1.0x
Local recordings are stored in memory only, they are lost if you close the app. New recordings will also overwrite any existing recordings on this screen. Save your recorded macro if you want to keep it.
Playback
After recording, you can play back the macro using the Play button. During playback, the status area shows "Playing macro..." and the recorded inputs are sent to the console exactly as they were captured. If there is no active console connection, the macro will still play through its duration but inputs are not sent anywhere.
Playback is useful for verifying your recording before saving. You can play it back multiple times, adjust playback options, and re-record if needed. The local recording stays in memory until you record a new macro, or close the app.
Playback Options
Tap the gear icon next to the Play button to open the Playback Options dialog. These settings apply to the current local recording.
- Loop — Choose how many times the macro repeats: Off (play once), x2 through x10, or infinite looping. When looping is enabled, a badge appears on the Play button showing the loop count or an infinity symbol.
- Seamless Loop — When enabled, the macro loops continuously without resetting inputs between iterations. When disabled, inputs return to neutral briefly between each loop. This option only appears when loop count is 2 or higher (or infinite). Neutral for buttons means a released state, for L2/R2 Triggers a value of 0 and for sticks an (X,Y) value of 0. For touchpad values, neutral is a touch up event at the last known position.
- Playback Speed — Adjust playback speed from 0.5x (half speed) to 10.0x (ten times faster). The slider allows 0.1x increments. Tap the speed value to type an exact number. When speed is not 1.0x, the current speed is shown next to the Play button.
Record/Playback Triggers
The Record Screen has four configurable triggers:
- Record Start Trigger — Starts recording when the trigger condition is met.
- Record Stop Trigger — Stops recording when the trigger condition is met.
- Macro Start Trigger — Starts playing the recorded macro.
- Macro Stop Trigger — Stops playback.
Each trigger can be enabled or disabled independently using the toggle next to it. Tap the trigger row to open the Trigger Configuration screen where you can choose the trigger action (Single Press, Double Press, Hold, Release, Two-Button Combo) and the input to listen for. See the Trigger Types section for details on each action.
Record/Playback triggers are saved across app sessions but only apply whenever you're on the Record Screen.
Macros Screen
The Macros Screen is where you manage all your saved macros. It uses a folder-based layout — the main view shows your folders, and tapping a folder opens the list of macros inside it.
Folders
Macros are organized into folders. There are two types:
- User folders — Created by you. Can be renamed, copied, reordered, and deleted. Up to 20 user folders allowed.
- Recorded Macros folder — A permanent system folder where all recordings from the Record Screen are saved. It cannot be renamed, moved, or deleted.
Tap the + button to create a new folder. Each folder row shows the folder name and the number of macros it contains.
User folders have a 3-dot menu with the following options:
- Rename — Change the folder name (up to 40 characters).
- Copy — Duplicate the folder and all its macros into a new folder.
- Move Up / Move Down — Reorder the folder in the list.
- Delete — Delete the folder and all macros inside it. This action cannot be undone.
Managing Macros
Tap a folder to view its macros. Each macro row shows:
- Active toggle — A switch on the left to activate or deactivate the macro.
- Name — The macro name.
- Duration — Total duration in MM:SS.sssss format. If playback speed is not 1.0x, the speed is shown next to the duration (e.g., "0.7x speed").
- Trigger summary — Start trigger (prefixed with "T:") and stop trigger (prefixed with "S:") are shown below the duration. Trigger text appears blue when the macro is active and the trigger is enabled, or gray otherwise.
- Play/Stop button — Tap to manually start or stop playback. A loop badge appears when looping is configured.
- 3-dot menu — Additional options (see below).
The 3-dot menu on each macro offers:
- Edit — Open the macro in the Macro Editor.
- Rename — Change the macro name.
- Copy To — Copy the macro to one or more folders.
- Move To — Move the macro to a different folder.
- Move Up / Move Down — Reorder within the folder.
- Export — Export the macro as a JSON file.
- Delete — Permanently delete the macro.
Playing Macros
A macro must be activated before it can be played or triggered during gameplay. Toggle the switch on the left side of the macro row to activate it.
When a macro is activated:
- The macro data is loaded into memory for instant playback.
- Start and stop triggers (if configured and enabled) are armed and ready to detect input.
- The play button becomes available for manual playback.
Multiple macros can be played/triggered at the same time, up to a maximum of 10. Each macro adds inputs into a stack based system that resolves conflicts before sending the inputs over remote play. Raw controller inputs still work during macro playback and will resolve with macro inputs. If there is no active console connection, macros will still play through their duration but inputs are not sent anywhere.
The folder header shows the total number of macros and how many are currently active (e.g., "5 macros, 2 active"). A maximum of 10 macros can be active at the same time per folder.
When a macro is deactivated, it is unloaded from memory and its triggers stop listening for input.
Macro Triggers
Each saved macro has its own independent start trigger and stop trigger. These are configured per-macro and work while the macro is active on the Macros Screen.
- Start trigger — Starts playback of the macro. Only fires when the macro is active and not already playing.
- Stop trigger — Stops playback. Only fires when the macro is currently playing.
To configure triggers, tap the Edit option from the macro's 3-dot menu to open the Macro Editor, then tap the trigger rows at the top. See Trigger Types for the available trigger actions.
Multiple active macros can have identical triggers, allowing you to control several macros collectively during gameplay. For example, you could have two macros triggered by R1 single press.
Copy & Move
Copy To creates a duplicate of the macro in one or more folders. A dialog appears with checkboxes for each folder — select the folders where you want copies to be placed and enter a name for the copy. The original macro is not affected.
Move To moves the macro to a different folder. Select the target folder from the list. If the macro is currently active, it will be automatically deactivated before moving.
Export & Import
Macros can be exported as JSON files and imported on another device or shared with other users.
Exporting: Tap Export from the macro's 3-dot menu. Choose the stick value format:
- Raw X, Y — Stick positions as raw coordinate values (-32768 to 32767).
- Angle, Tilt — Stick positions as angle (0–359 degrees) and tilt (0–100 percent), which is easier to read and edit manually. Note that angle and tilt values are rounded to whole numbers and lose some accuracy from the raw coordinates. Re-importing may produce slightly different x, y values.
The exported JSON file includes all macro metadata (name, duration, triggers, playback speed, loop settings) and every input entry with timestamps. You can save it to any location on your phone or share it directly.
Importing: Tap the + button on the Macros Screen and choose Import Macro. Select a JSON file from your device. The app validates the file format, checks that it's compatible, and imports the macro into the current folder.
Exported JSON files are human-readable and can be edited in a text editor. This is useful for creating precise macros by hand or making bulk adjustments that would be tedious in the app's editor.
Editing Macros
The Macro Editor lets you view and modify every detail of a saved macro. Open it by tapping Edit from the macro's 3-dot menu on the Macros Screen.
The editor screen has a playback toolbar at the top, the macro's trigger configuration below it, and a scrollable list of all input entries. Each entry represents a single input event at a specific point in time.
Entry List
The entry list displays every input in chronological order. Each row shows:
- Timestamp — When the input occurred, in MM:SS.sssss format (minutes, seconds, and five sub-second digits representing 0.01ms precision).
- Input description — What happened at that timestamp. The format depends on the input type:
- Buttons: Button name with a colored arrow — green down arrow for press, red up arrow for release (e.g., "Cross" with a green arrow).
- Triggers: Trigger name and analog value, 0–255 (e.g., "L2 Trigger (128)").
- Sticks: Left and right stick positions displayed as either raw X,Y coordinates or angle/tilt, depending on the display setting.
- Touchpad: Touch move event with slot, touch ID, up/down state and position.
At the bottom of the list is the End marker, which shows the total macro duration including the end delay. The end delay is added to the last input entry timestamp.
You can add new entries using the + button in the playback toolbar
Editing Entries
Tap any entry row to open the Entry Editor dialog. Here you can modify:
- Timestamp — Adjust when the input occurs using minute, second, and sub-second digit pickers. Tap any digit to type an exact value.
- Input type — Change between Button, Trigger (L2/R2), Sticks (Left/Right), and Touchpad using the type dropdown.
- Input values — Depending on the type:
- Buttons: Toggle between pressed and released state, select which button.
- Triggers: Drag a slider to set the analog value (0–255).
- Sticks: Drag on circular pads to set left and right stick positions. Positions are clamped to the stick's circular boundary.
- Touchpad: Set touch slot, ID, down/up state, and X/Y coordinates.
Delete an entry from the list.
Duplicate an entry using the copy icon in the editor's title bar in the top right — useful for creating repeated patterns.
Save to update the entry.
End Delay
The End Delay is the time between the last input entry and the end of the macro. It controls how long the final input states are held before the macro completes (or loops to the beginning).
For example, if your only entry is a button press at 0.50s and the end delay is 0.50s, the macro will hold that button pressed state for an additional 0.50 seconds before finishing, making the total duration 1.00s. Once the macro terminates after the end delay, all inputs are reset to their neutral states.
Tap the End row at the bottom of the entry list to adjust the end delay.
Triggers
The trigger configuration rows appear above the entry list. Each macro has a Start Trigger and a Stop Trigger, each with an enable/disable toggle.
Tap a trigger row to open the full Trigger Configuration screen where you can select the trigger action, input, and options. See the Trigger Types section for details on each action. Changes are reflected immediately — you can test triggers during playback in the editor.
Trigger changes are part of the macro's editable state and are included when you save.
Playback & Speed
The playback toolbar at the top of the editor lets you play the macro. Tap the Play button to start playback; the entry list and all editing controls are disabled while playing so you can focus on the output.
Tap the gear icon in the playback toolbar to open the Playback Options dialog, which includes:
- Loop count — Off, x2 through x10, or infinite.
- Seamless loop — Toggle continuous looping without input reset between iterations.
- Playback speed — 0.5x to 10.0x with a slider and click-to-type input.
- Stick display format — Switch between raw X,Y coordinates and angle/tilt for how stick entries are shown in the list.
Playback speed and loop settings are saved per-macro. When speed is not 1.0x, the current speed is displayed next to the Play button (e.g., "0.7x speed"). When looping is configured, a badge shows the loop count or infinity symbol. The stick display format is a global setting and is not saved per-macro.
Undo & Redo
All edits in the Macro Editor can be undone and redone. This includes adding, deleting, and modifying entries, changing the end delay, toggling triggers, modifying trigger configurations, and changing playback settings.
Undo and Redo buttons appear at the bottom of the screen when there are actions to reverse or reapply. Up to 50 levels of undo history are maintained.
The editor tracks whether you have unsaved changes. If you try to leave with unsaved changes, a dialog will ask whether you want to Save, Discard, or Cancel. The Save button in the editor is only enabled when changes have been made.
Trigger Types
Triggers determine how macros start and stop during live gameplay. Both the Record Screen and saved macros support configurable start and stop triggers. Each trigger has an action (how to activate it) and one or more inputs (what to press).
Single Press
Activates when you press the input.
For button the trigger fires on the transition from released to pressed — a single deliberate press.
For L2/R2 Triggers, the trigger fires when the value enters the lower and upper bound set for the input.
For sticks, the trigger fires when stick enters the selected zones.
Double Press
Activates when you press the input twice within 500 milliseconds. The first press starts a timing window — a release must then be registered - followed by a second press occuring within that window, for the trigger to fire. If the window expires without a second press, nothing happens and the next press starts a new window.
For L2/R2 Triggers, a press is considered when the value enters the lower and upper bound set for the input. A release is considered a value of 0.
For sticks, a press is considered when stick enters the selected zones. A release is considered when stick enters deadzone (X,Y value of 0).
Double Press is useful when you want to use a button for its normal in-game function on a single press, but trigger a macro on a double press.
Hold
Activates when you hold the trigger input for a specified duration. The timer starts when the input is pressed and fires when the configured hold time is reached. If you release before the time is up, the trigger does not fire.
For L2/R2 Triggers, the trigger fires when the value is held between the lower and upper bound for the hold duration.
For sticks, the trigger fires when stick is held inside the selected zones for the hold duration.
Hold duration is configurable from 0.01 seconds to 20.00 seconds. Adjust it using the slider on the trigger configuration screen, or tap the value to type an exact number in seconds.
Hold triggers are useful for activating macros with an intentional sustained press, avoiding accidental activations from quick taps.
Release
Activates when you release the input after pressing it. The trigger fires on the transition from pressed to released.
For L2/R2 Triggers a release is considered a value of 0.
For sticks a release is considered when stick enters deadzone (X,Y value of 0).
Release is commonly used for stop triggers — for example, hold a button to play a macro, release the button to stop it. Combined with a Single Press or Hold start trigger on the same input, this creates a natural "hold-to-play" behavior.
Two-Button Combo
Activates when two inputs are pressed together within 200 milliseconds. You configure both Input 1 and Input 2 — the trigger fires when both are held simultaneously.
The inputs can be any combination: two buttons, a button and a trigger, a button and a stick zone, etc. The order doesn't matter — pressing either input first starts the window, and pressing the second within 200ms fires the trigger.
For L2/R2 Triggers, a press is considered when the value enters the lower and upper bound set for the input.
For sticks, a press is considered when stick enters the selected zones.
Combo triggers are useful for avoiding conflicts with normal gameplay inputs. Since it requires two simultaneous inputs, accidental activations are unlikely.
Trigger Inputs
The following input types can be used as trigger inputs:
Buttons
Any controller button can be a trigger input: Cross, Circle, Square, Triangle, L1, R1, L3, R3, D-Pad Up/Down/Left/Right, Options, Share, PS Button, and Touchpad Button.
Analog Triggers (L2 / R2)
The L2 and R2 analog triggers can be used with a configurable activation range. The range defines how far you need to pull the trigger before it counts as "pressed" (default: 50–255). A dual slider on the trigger configuration screen lets you set the lower and upper bounds.
For example, setting the range to 200–255 means only a near-full pull activates the trigger, while setting it to 10–255 makes it activate on any slight pull.
Analog Sticks (Left / Right)
Stick inputs use a zone-based system. The stick's range is divided into 16 zones: 8 inner zones (closer to center, from the deadzone to 70% tilt) and 8 outer zones (from 70% to full tilt). Each zone covers a 45-degree slice in one of eight directions: Right, Up-Right, Up, Up-Left, Left, Down-Left, Down, and Down-Right.
You select which zones activate the trigger. For example, selecting all "Up" outer zones creates a trigger that fires when you push the stick fully upward. Selecting all inner zones creates a trigger that fires on a gentle half-tilt in any direction.
Passthrough
The Passthrough setting controls whether the trigger input is sent to the console before and during trigger activation.
- Passthrough ON — The input is sent to the console normally, in addition to triggering the macro. Use this when the trigger input also has an in-game function you want to keep (e.g., using R1 as a trigger while also aiming in-game).
- Passthrough OFF — The input is blocked from reaching the console and essentially consumed by the trigger system. The input remains blocked until the trigger fires and the input returns to its neutral state (button released, trigger value at 0, or stick back to deadzone). Use this when the trigger input would interfere with gameplay (e.g., Circle triggering a turbo macro — you don't want the initial Circle press to also register in-game).
Passthrough applies to raw controller input only, not to the macro's playback inputs. The macro will always send its inputs to the console regardless of the passthrough setting.
Passthrough for Recording
On the Record Screen, passthrough has additional behavior related to whether the trigger input gets recorded into the macro.
Record Start Trigger:
- Passthrough ON — The input is recorded into the macro and sent to the console.
- Passthrough OFF — The input is blocked from both recording and console transmission while the trigger is active. The trigger input will not appear in the recorded macro.
Record Stop Trigger:
- Passthrough ON — The input is sent to the console but not recorded. Since the stop trigger ends the recording, the input that stops it is excluded from the macro.
- Passthrough OFF — The input is blocked from both recording and console transmission while the trigger is active.
Playback Speed
Playback speed controls how fast or slow a macro plays. The speed range is 0.5x (half speed, twice as slow) to 10.0x (ten times faster), adjustable in 0.1x increments.
Speed is set per-macro for saved macros (in the Macro Editor's playback options) and as a global setting for local recordings on the Record Screen. The speed value is stored internally and applied to all entry timestamps — a 1-second macro at 2.0x plays in 0.5 seconds; at 0.5x it plays in 2 seconds.
The speed setting is displayed throughout the app:
- Next to the Play button when speed is not 1.0x (e.g., "0.7x speed").
- On the macro row in the Macros Screen, next to the duration.
- In the Playback Options dialog as a slider with a click-to-type option.
Speed is independent of loop settings — a macro set to 2.0x speed with 3 loops will play the full macro at double speed, three times in a row.
Sample Macros
On first install, AdaptivePlay creates a Sample Macros folder with example macros demonstrating common use cases. These are fully editable and can be modified, copied, or deleted like any other macro.
Repeat Square (Toggle)
Rapidly repeats the Square button. Press Square once to start, press again to stop. Uses Single Press trigger with passthrough off so the initial press doesn't register as an input. Loops infinitely with seamless looping.
Repeat Cross (Hold)
Rapidly repeats the Cross button while held. Press Cross to start, release Cross to stop. Uses Single Press start trigger and Release stop trigger. Demonstrates the "hold-to-play" pattern — the macro plays only while you're holding the button.
Alternating Triggers
Alternating L2 and R2 trigger taps. Toggled on/off with D-Pad Left. Runs at 0.7x speed demonstrating speed adjustment.
Hold L-Stick Forward
Locks the left stick in the full-up position for continuous forward movement. Activated by holding the left stick up for 1 second (Hold trigger on the outer-up stick zone), stopped by pressing the left stick down (Single Press on outer-down zone). Passthrough is enabled so you can steer left and right while the macro is active.
Repeat R2 Trigger (Hold R1)
Rapidly repeats R2 trigger pulls. Activated by pressing R1, stopped by releasing R1. Passthrough is enabled so R1 still reaches the console. Demonstrates using one button to activate a macro on a different button.
AFK Stick Rotation
Rotates both sticks clockwise in a full circle over 4 seconds, preventing game idle timeouts. Toggled on/off with L3 (left stick press). Both sticks move in sync through 36 positions at 10-degree increments. Loops infinitely with seamless looping.
Limits
- 10 PSN accounts maximum on the Connection Screen.
- 10 consoles maximum on the Connection Screen.
- 100 macros maximum across all folders.
- 20 user folders maximum (plus the permanent Recorded Macros folder).
- 10 active macros maximum at one time. Active macros are loaded into memory for instant playback and trigger detection.
- 10 button mappings maximum in the Mappings settings tab.
- 1 hour maximum recording or macro duration.
- 0.5x to 10.0x playback speed range.
- 40 characters maximum for macro and folder names.
When a limit is reached, the app displays a message and prevents the action. For example, attempting to activate an 11th macro will show a notification that the active limit has been reached.
Troubleshooting
Trigger is not firing
- Make sure the trigger is enabled (toggle is on) for the macro or record screen.
- For macro triggers, make sure the macro is activated (toggle switch on the macro row is on).
- Check the Controller Test screen to verify the app is receiving input from your controller.
- If a stick zone trigger is not firing, check the enable/disable stick settings, deadzone, clamp, and invert settings for each stick.
- If an analog trigger (L2/R2) trigger is not firing, check the deadzone and clamp settings for each trigger.
- Check for any button mappings that may be configured in the Settings — mapped buttons will trigger as the remapped output, not the physical button pressed.
Import fails
- The file must be a valid JSON file exported by AdaptivePlay PX. Files from other apps or platforms are not compatible.
- If creating or editing a file manually, try exporting a macro with various input types first to get an idea of the JSON syntax. Exported files include a guide at the top that outlines all valid keys, values, and format specifications.
Recorded macro has missing inputs
- Check the Record Options (gear icon on the Record Screen). Input types like sticks, triggers, or D-Pad may be filtered out if their recording filter is disabled.
- If sticks are not recording correctly, check the enable/disable stick settings, deadzone, clamp, and invert settings for each stick.
- If triggers are not recording correctly, check the deadzone and clamp settings for each trigger.
- Check for any button mappings that may be configured in the Settings — mapped buttons will record as the remapped output, not the physical button pressed.
- Check the mute trigger in General Settings. If enabled and passthrough is disabled for the trigger input, that input will be blocked globally on all screens.