A KVM that is down doesn't slow the others. It is retried less and less often (up to every 15 seconds), its tile says when it was last seen, and the other tiles carry on. A KVM that reboots is picked up again by itself.
Log:data/qkvm.log (rotated at 2 MB, three old files kept) records starts, listener changes, KVMs going down and coming back, rejected logins and any internal error. --log-level debug writes more.
Health check:GET /healthz answers {"status": "ok", "version": "…"} without a login, for a monitor or a watchdog.
Settings file: every change is written atomically and the previous version is kept as data/qkvm.bak. If qkvm.json is ever unreadable, QKVM starts from the backup and sets the damaged file aside.
One copy per data folder: a second qkvm pointed at the same folder refuses to start.
After changing the program's files by hand, restart it. The page is loaded into memory at start, so a browser always gets the page that matches the running server. (Updates installed from inside the app restart it for you.)
Start it with Windows: one way is a task that runs at log-on, for example (adjust the paths): `` schtasks /Create /TN "QKVM" /SC ONLOGON /RL LIMITED /TR "cmd /c cd /d C:\qkvm && pythonw -m qkvm" ` QKVM comes up locked; it shows screens once someone signs in. Started this way there is no terminal, so the first-run setup code is written to data/qkvm.log` instead.