Skip to content

Sunshine for Windows Experimental

Pre-release
Pre-release

Choose a tag to compare

@MoreOrLessSoftware MoreOrLessSoftware released this 30 Sep 19:31
· 32 commits to master since this release

A frame pacing and latency-focused build of Sunshine, based on upstream master (857da05, 2026-09-25). It adds the PyroWave codec on Windows, lets NVENC send frames while they are still encoding, and makes capture follow the game's own frame timing.

Note

The optimizations in this build are best experienced with these custom Moonlight builds:
Moonlight X for Android
moonlight-qt for Windows

New: PyroWave codec (Windows)

  • PyroWave is an intra-only wavelet codec that encodes on the GPU in Vulkan compute. It's made for LAN streaming at a few hundred Mbps with very low latency.
  • It's offered alongside your normal H.264/HEVC/AV1 encoder, and clients that support PyroWave can ask for it.
  • 8-bit and 10-bit encoding is supported, and a startup check decides which are offered.
  • Every frame decodes on its own, so a lost frame recovers on the very next one.
  • Uses the colour range the client asks for, and advertises PyroWave with the same capability bits as other PyroWave hosts (eg. nonary's Vibe* forks).
  • libpyrowave-shared-0.dll is included in the installer.

Lower latency

  • Capture on present (Windows): frames are captured as soon as the desktop presents them, not on a fixed timer. This removes up to a frame of waiting and the timing jitter clients used to buffer for. Frames are only held back when they arrive faster than the client's frame rate.
  • NVENC sub-frame sending (nvenc_subframe, off by default): NVENC hands over slices as they finish and they're sent while the rest of the frame is still encoding, so sending and encoding overlap. H.264 and HEVC only, on GPUs that support it. IDR frames can also be sent in parts. Works with existing clients.
  • Configurable send rate (video_send_rate, in Mbps; default 800): the rate each frame's packets are sent at was fixed at 800 Mbps. Raise it on 2.5/10 GbE links to shorten the time each frame takes to arrive.
  • FEC can be turned off: fec_percentage = 0 now really sends no FEC. Before, it was quietly treated as 20%. Useful on a clean wired LAN, especially at PyroWave bitrates.
  • No repeated frames (minimum_fps_target = -1): stops re-sending the last frame when nothing new arrives. A static screen still recovers lost frames.

Smoother frame pacing

  • Cursor moves no longer add extra frames (Windows): mouse movement between a game's frames used to create extra, oddly timed frames, which caused stutter on VRR clients. Cursor updates now wait for the next game frame. If none comes within two frame intervals, the cursor update is sent on its own.
  • Frames are stamped with when they were presented, not when the cursor last moved.
  • Exact client frame rate: clients can send clientRefreshRateX100 on launch/resume (e.g. 5994 for 59.94 Hz). It's used as the display refresh rate when that's set to automatic, and passed to prep commands as SUNSHINE_CLIENT_FPS_X100.

Client

Built against the MoreOrLessSoftware moonlight-common-c fork (mlsoft-pyrowave), which adds PyroWave support, including delivering PyroWave frames that lost packets as partial frames and negotiating PyroWave with nonary hosts.