Skip to main content

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. Defaults to 0 (crisp, hard edges). Raising it is most useful when you scale the overlay down to a smaller size: at reduced scale it acts like anti-aliasing, smoothing edges that would otherwise look jagged.
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

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.4.2.tar.gz (51.8 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.4.2-py3-none-any.whl (58.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gamepad_overlay-1.4.2.tar.gz
  • Upload date:
  • Size: 51.8 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.4.2.tar.gz
Algorithm Hash digest
SHA256 2105797200b137fddf74cd821de767fc723bf9672ee6ed8282b23539989ce0b9
MD5 829c472b6c4124a834f766aa27f19ce6
BLAKE2b-256 c7cecc6df639d50e57d4364a6fc715f9e3209273cea5b05d5d5689e8977a2c34

See more details on using hashes here.

Provenance

The following attestation bundles were made for gamepad_overlay-1.4.2.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.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for gamepad_overlay-1.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4383bb50b716249cdaa4a4565f5f0491d6162e54ed0d2e795456aec3e3baae86
MD5 72a2baa2a119a1256bfec4c3a2207f0a
BLAKE2b-256 e620d6fb9ed2da7481a3bd06f5bccce7565e3d73b2145264d65f97fa922c166e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gamepad_overlay-1.4.2-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.

Release history Release notifications | RSS feed

This release

1.4.2 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page