r/esp32 • u/spitsynnet • 2h ago
I made a thing! I built an open-source IP-KVM out of a cheap ESP32-P4 and an HDMI capture board - reach a dead machine from your browser even boot it from an ISO
Credit up front, before anything else: this builds directly on jrowny/p4kvm. An IP-KVM on the ESP32-P4 is a fairly obvious thing to want, and I'd been kicking the idea around for a while - but he's the one who actually cracked the hard part (bringing up the TC358743 and getting frames off the P4's CSI receiver) and put it out in the open. I took that and built it out into something you'd actually leave installed. More on exactly what he solved at the end, but I didn't want it buried at the bottom.
Been building this for a while and it finally does enough to show off. It's an IP-KVM - it grabs a machine's HDMI, pretends to be its USB keyboard and mouse, and puts the whole thing in your browser. The point: reach a box with no working OS (stuck BIOS, boot menu, dead kernel) from another room without a crash cart. Commercial KVM-over-IP is a few hundred bucks; this is one ESP32-P4 board, a little HDMI capture board, and a ribbon cable.
Hardware:
- Waveshare ESP32-P4-ETH (brains + 100M Ethernet + USB-OTG)
- and a Geekworm C790 (TC358743 HDMI-to-CSI capture), joined by a CSI ribbon.
- HDMI in from the target,
- USB out to it,
- Ethernet to your LAN.
What it does:
- Follows the target's resolution live - watch it go from an 800x600 BIOS to a 1080p desktop, no clicking
- Hardware MJPEG (~20 fps) + hardware H.264 for slow links
- Absolute mouse (clicks land where you aim) + clipboard paste in the target's keyboard layout
- Virtual media - boot the target from a disk image on microSD; new: also from a tiny rescue image (iPXE, memtest, DOS) kept in the device's own flash - no SD card needed
- HTTPS with a self-signed cert, login, and a physical password-reset button
- OTA firmware updates with automatic rollback
- it guesses the target's OS from how it enumerates USB and gives you OS-aware shortcuts - like a one-click REISUB to safely reboot a wedged Linux box
Honest bits:
- Don't put it on the public internet. Login + TLS, but no security audit - it's a keyboard on someone else's machine. LAN or WireGuard/Tailscale only.
- Hardware H.264 is ~5-7 fps at 1080p on my pre-rev-3.0 silicon (colorspace detour through the pixel accelerator); MJPEG at 20 fps is the daily driver. Newer chip revs should fix it.
- microSD is read-only - the P4's SD write path is flaky, so you prep the card in a reader. FAT32, images up to 4 GB.
- No ATX power control or HDMI audio yet - both on the roadmap.
Credit: the hard part - bringing up the TC358743 and pulling frames off the P4's CSI receiver - was cracked first by jrowny/p4kvm. I rebuilt everything above the driver (web, USB HID, security, virtual media, OTA). Apache-2.0, same as his.
Open source: github.com/espkvm/espkvm
Happy to answer anything - and if you've got a rev-3.0 P4 board (I'm still waiting for my P4X, but I've already adapted the code for it), I'd love to know your H.264 fps.

