[Media] Wallr - a native Wayland wallpaper engine I've been building for a few months (Rust, wgpu, wlr-layer-shell)

280 points Klutzy_Bird_7802 13 comments
[Media] Wallr - a native Wayland wallpaper engine I've been building for a few months (Rust, wgpu, wlr-layer-shell)

I published this to GitHub a few days ago, so the commit history will look recent even though this has been in progress for a few months. Wanted to mention that in case it looks odd.

Wallr draws its own layer-shell surface and renders transitions itself with wgpu. It's not a wrapper around swww or hyprpaper, the point of the project was to own the rendering path so transitions are GPU-driven and timed to wall clock duration instead of tied to refresh rate.

What it does:

  • 11 transition effects (fade, blur, directional reveal, slide, zoom, pixelate, ripple, dissolve, wave, grow, outer), each configurable from the CLI or a YAML package
  • GIF wallpapers, decoded once and cached instead of re-decoded every loop
  • Video wallpapers (MP4, WebM, MKV) with hardware-accelerated decoding through FFmpeg
  • IPC controls for video wallpapers: pause, resume, seek, info
  • Five scaling modes: fill, fit, stretch, center, tile
  • A background daemon over a Unix socket, so wallr set talks to it instead of relaunching anything
  • Directory watching, per-monitor scaling modes, and a preview window to test an effect before applying it
  • Automatic GPU selection on hybrid graphics systems
  • Optional theme generation hookup (Matugen, Wallust, Pywal), not required to use the tool

Works on Hyprland, Sway, niri, and Plasma 6. GNOME isn't supported since Mutter doesn't implement wlr-layer-shell. Video wallpapers need FFmpeg dev libraries at build time.

Install is cargo install wallr, or build from source. Repo and docs are here: https://github.com/programmersd21/wallr

Happy to answer questions about the renderer, the video pipeline, or the animation package format.