S4 research: VNC client libraries and pipeline (performance first) #23

Closed
opened 2026-10-06 14:40:28 +00:00 by kayg · 9 comments
Owner

Owner request (2026-10-06): research the best VNC client libraries for S4 (DECISIONS 92). The goal is performance, performance, and more performance. infraternal builds the UI itself: split panes (terminal on top and VNC below, 2×2, and so on), very fluid. This issue holds the research. The library choice is foundational, so it goes to the owner as a grill question with measured trade-offs (CLAUDE.md, "Foundational choices").

Owner request (2026-10-06): research the best VNC client libraries for S4 (DECISIONS 92). The goal is performance, performance, and more performance. infraternal builds the UI itself: split panes (terminal on top and VNC below, 2×2, and so on), very fluid. This issue holds the research. The library choice is foundational, so it goes to the owner as a grill question with measured trade-offs (CLAUDE.md, "Foundational choices").
Author
Owner

Starting VNC client-library and pipeline research on branch research-vnc; base SHA 8c70f724dc.

Starting VNC client-library and pipeline research on branch research-vnc; base SHA 8c70f724dcbd9080dd85e2f9862cb16b12ba878a.
Author
Owner

Finding (2026-10-06): noVNC is active and MPL-2.0, with 2,619 commits and 71–72 open issues on GitHub; release 1.7.0 is dated 2026-04-28 and added H.264 detection improvement (v1.6.0 added H.264). Its current source advertises Raw/CopyRect/RRE/Hextile/Zlib/Tight/ZRLE/TightPNG/JPEG/H.264 and QEMU ExtendedKeyEvent, ExtendedDesktopSize, Fence, ContinuousUpdates, ExtendedClipboard. Sources: https://github.com/novnc/noVNC/releases and https://github.com/novnc/noVNC/blob/master/core/encodings.js. Finding: vnc-rs is dual MIT/Apache-2.0, has a WASM path, and its current README says tested Tight/ZRLE/Raw, with Hextile/RRE not implemented; it is a client core, unlike the Rust rfb-encodings crate (Apache-2.0), which is an encoder library. Sources: https://github.com/HsuJv/vnc-rs and https://github.com/rustvnc/rfb-encodings. Finding: KasmVNC 1.5.0 (2026-07-29) adds hardware/software H.264, H.265 and AV1 video streaming; configuration exposes encoded video mode and WebP/JPEG rectangle modes. Sources: https://github.com/kasmtech/KasmVNC/releases and https://docs.kasmvnc.com/docs/configuration/.

Finding (2026-10-06): noVNC is active and MPL-2.0, with 2,619 commits and 71–72 open issues on GitHub; release 1.7.0 is dated 2026-04-28 and added H.264 detection improvement (v1.6.0 added H.264). Its current source advertises Raw/CopyRect/RRE/Hextile/Zlib/Tight/ZRLE/TightPNG/JPEG/H.264 and QEMU ExtendedKeyEvent, ExtendedDesktopSize, Fence, ContinuousUpdates, ExtendedClipboard. Sources: https://github.com/novnc/noVNC/releases and https://github.com/novnc/noVNC/blob/master/core/encodings.js. Finding: vnc-rs is dual MIT/Apache-2.0, has a WASM path, and its current README says tested Tight/ZRLE/Raw, with Hextile/RRE not implemented; it is a client core, unlike the Rust rfb-encodings crate (Apache-2.0), which is an encoder library. Sources: https://github.com/HsuJv/vnc-rs and https://github.com/rustvnc/rfb-encodings. Finding: KasmVNC 1.5.0 (2026-07-29) adds hardware/software H.264, H.265 and AV1 video streaming; configuration exposes encoded video mode and WebP/JPEG rectangle modes. Sources: https://github.com/kasmtech/KasmVNC/releases and https://docs.kasmvnc.com/docs/configuration/.
Author
Owner

Finding (2026-10-06): on this host, a software-preferred Chromium WebCodecs H.264 + OffscreenCanvas 2D run decoded 180×1280×720 frames at 193.59 fps for one pane (p95 submit-to-draw 24.1 ms); four interleaved decoders processed 720 frames at 246.07 aggregate fps (p95 80.9 ms, about 61.5 fps/pane). This is a desktop reference point, not iPhone evidence; runner: research/vnc/benchmark/decode.mjs. QEMU's current RFB implementation exposes classic encodings and QEMU extended key events, but no H.264 RFB encoding, Fence or ContinuousUpdates; Proxmox vncproxy/vncwebsocket remains a ticketed RFB path, so an agent-to-video path would decode+re-encode ordinary QEMU frames. Sources checked 2026-10-06: https://github.com/qemu/qemu/blob/master/ui/vnc.h ; https://github.com/proxmox/qemu-server/blob/master/debian/changelog ; https://www.w3.org/TR/webcodecs/ . Full trade-offs and caveats will be in research/vnc/REPORT.md.

Finding (2026-10-06): on this host, a software-preferred Chromium WebCodecs H.264 + OffscreenCanvas 2D run decoded 180×1280×720 frames at 193.59 fps for one pane (p95 submit-to-draw 24.1 ms); four interleaved decoders processed 720 frames at 246.07 aggregate fps (p95 80.9 ms, about 61.5 fps/pane). This is a desktop reference point, not iPhone evidence; runner: research/vnc/benchmark/decode.mjs. QEMU's current RFB implementation exposes classic encodings and QEMU extended key events, but no H.264 RFB encoding, Fence or ContinuousUpdates; Proxmox vncproxy/vncwebsocket remains a ticketed RFB path, so an agent-to-video path would decode+re-encode ordinary QEMU frames. Sources checked 2026-10-06: https://github.com/qemu/qemu/blob/master/ui/vnc.h ; https://github.com/proxmox/qemu-server/blob/master/debian/changelog ; https://www.w3.org/TR/webcodecs/ . Full trade-offs and caveats will be in research/vnc/REPORT.md.
Author
Owner

Benchmark correction: the earlier figures were single host runs and are superseded by a variable-load note. Three four-decoder runs measured 80.40, 153.70, and 240.95 aggregate fps. The instrumented 2026-10-06 15:26 UTC run reported host load average 15.39→16.40 and 146.6 ms p95 submit-to-draw (38.43 fps/pane); earlier runs did not capture load. This is decode/draw only, not phone or capacity evidence. The runner and report will record the conditions and spread: research/vnc/benchmark/decode.mjs and research/vnc/REPORT.md.

Benchmark correction: the earlier figures were single host runs and are superseded by a variable-load note. Three four-decoder runs measured 80.40, 153.70, and 240.95 aggregate fps. The instrumented 2026-10-06 15:26 UTC run reported host load average 15.39→16.40 and 146.6 ms p95 submit-to-draw (38.43 fps/pane); earlier runs did not capture load. This is decode/draw only, not phone or capacity evidence. The runner and report will record the conditions and spread: research/vnc/benchmark/decode.mjs and research/vnc/REPORT.md.
Author
Owner

Gate finding: the worktree has no scripts/verify entry (scripts/ contains only perf-run). The required invocation exits 127 with: zsh:1: no such file or directory: scripts/verify. I am recording this limitation; report review and the benchmark syntax/diff checks pass, but this gate cannot run in this checkout.

Gate finding: the worktree has no scripts/verify entry (scripts/ contains only perf-run). The required invocation exits 127 with: zsh:1: no such file or directory: scripts/verify. I am recording this limitation; report review and the benchmark syntax/diff checks pass, but this gate cannot run in this checkout.
Author
Owner

Clarification: the exact required command is scripts/verify fast. It exits 127 with the output: zsh:1: no such file or directory: scripts/verify. scripts/ contains only perf-run in this checkout.

Clarification: the exact required command is scripts/verify fast. It exits 127 with the output: zsh:1: no such file or directory: scripts/verify. scripts/ contains only perf-run in this checkout.
Author
Owner

Finished the VNC research lane. research/vnc/REPORT.md compares browser RFB decode, agent-side video/WebCodecs, and a Guacamole proxy; includes dated sources, client and server compatibility tables, Safari support, multi-pane/input guidance, license notes, and owner grill questions. No library or architecture is selected. The host decode/draw run measured 153.70 aggregate fps across four panes (38.43 per pane), 146.6 ms p95 at load average 15.39 to 16.40; three runs ranged from 80.40 to 240.95 aggregate fps, so this is not phone or capacity evidence. Runner: research/vnc/benchmark/decode.mjs. Commits: 7c6dda9 and 137a569. Head SHA: 137a5694b1. scripts/verify is absent; scripts/ contains only perf-run. Gate output verbatim: zsh:1: no such file or directory: scripts/verify.

Finished the VNC research lane. research/vnc/REPORT.md compares browser RFB decode, agent-side video/WebCodecs, and a Guacamole proxy; includes dated sources, client and server compatibility tables, Safari support, multi-pane/input guidance, license notes, and owner grill questions. No library or architecture is selected. The host decode/draw run measured 153.70 aggregate fps across four panes (38.43 per pane), 146.6 ms p95 at load average 15.39 to 16.40; three runs ranged from 80.40 to 240.95 aggregate fps, so this is not phone or capacity evidence. Runner: research/vnc/benchmark/decode.mjs. Commits: 7c6dda9 and 137a569. Head SHA: 137a5694b16e6dd9279d0bd808d8667770e9310d. scripts/verify is absent; scripts/ contains only perf-run. Gate output verbatim: zsh:1: no such file or directory: scripts/verify.
Author
Owner

Owner answers recorded as DECISIONS 104–107 (b66edda). The report is merged into main (cdc7c59). Follow-up spike: #35.

Owner answers recorded as DECISIONS 104–107 (b66edda). The report is merged into main (cdc7c59). Follow-up spike: #35.
Author
Owner

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: VNC research delivered (137a569, cdc7c59 in dev); owner answers recorded as D104-107, follow-up spike is #35. Reopen if anything is still missing.

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: VNC research delivered (137a569, cdc7c59 in dev); owner answers recorded as D104-107, follow-up spike is #35. Reopen if anything is still missing.
kayg closed this issue 2026-10-28 17:52:15 +00:00
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#23
No description provided.