DLSS5 Enabler
Transactional command-line installer for managing the DLSS5-Feeder Neural Rendering stack in Windows games, either natively or through Wine and Proton.
DLSS5 Enabler automates a setup that would otherwise require manually coordinating several upstream projects, selecting the correct 32-bit or 64-bit binaries, configuring ReShade, editing Wine overrides, and preserving enough state to undo every change later. The CLI runs on Windows and experimental Linux / SteamOS, while the installation target is always a Windows PE executable.
It combines:
- DLSS5-Feeder
- RenoDX
- ReShade with Addon support
- NVIDIA NGX DLSS binaries discovered through the RenoDX manifest
- LumeniteFX motion-vector shaders
- dgVoodoo2 for optional DirectX 9 translation
[!IMPORTANT] DLSS5 Enabler is an unofficial community tool. It is not affiliated with or endorsed by NVIDIA, ReShade, RenoDX, or the other upstream projects. “DLSS 5” is used because that is how users commonly search for this stack; the tool does not add native engine integration and compatibility varies by game.
Why this exists
The rendering stack spans multiple binaries, configuration files, graphics APIs, architectures, and operating systems. A failed manual installation can overwrite an existing hook DLL, leave a partial ReShade setup, or persist a Wine registry override after the files it points to are gone.
DLSS5 Enabler treats installation as a transaction. It validates the target first, records every managed mutation, and rolls changes back in reverse order if a later stage fails.
Engineering scope
Although the user-facing job is game mod orchestration, the project exercises broader software-engineering concerns:
- PE32 and PE32+ binary inspection, architecture selection, and graphics API heuristics;
- provider-neutral upstream discovery with bounded HTTP retries and immutable fallbacks;
- streaming downloads, content hashing, cache identity, and software supply-chain validation;
- safe ZIP and 7z extraction across Windows and POSIX path conventions;
- transactional filesystem and Wine registry changes with rollback and byte-for-byte restoration;
- typed metadata migrations that preserve installation choices across CLI upgrades;
- cross-platform packaging and automated validation on Windows, experimental Linux, and macOS.
macOS is a CI portability target for the Python, archive, cache, and packaging layers. It is not presented as a DLSS runtime or game-installation target.
Reliability by design
The project is built to fail safely when downloads, permissions, extraction, or configuration do not behave as expected.
- Transactional installation: all installation stages and critical finalization steps participate in rollback, including the stage that reports the failure.
- Recoverable refreshes: an existing managed installation is snapshotted before replacement and restored if the new installation fails.
- Safe uninstallation: original DLLs and backed-up INI bytes are restored before metadata is removed; Wine registry changes restore the recorded original values.
- Atomic writes: records, indexes, cache metadata, registry files, and INI files are written through a temporary file followed by replacement.
- Concurrent-operation locks: per-game operations and shared state use filesystem locks to prevent overlapping writes.
- Non-destructive backups: existing files receive unique backup names; an older backup is never silently overwritten.
- Validated downloads: HTTPS certificate verification remains enabled, incomplete downloads use isolated temporary files, and an existing valid destination survives a failed refresh.
- Validated fallback: incompatible latest artifacts produce a warning and fall back to a pinned revision with an exact SHA-256 check.
- Safe extraction: archive members are checked for absolute paths, parent traversal, and flattened-name collisions before extraction.
- Cache identity checks: cached components are tied to their source URL, version or revision, and SHA-256 digest.
- Preflight resolution: every required upstream is downloaded and validated before an existing installation is removed or a game file is changed.
- Strict verification: Ruff, Mypy strict, Pyright strict, and the complete test suite run through one command.
These protections reduce the chance of a broken game directory, but they cannot guarantee compatibility with every game, mod loader, anti-cheat system, or upstream release.
Installation paths
| Rendering path | Mode | Installed integration |
|---|---|---|
| DirectX 11 / 12 | Default | ReShade dxgi.dll |
| DirectX 9 | --d3d9 |
dgVoodoo2 translation plus the 64-bit feeder host when required |
| OpenGL | --opengl |
ReShade opengl32.dll |
| Vulkan | --vulkan-layer |
Feeder Vulkan-layer fallback when available upstream |
| 32-bit games | Automatic detection | 32-bit feeder addon with a 64-bit host bridge |
These are implemented installer paths, not claims of universal compatibility with every engine or game. Automated tests validate API detection, architecture selection, file placement, configuration, rollback, and cleanup with synthetic binaries. Actual rendering compatibility still depends on the game, driver, mod stack, and upstream components.
Platform and target model
| Environment | Role |
|---|---|
| Windows | Runs the CLI and manages a native Windows game executable |
| Experimental Linux / SteamOS | Runs the CLI and manages a Windows game executable through Wine or Proton |
| macOS | Runs portability, packaging, and synthetic-artifact checks in CI only |
The installation target must be a Windows PE executable. Native Linux ELF binaries are inspected for diagnostics but are rejected as installation targets, and the project does not claim a native macOS DLSS runtime.
Requirements
- Python 3.10 or newer
uv(recommended) or pip- An NVIDIA RTX GPU supported by the downloaded NGX runtime
- A game installation you can write to
- Internet access for the first component download
Install
Run the latest release without installing it:
uvx dlss5-enabler@latest --help
uvx dlss5-enabler@latest info "/path/to/game.exe"
uvx dlss5-enabler@latest install "/path/to/game.exe"
For frequent use, install the latest release persistently with uv:
uv tool install dlss5-enabler@latest
dlss5-enabler --help
Update a persistent uv installation with uv tool upgrade dlss5-enabler.
Install with pip
python -m pip install --upgrade dlss5-enabler
dlss5-enabler --help
Run from source
From a local checkout:
uv sync
uv run dlss5-enabler --help
uv run dlss5-enabler info "/path/to/game.exe"
uv run dlss5-enabler install "/path/to/game.exe"
On Windows, PowerShell and cmd.exe paths work normally:
dlss5-enabler install "C:\Games\Example\game.exe"
On SteamOS or experimental Linux, point to the Windows executable inside the Steam library:
dlss5-enabler install "/home/deck/.local/share/Steam/steamapps/common/Example/game.exe"
When the matching Proton prefix can be identified, the tool updates the required Wine DLL override and prints the corresponding Steam launch options.
Commands
Inspect a game
dlss5-enabler info "/path/to/game.exe"
Reports architecture, imported graphics APIs, write access, installed and current tool versions, saved options, component versions, and a detected Proton prefix.
For a game already managed by DLSS5 Enabler, info, install, update, and uninstall also accept its executable name, for example dlss5-enabler info Control_DX12.exe. If more than one managed game has that name, the CLI lists the matching paths and requires the full path.
Install
dlss5-enabler install [OPTIONS] "/path/to/game.exe"
Options:
| Option | Purpose |
|---|---|
--lumenite / --no-lumenite |
Enable or disable LumeniteFX; enabled by default |
--d3d9 |
Install the dgVoodoo2 DirectX 9 translation path |
--opengl |
Use the OpenGL ReShade hook |
--vulkan-layer |
Request the Vulkan-layer fallback |
-f, --force-download |
Ignore cached assets and fetch them again |
-v, --verbose |
Enable detailed console and file logging |
--d3d9 and --opengl cannot be combined.
Update a managed game
dlss5-enabler update "/path/to/game.exe"
dlss5-enabler update Control_DX12.exe
update preserves the recorded installation engine and the same LumeniteFX, D3D9, OpenGL, and Vulkan choices. RenoDX is the supported engine in this release. Update eligibility compares the installed Enabler version with the running CLI; it does not check upstream component versions when those Enabler versions match. Use --reinstall to resolve and reapply components with the current CLI, and add --force-download to bypass caches. --force-download alone does not bypass the version check. A game installed by a newer CLI is never downgraded.
Installation records use schema 3. Older supported records migrate in memory through each schema version, and successful installation or update saves the current schema. Inspecting a game does not rewrite its record. Unknown future schemas, malformed records, and unknown engines are rejected and preserved.
If recovery cannot finish, the command reports incomplete recovery and retains a snapshot directory containing recovery.json and saved files. Keep that directory for recovery. A separate cleanup warning means installation committed successfully but a temporary staging or recovery directory could not be removed.
Uninstall
dlss5-enabler uninstall "/path/to/game.exe"
The target may be the game executable or its directory. For a uniquely managed game, its executable name also works:
dlss5-enabler uninstall Control_DX12.exe
If multiple managed games have the same executable name, the command lists the matching paths and requires a full path. Only files and settings recorded by DLSS5 Enabler are reverted.
List managed games
dlss5-enabler list
The list compares each saved installation version with the running CLI locally; it does not make one network request per game.
Inspect or clear the download cache
dlss5-enabler cache
dlss5-enabler cache --clean
Show or check the CLI version
dlss5-enabler version
dlss5-enabler version --check
install, update, info, and list perform a non-blocking PyPI version check at most once every 24 hours per shared cache. The marker is empty and stores no version data. A newer release only produces an update recommendation; the CLI never updates itself. Use uv tool upgrade dlss5-enabler or python -m pip install --upgrade dlss5-enabler to update explicitly.
Installation pipeline
The RenoDX pipeline separates target analysis, component selection, preparation, and game mutations:
- Validate the executable and collect architecture, API hints, and native DLSS evidence.
- Select the RenoDX components and proxy.
- Discover, download, and validate required upstream components.
- Validate the selected files and extract ReShade into isolated staging.
- Snapshot and remove a previous managed installation when refreshing.
- Place the correct ReShade Addon DLL and configure its INI.
- Configure dgVoodoo2 when DirectX 9 translation is requested.
- Place Feeder when needed and the ReShade shader headers.
- Place RenoDX and the architecture-appropriate NGX binaries.
- Place LumeniteFX and configure its motion-vector provider.
- Install the Vulkan fallback when requested and available.
- Mirror managed files into
bin/for layouts that require it. - Apply Wine/Proton DLL overrides when applicable.
- Save the installation record and update the global index.
ReShade installation extracts the official package without executing its setup program. File placement and configuration changes go through the Enabler transaction. Critical finalization completes before recovery snapshots are discarded.
New installations record created directories and runtime artifacts, including preexisting files that cleanup must preserve. Older records lack some of that ownership information, so untracked legacy logs, screenshots, or empty directories are preserved. Legacy INI entries without whole-file backups can restore only their recorded values; schema migration cannot reconstruct original bytes that were never saved.
Upstream fallback policy
The wheel contains dlss5_enabler/upstreams.json, which pins a known-compatible fallback for every downloaded component. A normal installation still tries the newest upstream revision first. The candidate is downloaded to an isolated temporary file and checked for HTTPS provenance, size or digest when published, archive safety, required contents, supported layout, and architecture before entering the cache.
When the latest revision cannot be discovered, downloaded, or validated, the CLI emits an UPSTREAM_* warning and tries the pinned fallback. A fallback is accepted only when its exact SHA-256 and content policy match the embedded manifest. The successful installation summary lists every fallback used. If both candidates fail, the command stops without cleaning an existing installation or modifying the game.
The main warning codes distinguish discovery, missing or ambiguous assets, timeout, rejected HTTP responses, digest mismatch, unsafe archives, missing content, unsupported formats, fallback use, and fallback failure. The detailed log includes the component and revisions involved without exposing authenticated URLs.
Local state
| Platform | Data and cache location |
|---|---|
| Windows | %LOCALAPPDATA%\DLSS5 Enabler |
| Experimental Linux / SteamOS | XDG data, cache, config, and state directories under dlss5-enabler |
| Per game | dlss5-enabler.install.json beside the game executable |
The log file is named dlss5-enabler.log.
Architecture
dlss5_enabler/
├── core/ Binary inspection, exact-case INI handling, records, atomic I/O
├── network/ HTTPS downloads, release discovery, cache validation
├── operations/ Typed RenoDX pipeline, shared transactions, update, and uninstall
├── schemas/ Versioned records and chained Python migrations
├── platform/ Windows, experimental Linux, Wine, Proton, and Steam discovery adapters
├── check.py Unified quality runner
└── cli.py Typer command-line interface
flowchart TB
user([User]) --> cli["Typer CLI<br/>info · install · update · uninstall<br/>list · cache · version · check"]
subgraph target["Target and host inspection"]
pe["PE and API analysis<br/>PE32 / PE32+ · DXGI · D3D9 · OpenGL · Vulkan"]
platform_contract["PlatformAdapter contract"]
platform_impl["WindowsAdapter / LinuxAdapter"]
proton["ProtonManager / WineRegParser<br/>Steam prefix discovery and DLL overrides"]
platform_contract --> platform_impl
end
cli --> pe
cli --> platform_contract
subgraph operations["Transactional operations"]
install["install"] --> pipeline["RenoDX installation pipeline<br/>validate · preflight · apply · record · commit"]
update["update"] -->|"reuse saved engine and options"| pipeline
uninstall["uninstall"] --> recovery["Snapshot and recorded-mutation reversion"]
pipeline -->|"any stage fails"| rollback["Reverse-order rollback"]
rollback --> recovery
end
cli --> install
cli --> update
cli --> uninstall
pe --> pipeline
platform_impl --> pipeline
proton --> pipeline
subgraph supply["Upstream resolution and supply-chain validation"]
fetch["Component source functions"] --> provider["DownloadSourceAdapter<br/>provider-neutral contract"]
provider --> github["GitHubDownloadSourceAdapter<br/>releases · files · snapshots · archives"]
github --> upstreams["GitHub repositories"]
fetch --> direct["Direct discovery<br/>ReShade site and RHI-provided NVIDIA URLs"]
github --> resolver["UpstreamResolver"]
direct --> resolver
manifest["Embedded upstreams.json<br/>pinned revisions · SHA-256 · required members<br/>architecture and format bounds"] --> resolver
resolver --> http["Bounded HTTP<br/>deadlines · classified retries · curl fallback"]
http --> hosts["Original upstream hosts"]
resolver <--> cache["Locked, atomic cache<br/>URL + revision + SHA-256 identity"]
resolver --> validation["HTTPS, digest, size, archive safety,<br/>CRC, content, format, and architecture validation"]
validation --> bundles["Validated component bundles<br/>Feeder + Vulkan · RenoDX · NGX NR/SR<br/>ReShade + headers · LumeniteFX · dgVoodoo2"]
end
pipeline -->|"preflight before mutation"| fetch
bundles --> pipeline
subgraph mutation["Managed state and reversible mutations"]
fileio["Locked atomic file I/O<br/>safe archive extraction and unique backups"]
ini["Exact-case INI mutations"]
registry["Wine / Proton registry mutations"]
game["Windows PE game directory<br/>hook DLLs · addons · shaders · NGX · optional layers"]
record["Per-game dlss5-enabler.install.json<br/>tool version · options · files · original values"]
index["Global managed-game index"]
fileio --> game
ini --> game
registry --> proton_prefix["Wine / Proton prefix"]
record --> index
end
pipeline --> fileio
pipeline --> ini
pipeline --> registry
pipeline --> record
update -->|"read metadata"| record
uninstall -->|"read metadata"| record
recovery -->|"restore bytes and settings"| game
recovery -->|"restore overrides"| proton_prefix
recovery -->|"preserve or remove consistently"| record
subgraph verification["Verification and delivery"]
ci["GitHub Actions<br/>Ubuntu · Windows · macOS<br/>Python 3.10–3.13"] --> check["Unified check<br/>Ruff · Mypy strict · Pyright strict · Pytest"]
ci --> package["Build and isolated-install verification<br/>wheel resources · uv · pip"]
fixtures["Offline synthetic PE32 / PE32+<br/>archives and fake component binaries"] --> check
end
check -.-> cli
check -.-> pipeline
package -.-> manifest
The Python import namespace uses an underscore (dlss5_enabler); the package and executable use a hyphen (dlss5-enabler).
GitHub is implemented behind the provider-neutral download-source contract in network/adapters.py. Release, repository-file, snapshot, and archive discovery stay in the adapter; component validation and fallback policy stay in the resolver. A future mirror should implement the same adapter contract and return the same neutral asset models instead of adding provider-specific branches to component code.
Development
Install all dependencies and run the complete verification suite:
uv sync
uv run dlss5-enabler check
uv run is reserved for commands executed from a project checkout. Installed users should use dlss5-enabler directly or uvx dlss5-enabler@latest for ephemeral execution.
The unified check requires all of the following to pass with no warnings:
- Ruff formatting
- Ruff linting
- Mypy strict type checking
- Pyright strict type checking
- Pytest
Maintainers can inspect a candidate pin without modifying the manifest:
uv run dlss5-enabler-update-upstream COMPONENT REVISION ASSET_NAME HTTPS_URL
The command downloads to a temporary directory, validates the component layout, and prints the resolved revision, size, SHA-256, and recognized format. Add --write --manifest dlss5_enabler/upstreams.json only after reviewing that output; the tool never chooses latest or rewrites the manifest implicitly.
Upstream projects
DLSS5 Enabler is inspired by and builds on the work of:
Each downloaded component remains subject to its upstream license and terms.
License
DLSS5 Enabler itself is distributed under the MIT License.
Disclaimer
DLSS5 Enabler is an independent, unofficial community project. It is not an NVIDIA product, is not affiliated with NVIDIA Corporation, and is not sponsored, reviewed, approved, or endorsed by NVIDIA or any of the upstream projects named in this document. NVIDIA, DLSS, GeForce, and related names and marks belong to NVIDIA Corporation in the United States and other countries. Other names and marks belong to their respective owners.
The maintainer develops only the installer and orchestration code in this repository. The maintainer does not create, own, host, bundle, redistribute, audit, warrant, support, or maintain NVIDIA DLSS/NGX binaries or the third-party components installed by this tool. DLSS5 Enabler only discovers release information and directs downloads to the original upstream websites, repositories, manifests, or content servers at runtime. Availability, licensing, integrity, compatibility, behavior, and support for those downloads remain the responsibility of their respective providers.
Report problems with DLSS5 Enabler's installation, rollback, detection, or command-line behavior in this project's issue tracker. Report problems inside DLSS, DLSS5-Feeder, RenoDX, ReShade, LumeniteFX, dgVoodoo2, or another downloaded component to that component's own maintainer.
Use this tool at your own risk. Back up important game files and respect each game's modding, multiplayer, and anti-cheat policies. No guarantee is made that any particular game, driver, GPU, mod stack, or future upstream release will work.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dlss5_enabler-1.1.4.tar.gz.
File metadata
- Download URL: dlss5_enabler-1.1.4.tar.gz
- Upload date:
- Size: 220.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90fc5169600dd587dc6ae619f13b0a795b8fde4c09e1321e729c9a1e4db4cc5d
|
|
| MD5 |
70e1fa6baf5f0dc9339edfb27d2006d0
|
|
| BLAKE2b-256 |
c64a6fef8eec8c8447028c8284260486ca8c59c48a702975fe0f3bcd44c3b344
|
Provenance
The following attestation bundles were made for dlss5_enabler-1.1.4.tar.gz:
Publisher:
publish.yml on al4xdev/dlss5-enabler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dlss5_enabler-1.1.4.tar.gz -
Subject digest:
90fc5169600dd587dc6ae619f13b0a795b8fde4c09e1321e729c9a1e4db4cc5d - Sigstore transparency entry: 2727666430
- Sigstore integration time:
-
Permalink:
al4xdev/dlss5-enabler@4dc2aeded5c5e864be1fd8e39bc361856df2a3b3 -
Branch / Tag:
refs/tags/v1.1.4 - Owner: https://github.com/al4xdev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4dc2aeded5c5e864be1fd8e39bc361856df2a3b3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dlss5_enabler-1.1.4-py3-none-any.whl.
File metadata
- Download URL: dlss5_enabler-1.1.4-py3-none-any.whl
- Upload date:
- Size: 85.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f57cd2b9be032d5116e95663375644e44fddeb10e9a2bad5af8c68ff006f36b
|
|
| MD5 |
0a2338278c63f5a4c8604afb2164aec7
|
|
| BLAKE2b-256 |
91a6705984693a1742ce705d97be84b892ebca072d6e20c63cb3b0a13f54b756
|
Provenance
The following attestation bundles were made for dlss5_enabler-1.1.4-py3-none-any.whl:
Publisher:
publish.yml on al4xdev/dlss5-enabler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dlss5_enabler-1.1.4-py3-none-any.whl -
Subject digest:
3f57cd2b9be032d5116e95663375644e44fddeb10e9a2bad5af8c68ff006f36b - Sigstore transparency entry: 2727666894
- Sigstore integration time:
-
Permalink:
al4xdev/dlss5-enabler@4dc2aeded5c5e864be1fd8e39bc361856df2a3b3 -
Branch / Tag:
refs/tags/v1.1.4 - Owner: https://github.com/al4xdev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4dc2aeded5c5e864be1fd8e39bc361856df2a3b3 -
Trigger Event:
push
-
Statement type: