A recognized controller or keyboard is not a playable game

AnyPS5 accepts SDL-mapped gamepads plus built-in keyboard and mouse bindings. The first recognized controller is used. Put anyps5-input.ini beside the generated executable, or set ANYPS5_INPUT_CONFIG. This page quotes upstream docs — it does not claim DualSense, XInput, or a title is fully working.

v0.1.3 · Content assembled 21 Oct 2026 from the v0.1.3 INPUT_MAPPING.md asset and current main docs. Not a host playtest.

Which mapping file applies

v0.1.3 ships INPUT_MAPPING.md as a release asset. Current main adds Screenshot (F12) and controller timelines. The keyboard defaults below match both. Open the mapping file that came with your zip before following main-only steps.

What the docs say works

  • SDL-mapped Xbox-style and PlayStation controllers use the standard PS button layout. Sticks and analog triggers are passed through. Controllers can connect or disconnect while the game is running. The first recognized controller is used.
  • Xbox-layout: A/B/X/Y map to Cross/Circle/Square/Triangle; LB/RB to L1/R1; LT/RT to analog L2/R2; Start to Options. D-pad and stick-click buttons are supported.
  • PlayStation controllers recognized by SDL: touchpad clicks and the positions of up to two fingers are forwarded. On other controllers, View (Back) presses the touchpad at its center.
  • Built-in keyboard and mouse bindings apply when no config file is present. Game-controller bindings stay automatic and are not remapped by keyboard or mouse overrides in anyps5-input.ini.
  • An invalid INI line reports the file and line number and stops input initialization. A missing ANYPS5_INPUT_CONFIG path is an error. With neither file, the built-in map is used.

DualSense — documented, not “fully working”

INPUT_MAPPING.md names PlayStation controllers recognized by SDL. It does not claim every DualSense feature on every host. Upstream libScePad reports a DualSense (touchpad 1920×1080) to every title, including when the host pad is something else. Light bar, touchpad, and trigger effects need SDL2 built with HIDAPI; sdl2-compat or HIDAPI-off builds do not provide them. Haptic PCM that no controller sound card plays — including a DualSense over Bluetooth — is approximated as motor rumble from per-channel RMS; that mapping is not measured against console hardware. Adaptive triggers, light bar, and full haptics on a given USB or Bluetooth host and release stay unverified here.

XInput on Windows

Windows controller detection (libSceVideoOut debt notes): SDL’s DirectInput joystick backend is disabled by default because enumeration can block forever on some vendor HID devices (issue #1042). XInput and HIDAPI controllers are detected; pads reachable only through DirectInput are not. SDL_DIRECTINPUT_ENABLED=1 restores them on hosts without that hang. APS5_NO_WGI turns off Windows.Gaming.Input; with it off, racing wheels, arcade or flight sticks, HID pads without HIDAPI, and Xbox One or Series trigger rumble reachable only through WGI are lost. This site has not re-tested those paths.

Unknown — do not assume

  • Whether a specific title’s DualSense adaptive triggers, light bar, or haptic effects work on the official zip.
  • Bluetooth DualSense beyond the documented RMS rumble fallback.
  • DirectInput-only pads unless you set SDL_DIRECTINPUT_ENABLED=1 and confirm the host does not hang.
  • More than one controller: only the first recognized pad is used.
  • Touchpad click support is not the same as a game reading finger coordinates for its own gestures.
  • Shake (held X) synthesizes motion every 50 ms. It does not verify a title’s sensor behavior.

A small keyboard configuration example

Save as anyps5-input.ini beside the generated executable. Action names are case-insensitive. The first line for an action replaces its built-in mapping; later lines add alternatives. Omitted actions keep defaults. Copy this from INPUT_MAPPING.md — do not invent action names.

Cross = KEY:F
Cross = KEY:Space
LeftStickLeft = KEY:J
LeftStickRight = KEY:L
LeftStickUp = KEY:I
LeftStickDown = KEY:K
Square = MOUSE:Left
R2 = MOUSE:Right
ToggleMouse = MOUSE:Middle

Controller bindings stay automatic. Change a few actions at a time: a malformed line stops input init and names the file and line.

Default keyboard bindings in v0.1.3 and current main

These rows match both the v0.1.3 attached mapping file and current main. Screenshot (F12) is documented on current main only.

ActionKeyboard / mouse
CrossReturn, Space
CircleC
TriangleI
SquareLeft mouse button
L1Q
R1E, Left Alt, Right Alt
L2R, Mouse button 4 (X1)
R2Right mouse button
L3Left Shift, Right Shift
R3Left Ctrl, Right Ctrl
OptionsEscape
Up / Right / Down / LeftArrow keys; wheel Up / Down
Left stickA, D, W, S
Right stickF, H, T, G
TouchLeft / TouchRightBackspace, Tab
ShakeX (held)
ToggleMouseMiddle mouse, F7
ToggleFullscreenF11

Test the actual action

Check movement, camera, confirm, cancel, and any game-specific touch action separately. If a menu does not advance, record the controller model, USB or Bluetooth, the action you tried, and whether the keyboard differs. Do not classify that as working gameplay.

Official zip versus current main

Screenshot (F12 saves the next displayed frame as PNG in anyps5-screenshots/ or ANYPS5_SCREENSHOTS) and timed pad timelines (APS5_PAD_INPUT_FILE, tools/pad_timeline.py) are documented on current main USAGE.md and INPUT_MAPPING.md. They are absent from the v0.1.3 attached mapping file. Timelines follow wall time and controller reads; they can miss events during loading and do not reproduce game state. Do not treat F12 or pad_timeline.py as supported by every release zip.

If input never starts

Confirm the two official files and the app / libs / app0 layout first — Windows error 193 or 126 is not an input-mapping problem. Then check the INI path and line reported on stderr. Next: the setup guide, then troubleshooting.

Setup: two files and folder layout · Troubleshooting: 193, 126, host limits

Original sources

Open official GitHub ReleasesWhich two files