<div align="center">
<img src="https://raw.githubusercontent.com/WyvernIXTL/gamepadla-plus/e17852e16a02d095f564ba0caf6589466f7004e5/icon/gamepadla-plus-icon-round-white.svg" alt="Gamepadla+ Icon" width="200"/>
# Gamepadla+
**Gamepad Polling Rate and Latency Testing Tool (CLI & GUI)**
[](https://pypi.org/project/gamepadla-plus/)
[](https://github.com/WyvernIXTL/gamepadla-plus/blob/main/LICENSE)
</div>
Gamepadla+ is a tool designed to help you measure the polling rate and synthetic latency of your gamepad.
It provides accurate data on your controller’s performance, which can be valuable for gamers, developers, and anyone interested in input accuracy.
* Supports DInput and XInput protocols
* Available as both CLI and GUI for flexibility
* Offers detailed metrics, including polling rate and latency values
Gamepadla+ is a simple, versatile solution for testing and understanding gamepad response times.

[](https://asciinema.org/a/686853)
## Installation
### [`uv`](https://github.com/astral-sh/uv)
```
uv tool install gamepadla-plus
```
### [`pipx`](https://github.com/pypa/pipx)
```
pipx install gamepadla-plus
```
### `pip`
```
pip install gamepadla-plus
```
### Prebuild (Windows)
An installer and a portable release for Windows can be found on the [Release Page](https://github.com/WyvernIXTL/gamepadla-plus/releases).
## Usage (GUI)
1. Execute the program `gamepadla` without any arguments.
2. If you haven't connected any controller do it now and click `Refresh`.
3. Click `Test` and rotate the stick you chose slowly at the edge.
4. Optionally save the result to a JSON file or upload the result to <gamepadla.com>.
## Usage (CLI)
```
# gamepadla.exe --help
Usage: gamepadla [OPTIONS] COMMAND [ARGS]...
Gamepad latency and polling rate tester.
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list List controller id's. │
│ test Test controller with id. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
```
### Getting Started
1. List all controllers connected with:
```
gamepadla list
```
```
# gamepadla list
Found 1 controllers
0. Xbox 360 Controller
```
2. Test the controller with the id from step one (`test` defaults to id 0):
```
gamepadla test 0
```
equals here
```
gamepadla test
```
```
# gamepadla test
100%|████████████████████████████████████████████████████████████ | 01.00 ms
Parameter Value
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Gamepad mode Xbox 360 Controller
Operating System Windows
Polling Rate Max. 1000 Hz
Polling Rate Avg. 964.36 Hz
Stability 96.44%
Minimal latency 0.51 ms
Average latency 1.04 ms
Maximum latency 2.0 ms
Jitter 0.16 ms
```
### Options
#### Test Right Stick
```
gamepadla test --stick right
```
#### Write Result to JSON File
```
gamepadla test --out data.json
```
### Upload Result to <gamepadla.com>
```
gamepadla test --upload
```
## Disclaimer
Gamepadla measures the delay between successive changes in the position of the analog stick on the gamepad, rather than the traditional input latency, which measures the time between pressing a button on the gamepad and a response in a program or game.
This method of measurement can be affected by various factors, including the quality of the gamepad, the speed of the computer's processor, the speed of event processing in the Pygame library, and so on.
Therefore, although Gamepadla can give a general idea of the "response" of a gamepad, it cannot accurately measure input latency in the traditional sense. The results obtained from Gamepadla should be used as a guide, not as an exact measurement of input latency.
## Contributors
* [John Punch](https://www.reddit.com/user/JohnnyPunch/)
* [Adam McKellar](https://github.com/WyvernIXTL)
## Notable Mentions
*Gamepadla+ or gamepadla-plus is a hard fork of [Gamepadla](https://github.com/cakama3a/Polling/tree/71a53424d4faad0edc90577c149f543696a4b947).*
The testing is based on the method of Christian P.: <https://github.com/chrizonix/XInputTest>.
## License
Licensed under MIT.
## Contributing
Please have a look at [`CONTRIBUTING.md`](./CONTRIBUTING.md).
Raw data
{
"_id": null,
"home_page": null,
"name": "gamepadla-plus",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "Adam McKellar <dev@mckellar.eu>",
"keywords": "DInput, XInput, controller, controller-latency, controller-utilities, gamepad, gamepad-performance, gamepad-testing, gaming-performance, gaming-tools, gaming-utilities, input-lag, input-polling, input-response, input-testing, latency-measurement, latency-tester, polling-rate, real-time-input, windows-gaming",
"author": "John Punch",
"author_email": "Adam McKellar <dev@mckellar.eu>",
"download_url": "https://files.pythonhosted.org/packages/24/45/b4325e1b2fa21c157d4200d65bae9d395d76e544d9408cb29533e586dcd7/gamepadla_plus-1.7.1.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/WyvernIXTL/gamepadla-plus/e17852e16a02d095f564ba0caf6589466f7004e5/icon/gamepadla-plus-icon-round-white.svg\" alt=\"Gamepadla+ Icon\" width=\"200\"/>\n\n\n# Gamepadla+\n\n**Gamepad Polling Rate and Latency Testing Tool (CLI & GUI)**\n\n[](https://pypi.org/project/gamepadla-plus/)\n[](https://github.com/WyvernIXTL/gamepadla-plus/blob/main/LICENSE)\n\n</div>\n\nGamepadla+ is a tool designed to help you measure the polling rate and synthetic latency of your gamepad. \nIt provides accurate data on your controller\u2019s performance, which can be valuable for gamers, developers, and anyone interested in input accuracy.\n\n* Supports DInput and XInput protocols\n* Available as both CLI and GUI for flexibility\n* Offers detailed metrics, including polling rate and latency values\n\nGamepadla+ is a simple, versatile solution for testing and understanding gamepad response times.\n\n\n\n\n[](https://asciinema.org/a/686853)\n\n\n## Installation\n\n### [`uv`](https://github.com/astral-sh/uv)\n\n```\nuv tool install gamepadla-plus\n```\n\n### [`pipx`](https://github.com/pypa/pipx)\n\n```\npipx install gamepadla-plus\n```\n\n### `pip`\n\n```\npip install gamepadla-plus\n```\n\n### Prebuild (Windows)\n\nAn installer and a portable release for Windows can be found on the [Release Page](https://github.com/WyvernIXTL/gamepadla-plus/releases).\n\n\n## Usage (GUI)\n\n1. Execute the program `gamepadla` without any arguments.\n2. If you haven't connected any controller do it now and click `Refresh`.\n3. Click `Test` and rotate the stick you chose slowly at the edge.\n4. Optionally save the result to a JSON file or upload the result to <gamepadla.com>.\n\n\n## Usage (CLI)\n\n```\n# gamepadla.exe --help\n\n Usage: gamepadla [OPTIONS] COMMAND [ARGS]...\n\n Gamepad latency and polling rate tester.\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --install-completion Install completion for the current shell. \u2502\n\u2502 --show-completion Show completion for the current shell, to copy it or customize the installation. \u2502\n\u2502 --help Show this message and exit. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Commands \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 list List controller id's. \u2502\n\u2502 test Test controller with id. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\n### Getting Started\n\n1. List all controllers connected with:\n```\ngamepadla list\n```\n```\n# gamepadla list\nFound 1 controllers\n0. Xbox 360 Controller\n```\n\n2. Test the controller with the id from step one (`test` defaults to id 0):\n```\ngamepadla test 0\n```\nequals here\n```\ngamepadla test\n```\n```\n# gamepadla test\n100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 01.00 ms\n\n\n Parameter Value\n \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n Gamepad mode Xbox 360 Controller\n Operating System Windows\n Polling Rate Max. 1000 Hz\n Polling Rate Avg. 964.36 Hz\n Stability 96.44%\n\n Minimal latency 0.51 ms\n Average latency 1.04 ms\n Maximum latency 2.0 ms\n Jitter 0.16 ms\n\n```\n\n### Options\n\n#### Test Right Stick\n\n```\ngamepadla test --stick right\n```\n\n#### Write Result to JSON File\n\n```\ngamepadla test --out data.json\n```\n\n### Upload Result to <gamepadla.com>\n\n```\ngamepadla test --upload\n```\n\n\n## Disclaimer\n\nGamepadla measures the delay between successive changes in the position of the analog stick on the gamepad, rather than the traditional input latency, which measures the time between pressing a button on the gamepad and a response in a program or game. \nThis method of measurement can be affected by various factors, including the quality of the gamepad, the speed of the computer's processor, the speed of event processing in the Pygame library, and so on. \nTherefore, although Gamepadla can give a general idea of the \"response\" of a gamepad, it cannot accurately measure input latency in the traditional sense. The results obtained from Gamepadla should be used as a guide, not as an exact measurement of input latency.\n\n\n## Contributors\n\n* [John Punch](https://www.reddit.com/user/JohnnyPunch/)\n* [Adam McKellar](https://github.com/WyvernIXTL)\n\n\n## Notable Mentions\n\n*Gamepadla+ or gamepadla-plus is a hard fork of [Gamepadla](https://github.com/cakama3a/Polling/tree/71a53424d4faad0edc90577c149f543696a4b947).*\n\nThe testing is based on the method of Christian P.: <https://github.com/chrizonix/XInputTest>.\n\n\n## License\n\nLicensed under MIT.\n\n\n## Contributing\n\nPlease have a look at [`CONTRIBUTING.md`](./CONTRIBUTING.md).\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Gamepad Polling Rate and Latency Testing Tool (CLI & GUI)",
"version": "1.7.1",
"project_urls": {
"Issues": "https://github.com/WyvernIXTL/gamepadla-plus/issues",
"Repository": "https://github.com/WyvernIXTL/gamepadla-plus"
},
"split_keywords": [
"dinput",
" xinput",
" controller",
" controller-latency",
" controller-utilities",
" gamepad",
" gamepad-performance",
" gamepad-testing",
" gaming-performance",
" gaming-tools",
" gaming-utilities",
" input-lag",
" input-polling",
" input-response",
" input-testing",
" latency-measurement",
" latency-tester",
" polling-rate",
" real-time-input",
" windows-gaming"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d652a83063c202ad2ae4273f92b6bef0e0f5cd42e2d90460c5c099d74309916b",
"md5": "6487bec5526d5f2a70af706b1968833b",
"sha256": "c55c67f8faebdda852be423ad10ccb7610f4ca7d719f768ddbc1921d6e184a0b"
},
"downloads": -1,
"filename": "gamepadla_plus-1.7.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6487bec5526d5f2a70af706b1968833b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 13136,
"upload_time": "2024-11-07T18:58:20",
"upload_time_iso_8601": "2024-11-07T18:58:20.726090Z",
"url": "https://files.pythonhosted.org/packages/d6/52/a83063c202ad2ae4273f92b6bef0e0f5cd42e2d90460c5c099d74309916b/gamepadla_plus-1.7.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2445b4325e1b2fa21c157d4200d65bae9d395d76e544d9408cb29533e586dcd7",
"md5": "e8ffc565f2a851ba0fe1a9c3c9efb952",
"sha256": "53a5b5edec06636f02b118be9fe0c1091262695f43abbf3abb67d62006a091b8"
},
"downloads": -1,
"filename": "gamepadla_plus-1.7.1.tar.gz",
"has_sig": false,
"md5_digest": "e8ffc565f2a851ba0fe1a9c3c9efb952",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 429964,
"upload_time": "2024-11-07T18:58:22",
"upload_time_iso_8601": "2024-11-07T18:58:22.174036Z",
"url": "https://files.pythonhosted.org/packages/24/45/b4325e1b2fa21c157d4200d65bae9d395d76e544d9408cb29533e586dcd7/gamepadla_plus-1.7.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-07 18:58:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "WyvernIXTL",
"github_project": "gamepadla-plus",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "gamepadla-plus"
}