Josh Medeski372 downloadsDynamically change your Obsidian background with wallpapers that adapt to what you're doing.
Set per-note background wallpapers in Obsidian using frontmatter properties. Wallpapers can be inherited from linked notes, browsed in a gallery, or randomized from any combination of inheritance tiers.
wallpaper frontmatter property linking to an image in your vaultwallpapers list instead and the plugin picks one at random each time you open the note — the pick then holds steady while you work in itDesktop-only. This plugin uses Node.js
fsAPIs, which are not available on Obsidian Mobile.Requires Obsidian 1.13.0+. The settings tab uses Obsidian's declarative settings API.
All commands are available from the Command Palette (Cmd/Ctrl + P).
wallpapers list, the wallpaper is appended to that pool instead (writing the singular property would have no effect, since the list takes priority).wallpapers pool..cache directory.A note can name one wallpaper with the wallpaper property, or offer a pool with the wallpapers list property:
---
wallpaper: "[[sunset.jpg]]"
wallpapers:
- "[[sunset.jpg]]"
- "[[canyon.jpg]]"
- "[[fog.jpg]]"
---
When a note has a non-empty wallpapers list, the plugin picks one entry at random and ignores that note's singular wallpaper property. The pick is re-rolled when you switch to the note — tab away and back and you may land on a different one — but it stays put while the note is active, so editing the note doesn't shuffle the background out from under you. The held wallpaper is kept as long as it's still in the pool; change the pool so it no longer qualifies and the next resolution draws again. Refresh Wallpaper forces a re-roll on demand. A note with only wallpaper behaves exactly as before.
Entries that don't resolve to an image in the vault are skipped rather than counted as a pick, so one typo'd link can't leave you with a blank background some of the time. If a note's list is empty or nothing in it resolves, resolution falls through to its wallpaper property and then on down the inheritance chain below.
Both property names are configurable in Settings, and the list property is honored at every inheritance tier — if [[Concerts]] defines a wallpapers list, every note inheriting from it gets a random pick from that pool.
A note doesn't have to set its own wallpaper. When the active note has no direct wallpaper frontmatter property, the plugin resolves one by following the note's links — so a wallpaper set on one note can cascade to everything connected to it.
The plugin walks these tiers in order and applies the first wallpaper it finds (first match wins):
areas: list).Links under the wallpaper properties themselves are not followed as inheritance sources — they point at images, not at notes.
Tiers 2–5 can each be toggled off in Settings. A backlink of a backlink (transitive backlinks) is not followed — only direct backlinks of the active note are checked.
The related set is the full collection of wallpapers reachable through every enabled tier above, deduplicated by resolved file path. Two commands operate on it:
View Related Wallpapers opens a modal listing every wallpaper in the set, grouped by the tier that produced it. Each card shows a thumbnail, the source note's name, and its tier. Click a card to apply that wallpaper; click the small ↗ source-name link to open the source note in a new leaf instead. Tiers with no wallpapers are hidden.
Every entry of a wallpapers list is expanded into its own member of the set: a note contributing three wallpapers shows three cards, and counts as three candidates in the random draw (so it carries three times the weight of a note offering one).
Pick Random Related Wallpaper applies a random wallpaper from this same set, skipping the one already on screen. Unlike Pick Random Wallpaper (which draws from the whole Wallpapers Directory), it never picks anything outside the related set.
| Setting | Default | Description |
|---|---|---|
| Wallpaper Property | wallpaper |
Frontmatter property name used to specify a single wallpaper |
| Wallpapers Property | wallpapers |
Frontmatter property name holding a list of wallpapers; one entry is picked at random when the note is activated, then held while you work in it. Takes priority over Wallpaper Property |
| Wallpapers Directory | / |
Vault folder containing wallpaper images |
| Keep existing wallpaper | true |
Retain the wallpaper when navigating to a note without one |
| Inheritance Property | (empty) | Specific frontmatter property whose outlinks are checked for wallpapers (priority 2) |
| Inherit from all frontmatter links | true |
Check every frontmatter outlink for a wallpaper (priority 3) |
| Inherit from body links | true |
Check inline body links for a wallpaper — last link checked first (priority 4) |
| Inherit from backlinks | true |
Check notes that link TO the active note for a wallpaper (priority 5, lowest) |
| Overlay Opacity (Light Mode) | 0.8 |
Overlay opacity in light mode (0-1) |
| Overlay Opacity (Dark Mode) | 0.6 |
Overlay opacity in dark mode (0-1) |
For how the inheritance settings interact, see Related wallpapers & inheritance above.
The wallpaper picker, related-wallpapers modal, thumbnail cache, and random-pick commands only recognize: png, jpg, jpeg, webp, gif, bmp, and svg. Files with other extensions are silently skipped.
This plugin accesses the filesystem beyond what Obsidian's standard vault APIs provide:
.cache directory inside the plugin's own folder (<vault>/.obsidian/plugins/dynamic-wallpapers-plugin/.cache/) to store generated wallpaper thumbnails (480×270 cropped JPEGs). Thumbnails are generated from the original images via the browser's built-in canvas + createImageBitmap APIs — no external binary is required. No files outside the vault are created.fs APIs - Used for reading/writing thumbnail cache files. All file operations stay within the vault directory.See CONTRIBUTING.md for how to set up a local dev environment, including symlinking the build/ output into your vault and using the Hot-Reload plugin for fast iteration.
See AGENTS.md for project conventions and style guidelines.