Skip to main content

Reads gamepad input and serves a local OBS overlay.

Project description

Gamepad Overlay

Shows your gamepad inputs as a visual overlay in OBS (or any tool that supports browser sources).

The app runs in your system tray, reads your gamepad, and serves an overlay page your streaming software can display. The overlay has a transparent background, so it sits cleanly on top of your gameplay.

What you need:

  • A gamepad.
  • OBS Studio, or any streaming/recording tool that supports a Browser Source.

Installation

Download the latest release for your platform from the Releases page and extract the archive. No installer needed — just run the executable inside.

Windows: gamepad-overlay.exe
Linux: gamepad-overlay

Python users

If you have uv or pipx installed, you can also run it directly:

uvx gamepad-overlay
pipx run gamepad-overlay

Getting Started

  1. Run the app. A window opens showing your connected gamepads, and a tray icon appears.
  2. Pick your gamepad. In the list, click the gamepad you want, then click Select Gamepad. If you only have one gamepad, or you don't care which one is used, click Any Gamepad instead.
  3. Open OBS and add a Browser Source.
  4. Get the URL. In the gamepad overlay window, click Overlay URL..., then click Copy to copy the address. Paste it into your OBS browser source.
  5. Done. The overlay will display your gamepad inputs in your stream or recording.

Gamepad Selection

The main window lists all connected gamepads. Click one, decide how it should be matched using the Criteria checkboxes, then click Select Gamepad. To go back to using whatever gamepad is connected, click Any Gamepad.

The Criteria checkboxes control how your gamepad is recognized the next time it's connected:

  • Identity — match by hardware ID (vendor/product, or GUID). The gamepad is recognized no matter which USB port it's plugged into.
  • Physical port — match by the specific USB port. Useful when you always want whichever gamepad is plugged into a particular port.
  • Tick both to require the same gamepad and the same port.

The gamepad currently in use is marked with a ★ in the list, and the Target: line at the top of the window always shows what the overlay is set to use.


Overlay URL Window

Open this from the main window with the Overlay URL... button. It shows the full URL to paste into OBS and lets you configure the overlay appearance. Use Copy to copy the URL, or Launch in Browser to preview the overlay.

Overlay Settings

Setting Description
Source websocket (normal use) or demo (animated preview that plays without a gamepad, handy for testing)
Layout Gamepad shape — xbox, xbox-digital-triggers, or snes
Theme Color scheme — Auto (follows the layout's default), xbox, or snes
Background The overlay background. Leave blank to keep it transparent (recommended for streaming). Accepts any CSS color, e.g. green, #00ff00, or transparent.
Blur Softens the overlay's edges (anti-aliasing). Set to 0 for crisp, hard edges.
Digital Threshold % How far an analog trigger must be pressed before it counts as "pressed." Default is 20%.

Changes to overlay settings take effect immediately and are saved automatically.

Server Settings

Setting Description
Server Port The port the local server listens on. Default is 8765. Change this if something else on your machine is using that port.

After changing the port, click Apply Server Settings. The server restarts on the new port and the URL updates to match. Update your OBS browser source with the new URL.

Reset to Defaults restores all overlay settings and the server port to their original values.


Layouts and Themes

Layouts control the shape and behavior of the gamepad display. Themes control colors and visual style. They are independent — any theme can be combined with any layout.

Built-in layouts:

  • xbox — standard Xbox gamepad with analog triggers
  • xbox-digital-triggers — Xbox gamepad with triggers shown as digital buttons
  • snes — SNES-style gamepad (no analog sticks or triggers)

Built-in themes:

  • xbox — dark Xbox color scheme
  • snes — SNES color scheme

Troubleshooting

The overlay isn't showing any input.
Make sure the app is running and the correct gamepad is selected. Check that the URL in your OBS browser source matches what the Overlay URL window shows.

The overlay won't connect to the server.
Try the URL with 127.0.0.1 instead of localhost. Some systems resolve these differently.

I want to test the overlay without a gamepad.
Set Source to demo in the Overlay URL window. The overlay will cycle through animations so you can preview it.

Something else is using port 8765.
Open the Overlay URL window, go to Server Settings, change the port, and click Apply Server Settings. Update your OBS browser source with the new URL.


OBS Browser Source Tips

  • Set the browser source resolution to match the area you want the overlay to occupy (e.g. 1920×1080 for full screen, or a smaller size for a corner overlay).
  • The overlay scales to fill its browser source. Use OBS transform controls to position and resize it on your canvas.
  • Enable Shutdown source when not visible if you want the overlay to disconnect when the scene isn't active.

Advanced / CLI

Everything below is for advanced users. If you're just using the app normally, you can stop here.

The app can also be controlled from the command line.

List connected gamepads:

gamepad-overlay --list-gamepads

Select gamepad by name:

gamepad-overlay --gamepad-name "Xbox"

Select gamepad by GUID:

gamepad-overlay --gamepad-guid <guid>

Use any gamepad:

gamepad-overlay --any-gamepad

Set the server port:

gamepad-overlay --port 9000

Start with the window hidden:

gamepad-overlay --hide

Run without a system tray (headless):

gamepad-overlay --headless

Running from Source

Requires Python 3.12+ and uv.

uv sync
uv run gamepad-overlay

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gamepad_overlay-1.2.1.tar.gz (51.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gamepad_overlay-1.2.1-py3-none-any.whl (58.8 kB view details)

Uploaded Python 3

File details

Details for the file gamepad_overlay-1.2.1.tar.gz.

File metadata

  • Download URL: gamepad_overlay-1.2.1.tar.gz
  • Upload date:
  • Size: 51.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gamepad_overlay-1.2.1.tar.gz
Algorithm Hash digest
SHA256 c87957c46015b64b213c59fc7ff7c5ceee49be2ec9045dee37684022921c7471
MD5 6d82176b4740820267bbc6582895b55f
BLAKE2b-256 f3ca56cadf10937d3ad2d3b486cfef9431efa6fbfaad2c652cbb2e32632d22ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for gamepad_overlay-1.2.1.tar.gz:

Publisher: release.yml on sevaht/gamepad-overlay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gamepad_overlay-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: gamepad_overlay-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 58.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gamepad_overlay-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3c5b99b39068962bf8dc42538e6ad00b4f1d5ae8d8b8477b3754662385a6122f
MD5 37add1413d3ac9970ab1519c78e00c42
BLAKE2b-256 1a0002d55e5d381573940d769bac4450f6fbcacebd62e1fc195ab7b7bb3be459

See more details on using hashes here.

Provenance

The following attestation bundles were made for gamepad_overlay-1.2.1-py3-none-any.whl:

Publisher: release.yml on sevaht/gamepad-overlay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page