Skip to the content
PCBKitNew board
2 layers71 × 24 mmHe input v2, the printed circuit board in 3D

He input v2

OPad-dev/OPad

A deterministic, ultra-low-latency mechanical keypad and live telemetry HUD designed for competitive osu!, osu!lazer, and rhythm games on Linux and Windows 10/11.

Size
71 × 24 mm
Copper layers
2
Thickness
1.6 mm
Parts
29
Nets
22
Pads
81
Tracks, vias
218, 47
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
19 Sep 2026
Updated
29 Oct 2026

Overview

He input v2 is an open-source printed circuit board by OPad-dev, from the OPad-dev/OPad repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 71 × 24 mm with 29 parts on 22 nets, routed with 218 tracks and 47 vias.

Its parts include 11 capacitors, 6 resistors, 4 ICs, 3 switches and 1 connector.

README

README.md

OPad

Low-Latency ESP32-S3 Rhythm Gaming Keypad & Telemetry Display

A deterministic, ultra-low-latency mechanical keypad and live telemetry HUD designed for competitive osu!, osu!lazer, and rhythm games on Linux and Windows 10/11.


⚡ Core Principle: Latency Always Wins

"If a feature measurably worsens keyboard latency or latency jitter, the feature is reduced, deferred, frozen during gameplay, or removed."

The keypad functions as a standalone 1000 Hz USB HID keyboard out of the box with zero host software running. Auxiliary features (LVGL telemetry, SQLite persistence, system tray, and tosu integration) are completely isolated from the keypress critical path.


🏗️ System Architecture

text
                      +-------------------+
                      |    osu!lazer      |
                      +---------+---------+
                                | (observes)
                                v
                      +-------------------+
                      |       tosu        |
                      +---------+---------+
                                | (WebSocket v2)
                                v
+--------------------+   +-------------------------+
|      opad-gui      |   |       opad-daemon       |
|     (Rust/iced)    |<->|         (Rust)          |
|  - System Tray     |IPC|  - State Machine        |
|  - Layout Designer |   |  - SQLite Storage       |
|  - Configuration   |   |  - Headless Service     |
|  - Diagnostics     |   |  - tosu & Device Owner  |
+--------------------+   +------------+------------+
                                      |
                           USB CDC    |    USB HID (1000 Hz)
                                      |
                                      v
                         +-------------------------+
                         |  ESP32-S3 Touch LCD 2   |

🔌 Hardware Target & Switch Wiring

Supported Hardware

  • Board: Waveshare ESP32-S3-Touch-LCD-2 (ESP32-S3, 16MB Flash, 8MB PSRAM, 2.0" ST7789 LCD)
  • Switches: Any two standard MX-compatible mechanical switches.

Switch Pinout (Header P2)

Standard MX mechanical switches have no polarity. Connect each switch between its designated GPIO and ground:

InputBoard Header & PinGPIOSwitch Connection
Key 1 (Default Z)Header P2, Pin 11GPIO 14Pin A -> Pin 11, Pin B -> GND (Pin 13)
Key 2 (Default X)Header P2, Pin 12GPIO 9Pin A -> Pin 12, Pin B -> GND (Pin 2)
GroundHeader P2, Pin 13 / Pin 2GNDGround Reference

Note: Pins 11, 12, and 13 are directly adjacent on Header P2 for simple breadboard/Dupont jumper wiring.

These are the defaults. Each key's pin can be changed in the app under Settings → Keys. The list only offers header pins that work with a switch to GND:

HeaderPins (GPIO)
P11 (GPIO 2), 2 (GPIO 4), 3 (GPIO 6), 4 (GPIO 16), 6 (GPIO 18), 7 (GPIO 21), 8 (GPIO 8), 9 (GPIO 7), 10 (GPIO 10)
P27 (GPIO 15), 8 (GPIO 13), 9 (GPIO 11), 10 (GPIO 12), 11 (GPIO 14), 12 (GPIO 9)

Left out: GPIO 19/20 (USB), GPIO 43/44 (UART0 console), GPIO 47/48 (touch and IMU I2C) and GPIO 17 (pulled down on the board). Most listed pins are also wired to the camera connector, so don't use them with a camera fitted.


🛠️ Building From Source

1. Prerequisites (Ubuntu / Debian)

bash
sudo apt update
sudo apt install -y build-essential pkg-config libasound2-dev libudev-dev \
    libx11-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev libdbus-1-dev

2. Desktop Software Suite (Rust)

bash
cd desktop
cargo build --release

The compiled binaries are produced in desktop/target/release/:

  • opad-daemon: Background service.
  • opad-gui: Graphical configuration, layout designer, and system tray.
  • opadctl: Command-line management tool.

3. Firmware Build (ESP-IDF v5.5.2)

bash
cd firmware
idf.py set-target esp32s3
idf.py build

⚡ Flashing the Firmware

Option A: Via opadctl (Recommended)

opadctl drives espflash directly and needs no shell script and no ESP-IDF toolchain. It asks the daemon to release the serial port first, reboots the pad into the ROM download bootloader hands-free, writes the image and reboots back into the app — on Linux and on Windows, with the app running:

bash
# Update the app image only (ota_0 at 0x20000)
opadctl flash firmware/build/opad-firmware.bin

# Recovery flash: bootloader + partition table + OTA data + app
opadctl flash --full firmware/build

It also works with no daemon running at all, which is the state a recovery flash usually happens in.

Option B: Via ESP-IDF

bash
cd firmware
idf.py -p /dev/ttyACM0 flash

If the pad will not enter download mode or has to be returned to stock, see Recovery, Reflashing & Unbinding.


🪟 Windows Setup & Installation

The pad needs none of this to work as a keyboard. Plug it into any Windows 10 or 11 machine and it types immediately: HID binds to the inbox hidclass.sys and the CDC port to the inbox usbser.sys. No .inf, no WinUSB, no Zadig, no install. The software below is for configuring it, the telemetry HUD and the lifetime counters.

  1. Download opad-setup-<version>.exe from the GitHub Releases page and run it.
  2. It installs the daemon, the GUI and opadctl, bundles tosu, and configures both to start at login. There is nothing else to do.

SmartScreen will warn you. The installer is not code-signed yet: OPad is applying to SignPath Foundation for free OSS signing, which requires the repository to be public first. Until then, Windows shows "Windows protected your PC" — choose More info → Run anyway. Check the download against SHA256SUMS on the release page if you would rather verify it than trust the dialog.

Uninstall from Settings → Apps. It removes everything it installed, including the two Run registry values, and asks before it touches your opad.db — so a reinstall keeps your lifetime counters unless you say otherwise.

To reset a pad completely, or hand it to someone else, see Recovery, Reflashing & Unbinding. There is no unpair button in the app, deliberately: the only unbind is a documented reflash, and it erases the pad's lifetime counters along with the owner record.


🚀 Linux Setup & Installation

Option A: Pre-built Packages (Recommended)

Pre-built packages are on the GitHub Releases page. The .deb and .rpm set up everything: the udev rule, the daemon's systemd user service, tray autostart, the bundled espflash, and the ptrace capability tosu needs to read osu!'s memory (see docs/troubleshooting.md §2).

Supported: every Ubuntu LTS and Debian release in support (Ubuntu 22.04, 24.04, 26.04; Debian 12, 13), RHEL / AlmaLinux / Rocky 9 and 10, current Fedora and Arch. The release packages, bundled tosu included, need glibc 2.28 or newer.

Debian / Ubuntu / Pop!_OS (.deb):
bash
sudo apt install ./opad_<version>_amd64.deb
# Or via dpkg:
sudo dpkg -i opad_<version>_amd64.deb
Fedora / RHEL / openSUSE (.rpm):
bash
sudo dnf install ./opad-<version>.x86_64.rpm
Standalone AppImage:
bash
chmod +x opad-x86_64.AppImage
./opad-x86_64.AppImage

The AppImage installs nothing system-wide. On first run it offers to install the udev rule (it asks for your password), or run ./opad-x86_64.AppImage install-udev yourself. It cannot give tosu the ptrace capability; opadctl setup and the Diagnostics page explain the alternative.

Arch Linux:

The repository's PKGBUILD builds from source (tosu runs on the system nodejs, so see troubleshooting §2 about ptrace):

bash
makepkg -si

Option B: Installing From Source

1. System-wide Install:
bash
make
sudo make install
2. User-local Install (~/.local):
bash
make
make install-user
systemctl --user daemon-reload
systemctl --user enable --now opad-daemon.service
3. Manual Udev Rules:

If not installing from package, allow non-root user access to USB CDC and ROM bootloader devices:

bash
sudo cp packaging/linux/udev/70-opad.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

💻 CLI Quick Reference (opadctl)

bash
# Check device, daemon, and tosu state
opadctl status

# Trigger safe reconciliation
opadctl sync

# Export portable JSON backup
opadctl export backup.json

# Import validated backup
opadctl import backup.json

# Flash firmware image directly over USB
opadctl flash firmware/build/opad-firmware.bin

# Recovery flash (bootloader, partition table, OTA data and app)
opadctl flash --full firmware/build

# Reboot the pad into the ROM download bootloader and leave it there
opadctl bootloader

# Stream real-time diagnostic logs
opadctl monitor

📄 Documentation


📦 Third-Party Software

OPad bundles or interacts with the following third-party software:

tosu

  • Project: tosu
  • Author: Mikhail Babynichev and the tosu contributors
  • License: GNU Lesser General Public License v3.0 (LGPL-3.0)
  • Redistribution Notice: See licenses/tosu/NOTICE
  • User Replacement Rights: Under the terms of LGPL-3.0, users are entitled to replace the bundled tosu binary with their own version. You can point the OPAD_TOSU_PATH (or legacy OSUPAD_TOSU_PATH) environment variable to a custom tosu executable, or configure an external path in the OPad desktop GUI (Settings → tosu).

⚖️ Trademark Disclaimer

OPad is an independent open-source hardware and software project. OPad is not affiliated with, endorsed by, or sponsored by ppy Pty Ltd or osu!. "osu!" is a registered trademark of ppy Pty Ltd.


📜 License

OPad is free and open source, software and hardware:

  • Software — the firmware, the desktop app (daemon, GUI, CLI), the protocol, the scripts and the documentation — is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later).
  • Hardware — everything in hardware/: the PCB designs, footprints and symbols, the enclosure CAD and the production files — is licensed under the CERN Open Hardware Licence v2, Strongly Reciprocal (CERN-OHL-S-2.0). The scripts in hardware/ that generate and check those files are software, under GPL-3.0-or-later.

You may build, modify and sell OPad. If you distribute a modified version, of the software or of the hardware, you must publish its source under the same licence. Every file's licence is recorded in REUSE.toml.

Third-party components keep their own open licenses and ship with their notices:

  • tosu (LGPL-3.0), built from upstream source and bundled with the desktop packages, see the section above. Not stored in this repository.
  • Montserrat fonts embedded in the GUI (SIL Open Font License 1.1).
  • nanopb protobuf runtime vendored in the firmware (zlib license).

Libraries pulled in at build time (Rust crates, ESP-IDF components such as LVGL and TinyUSB) are not stored here and are used under their own permissive licenses.

Parts

29
QtyValueFootprintReferences
4100nFosupad:C_0603_1608MetricC1, C6, C7, C8
310nFosupad:C_0603_1608MetricC9, C10, C11
31uFosupad:C_0603_1608MetricC3, C4, C5
3220osupad:R_0603_1608MetricR5, R6, R7
3DRV5055A3osupad:SOT-23U1, U2, U3
3SW_MX_Hall_SolidCentreosupad:SW_MX_Hall_PlateMount_SolidCentreSW1, SW2, SW3
2100kosupad:R_0603_1608MetricR1, R2
2MountingHole_2.2mm_M2osupad:MountingHole_2.2mm_M2H1, H2
110uFosupad:C_0603_1608MetricC2
133osupad:R_0603_1608MetricR3
1600R@100MHzosupad:L_0603_1608MetricFB1
1ADS7038osupad:WQFN-16-1EP_3x3mm_P0.5mm_EP1.68mmU4
1MODULEosupad:JST_SH_SM08B-SRSS-TB_1x08-1MP_P1.00mm_HorizontalJ1
1SPAREosupad:TestPoint_Pad_1.0x1.0mmTP1

Questions

How big is the He input v2 PCB?

It measures 71 × 24 mm and has 2 copper layers, 1.6 mm thick.

What parts does the He input v2 use?

29 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the He input v2 KiCad files?

From the OPad-dev/OPad repository on GitHub, at the commit this page was made from: the board is hardware/pcb/V2/HE/he_input_v2.kicad_pcb and its schematic hardware/pcb/V1/Carrier/controller_carrier_v1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the He input v2 design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from OPad-dev/OPad

3
  • 2 layers52 × 24 mmHe input v1, the printed circuit board in 3D

    He input v1

    OPad-dev/OPad

    A deterministic, ultra-low-latency mechanical keypad and live telemetry HUD designed for competitive osu!, osu!lazer, and rhythm games on Linux and Windows 10/11.

    15 partsGPL-3.0
  • 2 layers52 × 24 mmMx input v1, the printed circuit board in 3D

    Mx input v1

    OPad-dev/OPad

    A deterministic, ultra-low-latency mechanical keypad and live telemetry HUD designed for competitive osu!, osu!lazer, and rhythm games on Linux and Windows 10/11.

    10 partsGPL-3.0
  • 2 layers35 × 48.2 mmController carrier v1, the printed circuit board in 3D

    Controller carrier v1

    OPad-dev/OPad

    A deterministic, ultra-low-latency mechanical keypad and live telemetry HUD designed for competitive osu!, osu!lazer, and rhythm games on Linux and Windows 10/11.

    7 partsGPL-3.0

Similar boards

  • 2 layers52.3 × 10.5 mmStackLink, the printed circuit board in 3D

    StackLink

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    29 parts5.1kGPL-3.0
  • 2 layers56 × 20 mmHallEffectXY Endstop, the printed circuit board in 3D

    HallEffectXY Endstop

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    29 parts1.1kGPL-3.0
  • 2 layers50 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    29 parts1kGPL-3.0
  • 2 layers16.8 × 13.6 mmE Fidget Lite, the printed circuit board in 3D

    E Fidget Lite

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    29 parts915
  • 2 layers85 × 12.5 mmTERES PCB3-TOUCH BTN Rev.A, the printed circuit board in 3D

    TERES PCB3-TOUCH BTN Rev.A

    OLIMEX/DIY-LAPTOP

    Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop

    29 parts578Apache-2.0
  • 2 layers33.7 × 97.8 mmHAN ESP TSS721, the printed circuit board in 3D

    HAN ESP TSS721

    UtilitechAS/amsreader-firmware

    ESP8266 and ESP32 compatible firmware to read, interpret and publish data to MQTT from smart electrical meters, both DLMS and DSMR is supported

    29 parts470
  • 2 layers80 × 55 mmGB CARTPP XC, the printed circuit board in 3D

    GB CARTPP XC

    Gekkio/gb-hardware

    Game Boy -related custom hardware by gekkio

    29 parts379CC-BY-4.0
  • 2 layers55 × 58 mmProto ads bee mcu board, the printed circuit board in 3D

    Proto ads bee mcu board

    PantsForBirds/adsbee

    Open Source Embedded ADS-B Receiver

    29 parts344GPL-3.0