• v0.8.1 71e1865519

    v0.8.1
    apple / swift (push) Successful in 2m36s
    windows / build (aarch64-pc-windows-msvc) (push) Successful in 50s
    windows / build (x86_64-pc-windows-msvc) (push) Successful in 59s
    apple / screenshots (push) Successful in 5m55s
    windows-host / package (push) Successful in 7m32s
    windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 1m19s
    windows-msix / package (x64, C:\Users\Public\ffmpeg, x86_64-pc-windows-msvc, C:\t) (push) Successful in 1m13s
    release / apple (push) Successful in 12m3s
    ci / web (push) Successful in 1m3s
    ci / docs-site (push) Successful in 1m18s
    ci / rust (push) Successful in 4m52s
    ci / bench (push) Successful in 6m44s
    android / android (push) Successful in 5m9s
    arch / build-publish (push) Successful in 5m40s
    decky / build-publish (push) Successful in 15s
    deb / build-publish (push) Successful in 3m20s
    linux-client-screenshots / screenshots (push) Successful in 2m0s
    flatpak / build-publish (push) Successful in 4m52s
    rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 10m21s
    rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 10m13s
    docker / deploy-docs (push) Successful in 6s
    docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
    docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 4s
    docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
    docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
    docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 6s
    web-screenshots / screenshots (push) Successful in 2m59s
    android-screenshots / screenshots (push) Failing after 3m25s
    Stable

    enricobuehler released this 2026-07-06 18:29:11 +00:00 | 3 commits to main since this release

    Wire-compatible with 0.8.0 — existing pairings and clients keep working.

    Windows host — native AMF encoder for AMD

    Windows AMD hosts now encode through AMD's AMF SDK directly — the same direct-SDK approach the NVIDIA/NVENC path already uses — instead of going through the libavcodec AMF wrapper. The encoder input defaults to zero-copy D3D11, so the captured frame stays on the GPU all the way into the encoder. Intel QSV continues on libavcodec.

    A new encode-stall watchdog detects the silent AMF/QSV freeze — where the encoder stops producing frames but the stream stays "up" — and heals it in place, instead of the picture going dead until you reconnect.

    Zero-copy GPU capture — now the default

    GPU zero-copy capture (dmabuf → GPU → encoder, no CPU round-trip) is now on by default on every Linux backend, including NVIDIA/NVENC. The GPU import (tiled EGL/CUDA and LINEAR Vulkan) runs in a per-capture worker process, so a driver fault on a producer-invalidated dmabuf — a compositor crash mid-map — kills only the worker and the host rebuilds, instead of taking the whole host down. That removed the crash risk that kept NVENC zero-copy opt-in. Graceful CPU fallback is intact, and the old Mutter+NVIDIA force-disable is gone (zero-copy applies there too). Set PUNKTFUNK_ZEROCOPY=0 to opt back out.

    Display management — custom presets & dedicated game sessions

    • Custom display presets. Save named bundles of your display-management policy — keep-alive, topology, conflict handling, identity, layout, and the game-session axis — and apply, edit, or delete them from the web console alongside the built-in presets.
    • Game-mode integration + dedicated game sessions. Reliable game-mode ⇄ KDE/GNOME desktop switching on Bazzite/SteamOS (no more stale-node reconnect wedge on a mode switch), plus an opt-in Dedicated mode that boots each library launch into its own headless gamescope at your exact resolution — the game boots straight in, no Steam Big Picture in the way.
    • Physical-monitor refresh preserved. Connecting no longer resets an attached monitor's refresh (e.g. 120 → 60 Hz) when the virtual display is added — the physical's real mode is read from a pre-connect snapshot on Mutter, KWin, and Windows.

    Clients

    • Deliberate disconnect is now signalled (QUIT_CLOSE_CODE) — when you intentionally quit a session, the host skips the keep-alive linger and tears the virtual display down immediately, instead of holding it open as if you'd dropped.
    • Wake-on-LAN parity for the Windows and Linux clients — they now send the magic packet, wait until the host is up, and re-key on its new IP, matching the macOS/iOS/Android clients.
    • macOS — Control (and the other modifiers) are now resolved by physical key code, fixing modifiers that were silently dropped on some layouts.
    • Linux — one gamepad service is shared across app activations, so controllers stay connected across window re-opens.

    Android

    • Experimental low-latency mode. The decode-latency optimizations — vendor low-latency decoder keys, an async decode loop, game-tagged audio, DSCP marking, a Wi-Fi low-latency lock, and pipeline thread boosts — now ride a "Low-latency mode (experimental)" toggle (default off), so you can opt in where it helps and switch back if anything misbehaves on your device. Off is the pre-existing pipeline, unchanged.
    • Launch games from the library and higher bitrate options up to 500 Mbps.
    • Auto-wake opt-out — a new "Auto-wake on connect" toggle skips the Wake-on-LAN liveness wait and dials straight through when the host is already up.
    • Console-UI button glyphs now default by form factor — gamepad glyphs on phone/tablet, remote glyphs on TV.
    • Dropped streams are now surfaced in the UI instead of hanging.

    Web console

    • Hardened login gate — request throttling, scoped TLS, and a token-derived seal key.
    • Clearer topology/identity copy, capped description width, mobile More-nav, and preset-spacing polish.

    Security & release engineering

    • Secret-bearing third-party CI actions are SHA-pinned, and the web dependency tree was audited, alongside a whole-project security-posture review.
    • Host setup docs restructured by distro; configuration docs organized by compositor.

    Install

    Per-platform install and upgrade instructions: https://punktfunk.unom.io/docs/install — channel details: https://punktfunk.unom.io/docs/channels

    The app-store builds (Apple TestFlight, Google Play alpha) are uploaded to their testing tracks and promoted manually.

    Downloads