This is a fork of vkBasalt with an experimental ImGui overlay for in-game effect configuration. Most of this fork was written with vibe-coding. I won't even pretend to own any of this code as I am not a C++ or Vulkan dev. I'm a webdev, I do CSS and I enjoy it. My monkey brain is too small for this low level stuff. I wanted these features in vkBasalt since forever so I just asked the AI to do it for me.
If you want to request features, feel free to do so, it's still pretty incomplete, and kind of buggy, it may or may not crash or freeze some games. Adding one of those CRT-Guest shaders to a game that already caps-out your GPU to 100% WILL freeze your game and you WILL need to switch to a different TTY to kill the process. Just a heads-up.
A Vulkan post-processing layer with an in-game GUI for real-time effect configuration.
Feature showcase (slightly outdated): https://www.youtube.com/watch?v=_KJTToAynr0
- Mouse input can be weird in some games (especially first person shooters or games that hide your cursor). It will sometimes lock the cursor to the middle of the screen and you have to pause the game or open a menu to be able to use the mouse. Also be careful not to accidentally click things behind the overlay! I am not sure how to fix this issue, there is a really bad workaround that you can enable in the settings where it just force-grabs the cursor with X11 calls, but it's janky as hell. If anybody got any ideas I'm listening.
- Don't enable a bunch of GPU intensive shaders all at once when your GPU is already running at 100% usage. ImGui will freak the fuck out and vertex explode on your ass for about 2 seconds until your entire system hard-crashes.
Upstream requires editing config files and restarting. This fork adds:
- In-game overlay (
Endkey) with dockable windows - Add/remove/reorder effects without restart
- Parameter sliders for all types (float, int, bool, vectors)
- Preprocessor definitions - edit
#definevalues directly - Multiple effect instances - use the same effect multiple times (e.g., cas.1, cas.2)
- Save/load named configs
- Shader manager - browse and test ReShade shaders
- Diagnostics - FPS, frame time, GPU/VRAM usage (AMD)
- Debug window - effect state, log viewer, error display
- Auto-apply - changes apply after configurable delay
- Up to 200 effects with VRAM estimates
- Graceful error handling - failed effects show errors instead of crashing
Try downloading shaders from these sources
- https://github.com/crosire/reshade-shaders
- https://github.com/HelelSingh/CRT-Guest-ReShade
- https://github.com/kevinlekiller/reshade-steam-proton
- Effect injection without affecting game UI/HUD
- Native wayland support (for
PROTON_ENABLE_WAYLAND=1and just native linux games under wayland) - Per-game profiles instead of just have one global default config
- Fixing input grabbing to prevent click-throughs when the overlay is visible
- Reshade preset importation
Warning! You must uninstall the original vkBasalt before installing this fork. Both use the same ENABLE_VKBASALT environment variable and cannot coexist (see why).
AUR
yay -S vkbasalt-overlay-git
From source
git clone https://github.com/Boux/vkBasalt_overlay.git
cd vkBasalt_overlay
meson setup --buildtype=release --prefix=/usr build-release
sudo ninja -C build-release installENABLE_VKBASALT=1 vkgearsAdd to launch options:
ENABLE_VKBASALT=1 %command%
- Right-click game → Configure
- System options → Environment variables
- Add
ENABLE_VKBASALT=1
This fork cannot be installed alongside the original vkBasalt because both must use the same ENABLE_VKBASALT environment variable. Gamescope and other Vulkan compositors filter known layer environment variables to prevent layers from loading twice (on both the compositor and nested apps). Using a different env var name would break this filtering, causing the overlay and all active effects to render twice when using gamescope.
The library and layer names are still different to avoid file conflicts:
- Library:
libvkbasalt-overlay.so(vslibvkbasalt.so) - Layer JSON:
vkBasalt-overlay.json(vsvkBasalt.json)
In theory, you could still change the env var to anything you want in /usr/share/vulkan/implicit_layer.d/vkBasalt-overlay.json, but only do that if you are never gonna use gamescope.
Configuration is stored in ~/.config/vkBasalt-overlay/. All required config files and subfolders will be generated when vkBasalt_overlay is executed at least once. Note that configs from the original vkBasalt are not compatible with this fork, which is why I've changed the name of the config folder.
| Key | Default | Description |
|---|---|---|
| Toggle Effects | Home |
Enable/disable all effects |
| Reload Config | F10 |
Reload configuration file |
| Toggle Overlay | End |
Show/hide the overlay GUI |
The main settings are stored in ~/.config/vkBasalt-overlay/vkBasalt.conf:
# Maximum effects (requires restart, 1-200)
# Higher values use more VRAM (~8 bytes × width × height per slot)
maxEffects = 10
# Key bindings
toggleKey = Home
reloadKey = F10
overlayKey = End
# Startup behavior
enableOnLaunch = true
depthCapture = false
# Overlay options
overlayBlockInput = false
autoApplyDelay = 200 # ms delay before auto-applying changesReShade shader and texture paths are managed through the Shader Manager tab in the overlay.
Save named configurations through the overlay GUI. They are stored in ~/.config/vkBasalt-overlay/configs/. You can set any saved config as the default.
- X11 only for keyboard input (Wayland not fully supported)
- Some ReShade shaders with multiple techniques may not work
- Depth buffer access is experimental
- Input blocking feature may cause freezes in some games
- Original vkBasalt by @DadSchoorse
- ReShade shader compiler by @crosire
- ImGui by @ocornut


