WarpKVM

Capture modes and EDID

How the kit chooses what the source sends, and which mode to run when.

Most capture devices accept whatever the source decides to output. The kit does the opposite, and it is the single most useful thing to understand about running it: the kit presents the EDID, so the kit chooses the source's timing. Resolution and refresh rate are not something you configure on the target machine; they are something the console asks for, and the source follows.

Why EDID is the control surface

When a machine boots, its GPU reads the display's EDID to learn what modes it supports, and picks one. The kit is that "display". Rewrite the EDID it presents and the source re-reads it and switches, no reboot and no cable replug needed; our kernel re-asserts hot-plug detect after every EDID write, which is the piece the stock driver is missing.

That one mechanism replaces a settings page full of half-working resolution overrides, and it works in BIOS and boot menus, because it operates below the operating system.

The two operating points

The kit runs two measured operating points, switched from the console:

ModeLatency added by the KVMInternalEncode rate
1080p, 120 Hz capture and encodeabout 30 ms, WarpKVM app, 60 Hz monitornot published120 fps
4K30not yet measuredabout 40 ms30 fps

"Latency added" is measured glass to glass: an HDMI splitter feeds the same source to a reference monitor and to the kit, the viewer runs on a second, identical monitor, and two light sensors time the same on-screen change on both, 200 times per side. The difference is what the KVM adds, corrected for both monitors' refresh timing. It holds flat across still screens, scrolling text, and fast motion. Figures at 120 Hz and above on the viewer side are still to come.

In a browser the number is higher than in the app. How much depends on the viewer PC: Windows composites browser windows at the refresh rate of the fastest monitor attached, so a high refresh monitor makes any browser based KVM faster. The WarpKVM app presents frames directly and is unaffected.

1080p at 120 Hz is the latency mode, and the default wherever the source will negotiate 120 Hz. Capturing at 120 means a frame is at most 8 ms old when the encoder picks it up, instead of 17, and the encoder keeps up at 120 fps.

4K30 is the detail mode. Every pixel of a 4K source, encoded in hardware, at a locked 30 fps. Use it when you are reading dense screens rather than interacting quickly.

Text at 4K, and the high-detail mode

At 4K the encoder outputs 4:2:0 colour, so small saturated text can fringe slightly on hard edges. It is a property of the encoder, not a defect. For text-heavy work the console offers a 1080p high-detail mode that recovers full-resolution colour. When your task is reading rather than watching, prefer it over 4K.

Presets and custom EDIDs

The console ships EDID presets for the modes above, and accepts a custom EDID as hex (128 or 256 bytes) for sources that need special handling. Preset changes apply live; the source typically re-reads and switches within a couple of seconds. Applies are serialised, so a second change while one is in flight is rejected rather than queued.

Two notes from the bench:

  • A source is free to ignore an EDID, and a few do. The daemon follows what actually arrives rather than what was asked for, so the console always shows the true incoming mode.
  • The presets are deliberately narrow, often a single mode, because a generous EDID invites the GPU to invent its own timing. If a source misbehaves with a custom EDID, start from a preset and change one thing.

Codec

The kit encodes H.264 or H.265, selected in the console. Changing codec restarts the encoder: the stream drops for a moment and every connected viewer reconnects. It is a configuration change, not something to toggle mid-session.

The local output does not follow

On the kit carrier, the local HDMI output stays at 1080p 60 regardless of the operating point; it is a convenience monitor, not the capture path. The full-resolution picture is always the network stream.

On this page