A Decky Loader plugin that installs and configures OptiScaler per game from Game Mode (SteamOS, Bazzite, whatever you run). Frame generation, upscaler overrides and the rest of OptiScaler's settings, with a gamepad. The ones OptiScaler can change on the fly apply to the running game; the rest say plainly that they take effect on the next launch.
OptiScaler v0.9.4 is bundled, so installing works offline and every game gets the same build.
Unofficial. I am an independent developer with no connection to the OptiScaler project. This plugin is not made, endorsed or supported by them — it bundles their release and drives it from the Steam Deck UI. Please report problems with the plugin here, not to the OptiScaler maintainers.
- Finds your games and the folder to install into. Steam libraries from
libraryfolders.vdfincluding the SD card, non-Steam shortcuts, and any folder you add as a custom library. OptiScaler has to sit next to the executable that creates the D3D device, so the plugin scores the candidates (Unreal'sBinaries/Win64, Cyberpunk'sbin/x64) and lets you override its pick. - Sets the game up from the wiki, online or not. Your game is matched against the OptiScaler Compatibility List, with a search box to pin the right entry. A copy of the list ships with the plugin and the last download is cached, so answers come from disk at once and the refresh runs behind them. Setup is then a checklist — install the DLL under the filename the entry names, write the launch options, apply the settings it lists — and every line says which wiki field it came from before anything is written. Anything the plugin couldn't place is shown to you rather than guessed at, including the games that need REFramework installed first.
- Basic or Advanced settings. Basic is a handful of controls (frame generation on/off, which
generator, 2X/3X/4X, which upscaler), each driving several INI keys at once. Advanced gives
you all 288 settings across 34 sections, generated from the comments in
OptiScaler.iniso they match the shipped build. Edits keep every comment in the file, and names are the overlay's own. - Changes settings while you play. A bundled ASI plugin applies frame generation, the FidelityFX FG version, the upscaler and the FSR version immediately from the Quick Access panel — next to what the game actually ended up running and, with frame generation on, both frame rates. See Live in-game control.
- Doesn't lose your files, or your launch options. Anything an install would overwrite is
moved into
decky_optiscaler_backup_files/and put back on uninstall. The launch options the game had beforehand are kept the same way, so removing OptiScaler can offer to restore them rather than clearing a field it never owned. - Odds and ends.
OptiScaler.logis parsed for the backend that got created, the GPU and the Proton version. OptiPatcher is bundled. An OptiScaler Settings entry is added to the game's Steam library context menu.
Over the running game: what it renders, what reaches the screen, and the exact FSR version it ended up with — above the controls that change them.
Grab Decky-OptiScaler-v*.zip from the
latest release, then either:
- In Game Mode, open Decky's settings, turn on Developer mode, and use Install Plugin from URL with the zip's download link; or
- unpack the zip into
~/homebrew/plugins/and restart Decky Loader.
Every release bundles OptiScaler itself, so there is nothing else to download. See the changelog for what changed.
OptiScaler reads its INI once, at startup — no file watcher, no IPC — and its overlay gets away with live changes only because it is the game process. So the plugin ships a small ASI plugin that OptiScaler loads into the game and that makes the same writes the overlay makes. That is what lets the Quick Access panel change, mid-game:
- Frame generation —
Config::FGEnabled, read every frame. - Upscaler — the backend id into
State::newBackend, then every entry ofState::changeBackendmarked. The overlay's "Change Upscaler" in full. - FidelityFX FG version —
Config::FfxFGIndex, thenState::FGchangedandState::SCchanged, so the generator's context is destroyed and rebuilt on the new index. The versions offered are the ones the SDK reported to that game. - FSR version —
Config::FfxUpscalerIndexplus the same feature rebuild. One backend id covers every FSR from 2.3.4 to 4.1.1, so the exact version comes from the list the running game reported — the same one its overlay names in the title bar.
It also reads out both frame rates: what the game renders next to what reaches the screen, and says when the generator is switched on but not actually inserting frames.
Proton loads its own dxgi.dll unless you tell it not to, so the proxy needs an override:
WINEDLLOVERRIDES="dxgi=n,b" %command%
Setup shows the exact string for the filename you picked and can write it for you.
OptiScaler.asi installs don't need it.
Whatever Steam was passing beforehand is recorded next to the install, so removing OptiScaler asks what to do with the field: restore exactly what was there, remove only the OptiScaler override, or leave it alone. The answer can be remembered; Settings on the main page lists remembered answers and takes them back.
- Decky Loader
- One of
7z,7zz,7za,7zrorbsdtarto unpack the bundled release. SteamOS has both p7zip and bsdtar. It runs once, on first install.
pnpm install
python3 scripts/generate_schema.py # option metadata, from the reference INI
python3 scripts/fetch_compat_seed.py # refresh the bundled compatibility list
./asi/build.sh # live-control ASI -> bin/ (needs zig)
pnpm build
python3 scripts/package.py # -> out/Decky OptiScaler.zipasi/build.sh cross-compiles a Windows x64 DLL with zig cc, so you don't need MSVC or a
Windows machine; brew install zig is the only prerequisite. Packaging without the ASI works
fine, live control just reports itself as unavailable.
Tests:
python3 scripts/selftest.py # backend, against a synthetic library
HARNESS=run.tsx node testharness/build-and-run.mjs # renders the UI headlessly
HARNESS=all-options.tsx node testharness/build-and-run.mjsThis plugin is free and open source, and it will stay that way. If it got a game running better on your Deck and you feel like saying thanks, you can buy me a coffee — it is genuinely appreciated and it keeps the updates coming ☕
This is an unofficial, independently developed plugin. It is not affiliated with, endorsed by or supported by the OptiScaler project or any of the projects below; all it does is package and drive their work.
- OptiScaler and its wiki contributors.
- Decky Framegen — reference for how OptiScaler is deployed into a game folder on Linux.
- Decky LSFG-VK — reference for the configuration-driven plugin UI.
This plugin was built with heavy use of AI: Claude Opus 5 was the model mainly used for its development. Every design decision, review and manual testing runs were mine, and everything here has been run on an Xbox Ally X running Bazzite.




