github NortheBridge/luminalshine 26.05.0-beta.3
LuminalShine 26.05.0 (Beta 3)

latest releases: 26.08.3, 26.08.2, 26.08.1...
pre-release3 months ago

LuminalShine 26.05 Update Beta 3

General

  • Rebranded to NortheBridge Foundation across the build system, MSI publisher metadata, README, contributing docs, system-tray strings, and Playnite plugin author. The earlier "NortheBridge North America" identity is preserved as a historical footnote in the README.
  • System-tray context menu entry renamed: "Open Sunshine" → "Open LuminalShine". The auto-comment template that asks users to export logs from a GitHub issue was updated to match the new menu label.
  • Pre-Release and General Availability updates are now both queried by default. The setting description explains that Windows Insider Preview builds may require a Pre-Release version to be installed; the toggle is still available if you want to restrict to stable channel only.
  • New About page at /about, reachable from the navigation bar. Surfaces a screenshot-friendly diagnostics snapshot — LuminalShine version + commit, OS edition + channel + version, per-GPU driver info (vendor, model, VRAM, driver version, driver date, graphics API), encoder availability (H.264 / HEVC / AV1 / YUV444), per-display HDR support and current state, virtual-display backend + version + status, hostname / port / active stream count. Two action buttons copy the full set as either plain text or fenced Markdown for issue templates.
  • Update checks now succeed on Windows hosts with a busy root certificate store. schannel rejected the previously-built CA bundle when it crossed 1 MiB. The bundle is now deduplicated by SHA-256 fingerprint, filtered to actual trust anchors (BasicConstraints + KeyUsage.keyCertSign), and size-capped, with CURLSSLOPT_NATIVE_CA preferred up front so most builds skip materializing a bundle entirely.
  • Cleaner support logs at startup. The NVENC encoder probe's expected "GPU doesn't support AV1 YUV444" + "NvEncUnregisterAsyncEvent: NV_ENC_ERR_DEVICE_NOT_EXIST" pairs no longer log at Error level on every cold boot — the YUV444-not-supported message is now Warning (still visible but not alarming), and the cleanup-after-aborted-init NV_ENC_ERR_DEVICE_NOT_EXIST case is filtered to Debug. The // Ignore any errors mentioned above // workaround comment that papered over the noise is no longer needed.
  • Build infrastructure overhaul. GitHub Actions workflows migrated to Node.js 24 ahead of the 16 September 2026 deprecation deadline (msys2/setup-msys2 → v2.31.1, softprops/action-gh-release → v3.0.0, vmactions/freebsd-vm → v1.4.5, LizardByte/actions/* → v2026.417.35446). The Web UI build step now uses the official MSVC-built Windows Node.js binary from actions/setup-node instead of MSYS2's mingw-w64 nodejs, eliminating a std::bad_weak_ptr crash class affecting npm ci and vite build — relevant for anyone building from source.

Windows General Availability

  • Wix Bootstrapper action buttons are now always visible. Earlier revisions used Auto-sized rows on a Top-aligned card, which let tall content push the Install / Update / Remove / Quit buttons below the visible window — buttons existed in the visual tree (still focusable via Tab + Enter) but rendered off-screen. The card is now a sticky-footer layout: content area scrolls if needed, action buttons stay anchored at the bottom. Window minimum width also bumped to 880 px so the wide reconfigure-mode "Switch virtual display driver" button row no longer clips on the right edge.
  • Wix Bootstrapper defaults to SudoVDA with rewritten explanatory descriptions for both SudoVDA and MTT VDD radio options. The text spells out which driver to pick for which Windows build, and the installer's pre-existing detection of an already-installed driver continues to pre-select that option on upgrade or reconfigure.
  • Driver detection in the web interface now returns a real status instead of perpetually showing "unknown." On a typical desktop host (physical monitor present, no active stream yet), the virtual-display driver status was never updated from its initial UNKNOWN state until streaming actually started. The metadata endpoint now lazy-probes the driver on first hit, and the Audio/Video tab re-fetches metadata on backend selection change plus exposes a "Re-check driver" button next to the status indicator.
  • D3D11 device creation now survives a transient post-TDR window. When the GPU recovers from a Timeout Detection and Recovery event, D3D11CreateDevice returns DXGI_ERROR_UNSUPPORTED (0x887A0004) for several seconds while the kernel rebuilds the driver state. The previous one-shot calls in both the encoder bringup path and the Desktop Duplication test path treated this as a hard failure, ending streaming sessions in a recovery loop. A new D3D11CreateDeviceWithRecovery helper retries those transient HRESULTs with exponential backoff (1 s → 2 s → 4 s → 8 s, ~15 s budget) before giving up. A successful retry logs an info-level "recovered after N attempts" line for triage.
  • Slow-start streaming sessions take seconds, not 14 seconds. The WGC capture helper handshake used a fixed 3-second budget per attempt, and a slow process spawn (antivirus inspection, slow user-token resolution) was being treated as a deadlock — the parent process would terminate the helper and relaunch in a loop until something stuck. The first attempt of each session keeps the tight 3 s budget so a real deadlock still fails fast; once a timeout has been observed in this process, subsequent attempts use a 6 s budget that catches the slow-start case in one retry instead of four.
  • Encode-wait timeout log lines now carry diagnostic context. A new info-level line is emitted just before the existing error, reporting session age, current frame index vs last successfully-encoded frame index, time since the previous successful encode, configured frame shape (resolution, buffer format), and the force-IDR flag. Paired with the new D3D11 retry log it makes "GPU hung mid-stream and recovered" a single visible trace in support bundles instead of "we suddenly stopped getting packets and don't know why."

Windows Insider Preview

  • The OS display config API stall after a NVENC TDR is now self-healing. On Insider Preview channels, QueryDisplayConfig returns ERROR_NOT_SUPPORTED (Win32 50) for several seconds after a GPU TDR — long enough that the libdisplaydevice submodule's internal 9-attempt retry loop runs out and reports failure, leaving LuminalShine unable to resolve the active virtual display on resume. Previously this caused the resume loop to spin until the user killed the process. When the device-enumeration call returns nullopt three times in a row, LuminalShine now closes and reopens the SudoVDA / MTT VDD handle (which on Windows triggers a device-stack rebuild that frees QDC from its post-TDR stuck state) and retries enumeration once. Rate-limited to once per 30 seconds so a permanently-broken driver can't be bounced in a tight loop.
  • Stream sessions now survive the Blackwell + Insider Preview NVENC TDR cascade end-to-end. This release ships the full recovery chain: when NVENC hangs on a long-running 4K@120 AV1 HDR session, the timeout-context telemetry records what state the encoder was in, the D3D11 retry helper waits out the kernel's TDR window instead of failing on the first re-create, the virtual-display reset path rescues the OS display API from its ERROR_NOT_SUPPORTED stuck state, and the helper-handshake backoff keeps the subsequent reconnect from cold-starting into a deadlock loop. The four pieces work together; in isolation each only addresses part of the failure pattern.
  • Wix Bootstrapper now warns about Insider Preview encoder constraints. The SudoVDA radio button description in the installer and reconfigure flows now explicitly calls out: on Windows Insider Preview builds, SudoVDA only supports HEVC and AV1 encoding (with or without HDR). The MTT VDD description and tooltip mirror this — if you plan to stream using H.264 on an Insider build, choose the MTT Virtual Display Driver instead. SudoVDA remains the default selection.
  • About page detects the Insider channel and reports it correctly. On a Canary, Dev, Beta, or Release Preview host the page shows the channel name as a status badge and reports the OS version as Build NNNNN (the meaningful number on Insider) rather than a stale 24H2-style identifier. On a GA host the badge reads "Release (GA)" and the version uses the standard display-version format.

Automated release for 26.05.0-beta.3.

Full Changelog: 26.05.0-beta.2...26.05.0-beta.3

LuminalShine Code Architecture: @NorthernLights

Don't miss a new luminalshine release

NewReleases is sending notifications on new releases.