Home/FAQ
Help Center

Frequently Asked
Questions

Everything you need to know about Gamepad Viewer — from setting up your first OBS overlay to building custom skins, editing CSS parameters, and getting the most out of every feature. Can't find what you're looking for? Use the contact form to send us your question directly.

24 Questions Answered
6 Categories
100% Free Tool
What is Gamepad Viewer?Basics & overview
How do I add it to OBS?Setup & streaming
How do I make a custom skin?Skins & customization
Can I use editcss= to modify skins?CSS & URL parameters
Is Gamepad Viewer secure and free?Privacy & cost
General Questions 6 Questions
01 What exactly is Gamepad Viewer?

Gamepad Viewer is a web-based tool for visualizing gamepad input in real time. It reads data from any connected controller — Xbox, PlayStation, Switch Pro, or any HID-compatible gamepad — and displays every button press, analog stick movement, and trigger pressure on screen as it happens.

Think of it as a live window into exactly what your hands are doing on the controller. Streamers use it as an on-screen overlay so their audience can follow every input during gameplay. Speedrunners use it to verify clean execution on precise inputs. Competitive players use it before tournaments to confirm all hardware is working correctly.

The entire tool runs inside your browser using the W3C Gamepad API — no downloads, no installs, no plugins required. Just connect your controller and open the page.

Gamepad Viewer also includes a full hardware diagnostic suite — stick drift detection, deadzone calibration, dual-motor rumble testing, polling rate monitoring, and exportable session logs — making it useful well beyond streaming.

02 Is Gamepad Viewer really free to use?

Yes — completely and permanently free. There is no paywall, no premium tier, no credits system, and no feature gating. Every capability including drift detection, deadzone calibration, rumble testing, custom skins, session log export, and OBS overlay generation is available from the moment you open the page.

There are also zero advertisements anywhere on the site. No banners, no popups, no sponsored content. No account is required and no email address is ever collected. You open the page, connect your controller, and everything works.

03 Is my controller data sent to any server?

No. All processing happens entirely in your browser. Gamepad Viewer reads your controller input through the W3C Gamepad API, which operates locally on your device. No button press, stick position, or trigger value is ever transmitted to any server — not ours, not anyone else's.

Even the session log export is generated and downloaded entirely on your own device. The file never passes through any external service. Your input data is private by design, not by policy.

04 Do I need to install anything to use Gamepad Viewer?

Nothing at all. No browser extension, no driver, no desktop app, no plugin. Gamepad Viewer uses the W3C Gamepad API that is built into every modern browser by default — Chrome, Edge, Firefox, and Safari 16 and newer all support it natively.

Connect your controller via USB or pair it via Bluetooth in your system settings, open Gamepad Viewer in your browser, press any button on the controller, and the tool detects and displays it immediately.

05 Does Gamepad Viewer work on mobile devices?

Yes. The interface is fully responsive and works on phones and tablets. Pair a Bluetooth controller through your device settings first, then open Gamepad Viewer in your mobile browser. Chrome and Edge on Android both support the Gamepad API fully. Safari on iOS 16 and newer also supports it. Firefox on Android has partial support.

This makes Gamepad Viewer useful as a quick pre-match controller check at tournaments or LAN events where you may not have access to a desktop setup.

06 Who uses Gamepad Viewer and why?

Gamepad Viewer is used across a wide range of scenarios by different types of players and creators:

Streamers and YouTubers use it as an on-screen controller overlay so their audience can see every button press and stick movement during gameplay — particularly popular for speedrunning, fighting game, and platformer content.

Competitive players and tournament entrants run a pre-match diagnostic to verify that all buttons, sticks, and triggers register correctly before a live event. A faulty controller found before the match is far better than one found during it.

Anyone returning a controller under warranty uses the session log export as documented evidence of the fault — a timestamped record of drift, dead inputs, or trigger failures is much more persuasive to manufacturer support than a description alone.

Setup & OBS Streaming 5 Questions
07 How do I set this up to record or stream?

There are two methods for getting Gamepad Viewer into OBS as a live overlay — Chroma Key window capture and CLR Browser Source. Both are covered in full detail on the Info Guide page, but here is a quick summary of each approach.

The Chroma Key method captures your Gamepad Viewer browser window directly in OBS using a Window Capture source, then applies a Color Key filter to remove the background, leaving just the controller skin floating transparently over your scene.

The CLR Browser method is cleaner. You generate a custom URL on the Generate URL page, then paste it directly into an OBS Browser Source. The background is fully transparent without any color keying required, and your settings are locked into the URL so it loads identically every session.

08 Can I use this as a transparent overlay in OBS without Chroma Key?

Yes. When you use the CLR Browser Source method, the background is already fully transparent — no color keying is needed. You generate your personalised URL at the Generate URL page, paste it into an OBS Browser Source, and the controller skin composites cleanly over your game footage with no extra filters required.

This is the preferred method for most streamers because it eliminates the color bleed issue that can occur with Chroma Key when the background color is close in hue to parts of the controller skin.

09 My controller is not being detected — what should I do?

The W3C Gamepad API only registers a controller after it receives its first input event. Press any button on your controller after the page has loaded — this wakes the device and triggers detection. If it still does not appear, work through the following checks:

For USB connections: confirm the cable supports data transfer and is not a charge-only cable. Some USB-C cables only carry power. Try a different port or cable if unsure.

For Bluetooth connections: verify the controller appears as paired and connected in your system settings (Bluetooth & devices on Windows, Bluetooth preferences on macOS) before opening the browser.

For browser compatibility: use Chrome or Edge for the broadest Gamepad API support. Firefox works for most controllers but has some limitations with analog trigger precision. Safari requires version 16 or newer.

10 What width and height should I set for the OBS Browser Source?

There is no single perfect value — it depends on your skin, your scene layout, and your stream resolution. The default starting point is Width 700 / Height 430. Work up or down in increments of 50 pixels from there until the controller skin fills the area you want without clipping or excess whitespace.

Once you find the right dimensions, note them down. If you regenerate your URL later or reinstall OBS, you can restore the exact sizing immediately without re-experimenting.

Recommended start: Width 700 / Height 430 Adjust in 50px steps until the skin fits your scene
11 Does the controller need to stay connected while streaming?

Yes. The Gamepad API reads live input from the connected device in real time. If the controller disconnects during a stream — battery dies, Bluetooth drops, cable unplugs — the overlay will stop updating and show the last known state. Reconnect and press any button to resume detection.

For important streams or recordings, using a wired USB connection eliminates the risk of Bluetooth dropout mid-session. It also typically provides a more consistent polling rate compared to wireless.

Skins & Customization 5 Questions
12 How do I make a custom skin?

Creating a custom skin from scratch requires basic knowledge of CSS and how it works. The skin system uses CSS to define the visual appearance of every element on the controller — button shapes, colors, positions, and pressed-state highlights are all controlled through CSS rules.

The best starting point is the official example skin file on GitHub Gist. It shows a fully working skin structure with comments explaining each section. Study how the existing buttons and axes are defined, then adapt the values to suit your own design.

A few important points to keep in mind when building a custom skin:

Check the example file regularly. As Gamepad Viewer is updated, the skin format sometimes changes to support new features. The example file is kept up to date with each site update, so checking it periodically ensures your skin stays compatible.

Test inputs live. Open the viewer with your custom skin loaded while pressing buttons to verify each CSS state triggers correctly. The pressed state for each button is applied via a class name change in the DOM.

13 Can I edit an existing skin instead of making one from scratch?

Yes — this is actually the recommended approach for most users. You can use the editcss= URL parameter to point to a correctly formatted external CSS file, which will apply your style changes on top of the currently selected built-in skin without replacing it entirely.

This approach lets you change colors, swap button shapes, adjust sizing, or rebrand an existing skin to match your stream identity, all without starting from zero. The CSS file you write only needs to contain the properties you want to override — everything else falls through to the default skin styles.

There is a small example edit file on GitHub Gist that demonstrates what can be done with this approach:

?skin=xbox&editcss=https://yoursite.com/mycustom.css

The CSS file must be hosted at a publicly accessible URL. GitHub Gist, GitHub Pages, or any static file host will work. The file must also be served with the correct CORS headers to allow cross-origin loading.

14 Which built-in skins are available?

Gamepad Viewer ships with a growing library of built-in skins covering all major controller families. Current skins include:

Xbox family: Xbox 360, Xbox One, Xbox Series X|S

PlayStation family: DualShock 4 (PS4), DualSense (PS5)

Nintendo: Switch Pro Controller, Joy-Con pair

Other: Generic HID layout for non-branded controllers

The skin library is updated as new controllers gain mainstream adoption. The Xbox and DualSense skins auto-detect based on the controller ID reported by the Gamepad API, so the correct label scheme switches automatically when you connect a PlayStation or Xbox controller.

15 How do I share a custom skin with others?

Use the Generate URL page to encode your skin settings into a shareable link. The generated URL contains all your configuration — skin selection, scale, input delay, and if you are using an edit CSS file, the URL to that file is also included as a parameter.

Anyone you share the link with can open it directly in their browser and see the exact same overlay layout. They can also paste it into OBS Browser Source to use your skin as their own overlay without any manual configuration.

For custom CSS skins hosted on GitHub Gist, share the Gist URL along with your generated viewer URL so others can inspect and copy your CSS file if they want to adapt it further.

16 Can I use a custom background image in my skin?

Yes. Custom skins support background images as the controller body layer. You reference the image using a standard CSS background-image property in the skin CSS targeting the controller body element. Host the image at a publicly accessible URL and reference it in your CSS file.

For the cleanest result, use a PNG with a transparent background so the controller body shape shows cleanly without a rectangular cutout visible through the overlay. SVG format is also supported and scales cleanly at any overlay size.

CSS & URL Parameters 4 Questions
17 What is the editcss= URL parameter and how does it work?

The editcss= parameter tells Gamepad Viewer to load an external CSS file and apply it on top of the currently selected skin. This gives you the ability to override any visual property of any built-in skin without needing to build a full skin from scratch.

You append the parameter to the Gamepad Viewer URL with your CSS file's direct URL as the value:

https://gpadviewer.com/?skin=xbox&editcss=https://gist.github.com/youruser/yourfile.css

The CSS file is fetched and injected into the page as a stylesheet. Any CSS selector that matches elements in the skin will override the default styles. This approach is ideal for rebranding a skin's colors, changing button highlight colors, or repositioning elements without touching the base skin logic.

Your CSS file must be hosted at a URL that allows cross-origin requests. GitHub Gist raw URLs work well for this. Check the small example edit file on GitHub Gist to see what the file structure should look like before writing your own.

18 What other URL parameters does Gamepad Viewer support?

Several URL parameters let you configure the overlay directly without opening the settings UI. The most commonly used ones are:

skin= — Sets the active skin by name (xbox, ps4, switch, etc.) scale= — Sets the overlay scale as a decimal (e.g. scale=0.75) delay= — Input delay in milliseconds (e.g. delay=100) editcss= — URL to an external CSS file to overlay on the skin p= — Gamepad index if multiple controllers are connected

All parameters can be combined in a single URL and the Generate URL tool will build the correct string for you automatically based on your settings. Using the tool avoids typos in the parameter names.

19 My editcss= file is not loading — what could be wrong?

The most common cause is a CORS (Cross-Origin Resource Sharing) issue. When Gamepad Viewer tries to fetch your CSS file from a different domain, the server hosting that file must include the correct CORS response header (Access-Control-Allow-Origin: *) to permit cross-origin loading.

GitHub Gist raw URLs include this header by default, which is why they are the recommended hosting option. If you are using a custom domain or CDN, verify that CORS is configured correctly for the URL you are referencing.

Other common causes include a typo in the URL value, the file not being publicly accessible (private repository, login-gated URL), or the CSS file containing a syntax error that causes silent failure.

20 Can I change button highlight colors without writing full CSS?

For color changes, the minimal CSS needed is actually quite short. Each button pressed state is controlled by a single CSS class applied to the button element. To change the highlight color for all buttons to a single custom color, you typically need only a few lines targeting those pressed-state classes:

.button.pressed { background-color: #your-color; } .trigger.pressed { background-color: #your-color; }

Host this in a plain .css file on GitHub Gist and reference it via editcss= in your URL. The Generate URL tool can then encode the full URL with your edit CSS path included.

Controller Compatibility 2 Questions
21 Which controllers are compatible with Gamepad Viewer?

Gamepad Viewer is compatible with any HID-compliant controller that the browser can read through the W3C Gamepad API. This covers all modern major controllers including:

Xbox: Xbox 360 (via USB), Xbox One, Xbox Series X|S — all via USB or Bluetooth

PlayStation: DualShock 4 (PS4) and DualSense (PS5) — via USB-C or Bluetooth

Nintendo: Switch Pro Controller — via USB or Bluetooth

Third-party: 8BitDo all models, Razer controllers, Hori controllers, PowerA controllers, and any generic gamepad that exposes a standard HID interface

The Auto-detection feature reads the controller ID string from the Gamepad API and automatically switches to the correct skin and label scheme (Xbox or PlayStation) where the ID is recognised.

22 Can I use multiple controllers at once?

Yes. The W3C Gamepad API supports multiple connected controllers simultaneously and assigns each one an index starting from 0. You can use the p= URL parameter to specify which gamepad index the viewer should read from:

?p=0 — First connected controller (default) ?p=1 — Second connected controller ?p=2 — Third connected controller

For two-player streams where both controllers need to be visible, open two separate browser windows or tabs with p=0 and p=1 respectively, then add both as separate Browser Sources in OBS and position them independently in your scene.

Troubleshooting 2 Questions
23 What is stick drift and how does Gamepad Viewer detect it?

Stick drift is when an analog stick reports a non-zero position while you are not touching it. The potentiometer inside the stick module wears down over time, causing it to output a small but continuous value even at rest. In gameplay, this manifests as unwanted camera movement, character walking, or aim drift.

Gamepad Viewer detects drift by sampling the raw axis values from the Gamepad API before the deadzone is applied. This is important because a deadzone correction would hide the drift signal in the viewer just as it does in-game. When any raw axis value exceeds a tight at-rest threshold (approximately 0.04), the orange Drift Detected badge activates in the Stick Positions panel.

To use this feature: set your deadzone slider to zero, rest your hand completely away from the controller, and watch the stick position readout. Any non-zero value that appears without you touching the stick indicates drift.

24 Can I save my session log as evidence for a warranty claim?

Yes. Click the Export button in the Live Diagnostic Console to download a timestamped TXT file containing your device name, total press count, and a complete chronological record of every input event during the session.

This log is useful when filing a warranty or support claim with a controller manufacturer. A documented record showing specific inputs failing or drift values persisting across multiple test runs is far more persuasive to support teams than a written description. Some manufacturers specifically request diagnostic output as part of their claims process.

All log generation and downloading happens entirely on your device. The file is never uploaded to any server.

Search Questions
Find answers fast
Most Helpful
Top questions
Ask a Question
Can't find your answer?
Useful Links
Related pages
08 / Glossary

Key Terms Explained

A quick reference for the technical terms used throughout Gamepad Viewer and its documentation.

Gamepad API

Web Standard

The W3C Gamepad API is a browser interface that allows web pages to read input from connected game controllers. It is built into Chrome, Edge, Firefox, and Safari 16+. Gamepad Viewer uses this API to receive all button and axis data without any driver or plugin.

HID Controller

Hardware

HID stands for Human Interface Device — the USB standard that covers keyboards, mice, and most game controllers. Any controller that presents itself as an HID device to the operating system can be read by the browser Gamepad API without special drivers.

Stick Drift

Hardware Fault

Stick drift is when an analog stick reports a non-zero position while untouched. It is caused by wear in the potentiometer inside the stick module. In games it appears as unwanted camera movement or character walking. Gamepad Viewer detects it by reading raw axis values before the deadzone filter is applied.

Deadzone

Calibration

A deadzone is a threshold around the center position of an analog stick within which all input values are treated as zero. It compensates for the small natural imprecision and wear of the stick mechanism. Gamepad Viewer lets you tune this from 0.00 to 0.50 with a live slider.

CLR Browser Source

OBS

A Browser Source in OBS Studio that loads a web page URL directly inside the streaming software. It renders the page in an embedded Chromium browser and supports full transparency, making it ideal for loading Gamepad Viewer as a clean overlay without needing a separate browser window open.

Chroma Key

OBS Filter

A video filter that removes a specific color from a captured source, making that color transparent in the final composite. In the context of Gamepad Viewer, it is used to remove the background color from a Window Capture source, leaving only the controller skin visible over the game footage.

editcss= Parameter

URL Param

A URL parameter supported by Gamepad Viewer that accepts the URL of an external CSS file. The file is fetched and injected into the page as a stylesheet, overriding any matching styles in the currently selected skin. Allows visual customization without building a full custom skin.

Polling Rate

Performance

Polling rate is how many times per second the system reads input from the controller. Measured in Hz. A higher polling rate means more frequent input reads and lower perceived input lag. Gamepad Viewer measures and displays the live polling rate of your connected controller in the Session panel.

Still Have a Question?

Use the contact form on this page or open the live viewer and test your controller directly. Most questions are answered the moment you start pressing buttons.