You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sunshine will work with the default settings for most users. In some cases you may want to configure Sunshine further.
The default location for the configuration file is listed below. You can use another location if you
choose, by passing in the full configuration file path as the first argument when you start Sunshine.
Example
sunshine ~/sunshine_config.conf
The default location of the apps.json is the same as the configuration file. You can use a custom
location by modifying the configuration file.
Default Config Directory
OS
Location
Docker
@code{}/config@endcode
Linux
@code{}~/.config/sunshine@endcode
macOS
@code{}~/.config/sunshine@endcode
Windows
@code{}%ProgramFiles%\Sunshine\config@endcode
Although it is recommended to use the configuration UI, it is possible manually configure Sunshine by
editing the conf file in a text editor. Use the examples as reference.
Allow Select/Back inputs to also trigger DS4 touchpad click. Useful for clients looking to
emulate touchpad click on Xinput devices.
@hint{Only applies when gamepad is set to ds4 manually. Unused in other gamepad modes.}
If the Back/Select button is held down for the specified number of milliseconds,
a Home/Guide button press is emulated.
@tip{If back_button_timeout < 0, then the Home/Guide button will not be emulated.}
Sending scancodes enhances compatibility with games and apps but may result in incorrect keyboard input
from certain clients that aren't using a US English keyboard layout.
Enable if keyboard input is not working at all in certain applications.
Disable if keys on the client are generating the wrong input on the host.
@caution{Applies to Windows only.}
It may be possible that you cannot send the Windows Key from Moonlight directly. In those cases it may be useful to
make Sunshine think the Right Alt key is the Windows key.
When enabled, Sunshine will pass through high resolution scroll events from Moonlight clients.
This can be useful to disable for older applications that scroll too fast with high resolution scroll
events.
When enabled, Sunshine will pass through native pen/touch events from Moonlight clients.
This can be useful to disable for older applications without native pen/touch support.
Sometimes it may be useful to map keybindings. Wayland won't allow clients to capture the Win Key
for example.
@tip{See [virtual key codes](https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes)}
@hint{keybindings needs to have a multiple of two elements.}
@note{This option is not available in the UI. A PR would be welcome.}
**Linux + pipewire:**
@code{}
pactl info | grep Source
# in some causes you'd need to use the `Sink` device, if `Source` doesn't work, so try:
pactl info | grep Sink
@endcode
**Windows:**
Enter the following command in command prompt or PowerShell.
@code{}
%ProgramFiles%\Sunshine\tools\audio-info.exe
@endcode
If you have multiple audio devices with identical names, use the Device ID instead.
}
@attention{If you want to mute the host speakers, use
[virtual_sink](#virtual_sinkhttpslocalhost47990configvirtual_sink) instead.}
The audio device that's virtual, like Steam Streaming Speakers. This allows Sunshine to stream audio,
while muting the speakers.
@tip{See [audio_sink](#audio_sinkhttpslocalhost47990configaudio_sink)!}
@tip{These are some options for virtual sound devices.
* Stream Streaming Speakers (Linux, macOS, Windows)
* Steam must be installed.
* Enable [install_steam_audio_drivers](#install_steam_audio_drivershttpslocalhost47990configinstall_steam_audio_drivers)
or use Steam Remote Play at least once to install the drivers.
* [Virtual Audio Cable](https://vb-audio.com/Cable) (macOS, Windows)
}
Whether to stream audio or not. Disabling this can be useful for streaming headless displays as second monitors.
Default
@code{}
enabled
@endcode
Example
@code{}
stream_audio = disabled
@endcode
install_steam_audio_drivers
Description
Installs the Steam Streaming Speakers driver (if Steam is installed) to support surround sound and muting
host audio.
@note{This option is only supported on Windows.}
Select the video card you want to stream.
@tip{To find the appropriate values follow these instructions.
**Linux + VA-API:**
Unlike with *amdvce* and *nvenc*, it doesn't matter if video encoding is done on a different GPU.
@code{}
ls /dev/dri/renderD* # to find all devices capable of VAAPI
# replace ``renderD129`` with the device from above to list the name and capabilities of the device
vainfo --display drm --device /dev/dri/renderD129 | \
grep -E "((VAProfileH264High|VAProfileHEVCMain|VAProfileHEVCMain10).*VAEntrypointEncSlice)|Driver version"
@endcode
To be supported by Sunshine, it needs to have at the very minimum:
`VAProfileH264High : VAEntrypointEncSlice`
**Windows:**
Enter the following command in command prompt or PowerShell.
@code{}
%ProgramFiles%\Sunshine\tools\dxgi-info.exe
@endcode
For hybrid graphics systems, DXGI reports the outputs are connected to whichever graphics
adapter that the application is configured to use, so it's not a reliable indicator of how the
display is physically connected.
}
@code{}
adapter_name = Radeon RX 580 Series
@endcode
output_name
Description
Select the display number you want to stream.
@tip{To find the appropriate values follow these instructions.
**Linux:**
During Sunshine startup, you should see the list of detected displays:
@code{}
Info: Detecting displays
Info: Detected display: DVI-D-0 (id: 0) connected: false
Info: Detected display: HDMI-0 (id: 1) connected: true
Info: Detected display: DP-0 (id: 2) connected: true
Info: Detected display: DP-1 (id: 3) connected: false
Info: Detected display: DVI-D-1 (id: 4) connected: false
@endcode
You need to use the id value inside the parenthesis, e.g. `1`.
**macOS:**
During Sunshine startup, you should see the list of detected displays:
@code{}
Info: Detecting displays
Info: Detected display: Monitor-0 (id: 3) connected: true
Info: Detected display: Monitor-1 (id: 2) connected: true
@endcode
You need to use the id value inside the parenthesis, e.g. `3`.
**Windows:**
Enter the following command in command prompt or PowerShell.
@code{}
%ProgramFiles%\Sunshine\tools\dxgi-info.exe
@endcode
}
Default
Sunshine will select the default display.
Example (Linux)
@code{}
output_name = 0
@endcode
Example (macOS)
@code{}
output_name = 3
@endcode
Example (Windows)
@code{}
output_name = \\.\DISPLAY1
@endcode
dd_configuration_option
Description
Perform mandatory verification and additional configuration for the display device.
@note{Applies to Windows only.}
Perform no additional configuration (disables all `dd_` configuration options).
verify_only
Verify that display is active only (this is a mandatory step without any extra steps to verify display state).
ensure_active
Activate the display if it's currently inactive.
ensure_primary
Activate the display if it's currently inactive and make it primary.
ensure_only_display
Activate the display if it's currently inactive and disable all others.
dd_resolution_option
Description
Perform additional resolution configuration for the display device.
@note{"Optimize game settings" must be enabled in Moonlight for this option to work.}
@note{Applies to Windows only.}
Default
@code{}auto@endcode
Example
@code{}
dd_resolution_option = manual
@endcode
Choices
disabled
Perform no additional configuration.
auto
Change resolution to the requested resolution from the client.
manual
Change resolution to the user specified one (set via [dd_manual_resolution](#dd_manual_resolution)).
dd_manual_resolution
Description
Specify manual resolution to be used.
@note{[dd_resolution_option](#dd_resolution_option) must be set to `manual`}
@note{Applies to Windows only.}
Default
n/a
Example
@code{}
dd_manual_resolution = 1920x1080
@endcode
dd_refresh_rate_option
Description
Perform additional refresh rate configuration for the display device.
@note{Applies to Windows only.}
Default
@code{}auto@endcode
Example
@code{}
dd_refresh_rate_option = manual
@endcode
Choices
disabled
Perform no additional configuration.
auto
Change refresh rate to the requested FPS value from the client.
manual
Change refresh rate to the user specified one (set via [dd_manual_refresh_rate](#dd_manual_refresh_rate)).
dd_manual_refresh_rate
Description
Specify manual refresh rate to be used.
@note{[dd_refresh_rate_option](#dd_refresh_rate_option) must be set to `manual`}
@note{Applies to Windows only.}
Perform additional HDR configuration for the display device.
@note{Applies to Windows only.}
Default
@code{}auto@endcode
Example
@code{}
dd_hdr_option = disabled
@endcode
Choices
disabled
Perform no additional configuration.
auto
Change HDR to the requested state from the client if the display supports it.
dd_wa_hdr_toggle_delay
Description
When using virtual display device (VDD) for streaming, it might incorrectly display HDR color. Sunshine can try to mitigate this issue, by turning HDR off and then on again.
If the value is set to 0, the workaround is disabled (default). If the value is between 0 and 3000 milliseconds, Sunshine will turn off HDR, wait for the specified amount of time and then turn HDR on again. The recommended delay time is around 500 milliseconds in most cases.
DO NOT use this workaround unless you actually have issues with HDR as it directly impacts stream start time!
@note{This option works independently of [dd_hdr_option](#dd_hdr_option)}
@note{Applies to Windows only.}
Default
@code{}
0
@endcode
Example
@code{}
dd_wa_hdr_toggle_delay = 500
@endcode
dd_config_revert_delay
Description
Additional delay in milliseconds to wait before reverting configuration when the app has been closed or the last session terminated.
Main purpose is to provide a smoother transition when quickly switching between apps.
@note{Applies to Windows only.}
Default
@code{}3000@endcode
Example
@code{}
dd_config_revert_delay = 1500
@endcode
dd_config_revert_on_disconnect
Description
When enabled, display configuration is reverted upon disconnect of all clients instead of app close or last session termination.
This can be useful for returning to physical usage of the host machine without closing the active app.
@warning{Some applications may not function properly when display configuration is changed while active.}
@note{Applies to Windows only.}
Remap the requested resolution and FPS to another display mode.
Depending on the [dd_resolution_option](#dd_resolution_option) and
[dd_refresh_rate_option](#dd_refresh_rate_option) values, the following mapping
groups are available:
`mixed` - both options are set to `auto`.
`resolution_only` - only [dd_resolution_option](#dd_resolution_option) is set to `auto`.
`refresh_rate_only` - only [dd_refresh_rate_option](#dd_refresh_rate_option) is set to `auto`.
For each of those groups, a list of fields can be configured to perform remapping:
`requested_resolution` - resolution that needs to be matched in order to use this remapping entry.
`requested_fps` - FPS that needs to be matched in order to use this remapping entry.
`final_resolution` - resolution value to be used if the entry was matched.
`final_refresh_rate` - refresh rate value to be used if the entry was matched.
If `requested_*` field is left empty, it will match everything.
If `final_*` field is left empty, the original value will not be remapped and either a requested, manual
or current value is used. However, at least one `final_*` must be set, otherwise the entry is considered
invalid.
@note{"Optimize game settings" must be enabled on client side for ANY entry with `resolution`
field to be considered.}
@note{First entry to be matched in the list is the one that will be used.}
@tip{`requested_resolution` and `final_resolution` can be omitted for `refresh_rate_only` group.}
@tip{`requested_fps` and `final_refresh_rate` can be omitted for `resolution_only` group.}
@note{Applies to Windows only.}
Set the IP address to bind Sunshine to. This is useful when you have multiple network interfaces
and want to restrict Sunshine to a specific one. If not set, Sunshine will bind to all available
interfaces (0.0.0.0 for IPv4 or :: for IPv6).
Note: The address must be valid for the system and must match the address family
being used. When using IPv6, you can specify an IPv6 address even with address_family set to "both".
Default
@code{}
(empty - bind to all interfaces)
@endcode
Example (IPv4)
@code{}
bind_address = 192.168.1.100
@endcode
Example (IPv6)
@code{}
bind_address = 2001:db8::1
@endcode
Example (Loopback)
@code{}
bind_address = 127.0.0.1
@endcode
port
Description
Set the family of ports used by Sunshine.
Changing this value will offset other ports as shown in config UI.
This determines when encryption will be used when streaming over your local network.
@warning{Encryption can reduce streaming performance, particularly on less powerful hosts and clients.}
Default
@code{}
0
@endcode
Example
@code{}
lan_encryption_mode = 0
@endcode
Choices
0
encryption will not be used
1
encryption will be used if the client supports it
2
encryption is mandatory and unencrypted connections are rejected
This determines when encryption will be used when streaming over the Internet.
@warning{Encryption can reduce streaming performance, particularly on less powerful hosts and clients.}
Default
@code{}
1
@endcode
Example
@code{}
wan_encryption_mode = 1
@endcode
Choices
0
encryption will not be used
1
encryption will be used if the client supports it
2
encryption is mandatory and unencrypted connections are rejected
The private key used for the web UI and Moonlight client pairing. For best compatibility,
this should be an RSA-2048 private key.
@warning{Not all Moonlight clients support ECDSA keys or RSA key lengths other than 2048 bits.}
The certificate used for the web UI and Moonlight client pairing. For best compatibility,
this should have an RSA-2048 public key.
@warning{Not all Moonlight clients support ECDSA keys or RSA key lengths other than 2048 bits.}
Percentage of error correcting packets per data packet in each video frame.
@warning{Higher values can correct for more network packet loss,
but at the cost of increasing bandwidth usage.}
Quantization Parameter. Some devices don't support Constant Bit Rate. For those devices, QP is used instead.
@warning{Higher value means more compression, but less quality.}
Minimum number of CPU threads used for encoding.
@note{Increasing the value slightly reduces encoding efficiency, but the tradeoff is usually worth it to
gain the use of more CPU cores for encoding. The ideal value is the lowest value that can reliably encode
at your desired streaming settings on your hardware.}
Allows the client to request HEVC Main or HEVC Main10 video streams.
@warning{HEVC is more CPU-intensive to encode, so enabling this may reduce performance when using software
encoding.}
Default
@code{}
0
@endcode
Example
@code{}
hevc_mode = 2
@endcode
Choices
0
advertise support for HEVC based on encoder capabilities (recommended)
1
do not advertise support for HEVC
2
advertise support for HEVC Main profile
3
advertise support for HEVC Main and Main10 (HDR) profiles
Allows the client to request AV1 Main 8-bit or 10-bit video streams.
@warning{AV1 is more CPU-intensive to encode, so enabling this may reduce performance when using software
encoding.}
Default
@code{}
0
@endcode
Example
@code{}
av1_mode = 2
@endcode
Choices
0
advertise support for AV1 based on encoder capabilities (recommended)
1
do not advertise support for AV1
2
advertise support for AV1 Main 8-bit profile
3
advertise support for AV1 Main 8-bit and 10-bit (HDR) profiles
Automatic.
Sunshine will use the first capture method available in the order of the table above.
Example
@code{}
capture = kms
@endcode
Choices
nvfbc
Use NVIDIA Frame Buffer Capture to capture direct to GPU memory. This is usually the fastest method for
NVIDIA cards. NvFBC does not have native Wayland support and does not work with XWayland.
@note{Applies to Linux only.}
wlr
Capture for wlroots based Wayland compositors via DMA-BUF.
@note{Applies to Linux only.}
kms
DRM/KMS screen capture from the kernel. This requires that Sunshine has `cap_sys_admin` capability.
@note{Applies to Linux only.}
x11
Uses XCB. This is the slowest and most CPU intensive so should be avoided if possible.
@note{Applies to Linux only.}
ddx
Use DirectX Desktop Duplication API to capture the display. This is well-supported on Windows machines.
@note{Applies to Windows only.}
wgc
(beta feature) Use Windows.Graphics.Capture to capture the display.
@note{Applies to Windows only.}
@attention{This capture method is not compatible with the Sunshine service.}
NVENC encoder performance preset.
Higher numbers improve compression (quality at given bitrate) at the cost of increased encoding latency.
Recommended to change only when limited by network or decoder, otherwise similar effect can be accomplished
by increasing bitrate.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
Enable two-pass mode in NVENC encoder.
This allows to detect more motion vectors, better distribute bitrate across the frame and more strictly
adhere to bitrate limits. Disabling it is not recommended since this can lead to occasional bitrate
overshoot and subsequent packet loss.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
Default
@code{}
quarter_res
@endcode
Example
@code{}
nvenc_twopass = quarter_res
@endcode
Choices
disabled
One pass (fastest)
quarter_res
Two passes, first pass at quarter resolution (faster)
full_res
Two passes, first pass at full resolution (slower)
Assign higher QP values to flat regions of the video.
Recommended to enable when streaming at lower bitrates.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@warning{Enabling this option may reduce performance.}
Single-frame VBV/HRD percentage increase.
By default Sunshine uses single-frame VBV/HRD, which means any encoded video frame size is not expected to
exceed requested bitrate divided by requested frame rate. Relaxing this restriction can be beneficial and
act as low-latency variable bitrate, but may also lead to packet loss if the network doesn't have buffer
headroom to handle bitrate spikes. Maximum accepted value is 400, which corresponds to 5x increased
encoded video frame upper size limit.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@warning{Can lead to network packet loss.}
Use realtime gpu scheduling priority in NVENC when hardware accelerated gpu scheduling (HAGS) is enabled
in Windows. Currently, NVIDIA drivers may freeze in encoder when HAGS is enabled, realtime priority is used
and VRAM utilization is close to maximum. Disabling this option lowers the priority to high, sidestepping
the freeze at the cost of reduced capture performance when the GPU is heavily loaded.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Applies to Windows only.}
Split the encoding of each video frame over multiple NVENC hardware units.
Significantly reduces encoding latency with a marginal compression efficiency penalty.
This option is ignored if your GPU has a singular NVENC unit.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Applies to Windows only.}
Number of frames to look ahead during encoding.
Lookahead improves encoding quality, especially in complex scenes, by providing better motion estimation
and bitrate distribution. Higher values improve quality but increase encoding latency.
Set to 0 to disable lookahead.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Requires NVENC SDK 13.0 (1202) or newer.}
Lookahead quality level. Higher levels improve quality at the expense of performance.
This option only takes effect when lookahead_depth is greater than 0.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Requires NVENC SDK 13.0 (1202) or newer.}
Rate control mode for NVENC encoding. CBR (Constant Bitrate) provides fixed bitrate for low latency streaming. VBR (Variable Bitrate) allows bitrate to vary based on scene complexity, providing better quality for complex scenes at the cost of variable bitrate.
Default
@code{}
cbr
@endcode
Example
@code{}
nvenc_rate_control = vbr
@endcode
Choices
cbr
Constant Bitrate - Fixed bitrate, best for low latency streaming
vbr
Variable Bitrate - Variable bitrate, better quality for complex scenes
Target quality level for VBR mode. Lower values = higher quality. Set to 0 for automatic quality selection. Only used when rate control mode is VBR. Range: 0-51 for H.264/HEVC, 0-63 for AV1.
Temporal filtering strength applied before encoding.
Temporal filter reduces noise and improves compression efficiency, especially for natural content.
Higher levels provide better noise reduction but may introduce slight blurring.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Requires NVENC SDK 13.0 (1202) or newer.}
@warning{Requires frameIntervalP >= 5. Not compatible with zeroReorderDelay or stereo MVC.}
Enable temporal adaptive quantization.
Temporal AQ optimizes quantization across time, providing better bitrate distribution
and improved quality in motion scenes. This feature works in conjunction with spatial AQ
and requires lookahead to be enabled (lookahead_depth > 0).
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Requires NVENC SDK 13.0 (1202) or newer.}
Adaptive P-State algorithm which NVIDIA drivers employ doesn't work well with low latency streaming,
so Sunshine requests high power mode explicitly.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@warning{Disabling this is not recommended since this can lead to significantly increased encoding latency.}
@note{Applies to Windows only.}
Sunshine can't capture fullscreen OpenGL and Vulkan programs at full frame rate unless they present on
top of DXGI. With this option enabled Sunshine changes global Vulkan/OpenGL present method to
"Prefer layered on DXGI Swapchain". This is system-wide setting that is reverted on Sunshine program exit.
@note{This option only applies when using NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
@note{Applies to Windows only.}
Prefer CAVLC entropy coding over CABAC in H.264 when using NVENC.
CAVLC is outdated and needs around 10% more bitrate for same quality, but provides slightly faster
decoding when using software decoder.
@note{This option only applies when using H.264 format with the
NVENC [encoder](#encoderhttpslocalhost47990configencoder).}
This options enables use of HEVC on older Intel GPUs that only support low power encoding for H.264.
@note{This option only applies when using quicksync [encoder](#encoderhttpslocalhost47990configencoder).}
@caution{Streaming performance may be significantly reduced when this option is enabled.}
The encoder usage profile is used to set the base set of encoding parameters.
@note{This option only applies when using amdvce [encoder](#encoderhttpslocalhost47990configencoder).}
@note{The other AMF options that follow will override a subset of the settings applied by your usage
profile, but there are hidden parameters set in usage profiles that cannot be overridden elsewhere.}
The encoder rate control.
@note{This option only applies when using amdvce [encoder](#encoderhttpslocalhost47990configencoder).}
@warning{The `vbr_latency` option generally works best, but some bitrate overshoots may still occur.
Enabling HRD allows all bitrate based rate controls to better constrain peak bitrate, but may result in
encoding artifacts depending on your card.}
Enable Hypothetical Reference Decoder (HRD) enforcement to help constrain the target bitrate.
@note{This option only applies when using amdvce [encoder](#encoderhttpslocalhost47990configencoder).}
@warning{HRD is known to cause encoding artifacts or negatively affect encoding quality on certain cards.}
The quality profile controls the tradeoff between speed and quality of encoding.
@note{This option only applies when using amdvce [encoder](#encoderhttpslocalhost47990configencoder).}
Preanalysis can increase encoding quality at the cost of latency.
@note{This option only applies when using amdvce [encoder](#encoderhttpslocalhost47990configencoder).}
Variance Based Adaptive Quantization (VBAQ) can increase subjective visual quality by prioritizing
allocation of more bits to smooth areas compared to more textured areas.
@note{This option only applies when using amdvce [encoder](#encoderhttpslocalhost47990configencoder).}
Realtime encoding.
@note{This option only applies when using macOS.}
@warning{Disabling realtime encoding might result in a delayed frame encoding or frame drop.}
The encoder preset to use.
@note{This option only applies when using software [encoder](#encoderhttpslocalhost47990configencoder).}
@note{From [FFmpeg](https://trac.ffmpeg.org/wiki/Encode/H.264#preset).
A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower
preset will provide better compression (compression is quality per filesize). This means that, for example, if
you target a certain file size or constant bit rate, you will achieve better quality with a slower preset.
Similarly, for constant quality encoding, you will simply save bitrate by choosing a slower preset.
Use the slowest preset that you have patience for.}
The tuning preset to use.
@note{This option only applies when using software [encoder](#encoderhttpslocalhost47990configencoder).}
@note{From [FFmpeg](https://trac.ffmpeg.org/wiki/Encode/H.264#preset).
You can optionally use -tune to change settings based upon the specifics of your input.
}
Default
@code{}
zerolatency
@endcode
Example
@code{}
sw_tune = zerolatency
@endcode
Choices
film
use for high quality movie content; lowers deblocking
animation
good for cartoons; uses higher deblocking and more reference frames
grain
preserves the grain structure in old, grainy film material
stillimage
good for slideshow-like content
fastdecode
allows faster decoding by disabling certain filters