Detect button presses on Nothing Headphones (1) in real time on Windows, and map the voice assistant button to any keystroke you want.
The official Nothing X app lets you reassign the buttons to a handful of media actions — but it can't turn a button press into an arbitrary keyboard key. This tool can, which makes the voice assistant button usable for:
- Discord / TeamSpeak push-to-talk
- OBS scene or mute toggles
- Game keybinds and macros
- AutoHotkey triggers
- Accessibility shortcuts
- …anything that reacts to a key press
It works by sniffing the Bluetooth traffic between your PC and the headphones.
100% of the code in this repository was written by AI (Claude) — along with the Bluetooth reverse-engineering, the protocol decoding, and the debugging.
As with any code — AI-written or not — review it before you run it. It is plain-text PowerShell with no obfuscation and no network access, so it is straightforward to audit. Use at your own risk.
Nothing Headphones (1) talk to the host over Classic Bluetooth (BR/EDR). Different buttons use different standard profiles:
| Button | Protocol | What goes over the air |
|---|---|---|
| Voice assistant | HFP (Hands-Free Profile) over RFCOMM | the AT command AT+BVRA=1 / AT+BVRA=0 |
| Play / Pause / Next / Prev | AVRCP PASS THROUGH over L2CAP/AVCTP |
operation IDs 0x44, 0x4B, 0x4C, … |
| Volume | AVRCP EVENT_VOLUME_CHANGED notification |
the new absolute volume (0–127) |
The tool captures the USB traffic to your Bluetooth dongle with
USBPcap + Wireshark’s
tshark, then matches known byte signatures inside the L2CAP payloads:
Voice assistant : ...41 54 2b 42 56 52 41 3d 3X... ("AT+BVRA=X")
AVRCP button : ...11 0e 00 48 7c <op>... (AVCTP + PASS THROUGH)
Volume changed : ...11 0e 0d 48 00 00 19 58 31... (AVRCP volume notify)
When a voice-assistant event is seen, it injects the configured key via the
Win32 keybd_event API.
Note on the capture pipeline: newer
tsharkbuilds pass an--extcap-capture-filterargument that olderUSBPcapCMD.exebuilds reject. The tool sidesteps this by running twotsharkprocesses —tshark -w -(capture only, no dissection) piped intotshark -r -(dissection + display filter). The second process never touches extcap.
- Windows 10 / 11
- A USB Bluetooth dongle. This is required — most built-in laptop Bluetooth chips are not on the USB bus, so USBPcap can't see them. A cheap generic dongle (CSR, Realtek, etc.) works fine.
- Nothing Headphones (1) paired to that dongle.
- Wireshark installed, with the USBPcap component checked during installation (it is checked by default).
- Install Wireshark (keep the USBPcap option checked).
- Plug in your USB Bluetooth dongle and pair the headphones to it.
- Download this repository (green Code button → Download ZIP, then
extract) — or
git cloneit.
That's it. No build step.
Double-click tray.bat (or launch-hidden.vbs for a completely
flash-free start). A headphones icon appears in your system tray.
Click the icon for a menu:
- Change key… — set which key the voice-assistant button sends
- Pause — temporarily stop sending keystrokes
- Start with Windows — launch automatically at login (✓ when enabled)
- Exit
Your key choice is saved to %APPDATA%\NothingHeadphonesDetector\config.json
and restored on the next launch.
About "Start with Windows": capturing USB traffic requires administrator rights, so autostart is registered as a Scheduled Task that runs elevated — this means no UAC prompts at boot. Creating that task needs elevation, so you'll see one UAC prompt when you enable the toggle; every boot afterwards is silent. The task launches 30 seconds after login (once the desktop and USBPcap driver have settled) for reliability.
For debugging or a visible live log, use run.bat:
run.bat :: default key: F13
run.bat -Key A :: send "A"
run.bat -Key "Ctrl+Shift+F13" :: modifier combos
run.bat -Key "Alt+M"It prints every detected button event (voice, media, volume) as it happens.
F1–F24, A–Z, 0–9, Space, Enter, Tab, Esc, Backspace,
combined with modifiers Ctrl, Shift, Alt, Win using +.
Tip:
F13–F24are great defaults — Windows has them as real keys but almost no application uses them, so they won't clash with existing shortcuts.
The voice assistant button is a toggle — each physical tap flips an internal
state and sends a single event (AT+BVRA=1, then =0, then =1, …). The
headphones do not send a separate "released" event, so true push-to-talk
(hold-to-talk) isn't possible from the button alone.
This tool therefore sends one keystroke per tap, regardless of whether the
event was =1 or =0. Tap the headphone button once → one key press.
- USB Bluetooth dongle required — built-in Bluetooth radios are usually invisible to USBPcap.
- Verified on Nothing Headphones (1). Other Nothing models (Ear, Ear (a), etc.) likely use the same AVRCP/HFP commands but the byte signatures haven't been confirmed.
- Windows only. The capture method (USBPcap) and key injection
(
keybd_event) are Windows-specific. - The first launch of
run.bat/tray.batafter downloading may trigger a SmartScreen "Windows protected your PC" prompt — click More info → Run anyway once.
"tshark.exe not found" — install Wireshark, or pass the path explicitly:
run.bat -Tshark "D:\path\to\tshark.exe".
No events detected — make sure the headphones are connected to the USB
dongle (not the built-in adapter). If you have several USB controllers, force
the interface: run.bat -Interface "\\.\USBPcap2".
Capture pipe exits immediately — another capture (Wireshark itself, a stale
tshark) may be holding the interface. Close it and retry.
| File | Purpose |
|---|---|
tray.ps1 |
The tray application (UI, key mapping, autostart) |
tray.bat |
Launcher for the tray app |
launch-hidden.vbs |
Flash-free launcher (used by autostart; windowless start) |
detector.ps1 |
Command-line detector (live log of every button) |
run.bat |
Launcher for the command-line detector |
Useful directions if you want to extend it:
- Built-in Bluetooth support — capture via Windows ETW instead of USBPcap.
- Other Nothing models — confirm the byte signatures and add them.
- Linux / macOS ports — the protocol is the same; the capture and key-injection layers would need replacing.
All code written by AI (Claude) — see the AI disclosure section near the
top of this README. The Bluetooth protocol analysis — byte signatures, the
AVRCP/HFP command decoding, and the tshark/USBPcap workaround — was worked
out by capturing and decoding live traffic from real Nothing Headphones (1).
