Special K keeps track of configuration parameters and their values (often called the ‘profile’) on a game-by-game basis and stores these in easily accessible and editable *.ini
files that the user can double-click to edit directly in Notepad or another text editor of choice. The tool also logs relevant diagnostics data also on a game-by-game basis in logs\*.log
files located below the game-specific configuration file(s).
<path-to-SpecialK>
in the below tables refers to the installation folder of Special K, while<game-specific>
refers to either the title of the game (Steam releases) or the executable filename of the game (other platforms).
All paths shown on the wiki can be assumed to be relative to the install folder of Special K unless specified to be relative to a local game-specific install. Special K is set up to store all of its global user data in or below its install folder, in particular global, profiles, macros, keybindings, and plugins related data.
Special K has used a few different install locations over the years, but it is usually one of the following:
Type of install | Default Location |
---|---|
Modern (current user; non-elevated) | %LOCALAPPDATA%\Programs\Special K |
Modern (all users; elevated) | %PROGRAMFILES%\Special K |
Legacy | %USERPROFILE%\Documents\My Mods\SpecialK |
Where the SK configuration for a game is stored depends on what type of install Special K is using to interface with the game.
Type of install | Location |
---|---|
Global | <path-to-SpecialK>\Profiles\<game-specific>\SpecialK.ini |
Local (converted from global / centralized profile) | <path-to-SpecialK>\Profiles\<game-specific>\<DLL-name>.ini |
Local (manual / custom mod) | <path-to-game>\<DLL-name>.ini |
Some older game-specific mods use a separate
*.ini
file to store the configuration for game-specific tweaks, such asFAR.ini
for the FAR (Fix Automata Resolution) mod for NieR: Automata.
Configuration for some modules (e.g. achievements, macros, OSD, widgets) are stored in
<path-to-SpecialK>\Global\*.ini
A full list of supported parameters and their description can be found in the source code.
Below is a table of what the tab-based columns of the source code correspond to.
Column | Comment |
---|---|
1 | Internal parameter name. |
2 | Description of what the parameter does. |
3 | Lists what configuration file the parameter resides in:
|
4 | Lists the section of said configuration file (e.g. [Input.Cursor] ). |
5 | Lists the key for the parameter used in the configuration file (e.g. UseHardwareCursor ) |
The configuration of a game can be reset by either of the following methods:
Hold down Ctrl + ⇧ Shift while launching the game to open the Special K Compatibility Layer window, then click on [Reset Config].
Close the game and delete the existing configuration file from the appropriate location:
Type of install | Location |
---|---|
Global | <path-to-SpecialK>\Profiles\<game-specific>\SpecialK.ini |
Local (converted from global) | <path-to-SpecialK>\Profiles\<game-specific>\SpecialK.ini |
Local (manual / custom mod) | <path-to-game> or in the game executable folder. Filename mirrors DLL file, e.g.dxgi.ini . |
If any default or master presets exists and are applicable for the type of install and injection method being used for the game, they will still be applied for the game until those relevant files are also removed.
Since sometimes during the first half of 2022 the global injector of Special K automatically defaults to using relative paths based on the location of the SpecialK[32|64].dll
DLL files to manage the global Special K settings and profile folders. Local injections, however, uses the registry key HKEY_CURRENT_USER\Software\Kaldaien\Special K
and the Path
value to identify where to look for and store the global configuration.
On 16 August, 2022 Special K received support for overridding the registry key for local injections if an environmental variable SPECIALK_PATH
is set in the context that the game process gets launched in. This allows redirecting global settings on a game-by-game basis provided local injection is used.
On October 25, 2020 Special K gained the ability to set default settings (either global or game-specific) using a default_<DLL-name>.ini
that will automatically be applied the first time a game is launched or after resetting the Special K config for the game.
Type of Install | Location |
---|---|
All games | <path-to-SpecialK>\Global\ |
Game-specific (global injection) | <path-to-SpecialK>\Profiles\<game-specific> |
Game-specific (local injection) | <path-to-game> |
Game-specific (local injection; converted from global / centralized profile) | <path-to-SpecialK>\Profiles\<game-specific> |
default_<DLL-name>.ini
where <DLL-name>
is replaced with the injection method the settings should apply for:Global injection: | <DLL-name> |
---|---|
Global injection | SpecialK |
Local injection: | <DLL-name> |
---|---|
OpenGL | OpenGL32 |
DirectX 12 | DXGI |
DirectX 11 | DXGI or D3D11 |
DirectX 9 | D3D9 |
DirectX 8 | D3D8 |
DirectDraw | DDRAW |
DirectInput 8 | DInput8 |
The all games defaults are loaded first followed by the game-specific defaults if one exists. This allows the use of global defaults combined with specific overrides for those games that might need it.
The more parameters are being set, the more likely it is that things will break.
Special K supports setting “master overrides” that enforces parameter values and overrides any automatically adjusted or user adjusted values. These can either be used to force a specific parameter value for a single game, or across all games. It is best to keep these as limited as possible, because of the aforementioned inability for the user to adjust the parameters unless they remove or edit the applicable master preset directly.
Type of Install | Location |
---|---|
Game-specific (global injection) | <path-to-SpecialK>\Profiles\<game-specific> |
Game-specific (local injection) | <path-to-game> |
Game-specific (local injection; converted from global / centralized profile) | <path-to-SpecialK>\Profiles\<game-specific> |
custom_<DLL-name>.ini
where <DLL-name>
is replaced with the name of the DLL the settings should be used for:Should apply for | <DLL-name> |
---|---|
Global injection | SpecialK |
OpenGL | OpenGL32 |
DirectX 12 | DXGI |
DirectX 11 | DXGI or D3D11 |
DirectX 9 | D3D9 |
DirectX 8 | D3D8 |
DirectDraw | DDRAW |
DirectInput 8 | DInput8 |
Shared master settings overrides any and all unique game-specific configurations that may otherwise be set, including those set by any default or game-specific master presets that might exist. Use at your own risk!
On June 13, 2020 Special K gained the ability to set master settings using master_<DLL-name>.ini
that will automatically be applied for all games, always.
Browse to <path-to-SpecialK>\Global\
Create a new file called master_<DLL-name>.ini
where <DLL-name>
is replaced with the name of the DLL the settings should be used for:
Should apply for | <DLL-name> |
---|---|
Global injection | SpecialK |
OpenGL | OpenGL32 |
DirectX 12 | DXGI |
DirectX 11 | DXGI or D3D11 |
DirectX 9 | D3D9 |
DirectX 8 | D3D8 |
DirectDraw | DDRAW |
DirectInput 8 | DInput8 |
The more parameters are being set, the more likely it is that things will break.
Log files are located in one of the following locations, based on the type of install of Special K being used:
Type of install | Location |
---|---|
Global | <path-to-SpecialK>\Profiles\<game-specific>\logs\*.log |
Local (converted from global / centralized profile) | <path-to-SpecialK>\Profiles\<game-specific>\logs\*.log |
Local (manual / custom mod) | <path-to-game>\logs\*.log |
The crash handler of Special K will move all logs related to a crash to a time-specific
<path-to-game>\logs\crash\<timestamp>\*.log
folder if it manages to capture data about the crash.
Important log files are marked as such.
Log file | Purpose |
---|---|
crash.log |
Stores captured crash data if the crash handler of Special K were able to capture data related to the crash. |
SpecialK.log or <DLL-name>.log |
(Important) Main log file for Special K, stores injection, render pipeline, and other related events. |
dxgi_budget.log |
Stores aggregated DXGI memory statistics over the play session at the time of shutdown. |
game_output.log |
Stores everything the game outputs to the standard output stream of the operating system. |
modules.log |
(Important) Stores detected loaded/injected DLL files of the game. Note that tools or applications using more obscure ways of injecting themselves to avoid detection will not listed in this log file. |
ReShade.log |
If used, stores logs related to the custom ReShade plug-in of Special K. |
steam_api.log |
Stores logs related to the Steam API and enhancements. |
Keybinding | Function |
---|---|
Ctrl + ⇧ Shift + O | Toggle On Screen Display (OSD), might require a game restart |
Keyboard: Ctrl + ⇧ Shift + ← Backspace Controller: Back / Select + Start |
Toggle Control Panel |
Hold Ctrl + ⇧ Shift while launching the game | Opens the Injection Compatibility Options |
Unless otherwise noted, W/A/S/D can substitute the arrow keys.
Keybinding | Function |
---|---|
Keyboard: ⇪ Caps Lock Controller: Hold Back / Select for 0.5 seconds |
Toggle Exclusive Input Mode (game vs. control panel) |
Keyboard: ↑, ↓, ←, → Controller: ↑, ↓, ←, → |
Cycle Through UI Items |
Keyboard: ↵ Enter Controller: A / × |
Activate Selected Item |
Keyboard: Ctrl + ⇧ Shift + ← Backspace Controller: B / ○ |
Exit Menu |
Exclusive Keyboard Mode: Ctrl + Alt + ↑, ↓, ←, → Controller: X / □ + Left Analog Stick |
Move the Control Panel |
Color and scale configs are stored in <path-to-SpecialK>\Global\osd.ini
Keybinding | Function |
---|---|
Ctrl + ⇧ Shift + O | Toggle On Screen Display (OSD), might require a game restart |
Ctrl + ⇧ Shift + + / - | Resize |
Ctrl + ⇧ Shift + F | Toggle Framerate Counter |
Ctrl + ⇧ Shift + T | Toggle Clock / Version |
Ctrl + ⇧ Shift + G | Toggle GPU Monitor |
Ctrl + ⇧ Shift + C | Toggle CPU Monitor |
Ctrl + ⇧ Shift + M | Toggle Memory Monitor |
Ctrl + ⇧ Shift + I | Toggle I/O Monitor |
Ctrl + ⇧ Shift + D | Toggle Disk Monitor |
Ctrl + ⇧ Shift + P | Toggle Page File Monitor |
Ctrl + ⇧ Shift + R | Toggle D3D11 Shader Analytics |
Keybinding | Function | Comment |
---|---|---|
Ctrl + ⇧ Shift + Tab ↹ | Command Console | See documentation for commands |