Sunshine for Windows Experimental
Pre-release
Pre-release
·
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.dllis 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 = 0now 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
clientRefreshRateX100on launch/resume (e.g.5994for 59.94 Hz). It's used as the display refresh rate when that's set to automatic, and passed to prep commands asSUNSHINE_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.