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
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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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** |
|
||||||
|
|||||||
Reference in New Issue
Block a user