Releases: MoreOrLessSoftware/Sunshine
Release list
Sunshine for Windows Experimental r7
Note
The optimizations in this build are best experienced with these custom Moonlight builds:
Moonlight X for Android
moonlight-qt for Windows
Bitrate boost for low game frame rates (NVENC and PyroWave)
When a game renders fewer frames than the stream's FPS, Sunshine now raises the bitrate per frame so the stream stays close to the bitrate Moonlight asked for, without going over it. For example, a 60 FPS game on a 120 FPS stream previously used only half the requested bitrate.
- New setting: Low FPS Bitrate Boost (
low_fps_bitrate_boost). Default 4, range 1–8, 1 turns it off. - The game's frame rate is measured so that a single hitch doesn't trigger a boost and the boost drops quickly when the game speeds back up.
- Boosted frames are kept small enough to send at Video Send Rate before the game's next frame, so set Video Send Rate to suit your network.
- NVENC streams leave room in the H.264/HEVC level so the bitrate can rise mid-stream. The stream now signals a higher level, such as HEVC 6.2 High. If a strict client refuses the stream, set the boost to 1.
- Tips:
- Set Minimum FPS Target to -1 for the full boost, since repeated frames count as frames.
- With NVENC, raising VBV/HRD Percentage Increase (for example to 100) lets the encoder fill the boosted budget.
Latency tracing
New setting: Latency Log (latency_log, off by default) traces every video frame through capture, encoding and sending.
sunshine-latency.loggets a per-stage p50/p99/max summary every 10 seconds, plus a line for each frame much slower than usual.- Each session also writes
sunshine-frames-<date>-<time>.csvwith every sent frame. Its RTP timestamp matches Moonlight's frame times, so you can line it up with client-side traces. - Turn it off when you're done debugging: each session writes a new CSV.
Other
- Updated
moonlight-common-cto the latestmlsoft-pyrowave. It now delivers PyroWave frames with lost packets as partial frames, and negotiates PyroWave with nonary (vibeshine) hosts.
Full Changelog: mlsoft-r6...mlsoft-r7
Sunshine for Windows Experimental
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 (Aurora, Solarflare, nonary).
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. You may also be able to raise it above 1000 Mbps on 1 Gbps links - best to experiment with different values for your network. - 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.