Skip to content

Settings File Logs and Command Line

baddo edited this page Sep 30, 2026 · 1 revision

Settings file, logs and command line

ShadePlay guide › Advanced settings

Where ShadePlay keeps its settings and logs, every key in the settings file, and the command-line options.

Where things are

Everything lives in %APPDATA%\ShadePlay (paste that into the File Explorer address bar):

File or folder What it is
config.json Your settings. The advanced tray menu's Open settings file opens it in your text editor.
config.json.bak The previous good version, kept at every save.
config.json.corrupt A copy of a settings file that couldn't be read (see below).
logs\shadeplay.log The tray app's log.
logs\engine.log The recorder's log.
logs\youtube.log, logs\encoder-test.log The YouTube copy helper's and the encoder test's logs, when they have run.
logs\update.log Update events, one line each with the time: failed checks, failed or postponed updates, automatic updates, and updates the installer didn't finish. Only the last 50 lines are kept.
dumps\ Crash reports (engine-<date>-<time>.dmp and similar), only after a crash. The newest 5 of each kind are kept.
youtube_copies.json The list of YouTube copies the helper made, so it can delete them later.

A ShadePlay.exe run without Setup also unpacks its FFmpeg into %LOCALAPPDATA%\ShadePlay\ffmpeg (Running ShadePlay.exe on its own).

  • Each log except update.log is rotated at 2 MB: the old part becomes shadeplay.1.log and so on, and 5 old parts are kept.
  • Read a log before you share it: file paths in it contain your Windows user name, and it names clips and games. Don't attach crash dumps to a public issue: they can hold pieces of what was in the program's memory.
  • Power users can move the whole folder with the environment variable SHADEPLAY_HOME, or per start with --data-dir.

How the settings file is saved and read

  • ShadePlay writes config.json in one step (a temporary file, then a rename), so a crash or power cut never leaves half a file. The old version is kept as config.json.bak.
  • You can edit it while ShadePlay runs. ShadePlay notices the change and applies it within a few seconds, and an open settings window shows the new values.
  • A value that is out of range or misspelled falls back to its default, with a line in shadeplay.log. Unknown keys are ignored, with a line in the log.
  • A file that isn't valid JSON is not used: ShadePlay keeps a copy as config.json.corrupt, uses the previous settings from config.json.bak (or the defaults), and shows ⚠ The settings file has an error – the previous settings are used. Fix the file (the log names the line) or delete it; the fix is picked up by itself. ShadePlay doesn't overwrite your broken file until you change a setting.
  • The file can be UTF-8 (with or without a byte-order mark) or UTF-16, so Notepad and PowerShell both work.
  • Keys you leave out get their default.

Every key

Values are JSON: numbers, true / false, and strings in quotes. Nested keys are written as video.fps here and as "video": {"fps": 240} in the file.

General

Key Default Values In the window
version 2 written by ShadePlay (file only)
advanced_ui false true / false Show advanced settings
hotkey "F10" a key or combination, such as "Alt+F10" (The save hotkey) Save hotkey
replay_seconds 60 5 to 600 Buffer length
clips_dir "" a folder; empty = Videos\ShadePlay Clips folder
autostart true Start with Windows
sounds true Play sounds
notifications true Show notifications
faststart true Fast start
post_save_hook "" a command line Run this command
clip_info_files false true writes a .json file next to each clip (always written while post_save_hook is set) Write a clip info file (.json) next to each clip
game_names {} program file name → clip name, such as {"overwatch.exe": "Overwatch 2"} Clip names

Video (video.…)

Key Default Values In the window
video.codec "av1" "av1", "hevc", "h264" Codec
video.fps 240 10 to 500 Frame rate
video.quality "default" "lite", "default", "high", "insane", "bitrate" Quality
video.bitrate_mbps 150 5 to 2000; used only with "bitrate" Fixed bitrate
video.hdr_mode "auto" "auto" (HDR when Windows HDR is on), "sdr" HDR
video.ten_bit_sdr true 10-bit SDR clips
video.draw_cursor true Record the mouse cursor
video.monitor "primary" "primary" or a Windows display name such as "\\\\.\\DISPLAY2" Monitor
video.gpu_priority "high" "high", "normal" GPU priority
video.preset 0 0 (auto) or 1 (fastest) to 7 (best quality) Encoder preset
video.gop_seconds 1 0.25 to 10 Keyframe interval
video.spatial_aq false Spatial AQ

Audio (audio.…)

Key Default Values In the window
audio.mix.enabled, audio.discord.enabled, audio.mic.enabled true the track switches; Record my mic
audio.<track>.gain_db 0 −60 to +24 Gain (dB)
audio.<track>.offset_ms 0 −1000 to +1000 Offset (ms)
audio.<track>.bitrate_kbps Mix 320, Desktop, Game and Discord 256, Mic 160 32 to 512 Bitrate (kb/s)
audio.desktop_device "" a device ID; empty = the Windows default output What you listen on / Desktop device
audio.mic_device "" a device ID; empty = the Windows default microphone Microphone
audio.codec "aac" "aac", "opus", "flac" Audio codec
audio.discord_latency_ms -20 −1000 to +1000 Latency correction
audio.endpoint_denylist [] parts of device names Never record
audio.discord_exes ["Discord.exe", "DiscordPTB.exe", "DiscordCanary.exe"] program file names Discord programs

<track> is mix, desktop, game, discord or mic.

Games (games.…, file only)

Key Default Values What it does
games.always [] program file names Programs that always count as a game.
games.never a list of shells, browsers, Discord, launchers, players and tools program file names Programs that never count as a game. A list with entries replaces the default list, so copy the default entries you want to keep.

YouTube helper (youtube.…)

Key Default Values In the window
youtube.enabled false Offer "Upload to YouTube" after each save
youtube.upload_file "original" "original", "copy" What to upload
youtube.title_template "{game} {date} {time}" up to 200 characters Title
youtube.copy_fps 0 0 (keep the clip's) or 24 to 60 Frame rate
youtube.copy_codec "auto" "auto", "av1", "hevc" Codec
youtube.prepare_automatically false Prepare the copy right after each save
youtube.keep_days 7 0 (keep) to 365 Delete copies after
youtube.copies_dir "" a full path; empty = YouTube uploads in the clips folder Copies folder

Updates (updates.…)

Key Default Values In the window
updates.check true Check for updates (asks GitHub once a day)
updates.auto false only the value true switches it on Install updates automatically
updates.skip "" a version such as "0.2.0"; a newer version is offered again Skip this version

ShadePlay also keeps three notes of its own there: updates.auto_asked (the bar's question about automatic updates was answered), updates.auto_done (an automatic update it has just started) and updates.auto_failed (a version whose automatic update failed, so it isn't tried automatically again). Leave them as they are.

Keys that are ignored

ShadePlay always records, so these keys from older files are read and ignored: paused, audio.desktop.enabled, audio.game.enabled and games.enabled.

Resetting everything

Choose Exit in the tray menu, delete config.json, then start ShadePlay again. It starts with the defaults and asks for the F10 check again, as on its first start.

Command line

ShadePlay.exe is in %LOCALAPPDATA%\Programs\ShadePlay (or wherever you put a copy that runs on its own). It is a Windows program, so in a Command Prompt use start /wait ShadePlay.exe ... when you need the command to wait for it.

For everyone:

Option What it does
(none) Starts ShadePlay in the tray; if it is running already, shows the ShadePlay is running notification.
--settings Opens the settings window of the running ShadePlay; starts ShadePlay first if it isn't running.
--save Asks the running ShadePlay to save a clip. Does nothing if ShadePlay isn't running (exit code 1).
--quit Asks the running ShadePlay to exit and waits until it has (clips being written are finished first).
--encoder-test Tests the graphics card's encoders: Testing AMD and Intel graphics.
--log-level debug|info|warn|error How much goes into the logs (default info).

For testing a second copy next to the installed one:

Option What it does
--instance-name NAME Its own name (letters, digits, _ and -, up to 32), so it doesn't talk to the installed copy. --quit, --save and --settings need the same name to reach it.
--data-dir DIR Keeps its settings and logs in DIR.

A copy started with either of them never touches Start with Windows and never installs updates automatically; one with --instance-name doesn't check for updates at all. Developer options such as --selftest are in Building ShadePlay. ShadePlay uses --engine, --youtube-copy, --autostart and --uninstall-cleanup internally, and Setup starts it with --update-failed or --update-incomplete after an update that didn't finish; don't use those yourself.

Environment variables

Variable What it does
SHADEPLAY_HOME Moves the settings and logs folder.
SHADEPLAY_OFFLINE=1 Blocks every network request: the update check and update downloads.
SHADEPLAY_RUNTIME_DIR Where a ShadePlay.exe without FFmpeg DLLs next to it unpacks its built-in FFmpeg, instead of %LOCALAPPDATA%\ShadePlay\ffmpeg (for test copies; the uninstaller then cleans this folder instead).
SHADEPLAY_NO_SHELL=1 ShadePlay opens no browser and no File Explorer window, doesn't use the clipboard and doesn't install updates automatically (for automated tests).
SHADEPLAY_UPDATE_TEST=1 with SHADEPLAY_UPDATE_API=http://127.0.0.1:<port>/… For developers: rehearses an update against a fake release on this PC. Both are needed, and only 127.0.0.1 is accepted; the update bar then ends with [update test mode]. Set them in one console only, never with setx (Building ShadePlay).

Next: Graphics cards and encoders

See also: Advanced settings overview · Privacy · Feedback and bug reports

Clone this wiki locally