Measures the time gap between simultaneous button presses on a fighting game controller. Built for FGC players who want to understand their natural finger timing, detect stray inputs, and tune their NOBD sync window.
Two versions included:
- Python CLI — lightweight terminal tool, runs anywhere with Python + pygame
- Rust GUI — native desktop app with real-time stats, histograms, and button monitoring
- Pair detection — measures the gap (in ms) between two buttons pressed "at the same time"
- Stray press detection — flags solo button presses that didn't pair with anything (potential unwanted jabs during wavedashing)
- Bounce detection — catches switch bounce (re-press within 5ms of release)
- Pre-fire analysis — identifies pairs where the first button was solo for 1+ USB frames before the second arrived
- Off-time tracking — measures time between release and re-press for stray diagnosis
- OBD / macro detection — warns when >50% of presses have 0ms gap
- Recommended NOBD value — suggests a sync window based on your average finger gap
- Python 3.x
- pygame (
pip install pygame) - A USB gamepad/fightstick
pip install pygame
python test_finger_gap.py- Plug in your stick
- Run the script
- Press two buttons at the same time, over and over (like LP+HP for a dash)
- The script shows gaps in real time and flags strays/bounces
- Press Ctrl+C to see full summary stats
# 1 Btn 0+3 gap: 3.2ms (avg: 3.2ms min: 3.2ms max: 3.2ms)
# 2 Btn 0+3 gap: 2.8ms (avg: 3.0ms min: 2.8ms max: 3.2ms)
>>> STRAY: Btn 3 solo for 52.1ms (no pair arrived) [off-time: 89.3ms]
# 3 Btn 0+3 gap: 4.1ms (avg: 3.4ms min: 2.8ms max: 4.1ms)
!! BOUNCE: Btn 0 re-pressed after 2.3ms off
Summary at the end includes finger gap stats, distribution histogram, pre-fire analysis, stray breakdown by button/reason, and off-time analysis.
- Rust toolchain (install from rustup.rs)
- A USB gamepad/fightstick
cd rust
cargo build --release
./target/release/finger-gap-tester # or .exe on WindowsGap Tester — press two buttons simultaneously to measure your finger gap:
- Live stats: pairs, average, median, fastest, slowest
- Stray count + stray rate percentage
- Bounce count, pre-fire count
- Distribution histogram
- Recommended NOBD value
- Event log with color-coded strays (red) and bounces (orange)
Button Monitor — per-button diagnostics:
- Active button indicators (light up when held)
- Stats table: press count, hold duration, repress gap
- Full event log with timing details
NOBD (No OBD) is a firmware-level sync window for GP2040-CE controllers. It groups near-simultaneous button presses so they arrive on the same USB frame — giving you reliable dashes, throw techs, and multi-button inputs without OBD macros.
This tester helps you find your natural finger gap so you can set the sync window to the right value.
MIT