Music-reactive wallpaper for Wayland

Your wallpaper,
but alive.

Keep your favourite image. Woofer makes it breathe on the bass, ripple on the beat, and drift when it's quiet.

  • 0 % CPU in silence*
  • ~3 % of one core with music
  • 29 MB RAM

Seven ways to wake it up.

Plus drift, heat, bokeh, chrome, ribbon and pulse. All thirteen run live below.

Live, in this tab

Try it right now.

The same shaders the daemon runs, compiled by your browser. Pick an effect, start the beat, drop in your own wallpaper. Nothing leaves your machine.

What it is

A wallpaper that listens.

Measured, not promised

Light enough to forget.

i7-11800H laptop, Intel UHD, 1080p, preset pulse. Method and details.

CPU (% of one core)RAM (RSS)
Silence0.48 % 0 % with --idle-fps 029 MB
Music, 60 fps3.0 %29 MB
Music, 30 fps1.8 %29 MB
Paused0.08 %29 MB

About 12 MB of the RSS are the Vulkan driver and system libraries, which every Vulkan client maps. A raw Vulkan backend to go under 1 % with music is on the roadmap.

Install

Three commands to life.

From source, until packages exist (AUR planned). Needs a Wayland compositor with wlr-layer-shell, PipeWire and a Vulkan driver.

# Arch: sudo pacman -S --needed rust clang pipewire vulkan-icd-loader  (+ your Vulkan driver)
git clone https://github.com/Ybucaille/woofer && cd woofer
cargo install --path daemon --locked
mkdir -p ~/.local/share/woofer && cp -r shaders ~/.local/share/woofer/
woofer --wallpaper ~/Pictures/wall.jpg --preset glitch
woofer ctl preset synthwave     # switch on the fly
woofer ctl intensity 0.6

Autostart, Sway, Caelestia and every flag: README.

Make your own

One file. Your effect.

An effect is a single Shadertoy-style .glsl. The same file runs in the daemon, the Quickshell module and the browser preview. Bass, beat, spectrum and your theme colours come in as uniforms.

Read the shader contract
// @name My Effect
// @description One line shown in the picker

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = fragCoord / iResolution;
    uv += (uv - 0.5) * -0.02 * uBass * uIntensity;
    fragColor = vec4(wall(uv).rgb, 1.0);
}

Made by one person, for the love of it.

Woofer is free and will stay free. If it made your desktop a little nicer and you'd like to say thanks, a coffee keeps the shaders coming. There's also a small premium pack, and commissions if you'd like an effect made for you.

A star, a screenshot or an issue helps just as much.