Linux has no single wallpaper engine, but the parser and renderer work identically — you just need a way to pin a browser window behind your desktop. Pick the path that matches your desktop environment.
- Node.js (v18+)
- One of the wallpaper host options below
git clone https://github.com/willytop8/obsidian-live-wallpaper.git
cd obsidian-live-wallpaper
npm install
cp config.example.json config.jsonEdit config.json and set vaultPath to your Obsidian vault:
{
"vaultPath": "/home/you/Documents/MyVault",
"accent": "#7c5cff",
"refreshMs": 5000
}npm startKeep this terminal open (or run it as a background service — see below).
KDE Plasma can use a web page as a wallpaper with no extra software.
- Right-click your desktop → Configure Desktop and Wallpaper.
- Set Wallpaper Type to Web Page.
- Paste
http://127.0.0.1:3000as the URL.
That's it — KDE handles the rest.
Hidamari is a video/web wallpaper app for GNOME.
- Install from Flathub:
flatpak install flathub io.github.jeffshee.Hidamari
- Open Hidamari → Web Page mode → paste
http://127.0.0.1:3000. - Hidamari will render the page behind your GNOME desktop.
xwinwrap pins any window behind all others on X11. Works with i3, bspwm, awesome, or any X11-based setup.
- Build xwinwrap:
sudo apt install xorg-dev build-essential # Debian/Ubuntu git clone https://github.com/ujjwal96/xwinwrap.git cd xwinwrap && make && sudo make install
- Launch with a browser:
Replace
xwinwrap -fs -fdt -ni -b -nf -un -o 1.0 -- \ firefox --kiosk http://127.0.0.1:3000 &firefoxwithchromium-browserorgoogle-chromeif preferred. The flags:-fsfullscreen,-bbelow all windows,-nino input.
Note: xwinwrap is X11-only. On Wayland compositors (Sway, Hyprland) there's no drop-in equivalent for web wallpapers yet — check your compositor's layer-shell wallpaper docs, or run a nested X11 session via Xwayland to use xwinwrap.
Save this as ~/.config/systemd/user/vault-wallpaper.service:
[Unit]
Description=Obsidian Live Wallpaper parser
After=graphical-session.target
[Service]
Type=simple
WorkingDirectory=/home/you/path/to/obsidian-live-wallpaper
ExecStart=/usr/bin/node parser.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.targetThen enable it:
systemctl --user daemon-reload
systemctl --user enable --now vault-wallpaperCheck status with systemctl --user status vault-wallpaper.
Finding your node path: run which node and use the full path in ExecStart if /usr/bin/node doesn't work (e.g. nvm users might need /home/you/.nvm/versions/node/vXX.X.X/bin/node).
npm install -g pm2
pm2 start parser.js --name vault-wallpaper
pm2 save
pm2 startupFollow the instructions pm2 prints to complete the startup hook.
- Blank wallpaper: check that
graph.jsonexists in the project folder. If not, the parser isn't running orvaultPathis wrong. - Browser window covers desktop icons: make sure your wallpaper host is pinning the window below all others. With xwinwrap, the
-bflag handles this. - Nodes not updating: edit a note in Obsidian and check the parser terminal for output like
graph: 42 nodes, 87 links. - Wayland issues: xwinwrap doesn't work on Wayland. Use KDE's native web wallpaper, Hidamari for GNOME, or check your compositor's docs for layer-shell wallpaper support.
- Performance: if your vault is 2000+ notes, increase
refreshMsto 10000 inconfig.json.