ESP-KVM - open-source IP-KVM on the ESP32-P4 (HDMI capture + USB HID, in a browser)
Posted: Fri Aug 07, 2026 7:49 pm
ESP-KVM, an open-source IP-KVM. It captures a target machine's HDMI (HDMI to CSI 2 Adapter C790), presents itself to that machine as a USB keyboard + mouse, and serves both to a browser - so you can reach a box all the way down to its BIOS with no OS and no agent on it.
What makes it a P4 project specifically:
Apache-2.0.
Repo: https://github.com/espkvm/espkvm
Site + flasher + live demo: https://espkvm.io
- Capture is a TC358743 HDMI -> MIPI-CSI-2 bridge read by the P4's CSI receiver. The link (2 lanes @ 972 Mbit/s, RGB888) caps at ~81 Mpix/s = 1080p30, so the device hands the source a hand-built EDID that only advertises modes under that ceiling (over-advertise and the receiver never completes a frame - black screen).
- Video is hardware-encoded: MJPEG, and H.264 via the P4's encoder. On rev <3.0 the encoder needs a colour-convert detour through the PPA (~104 ms of a ~150 ms frame -> ~7 fps at 1080p); on rev 3.2 it takes YUV422 directly and hits 22-24 fps (28 at 720p), and runs cooler doing it (34 vs 46 C).
- USB is TinyUSB on OTG-HS as a composite HID (absolute + relative pointer, full keyboard) plus optional MSC virtual media - boot the target from an ISO. On rev 3.x the microSD writes reliably too (it times out on the older stepping).
- WiFi, on boards with an onboard ESP32-C6, runs over esp-hosted + esp_wifi_remote across SDIO - with a rescue AP + captive portal. Gotcha worth knowing: that SDIO bus is shared with the microSD slot, so it's one or the other.
- Also: native Tailscale (and self-hosted Headscale), Home Assistant over MQTT, HTTPS + login, OTA with rollback, and an installable PWA console.
Apache-2.0.
Repo: https://github.com/espkvm/espkvm
Site + flasher + live demo: https://espkvm.io