Decky-Framegen for OptiScaler on Steam Deck
Steam Deck Plugin to apply Optiscaler upscaling and frame gen mods in game mode
At a glance
- What is it?
- Decky-Framegen installs OptiScaler and manages per-game launch patches from Steam Deck game mode. It fits users of compatible DirectX 12 handhelds who want FSR-based upscaling or frame generation without returning to desktop mode for routine setup.
- Who is it for?
- Adopt Decky-Framegen if you use a compatible DirectX 12 handheld and want repeatable OptiScaler management from Steam Deck game mode. Do not choose it for unsupported rendering paths, experimental games without frame generation hooks, or users who need a fully automated compatibility guarantee.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 83 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why Decky-Framegen targets DLSS paths on handhelds
Decky-Framegen solves a packaging and configuration problem rather than implementing frame generation itself. It places OptiScaler and supporting libraries in `~/fgmod`, supplies game-specific launch commands, and exposes setup, patching, and removal through a Decky Loader plugin. The intended users are Steam Deck owners running compatible DirectX 12 games on handheld hardware where the game exposes DLSS-related choices.
The central mechanism is substitution. OptiScaler intercepts DLSS calls and directs them toward FSR3 or FSR3.1 pathways, while a bundled DLSSG-to-FSR3 mod supplies frame generation for games that already have a DLSS frame generation path. FakeNVAPI emulates the NVIDIA API surface needed to make DLSS options selectable on AMD or Intel GPUs. Supporting DLLs cover DX12 and Vulkan dependencies.
Games with no existing frame generation pathway use OptiFG, which the README explicitly describes as highly experimental. That boundary matters. Decky-Framegen can add frame generation where no usable pathway exists, but the repository documentation does not claim universal compatibility or guarantee success for every title.
Inside the plugin's OptiScaler deployment
Based on the repository layout, the plugin frontend is built from `src/`, while `main.py` is the primary Python component used by Decky. `package.json` defines the plugin package as version `0.17`, with Rollup producing the bundled frontend. The project also uses `@decky/api`, `@decky/ui`, React types, and the Decky Rollup plugin.
The setup action downloads an OptiScaler archive into the `fgmod` directory and installs the required library files. The package configuration pins the remote OptiScaler 0.9.4 archive by URL and SHA-256 hash. This makes the external payload identifiable, although the truncated package file does not expose the complete implementation of download verification, extraction, or cleanup.
Per-game operation is handled through Steam launch options. In the standard flow, the plugin copies a command that the user pastes into the game's Properties, Launch Options field. Manual Mode instead exposes separate patch and unpatch commands for wrapper-based management. This division gives users two operational models, but it also puts responsibility for editing Steam launch options on the user.
The README says the Insert key opens additional OptiScaler settings during a game. It also links to the OptiScaler documentation and settings through a plugin webpage button. Those are in-game and documentation controls, not evidence that the plugin can diagnose every failed launch.
Installing Decky-Framegen and applying the first game patch
The documented installation path does not provide a shell package command. It begins with downloading the plugin archive and using Decky Loader's "install from zip" option in developer settings. The repository includes build recipes, but the user-facing README does not document a standalone installation from `pnpm`, nor does it explain how to move a locally built archive onto the Deck.
After Decky Loader installs the plugin, open it and select "Setup OptiScaler Mod". The plugin should populate `~/fgmod` with OptiScaler and the supporting components it manages. The documentation does not state whether setup needs desktop mode, so it would be unsafe to promise that detail.
For the first game, choose the standard direct method and select "Copy launch options". Paste the copied command into Steam under Properties, Launch Options. A configurable launch can then carry settings into OptiScaler before startup. For example, the README gives this XeFG output configuration:
FrameGen_Enabled=true FGInput=fsrfg FGOutput=xefg ~/fgmod/fgmod %command%Launch the game, open its graphics settings, and enable DLSS where available. The plugin's role is to make that path available through OptiScaler; it does not replace the game's own graphics menu. To choose the DX12 FSR path, the README provides:
Dx12Upscaler=fsr31 ~/fgmod/fgmod %command%The `fsr31` example may upgrade the selected DX12 input to FSR4 according to the README. Runtime availability and fallback still depend on the selected runtime and hardware.
Environment-variable control and FSR4 runtime selection
From version 0.15.1, the plugin supports launch-time OptiScaler settings through environment variables. These variables override `OptiScaler.ini` for that launch. This is useful for games that should share defaults, because the values are applied before OptiScaler starts instead of requiring every setting to be changed separately in the in-game interface.
The README defines three accepted forms: `OptiScaler_Section_Option=value`, `Section_Option=value`, and `Option=value`. The full form avoids ambiguity when option names overlap. For example, `Enabled` occurs in multiple configuration sections, so `FrameGen_Enabled=true` identifies both the section and option. Prefixing an assignment with `OptiScaler` provides another namespace level.
The runtime menu is more consequential than a simple quality selector. The plugin retains several FSR4 paths, including the upstream 0.9.4 FFX 2.3 SDK bundle, a Valve RDNA2 compatibility path, a driver override, and an older 4.0.2c compatibility runtime. The README favors the Valve 4.1.1 path for RDNA2 and calls the driver override a fallback or testing path when it works with a game.
Hardware support differs among these paths. The SDK route documents FP8 support on RDNA4 and INT8 support on RDNA3 desktop GPUs. `FSR_Fsr4ForceEnableInt8=true` does not make older non-INT8 GPUs compatible. `FSR_Fsr4EnableWatermark=true` can display `FSR4`, `FSR4-i8`, or `FSR3`, which the README presents as confirmation of the active path.
Patch removal limits and failure cases
Removal depends on how the plugin was used. For a wrapper installation, Manual Mode provides a copyable unpatch command. The README explicitly gives the command that should replace the current launch option:
~/fgmod/fgmod-uninstaller.sh %command%The game must then run at least once so the uninstaller script can execute. Afterward, the launch option may be removed. For the standard direct patch flow, the in-plugin unpatch button performs removal instead. Keeping the wrong removal command would prevent cleanup, so users need to know which setup path they selected.
Several documented constraints can make this plugin the wrong tool. The package description limits the enhancement to a range of DirectX 12 games. OptiFG for games with no existing frame generation pathway is labeled highly experimental. The FSR4 force option cannot add INT8 capability to incompatible hardware. Runtime fallback can produce FSR3 even after an FSR4 setting is selected.
The README also does not document rollback for a failed game patch beyond its two removal methods. It does not list a compatibility database, per-game tested status, or automatic recovery for a title that stops launching. Steam launch options are therefore an important operational dependency, not merely a convenience.
Decky-Framegen compared with standalone OptiScaler
The meaningful alternative is managing OptiScaler directly instead of installing this Decky plugin. OptiScaler remains the core technology in both approaches. The plugin does not create a separate upscaling implementation; it packages OptiScaler, Nukem9's DLSSG-to-FSR3 mod, FakeNVAPI, dependencies, and runtime variants for a Steam Deck interface.
Direct OptiScaler management offers more control over file placement, configuration, runtime components, and launch commands, but the plugin documentation does not describe a supported standalone installation tutorial for this repository. The Decky-Framegen approach is aimed at routine setup from game mode. Its "Setup OptiScaler Mod" action, copied launch options, Manual Mode, and in-plugin removal reduce repeated file and command work.
That convenience adds a layer of dependency. Steam Deck users must accept Decky Loader, the plugin's bundled payload, its supported launch-command model, and its compatibility with later upstream OptiScaler changes. A standalone OptiScaler setup avoids relying on that management layer but requires the user to handle more of the installation and patching process. Neither approach changes the core compatibility limits imposed by the game and GPU runtime.
Maintenance, upgrades, and the BSD-3-Clause metadata
The repository is not archived, and the last push was on 2026-08-01. Version `0.17` was released on 2026-07-26, following `v0.16.3-pre` on 2026-06-26 and `v0.16.1-pre` on 2026-06-23. This is recent development activity, but the prerelease tags also show that some versions are explicitly experimental rather than final.
Upgrading matters because the plugin bundles external graphics components whose runtime and hardware requirements differ. The README identifies OptiScaler 0.9.4 as the final upstream bundle while retaining older compatibility runtimes and separately managed driver-override variants. A user should therefore distinguish a plugin upgrade from a runtime change. The README does not provide an automatic upgrade or downgrade procedure.
The repository is classified on GitHub as using a custom licence that cannot be classified automatically, while `package.json` declares `BSD-3-Clause`. Those statements should not be treated as interchangeable. Anyone considering redistribution or modification needs to inspect the actual `LICENSE` file and bundled component terms separately. The README identifies upstream projects and OptiScaler versions, but it does not summarize the legal conditions of every included binary.
Editorial conclusion
Adopt Decky-Framegen if you use a compatible DirectX 12 handheld and want repeatable OptiScaler management from Steam Deck game mode. Do not choose it for unsupported rendering paths, experimental games without frame generation hooks, or users who need a fully automated compatibility guarantee. Before changing a primary game installation, verify the exact OptiScaler runtime, selected upscaler, frame generation path, and visible FSR watermark, then confirm that the copied patch or wrapper removal command works.
Frequently asked questions
How do I install Decky-Framegen on Steam Deck?
Download the plugin archive and use Decky Loader's "install from zip" option in developer settings. Then open the plugin and select "Setup OptiScaler Mod".
How do I remove Decky-Framegen from a game?
Use the in-plugin unpatch button for the standard direct patch flow. For wrapper mode, copy the unpatch command, replace the launch option with `~/fgmod/fgmod-uninstaller.sh %command%`, and run the game at least once.
Can Decky-Framegen add frame generation to every game?
No. Games with a DLSS frame generation pathway use the bundled DLSSG-to-FSR3 approach, while OptiFG support for games without that pathway is described as highly experimental.
How do I verify which FSR4 runtime is active?
Enable `FSR_Fsr4EnableWatermark=true` and check whether the watermark reports `FSR4`, `FSR4-i8`, or `FSR3`. The README notes that FSR4 can fall back internally to FSR3 on unsupported hardware.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/xxjsonderuloxx-decky-framegen)Was this useful?