Changelog

LuminalShine release notes are mirrored from github.com/NortheBridge/luminalshine/releases and regenerated on every documentation build. For installer downloads, asset checksums, and the source diff for any release, follow the tag link in that release’s entry below.

Releases are listed newest first. Both GA and pre-release versions appear — pre-releases are tagged accordingly in each entry’s metadata line.

LuminalShine 26.09.1

Tag: 26.09.1 · Released: 2026-09-23

LuminalShine 26.09.1

Important

Bundled virtual display driver: LuminalVGD v0.1.0-alpha.9
Signed driver 0.1.0.27 · protocol 0.10 · Build 27 — unchanged from 26.09.0.

LuminalShine 26.09.1 is the release where the browser streaming path becomes part of the official Windows build. WebRTC is now compiled in, its runtime is shipped with every installer and portable archive, and a fresh build fetches a checksum-pinned wrapper directly from the NortheBridge repository. This release also makes browser sessions and Moonlight sessions hand off cleanly, tears abandoned browser sessions down, fixes two display-helper races behind slow starts and quick reconnects, and closes several Mission Control polish gaps.

WebRTC ships in the official Windows build

  • WebRTC is enabled by default on Windows (#176, fixes #157). Previous official builds exposed the Play page while compiling the host-side WebRTC implementation out. Release CI now enables it explicitly, packages libwebrtc.dll, and stages the DLL beside the test executable as well.

  • The wrapper comes from a pinned NortheBridge release. CMake downloads libwebrtc-win-x64-release.zip from NortheBridge/libwebrtc tag luminalshine-m150.1, verifies SHA-256 45fec22b910b92b414da4a1fa65179baa4367e4db13c43aefcf55b36490d77a0, and reuses the shared cache on later builds. A missing header or runtime DLL is a hard configuration error instead of a package that starts without its dependency.

  • Moonlight and browser capture are mutually exclusive. A Moonlight launch preempts an existing browser session; a browser connection is refused while Moonlight is streaming or still connecting. The launch-pending latch spans the HTTP handler, RTSP hand-off and bounded connection window so two capture workers cannot divide the same LuminalVGD frame ring (#176, #180).

  • Recovery keyframes are acknowledged at the WebRTC encoder boundary. Browser sessions no longer log repeated recovery-IDR timeouts simply because the acknowledgement previously lived only in the RTSP sender.

  • Lost browser links now clean themselves up (#181). The luminalshine-m150.1 wrapper exposes peer and ICE state callbacks. A failed connection closes immediately; a disconnected connection gets a 10-second recovery window before the session, capture worker and virtual display are released. Short network hiccups and successful ICE restarts remain transparent.

  • Better browser-session diagnostics. The host records negotiated video, the first accepted keyframe, data-channel and peer/ICE transitions, and 30-second egress windows; session counters are exposed through the WebRTC session API.

  • Esc reliably leaves fullscreen. Holding Esc exits native fullscreen and the browser fallback mode, with an on-screen hold indicator and a one-time explanation.

WebRTC can still be disabled for a custom build with -DSUNSHINE_ENABLE_WEBRTC=OFF. The classic Moonlight path remains unchanged and is still the path to use when broad native-client compatibility is the priority.

Display and reconnect reliability

  • Slow display-helper startup no longer loses a successful APPLY (#182). The host previously gave up on the anonymous-pipe handshake after 500 ms, reconnected with the wrong protocol shape and then waited ten seconds for a reply the decoder could never recover. Display-helper connections now use one bounded, process-aware handshake and keep the APPLY transaction on the same connection.

  • Quick relaunches no longer race duplicate REVERT requests (#183). Session cleanup and app-exit cleanup now serialize the duplicate check with the transactional restore, preventing a second helper from starting against an already-restored topology. If a helper genuinely exits during the activation APPLY, the host restarts it and retries once instead of spending the full activation timeout on a dead process.

  • These fixes apply to both Moonlight and browser sessions because they harden the shared Windows display-management path.

Mission Control polish

  • The LuminalShine logo loads everywhere (#184). The reserved /images route now serves the branded logo used by the shell, login page and logged-out screen. Route coverage prevents future Web UI image references from silently becoming broken images.

  • The YUV 4:4:4 switch now reflects and preserves the saved value (#184, follow-up for #178). Configuration booleans returned as strings are normalized consistently, fixing the same class of stale-toggle problem for Steam Library, Lossless Scaling and other boolean-backed settings.

  • Configuration hot-apply respects active WebRTC sessions. Autosave and app-lifecycle paths now defer global configuration replacement while either a Moonlight or browser stream is active, instead of checking only RTSP sessions.

LuminalVGD driver

This release keeps LuminalVGD v0.1.0-alpha.9, the same signed package shipped with 26.09.0:

Driver version

0.1.0.27 (DriverVer 08/07/2026, 0.1.0.27)

Protocol

0.10 (handshake build 27, capabilities 0xfe5)

Watchdog

10-second lease watchdog

Signing

NortheBridge Foundation OV certificate, RFC 3161 timestamped

Build 27 carries the D3D12 timeline-fence transport used by Direct-to-Encode and the teardown/drain protections that prevent the Windows indirect-display host from being terminated during monitor departure, RDP/console transitions or a delayed ring hand-off. Because the bundled driver has not changed, upgrading from 26.09.0 does not normally require a driver replacement or restart page.

Project, tests and release engineering

  • Windows release builds now compile and package WebRTC from the checksum-pinned NortheBridge wrapper, and the test binary receives the same runtime DLL.

  • WebRTC exclusivity, peer-link liveness, display-helper connection policy, duplicate-revert suppression, static image routes and configuration boolean coercion all have regression coverage.

  • The signed release path uses SSL.com eSigner with a maintained Java 11 trust store while retaining strict TLS validation and post-sign Authenticode verification (#185).

Upgrading

  • Install over 26.09.0 with the installer; settings, pairings and the LuminalVGD driver are kept.

  • An active stream ends during the upgrade and can be restarted after the service returns.

  • Hard-refresh the Web UI once (Ctrl+F5) if a browser still shows cached assets from 26.09.0.

  • Existing Moonlight clients continue to pair and connect as before. Browser streaming is now available from the Play page without a custom build.

Checksums (SHA-256)

453771562df6997c23699e16cd884c9e82da4390ace97104224a588d1c8c6dfc  LuminalShine_x64-debuginfo.7z
6191f15f2db44bbc6f53e8592fcfcc8f0254d3f0d08be069b00a08c7ac000a63  LuminalShine_x64-installer.exe
ad1027943852ae89ff6cd6bd9c18868e16dfc3f35a920fb7cb021781a6dfa7a1  LuminalShine_x64-portable.zip

A SHA256SUMS file is attached to this release for sha256sum -c verification.

Full changes: 00da7376…6c377335

LuminalShine 26.09.0

Tag: 26.09.0 · Released: 2026-09-05

LuminalShine 26.09.0

Important

Bundled virtual display driver: LuminalVGD v0.1.0-alpha.9
Signed driver 0.1.0.27 · protocol 0.10 · Build 27 — unchanged from 26.08.4.

LuminalShine 26.09.0 is the Mission Control release: the Web UI has been rebuilt from the ground up as a single pane of glass, with everything you used to check across Dashboard, Clients, Applications, Troubleshooting and About visible from one Overview and every detail opening in place. Under the hood it closes the NVENC crash family that hit RTX 30-series (Ampere) hosts, keeps the streamed cursor steady on the current Windows Insider build, unlocks 5.1 / 7.1 audio over WebRTC, and teaches the installer to say when Windows needs a restart.

Thanks to @magalz for the RTX 30-series fixes in this release — see Encoder reliability below.

Mission Control — the new Web UI

Open the Web UI after upgrading and you land on a different application. The design goal was one screen that tells you the state of the host at a glance, with details and settings that open beside what you are looking at instead of on another page.

The shell

  • A 56 px icon rail on the left replaces the top navigation: Overview, Stream, Play, Library, Clients, Display, Settings, Diagnostics. Old bookmarks keep working — every legacy route redirects to its new home.

  • An always-on host strip across the top shows host status, active encoder, display backend, network port and address family, session monitor state and any open incidents, plus the global save indicator.

  • Global search in the strip finds pages, settings sections, individual settings, apps and paired clients from one box. An app hit opens the Library filtered to it, a client hit opens that client, and free text jumps straight to the matching setting.

  • A right-hand inspector column carries the details, editors and actions for whatever is selected on the page. On narrow screens it becomes a slide-in drawer with a floating toggle; Escape closes it.

  • New design tokens throughout: dark chrome, a single gold accent, IBM Plex Sans and Mono. Bootstrap is gone from every rebuilt page.

Overview replaces the Dashboard. Host identity, live session, capture health, recent sessions, connected clients and a “Needs attention” list of everything the old page surfaced as banners, all on one screen.

Stream (replaces Stats). A session list on the left, the selected session in the middle with a live/ended header, six headline numbers, a range selector (full session / 3 / 5 / 15 min) and three charts — encode latency, actual FPS and network throughput. The inspector holds identity, connection and quality rows, and lets you disconnect an active session or delete an ended one.

Library (replaces Applications). A cover grid with source filters (Playnite, Steam, custom), a text filter, Playnite integration status with a force-sync action, and the full app editor for launch, prep commands, display overrides and frame generation.

Clients (replaces Client Management). A table of paired devices with device, display, status and last-seen columns; the inspector edits the selected client’s display and stream overrides or pairs a new device by PIN. API tokens live on the same page.

Display (replaces the LuminalVGD Control Panel). Driver card (bundled vs installed version, signature, status), the host’s physical and virtual outputs, the four configuration groups (backend and sessions, disconnect and pause behaviour, modes and refresh, HDR), the driver transition prompt, golden-snapshot export and delete, and an inspector that runs the driver diagnostic automatically, with copy and restart-driver actions.

Settings. A left sub-navigation of the nine sections replaces the accordion; the active section is in the URL, and search results land on and highlight the exact field. The three separate save surfaces are collapsed into one Changes panel in the inspector: last save time, pending state, validation, a needs-restart list of the settings that require a service restart (port, address family, UPnP, certificate and key), the recently changed values with before/after, Discard pending and Apply & restart. Settings still auto-save; the panel simply tells you what happened.

Diagnostics (merges Troubleshooting, Logs and About). Health cards for the GPU and display stack (TDR count, stack state, last reset with detail), the capture and render stack (engine, DLSS / DLAA / Frame Generation detection, tips) and drivers and buses; header actions for export logs, force close and restart; the crash-dump alert with a one-click bundle export; and the log viewer with a source selector, chunked search with context snippets, follow-the-tail and per-level tinting. The inspector holds the copyable host report (plain text or Markdown, ready to paste into a bug report) and the five reset actions. The full About page remains one click away.

Web links now point at the Moonlight community Discord invite, with a note that LuminalShine lives in the server’s Experimental category.

Encoder reliability — RTX 30-series and every NVENC host

  • AV1 probing on GPUs without AV1 encode (#156, by @magalz). On RTX 30-series / Ampere hosts (an RTX 3080 Ti in the report) the NVENC probe attempted AV1, the driver rejected it, and the failure took H.264 and HEVC down with it — the host fell back to software encoding or crashed outright. The capability check now knows which NVIDIA generations encode AV1, with regression tests for Turing, Ampere, Ada and future device-ID ranges. Fixes #147.

  • Safe teardown of a never-initialized NVENC session (#159). The crash behind the Ampere report was general: tearing down a session that was opened but never initialized unregistered an async event that had never been registered. That path is now closed for every codec, and the terminate handler’s one-shot guard no longer turns a second fault into a silent exit.

  • A faulting codec no longer costs the whole encoder (#162). When one codec’s probe faults, the next pass skips only that codec instead of discarding NVENC entirely and dropping to libx264 forever.

Capture

  • Cursor held visible while the OS visibility flag flaps (#167). Windows 11 Insider build 29648 has a documented bug that makes the mouse cursor blink; the streamed cursor mirrored it. A short hold on the visibility flag keeps the streamed cursor steady without adding latency on healthy builds.

Audio

  • 5.1 and 7.1 over WebRTC (#165). Surround was previously only available on the classic Moonlight path: browsers never offer multichannel Opus, so a WebRTC session could only ever be stereo. The built-in web client now adds a multichannel Opus payload to its own offer, the host selects it and restates the channel layout from the same table the native encoder uses, and a Stereo / 5.1 / 7.1 selector in the WebRTC session settings is saved with the client profile. If the peer cannot take surround the session falls back to stereo, says so in the UI, and downmixes with proper ITU-R BS.775 coefficients instead of dropping the centre channel and most of the dialogue with it. 5.1 is the well-trodden path in Chrome; treat 7.1 as the less exercised of the two.

Installer

  • Restart page when the LuminalVGD driver is updated (#172). Some hosts keep the previous driver image loaded until Windows restarts. When an install or upgrade moves the bundled driver to a newer version, the installer no longer closes itself; it ends on a page naming both versions with Restart Now and Restart Later, confirms a deferral, and registers the pending restart with Windows either way (exit code 3010 for silent installs, so winget and management tools report it). Upgrading from 26.08.3 does not change the driver, so this page will not appear on this upgrade.

Project, tests and CI

  • The README gains a Project Contributors section (#174), starting with @magalz.

  • The Windows coverage gate reports real data again (#160), and the test-only Simple-Web-Server client use-after-free that crashed the coverage build was root-caused and fixed at the source (#164).

  • The MSI upgrade-compatibility baseline advanced to the 26.09.0 table set (#175); only the renamed Web UI asset components moved, and the invariants gate (UpgradeCode, services, pinned component GUIDs) is unchanged.

Upgrading

  • Install over 26.08.4 with the installer; settings, pairings and the driver are kept. A stream that is active when you upgrade ends and can be restarted a minute or two later.

  • The Web UI’s old URLs redirect. Hard-refresh once (Ctrl+F5) if the browser shows the previous interface from cache.

  • Nothing in this release changes the streaming protocol; existing Moonlight clients pair and connect as before.

Checksums (SHA-256)

434d47183a56a51d6e59d30a914cedf30ff58b8618201a09ae7c86c891d6933a *LuminalShine_x64-installer.exe
9e1c376825bea4024a9925359605e332241dd8c84458fb2c3e8beecd45e0b4ec *LuminalShine_x64-portable.zip
e82c8f6724457c5c68085cde89e83c235627fd4668ef30b5cfed7e6b98a2c8b8 *LuminalShine_x64-debuginfo.7z

A SHA256SUMS file is attached to this release for sha256sum -c verification.

LuminalShine 26.08.4

Tag: 26.08.4 · Released: 2026-08-22

LuminalShine 26.08.4

Important

Bundled virtual display driver: LuminalVGD v0.1.0-alpha.9
Signed driver 0.1.0.27 · protocol 0.10 · Build 27 · driver build date August 7, 2026

LuminalShine 26.08.4 is a stable Windows reliability and documentation release. It improves behavior under heavy GPU-memory pressure, restores the preferred NVIDIA driver-settings path with compatibility fallback, makes forced shutdowns cleaner when the graphics stack is wedged, and brings the public architecture documentation in line with the implementation—including the existing AMD AMF hardware-encoding pipeline.

Highlights

  • VRAM paging-stall mitigation: LuminalShine now maintains a cooperative IDXGIAdapter3 video-memory reservation for each active adapter. The reservation tracks the process working set with bounded headroom, observes Windows VidMm budget changes, and logs material usage, budget, reservation, and over-budget transitions.

  • Paging-storm pressure relief: repeated large budget moves are recognized as a paging storm. Capture temporarily halves its claim rate while VidMm is moving allocations in bulk, then automatically returns to full rate after the budget settles. This reduces LuminalShine’s contribution to GPU/PCIe stalls during high-pressure game transitions.

  • NVIDIA power-profile compatibility: the official NvAPI_DRS_SetSetting interface is preferred again so legacy DRS settings—including the high-performance power-state pin—work on current R610-era drivers. The NVIDIA-App-era interface remains available as a call-time fallback.

  • Cleaner recovery from wedged shutdowns: if orderly termination cannot complete within ten seconds, LuminalShine now exits without deliberately generating a crash dump in the middle of a graphics-stack collapse; the service wrapper can restart it cleanly.

  • AMD AMF architecture reference: a transparent 1672 × 941 PNG at mmd/AMD_AMF_PIPELINE.png documents the already-implemented FFmpeg/AMF hardware path, including D3D11 capture/input, runtime probing, H.264/AVC, HEVC, and AV1 selection, color/HDR handling, low-latency controls, safeguards, hardware/driver requirements, and encoded-frame delivery.

AMD AMF support in this release

AMD AMF hardware encoding was already implemented in LuminalShine and remains fully available in 26.08.4 through the FFmpeg AMF encoders. At startup LuminalShine probes the installed AMD AMF runtime (amfrt64.dll) and per-codec capabilities, binds AMF to a D3D11 device, and exposes H.264/AVC, HEVC, and AV1 when supported by the installed AMD GPU and driver. The new diagram makes that implemented path easy to audit; this release does not replace the encoder implementation with documentation-only behavior.

Documentation and project presentation

This release contains the complete Claude-assisted documentation series merged after 26.08.3:

  • README modernization (#150): refreshed the project overview and feature list; linked the official LuminalShine product page; described LuminalVGD as the shipped first-party virtual-display backend; updated Windows system, hardware, software, development, WebRTC, encoder, Vue/Tailwind, WiX 7, WinGet, portable-package, licensing, and contributor information.

  • Correct documentation URL (#151): replaced the stale documentation address with the official appdocs.northebridge.com/projects/luminalshine/en/latest/ site.

  • Direct-to-Encoder architecture (#152): corrected the capture description to show DWM rendering into LuminalVGD, frames and HDR metadata crossing the shared-texture VGD ring, and the D3D11, D3D11-on-D3D12, and native D3D12 encode paths. WGC is documented as the seamless mid-stream fallback with active D2E restoration and DXGI Desktop Duplication as the last-resort tier.

  • Remove obsolete SudoVDA references (#153): aligned the README with the current product by identifying LuminalVGD as the sole virtual-display backend.

  • AMD AMF pipeline chart (#155): added the transparent PNG architecture chart covering the implemented AMF pipeline, supported codecs, runtime/capability probing, safeguards, and requirements.

Windows stability work

The VRAM stability change in #154 includes:

  • one idempotent, process-lifetime VRAM keeper per adapter LUID;

  • cooperative reservation sizing based on current local-memory use plus 12.5% headroom, clamped to Windows’ available reservation budget;

  • reservation hysteresis to avoid churn from ordinary frame-to-frame allocation movement;

  • event-driven VidMm budget monitoring with a polling fallback;

  • paging-storm detection after three significant budget changes within five seconds, with a rolling three-second recovery hold;

  • automatic temporary capture-rate reduction during a storm and full-rate restoration afterward;

  • explicit telemetry for VRAM usage, budget, reservation, over-budget state, and storm start/end;

  • official-first NVAPI DRS setting resolution with compatibility fallback; and

  • forced-exit behavior that avoids creating misleading crash dumps for known wedged teardown paths.

Build and release verification

  • Built by the repository’s official Windows release workflow from commit 1077efcd82bc9470c099419a43c776c84cbeb937.

  • Signed LuminalVGD bundle download verified against its pinned SHA-256 before packaging; the bundled catalog and driver DLL passed Authenticode validation.

  • Native build, executable signing, WiX MSI/portable packaging, MSI upgrade-compatibility and invariant gates, MSI/bootstrapper signing, staged signature verification, C++ tests, configuration-consistency checks, and debug-symbol packaging completed successfully in GitHub Actions run 32600108123.

  • The release tag is pinned to the exact commit that produced the binaries.

Downloads

  • LuminalShine_x64-installer.exe — recommended signed Windows installer; contains the MSI payload and bundled LuminalVGD driver.

  • LuminalShine_x64-portable.zip — portable Windows package.

  • LuminalShine_x64-debuginfo.7z — debug symbols for diagnostics.

Checksums (SHA-256)

912be4bd520f9af591a40dfb815e78a41d6efc3a861eef428bd7987ed2f9d3eb  LuminalShine_x64-installer.exe
b14607795481c03b6762fcd9745fa3801b9b9c368a22944041fc7d3861947f9b  LuminalShine_x64-portable.zip
d654e8396fc93382bb6205f10be291eced2a3641a4a5413adbec31369f114836  LuminalShine_x64-debuginfo.7z

The attached SHA256SUMS file can be checked with sha256sum -c SHA256SUMS or compared with Get-FileHash -Algorithm SHA256 on PowerShell.

Full change list

  • #150 — README: modernize for current LuminalShine

  • #151 — README: correct documentation site URL

  • #152 — README: describe the Direct-to-Encoder capture architecture

  • #153 — README: drop SudoVDA references

  • #154 — Windows: mitigate VRAM paging stalls

  • #155 — Docs: add AMD AMF pipeline architecture chart

Full comparison: 26.08.3...26.08.4

LuminalShine 26.08.3

Tag: 26.08.3 · Released: 2026-08-13

LuminalShine 26.08.3

LuminalShine 26.08.3 is a performance-focused release: it removes a hard ~21 fps delivery ceiling that affected high-resolution HDR sessions and cuts standing capture-to-send latency from ~145 ms to ~6 ms, restoring full client-requested frame rates (verified live at 3456×2160@120 YUV 4:4:4 10-bit HDR: 119 fps sustained). It bundles the signed LuminalVGD v0.1.0-alpha.9 (driver 0.1.0.27, protocol 0.10, Build 27, driver build date 08/07/2026).

The root cause was OS timing behavior on current Windows builds: timed waits that expire cost a full ~15.6 ms timer quantum even at 0 ms timeouts, and timer-resolution raises can be silently ignored for windowless background service processes. Two per-frame loops each stacked three quanta (3 × 15.6 ms ≈ the observed 47 ms/frame cadence). All hot-path waits now use quantization-immune primitives, and the pipeline self-reports its timing health in every log.

Highlights

  • Full-rate frame delivery: the capture ring poll and the egress loop’s sideband event checks no longer pay timer quanta; sessions deliver at the client-requested rate (21 → 119 fps in the field) with capture-to-send latency of a few milliseconds.

  • Real-time worker timing profile: the isolated capture/encode worker raises timer resolution, opts out of background power throttling, runs at high priority (restoring parity with the pre-isolation architecture), and logs its measured sleep quantum at startup — support bundles now prove which timing regime a host is in.

  • Stream-ordered CUDA interop (YUV 4:4:4 10-bit): the per-frame map/copy/unmap sequence is enqueued on a dedicated non-blocking stream with polled completion and a bounded 1 s deadline that fails into normal session recovery instead of blocking until GPU reset. Falls back to the synchronous path automatically when unavailable.

  • Pipeline health telemetry: one 30-second line per stage — capture cadence (driver-published vs host-claimed frames), encode cycle, NVENC phases, worker egress, and broadcast cycle — attributes any future delivery ceiling to a single stage from a standard log.

  • Attributable capture reinits: display-stack-triggered encoder rebuilds now log their trigger instead of restarting silently.

  • Wider worker video pipe: the worker-to-host video channel grows from 64 KiB to 4 MiB, decoupling encode cadence from the host reader’s drain cadence.

  • Bundled LuminalVGD v0.1.0-alpha.9: signed driver 0.1.0.27, protocol 0.10 fence-only transport, teardown/drain fixes for stall-free monitor departure.

Also in this release (26.08.2 → 26.08.3)

  • Strict-client session startup: encoder prewarm at launch and a bounded ANNOUNCE hold for clients with tight connection budgets (Xbox, webOS).

  • Decoder-safe egress QoS: predictive frames after a lost packet are withheld until a fresh IDR; bitrate-aware wire pacing shapes bursts to the negotiated rate.

  • LuminalVGD host resilience: deferred ring-generation binding, control-device self-heal after I/O failure, and clean WGC pivot when a ring is unavailable.

  • Display helper: calmer apply verification and pre-capture modeset ordering.

  • Outbound TLS floor raised to 1.2; SSLv2/v3 disabled on GameStream HTTPS.

  • Mailbox and process-lifecycle hardening in the session core.

  • Modernized streaming architecture diagrams in the documentation.

  • Release tooling: the MSI upgrade-compatibility oracle now normalizes the Upgrade table’s version-bearing fields, so version bumps no longer trip the gate while UpgradeCode and upgrade semantics remain enforced.

Checksums (SHA-256)

f6dfe7688759df0358d953a85a755d6425ba940a21a607ed90a0a0ba87e83173  LuminalShine_x64-installer.exe
3d8ba1b781d7340684c1e630e238fd82823cc440736e41e947fdf156977d5bce  LuminalShine_x64-portable.zip
c459cc97c2e49c091bb816088b3a0759da8b78c86769871b4074991a8e2c3da7  LuminalShine_x64-debuginfo.7z

A SHA256SUMS file is attached to this release for sha256sum -c verification.

LuminalShine 26.08.2

Tag: 26.08.2 · Released: 2026-08-05

LuminalShine 26.08.2

LuminalShine 26.08.2 is a stability-focused release for direct-to-encode streaming. It introduces a stricter ownership boundary between LuminalVGD’s display surfaces and the hardware encoder, moves capture/encoding into an isolated worker process, and bundles the signed LuminalVGD v0.1.0-alpha.8 (driver version 0.1.0.24, protocol 0.10, Build 24).

The goal of this architecture is to prevent a stalled, replaced, or retired indirect-display swapchain from wedging LuminalShine’s main process or the Windows display stack. Native D3D12 encoding remains available; this release does not replace D3D12 with a lower-fidelity capture path and does not inject hooks into games.

Highlights

  • Isolated capture and encode worker: video capture and hardware encoding now run outside the main LuminalShine process. A capture/encoder failure can be detected and recovered without taking the control, audio, input, or session-management process down with it.

  • LuminalVGD surfaces are decoupled from encoder lifetime: the worker copies each accepted VGD frame into a bounded pool of worker-owned surfaces, releases the VGD ring slot, and only then submits the worker-owned resource to NVENC, AMF, or QSV.

  • Immutable Build 24 fence transport: direct VGD capture uses the protocol 0.10 fence-only contract. A ring generation is admitted only after stable metadata snapshots, and synchronization semantics are not downgraded inside the same generation.

  • Deterministic failure handling: a broken or inconsistent ring generation is marked dead and rebuilt instead of being silently reused through a weaker synchronization path.

  • Safer fallback boundary: WGC/DDA fallback is confined to the isolated worker. Fallback capture cannot retain or reinterpret a retired LuminalVGD surface.

  • Native D3D12 retained: supported D3D12-to-NVENC operation remains available alongside D3D11 NVENC, AMD AMF, and Intel Quick Sync paths.

  • Signed Build 24 driver included: the installer bundles the current stable LuminalVGD alpha.8 package and verifies its pinned SHA-256 during the release build.

Direct-to-encode reliability

The direct path now observes a strict resource-ownership sequence:

  1. LuminalVGD publishes a completed frame and fence value through the protocol 0.10 ring.

  2. The isolated worker waits for the advertised completion fence.

  3. The frame is copied into one of four bounded worker-owned surfaces.

  4. The LuminalVGD ring slot is released immediately after the copy completes.

  5. The worker-owned surface is converted or encoded through the selected hardware backend.

  6. If the ring generation changes, the previous generation is retired without allowing encoder work to retain its surfaces.

This prevents encoder back-pressure from extending the lifetime of IddCx-owned swapchain resources. It also removes the unsafe condition where NVENC could still reference a surface while Windows or LuminalVGD was deleting or reassigning the corresponding swapchain.

Worker recovery and admission controls

  • Direct capture waits for two mutually consistent ring snapshots before admitting a new generation.

  • Ring admission is bounded to six seconds so an unusable generation cannot block session startup indefinitely.

  • Worker-owned frame storage is bounded to four surfaces, limiting queue growth and making overload behavior predictable.

  • A failed worker can be terminated and recreated without restarting the main LuminalShine service.

  • Capture fallback is selected inside the worker and does not weaken the active VGD generation’s synchronization contract.

Display and client behavior

  • Client-requested resolution, refresh rate, HDR, and chroma behavior remain controlled by the negotiated stream configuration.

  • HEVC 4:4:4 HDR workflows remain supported where the client and encoder support them.

  • Native frame-generation refresh handling remains available without requiring a global frame-generation override.

  • LuminalShine does not hook a game’s Present/Present1 path; D3D11 and D3D12 games continue to render through the Windows compositor and LuminalVGD display pipeline.

State and recovery hardening

This release includes the state-file and temporary-state handling improvements introduced during the 26.08 series. Session recovery tolerates interrupted temporary writes, avoids treating stale temporary files as authoritative state, and restores display topology through the normal recovery path.

Bundled LuminalVGD

  • Release: LuminalVGD v0.1.0-alpha.8

  • Driver file version: 0.1.0.24

  • Protocol: 0.10

  • Driver build: 24

  • Package: LuminalVGD-v0.1.0-alpha.8-x64.zip

  • Package SHA-256: 1cbe52890c732e5dfb6d2455d9035eb4c7881ab19dd49d89343b8b1fdbf807c2

The LuminalShine release workflow downloaded this exact package, checked the pinned digest, and validated its signatures before producing the installer.

Installation and upgrade

Use LuminalShine_x64-installer.exe for a normal installation or upgrade. The installer and bundled driver may require elevation. Reboot if Windows requests it after replacing the display driver; otherwise, restart LuminalShine before beginning a new test session.

The MSI upgrade-compatibility and invariant gates passed for this release. Existing LuminalShine installations using the same UpgradeCode are upgraded in place, while service identities, component GUIDs, custom-action contracts, and installer feature conditions remain protected by CI.

The portable ZIP is also provided for advanced testing. Driver installation and service integration still require the installer or equivalent elevated setup.

Validation performed by release CI

  • Downloaded and checksum-verified LuminalVGD alpha.8 Build 24

  • Validated bundled driver signatures

  • Built LuminalShine with the UCRT64 Windows toolchain

  • Signed application executables

  • Built and signed the MSI and bootstrapper installer

  • Verified Authenticode signatures on staged release artifacts

  • Passed MSI upgrade-compatibility comparison

  • Passed MSI invariant validation

  • Passed Windows unit tests and configuration-consistency checks

  • Produced installer, portable, and debug-information artifacts from merge commit b46405043aa5f6951083453c4123710266408c73

Release assets

  • LuminalShine_x64-installer.exe — signed installer and recommended download

  • LuminalShine_x64-portable.zip — portable application package

  • LuminalShine_x64-debuginfo.7z — debugging symbols for crash and hang investigation

Notes and limitations

  • Recovery isolation reduces the blast radius of capture/encoder failures; it cannot prevent an independent GPU driver or operating-system TDR.

  • Hardware codec, 10-bit, HDR, and 4:4:4 availability still depend on the GPU, driver, client, and negotiated codec profile.

  • Do not replace the bundled driver DLL or catalog independently. Windows driver package integrity and signing must remain intact.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.08.1…26.08.2

LuminalShine 26.08.1

Tag: 26.08.1 · Released: 2026-08-04

LuminalShine 26.08.1

LuminalShine 26.08.1 is a stability-focused release for the LuminalVGD direct-to-encoder path introduced in 26.08.0. It addresses the shared GPU-resource lifetime and recovery failures that could produce a frozen picture, brief continued audio, and eventually an unreachable host. It also corrects worker startup, requested display-mode handling, topology cleanup, and interrupted state-file writes.

This release continues to bundle the signed LuminalVGD v0.1.0-alpha.7 / Build 23 package used by 26.08.0:

  • Driver version: 0.1.0.23

  • Driver build: 23

  • Protocol: 0.9

  • Package SHA-256: afe890d0b0b94232b20eb0b6e3aac738e2f1ea73c66572541b9bb1b2e97d5afe

The release build downloads the signed driver archive from the LuminalVGD GitHub release and verifies it against the pinned SHA-256 digest. Signed driver binaries and catalogs are not stored in the LuminalShine source repository.

Recommended update: Hosts running 26.08.0 should upgrade to 26.08.1, especially systems using LuminalVGD direct capture, HDR, high refresh rates, HEVC 4:4:4, or long-running sessions.

Highlights

Direct capture is decoupled from encoder lifetime

LuminalVGD ring textures are no longer kept in an encoder-owned lifetime while NVENC or another encoder is consuming a frame.

  • Claimed LuminalVGD frames are copied into LuminalShine-owned mailbox textures.

  • The driver ring slot is released after the bounded copy instead of remaining coupled to encoder progress.

  • A stalled or rebuilding encoder cannot indefinitely stop the driver producer from recycling its ring surfaces.

  • Ring ownership, generation, transport, and slot validation remain enforced before a frame is accepted.

  • Direct capture retains the negotiated resolution, refresh rate, HDR state, and chroma behavior.

This changes the failure boundary: encoder latency or teardown can no longer hold LuminalVGD’s IddCx-facing surfaces hostage and turn a local encode problem into a display-wide resource deadlock.

Capture and encoding worker isolation

The latency-sensitive capture and encode pipeline now runs in a bounded worker process for supported streaming sessions.

  • The main LuminalShine service supervises the worker with startup, readiness, liveness, and shutdown deadlines.

  • A capture or encoder failure is contained to the worker instead of permanently wedging the host control plane.

  • Worker readiness requires a real first encoded packet, not merely successful process creation.

  • The worker receives the encoder capabilities already validated by the parent, avoiding a second full encoder probe during client connection.

  • Startup errors and first-frame failures are returned explicitly to the parent for deterministic cleanup.

Exact LuminalVGD session handoff

Process isolation initially exposed a process-local state problem: a child process could not infer the parent’s active virtual-display session and could fall back to desktop capture. The handoff is now explicit and fail-closed.

  • The parent transfers the exact active LuminalVGD session and display identity.

  • Ring generation, slot count, selected transport, dimensions, format, and active state are validated in the worker.

  • Stale or mismatched ring identities are rejected.

  • A direct LuminalVGD worker cannot silently substitute Windows Graphics Capture or Desktop Duplication.

  • Authentication and process identity checks protect the local worker-control channel.

Requested client display modes are authoritative

Direct LuminalVGD sessions now preserve the client-requested mode throughout display preparation and worker startup.

  • Client resolution and refresh-rate requests are enforced for direct capture.

  • Capture readiness is tied to the requested virtual display rather than whichever physical display Windows currently exposes as primary.

  • Active-ring identity and dimensions must agree with the prepared display mode.

  • Startup failures clean up the staged virtual-display session instead of leaving a partial topology behind.

This is particularly important for 4K120, HDR, and high-refresh clients whose requested mode differs from the local physical monitor.

Recovery and shutdown improvements

  • Display-helper teardown uses phase-specific deadlines so a slow recovery step is not mistaken for a fatal global hang.

  • Worker failure is isolated from the RTSP control plane, allowing the host to remain reachable for cleanup and subsequent connections.

  • Direct capture fails closed when its LuminalVGD target is stale instead of entering an unintended WGC path.

  • Virtual-display staging and cleanup retain enough identity information to remove the correct session after partial startup.

  • GPU and ring recovery diagnostics now distinguish worker startup, first-frame, liveness, transport, and display-preparation failures.

  • Physical-display topology restoration is separated from encoder shutdown, reducing cross-component teardown races.

State-file reliability

Atomic state persistence and recovery have been hardened for interrupted and concurrent writes.

  • Unique temporary files are used instead of relying on a single shared .tmp pathname.

  • Legacy temporary files and backups remain recoverable.

  • A valid temporary or backup record can restore state after an interrupted replacement.

  • Failed replacements retain recoverable data instead of silently discarding the last usable state.

  • Cleanup recognizes the state files LuminalShine creates when running from the installed service context.

These changes cover display restoration and other persistent state used during launch, shutdown, and recovery.

Security and correctness

  • Worker IPC uses constrained local access and verifies the expected peer process.

  • Message sizes and transferred ring metadata are validated before use.

  • The worker binds to the parent’s exact LuminalVGD target and rejects stale generations or incompatible transport state.

  • Encoder capability transfer is bounded and validated rather than reconstructed from untrusted or incomplete child state.

  • Failure paths prefer an explicit connection error and cleanup over silently capturing the wrong display.

Upgrade notes

  1. Download and run LuminalShine_x64-installer.exe from this release.

  2. Existing paired clients and ordinary LuminalShine configuration are retained.

  3. The bundled LuminalVGD driver remains Build 23 / protocol 0.9; a driver re-sign or driver-version change is not required for this host update.

  4. Reboot only if Windows or the installer reports that an in-use component could not be replaced.

  5. After installation, verify LuminalShine 26.08.1 on the About page.

Portable-package users should stop all LuminalShine processes before replacing files. Driver installation and updates remain privileged system operations and are best handled by the installer.

Validation

  • Windows UCRT production build completed for luminalshine.exe.

  • The C++ test binary built successfully.

  • 67 focused tests covering LuminalVGD ring liveness, worker targeting, display-helper behavior, requested modes, state storage, and session identity passed locally.

  • GitHub Windows AMD64 build and coverage completed successfully.

  • CodeQL analysis passed for C/C++, Actions, C#, JavaScript/TypeScript, Python, and Ruby.

  • Vitest coverage, Codecov patch analysis, and bundle-size analysis passed.

  • The release source contains no signed driver packages, certificates, logs, ETLs, or locally generated binaries.

Known limitations

  • A genuine GPU device removal, reset, or hang still destroys the active graphics-device generation. LuminalShine can contain the worker failure and preserve service reachability, but Windows and the GPU driver must successfully recreate the graphics device before streaming can resume.

  • A machine-wide display-stack failure where Windows permanently rejects display-configuration queries can still require a reboot.

  • Clients may need to reconnect after a sufficiently long GPU outage even when LuminalShine remains reachable.

  • LuminalVGD direct capture deliberately fails closed if the worker cannot prove that it opened the exact prepared ring. It will not silently reduce fidelity or capture a physical display in place of the requested virtual display.

Downloads

  • LuminalShine_x64-installer.exe — recommended installer, application update, and LuminalVGD deployment path

  • LuminalShine_x64-portable.zip — portable application package

  • LuminalShine_x64-debuginfo.7z — symbols for crash dumps and field diagnostics

The raw MSI remains available inside the GitHub Actions build artifact for internal diagnosis but is intentionally not attached to the public release.

Reporting problems

For frozen video, missing first video, incorrect virtual-display modes, or recovery failures, include:

  • the complete LuminalShine runtime log, including worker-process output

  • LuminalVGD, IddCx, and DDisplay ETLs covering the failure when available

  • the client resolution, refresh rate, codec, chroma mode, and HDR state

  • the selected virtual-display mode and layout

  • relevant Windows events from Display, DxgKrnl, the GPU vendor driver, and WHEA

These details distinguish an encoder stall, worker startup failure, stale ring handoff, driver transport failure, client disconnect, GPU device removal, and machine-wide Windows display-stack failure.

Changes since 26.08.0

LuminalShine 26.08.0

Tag: 26.08.0 · Released: 2026-08-03

LuminalShine 26.08.0

LuminalShine 26.08.0 is the first stable release built around LuminalVGD, NortheBridge’s first-party virtual-display driver and direct-to-encoder capture path. It replaces the legacy SudoVDA integration, creates a display for each client, supports HDR10 and high-refresh streaming, and carries a substantially expanded recovery and diagnostic system for Windows graphics-stack failures.

This release bundles the signed LuminalVGD v0.1.0-alpha.7 package:

  • Driver version: 0.1.0.23

  • Driver build: 23

  • Protocol: 0.9

  • Package SHA-256: afe890d0b0b94232b20eb0b6e3aac738e2f1ea73c66572541b9bb1b2e97d5afe

The installer verifies the downloaded driver archive against that pinned digest during the release build. The signed driver DLL and catalog are taken from the LuminalVGD GitHub release and are not stored in the LuminalShine source repository.

Upgrading from an earlier 26.08.0 beta or release candidate is strongly recommended. The stable build includes a newer signed driver and host-side recovery behavior that must be deployed together.

Highlights

First-party per-client virtual displays

LuminalVGD is now the only supported virtual-display backend. LuminalShine creates and manages virtual monitors directly for streaming sessions instead of relying on SudoVDA.

  • Virtual display mode defaults to per_client.

  • Virtual display layout defaults to exclusive, placing the streaming display in the foreground while physical monitors are restored when the session ends.

  • Each identified client receives a stable, isolated display identity and its own requested resolution, refresh rate, HDR state, and configuration overrides.

  • Reuse is validated against both the requesting client and the monitor’s current Windows identity, preventing probe displays or another client’s display from being handed to a session.

  • Inactive monitors are resolved by driver identity rather than a mutable client label.

  • Anonymous or unidentified clients receive a safe launch-scoped allocation instead of sharing a misleading machine-wide identity.

  • If a requested display cannot surface, the driver session is cleaned up instead of becoming a zombie.

SudoVDA is no longer selected or touched at runtime. The installer removes legacy SudoVDA devices and packages the signed LuminalVGD driver as the supported path.

Direct-to-encoder capture

LuminalShine can consume LuminalVGD’s GPU frame ring directly, avoiding Windows Graphics Capture in the normal path.

  • Shared GPU textures travel from the IddCx swapchain to the encoder without a desktop-capture round trip.

  • The ring uses atomic slot ownership and monotonic frame delivery so the host cannot overwrite a texture while it is being encoded.

  • Swapchain reassignments are treated as bounded recovery windows rather than immediate fatal capture failures.

  • Capture admission waits for the driver’s first published frame instead of assuming that swapchain assignment alone means pixels are ready.

  • Hardware cursor shape and position are carried separately and composited at encode time, including cursor-only updates over an otherwise idle desktop.

  • Recoverable ring failures reinitialize capture without terminating every active streaming session.

  • A never-activated or unnamed virtual display is rejected before ring capture begins.

HDR10, 10-bit, and 4:4:4

LuminalVGD and LuminalShine now support HDR10 end to end on the virtual display path.

  • The virtual display exposes HDR-capable EDID and advanced-color metadata.

  • The ring carries FP16 scRGB frames when Windows advanced color is active.

  • LuminalShine converts and encodes HDR through HEVC Main10, including YUV 4:4:4 where supported by the selected encoder and client.

  • HDR metadata is preserved through direct capture.

  • A Virtual Display Control Panel setting allows the display’s peak luminance to be configured in nits.

  • Temporary ring recovery no longer silently forces the session from 4:4:4 to 4:2:0.

Actual codec and chroma availability still depends on the GPU encoder and Moonlight client. In particular, NVIDIA hardware support differs between HEVC and AV1 profiles.

Frame generation and refresh-rate handling

Every virtual display now advertises both the requested refresh rate and the applicable base rate from session creation. A game can enable or disable native frame generation without requiring LuminalShine to unplug the monitor or globally force frame generation.

  • The requested client refresh remains available for direct LuminalVGD capture.

  • Base and doubled refresh modes are advertised before a game starts.

  • Native game-controlled frame generation can select the appropriate rate without a mid-game monitor recreation.

  • Dynamic mode updates are understood when supported by the driver, while an already committed Windows mode is never evicted.

  • Refresh-rate requests are checked against the display’s actual supported mode list instead of being reported as successful after Windows silently selected a different rate.

Build 23 transport containment

Build 23 addresses a failure pattern found in Build 22 field traces: an optional direct-ring setup failure could repeatedly delete and reassign the IddCx swapchain, exhaust D3D resources, and eventually remove the only active monitor.

  • A rejected D3D12 timeline-fence ring now downgrades once, in place, to the keyed-mutex transport.

  • LuminalShine reads the transport actually selected by the driver for each ring generation and reopens its resources accordingly.

  • The downgrade does not unplug the monitor, recreate the display, or initiate another modeset.

  • Remaining non-device publication failures enter a drain-only state: the driver continues servicing IddCx frames without publishing direct-ring textures.

  • Exhausting the transport recovery budget marks direct capture unavailable while keeping the virtual monitor attached.

  • Only explicit GPU device-loss results—device removed, reset, or hung—enter device-reassignment recovery.

  • The recovery monitor can be scheduled before staged topology activation and will arm when the display becomes active, closing the startup race where no recovery observer was installed.

Graphics-stack and TDR recovery

The 26.08.0 cycle includes extensive recovery work based on real GPU-reset, black-screen, and QueryDisplayConfig failure traces.

  • A LuminalVGD ring in REBUILDING with a live heartbeat is treated as recovering rather than dead.

  • Recovery verdicts are carried from capture into the encoder so the session can wait without violating encoder lifetime rules.

  • Every recovery wait is paced and bounded.

  • A transient admission failure can be requalified when the driver and display become healthy, without restarting LuminalShine.

  • LuminalShine can transition from WGC fallback back to direct VGD capture when the driver becomes available.

  • Driver rebinding and service-owned device recovery can complete without requiring a Windows reboot in supported cases.

  • A topology lifeboat activates a physical display on a detected GPU hang when the virtual display is the only active output.

  • Sustained empty display enumeration and terminal QueryDisplayConfig failures are distinguished, latched, and surfaced to the UI.

  • Golden topology snapshots are retained when the display stack is too unhealthy to prove that a monitor was actually removed.

  • Display-helper wedges are escalated explicitly instead of producing an unbounded silent polling loop.

  • Deferred service restarts and leak reclamation respect both RTSP and WebRTC sessions and the current display-stack state.

A system-wide Windows graphics-stack failure can still require a reboot. LuminalShine can diagnose and contain that condition, but it cannot reconstruct a kernel display stack that no longer accepts display-configuration requests.

Encoder and streaming updates

  • Updated the NVIDIA Video Codec SDK integration to 13.1 and advanced the packaged FFmpeg build.

  • NVENC encode waits use corroborating evidence before being classified as a GPU reset; a single 100 ms timeout is no longer enough to declare a TDR.

  • The RTSS/NVIDIA Control Panel application-adjustment ladder is removed from the latency-sensitive RTSP ANNOUNCE path.

  • Deferred encoder probing is retried so HEVC, HDR, and 4:4:4 capability warnings reflect the eventual working GPU state.

  • Capture and conversion recovery distinguish synchronous and asynchronous encoder paths.

  • Cancelled sessions no longer run deferred start actions during teardown.

Installer and update reliability

  • The Windows installer ships the signed LuminalVGD Build 23 package and removes SudoVDA.

  • The release workflow pins both the LuminalVGD release tag and its SHA-256 digest.

  • Driver installation scans were reduced from potentially minutes to seconds.

  • PowerShell fallbacks invoked by the MSI use the native 64-bit interpreter.

  • Driver control-interface failures now include actionable open and handshake diagnostics.

  • Driver version, protocol, build, capabilities, and installation status appear in About and Troubleshooting.

  • Release tags are pinned to the exact commit used to build the binaries, eliminating drift between the About page, artifacts, and Git tag.

  • Windows release downloads continue to include the bootstrapper installer, portable ZIP, and debug-symbol archive.

Web UI and operational diagnostics

  • Added LuminalVGD Control Panel and About pages with live driver information.

  • Added Session Details v2 with client identity, display range, status pills, and expanded streaming statistics.

  • Display-stack degradation and terminal failure are surfaced as actionable UI state rather than only appearing in logs.

  • Every rotated log segment now includes product version and full source commit identity.

  • LuminalVGD ETW tracing can persist from boot, rotates per boot, and is included in crash/diagnostic bundles.

  • Added a top-level crash handler and minidump generation for otherwise unhandled process failures.

  • Tray shutdown now observes service termination correctly and reports the actual phase if shutdown cannot complete.

  • First-run password fields are only rendered when no credentials exist.

  • LAN Web UI access, credential-store corruption recovery, stats-only login, and hot credential application were corrected.

Security and correctness fixes

  • Fixed a pairing use-after-free and serialized HTTP connection I/O.

  • Client certificates are associated with the connection that presented them instead of a shared request-thread slot, preventing concurrent clients from receiving each other’s per-client settings.

  • Fixed X.509 ownership handling that could over-release certificate objects.

  • Preserved complete credential records across hot configuration updates.

  • Improved release signing failure detection so CodeSignTool errors cannot be mistaken for successful signing.

Defaults and behavior changes

  • virtual_display_mode defaults to per_client.

  • virtual_display_layout defaults to exclusive.

  • An invalid or misspelled layout value still fails safely to extended; exclusive physical-monitor deactivation must be selected deliberately.

  • LuminalVGD is the supported virtual-display backend. SudoVDA settings may be migrated where applicable, but SudoVDA itself is removed.

  • Both the client refresh and its base refresh are advertised for every virtual-display session.

  • RTSS interaction is disabled; LuminalShine no longer depends on RTSS for frame-generation control.

Upgrade notes

  1. Download and run LuminalShine_x64-installer.exe from this release.

  2. Allow the installer to update LuminalVGD and remove any remaining SudoVDA device.

  3. Reboot only if Windows reports that the previous driver or display stack cannot be rebound during installation.

  4. After installation, open Troubleshooting or Device Manager and verify:

    • LuminalShine version 26.08.0

    • LuminalVGD driver 0.1.0.23

    • protocol 0.9

    • build 23

  5. Existing paired Moonlight clients and ordinary streaming configuration are retained.

If upgrading from 26.08.0-rc.5, note that rc.5 accidentally bundled an older driver. Installing this stable release replaces it with the intended signed Build 23 package.

Known limitations

  • A genuine DXGI_ERROR_DEVICE_REMOVED, device reset, or device hang interrupts the active GPU generation. Build 23 contains the failure and preserves topology, but complete stream reconstruction depends on Windows successfully recreating the graphics device.

  • A machine-wide display-stack wedge in which QueryDisplayConfig permanently returns ERROR_NOT_SUPPORTED generally requires a Windows reboot.

  • Grand Theft Auto V Enhanced is unusually sensitive to Windows monitor and GPU device-change notifications. Build 23 eliminates unnecessary transport-driven monitor cycles, but a genuine GPU reset or session start/end topology change can still reach the game’s own device-change handling.

  • During a sufficiently long GPU outage, the Moonlight client may time out and reconnect even if LuminalShine and the virtual display remain alive.

  • Avoid manually invoking Win+Ctrl+Shift+B while an exclusive virtual display is the only active output.

Downloads

  • LuminalShine_x64-installer.exe — recommended installer and driver deployment path

  • LuminalShine_x64-portable.zip — portable application package; driver installation remains a privileged system operation

  • LuminalShine_x64-debuginfo.7z — symbols for crash and field-trace analysis

Reporting problems

For virtual-display, frozen-frame, or recovery failures, include:

  • the complete LuminalShine runtime log

  • LuminalVGD, IddCx, and DDisplay ETLs covering the failure

  • Windows System events from Display, DxgKrnl, nvlddmkm/the applicable GPU driver, and WHEA

  • the client resolution, refresh rate, codec, chroma mode, and HDR state

  • whether the session used exclusive, extended, per_client, or shared

Those files allow a driver transport failure, encoder stall, client disconnect, GPU device removal, and machine-wide Windows display-stack failure to be distinguished without guesswork.

26.08.0-rc.4

Tag: 26.08.0-rc.4 · Released: 2026-07-30 · Pre-release

Automated release for 26.08.0-rc.4.

What’s Changed

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.08.0-rc.2…26.08.0-rc.4

LuminalShine 26.08.0-rc.2

Tag: 26.08.0-rc.2 · Released: 2026-07-30 · Pre-release

Release candidate 2 for the 26.08.0 line. Covers everything since 26.08.0-beta.7 and bundles LuminalVGD build 15 (v0.1.0-alpha.5).

This candidate exists because the first rc.2 build carried a host crash that only showed up in the field. It was found, root-caused and fixed before publication, so rc.2 ships as a single corrected build rather than a broken release followed by a hotfix.


⚠️ Behaviour change: virtual displays no longer black out your monitors by default

virtual_display_layout now defaults to extended instead of exclusive.

Previously the default deactivated every physical monitor, leaving the virtual display as the machine’s only active output. That turned out to be the single configuration variable common to every machine-wide display-stack failure we have logs for — and the reason those failures needed a reboot instead of recovering:

  • With no hardware-backed output active, a display-driver reset has nothing to recompose onto. In one 2026-07-29 incident a user pressed Win+Ctrl+Shift+B to recover a hung game; 27 seconds later QueryDisplayConfig began failing and the display stack never came back. Windows logged no TDR at all — adapter loss with no recovery cycle.

  • The TDR topology lifeboat is supposed to light up a physical display when it detects a hang, but it enumerates through the same display API the failure removes. Under exclusive it had neither a target nor a working query.

extended keeps your monitors on and adds the virtual display alongside them.

The tradeoffs, plainly: your desk monitors stay powered during a stream, and because the desktop genuinely extends, an unconfined mouse can leave the streamed surface.

To restore the old behaviour, set it explicitly:

virtual_display_layout = exclusive

If you want the extended desktop without mouse wander, use extended_primary_isolated — the virtual display stays primary but sits far away in coordinate space.

Existing configs that already set this key are untouched. The High Performance preset still applies exclusive deliberately; switching it back off now restores extended.


Fixed

Host crash roughly 50 seconds after a boot-time start. crypto::signature() accepted an owning smart pointer where callers passed a raw certificate handle, and the smart pointer’s converting constructor was implicit — so every TLS handshake released a certificate reference it did not own. The over-release was deterministic on each handshake; the resulting access violation was probabilistic, which is why it surfaced as occasional unexplained restarts rather than a reliable failure. Also fixes a double release of every stored client certificate on each authenticated request. The whole bug class is now a compile error rather than a silent free. (#123)

Streams killed by a GPU “TDR” that never happened. The NVENC completion wait had a 100 ms budget, and exceeding it was reported as a GPU hang — terminating the session, dropping the virtual display’s frame ring, and refusing reconnects for ~30 seconds. Every field escalation examined was false: stalls of 100–105 ms, no device-removal status, and zero GPU resets in telemetry. The budget measured the wrong thing — the encoder’s input texture is also the colour-conversion render target, so the wait tracks game GPU load, not encoder throughput. The deadline is now derived from Windows’ own TDR constants (TdrDelay + TdrDdiDelay, 7 s on a stock system), polled in 100 ms slices so genuine faults are still caught promptly, and a GPU-reset verdict now requires the device to actually report removal. (#122)

HDR virtual displays came back as SDR after a recovery. Display recovery recreated the monitor without carrying the HDR flag through. (#121)

Added

Automatic WGC → VGD transition. If the host starts before the LuminalVGD driver is ready it would previously stay in WGC fallback until a service restart. It now re-checks, promotes itself to VGD mode automatically, and can retarget an already-running stream. A “Transition to VGD now” button was added to the VGD Control Panel, and Troubleshooting gained a live capture-backend indicator. (#121)

Updated

  • NVENC SDK 13.1, FFmpeg 8.1.2, SVT-AV1 4.2.0. (#120)

Internal

  • Release tags are now pinned to the exact commit their binaries were built from, so a release can no longer be mis-tagged by work merged between the build and publication. (#125)

  • The test suite no longer writes runtime state into the source tree, and now runs to completion. (#124)


Known issues

Grand Theft Auto V Enhanced can still crash when a stream starts or ends. The game has a fault in its own device-change handling that Windows converts into an unrecoverable process exit, and it can be triggered by any monitor arriving or departing — including a virtual display being created. Setting virtual_display_mode = shared reduces how often the host changes monitor identity and makes this materially less likely. Work to stop the host touching the display device while a game is running is tracked for the next candidate.

Avoid Win+Ctrl+Shift+B while streaming if the virtual display is your only active output. That hotkey resets the graphics driver, and with no physical monitor active the reset can fail in a way that requires a reboot. The new extended default largely removes this exposure.

LuminalShine 26.08.0-beta.7

Tag: 26.08.0-beta.7 · Released: 2026-07-28 · Pre-release

LuminalShine 26.08.0-beta.7

Changes since 26.08.0-beta.4 (26.08.0-beta.5 and beta.6 were staged but never published; their contents ship here).

Fixed — stability

  • Recurring host crashes traced to a use-after-free in the pairing flow. Submitting the PIN form twice — or retrying an abandoned pairing — freed the pairing session record mid-operation and kept writing through it, corrupting the heap. The pairing session table is now protected by a lock and the freed record is never touched. (#104)

  • Clients warned “HEVC / HDR / YUV 4:4:4 is unavailable” at stream start (macOS most visibly) whenever the service had started before logon — i.e. after every boot. The startup encoder probe deferred until the desktop was ready and then never retried, so the server advertised H.264-only until the first stream, which also paid the entire probe cost mid-launch. The probe now retries until the desktop is ready, so full codec support is advertised before any client connects and first launches start much faster. (#117)

  • Valid admin password rejected mid-uptime. Config hot-applies reset the in-memory credential record’s key-derivation fields. (#95)

  • Crash when capture started against a virtual display that never activated — now falls back cleanly instead of corrupting the heap. (#97)

  • Zombie driver sessions on displays Windows never surfaced are now destroyed instead of stacking. (#109)

  • Spurious “crash” dumps on service stop when Windows Explorer was dead: the tray thread now observes shutdown instead of pinning the exit path until the force-shutdown watchdog fired. (#114)

  • Slight lag when starting to move the cursor, and the black box around the text-caret (I-beam) cursor. (#98)

  • About page “Driver version: -” and empty Troubleshooting readouts for LuminalVGD. (#94)

  • Faster session start — third-party integration work no longer runs on the stream-announce path. (#99)

Fixed — GPU-reset (TDR) behavior

After a GPU hang whose Windows recovery failed, previous versions misdiagnosed the dead display stack in an endless loop for as long as the machine stayed up. Now:

  • Failures are classified by evidence, and the classifier itself was battle-tested against a live incident. A device-creation failure is cross-checked against Windows’ display API; a machine-wide failure is declared only on the confirmed wedge signature (verified twice, with a settle delay), announces “Display stack down — reboot required” in the log, session refusals, and the Troubleshooting page — and the verdict now clears itself automatically if the stack recovers. (#105, #112)

  • The host no longer restarts itself into a dead display stack to reclaim leaked encoder resources — the restart waits for the stack to return (and never interrupts an active WebRTC session). (#113)

  • The topology lifeboat: the moment a GPU hang is detected (~100 ms), a physical display is activated alongside the virtual one so Windows always has a hardware-backed display to recover onto. (#110)

  • The Virtual Display Driver card and restart button actually work now, targeting LuminalVGD directly with a working two-level restart. (#106)

  • The display helper escalates instead of polling silently: a persistent display-stack failure produces one loud reboot-required message and an orphaned helper exits within 5 minutes. (#107)

  • Recovery hardening from the 0x10E incident: encoder stalls marked within ~100 ms, capture reinitializes after a reset, the service self-configures restart-on-failure, GPU resets charted on Session Details. (#101)

Added

  • HDR peak brightness (nits) slider in the LuminalVGD Control Panel: 0–1000 nits (790–1000 is the HDR zone), default 800, saves automatically and applies to the next streaming session. The virtual display’s EDID advertises the chosen peak to Windows and HDR-aware games. Requires the bundled driver build 15. (#118)

  • Driver updates no longer need a reboot. The service now owns the virtual display device: fresh installs create it at service start, and upgrades rebind the new driver automatically (in place when possible, recreate when not) — no more WGC fallback until the next restart of Windows. (#116)

  • Crash self-reporting. Any crash writes a minidump to a known location and logs the exception, module, and dump path. (#108)

  • Driver flight recorder. The installer registers a small boot-rotating ETW trace of the LuminalVGD driver, and crash bundles automatically include it — GPU-reset incidents are now diagnosable from the driver’s own point of view. (#115)

  • Redesigned Session Details view: status pills, identity panel, multi-range charts with JSON export, full-screen last-10-sessions view. (#100)

Changed

  • Virtual-display defaults: backend Automatic, mode Per client, layout Exclusive, activate On, revert-on-disconnect On, refresh doubling On. (#93)

Internal

  • Config-consistency suite gates in CI (#96); vendored web server moved to a hardened NortheBridge fork (#104); driver pin → v0.1.0-alpha.5 (#119).

Notes

  • Bundles LuminalVGD v0.1.0-alpha.5 “Build 15” (0.1.0.15): proto 0.4 with host-configurable HDR peak luminance, plus build 14’s TDR duck-out (the driver removes its virtual monitors during a GPU reset so Windows’ recovery can never wait on them, restoring them with identity intact on recovery) and build 13’s cold-boot activation and I-beam cursor fixes.

  • Requires Windows 11; 24H2+ for full HDR support.

LuminalShine 26.08.0-beta.5

Tag: 26.08.0-beta.5 · Released: 2026-07-27 · Pre-release

LuminalShine 26.08.0-beta.5

Changes since 26.08.0-beta.4:

Fixed

  • Valid admin password rejected mid-uptime (web UI login, local and remote). Every configuration hot-apply — which happens on every stream start with per-app overrides — reset the in-memory credential record’s key-derivation fields, so password checks fell back to a legacy hash path and rejected the correct password until the service restarted. The credential record now survives config applies intact, guarded by a regression test. (#95)

  • Crash (heap corruption, 0xc0000374) when capture started against a virtual display that never activated. The capture path could be handed an empty display name and tore down mid-start; it now re-resolves the display, refuses the empty name, and falls back to WGC/DDA capture instead of crashing. (#97)

  • Slight lag when starting to move the cursor. The frame-claim loop was blind to cursor motion for up to ~200 ms at motion onset; it now wakes on cursor movement and re-syncs the cursor before every blend, matching the responsiveness of the classic desktop-duplication path. (#98)

  • About page “Driver version: -” and empty Troubleshooting readouts for LuminalVGD. The installed-driver query matched on a field that is identical for every UMDF driver and never found the device; it now matches the hardware ID. The Troubleshooting page additionally reports the bundled driver package version, its Authenticode signer, and signature trust. (#94)

  • Faster session start. Third-party integration work (RTSS / NVIDIA Control Panel ladder) no longer runs on the stream-announce path, reclaiming seconds of the client’s no-video deadline on slow starts. (#99)

Added

  • Redesigned Session Details view. Clicking the active session or a recent session on the Home page opens a right-hand slideout with: status pills (RTSP, codec, HDR10, YUV 4:4:4, and live stream health); an identity panel (host and client device names, stream resolution, direct-to-encode mode, encode bitrate, duration, running app, audio channels, CPU/GPU model, RAM, VRAM, LuminalVGD driver identity, and LuminalShine version); and charts for connectivity quality and bitrate, direct-to-encode timing, frame rate, and host CPU/GPU and RAM/VRAM usage over Full Session / 3 min / 5 min / 15 min ranges, with Export as JSON. The Session View Only login gets a full-screen version covering the last 10 sessions. (#100)

  • GPU driver-reset (TDR) recovery hardening. Encoder stalls are now detected and marked ~100 ms after a GPU hang; the LuminalVGD capture path drops its shared textures and reinitializes cleanly after a reset; the service self-configures Windows to restart it if it is ever killed during recovery; and a session end that follows a leaked encoder teardown schedules a clean host restart. GPU resets are charted as markers on the Session Details connection graph. (#101)

Changed

  • Virtual-display defaults. New installs (and unset settings) default to: Virtual display backend Automatic, Virtual display mode Per client, Display layout Exclusive, Activate virtual display On, Revert display config on disconnect On, Refresh doubling On. Also fixes Control Panel switches that could render On while the setting was off. (#93)

Internal

  • The config-consistency test suite now actually runs in CI and gates merges (it previously failed silently and was advisory). (#96)

Notes

  • Bundles LuminalVGD v0.1.0-alpha.3 “Milestone 1 Update 2” (driver build 13, 0.1.0.13) — brings the cold-boot display-activation fix and the fix for the black box around the text-caret (I-beam) cursor. Existing installs are upgraded by the installer. (#102)

  • Requires Windows 11; 24H2+ for full HDR support.

LuminalShine 26.08.0-beta.4

Tag: 26.08.0-beta.4 · Released: 2026-07-26 · Pre-release

LuminalShine 26.08.0-beta.4

Changes since 26.08.0-beta.3:

Fixed

  • False “LuminalVGD driver setup failed” warning on systems without PowerShell 7. The installer’s PowerShell 5.1 fallback resolved to the 32-bit interpreter, where driver tooling cannot run (pnputil is unavailable in WOW64) — so the driver install/update/uninstall step failed on every run and the SudoVDA cleanup never completed, while any previously installed driver kept working untouched. The fallback is now always the 64-bit interpreter, the driver script relaunches itself 64-bit if ever started 32-bit, and a SudoVDA cleanup failure can no longer abort the driver install. (#92)

If previous versions showed the driver warning on your machine: simply run this installer — the driver step now completes, and stale SudoVDA remnants are removed.

Notes

  • Bundles LuminalVGD v0.1.0-alpha.2 (driver build 11, 0.1.0.11) — unchanged from beta.2/beta.3.

  • Requires Windows 11; 24H2+ for full HDR support.

LuminalShine 26.08.0-beta.3

Tag: 26.08.0-beta.3 · Released: 2026-07-25 · Pre-release

LuminalShine 26.08.0-beta.3

Changes since 26.08.0-beta.2:

Fixed

  • Installs and updates no longer take 20+ minutes. The MSI’s driver install/uninstall scripts scanned every PnP device on the system with a per-device query (~0.8 s each — about 6.5 minutes per scan, and an update runs several scans). Device discovery is now narrowed to Display-class devices; the whole driver step completes in seconds. (#91)

  • The driver package is now staged and bound in a single device-install pass (previously an existing devnode went through the install transaction twice).

Notes

  • Bundles LuminalVGD v0.1.0-alpha.2 (driver build 11, 0.1.0.11) — unchanged from beta.2.

  • Requires Windows 11; 24H2+ for full HDR support.

LuminalShine 26.08.0-beta.2

Tag: 26.08.0-beta.2 · Released: 2026-07-24 · Pre-release

LuminalShine 26.08.0-beta.2

Changes since 26.08.0-beta.1.

Critical fix — streaming restored

26.08.0-beta.1 could not stream and should not be used. Its bundled LuminalVGD driver (build 8) refused every control request, so per-client virtual displays were never created: streams silently fell back to capturing the physical desktop (wrong resolution / black bars) with the host monitors left on.

  • The bundled driver is now LuminalVGD v0.1.0-alpha.2 — Milestone 1 Proto Driver (0.1.0.11) with working control-surface authorization (SYSTEM / elevated Administrators, evaluated at request time, fail closed, fully ETW-traced). (#89, #90)

  • The host now opens the driver’s control device with the security opt-in UMDF requires to evaluate the caller, and logs the exact failing step and Win32 error if the driver is ever unreachable — this failure class can no longer hide. (#89)

Verified end to end on the installed service: per-client 4K HDR virtual display, exclusive display topology, direct frame-ring capture, hardware-cursor composition — streaming to LG C2 (webOS) and macOS Moonlight clients at native resolution.

SudoVDA fully retired at runtime

  • The runtime never selects or touches SudoVDA anymore: no registry recreation of SudoMaker keys, no legacy open/retry ladder against a driver that cannot exist. Legacy virtual_display_backend values (sudovda, mtt) map to auto with a warning. (#87)

  • Driver status recovery: a transient startup failure no longer pins the About page at “Failed to initialize” — the status probe retries (rate-limited) until the driver responds, and the Audio/Video “Re-check driver” button works. (#87)

Web UI

  • LuminalVGD is presented as the only virtual display backend: About page shows its proper name, the backend dropdown no longer offers SudoVDA, and help text no longer steers users toward it. (#88)

Upgrade notes

  • The installer bundles and installs the LuminalVGD Milestone 1 driver and removes SudoVDA (driver, certificates, registry) if detected — on new installs, updates, and reinstalls alike.

  • If you installed 26.08.0-beta.1: simply run this installer over it.

26.07.1-beta.2

Tag: 26.07.1-beta.2 · Released: 2026-07-19 · Pre-release

LuminalShine 26.07.1-beta.2

The second beta of the 26.07.1 series, on top of 26.07.1-beta.1shfx01. This release readies the LuminalShine UI for the LuminalVGD driver and adds per-commit nightly builds.

General

  • New: LuminalVGD Options in the header. The Web UI header gains a “LuminalVGD Options” dropdown (also in the mobile menu) with two new pages:

    • LuminalVGD Control Panel — the full configuration surface LuminalShine will expose for the LuminalVGD (Luminal Video Graphics Display) driver, straight from the driver design documentation: backend selection, monitor caps and lease watchdog, stable display identity, the permanent display pool, multi-mode lists and refresh doubling, bit depth/HDR, render-adapter and frame-ring settings, EDID/physical size, and the recovery/restore behavior. Because the driver is still in prototype, every control is disabled and rendered grey instead of the usual sun-gold, beneath a notice linking to apps.northebridge.com/en/LuminalVGD.

    • About LuminalVGD — the driver’s identity (status, design protocol version, device and provider), its pairing with the running LuminalShine build, and a working Check for LuminalVGD updates action against the driver’s public release feed. It reports the prototype status today and will surface real driver versions the moment a first release ships.

  • New: nightly builds. Every merge to main now produces an unsigned portable ZIP, permanently addressable at nightly.link/NortheBridge/luminalshine/workflows/nightly-windows/main/luminalshine-nightly-portable.zip. Nightlies are versioned 0.0.x so they sort below every real release, and are for testing only — signed installers remain exclusive to tagged releases.

Windows 11

  • No changes in this release.

Windows 11 Experimental Preview

  • No changes in this release.

Security Fixes

  • No changes in this release.

Hotfixes

  • No changes in this release.


Upgrade notes: existing installs upgrade in place from 26.07.1-beta.1 / 26.07.1-beta.1shfx01, 26.07.0, or 26.06.x; the MSI upgrade path is verified by the release pipeline’s compatibility gate.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.07.1-beta.1shfx01…26.07.1-beta.2

26.07.1-beta.1.shfx01

Tag: 26.07.1-beta.1shfx01 · Released: 2026-07-15 · Pre-release

LuminalShine 26.07.1-beta.1.shfx01

An emergency patch on top of 26.07.1-beta.1. If you are on 26.07.1-beta.1, upgrade directly to this build; there are no other changes.

General

  • No changes in this release.

Windows 11

  • No changes in this release.

Windows 11 Experimental Preview

  • No changes in this release.

Security Fixes

  • No changes in this release.

Hotfixes

  • Fixed: first-run password fields shown on every sign-in. When signing in to a host that already has credentials — the normal case when connecting from another device on the LAN, for either a normal login or the new stats-only view — the login dialog incorrectly displayed the first-run New password and Confirm new password fields alongside the regular username/password fields. This was a display defect introduced with 26.07.1-beta.1’s stats-only login UI (a template conditional chained to the wrong branch); it looked like the host was offering to reset the admin password, but it was not: values typed in those fields were never transmitted during a normal login, and the server-side first-run overwrite guard shipped in 26.07.1-beta.1 is unaffected. The fields now render only during genuine first-run setup, when no credentials exist on the host yet.


Upgrade notes: existing installs upgrade in place from 26.07.1-beta.1, 26.07.0, or 26.06.x; the MSI upgrade path is verified by the release pipeline’s compatibility gate.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.07.1-beta.1…26.07.1-beta.1shfx01

26.07.1-beta.1

Tag: 26.07.1-beta.1 · Released: 2026-07-14 · Pre-release

LuminalShine 26.07.1-beta.1

The first beta of the 26.07.1 series, on top of 26.07.0. This release addresses a critical field report — the Web GUI becoming unreachable from other systems on the LAN, and the admin password held in Windows Credential Manager appearing corrupted after such an access attempt — and adds a restricted stats-only login for remote monitoring.

General

  • New: Stats-only login. A “Stats view only” toggle on the login screen signs you in with a restricted session that can watch the active stream’s statistics — the new read-only /stats page with session history and per-session details — but cannot administer the host. The restriction is enforced server-side by a default-deny allowlist (read-only session, metadata, and locale endpoints; everything else answers 403 insufficient_role); the Web UI hides the admin navigation and all destructive controls for the session. Intended for checking on a stream from another LAN system without exposing a full admin login.

  • Fixed: blocked access now explains itself. When the host’s origin policy (Web UI allowed origins: PC / LAN / WAN) denies a connection, the API now returns a structured origin_forbidden error naming the allowed class, and the login screen shows an actionable message pointing at the setting — instead of a dead page or a misleading “wrong password” failure. Denials are also logged at warning level on the host.

Windows 11

  • Fixed: Web GUI unreachable from other LAN systems on IPv6-enabled networks. IPv6 peers with global-unicast addresses were classified as WAN even when they sat on the same link, so the default lan origin policy rejected them with a 403 before credentials were checked. The host now checks whether the peer is on-link for one of its own adapters — using each adapter’s real per-address prefix length (never an assumed /64), preferred addresses only, with a 60-second cache — and classifies on-link peers as LAN.

Windows 11 Experimental Preview

  • LuminalVGD (Luminal Video Graphics Display) driver seed advanced to proto v0.3: session model, capture controller, and the libvirtualdisplay fold-in. Groundwork only — nothing ships in the installer yet.

Security Fixes

  • Closed the admin-credential corruption path. Root cause: at boot, a race with the TPM could leave the credential record in Windows Credential Manager present but momentarily unreadable; LuminalShine then believed no credentials existed and silently entered first-run mode, where the unauthenticated first-user setup endpoint could overwrite the real stored record — observed in the field as a “corrupted” password after accessing the host from another LAN system. The fix closes this at every layer:

    • Startup now probes the credential store non-destructively (absent / loadable / locked). A locked store never counts as first-run: setup and login are refused with an explicit “credentials locked” state (HTTP 503) while a bounded background retry (30 attempts × 10 s) waits for the store to become readable.

    • The first-user setup path re-probes the store under lock before accepting anything, and refuses with recovery guidance (the Start Menu Reset LuminalShine Admin Password shortcut) if the record is locked.

    • Any legitimate self-heal that replaces the stored record first preserves the previous bytes in a quarantine slot (LuminalShine/AdminCredentials.quarantine); an intentional admin reset clears the slot.

  • Fixed a data race in password verification. The verifier read the in-RAM credential fields lock-free while upgrade-on-login and background reloads reassigned them; it now snapshots them under a shared lock.

Hotfixes

  • No changes in this release.


Upgrade notes: existing installs upgrade in place from 26.07.0 or 26.06.x; the MSI upgrade path is verified by the release pipeline’s compatibility gate.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.07.0…26.07.1-beta.1

LuminalShine 26.07.0: The MoonDeck Compatibility Release

Tag: 26.07.0 · Released: 2026-07-11

LuminalShine 26.07.0: The MoonDeck Compatibility Release

The Gold release of the 26.07 series, consolidating beta.1, beta.2, and beta.3. This cycle’s theme is making LuminalShine a first-class host for handheld clients — a Steam Deck running MoonDeck can now sleep and resume mid-session without killing the stream, and reach the host’s Steam overlay without a forwardable Guide button — while also eliminating LuminalShine’s interference with games on the host, whether streaming or idle.

New since 26.07.0-beta.3: YUV 4:4:4 streaming with auto-engage and in-flight 4:2:0 fallback, the public binary-signing card on the Troubleshooting page, and removal of the non-functional LB+RB+Start Guide combo (the other five combinations are unchanged).

General

  • YUV 4:4:4 Streaming (Settings → Capture, default on). Full-resolution chroma — noticeably sharper text and UI — auto-engages: when the encoder probe confirms the GPU can encode 4:4:4 (NVENC, QuickSync, or software), it is advertised and capable Moonlight clients negotiate it automatically with no interaction required. On GPUs without 4:4:4 support (or unknown capability) the switch reads off and is locked, and nothing is advertised. The Session Details panel shows a YUV444 chip reflecting the effective chroma of each session.

  • Sunshine-glass Web UI rebrand with a complete session telemetry pipeline: per-stream encode latency, throughput, FPS, and host CPU/GPU/RAM/VRAM history rendered in the new Session Details panel.

  • MTT VDD has been removed entirely. SudoVDA is now the only shipped virtual display backend. A configured virtual_display_backend = mtt logs a warning and selects SudoVDA; pre-existing MTT driver installations are left untouched (removable via Device Manager or pnputil). The installer no longer offers or ships the MTT driver.

  • Announcing LuminalVGD — the first-party Luminal Video Graphics Display Driver (NortheBridge/LuminalVGD, AGPL-3.0 with commercial licensing under the NortheBridge Access License Agreement). Pre-development; tracked in-tree at src/drivers/luminal-display, it will supersede SudoVDA as the default backend when it ships. The Troubleshooting page now carries a reserved identity block that will show the driver’s version, paired LuminalShine release, build time, and signing information.

  • Native frame-generation handling. LuminalShine detects DLSS Frame Generation in the streamed game and engages the frame-generation capture fix automatically — no per-app configuration required. The per-app toggles remain as manual overrides.

  • Frame limiter is scoped to the streamed game. The RTSS frame cap targets a per-game application profile instead of the RTSS Global profile, so nothing else on the host gets capped. Profiles created by LuminalShine are cleanly removed when the stream ends.

  • Public signing information on the Troubleshooting page: publisher (NortheBridge Foundation), signing method (Authenticode via SSL.com eSigner), how to verify a download, and the running build’s version, commit, and build date.

  • Documentation refreshed with the new Learn Dark theme and sunshine palette.

Windows 11

  • New: per-app “Keep virtual display while paused.” Each application’s Setting Overrides section has an Application Runtime toggle that keeps the LuminalShine virtual display active when the client disconnects or the device sleeps mid-session — for example a Steam Deck suspending via MoonDeck. On wake, the stream resumes cleanly instead of failing with an RTSP error. The physical display configuration is restored when the app quits, and global revert-on-disconnect behavior stays untouched for every other application.

  • New: Home/Guide Button Combo (Settings → Input). Emulate a Home/Guide press on the virtual controller by holding a chosen button combination on the streamed gamepad — opening the host’s Steam overlay from clients that cannot forward a real Guide press (on a Steam Deck running MoonDeck, the Steam button is consumed locally, previously leaving the host overlay unreachable mid-session). Available combinations: Start+Back, Back+X, Back+Y, D-Pad Right+X, D-Pad Left+Y. Off by default, once per press with a one-second debounce, works on both classic Moonlight and WebRTC sessions, and can be scoped per application via Setting Overrides.

  • In-flight YUV 4:4:4 → 4:2:0 fallback. If a negotiated 4:4:4 session fails at encoder start (for example the GPU driver or display path rejects it), LuminalShine logs a clear error naming the failed stage and retries the session at YUV 4:2:0 instead of failing the stream; the session stats update to reflect the effective chroma.

  • Fixed: games could fail to launch while LuminalShine ran in the background. RTSS is no longer kept alive across paused sessions — its hooks inject into every starting process, which prevented some anti-tamper titles from launching at all. Any RTSS instance LuminalShine starts is terminated at every limiter teardown and relaunched on resume.

  • Fixed: severe system-wide GPU performance loss while LuminalShine idled (benchmarks and games dropping from 120+ to ~20 FPS). Two causes addressed: a temporary virtual display retained after a failed encoder probe is reaped after 3 idle minutes instead of persisting indefinitely, and the process’s REALTIME GPU scheduling priority is restored to normal after the startup probe and at stream stop.

  • Fixed: streamed GPU-bound titles losing significant frame rate. The frame cap no longer applies machine-wide, and an idle host no longer outranks the foreground game at the GPU scheduler.

Windows 11 Experimental Preview

  • With MTT VDD removed, the guidance for SudoVDA’s known WUDFHost hang on Insider Preview channels has changed: use Troubleshooting → Restart Virtual Display Driver, which PnP-disables and re-enables the SudoVDA device scoped to that device only. The Web UI warning text points there instead of suggesting a driver switch.

  • The SudoVDA reliability caveat on current release and Insider Preview builds remains the primary motivation for LuminalVGD (see General).

Security Fixes

  • Reduced shipped driver and supply-chain surface: the vendored third-party MTT VDD signed driver binary (DLL/INF/CAT) has been removed from the repository and the installer payload, leaving a single virtual display driver pending the first-party LuminalVGD.

  • Process-injection surface hardening: LuminalShine-started RTSS never outlives the frame limiter session, so its injection hooks cannot persist into processes launched after a stream ends.

Hotfixes

  • Encoder probe: the H.264 YUV 4:4:4 capability test silently validated 4:2:0 due to a struct-initializer mismatch, so H.264 4:4:4 could be advertised on GPUs unable to encode it — the concrete cause of mid-flight 4:4:4 session failures. The probe now tests what it advertises.

  • Gamepad: the LB+RB+Start Guide-combo option introduced in beta.3 did not function and has been removed; configs referencing it fall back to disabled with a logged warning.

  • RTSS: a mid-session limiter refresh could silently fall back from the per-game profile to the Global profile — fixed.

  • NVIDIA Control Panel limiter users: the frame-generation auto-fix no longer removes an NVCP frame cap without replacement when RTSS is unavailable.

  • Virtual display: fixed a race where the idle-display reaper could remove a display that an incoming launch had just claimed.

  • RTSS crash-recovery snapshots record per-game profiles created by LuminalShine, so a crash cannot orphan them.

  • Release pipeline: the MSI compatibility gate no longer fails on UI-only changes — content-hashed web bundle renames are normalized while genuine file additions, removals, and identifier drift on stable files still fail the gate.


Upgrade notes: existing installs upgrade in place from any 26.07.0-beta.x or 26.06.x; the MSI upgrade path is verified by the release pipeline’s compatibility gate. If you previously selected MTT VDD, LuminalShine switches to SudoVDA automatically on first start.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.06.4…26.07.0

26.07.0-beta.3

Tag: 26.07.0-beta.3 · Released: 2026-07-10 · Pre-release

LuminalShine 26.07.0-beta.3

An incremental beta on top of 26.07.0-beta.2, focused on keeping the host’s Steam overlay reachable from clients that cannot send a Guide button press.

General

  • No changes in this release.

Windows 11

  • New: Home/Guide Button Combo (Settings → Input). Emulate a Home/Guide button press on the virtual controller by holding a chosen button combination on the streamed gamepad — opening the host’s Steam overlay from clients that cannot forward a real Guide press. On a Steam Deck running MoonDeck, the Steam button is consumed locally by the Deck, which previously left the host’s Steam overlay unreachable mid-session (no accepting game invites, no switching to a friend’s lobby). Available combinations:

    • Start (Menu) + Back (View)

    • Back (View) + X, Back (View) + Y

    • D-Pad Right + X, D-Pad Left + Y

    • LB + RB + Start — three buttons, the hardest to trigger accidentally

    The feature is off by default, triggers once per press with a one-second debounce, works on both classic Moonlight and WebRTC sessions, and can be scoped per application via Setting Overrides (e.g. only your MoonDeck entry). Note: the combo buttons still reach the game in the moment before the overlay opens, so pick a combination your game doesn’t use.

Windows 11 Experimental Preview

  • No changes in this release.

Security Fixes

  • No changes in this release.

Hotfixes

  • No changes in this release.


Upgrade notes: existing installs upgrade in place from 26.07.0-beta.x or 26.06.x; the MSI upgrade path is verified by the release pipeline’s compatibility gate.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.07.0-beta.2…26.07.0-beta.3

26.07.0-beta.2

Tag: 26.07.0-beta.2 · Released: 2026-07-08 · Pre-release

LuminalShine 26.07.0-beta.2

An incremental beta on top of 26.07.0-beta.1, focused on client sleep/resume resilience for handhelds.

General

  • No changes in this release.

Windows 11

  • New: per-app “Keep virtual display while paused.” Each application’s Setting Overrides section now has an Application Runtime toggle that keeps the LuminalShine virtual display active when the client disconnects or the device sleeps mid-session — for example a Steam Deck suspending via MoonDeck. On wake, the stream resumes cleanly instead of failing with an RTSP error. Your physical display configuration is restored when the app quits, and the global revert-on-disconnect behavior stays untouched for every other application. Under the hood the toggle manages the dd_config_revert_on_disconnect and dd_paused_virtual_display_timeout_secs overrides, which remain visible and editable in the overrides list.

Windows 11 Experimental Preview

  • No changes in this release.

Security Fixes

  • No changes in this release.

Hotfixes

  • Release pipeline: the MSI compatibility gate no longer fails on UI-only changes — content-hashed web bundle renames are normalized while genuine file additions, removals, and identifier drift on stable files still fail the gate.


Upgrade notes: existing installs upgrade in place from 26.07.0-beta.1 or 26.06.x; the MSI upgrade path is verified by the release pipeline’s compatibility gate.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.07.0-beta.1…26.07.0-beta.2

26.07.0-beta.1

Tag: 26.07.0-beta.1 · Released: 2026-07-07 · Pre-release

LuminalShine 26.07.0-beta.1

This beta focuses on eliminating LuminalShine’s interference with games — whether a stream is active or the host is idling in the background — and begins the transition to a first-party virtual display driver.

General

  • Sunshine-glass Web UI rebrand with a complete session telemetry pipeline: per-stream encode latency, throughput, FPS, and host CPU/GPU/RAM/VRAM history rendered in the new Session Details panel.

  • MTT VDD has been removed entirely. SudoVDA is now the only shipped virtual display backend. A configured virtual_display_backend = mtt logs a warning and selects SudoVDA; pre-existing MTT driver installations on your machine are left untouched (removable via Device Manager or pnputil). The installer no longer offers or ships the MTT driver.

  • Announcing LuminalVGD — the first-party Luminal Video Graphics Display Driver (NortheBridge/LuminalVGD, AGPL-3.0 with commercial licensing under the NortheBridge Access License Agreement). Pre-development; it is now tracked in-tree at src/drivers/luminal-display and will supersede SudoVDA as the default backend when it ships.

  • Native frame-generation handling. LuminalShine now detects DLSS Frame Generation in the streamed game and engages the frame-generation capture fix automatically — no per-app configuration required. The per-app toggles remain as manual overrides, and the settings UI now says so.

  • Frame limiter is scoped to the streamed game. The RTSS frame cap now targets a per-game application profile instead of the RTSS Global profile, so nothing else on the host gets capped. Profiles created by LuminalShine are cleanly removed when the stream ends.

  • Documentation refreshed with the new Learn Dark theme and sunshine palette.

Windows 11

  • Fixed: games could fail to launch while LuminalShine ran in the background. RTSS is no longer kept alive across paused sessions — its hooks inject into every starting process, which prevented some anti-tamper titles from launching at all. Any RTSS instance LuminalShine starts is now terminated at every limiter teardown and relaunched on resume.

  • Fixed: severe system-wide GPU performance loss while LuminalShine idled (benchmarks and games dropping from 120+ to ~20 FPS). Two causes addressed: a temporary virtual display retained after a failed encoder probe is now reaped after 3 idle minutes instead of persisting indefinitely, and the process’s REALTIME GPU scheduling priority is restored to normal after the startup probe and at stream stop instead of persisting for the process lifetime.

  • Fixed: streamed GPU-bound titles losing significant frame rate. The frame cap no longer applies machine-wide (see per-game scoping above), and an idle host no longer outranks the foreground game at the GPU scheduler.

Windows 11 Experimental Preview

  • With MTT VDD removed, the guidance for SudoVDA’s known WUDFHost hang on Insider Preview channels (WUDFHostProblem2) has changed: use Troubleshooting → Restart Virtual Display Driver, which PnP-disables and re-enables the SudoVDA device scoped to that device only. The Web UI warning text now points there instead of suggesting a driver switch.

  • The SudoVDA reliability caveat on current release and Insider Preview builds remains the primary motivation for LuminalVGD (see General).

Security Fixes

  • Reduced shipped driver and supply-chain surface: the vendored third-party MTT VDD signed driver binary (DLL/INF/CAT) has been removed from the repository and the installer payload, leaving a single virtual display driver pending the first-party LuminalVGD.

  • Process-injection surface hardening: LuminalShine-started RTSS never outlives the frame limiter session, so its injection hooks cannot persist into processes launched after a stream ends.

Hotfixes

  • RTSS: a mid-session limiter refresh could silently fall back from the per-game profile to the Global profile — fixed.

  • NVIDIA Control Panel limiter users: the frame-generation auto-fix no longer removes an NVCP frame cap without replacement when RTSS is unavailable.

  • Virtual display: fixed a race where the idle-display reaper could remove a display that an incoming launch had just claimed.

  • RTSS crash-recovery snapshots now record per-game profiles created by LuminalShine, so a crash cannot orphan them.


Upgrade notes: existing installs upgrade in place; the MSI Upgrade path from 26.06.x is verified by the release pipeline’s compatibility gate. If you previously selected MTT VDD, LuminalShine switches to SudoVDA automatically on first start.

Full changelog: https://github.com/NortheBridge/luminalshine/compare/26.06.4…26.07.0-beta.1

26.06.4

Tag: 26.06.4 · Released: 2026-06-26

LuminalShine 26.06.4 (Gold)

Danger

Although this release closes all current memory heap issues with Windows 11 Future Platforms, please update at your own risk as this is only against the latest builds at the time of writing.

A stability and security hardening release. It eliminates a class of shutdown/restart crashes and closes a batch of memory-safety and input-validation issues found in an internal security audit. Recommended for all users. (26.06.3 was skipped.)

General

  • Major crash-resilience and memory-safety hardening of the streaming host — details under Windows 11 (stability) and Security Fixes (memory safety) below.

Windows 11

  • Eliminated shutdown/restart heap-corruption crashes (STATUS_HEAP_CORRUPTION / 0xC0000374). Long-lived background threads — the system tray, the SudoVDA virtual-display watchdog, the update checker, and the paused-display cleanup / display-recovery monitors — are now reliably stopped and joined before the process exits, instead of being torn down mid-flight by the C runtime (which could double-free the heap and crash the host on exit or on a service restart).

  • Safer fatal-error diagnostics: a teardown-safe crash handler now records the actual cause of any remaining fatal exception instead of masking it as a generic C-runtime fault.

  • Update checks no longer hang shutdown: the GitHub update check now has connect/total network timeouts and aborts immediately when the host is shutting down.

  • More graceful failure: the audio-capture and RTSP threads now contain unexpected errors and degrade instead of taking down the whole host.

Windows 11 Experimental Future Platforms

  • The crash-resilience fixes above are most impactful on Windows 11 Insider Preview (Canary/Dev) builds, where the display-driver / virtual-display instability that drives these restart and teardown paths occurs far more often.

Security Fixes

All from an internal adversarial audit. These are memory-safety, input-validation, and denial-of-service hardening in a SYSTEM-privileged service; most require a paired/connected client or local access (no known remote-unauthenticated exploit).

  • Use-after-free in credential storage (a dangling buffer was handed to the Windows Credential Manager) — fixed.

  • Paired-client denial-of-service: an unvalidated client packetSize could trigger a divide-by-zero or an enormous allocation; it is now range-validated.

  • Out-of-bounds reads in the streaming control path (malformed/short control packets, reference-frame-invalidation and input-data payloads) and on an undersized decoded stream key — now bounds-checked.

  • Data races causing use-after-free / double-free in the WebRTC media thread and the Playnite IPC pipe — now properly synchronized.

  • Double-CloseHandle race in the named-pipe IPC and a NULL-dereference in audio-device enumeration — fixed.

  • Local stack-exhaustion DoS via unbounded Steam VDF parser recursion (behind the off-by-default Steam auto-sync) — now depth-limited.

Hotfixes

  • Rolls up the shutdown/restart heap-corruption elimination (Windows 11) and the audit-driven memory-safety / DoS fixes (Security Fixes) above.

Automated release for 26.06.4.

What’s Changed

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.06.2…26.06.4

26.06.2

Tag: 26.06.2 · Released: 2026-06-25

LuminalShine 26.06.2 (Gold)

Note

This release improve performance of the Virtual Display Drivers with NVIDIA RTX 40/50 hosts. It is recommended to update.

Tip

This is a Gold Release and has been signed by the NortheBridge Foundation.

A stability point release for 26.06.0 that hardens the streaming host against GPU/display-driver failures and low-memory conditions. No feature or behavior changes.

General

  • Improved crash resilience under display-driver failures and low-memory pressure (see Windows 11 for specifics).

Windows 11

  • Fixed two resource leaks that accumulated while the display stack was wedged (repeated GPU TDR / device-removed recovery, or a virtual display failing to enumerate):

    • The SudoVDA virtual-display driver handle was re-opened without closing the previous one — leaking a kernel handle on every recovery attempt. Re-opens are now idempotent.

    • The D3D11 device-creation retry path could orphan a partially-created device/context on each retry; these are now released before retrying.

  • Bounded the encoder-teardown backlog so a sustained reinit storm against an unresponsive GPU can no longer grow memory without limit.

  • Hardened the audio-capture and HTTP control threads so an allocation failure under memory pressure no longer terminates the whole host.

  • Diagnosable aborts: any abort that does still occur now logs the underlying exception instead of pointing only at the C runtime.

Windows 11 Experimental Future Platforms

  • These fixes are most impactful on Windows 11 Insider Preview (Canary/Dev) builds, where the display-stack wedges that drive the leaks above (QueryDisplayConfig failures, SudoVDA enumerate timeouts) occur far more often. If you still hit a blank-screen / no-recovery state on an Insider build, the recommended workaround remains: switch SudoVDA → MTT Virtual Display Driver (“Reconfigure LuminalShine”) and reboot to clear the wedged display API.

Security Fixes

  • Resource-exhaustion and abort hardening of the SYSTEM-privileged host: the unbounded leaks and unbounded teardown backlog above are closed, and a process-wide terminate handler plus per-thread exception barriers prevent an uncaught exception from hard-aborting the service. Availability/robustness improvements; no attacker-controlled input is involved.

Hotfixes

  • Rolls up the GPU-display-recovery leak fixes and low-memory crash-resilience hardening detailed under Windows 11.

What’s Changed

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.06.0…26.06.2

26.06.0

Tag: 26.06.0 · Released: 2026-06-23

LuminalShine 26.06.0 - Gold Release

Tip

This is a “Gold Release,” also known as a release that is intended for publication and download as the “stable” version.

Note

LuminalShine’s “Gold Releases” are signed by the NortheBridge Foundation Authenticode Certificate and are available on WinGet as well as the Microsoft Store.

  • LuminalShine version 26.06 “Gold” Release

Automated release for 26.06.0.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc7…26.06.0

26.05.0-rc7

Tag: 26.05.0-rc7 · Released: 2026-06-22 · Pre-release

LuminalShine 26.05.0-rc7

A hotfix release addressing a host crash that could leave the screen blank and the stream disconnected.

General

No changes in this release.

Windows 11

  • Host no longer crashes when the Windows display stack is wedged. See Hotfixes below — the streaming host now degrades gracefully and stays running instead of fast-failing when no display can be acquired.

Windows 11 Experimental Future Platforms

  • This release specifically hardens behavior on Windows 11 Insider Preview (Canary/Dev) builds (e.g. build 29613), where the display stack and the SudoVDA virtual-display driver are more prone to wedging (QueryDisplayConfig returning ERROR_NOT_SUPPORTED, virtual-display enumerate timeouts). If you hit a blank-screen/no-display state on an Insider build, the recommended workaround remains: run “Reconfigure LuminalShine” and switch SudoVDA → MTT Virtual Display Driver, then reboot to clear the wedged display API.

Security Fixes

  • Eliminated an uncaught-exception → std::terminate abort in the SYSTEM-privileged host. A C++ exception thrown during encoder/display acquisition could unwind out of a service thread and fast-fail the entire process (STATUS_STACK_BUFFER_OVERRUN, 0xC0000409). This is the same fix as the Hotfix below, noted here for its availability/robustness impact on a process that runs as SYSTEM. No attacker-controlled input is involved.

Hotfixes

  • Never let an encoder probe abort the host on a wedged display stack. When the Windows display stack was wedged — no enumerable monitors, QueryDisplayConfig → ERROR_NOT_SUPPORTED, a SudoVDA virtual-display enumerate timeout, or a sustained DXGI_ERROR_DEVICE_REMOVED (0x887A0004) loop — the encoder-acquisition path could throw a C++ exception that escaped its thread and fast-failed the whole service (0xC0000409). The host crashed and did not recover: monitors went blank and the stream dropped (the client’s “TLS error” was just the control connection being torn when the host died — there was no actual TLS/certificate fault). This was not a GPU hardware TDR (no nvlddmkm / Kernel-Power events) — it was a display-stack/virtual-display wedge the host should survive.

    • probe_encoders() now treats any thrown exception as a normal probe failure, so every code path (startup, the nvhttp control plane, and the WebRTC signaling path) takes its graceful “no display → wait and retry” route and the daemon stays alive.

    • The WebRTC client-connect path’s direct display-acquisition call is now wrapped so it refuses the session cleanly instead of aborting.

    • Note: this fixes the host-side crash/non-recovery. It does not prevent the underlying display-stack/SudoVDA wedge itself — see Windows 11 Experimental Future Platforms for the environmental mitigation.

Automated release for 26.05.0-rc7.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc6…26.05.0-rc7

26.05.0-rc6

Tag: 26.05.0-rc6 · Released: 2026-06-22 · Pre-release

LuminalShine 26.05.0-rc6

A small, focused pre-release: one streaming-stability fix and a documentation refresh.

General

  • Documentation site redesign. The docs now use a light, content-first layout modeled on Microsoft Learn — Segoe UI typography, a breadcrumb trail, an “In this article” rail, and cleaner code blocks, tables, admonitions, and landing-page cards — rebranded with NortheBridge “Aurora Blue” accents (the previous purple accents are retired).

Windows 11

  • Fixed a host crash during GPU resets (TDR) while streaming. Under heavy GPU load — e.g. 4K HDR AV1 with DLSS Frame Generation on RTX 40/50-series cards — a GPU Timeout Detection & Recovery event could trigger several encoder teardowns at once. Those concurrent teardowns raced on the shared NVIDIA driver heap and corrupted it, killing the LuminalShine host process (STATUS_HEAP_CORRUPTION) and dropping the stream — sometimes leaving the display in a bad state. Encoder teardown is now serialized, so a GPU reset degrades to a brief interruption instead of a host crash. (Builds on the per-teardown drain/leak hardening from rc5.)

    • Note: this fixes the host-side crash, not the GPU reset itself. If you hit frequent TDRs, also consider updating your NVIDIA driver, switching the codec to HEVC, or disabling DLSS Frame Generation.

Windows 11 Experimental Future Platforms

  • The streaming-stability fix above directly addresses host crashes seen on Windows 11 Insider Preview (Canary / Dev) builds, where GPU driver TDRs occur more often on bleeding-edge graphics stacks. No changes exclusive to experimental/future platforms in this release.

Security Fixes

  • Hardened memory safety in the SYSTEM-privileged host service. Eliminated the heap-corruption fail-fast (STATUS_HEAP_CORRUPTION / 0xC0000374) that could occur during GPU-TDR encoder teardown. This is the same underlying change as the Windows 11 stability fix above, called out here because it removes a memory-corruption condition in a process that runs as SYSTEM. No attacker-controlled input is involved; impact is availability/robustness rather than a remotely exploitable vulnerability.

Automated release for 26.05.0-rc6.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc5…26.05.0-rc6

26.05.0-rc5

Tag: 26.05.0-rc5 · Released: 2026-06-19 · Pre-release

LuminalShine 26.05.0 RC 5

General

  • WiX 7 installer migration complete. LuminalShine’s MSI is now built through the modern WiX 7 toolchain (replacing the CPack WiX generator + WiX 3 stack). A permanent CI gate asserts the upgrade-critical tables stay byte-identical across builds, so the migration is invisible to existing installs.

  • Third-party dependency refresh. Including a switch from the forked nvapi snapshot to NVIDIA’s official upstream repository.

  • Session History card now bounded at 25 ended sessions. Both the in-memory store and the on-disk archive at %ProgramData%\LuminalShine\sessions\ are pruned oldest-first when the cap is exceeded. Live sessions are never pruned and never counted toward the limit.

  • Duplicate-session bug fixed. Recorded session IDs are now intrinsically unique across luminalshine.exe restarts, so newly recorded streams no longer overwrite previously-persisted entries on the Dashboard.

  • Session Details drawer — Connection / Host tabs render again. The per-session uPlot charts on the Connection and Host tabs now paint correctly on first open for ended sessions, not just live ones.

  • High Performance Streaming card aligned with the README. Recommended-spec bullets (OS / CPU / GPU / RAM / Display / Host net / Client net) now mirror the README’s System Requirements table row-for-row, including the WDDM 3.2+ / HDR-capable / 240 Hz display requirement for frame-generation capture.

Windows 11

  • MSI upgrade no longer fails on held-open files. LuminalShine services are stopped cleanly before file replacement during a major upgrade, so the bootstrapper no longer requires a reboot to swap binaries on a hot install.

  • Pre-MSI Vibeshine installs are now caught. The conflict-removal step in the WiX bootstrapper recognises the NSIS-era Vibeshine DisplayName and removes it before the new install. (Post-MSI Vibeshine was already handled via the shared UpgradeCode.)

  • Render-stack-aware NVENC encode timeout. When DLSS Frame Generation or DLAA is detected in the foreground process, LuminalShine raises the encode-wait ceiling from 100 ms to 250 ms — preventing legitimately slow frames on RTX 40/50 + AV1 + 4K HDR workloads from being misclassified as a TDR-class event.

  • Streaming-host heap-corruption crash on disconnect fully closed. A four-part NVENC fix eliminated the STATUS_HEAP_CORRUPTION (0xC0000374) that could fire ~minutes after a Moonlight client disconnected from an active stream:

    • Drain the NVENC async completion event before destroying the encoder.

    • ResetEvent before each nvEncEncodePicture so a stale signal from a previously timed-out wait cannot satisfy the next wait early.

    • Defer nvEncUnmapInputResource on the encode-wait-timeout path; finish the unmap in destroy_encoder after the drain confirms the GPU is done reading the resource.

    • Combine with the render-stack-aware timeout above so timeouts are rare in the first place.

Windows 11 Future Platforms (Previously Insider)

  • Especially validated on Build 29599 (Canary). The heap-corruption series above was originally reproduced on Windows 11 Insider Preview Canary 29599 with AV1 + HDR + 10-bit + split-frame=auto. The fix has been validated across both stable Windows 11 24H2 and the Canary / Dev channels.

  • RTX 50 + DLSS Frame Generation + Path Tracing. The Blackwell-class combination of AV1 split-frame encoding with frame-generated content — the worst-case path for the heap fast-fail — now tears down cleanly when the client disconnects.

Security Fixes

  • TPM-bound credential store no longer rotates the wrapping key on every read. The previous behaviour silently rotated the persisted RSA wrapping key on each open, which could orphan the WebUI admin password if a rotation raced an unclean shutdown. The reported symptom was “I have to reset the password to log in from another PC on the network.” The cred store now opens the existing TPM key without rotating, and self-heals orphan credential blobs left behind by previous rotation races.

  • ResetAdminCredentials upgrade-exclusion permanently gated in CI. A regression test asserts that the “Reset LuminalShine Admin Password” Start Menu shortcut and its underlying custom action cannot fire during an MSI upgrade — preserving an existing user’s WebUI password across upgrade installs. The conditioning was already correct; this lock-in prevents future regressions.

Automated release for 26.05.0-rc5.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc4…26.05.0-rc5

26.05.0-rc4

Tag: 26.05.0-rc4 · Released: 2026-05-26 · Pre-release

LuminalShine 26.05.0 Release Candidate 4 (RC4)

Danger

This release ships CVE-2026-32253 / GHSA-ph75-mgxh-mv57 (Critical, CVSS 9.8) — an upstream cert-chain authentication bypass that allowed network-reachable attackers to impersonate paired Moonlight clients and reach /launch with input injection on a SYSTEM-level service. All LuminalShine hosts should upgrade immediately. See the Security section below for details. We have posted seperate Security Advisory as GHSA-8gq2-8vfv-fqx7

Danger

This release ships GHSA-52q6-5x97-2747 (Moderate, CVSS 6.3) — The protection is incidental, not enforced. There is no <util:PermissionEx> in packaging/windows/wix/custom_actions.wxs, no SetNamedSecurityInfo call anywhere, and the code in src/config.cpp / src/file_handler.cpp creates the file with no security descriptor. Off-default conditions break it: OEM gold images with loosened ProgramData DACLs, plugins running as non-SYSTEM that pre-create the directory, manual user copies into ProgramData, etc. If write access ever exists, src/process.cpp reads cmd/elevated:true with no integrity check and src/platform/windows/misc.cpp launches via CreateProcessAsUserW with the linked admin token → non-admin → Administrator EoP. All LuminalShine hosts should upgrade immediately. See the Security section below for details.

Note

Existing installs migrate transparently. sunshine_credentials.json is renamed in place to luminalshine_credentials.json on first launch after upgrade, with the original archived as sunshine_credentials.json.deprecated-<UTC> for forensic recovery. Paired Moonlight clients, the Windows Credential Manager admin entry, and the apps list are unaffected.

General

  • New: Session Details panel + Session History card. The Dashboard now records every streaming session you run. A new LuminalShineSessionMonitor Windows service captures per-session metadata (client, codec, resolution, FPS, bitrate, HDR / YUV4:4:4 flags) along with 1Hz host CPU + RAM samples, persists them under %ProgramData%\LuminalShine\sessions\, and serves them back to the Web UI. The Session History card on the Dashboard lists every recorded session (active sessions float to the top with a LIVE pulse; ended sessions follow in reverse chronological order). Clicking a row opens a right-edge slide-out drawer with live uPlot charts grouped under three tabs — Stream / Connection / Host — plus Disconnect, Export JSON, and Delete actions. The monitor service is independent from the streaming hot path: it runs in its own process with SYSTEM-only named-pipe ingest, a kernel-assigned ephemeral localhost port, and a fire-and-forget producer that can never block encoding or stream delivery.

  • New: Per-session recording opt-out (Settings → Capture → session_monitor, default on). When off, the producer is muted but the sidecar service stays running, so toggling the setting back on resumes recording immediately.

  • New: “Clear Session History” gesture on the Troubleshooting page. Wipes the on-disk archive while leaving the sidecar’s in-memory ring buffer intact (so the Web UI repopulates from live state). The MSI uninstall now removes the session archive by default; opt-out via msiexec /x ... KEEPSESSIONDATA=1 for migration scenarios.

  • TypeScript toolchain bump to TypeScript 6.0.3 and vue-tsc 3.3.1. No user-visible behavior change.

  • README badges: release version, commits-since-release, GitHub downloads, code size, stars, license, and CI status are now surfaced at the top of the project README for repo navigation.

Windows 11 General Availability

  • No GA-channel-specific items this release. GA hosts pick up everything in Security and Hotfixes below.

Windows 11 Insider Preview

  • No Insider-Preview-specific items this release. Insider Preview Canary / Dev hosts pick up everything in Security and Hotfixes below.

Security

  • CVE-2026-32253 / GHSA-ph75-mgxh-mv57 (Critical, CVSS 9.8) — fixed. Closes the upstream Sunshine cert-chain authentication bypass that let a network-reachable attacker present a self-signed leaf chained to a self-generated CA and be accepted as a paired Moonlight client. From there, the attacker could call /launch or /resume and stream — with input injection — under the SYSTEM service identity. Two layered changes ship:

    • Removed the X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY fast-path in openssl_verify_cb, mirroring upstream Sunshine v2026.516.143833.

    • Added a leaf-signature pin in the Moonlight HTTPS verify lambda: after the OpenSSL chain verifier accepts a peer, its leaf signature must also exactly match an entry in client_root.named_devices. Defense-in-depth — any future regression in the verify callback cannot grant access to an unpaired peer.

    • Regression coverage added in tests/unit/test_cert_chain.cpp.

  • ProgramData config-directory hardening. The files under %ProgramData%\LuminalShine\config\ (apps.json, sunshine.conf, the paired-clients store, the credentials file) include paths and command lines that the SYSTEM service trusts at CreateProcessAsUserW time. Default Windows ACL inheritance happens to keep Users non-writable on a vanilla install, but the protection was incidental rather than enforced. Layered defense now ships:

    • PROTECTED DACL (SYSTEM and Administrators Full, Users Read+Execute) and a System mandatory integrity label are applied at every service start via SetNamedSecurityInfoW. Self-repairing — incorrect ACLs from OEM gold images, prior tooling, or BIOS-image deployments are corrected on the next service start.

    • HMAC-SHA256 tamper detection on apps.json with a sidecar .sig file. The HMAC key is sealed via the TPM 2.0 (Microsoft Platform Crypto Provider KSP) when available, and falls back to DPAPI-LocalMachine otherwise. The active backend (tpm / dpapi-lm / unavailable) is logged once at startup. On HMAC mismatch the suspect file is renamed to <file>.tamper-<UTC> and the service seeds defaults rather than load attacker-supplied content.

    • sunshine_credentials.json → luminalshine_credentials.json (flag-day rename) with one-shot in-place migration so existing installs never lose admin credentials. The original is archived as .deprecated-<UTC>.

    • Per the threat-model review: no install-time TPM gate. DPAPI-LocalMachine fallback covers TPM-less hosts (BIOS-disabled TPM, vTPM-less VMs, Insider Preview registry-bypass installs) without weakening the security ceiling for the same-machine-tamper threat model.

Hotfixes

  • No Hotfixes-specific items this release. Insider Preview Canary / Dev hosts pick up everything above.

Automated release for 26.05.0-rc4.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc3.hfx4…26.05.0-rc4

26.05.0-rc3.hfx4

Tag: 26.05.0-rc3.hfx4 · Released: 2026-05-24 · Pre-release

LuminalShine 26.05.0 Update Release Candidate 3 Hotfix 4

Important

LuminalShine 26.05.0 RC3 is a substantial release to prepare for Authenticode. Please be aware that there are changes such as installing to %ProgramFiles%\NortheBridge\LuminalShine and %ProgramData%\LuminalShine\.

Danger

Changes in this release may break LuminalShine if it doesn’t migrate properly. Re-run the installer if this happens in order to resolve the issue. If your issue isn’t resolved, submit an issue for further guidance.

Tip

LuminalShine Credentials, which are stored in the Windows Credential Manager via use of the TPM 2.0, seamlessly transition to the Authenticode version of LuminalShine. If you encounter a lockout from the Admin Interface, run "C:\Program Files\NortheBridge\LuminalShine" --reset-admin-credentials to reset the Admin Credentials to “First Run” state. You will not lose any device pairings or settings.

General

  • The platform layer now exposes a dedicated log_dir() accessor parallel to appdata(). Today it forwards to the existing data directory on Linux and macOS, and resolves to a separate logs subtree on Windows. Cross-platform callers route through a single API so any future log-location change on other platforms is a one-line implementation flip.

Windows 11 General Availability

  • Install location moved to C:\Program Files\NortheBridge\LuminalShine\. Previous installs at C:\Program Files\Sunshine\ are migrated transparently by MSI MajorUpgrade — service registration, firewall rules, Start Menu shortcuts, the Reconfigure shortcut, and the registry DisplayIcon all retarget without manual intervention. The NortheBridge\ parent directory is removed on uninstall if no other NortheBridge product owns it.

  • Upgrade dialog now defaults to the new install path. A previously installed copy at C:\Program Files\Sunshine\ (or any other path containing \Sunshine\) is automatically relocated to C:\Program Files\NortheBridge\LuminalShine\ on upgrade. Both the interactive BrowseDlg suggestion and silent msiexec /quiet installs honor the new path, so the new binaries land at the new location without manual intervention. Custom install paths that do not contain \Sunshine\ are preserved as user choices.

  • Pinned taskbar, desktop, and user-Start-Menu shortcuts are repointed during upgrade. A new Repoint-LegacyShortcuts step in the installer walks every user profile on the machine and rewrites any .lnk whose target path or filename referenced the prior install. Rewrites are best-effort and never block the upgrade.

  • Logs split into %ProgramData%\LuminalShine\logs\ (sibling of the existing config\ directory). Existing *.log and rollover *.log.N / *.bak files migrate in place on first launch after upgrade. The in-app log viewer, log-export endpoint, and helper-log enumeration all follow the new root automatically.

  • Executables renamed for brand consistency and to namespace generic tool names out of collisions with anything else on a user’s PATH:

    • sunshine.exe → luminalshine.exe

    • sunshinesvc.exe → luminalshinesvc.exe

    • sunshine_display_helper.exe → luminalshine_display_helper.exe

    • sunshine_wgc_capture.exe → luminalshine_wgc_capture.exe

    • dxgi-info.exe → luminalshine-dxgi-info.exe

    • audio-info.exe → luminalshine-audio-info.exe

    • playnite-launcher.exe → luminalshine-playnite-launcher.exe

  • Windows service renamed from SunshineService to LuminalShineService. Autostart, service account, and ServiceInstall metadata are preserved across the rename; the prior sunshinesvc and SunshineService registrations are cleaned up automatically during upgrade.

  • TPM-sealed admin credentials and paired-client list are unaffected by the rename. The Windows Credential Manager entry (LuminalShine/AdminCredentials) and the TPM-bound key (LuminalShineAdminCredentialsKey) were already brand-neutral; the ResetAdminCredentials action remains gated on NOT UPGRADINGPRODUCTCODE so the MajorUpgrade sequence never wipes the vault.

  • New Start Menu shortcut: “Reset LuminalShine Admin Password”. If the saved Web UI admin login ever ends up in an unauthenticable state, you can recover with one click: launch the shortcut, confirm the prompt, and your next visit to https://localhost:47990 will show a fresh first-time setup screen. Paired Moonlight clients, the apps list, and all other settings are preserved — only the admin login is reset.

  • Service self-heal on unreadable admin credential. If the stored admin credential is ever found in a broken state (empty WCM blob, unparseable JSON, missing required fields), the service now logs a warning, erases the bad entry, and presents first-time setup on next browser visit instead of presenting an un-authenticable login form. TPM unseal failures are not auto-erased — those can be transient, and the new Reset Admin Password shortcut handles that case explicitly.

  • Named system objects renamed so a LuminalShine install coexists cleanly on a host that also has an upstream Sunshine-family product running:

    • Single-instance mutexes → Global\LuminalShineDisplayHelper / Local\LuminalShineDisplayHelper

    • Display-helper IPC pipe → luminalshine_display_helper

    • Display-event window class → LuminalShineDisplayEventWindow

    • NVAPI per-app profile → LuminalShineStream (keyed on luminalshine.exe)

    • Scheduled task author / trigger ID → LuminalShine Display Helper / LuminalShineDisplayHelperLogonTrigger

  • Display-helper IPC pipe name is now a single shared constant in display_settings_client.h, eliminating the prior risk of client and server drifting apart when the literal was spelled independently on each side.

  • Crash-dump bundle generation recognises both the new luminalshine_* filenames and the legacy sunshine_* filenames, so a bundle assembled immediately after upgrade still includes any pre-migration .dmp files that Windows hasn’t aged out yet. The diagnostic log-collection helper now probes both the new NortheBridge\LuminalShine\config\logs\ install location and the legacy Sunshine\config\logs\ for older logs you may want to attach to a bug report.

  • Log export and helper-log lookup walk both the new LuminalShine\ and legacy Sunshine\ per-user appdata subdirectories. Logs from helpers that ran before the rename remain discoverable.

  • Display-helper process cleanup matches both new and legacy helper executable names. A stale pre-upgrade helper is terminated reliably before the new helper takes its single-instance mutex.

  • Service launch path hardened. luminalshinesvc.exe now resolves the main host binary via an absolute path derived from its own module location, instead of relying on the SCM’s current-working-directory inheritance. This removes an occasional silent launch failure observed on hosts where the service’s effective CWD was not the install root.

  • MSI process-kill list now covers both new and legacy executable names. Upgrades from a prior install and reinstalls on a host already running the new binaries both kill the right processes before file replacement, so neither path leaves files mapped through reboot.

  • NVIDIA per-app driver profile is created/updated automatically on first launch as LuminalShineStream keyed on luminalshine.exe, carrying the same GPU power-mode behaviour as before. A pre-existing SunshineStream profile from a prior install becomes a cosmetic entry in NVIDIA Control Panel that no longer matches any running process and can be removed manually if desired.

Windows 11 Insider Preview

  • No Insider-specific changes in this release. The general-availability migration applies identically on Insider Preview hosts, and the upgrade-time process-kill / display-helper-cleanup hardening above incidentally addresses several edge cases that surfaced most often on Insider builds.

Hotfixes

  • MSI upgrade dialog defaulted to the legacy C:\Program Files\Sunshine\ path instead of the new NortheBridge\LuminalShine\ location. Root cause: WIXUI_INSTALLDIR makes Windows Installer persist the prior install’s ARPINSTALLLOCATION across upgrades and AppSearch re-seeds INSTALL_ROOT from it, overriding CMake’s new Directory-table default. Without an explicit override, both interactive BrowseDlg and silent msiexec /quiet upgrades would have laid the new binaries down at the legacy path — new brand, legacy location. Fixed with a Type-51 SetProperty that fires after AppSearch and only when INSTALL_ROOT still contains \Sunshine\, so fresh installs and post-26.05.1 upgrades remain no-ops.

  • Bootstrapper UI default install path also showed the legacy C:\Program Files\Sunshine\ even on fresh installs. The bootstrapper resolved its default from a hardcoded \Sunshine constant that was missed in the rename, and pre-existing installs registered at the legacy path bled through into the BrowseDlg textbox. Now reflects the canonical NortheBridge\LuminalShine path; legacy-path detection mirrors the MSI SetProperty so the UI and the actual install behaviour converge.

  • Web UI returned 404s on every asset; the encoder failed to start. The service binary, when launched by the Service Control Manager, inherited C:\Windows\System32 as its working directory. Relative asset paths (assets/web/index.html, assets/shaders/directx/*.hlsl, assets/desktop.png, etc.) resolved against System32 and were not found, producing a broken login form and a Platform-init failure with HRESULT 0x80070003. The main host now anchors its working directory to the executable’s install root at startup before any relative-path lookup runs.

  • Bootstrapper “Browse” button silently did nothing on hosts where the modern Windows shell folder picker (IFileOpenDialog) failed to instantiate — most commonly observed under certain RDP configurations and on hosts with non-standard COM registration. The button now falls back to the classic FolderBrowserDialog if the modern picker errors out, and surfaces a diagnostic dialog if both pickers fail rather than appearing dead.

  • The --reset-admin-credentials CLI subcommand worked, but every shipped invocation of it didn’t. The argument dispatcher only recognises subcommands prefixed with --, but the WiX uninstall action’s ResetAdminCredentials custom action and the bundled documentation both invoked it as a bare reset-admin-credentials. As a result the manual-uninstall credential-clear path was a silent no-op in every release through 26.05.0-rc3.hfx3. Both invocations now route correctly through the dispatcher; the new Start Menu “Reset LuminalShine Admin Password” shortcut provides a discoverable in-product alternative to ever needing the CLI.

Automated release for 26.05.0-rc3.hfx4.

Contributors

  • @NorthernLights

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc2…26.05.0-rc3.hfx4

26.05.0-rc2

Tag: 26.05.0-rc2 · Released: 2026-05-20 · Pre-release

LuminalShine 26.05.0 Update Release Candidate 2

Danger

LuminalShine now requires the Windows Credential Store and the Trusted Platform Module (TPM 2.0).

Important

This Release Candidate is being considered for the first Stable Release. Please report any issues you encounter so we can determine if this Release Candidate will be the first Stable Release.

General

  • Argon2id KDF for admin credentials, replacing single-round SHA-256. Parameters: m=64 MiB, t=3, p=1, tuned for ~100 ms login latency. Versioned record format with transparent SHA-256 → Argon2id upgrade on the next successful login (5b3fa207).

  • cred_store abstraction decouples credential storage from the file backend, enabling per-platform storage drivers (a7953f5a).

  • Windows Credential Manager backend stores the credential blob in the per-machine vault (DPAPI-sealed under the SYSTEM master key, TPM-bound by default on Windows 11). One-shot migration from the legacy sunshine_credentials.json file, plus a “Reset Admin Credentials” card in Troubleshooting (2f61739b).

  • Linux libsecret + macOS Keychain backends with silent file-backend fallback on Linux when the Secret Service is unreachable (eec5d7b9).

  • TPM-bound credential sealing on Windows via the Microsoft Platform Crypto Provider — non-exportable RSA-2048 key wraps the AES-256-GCM credential key. Default ON; opt-out toggle in Settings → Files. An attacker who acquires the raw WCM bytes cannot decrypt them without the original TPM device (dc661c80).

  • MSI uninstall clears the WCM entry + TPM key by default (KEEPADMINCREDENTIALS=1 opts out). New crypto::secure_wipe helper wipes intermediate plaintext credential buffers at every load/save/verify call site. Pairings live in sunshine_state.json and are preserved across every credential reset (f29b3564).

  • Playnite auto-sync default flipped from ON to OFF — fresh installs no longer auto-publish a Playnite library without an explicit opt-in.

  • Steam Library Integration: VDF parser + Steam path discovery + multi-file app loader. The Moonlight app list now merges apps.json + steam_apps.json + nonsg_apps.json in canonical display order: Desktop → Steam → user-added apps.json entries → Steam Games → Non-Steam Games (cddb4813).

  • Steam library auto-sync scans every installed Steam game via appmanifest_*.acf across all Steam library folders, writes steam_apps.json, surfaces games in Moonlight under a dedicated “Steam Games” section. 30-second background polling means new installs appear automatically. Launch via steam://rungameid/<appid>. New “Steam Library” Settings tab placed above Playnite with master toggle, family-share inclusion sub-toggle, and a “Clear Steam Library Cache” Troubleshooting card. Default OFF (3942c19b).

  • Non-Steam shortcuts auto-sync scans every Steam user’s shortcuts.vdf (binary VDF parsing), surfaces “Add a Non-Steam Game” entries under a “Non-Steam Games” section. Independent toggle in the same Settings tab. Default OFF (ff87cfa1).

  • AMD AMF capability probe + /api/health/amd-encoder endpoint. Native probe of amfrt64.dll reports per-codec hardware encoder instance counts so the UI can offer codec-specific options only when the active GPU actually supports them (654b6975).

  • amd_split_encode config option exposed in the Settings UI with Auto / Enabled / Disabled modes — surfaces only when an AMD adapter is active (f4d963b6).

  • AMD dual-VCN split frame encoding wired into the AV1 and HEVC AMF paths so RDNA 3 7900-series and RDNA 4 9070-series cards encode each frame on both hardware encoder instances in parallel; single-VCN parts silently fall back to single-tile (6b25f4bb).

  • amd_split_encode default flipped to Auto so users on dual-VCN cards get the latency win without having to opt in (a1d396b7).

  • DLSS / DLSS Frame Generation / DLAA detection at session start with a soft, one-shot informational tip when 4K HDR + NVENC + AI render modules are detected in the foreground game. Tone is helpful, not a warning (6239a62b).

  • Log extraction enhancements for the Troubleshooting page — richer filtering and surfacing for diagnostic logs (d5c28cc5).

  • PowerShell 5.1 minimum / PowerShell 7 recommended is now documented in the System Requirements table, with a link to Microsoft’s official PowerShell 7 GitHub repo (2ff05a09).

  • Release artifact naming standardised to LuminalShine_x64-*: LuminalShine_x64-installer.exe, LuminalShine_x64-portable.zip, LuminalShine_x64-debuginfo.7z. The raw MSI is built every run but stays in the CI artifact bundle rather than being attached to the public release page (15d11f53, 9ca08ccb).


Windows 11 General Availability

  • SudoVDA recovery ladder (Phase 3 of the TDR remediation plan) — new in-place two-level recovery for SudoVDA when a GPU TDR wedges the display stack. Level 1 recycles the SudoVDA user handle (closeVDisplayDevice → initVDisplayDriver); Level 2 does a PnP disable + enable on the SudoVDA root device (root\sudomaker\sudovda), equivalent to the Device Manager right-click. Scoped to the SudoVDA HWID only; MTT VDD and other devices are never touched. New “Restart Virtual Display Driver” escape hatch added to the Troubleshooting page so users can fire Level 1 + Level 2 manually without waiting for the auto-recovery branch (84550135).


Windows 11 Insider Preview

  • WDDM reset recovery (Phase 4 of the TDR remediation plan) — new Level 3 recovery via Ctrl+Win+Shift+B for when SudoVDA Level 1 + Level 2 cannot bring the display stack back, usually because the WDDM context itself is stuck mid-TDR-recovery rather than anything wrong with SudoVDA. SYSTEM-context callers cannot SendInput into the interactive session, so the keystroke is routed through display_settings_helper, which already runs in the user session. New IPC frame type WddmReset = 9, 15-minute per-process cooldown to prevent runaway escalation, sleeps 3 seconds for Windows to settle, then recycles the SudoVDA handle so the next AddVirtualDisplay opens a fresh kernel binding against the recovered display port. The auto-recovery ladder escalates Level 1 → 2 → 3; the manual “Restart Virtual Display Driver” button still tops out at Level 2 so the user’s desktop never gets blanked without a less-disruptive remedy having been tried first (1eff52a3).

  • Pre-flight D3D11 health check at session start (Phase 5 of the TDR remediation plan) — detects a stuck WDDM context before the first frame is captured and triggers the recovery ladder proactively instead of failing into a black stream (1eff52a3).


Hotfixes

  • MSI installer: SudoVDA driver installation no longer silently fails on PowerShell 5.1-only hosts. The POWERSHELL_PATH MSI property defaulted to a literal [SystemFolder]\WindowsPowerShell\v1.0\powershell.exe placeholder that MSI’s one-level property formatter never recursively expanded, causing every PS-launching deferred custom action — including the SudoVDA install.ps1 post-step and installer-migrations.ps1 — to spawn a path that didn’t exist (0x80070002 ERROR_FILE_NOT_FOUND). Now resolved via two ordered SetProperty Type-51 immediate CAs that anchor PS 5.1 first, then override to PS 7 when detected. Affected installs can recover by running an MSI Repair after upgrading (87c262b1).

  • Settings UI: log extraction grep / awk commands fixed for improved Troubleshooting log parsing on locales that previously produced truncated output (a1386cf6).

  • Build: forward-declare check_content_type so the Windows test build compiles cleanly when the function is used before its definition in confighttp.cpp (f96b7e37).

  • Build: sunshine_t aggregate initialiser converted to C++20 designated initialisers and OSSL_KDF_NAME_ARGON2ID replaced with its canonical string literal so the credential-hardening series compiles under the MSYS2 UCRT64 / clang 16.1 / gnu++23 toolchain used by the coverage CI (c4be3a43).

  • Build: #include <cstdint> added to the src/steam/ TUs so the Steam Library Integration compiles on libstdc++ 16 (which does not transitively include <cstdint> via <algorithm> / <optional>). Non-WebRTC test-build -Wunused-* warnings silenced via [[maybe_unused]] (141fa1b7).

Automated release for 26.05.0-rc2.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-rc1…26.05.0-rc2

26.05.0-rc1

Tag: 26.05.0-rc1 · Released: 2026-05-18 · Pre-release

LuminalShine 26.05.0 Update Release Candidate 1 (RC1)

Note

This is the first Release Candidate release of LuminalShine. Depending on extensive testing, this may be released as the first “Release” version.

This release lands the full GPU TDR (Timeout Detection and Recovery) remediation plan as four cooperating layers: detect the failure unambiguously, bound the session-shutdown window, recover the SudoVDA virtual display in place without ever falling back to a different driver, and warn proactively when the at-risk workload pattern is present. The driver-level interaction between sustained AV1 NVENC streaming, DLSS / DLAA / Frame Generation, and 4K HDR — which has been the dominant cause of mid-session black screens on RTX 40 / 50 series — is now addressed at every layer LuminalShine controls.

General

  • Streams no longer freeze for minutes after a GPU crash. When the encoder hits the post-TDR D3D11CreateDevice retry exhaustion, the session unwinds within ~10 seconds and the Moonlight client receives an immediate, intelligible failure instead of staring at a frozen image. Previously the recovery loop could leave the session wedged for ~2.5 minutes before the 10-second hang watchdog fired.

  • New “GPU / Display Stack Health” card in the Troubleshooting view. Shows the count of TDR-class events recorded since the process started, when the most recent one fired, which subsystem detected it (encoder D3D11, Desktop Duplication probe, virtual-display enumeration, or QueryDisplayConfig), and the underlying HRESULT. Refreshes on login and on demand.

  • Recovery-aware session gate. New streaming sessions are refused while LuminalShine is mid-recovery from a TDR, so reconnects don’t pile up against a stuck display stack. The client sees a clean disconnect and retries cleanly once the recovery completes.

  • Single high-signal log line for every TDR escalation. Each incident emits one GPU TDR escalated to WDDM stack failure line tagged with the source subsystem so support readers can grep one symptom instead of correlating five.

  • New /api/health/tdr and /api/health/render-stack endpoints. Power users and dashboards can poll the same data the Troubleshooting card surfaces.

Windows 11 General Availability

  • SudoVDA auto-recovery ladder. When the display stack is wedged, LuminalShine now escalates through a two-level in-place recovery sequence keyed on SudoVDA’s hardware ID — the user-mode driver handle is recycled first; if that’s not enough, the SudoVDA root device is PnP-disabled and re-enabled (the equivalent of right-clicking the device in Device Manager, but run from the SYSTEM service). Cooldown-gated: 15 seconds for the cheap recycle, 5 minutes for the disable/enable. MTT VDD and unrelated UMDF drivers are never touched.

  • “Restart Virtual Display Driver” recovery button in Troubleshooting. A one-click escape hatch that runs the PnP disable+enable on demand, ignoring the auto-recovery cooldowns. Useful when you suspect SudoVDA is wedged but the auto-recovery hasn’t fired yet. Includes a confirmation dialog because it tears down any active streaming session bound to the virtual display.

  • “Show Diagnostic” support button in Troubleshooting. Opens a modal with the full SudoVDA PnP status — device-present flag, instance ID, hardware IDs, parsed CM_PROB status, last recovery attempt and outcome — with a Copy-to-clipboard action. Replaces “open Device Manager and screenshot it” for support tickets.

  • “Virtual Display Adapter Failure detected” banner. Persistent warning across the top of the Troubleshooting view whenever the GPU / WDDM stack is mid-recovery, so the user sees what’s happening before scrolling to the cards.

  • Pre-flight D3D11 health check at session start. Before launching the encoder thread, LuminalShine runs a single D3D11CreateDevice probe (~5 ms) to confirm the GPU stack is healthy. If it returns DXGI_ERROR_UNSUPPORTED or DXGI_ERROR_DEVICE_REMOVED, the session is refused with a clear log line — no more sessions hanging in display init after sleep/wake or after a TDR the recovery-recent flag has already aged out.

  • Streaming environment tip when DLSS / DLAA / Frame Generation is detected alongside 4K HDR NVENC. LuminalShine walks foreground processes for nvngx_dlss.dll, nvngx_dlssg.dll, nvngx_dlaa.dll and, when found alongside a 4K HDR 10-bit NVENC session, emits a single soft tip per (codec, resolution, HDR) tuple: a friendly heads-up that the combined Tensor + NVENC workload is a known driver-level interaction (not a LuminalShine defect), with a suggestion that switching to HEVC sometimes rides out concurrent workloads more smoothly. Surfaces as a system-tray toast plus a compact “Streaming environment” card in Troubleshooting. No action is required from the user — it’s an FYI, not a warning.

  • System-tray notification on TDR detection. One toast per 2-minute cooldown so a single incident doesn’t fire repeatedly.

Windows 11 Insider Preview

  • WDDM reset (Ctrl + Win + Shift + B) as recovery Level 3. When the cheaper recovery levels can’t bring SudoVDA back — the canonical fingerprint of the WUDFHostProblem2 / HostTimeout pattern on Insider Preview channels — LuminalShine now synthesises the Windows built-in graphics-driver-reset keystroke. The request is routed through the existing display helper process (which runs in the user’s interactive session and has the desktop integrity level required for SendInput) so SYSTEM-context callers can trigger it safely. After the keystroke is dispatched, the SudoVDA user handle is recycled and the next AddVirtualDisplay opens a fresh kernel binding against the recovered display port.

  • Rate-limited at 15 minutes per process. A permanently broken adapter is never hammered in a tight loop — but a single in-session wedge that survives Levels 1 and 2 of the ladder will be cleared without the user reaching for their keyboard.

  • Manual recovery button never triggers WDDM reset unprompted. The “Restart Virtual Display Driver” button caps at the PnP-cycle level (Level 2) because Level 3 momentarily blanks the entire desktop. Auto-recovery still escalates all the way to Level 3 when needed.

  • The previously-stuck install pattern (TDR followed by a 2.5-minute frozen reconnect) is now handled end to end. Detect → bound shutdown → ladder recovery → pre-flight gate on the next attempt. The Moonlight client should never see a multi-minute black screen again after a single TDR.

Automated release for 26.05.0-rc1.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.7…26.05.0-rc1

26.05.0-beta.7

Tag: 26.05.0-beta.7 · Released: 2026-05-16 · Pre-release

LuminalShine 26.05.0 Update Beta 7

Tip

This is the final Beta version before we enter the Release Candidate Stage.

Important

Update to this version as soon as possible. It resolves a critical bug with pairings not being retained by LuminalShine.

General

  • Pairings now persist through a corrupted state file. nvhttp::save_state previously short-circuited and returned the moment it couldn’t parse the existing sunshine_state.json — which meant that on a broken install, every new pair was silently dropped before the atomic write and the rotating .bak had a chance to fire. The save path now flows through the same recovery-aware loader as the read path: if both the primary and .bak are unusable, an empty tree is used and the corrupt file is overwritten with valid new content. New pairings stick.

  • Stacked brand-mark in the navigation header. The web UI’s top-left identity block now stacks “LuminalShine” over “NortheBridge Foundation” in the gitdocs.northebridge.com type style, with the Sunshine logo on the left wearing a soft cyan halo. Product name leads; foundation attribution stays visible without dominating the nav.

  • “Reset Stored Pairings” escape hatch in Troubleshooting. New POST /api/state/reset endpoint (auth-gated) and matching button in the Troubleshooting view. Archives the current sunshine_state.json, luminalshine_state.json, and their .bak siblings to .corrupt-<UTC-timestamp> (kept on disk for forensics), clears in-memory pairings, generates a new host UUID, and writes a fresh empty state. Admin credentials are NOT touched — login survives the reset. Use this when the auto-recovery paths can’t resolve a corruption on their own.

Windows 11 General Availability

  • Upgrades no longer race the running service. The installer now stops the LuminalShine service unconditionally on every upgrade and repair, not just on basic/silent (UILevel < 5) installs. The previous gating meant interactive upgrades had to rely on Windows Restart Manager to detect file-in-use, which is unreliable when Defender holds a scan handle on sunshine.exe. The result was sporadic “Access Denied” rollbacks of the whole MSI transaction, leaving LuminalShine in an unusable state.

  • Service stop retries with backoff. The PowerShell stop block retries Stop-Service up to 5 times with 1-second backoff so transient Stopping states from SCM can’t leak past file replacement. The companion process kill list now also includes sunshine_display_helper and display_helper, both of which were observed holding sunshine_*.dll open across upgrades.

  • Migration failures can no longer roll back an install. RunInstallerMigrations is now flagged Return="ignore", so a best-effort config migration that hits a sharing violation or transient error never tears down the MSI transaction. The C++ runtime carries the same migration logic as a safety net on first launch.

  • Runtime migration refuses to import corrupt JSON. platf::appdata() now validates each *.json file before copying it from the legacy <INSTALL_ROOT>\config\ directory into %ProgramData%\LuminalShine\config\. Zero-byte and unparseable files are skipped with a Warning: appdata: skipping unparseable JSON during migration: ... log line, so a corrupt state file from a previous broken install doesn’t propagate into the new location.

  • Self-heal for a stuck install. When sunshine_state.json exists at exactly zero bytes AND no .bak is present, LuminalShine now deletes the empty file on startup so the next save can write cleanly. Targets the exact stuck signature produced by the previous beta’s silent-abort bug — no manual elevation or File Explorer surgery needed.

  • Visible migration diagnostics. Every std::filesystem::copy failure (Access Denied, sharing violation, antivirus quarantine, disk full) is now logged through BOOST_LOG instead of being silently swallowed. The installer’s PowerShell migration script also tees its full output to %TEMP%\luminalshine-installer-migration.log so the next install incident is diagnosable from a single file.

Windows 11 Insider Preview

  • Interactive-UI upgrades on Insider Preview no longer hit “Access Denied” during the install routine. The combination of the unconditional service stop, the retry/backoff loop, the broadened process kill list, and the non-fatal migration flag closes the exact MSI rollback path that left LuminalShine in an unusable state on flight upgrades. The fix is concentrated at the points where Insider Preview servicing and Defender are most likely to be holding scan handles or staged-file replacements: just before InstallFiles, and around RunInstallerMigrations.

  • Corrupt state files from a prior broken upgrade no longer follow you forward. Earlier flight cycles could leave a zero-byte sunshine_state.json in C:\Program Files\Sunshine\config\ that the installer would faithfully copy into the new %ProgramData%\LuminalShine\config\ location. The runtime migration now validates each JSON file before copying — and if a previous install already deposited an empty file at the new location, the self-heal on next launch removes it so the first new pair can write a clean state plus a fresh .bak.

  • The previously-stuck installation self-recovers on first launch. No manual cleanup is required: the empty sunshine_state.json is removed, the next pair attempt writes valid state, the .bak chain finally bootstraps, and every subsequent boot is protected by the recovery loader. If anything else ever wedges it again, the new “Reset Stored Pairings” button in Troubleshooting is the manual lever.

Automated release for 26.05.0-beta.7.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.6…26.05.0-beta.7

26.05.0-beta.6

Tag: 26.05.0-beta.6 · Released: 2026-05-15 · Pre-release

LuminalShine 26.05.0 Update Beta 6

Important

It is recommended to update to this version ASAP, as it resolves a critical issue where pairings of devices are lost.

Tip

This is a potential release to become Release Candidate 1.

General

  • Aurora-glass Web UI. The Vue web interface (https://localhost:47990) has been redesigned to match the NortheBridge Foundation brand at gitdocs.northebridge.com. New deep-navy aurora background with cyan/violet/teal halos, frosted-glass cards and modals, Inter typography, gradient-text headings, and a brand-mark pill in the header. The light theme has been retired; the UI is now dark-only with the “Alexa+ Cyan” accent throughout.

  • Crash-safe state writes. All persistent state (pairings, admin credentials, web session tokens, API tokens, snapshot exclusions, apps) is now written atomically with an fsync barrier before rename, so a power loss or sudden shutdown mid-write can never surface a zero-byte file on the next boot. Every successful save also refreshes a sibling .bak copy.

  • Automatic recovery from corrupted state. When a state file fails to parse — whether from a torn write, a Windows servicing reboot, or external interference — LuminalShine now transparently falls back to the most recent .bak, restores it to the primary location, and continues. The previous build silently treated an unreadable state file as “empty,” which could wipe pairings on the next save.

  • Publisher metadata corrected. CI-built installers and binaries now identify their publisher as NortheBridge Foundation consistently (previously some CI artifacts shipped as just “NortheBridge”). The Windows registry “Publisher” string, the in-app “Package Publisher” log line, and the WiX installer manifest all match.

Windows 11 General Availability

  • Config moved to %ProgramData%\LuminalShine\config\. State files (sunshine_state.json, luminalshine_state.json, sunshine_credentials.json, apps.json, sunshine.conf) no longer live under C:\Program Files\Sunshine\config\. The new location sidesteps UAC VirtualStore redirection — previously, files written by the SYSTEM service and files written by user-context tools could end up in two different views of the same path, producing confusing “credentials reset” or “lost pairings” symptoms.

  • One-time automatic migration. On the first launch after upgrade, LuminalShine copies your existing pairings, credentials, apps, and configuration from the legacy location into the new one. The copy is idempotent and never overwrites existing data — if you’ve already started the new build, your current configuration is preserved.

  • Installer-side migration. The MSI/EXE installer also runs the same migration during upgrade, so users who run the installer twice (or who reinstall over an existing install) get their pairings in place immediately on first launch — no first-run handoff window.

Windows 11 Insider Preview

  • Pairings now survive flight upgrades. The most disruptive symptom on Insider Preview builds — pairings disappearing overnight after a Windows Update or servicing reboot — is fixed at the root cause. Cumulative updates and Insider Preview flight installs can stage Program Files subdirectories using rename/replace operations that briefly leave files at zero bytes; with config in %ProgramData%, those operations don’t touch LuminalShine state at all.

  • Belt-and-suspenders recovery for servicing windows. Even when the new location is touched (e.g. by Defender quarantining or a third-party “cleanup” tool), the new .bak rotation and recovery path automatically restore the last known-good state on the next boot, with a Warning: log line so you can see recovery happened. The previous build would silently start with empty pairings and then immediately overwrite the .bak on the first save, sealing the loss.

  • Faster diagnosis of remaining state issues. Write failures now log specifically through the statefile: channel (e.g. statefile: atomic rename failed: …, statefile: recovered <path> from backup), and the SessionTokenManager/ApiTokenManager write paths route through the same atomic helper, so the recurring failed writing state file: write error lines that appeared in Insider Preview logs are addressed by the same fix that protects pairings.

Automated release for 26.05.0-beta.6.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.5…26.05.0-beta.6

26.05.0-beta.5

Tag: 26.05.0-beta.5 · Released: 2026-05-14 · Pre-release

LuminalShine 26.05 Update Beta 5

Important

It is recommended to update to this version of LuminalShine as soon as possible. It corrects a critical bug that may cause loss of LuminalShine Pairings and Administrative Access.

General

  • No General changes in this build.

Windows 11 General Availability

  • Critical fix: admin credentials and Moonlight pairings no longer reset on service restart. Two separate failure modes were corrupting the host state file: a write race between the credentials-save path (save_user_creds) and the pairings-save path (save_state), both targeting sunshine_state.json with inconsistent locking, and non-atomic file writes that could leave a truncated file behind if a concurrent operation interrupted the write. Concurrent pair events landing in the window between the credentials handler’s read and write would silently roll back any pairings added in that window, and a partial write would cause the next startup to reject the file outright — wiping credentials, the unique host ID, and every paired device.

  • Atomic writes. State and credentials file writes now go through a temp-file-plus-rename path (MoveFileExW on NTFS). Concurrent readers and crash recovery see either the full prior contents or the full new contents — never a partial file.

  • Mutex coverage. save_user_creds, reload_user_creds, and the password-change HTTP handler now all serialize against the same lock that save_state already used. Pair events and credential changes can no longer interleave destructively.

  • Defensive read-back. After saving a new password the host immediately re-hashes the supplied password against the salt it just wrote, compares it to in-memory state, and returns a 500 “Failed to persist new credentials” if they don’t match — so a write that succeeded on the API surface but failed at the filesystem (permissions, antivirus quarantine, etc.) is now reported at save time instead of silently failing at the next login.

  • Separate credentials file. Admin credentials now live in their own sunshine_credentials.json next to sunshine_state.json instead of sharing the file with pairings. Existing installs are migrated automatically on first launch: any legacy username/salt/password at the top of sunshine_state.json is moved to the new file and stripped from the state file. Idempotent — once the dedicated file exists, the migration is skipped forever.

  • Regression coverage. New unit suite locks down the atomic-write contract (replaces target, leaves no .tmp, creates parent dirs), the migration round-trip (creds moved, legacy keys removed, paired devices under root.named_devices preserved), and migration idempotency.

Windows 11 Insider Preview

  • No Insider-specific changes in this build. The credentials fix applies equally to GA and Insider hosts.

Automated release for 26.05.0-beta.5.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.4…26.05.0-beta.5

26.05.0-beta.4

Tag: 26.05.0-beta.4 · Released: 2026-05-13 · Pre-release

LuminalShine 26.05.0 Update Beta 4

Note

LuminalShine is currently pre-release software. Please report any issues on GitHub Issues.

General

  • Render GitHub release notes on the Dashboard as Markdown. The “Release Notes” panel that pops out from the update banner used to display the raw Markdown source (bold, # headings, link). It now renders proper formatting — headings, lists, bold/italic, links, tables, task lists, syntax-highlighted code blocks (via highlight.js with GitHub-dark colors), and GitHub-style autolinks for @username and #issue references — all sanitized through DOMPurify so untrusted release-body content can never inject script. Links open in a new tab so the Dashboard never gets navigated away from.

  • About page with diagnostics, accessible from the navigation. A new read-only page that surfaces, in copy-friendly form: version / commit / branch, GPU vendor and VRAM, driver versions and dates, encoder probe results (H.264 / HEVC / AV1 with YUV444), reference-frame-invalidation support, virtual display backend status, HDR state on each connected display, Windows OS version and edition, and the Windows Insider channel and ring when applicable. Designed to be screenshotted or copied straight into a support ticket or GitHub issue.

  • High Performance Streaming card on the Dashboard. New one-click profile that retunes virtual display, display automation, double-refresh workaround, encoder preset, NVENC HAGS, and minimum CPU thread count for high-end host setups. Vendor-aware: NVENC settings on NVIDIA, AMF analogs on AMD, QuickSync analogs on Intel. Snapshots the user’s prior settings to local storage on enable, with explicit “Restore Previous User Settings” and “Restore to Default” actions on the card. Tested on an NVIDIA Blackwell 5080-class GPU, Intel Core i9-12900KS, 64 GB RAM, Wi-Fi 6E to Wi-Fi 5 Moonlight clients, and 10 Gbps host networking.

  • Correct “Windows 11” labeling in diagnostics. On Windows 11 hosts, the About page (and any other consumer of the platform product-name metadata, including support bundles) was showing “Windows 10 Pro” / “Windows 10 Enterprise” / etc. because Microsoft deliberately leaves the registry’s ProductName value as “Windows 10 X” on Windows 11 for application-compatibility reasons. The product name now disambiguates by build number (≥ 22000 → Windows 11) and rewrites the marketing prefix accordingly. Idempotent: if Microsoft ever updates the registry value natively, the rewrite becomes a no-op.

  • Web UI dark palette swap. Dark theme accent moved from Indigo to Alexa Cyan to align with the LuminalShine brand identity.

Windows 11 General Availability

  • Wix bootstrapper sticky-footer layout. The Install / Update / Uninstall / Close buttons in the installer’s bootstrapper window are now always visible. Previously, when the install section grew (driver chooser, currently-installed banner, tips, status), the content card pushed the footer row past the visible window bottom. Content above now scrolls; the footer stays pinned. Window minimum width was bumped 760 → 880 px (target 920 px) so the worst-case button row no longer clips the rightmost actions.

  • Wix bootstrapper UI accent. The installer’s accent color is swapped from Indigo to Alexa Cyan to match the web UI’s brand direction.

  • Streamlined installer downloads. The standalone .msi is no longer published as a separate release artifact. The bootstrapper .exe already contains the MSI as its embedded payload, so end users get a single installer (LuminalShine-Windows-AMD64-installer.exe) and the portable archive (LuminalShine-Windows-AMD64-portable.zip). No behavior change — installing the .exe writes the same Windows Installer database that the MSI did.

Windows 11 Insider Preview

  • No Insider-specific changes in this build. All recent stability work for Canary builds (D3D11CreateDevice TDR backoff, SudoVDA/MTT QueryDisplayConfig handle reset, progressive WGC helper handshake) shipped in the previous release. This build’s user-facing changes apply equally to GA and Insider hosts.

Automated release for 26.05.0-beta.4.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.3…26.05.0-beta.4

LuminalShine 26.05.0 (Beta 3)

Tag: 26.05.0-beta.3 · Released: 2026-05-09 · Pre-release

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: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.2…26.05.0-beta.3

LuminalShine Code Architecture: @NorthernLights

26.05.0-beta.2

Tag: 26.05.0-beta.2 · Released: 2026-05-09 · Pre-release

LuminalShine 26.05 Update Beta 2

General

  • Update checks now succeed on Windows hosts that have a busy root certificate store. The Windows trust store loader used to dump every cert from LOCAL_MACHINE\ROOT and CURRENT_USER\ROOT (commonly ~1,260 entries with heavy duplication) into a CA bundle that exceeded curl’s 1 MiB schannel limit, breaking GitHub release queries with schannel: CA file exceeds max size of 1048576 bytes. The bundle is now deduplicated by SHA-256 fingerprint, filtered to actual trust anchors (BasicConstraints CA: TRUE + KeyUsage keyCertSign), and size-capped — and CURLSSLOPT_NATIVE_CA is preferred up front so most builds skip materializing a bundle entirely. Boot-time log now reports trust-anchor count plus how many certs were filtered out for visibility into future regressions. (commit 0fadd32b)

  • Cleaner support logs at startup. The NVENC encoder probe deliberately tries AV1 + YUV444 first, expects it to fail on consumer GeForce hardware, and falls back to YUV420. That benign path used to produce six Error-level log lines per cold boot — papered over with a literal // Ignore any errors mentioned above // comment in the log itself. The two specific messages from this path (gpu doesn’t support YUV444 encode and NvEncUnregisterAsyncEvent failed: NV_ENC_ERR_DEVICE_NOT_EXIST during cleanup-after-aborted-init) have been demoted to warning and debug respectively. Real session-time encoder failures still surface at error. (commit 2cb79875)

  • System-tray context-menu entry now reads “Open LuminalShine”. Right-clicking the taskbar icon previously surfaced “Open Sunshine” — leftover from the upstream fork. The auto-comment that tells users how to export logs from a GitHub issue was updated to match. (commit 8783f15e)

Windows GA

  • 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) or DXGI_ERROR_DEVICE_REMOVED (0x887A0005) 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, which under sustained encode load reliably ended streaming sessions in a recovery loop. A new D3D11CreateDeviceWithRecovery helper retries those two transient HRESULTs with exponential backoff (1s → 2s → 4s → 8s, ~15s total budget) before giving up. Non-transient failures still return immediately. A successful retry logs an info-level “recovered after N attempts” line for triage. (commit d529912f)

  • 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 of the helper exe, 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. Fix: per-process consecutive-timeout tracker. The first attempt of each session keeps the tight 3-second budget so a real deadlock still fails fast; once a timeout has been observed in this process, subsequent attempts use a 6-second budget that catches the slow-start case in one retry instead of four. Counter resets on a successful handshake. (commit ac5dfeb7)

  • Encode-wait timeout log lines now carry diagnostic context. When NVENC stops returning packets, the previous one-line error gave no signal about whether the timeout was a transient bubble or the leading edge of a TDR. A new info-level line emitted just before the error reports session age, frame index vs last successfully-encoded frame index, time since the previous successful encode, the 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. (commit 63d47022)

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 to LuminalShine, which then can’t resolve the active virtual display on resume. Previously this caused the resume loop to spin until the user killed the process. Fix: 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. The reset is rate-limited to once per 30 seconds so a permanently-broken driver can’t be bounced in a tight loop. (commit ad1b8e58)

  • 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 failure observed in the 2026-05-08 support logs), the timeout-context telemetry (B6) records what state the encoder was in, the D3D11 retry helper (B1) waits out the kernel’s TDR window instead of failing on the first re-create, the virtual-display reset path (B2) rescues the OS display API from its ERROR_NOT_SUPPORTED stuck state, and the helper-handshake backoff (B4) keeps the subsequent reconnect from cold-starting into a deadlock loop. (commits 63d47022, d529912f, ad1b8e58, ac5dfeb7)

Automated release for 26.05.0-beta.2.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.1…26.05.0-beta.2

26.05.0-beta.1

Tag: 26.05.0-beta.1 · Released: 2026-05-01 · Pre-release

LuminalShine 26.05 Update Beta 1

This is the initial release foundation of LuminalShine, featuring 26.04.0-alpha.7’s features, updates, and improvements in addition to the following general maintenance fixes:

General Changes

  • Update README.md for LuminalShine

  • Added SECURITY.md and Revised Supported Version of LuminalShine

  • Revised Contributing Guidelines

  • Revised Localization Details

  • Updated Preferred IDE to VSCode

  • Update Publisher Handling to “NortheBridge Software Foundation”

Windows General Availability & Windows Insider Preview Changes

  • Increase the size of the Wix Bootstrapper Installation / Update / Uninstallation Runtime

  • Enhanced Driver Status Handling

Automated release for 26.05.0-beta.1.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.7…26.05.0-beta.1

26.04.0-alpha.7

Tag: 26.04.0-alpha.7 · Released: 2026-04-30 · Pre-release

LuminaryShine Release 26.04 Update Alpha 7

General Fixes

  • Added SEH Handling for a number of features that openly required it for thread safety

  • Updated LuminaryShine to use NortheBridge Linking

  • Non-Windows Platform Support is deprecated (Going forward, LuminaryShine will support Windows on x64 for now)

  • Refactored “dead code” from the original code base of LuminaryShine

Windows (24H2 and Main Release Branch)

  • Resolved issues with LuminaryShine’s Installer, preventing the entire executable from being viewable

  • Added MTT VDD as a Display Driver Option in case a fallback is required. View Roadmap for LuminaryShine VDA

Windows Insider Preview Builds (Canary, Dev, Beta)

  • Resolved an issue with DXGI to allow Windows Canary Builds 28957 or later and current Windows Insider Preview Builds to stream using LuminaryShine (Note: You must use either HEVC or AV1. The thread dies when using H.264, and that is a Microsoft issue.)

Roadmap

  • Complete the transition of initial documentation to LuminaryShine

  • Examine H.264 Incompatibility

  • Replace SudoVDA and MTT VDD with LuminaryShine Virtual Display Adapter

  • Sign all Code Releases with a Codesigning Certificate

Automated release for 26.04.0-alpha.7.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.6…26.04.0-alpha.7

26.04.0-alpha.6

Tag: 26.04.0-alpha.6 · Released: 2026-04-30 · Pre-release

Automated release for 26.04.0-alpha.6.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.5…26.04.0-alpha.6

26.04.0-alpha.5

Tag: 26.04.0-alpha.5 · Released: 2026-04-29 · Pre-release

Automated release for 26.04.0-alpha.5.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.4…26.04.0-alpha.5

26.04.0-alpha.4

Tag: 26.04.0-alpha.4 · Released: 2026-04-29 · Pre-release

Pre-Alpha Early Access Software

  • Foundation for mutli-VDD Support. Use the latest LuminalShine in order to experience a modern Sunshine game host experience.

Automated release for 26.04.0-alpha.4.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.3…26.04.0-alpha.4

26.04.0-alpha.3

Tag: 26.04.0-alpha.3 · Released: 2026-04-29 · Pre-release

Pre-Alpha Early Access Software

  • Alpha 3 contains the foundation for the installation system and should not be used due to an error installing virtual display drivers. Please use Alpha 4 instead.

Automated release for 26.04.0-alpha.3.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.2…26.04.0-alpha.3

26.04.0-alpha.2

Tag: 26.04.0-alpha.2 · Released: 2026-04-29 · Pre-release

Pre-Alpha Early Access Software

  • This Alpha contains the foundation for all fixes related to Windows 11 Insider Preview and the current Windows 11 25H2 Builds butt does not expose them. Please use Alpha 3.

Automated release for 26.04.0-alpha.2.

Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.04.0-alpha.1…26.04.0-alpha.2

26.04.0-alpha.1

Tag: 26.04.0-alpha.1 · Released: 2026-04-29 · Pre-release

Pre-Alpha Early Access Software

Automated release for 26.04.0-alpha.1.

Full Changelog: https://github.com/NortheBridge/luminalshine/commits/26.04.0-alpha.1