-
v0.14.0
Stableapple / swift (push) Successful in 1m21sci / web (push) Successful in 54sapple / screenshots (push) Successful in 6m19sci / docs-site (push) Successful in 1m6sci / bench (push) Successful in 5m16srelease / apple (push) Successful in 10m54sandroid-screenshots / screenshots (push) Successful in 4m1sci / rust (push) Successful in 26m27sdecky / build-publish (push) Successful in 20sandroid / android (push) Successful in 14m8sdeb / build-publish (push) Successful in 10m58sdocker / deploy-docs (push) Successful in 9sdocker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 12sdocker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 11sdocker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 11sdocker / build-push (ci, ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 9sdocker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 12sdocker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 10sdeb / build-publish-host (push) Successful in 10m40slinux-client-screenshots / screenshots (push) Successful in 7m14sweb-screenshots / screenshots (push) Successful in 2m49sflatpak / build-publish (push) Failing after 8m19swindows-host / package (push) Successful in 16m34swindows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 6m54srpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 16m15srpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 16m37swindows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Successful in 6m58sarch / build-publish (push) Successful in 12m31sreleased this
2026-07-19 09:30:44 +00:00 | 70 commits to main since this releaseWire-compatible with 0.13.x (
WIRE_VERSIONstays 2) and the virtual-display driver protocol is unchanged at v4 — existing pairings, clients and installed drivers keep working, with no re-pairing and no driver update required.This release is about colour: HDR stops being a Windows-only story, PyroWave grows a full-chroma mode, and 10-bit now travels from capture to glass on every host platform. Alongside it, the web console opens up to third-party plugin UI.
HDR on Linux
The Linux host can finally capture HDR. GNOME 50's screencast portal offers 10-bit PQ (
x2rgb10/x2bgr10) for a monitor in HDR mode, and the host now takes that offer and encodes HEVC Main10 on both NVENC and VAAPI — live-validated, not inferred. The portal only delivers PQ while the mirrored monitor is actually in HDR colour mode, so the host probes the live mode up front and honestly degrades to 8-bit SDR instead of running capture negotiation into a timeout.punktfunk-host hdr-probereports what your machine can do.RecordVirtual and the native (non-portal) paths stay SDR for now — the portal monitor-mirror is the HDR route on Linux.
HDR everywhere else
- Apple — HDR capability is now detected from potential EDR headroom rather than the current value, so a display that can go HDR is treated as HDR-capable before anything asks it to. macOS presents PyroWave through an IOSurface layer.
- Windows — an SDR-negotiated session now composes SDR even when the virtual display's "Use HDR" is switched on. Previously a client with HDR off could be handed BT.2020 PQ (from a display left in HDR by a prior session, the driver default, or the global toggle) and the picture blew out.
client_10bitis authoritative on both codecs now, and a mid-session HDR flip can't override an SDR-negotiated stream.
PyroWave: 4:4:4, HDR, and a much higher ceiling
Full-chroma streaming lands end to end — text and UI stop smearing on the chroma plane:
- Negotiation threads chroma format, bit depth and
ColorInfothrough the whole path, so a session self-configures in-band. - Linux encodes 4:4:4 with per-pixel CSC at full chroma resolution.
- Windows composes separate-plane zero-copy D3D11→Vulkan.
- Apple decodes 4:4:4 + HDR in Metal and presents via EDR.
Throughput went up sharply too. Pooling the encoder's scratch buffers and fixing an O(n²) client parser lifted the 2.5 Gbps wall, and the encode queue now runs at elevated GPU scheduling priority on a global-priority queue. Frame-driven pacing is anchored to arrival so the stream holds full framerate. The docs gained a 4:4:4 + HDR page with an interactive bitrate calculator.
Console plugins
The web console can now host third-party UI. The host keeps a plugin registry, the SDK gains
servePluginUi, and the console proxies and navigates to plugin pages. Scoped@punktfunk/plugin-*packages are discovered automatically, and the docs have a new Plugins page covering ROM Manager and Playnite with install steps.This adds a
/api/v1/pluginssurface with a regenerated OpenAPI spec and SDK client — which is why this is a minor bump rather than a patch.Also in this release
- Library entries serve their local artwork through the host art proxy.
- gamescope sessions end when the Steam game exits, and
--steamis inferred. - Ubuntu 24.04 LTS gets a working host
.deb, built by a noble builder that bundles FFmpeg 8.
Fixes
- A fresh install of 0.13.0 could not start on Windows. The ring-only crypto switch left rcgen unable to generate an RSA key, so the host died creating its identity with "no support for generating keys for the given algorithm". Existing installs were unaffected — the certificate was already on disk — but every new one failed. The host identity is now generated with the
rsacrate and self-signed through rcgen. - Windows
WSAENOBUFSis treated as a transient send drop instead of tearing down the stream. hooks.jsonhand-edits are honored without a restart.- macOS PyroWave sessions default to glass-gated present pacing, mitigating a DCP
swapIDkernel panic; windowed sessions present via IOSurface layer contents. - PyroWave signals
ycbcr_range=LIMITEDin the sequence header, and 4:4:4 modes that would overflow the rate controller's 16-bit block index are refused rather than wrapping. - Apple clients pointed users at the web console on port 3000 for pairing — the console has served 47992 over HTTPS for a long time, so every pairing instruction led to a dead port.
- Web console mobile padding no longer squeezes content.
Downloads