docs: clarify HDR is supported on the Windows host (Linux still blocked)
apple / swift (push) Successful in 55s
android / android (push) Successful in 4m10s
ci / rust (push) Successful in 4m37s
ci / web (push) Successful in 28s
ci / docs-site (push) Successful in 32s
deb / build-publish (push) Successful in 2m10s
decky / build-publish (push) Successful in 12s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 4s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 2m15s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 29s
ci / bench (push) Successful in 7m9s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Failing after 3m32s
docker / deploy-docs (push) Successful in 18s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 7m35s

HDR (10-bit BT.2020 PQ) works end-to-end with the Windows host — it captures
an HDR desktop (WGC FP16 / Desktop-Duplication FP16 for the secure desktop)
and encodes HEVC Main10 to HDR-capable clients (Windows, Android). Only the
Linux host is blocked upstream (no 10-bit compositor capture). Corrected the
roadmap (grid + shipped/blocked), Windows Host page, status, and CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-20 22:13:09 +02:00
parent 9f049f965f
commit 4afdb18cc4
4 changed files with 21 additions and 11 deletions
+5 -2
View File
@@ -72,8 +72,11 @@ Low-latency desktop/game streaming stack, Linux-first, with a shared Rust protoc
**ViGEm** gamepads (`inject/gamepad_windows.rs`), WASAPI loopback + virtual mic (`audio/wasapi_*`). **ViGEm** gamepads (`inject/gamepad_windows.rs`), WASAPI loopback + virtual mic (`audio/wasapi_*`).
Ships as a **signed Inno Setup installer** that registers a `LocalSystem` SCM service launching into Ships as a **signed Inno Setup installer** that registers a `LocalSystem` SCM service launching into
the interactive session for secure-desktop (UAC/lock-screen) capture (`service.rs`), bundles the the interactive session for secure-desktop (UAC/lock-screen) capture (`service.rs`), bundles the
SudoVDA driver, and is published by `windows-host.yml`. Newer/less battle-tested than the Linux SudoVDA driver, and is published by `windows-host.yml`. **HDR (10-bit)**: WGC captures the HDR
host; no AMD/Intel/software encode path. Packaging: `packaging/windows/`. desktop as FP16/Rgb10a2 (DDA FP16 for the secure desktop), NVENC forces HEVC Main10 + BT.2020 PQ,
the client auto-detects PQ from the HEVC VUI — gated by `PUNKTFUNK_10BIT` + client `VIDEO_CAP_10BIT`;
**Windows host only** (the Linux host stays 8-bit, blocked upstream). Newer/less battle-tested than
the Linux host; no AMD/Intel/software encode path. Packaging: `packaging/windows/`.
## What's left ## What's left
+8 -5
View File
@@ -24,7 +24,7 @@ see [Status & Progress](/docs/status).
| Web console + pairing | ✅ | | Web console + pairing | ✅ |
| Concurrent sessions (shared desktop) | ✅ | | Concurrent sessions (shared desktop) | ✅ |
| Network speed test + bitrate | ✅ | | Network speed test + bitrate | ✅ |
| HDR / 10-bit (host capture) | ⛔ | | HDR / 10-bit streaming | ✅ Windows host · ⛔ Linux host |
| Sub-frame pipelining (latency) | 🔭 | | Sub-frame pipelining (latency) | 🔭 |
## ✅ Shipped ## ✅ Shipped
@@ -35,8 +35,9 @@ see [Status & Progress](/docs/status).
- **Native-resolution virtual displays** on Linux across KWin, GNOME/Mutter, gamescope, and - **Native-resolution virtual displays** on Linux across KWin, GNOME/Mutter, gamescope, and
Sway/wlroots, with a fully zero-copy GPU path to NVENC (stable 240 fps at 5120×1440). Sway/wlroots, with a fully zero-copy GPU path to NVENC (stable 240 fps at 5120×1440).
- **A native Windows host** (NVIDIA, x64) — a signed installer with secure-desktop capture and a - **A native Windows host** (NVIDIA, x64) — a signed installer with secure-desktop capture and a
bundled virtual-display driver. See [Windows Host](/docs/windows-host). *(Beta — newer than the bundled virtual-display driver, and the only host that can stream **HDR** (10-bit BT.2020 PQ,
Linux host.)* captured from an HDR Windows desktop and encoded as HEVC Main10). See
[Windows Host](/docs/windows-host). *(Beta — newer than the Linux host.)*
- **Clients on every platform** — native apps for **Apple** (macOS, iOS, iPadOS, tvOS), **Linux**, - **Clients on every platform** — native apps for **Apple** (macOS, iOS, iPadOS, tvOS), **Linux**,
**Android** (phone + TV), and **Windows**, each with hardware decode, controllers including **Android** (phone + TV), and **Windows**, each with hardware decode, controllers including
DualSense, audio + mic, and automatic host discovery. See [Clients](/docs/clients). DualSense, audio + mic, and automatic host discovery. See [Clients](/docs/clients).
@@ -67,8 +68,10 @@ see [Status & Progress](/docs/status).
## ⛔ Parked / blocked ## ⛔ Parked / blocked
- **HDR / 10-bit streaming.** Designed end to end, but blocked upstream — no shipping compositor emits - **HDR / 10-bit on the *Linux* host.** HDR streaming already works from a
a 10-bit/HDR capture stream yet. Ready to build the moment one lands. [Windows host](/docs/windows-host) to an HDR-capable client (Windows, Android). On Linux it's
blocked upstream — no shipping compositor emits a 10-bit/HDR capture stream yet — and ready the
moment one does.
- **Advanced DualSense voice-coil haptics.** Scoped and shelved (it rides the controller's USB audio - **Advanced DualSense voice-coil haptics.** Scoped and shelved (it rides the controller's USB audio
interface, with near-zero game support on Linux). Adaptive triggers, rumble, and the lightbar interface, with near-zero game support on Linux). Adaptive triggers, rumble, and the lightbar
already ship. already ship.
+3
View File
@@ -36,6 +36,9 @@ Linux, Windows, and Android.
- **Zero-copy GPU pipeline.** Captured frames stay on the GPU (dmabuf → CUDA → NVENC) with - **Zero-copy GPU pipeline.** Captured frames stay on the GPU (dmabuf → CUDA → NVENC) with
automatic split-encode at very high resolutions. Stable 240 fps at 5120×1440 has been automatic split-encode at very high resolutions. Stable 240 fps at 5120×1440 has been
measured. measured.
- **HDR (10-bit), on the Windows host.** An HDR Windows desktop is captured and encoded as HEVC
Main10 (BT.2020 PQ) to HDR-capable clients (Windows, Android). Linux hosts stream 8-bit for now —
HDR there is blocked upstream at the compositor.
- **Secure by default.** A **SPAKE2 PIN pairing** ceremony establishes trust (the host - **Secure by default.** A **SPAKE2 PIN pairing** ceremony establishes trust (the host
shows a 4-digit PIN; an attacker gets a single online guess, no offline dictionary shows a 4-digit PIN; an attacker gets a single online guess, no offline dictionary
attack). Trust-on-first-use (TOFU) remains an explicit opt-in for fully trusted LANs. attack). Trust-on-first-use (TOFU) remains an explicit opt-in for fully trusted LANs.
+5 -4
View File
@@ -7,8 +7,9 @@ description: "Run the punktfunk streaming host on a Windows PC with an NVIDIA GP
**Status: implemented and shipping — NVIDIA-only, x64-only.** punktfunk is Linux-first, but it also **Status: implemented and shipping — NVIDIA-only, x64-only.** punktfunk is Linux-first, but it also
runs as a native **Windows host**: a signed installer registers a `LocalSystem` service that streams runs as a native **Windows host**: a signed installer registers a `LocalSystem` service that streams
your Windows desktop or games to any punktfunk or Moonlight client, at the client's exact resolution your Windows desktop or games to any punktfunk or Moonlight client, at the client's exact resolution
via a virtual display. It's newer and less battle-tested than the Linux host, and it is built via a virtual display — including **HDR10** (10-bit BT.2020 PQ) when your Windows desktop is in HDR
specifically around NVIDIA hardware. mode. It's newer and less battle-tested than the Linux host, and it is built specifically around
NVIDIA hardware. (The Linux host is 8-bit only — HDR there is blocked upstream.)
> This page is about the Windows **host** (streaming *from* a Windows PC). To stream *to* a Windows > This page is about the Windows **host** (streaming *from* a Windows PC). To stream *to* a Windows
> PC, see the [Windows client](/docs/clients#windows-desktop-client). > PC, see the [Windows client](/docs/clients#windows-desktop-client).
@@ -48,9 +49,9 @@ pipeline orchestration are all shared with the Linux host. The Windows host is a
| Subsystem | Linux backend | Windows backend | | Subsystem | Linux backend | Windows backend |
|---|---|---| |---|---|---|
| **Capture** | xdg ScreenCast portal → PipeWire (dmabuf) | **DXGI Desktop Duplication** → D3D11 texture | | **Capture** | xdg ScreenCast portal → PipeWire (dmabuf) | **Windows.Graphics.Capture** (+ Desktop Duplication for the secure desktop) → D3D11 texture; FP16/10-bit when the desktop is HDR |
| **Virtual display** | KWin / Mutter / Sway / gamescope | **SudoVDA** signed IDD — create a `WxH@Hz` monitor per session, capture it, tear it down | | **Virtual display** | KWin / Mutter / Sway / gamescope | **SudoVDA** signed IDD — create a `WxH@Hz` monitor per session, capture it, tear it down |
| **Encode** | `ffmpeg-next` NVENC (CUDA hwframes) | **NVENC** with a D3D11 device (`--features nvenc`) | | **Encode** | `ffmpeg-next` NVENC (CUDA hwframes) | **NVENC** with a D3D11 device (`--features nvenc`); HEVC Main10 / BT.2020 PQ for HDR |
| **Input — mouse/keyboard** | libei / wlr protocols | **SendInput** (Win32 VK + absolute mouse) | | **Input — mouse/keyboard** | libei / wlr protocols | **SendInput** (Win32 VK + absolute mouse) |
| **Input — gamepads** | uinput Xbox 360 pad + rumble | **ViGEm** virtual pad + rumble back-channel | | **Input — gamepads** | uinput Xbox 360 pad + rumble | **ViGEm** virtual pad + rumble back-channel |
| **Audio capture** | PipeWire sink-monitor | **WASAPI loopback** | | **Audio capture** | PipeWire sink-monitor | **WASAPI loopback** |