I’m using a Wacom Intuos PTH-651 and have implemented custom ExpressKey handling via analyzeDeviceInput to map HID reports to BTT triggers. The parsing logic works correctly (I’m decoding key states from specific bytes and triggering actions accordingly).
However, I’m running into performance issues with pen input. It appears that analyzeDeviceInput is invoked for all HID reports, including high-frequency pen data (position, pressure, etc.), which leads to noticeable lag while drawing.
I’ve already implemented an early exit:
if (reportID !== 3) return;
(where reportID 3 corresponds to ExpressKeys), but this doesn’t resolve the issue. While the logic is skipped, the function still gets called for every incoming report, which seems to introduce overhead.
My questions:
-
Is there a way to restrict
analyzeDeviceInputto specific report IDs so it is not invoked for pen input at all? -
Alternatively, is there any configuration in BTT to filter HID reports at a lower level before they reach the JS handler?
-
Or is this behavior expected, meaning all reports are always routed through the script?
Any guidance on reducing this overhead or isolating ExpressKey handling from pen input would be greatly appreciated.

