ESP-KVM — an IP-KVM on the ESP32-P4
The console, driving a real machine: its desktop, its right-click<br>menu, and the live status bar — all in a browser tab.
The point is to reach a machine that has no working operating system<br>— a BIOS screen, a boot menu, a kernel that will not come up —<br>from a device that costs a fraction of a commercial KVM-over-IP. It<br>captures HDMI, presents itself over USB as a keyboard and mouse,<br>hands the target a disk image to boot from, and serves the whole<br>thing over HTTPS from a megabyte of firmware — the console inside<br>it is 44 KB.
How it connects
Two cables to the target, one to the network. Nothing is installed on<br>the target and nothing runs on it.
The target machine's HDMI goes to the capture board, which feeds<br>the ESP32-P4 over MIPI CSI-2. The ESP32-P4 reaches the operator's<br>browser over Ethernet, and plugs back into the target as a USB<br>keyboard and mouse.
target machine<br>no OS needed
TC358743<br>HDMI capture<br>Geekworm C790
ESP32-P4<br>ESP-KVM firmware<br>Waveshare P4-ETH
your browser<br>anywhere on the LAN
HDMI
CSI-2
HTTPS
USB — keyboard and mouse the target cannot tell from real ones
Nothing runs on the target machine — which is the point, since it<br>may not be running anything at all.
What it does
What the firmware ships with. Anything the hardware cannot support, the<br>device shows disabled with the reason — it does not pretend.
Follows the target
A machine switching from an 800×600 firmware screen to a<br>1080p desktop is followed without intervention.
Clicks land where aimed
An absolute USB pointer, so the target’s mouse acceleration<br>cannot drift the cursor away from the button you meant.
MJPEG or H.264
Both encoded by hardware. H.264 costs a fraction of the bandwidth<br>on a screen that barely changes.
Boot from a disk image
A rescue or live image, handed to the target as a USB drive it can<br>boot from — from a microSD card, or a small one kept in the<br>device’s own flash with no card at all.
Updates itself
Two app slots and automatic rollback: an image that fails to start<br>returns the device to the one that worked.
HTTPS and a login
A certificate the device issues itself on first boot, and a<br>password you can clear with the board button if you forget it.
Lives in Home Assistant
Turn on MQTT and the device is auto-discovered as one Home Assistant<br>device: temperature, viewers, video mode and target power as<br>sensors, with power, reset and Wake-on-LAN buttons. TLS optional,<br>off by default.
Reach it over WireGuard
A built-in WireGuard client, so the device stays reachable across<br>the internet without being exposed on it. Split-tunnel over the<br>existing link — the LAN keeps working — and it generates<br>its own key, showing the public one to add to your peer. Off by<br>default.
The same device in Home Assistant — every value here is reported<br>live by the KVM over MQTT, discovered automatically.
Virtual media, honestly. The microSD is served<br>read-only — this board cannot write it reliably — so images<br>go on the card in a reader, formatted FAT32, up to 4 GB each.<br>Reads run around 1.5 MB/s: quick for a rescue or minimal image,<br>several minutes for a heavy graphical one. It is a known ESP32-P4 SD<br>limitation, and the console tells you so. For the rescue case there is<br>another option that sidesteps the card entirely: a small image (iPXE,<br>memtest, a DOS floppy) kept in a 4 MB flash partition, served fast<br>from memory and — because flash writes are reliable here<br>— writable from the browser.
FAQ
How is this different from IPMI?
IPMI, the BMC chip built into server motherboards, manages a machine<br>from the inside: real power control, internal sensors, POST codes,<br>over a standard protocol. But it lives only on server-class hardware,<br>and the full remote console is often behind a license.
ESP-KVM is external. It clips onto any machine with an HDMI<br>output and a USB port, captures the physical video, and acts as its<br>keyboard and mouse — bringing the remote console, virtual media<br>and wake-on-LAN part of what a BMC does to hardware that has no BMC<br>and never will: a desktop, a laptop, a mini-PC, an SBC, for about<br>$40. It can press the machine’s power and reset buttons and read<br>its power LED through optocouplers (ATX power control), though it does<br>not read the host’s internal sensors the way a BMC does.<br>Think of it as closer to PiKVM than to IPMI: not a replacement for a<br>BMC on a server, but the useful slice of one for everything that<br>never had a BMC.
Measured, not estimated
Every number here came off the hardware, at 1080p. The ones that<br>contradicted the documentation are written down in<br>the hardware notes.
MJPEG<br>H.264
Frame rate<br>20 fps<br>~7 fps
Idle screen<br>0 kbit/s<br>170 kbit/s
Screen in motion<br>8.5 Mbit/s<br>~500 kbit/s
Chip temperature, full load<br>46 °C in open air
So H.264 is not the faster option — it is the one that fits down a<br>narrow link. Browsers decode it through WebCodecs, which they only<br>offer on secure pages, which is one reason the device serves...