{"id":20775044,"url":"https://github.com/qdot/buttpcap","last_synced_at":"2026-01-24T17:33:59.891Z","repository":{"id":66557564,"uuid":"464019147","full_name":"qdot/buttpcap","owner":"qdot","description":"USBPcap + XInput + Buttplug = Oh No","archived":false,"fork":false,"pushed_at":"2022-03-03T18:13:39.000Z","size":32,"stargazers_count":27,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-30T15:47:26.381Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qdot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-27T02:38:45.000Z","updated_at":"2025-04-26T13:30:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"027b7b2e-cf2c-417f-aae6-2cf3eee117b8","html_url":"https://github.com/qdot/buttpcap","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/qdot/buttpcap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fbuttpcap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fbuttpcap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fbuttpcap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fbuttpcap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qdot","download_url":"https://codeload.github.com/qdot/buttpcap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fbuttpcap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28732648,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T12:34:20.781Z","updated_at":"2026-01-24T17:33:59.874Z","avatar_url":"https://github.com/qdot.png","language":"Rust","funding_links":["https://www.patreon.com/qdot","https://www.github.com/sponsors/qdot"],"categories":[],"sub_categories":[],"readme":"# ButtPCap\n\n[![Patreon donate button](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/qdot)\n[![Github donate button](https://img.shields.io/badge/github-donate-ff69b4.svg)](https://www.github.com/sponsors/qdot)\n[![Discord](https://img.shields.io/discord/353303527587708932.svg?logo=discord)](https://discord.buttplug.io)\n\n[![Twitter](https://img.shields.io/twitter/follow/buttplugio.svg?style=social\u0026logo=twitter)](https://twitter.com/buttplugio)\n[![Twitter](https://img.shields.io/twitter/follow/qdot.svg?style=social\u0026logo=twitter)](https://twitter.com/qdot)\n\n[![Youtube: Buttpluggin' With qDot](https://img.shields.io/youtube/channel/subscribers/UCKLmntfj3NmM2E3_LB3qs-w?label=Buttpluggin%27%20With%20qDot\u0026style=social)](https://youtube.buttplug.io)\n[![Youtube: Poor Life Choices](https://img.shields.io/youtube/channel/subscribers/UCEOH7Ne1LflFosQTpzM0ZrA?label=Poor%20Life%20Choices\u0026style=social)](https://www.youtube.com/channel/UCEOH7Ne1LflFosQTpzM0ZrA)\n\n\nUsing [USBPcap](https://github.com/desowin/usbpcap/) to side-step anticheat in games, in order to\nreroute rumble packets to sex toys via [The Buttplug Sex Toy Control Library](https://buttplug.io).\n\n## BUTTPCAP IS NOT NEEDED FOR ELDEN RING\n\nWhile buttpcap was a neat stunt hack, it turns out that you can turn off EAC for Elden Ring by renaming the binaries, which will make the [Game Haptics Router](https://intiface.com/ghr) work with it. This method will turn off online access, but that's fine (see second warning section below).\n\n[See this twitter thread for more info.](https://twitter.com/buttplugio/status/1499444008644333572)\n\nIt is recommended that you use the GHR instead of this project if you want sex toy interaction with Elden Ring.\n\n## Demo Video\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.youtube.com/watch?v=KyMZBOQtmic\"\u003e\u003cimg src=\"https://img.youtube.com/vi/KyMZBOQtmic/0.jpg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nThere's a [demo video on the Buttpluggin' With qDot Youtube Channel](https://www.youtube.com/watch?v=KyMZBOQtmic).\n\n## WARNING AGAINST USING THIS AT ALL\n\n**Do not actually use this.** This is a shitpost project I made to work around the fact that games using EasyAntiCheat and other anti cheat products don't work with the [Game Haptics Router](https://intiface.com/ghr).\n\nPlease go use the GHR and just act like this doesn't exist.\n\nThis project requires you to install a USB Packet Filter, which means EVERY SINGLE THING that goes over your USB bus, including keystrokes from your keyboard, can be picked up by any program with admin privileges.\n\nI cannot stress how fucking stupid this is. You do not want to backdoor yourself, even in order to backdoor yourself.\n\n**Do not use this.**\n\nBut if you really want to anyways, it's your funeral, here's the code.\n\n## WARNING IF YOU IGNORED THE LAST WARNING\n\nIf you do for some reason decide to ignore my multiple warnings and use this stupid, stupid thing, please do not use it in online games with random matchmaking or public lobbies. Only use it in private situations where all players are consenting.\n\n## Current Status\n\nThe code now works with the stock USBPcap driver from the binary install, as well as stock USBPcapCMD. We assume these are in `c:\\Program Files\\USBPcap`.\n\nThe system does automated lookup for the device index of an Xbox One Controller. This is *required* to be an actual Xbox One Controller or something that registers with that exact USB name. If you have other controllers you think would work with this, let me know in the issues on this repo and I can add a lookup array for checking. I don't get VID/PID currently so we're stuck with name testing.\n\n## How It Works\n\nFor information on how this as well as the GHR, CGHR, etc works, check out the [technical write-up on nonpolynomial.com](https://nonpolynomial.com/2022/02/27/919/)\n\n## Compiling and Installation\n\nHere's the compilation instructions, which you shouldn't use because see prior warnings.\n\nThis only works on Windows 10 Build 20H2 or newer (including Windows 11).\n\nTo compile:\n\n- Install the [Rust Compiler](https://rustup.rs)\n- Clone git repo\n- Run `cargo build` (or `cargo build --release` for release version)\n\nTo run:\n\n- Install [USBPcap](https://github.com/desowin/usbpcap/)\n  - Program expects this to live in default location on C: drives.\n- Run `cargo run` (or the exectuable will be in `target/debug` or `target/release`)\n\nRight now this *requires* an XBox One Controller. If you've got another XInput controller, and can confirm that it uses the same data format as an Xbox controller, you can change the name in the code.\n\n## License\n\nLicensed under BSD 3-Clause\n\n```\nCopyright (c) 2022, Kyle Machulis\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of buttplug nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqdot%2Fbuttpcap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqdot%2Fbuttpcap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqdot%2Fbuttpcap/lists"}