Remote keyboard, video, and mouse control over IP. Built with RISC-V, designed in KiCad 10, simulation-first.
A fully open-source KVM-over-IP appliance. The compositor (a Milk-V Duo S running KVMD) takes HDMI input from the target machine via a TC358743 HDMI-to-CSI bridge, encodes it to H.264 with hardware acceleration, and streams it to the browser over WebRTC. An ESP32-S3 acts as a USB HID composite device, receiving keyboard and mouse events from the browser via WebSocket. Front-panel power, reset, and LED control happens through PC817 optocouplers.
The whole stack runs in QEMU first — the simulator is the development environment, the hardware is the deployment target.
| Compositor | MV-01 Milk-V Duo S | RISC-V SG2000, runs KVMD daemon |
| HID | ES-01 ESP32-S3 | USB HID composite via TinyUSB |
| Video | TC-01 TC358743XBG | HDMI 1.4 → MIPI CSI-2, 1080p30 |
| USB Hub | UH-01 USB2514B | 4-port USB 2.0, single cable to target |
| ATX | AT-01 PC817 ×4 | Optocoupler front-panel control |
| Protocol | PR-01 UART | Binary HID packets, Duo S ↔ ESP32-S3 |
| Web UI | KV-01 Astro + DaisyUI | WebRTC video, 17 themes, virtual media |
| Board | PB-01 6-layer PCB | 120 × 92mm, 78 components, Rust VG router |
| Cost | BM-01 ~$62/unit | At qty 5, LCSC sourced |
Browser → KVMD (aiohttp WebSocket) → UART → ESP32-S3 (USB HID) → Target Machine Browser ← WebRTC (go2rtc + H.264) ← FFmpeg ← VNC ← QEMU/TC358743 ← Target HDMI Browser → KVMD (POST) → QMP/GPIO → ATX Power/Reset/LEDs
| Ref | Category | MPN | Description | Qty | Unit | Ext | Links |
|---|---|---|---|---|---|---|---|
| U1 | SOT-223-3_TabPin2 | AMS1117-3.3 | 3.3V 1A LDO Regulator | 1 | $0.30 | $0.30 | LCSC |
| U2 | SOT-223-3_TabPin2 | AMS1117-1.8 | 1.8V 1A LDO Regulator | 1 | $0.30 | $0.30 | LCSC |
| U3 | SOT-223-3_TabPin2 | AMS1117-1.2 | 1.2V 1A LDO Regulator | 1 | $0.30 | $0.30 | LCSC |
| U4 | BGA-80 | TC358743XBG | HDMI 1.4 to MIPI CSI-2 Bridge | 1 | $6.00 | $6.00 | LCSC |
| U5 | QFN-36 | USB2514B-I/M2 | 4-Port USB 2.0 Hub Controller | 1 | $3.50 | $3.50 | LCSC |
| U6 | TSSOP-24 | TPD12S016PWR | HDMI ESD Protection + Level Shift | 1 | $2.00 | $2.00 | LCSC |
| U7, U8, U9, U10 | DIP-4_W7.62mm | PC817 | Phototransistor Optocoupler | 4 | $0.20 | $0.80 | LCSC |
| C1, C2, C3, C4, C5, C6 | C_0805_2012Metric | 10u | 10uF 25V MLCC X5R 0805 | 6 | $0.05 | $0.30 | LCSC |
| C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21 | C_0402_1005Metric | 100n | 100nF 50V MLCC X7R 0402 | 15 | $0.01 | $0.15 | LCSC |
| C22, C23, C24, C25, C26, C27 | C_0402_1005Metric | 1u | 1uF 25V MLCC X5R 0402 | 6 | $0.02 | $0.12 | LCSC |
| C28, C29 | C_0805_2012Metric | 22u | 22uF 16V MLCC X5R 0805 | 2 | $0.08 | $0.16 | LCSC |
| R1, R2 | R_0402_1005Metric | 5.1k | 5.1k 1% 0402 (USB-C CC) | 2 | $0.01 | $0.02 | LCSC |
| R3, R4, R5, R6 | R_0402_1005Metric | 330 | 330R 1% 0402 (Opto LED) | 4 | $0.01 | $0.04 | LCSC |
| R7, R8, R9, R10 | R_0402_1005Metric | 10k | 10k 1% 0402 (Pull-ups) | 4 | $0.01 | $0.04 | LCSC |
| R11, R12 | R_0402_1005Metric | 4.7k | 4.7k 1% 0402 (I2C pull-up) | 2 | $0.01 | $0.02 | LCSC |
| R13 | R_0402_1005Metric | 1k | 1k 1% 0402 (Power LED) | 1 | $0.01 | $0.01 | LCSC |
| Y1 | Crystal_SMD_3215 | 24MHz | 24MHz Crystal (USB2514B) | 1 | $0.50 | $0.50 | LCSC |
| Y2 | Crystal_SMD_3215 | 27MHz | 27MHz Crystal (TC358743) | 1 | $0.50 | $0.50 | LCSC |
| FB1, FB2, FB3, FB4, FB5 | L_0402_1005Metric | 600R | 600R@100MHz Ferrite Bead 0402 | 5 | $0.02 | $0.10 | LCSC |
| D1 | LED_0603_1608Metric | Green | Green LED 0603 (Power) | 1 | $0.03 | $0.03 | LCSC |
| D2 | LED_0603_1608Metric | Yellow | Yellow LED 0603 (Network) | 1 | $0.03 | $0.03 | LCSC |
| D3 | LED_0603_1608Metric | Blue | Blue LED 0603 (HDMI) | 1 | $0.03 | $0.03 | LCSC |
| J1 | HDMI_A_Horizontal | HDMI_A | HDMI Type-A Receptacle | 1 | $0.80 | $0.80 | LCSC |
| J2 | USB_A_Horizontal | USB_A | USB-A Receptacle (to target) | 1 | $0.30 | $0.30 | LCSC |
| J3 | USB_C_Receptacle | USB_C | USB-C Receptacle (power input) | 1 | $0.50 | $0.50 | LCSC |
| J4 | RJ45_Shielded | RJ45 | RJ45 Jack w/ Integrated Magnetics | 1 | $1.00 | $1.00 | LCSC |
| J5 | PinHeader_2x05_P2.54mm | ATX_Header | 2x5 2.54mm Pin Header | 1 | $0.20 | $0.20 | LCSC |
| J6 | FFC_FPC_15pin_1mm | FPC_15 | 15-pin 1.0mm FPC Connector (CSI) | 1 | $0.30 | $0.30 | LCSC |
| J7 | PinSocket_2x13_P2.54mm | DuoS_Hdr1 | 2x13 Female Pin Header | 1 | $0.75 | $0.75 | LCSC |
| J8 | PinSocket_2x13_P2.54mm | DuoS_Hdr2 | 2x13 Female Pin Header | 1 | $0.75 | $0.75 | LCSC |
| J9 | PinSocket_1x20_P2.54mm | ESP32_Hdr1 | 1x20 Female Pin Header | 1 | $0.50 | $0.50 | LCSC |
| J10 | PinSocket_1x20_P2.54mm | ESP32_Hdr2 | 1x20 Female Pin Header | 1 | $0.50 | $0.50 | LCSC |
| TOTAL (components only) | 1 | — | — | ||||
| Total | $20.85 | ||||||
7 hierarchical sheets designed in KiCad 10. 78 components, 0 ERC errors.
6-layer board, 120 × 92mm. 78 components. Rust analytical placement, 3D visibility-graph routing, KiCad DRC feedback, and generated GLB/SVG/PNG assets.
The board is one half of the project. KVMD-on-Linux on the Milk-V, TinyUSB on the ESP32-S3, and an Astro/DaisyUI web UI in the browser. Everything is simulation-first — nothing here requires the physical board to develop.
| Compositor | MV-01 Milk-V Duo S | RISC-V SG2000, runs KVMD daemon |
| HID | ES-01 ESP32-S3 | USB HID composite via TinyUSB |
| Video | TC-01 TC358743XBG | HDMI 1.4 → MIPI CSI-2, 1080p30 |
| USB Hub | UH-01 USB2514B | 4-port USB 2.0, single cable to target |
| ATX | AT-01 PC817 ×4 | Optocoupler front-panel control |
| Protocol | PR-01 UART | Binary HID packets, Duo S ↔ ESP32-S3 |
| Web UI | KV-01 Astro + DaisyUI | WebRTC video, 17 themes, virtual media |
| Cost | BM-01 ~$62/unit | At qty 5, LCSC sourced |
Browser → KVMD (aiohttp WebSocket) → UART → ESP32-S3 (USB HID) → Target Machine Browser ← WebRTC (go2rtc + H.264) ← FFmpeg ← VNC ← QEMU/TC358743 ← Target HDMI Browser → KVMD (POST) → QMP/GPIO → ATX Power/Reset/LEDs
Click any thumbnail to view fullscreen. Arrow keys: left/right to navigate, up/down to cycle themes.