Skip to content

Boux/vkBasalt_overlay

 
 

Repository files navigation

Fork Notice

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.


vkBasalt Overlay

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

Click to view screenshots Screenshot_20251231_184224 Screenshot_20251231_183856 Screenshot_20251231_183700

Bugs and Jank

  • 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.

Features

Upstream requires editing config files and restarting. This fork adds:

  • In-game overlay (End key) with dockable windows
  • Add/remove/reorder effects without restart
  • Parameter sliders for all types (float, int, bool, vectors)
  • Preprocessor definitions - edit #define values 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

ReShade Support

Try downloading shaders from these sources

Feature wishlist

  • Effect injection without affecting game UI/HUD
  • Native wayland support (for PROTON_ENABLE_WAYLAND=1 and 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

Installation

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 install

Usage

Test with vkgears

ENABLE_VKBASALT=1 vkgears

Steam

Add to launch options:

ENABLE_VKBASALT=1 %command%

Lutris

  1. Right-click game → Configure
  2. System options → Environment variables
  3. Add ENABLE_VKBASALT = 1

Why can't this fork coexist with original vkBasalt?

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 (vs libvkbasalt.so)
  • Layer JSON: vkBasalt-overlay.json (vs vkBasalt.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

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 Bindings

Key Default Description
Toggle Effects Home Enable/disable all effects
Reload Config F10 Reload configuration file
Toggle Overlay End Show/hide the overlay GUI

Settings File

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 changes

ReShade shader and texture paths are managed through the Shader Manager tab in the overlay.

Saved Configs

Save named configurations through the overlay GUI. They are stored in ~/.config/vkBasalt-overlay/configs/. You can set any saved config as the default.

Known Limitations

  • 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

Credits

About

A vulkan post processing layer for linux with an in-game overlay GUI

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • C++ 92.5%
  • C 6.9%
  • Other 0.6%