What we measure

Numbers off a bench, not off a datasheet.

Measured on our current hardware, 24 August 2026, against a 1080p Windows target. Yours get taken the same way on your own, because a figure like this belongs to the whole path and no two paths are identical.

Action to visible, lower is better
High Performance AMI
42 ms
Off-the-shelf KVM
175 ms
espkvm, ESP32-P4
200 ms
A person reactingfor scale
~250 ms
0100200ms
Frame rate at 1080p, higher is better
High Performance AMI
60 fps
Off-the-shelf KVM
25 fps
espkvm, ESP32-P4
7 fps
0204060fps
How often the agent receives a fresh view. Latency is how long it waits for the effect of one action; frame rate is how quickly it can watch something change. A person has no equivalent, so there is no reference row here.

Every machine path beats a person, which is the bar that matters for leaving one running. Ours is roughly six times faster than the operator it stands in for.

Measured paths taken 24 August 2026 at 1080p on a Windows target: a HID action, then the first frame in which the picture changes. The human row is the usual 200 to 300 ms simple visual reaction time from the literature, drawn as an outline because it is a reference and not something we measured here.

espkvm is another team's open-source project and a capable one. Its upstream quotes 20 fps at 1080p; 7 fps is what we measured on our own bench with its encoder sitting at 97 to 100 per cent, so treat our figure as one rig's result and not as their claim.

Setting up the other two yourself

The off-the-shelf KVM and espkvm paths are both documented in the open. Walkthroughs for each are in the agentkvm repository: setup-nanokvm.md and setup-espkvm.md. Apache-2.0, nothing gated. High Performance AMI is the one we build and deploy.

What this does not prove

The figure belongs to the whole path, not to any one part of it. Ours moved most on changes away from the interface itself, which is exactly why the acceptance measurement is taken on your equipment rather than quoted from ours.
At 60 fps nothing is visible until the next frame, so the measurement carries up to 16.7 ms of its own. The true figure is somewhere between about 25 and 42 ms.
Around 13 ms of the 42 is USB polling and that frame quantisation. Neither belongs to the interface.