otter-wallpaper draws backgrounds on the Wayland background layer via zwlr_layer_shell_v1. Each image is decoded to an SHM buffer, then freed to keep memory use low.
Usage
Configuration
Config file:~/.config/otter-shell/otter-wallpaper.conf
Per-display overrides use
display_0_name, display_0_path, through display_7_*.
Lockscreen integration
On wallpaper change,otter-wallpaper writes the current path per output to:
output_name=path line per output. otter-lock reads this file for the lock screen background. otter-theme-gen uses the same state to build wallpaper-reactive themes.
Niri overview
Withoverview_enabled = true, a blurred layer surface is created with namespace otter-wallpaper-overview. Add to your Niri config:

