pmnoxx/display-commander
Advanced ReShade addon for professional window management, display control, and NVIDIA Reflex integration. Features borderless mode, aspect ratio preservation, full-screen prevention, and comprehensive window state management.
ReShade Display Commander (project has been abandoned and is no longer supported)
ReShade Display Commander is a ReShade addon that provides in-game control over display, windowing, performance, and audio. It adds a simple UI inside the ReShade overlay to adjust borderless/fullscreen behavior, window size and alignment, monitor targeting, FPS limiting (including background caps), and per-process audio volume/mute.
Note: Applying window operations from the main thread can crash some apps. This addon performs them on a background thread.
✅ Version Requirement: This addon requires stable ReShade 6.6.2 or later. The addon is now fully compatible with stable ReShade releases.
Latest stable release: Latest Release - Compatible with ReShade 6.6.2
📥 Latest Builds
| Architecture | Download |
|---|---|
| x64 (64-bit) | zzz_display_commander.addon64 |
| x86 (32-bit) | zzz_display_commander.addon32 |
🔄 Latest Build (bleeding edge): Build from the latest main branch, updated on every push: Latest Build.
🐛 Latest Debug Build: Debug build with PDB symbols for debugging and crash analysis: Latest Debug Build.
🔄 Nightly Builds: Scheduled development builds (daily): Nightly Releases.
🔨 Workflow artifacts: Download from the latest successful workflow run (requires GitHub account for artifact downloads).
Features
Display & window
- Window mode: Borderless windowed (aspect ratio or explicit width/height), borderless fullscreen, or no changes
- Monitor targeting: Choose which monitor to use; view current display info and refresh rate
- Background black curtain: Fill unused screen space behind a smaller game window (ADHD multi-monitor mode)
- Alignment: Snap window to corners or center
- Window controls: Minimize, restore, maximize (applied on a background thread to avoid crashes)
- Display hotkeys: Move to previous/next monitor (Win+Left / Win+Right), move to primary/secondary (numpad +/-), minimize/restore (Win+Down / Win+Up)
- Prevent minimize: Option to avoid game window minimizing on alt-tab
Performance & FPS
- FPS limiter: Custom limiter with foreground and optional background caps; multiple modes (e.g. OnPresentSync, Reflex, LatentSync, Safe mode)
- Background FPS: Optional separate FPS limit when game is in background (checkbox + slider)
- Live indicators: Flip state (composed/independent), VRR status, present mode (DXGI/Vulkan/OpenGL)
- Limit real frames: Works with frame generation (DLSS-G, etc.) to limit real frames instead of generated ones
Audio
- Per-process volume: Control game volume independently
- Mute options: Manual mute, mute in background, conditional background mute
- Per-channel VU meters: Main tab and performance overlay
- Hotkeys: Volume up/down, brightness up/down (configurable step)
Latency
- NVIDIA Reflex: Low-latency mode integration for reduced input lag (native and configurable)
- Inject Reflex: Optional injection of Reflex (sleep + latency markers) for games without native Reflex
- AntiLag II / XeLL: AMD AntiLag 2 and XeLL support via fake NVAPI (experimental, for non-NVIDIA GPUs)
- PCLStats (ETW): Optional PCLStats event reporting for Special K–style tools
HDR & color
- Auto color space: Format-based color space (sRGB / scRGB / HDR10) on the swap chain (DXGI)
- Manual color space: Override color space (sRGB, scRGB, HDR10 ST2084/HLG) from Advanced tab
- HDR hiding (experimental): Option to hide HDR modes or force SDR for compatibility
DLSS & upscaling
- DLSS information: Status, quality preset, scaling ratio, internal/output resolution on Main and Swapchain tabs
- Frame Generation (FG): FG mode display in performance overlay when DLSS-G is active
- DLSS overrides: Preset overrides, internal resolution scale, M–Z presets; optional hide DLSS-G from ReShade
- VRR status: DXGI and NVAPI VRR state (enabled/requested/possible) on Swapchain tab
Input & hotkeys
- Configurable hotkeys: Full Hotkeys tab — window/display, volume, brightness, ADHD mode, independent window toggle, etc.
- XInput: Controller support and hooks for remapping / compatibility
- Windows.Gaming.Input: Option to suppress WGI so games use XInput (helps with continue-rendering-in-background)
- Input remapping: Controller remapping and related presets
Advanced & power user
- Continue rendering in background: Game keeps rendering when alt-tabbed (no minimize/focus spoofing)
- Standalone / independent UI: Run settings in a separate window or without ReShade (.NO_RESHADE, SetupDC)
- Proxy loading: Load as dxgi.dll, d3d9.dll, d3d11.dll, d3d12.dll, ddraw.dll, dinput8.dll, hid.dll, bcrypt.dll, version.dll, opengl32.dll, dbghelp.dll, vulkan-1.dll, winmm.dll, or winhttp.dll proxy when needed. When loaded as winhttp.dll, the Main tab shows a warning: the proxy is not signed by Microsoft and may cause network connection issues (blocked traffic, login failures); consider using another proxy (e.g. dxgi.dll) if you see network problems.
- Expert – flag files: Optional flag files change behavior (e.g.
.NO_RESHADE,.NODC).
In the game exe directory:.NO_RESHADE/.NORESHADE— standalone mode (no ReShade; settings UI only).NODC— load ReShade only, do not register as addon (proxy-only).UI— open independent settings window at start.NO_EXIT/.NOEXIT— block process exit; open independent UI when game tries to exit (debugging).GET_PROC_ADDRESS— GetProcAddress logging
In the addon (DLL) folder or%LocalAppData%\Programs\Display_Commander\:.DC_CONFIG_GLOBAL— store config and ReShade data in%LocalAppData%\Programs\Display_Commander\Games\<game_name>\(global per-game folder;game_nameskips generic exe path segments likeClient/Binaries/Win64). The empty flag file can live next to the addon or in the Display_Commander app data root (one place is enough)..DC_CONFIG_IN_DLL— store config and ReShade data in the addon folder instead of the game folder.DLL_DETECTOR— copy addon todlls_loadedand exit (for detecting which DLLs the game loads)
See Expert: Flag files in the game directory.
- Addon directory DLL loading: From the same folder as the addon, .dc64 / .dc32 / .dc / .asi are loaded before ReShade; .dc64r / .dc32r / .dcr are loaded after ReShade (for addons that need the ReShade API). Post-ReShade addons use a temp copy so originals can be updated while the game runs.
- NVIDIA Profile (Inspector): View and edit driver profile for the current game; apply as administrator
- CPU control: Core affinity and process priority (Main / Settings tab in standalone)
- Prevent display sleep & screensaver: Keep display awake while gaming
- Clip cursor: Option to clip cursor to game window
- Image adjustment: Brightness, gamma, saturation, hue; AutoHDR option
- Fake NVAPI (experimental): Spoof NVIDIA on non-NVIDIA GPUs for DLSS/Reflex-style features
Known Issues
zzz_ prefix to the filename - it ensures proper load order and prevents conflicts with other addons.
For a comprehensive list of known issues and workarounds, see KNOWN_ISSUES.md.
Requirements
- Windows with stable ReShade 6.6.2 or later
- The addon matching your game architecture:
.addon64for 64-bit,.addon32for 32-bit
Installing Display Commander as a proxy (dxgi.dll / winmm.dll) (RECOMMENDED)
Recommended for maximum compatibility: install Display Commander as a DLL proxy in the game exe folder—start with winmm.dll or dxgi.dll; if the game does not load those from its directory, try another supported proxy name (e.g. d3d11.dll, d3d12.dll, version.dll; full list under Features → Proxy loading above). Copy zzz_display_commander.addon64 (or .addon32 for 32-bit) there and rename it to that proxy filename. Put ReShade beside it as ReShade64.dll (64-bit) or ReShade32.dll (32-bit); Display Commander loads ReShade from that DLL. This layout avoids depending on a global ReShade install and works with titles that only load DLLs from the game folder.
Common proxy names
| Name | Typical use |
|---|---|
| dxgi.dll | DirectX 10/11/12 titles that load DXGI from the game directory. |
| winmm.dll | Very early load (before DXGI in some setups); use if dxgi.dll is not loaded from the game folder or you need this load order. |
Do not leave two different proxies in the same folder if both would wrap the same API (e.g. conflicting dxgi.dll replacements). Pick one approach per game.
Steps (64-bit game)
- Copy
zzz_display_commander.addon64into the same directory as the game executable. - Rename that file to
dxgi.dllorwinmm.dll(only one proxy name as above). - Add ReShade next to it:
- Download the official addon installer: ReShade_Setup_6.7.3_Addon.exe.
- Open the
.exewith 7-Zip (right-click → 7-Zip → Open archive) and extractReShade64.dllinto the game exe folder (same place as the renamed Display Commander proxy).
- Launch the game; open the ReShade overlay and enable Display Commander on the Add-ons tab if needed.
32-bit games: Use zzz_display_commander.addon32 renamed to the same proxy pattern your title expects, and extract ReShade32.dll from the same installer archive instead of ReShade64.dll.
ReShade 6.6.2 or later is required; the 6.7.3 addon package above meets that. Newer ReShade addon installers from reshade.me work the same way if you prefer a newer ReShade64.dll / ReShade32.dll.
Config and ReShade paths (proxy installs too): Same rules as in the Config and ReShade paths paragraph in the next section.
Installing Display Commander as a ReShade addon (may cause issue; use as backup)
Use this path when ReShade is installed with the official setup from reshade.me and loads as dxgi.dll, d3d9.dll, opengl32.dll, or the Vulkan layer—then copy Display Commander’s .addon64 / .addon32 into the same place ReShade uses for that game (or your global ReShade folder). If that setup misbehaves, switch to the proxy + ReShade64.dll / ReShade32.dll method in the section above.
Prerequisites: You must have stable ReShade 6.6.2 or later installed.
- Download a prebuilt addon from Releases (CI uploads artifacts for both x64 and x86), or build from source.
- Copy the file
zzz_display_commander.addon64(or.addon32for 32-bit) to the folder where ReShade is loaded for your game (the same folder as the ReShade runtime, e.g.,dxgi.dll).- Alternatively, place it into your global ReShade installation directory (for example
D:\\Program Files\\ReShade).
- Alternatively, place it into your global ReShade installation directory (for example
- Launch the game, open the ReShade overlay (Home by default), go to the Add-ons tab, and locate "Display Commander".
Config and ReShade paths: By default, config (e.g. DisplayCommander.toml, ReShade.ini) is stored in the game exe directory. Create an empty .DC_CONFIG_GLOBAL in the addon folder or in %LocalAppData%\Programs\Display_Commander\ to use %LocalAppData%\Programs\Display_Commander\Games\<game_name>\ (game name = first path segment above the exe that is not a generic engine folder—Client, Binaries, Win64, Win32, Bin, x64, x86—otherwise the exe name without .exe, e.g. Wuthering Waves or Sekiro). .DC_CONFIG_IN_DLL in the addon folder stores config next to the addon. Priority: .DC_CONFIG_GLOBAL (either location) beats .DC_CONFIG_IN_DLL.
Note: For the latest stable release compatible with ReShade 6.6.2, download from Latest Release.
Installing OptiScaler
OptiScaler enables DLSS/FSR-style upscaling on AMD and Intel GPUs (and can be used alongside Display Commander). To install it in a game folder that uses Display Commander’s dlls_to_load layout:
- Download the OptiScaler archive from the OptiScaler releases (e.g. v0.7.9 — file
OptiScaler_0.7.9.7z). - Unpack the contents into your game’s
dlls_to_load/before_reshadefolder (DLLs here load before ReShade). You can also usedlls_to_load(root) for the same “before ReShade” phase;dlls_to_load/after_reshadeis for addons that must load after ReShade. - Run
setup_windows.batfrom that folder:- When prompted, choose winmm.dll.
- Choose Nvidia (or the option that matches your use case).
OptiScaler has no official website; use only the GitHub repo, their Discord, or Nitec’s NexusMods page. It is free; any site asking for payment is a scam.
Monster Hunter Wilds + ReFramework
ReFramework uses an input proxy (dinput8.dll), and its interaction with ReShade + Display Commander depends on DLL load order. The following two layouts are known to work.
Prerequisites:
- Use the stable ReShade addon (
ReShade64.dll/ReShade32.dll) compatible with Display Commander (stable ReShade 6.6.2 or later). - Adjust
64-bitvs32-bitfilenames consistently (zzz_display_commander.addon64vszzz_display_commander.addon32,ReShade64.dllvsReShade32.dll).
Method 1 (DC as winmm.dll, ReFramework loaded before ReShade)
- In the Monster Hunter Wilds game exe directory, copy Display Commander as:
zzz_display_commander.addon64→ rename to./winmm.dll
- Copy ReShade as the DXGI proxy:
ReShade64.dll→ rename to./dxgi.dll
- and place ReFramework here:
./dinput8.dll
This works because Display Commander loads dlls_to_load/before_reshade/ before it initializes ReShade.
Method 2 (ReFramework as dinput8.dll, ReShade as dxgi.dll, DC as addon)
- In the game exe directory, place:
dinput8.dll(ReFramework)
- Rename ReShade so it becomes the DXGI proxy:
ReShade64.dll-> rename todxgi.dll
- Place Display Commander as a ReShade addon in the same directory:
zzz_display_commander.addon64
- In reshade.ini (6.7.2+)
[ADDON]
LoadFromDllMain=zzz_display_commander.addon64
Then launch the game and enable Display Commander in the ReShade overlay (Add-ons tab) if it is not already active.
Usage
Inside the ReShade overlay, Display Commander exposes:
- Display Settings: Window mode, width/height or aspect ratio, target monitor, background curtain, alignment, and Auto-apply
- Monitor & Display: Dynamic monitor settings and current display info
- Audio: Volume, manual mute, mute in background, and conditional background mute
- Window Controls: Minimize, restore, maximize (applied from a background thread)
- Important Info: flip state
Build from source
Prerequisites:
- Git
- CMake 3.20+
- Ninja
- MSVC toolchain (Visual Studio 2022 or Build Tools)
Clone with submodules:
git clone --recurse-submodules https://github.com/pmnoxx/display-commander.git
cd display-commanderBuild (x64):
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallel
# Output: build/zzz_display_commander.addon64Build (x86, 32-bit):
cmake -S . -B build32 -G "Ninja Multi-Config" -A Win32
cmake --build build32 --config Release --parallel
# Output: build32/Release/zzz_display_commander.addon32 (or build32/zzz_display_commander.addon32)Notes:
- This project requires the Ninja generator. If another generator is used, configuration will fail.
- Initialize submodules before building:
git submodule update --init --recursive. - NVAPI features are statically linked if NVIDIA's NVAPI is present under
external/nvapi(headers atexternal/nvapi, static libs atexternal/nvapi/{x86,amd64}). Missing NVAPI libs will only disable those features. Static linking is used by default to avoid DLL dependency issues. - XInput, Windows Multimedia (winmm), and DbgHelp libraries are loaded dynamically to avoid error code 126 (module not found) on systems where these libraries are not available. DbgHelp is supported both as a runtime dependency (stack traces when available) and as a proxy: the addon can be loaded as dbghelp.dll, forwarding DbgHelp API calls to the system dbghelp.dll. Similarly, when loaded as hid.dll or bcrypt.dll, the addon forwards HID and CNG (BCrypt) API calls to the system DLLs.
Continuous Integration
GitHub Actions builds x64 and x86 on pushes and PRs and uploads the resulting .addon64 and .addon32 as artifacts. Tag pushes also create releases.
- Latest Build: Every successful push to
mainupdates the Latest Build release (bleeding edge). - Latest Debug Build: Every successful push to
mainalso updates the Latest Debug Build release (debug binaries with PDB symbols). - Nightly: A scheduled build runs daily at 2:00 AM UTC and updates the Nightly release.
Troubleshooting
- "Addon not loading" or "Compatibility issues": Ensure you're using stable ReShade 6.6.2 or later. Download the latest release from Latest Release.
- "This project requires the Ninja generator": Configure with
-G Ninja(or"Ninja Multi-Config"for the 32-bit example above). - "Missing submodule: external/reshade": Run
git submodule update --init --recursive. - "NVAPI libs not found ...": Optional; only NVAPI-based features will be unavailable.
- "No addon files found" after build: Ensure Release config and correct architecture; check
build/orbuild32/Release/for the expected output name (should bezzz_display_commander.addon64orzzz_display_commander.addon32).
Feature Proposals
Have ideas for new features? Check out our Feature Proposals to see what's being considered for future development.
Support
Need help? Check out our Support Guide for detailed information on getting assistance.
Quick Support Links:
- RenoDX Discord: Join our community
- Support Thread: Display Commander Support
- GitHub Issues: Report bugs or request features
The RenoDX Discord community is the best place to get real-time help, discuss features, and connect with other users.
Credits
- ReShade and its addon SDK
- Dear ImGui (via ReShade dependencies)
- NVIDIA NVAPI headers/libs (
external/nvapi) - Additional third-party code under
external/(stb, fpng, etc.) - VBlank Scanline Sync: Based on the algorithm used in Special-K by Kaldaien
- Swapchain HDR Upgrade (scRGB / HDR10): Approach inspired by AutoHDR-ReShade (EndlesslyFlowering)
See CHANGELOG.md for version history.