| Crates.io | gpuburden |
| lib.rs | gpuburden |
| version | 0.1.0 |
| created_at | 2026-01-22 19:01:17.241141+00 |
| updated_at | 2026-01-22 19:01:17.241141+00 |
| description | Shader-based wallpapers for Wayland, burdening your GPU with fancy animations. |
| homepage | |
| repository | https://github.com/SamPertWasTaken/GPUBurden |
| max_upload_size | |
| id | 2062384 |
| size | 104,032 |
A wayland wallpaper daemon that lets you run WGSL shader code as your wallpaper, burdening your GPU with fancy animations.
https://github.com/user-attachments/assets/c9961067-5838-4748-8660-1d55ff539457
Clone the repo and install via cargo install --path .
Run the gpuburden binary like you would any other wallpaper daemon. For example with my compositor Hyprland;
exec-once=~/.cargo/bin/gpuburden
Without any configuration, gpuburden will target all monitors with a default built-in shader that looks like this;
To configure it manually, create the file ~/.config/gpuburden/gpuburden.toml. Create the gpuburden folder if it doesn't exist.
The file has a single array called monitors that takes in an array of objects that have the name of the target monitor, as well as the shader to run.
monitors = [
{
name = "DP-2",
shader = "distorted-noise.wgsl"
},
{
name = "HDMI-A-1",
shader = "distorted-noise.wgsl"
},
]
You can get the names of all your monitors via xrandr --listmonitors.
From there, you simply need to create your wgsl shader and place it inside of that same ~/.config/gpuburden folder.
All shaders receive a FragmentInput struct at group 0 binding 0, that looks like this;
struct FragmentInput {
screen_size: vec2<u32>,
frame: u32,
seed: u32
};
@group(0) @binding(0) var<uniform> fragment_input: FragmentInput;
screen_size is the x and y size of the monitor, frame is the current frame number and seed is a random number between 0 and 1,000,000.
Some example shaders, including the default shader, can be found in examples. Feel free to copy them and use them.