chacha26024 downloadsAnimated wallpapers behind your workspace: images, videos, web pages and built-in effects, with slideshow, dimming, blur and parallax.
Animated wallpapers behind your Obsidian workspace, in the spirit of Wallpaper Engine: images, videos, web pages, built-in effects, and wallpapers you compose or code yourself.
Network use. Scenery itself makes no network requests. Web-page wallpapers and wallpaper packages are HTML pages, and the code in them can reach the internet, like any web page. Only add pages and packages you trust. See Privacy and security.
| Type | What it is |
|---|---|
| Image | png, jpg, gif, webp, avif, svg and more |
| Video | mp4, webm, mov and more. Loops; volume and speed are adjustable |
| Web page | An .html file in your vault, or a URL |
| Effect | Aurora, Starfield, Particles, Snow, Fireflies, Rain. They follow your theme's accent colour |
| Scene | Layers of images, videos, effects, colours and packages that you arrange in an editor, no code needed |
| Package | A wallpaper written in HTML and JavaScript that declares its own settings |
Enable the plugin and the Aurora effect appears. Open Settings → Scenery. The + button at the top of the library adds wallpapers (a vault file, a vault folder, a URL or path) and creates scenes and packages; Use on a row switches to it. Appearance, playback and automatic switching each have their own page below the library. If text becomes hard to read, raise Readability dimming.
Each layer has:
Preview without dimming temporarily hides the readability dimming so you can judge the scene itself.
The export button next to the scene's name (or the command Export scene to a folder) writes the scene to Scenery/<scene name>/ in your vault. Images, videos and packages from the vault are copied into that folder, so you can zip it and share it. URLs and paths outside the vault are recorded as they are, not copied.
To import, put the folder in a vault and choose it with + → Vault folder in the library. It arrives as an ordinary, editable scene.
An imported or exported scene stays linked to its folder: when scenery.json there changes (for example, when the Studio saves into it), the scene in Obsidian is replaced with the new version. Edits made in Obsidian's scene editor since the last export are lost when that happens, so export first if you want to keep them.
The command Scenery: Create wallpaper package creates a working example in Scenery/<name>/.
scenery.json; they appear in the settings automatically.scenery.on("props" | "theme" | "pointer" | "paused" | "note", fn) delivers the values.requestAnimationFrame stops by itself while Obsidian is in the background.The full reference is in docs/authoring.md.
A folder containing a Wallpaper Engine web wallpaper (project.json) can be added with + → Vault folder and is loaded as a package.
project.json (slider, colour, checkbox, combo, text input) appear in the settings and are passed to wallpaperPropertyListener.applyUserProperties. applyGeneralProperties and setPaused are called as well.fetch() or ES modules, or that use file-picker properties, may not work.studio/ holds a small web app for making wallpapers with more room than a sidebar gives you. It draws with the plugin's own rendering code, so what you see is what Obsidian shows.
index.html and scenery.json next to the running page. The settings your package declares appear as controls, and you can switch theme, accent colour and pause to see how the page responds.Scenery folder once and the Studio writes the wallpaper there. After you add that folder in Obsidian with Vault folder, saving again from the Studio updates the wallpaper in Obsidian, for packages and scenes alike.Run it locally:
npm run studio:dev
Then open http://localhost:4173. npm run studio builds a static copy into studio/dist/ that can be hosted anywhere; the Studio workflow publishes it with GitHub Pages.
Everything stays in your browser: the Studio uploads nothing. Limits: in the Studio's preview a package cannot load its own extra files (images, scripts) by relative path, and package layers inside a scene can be kept but not created or configured.
localStorage gets a temporary in-memory stand-in, and nothing is saved.sandbox="allow-scripts"). They cannot read your vault, your notes or the app. They can, however, make network requests like any web page.main.js, manifest.json and styles.css from the latest release.<vault>/.obsidian/plugins/scenery/.npm install
npm run dev
npm test
npm test also checks the Studio. It builds the plugin against a small stand-in for the Obsidian API (test/harness/stub.js) and exercises it in headless Chromium. It checks the plugin's own logic; it does not replace trying a change in Obsidian. The first time, install the browser with npx playwright install chromium.
npm run lint runs eslint-plugin-obsidianmd, the rule set the Obsidian community directory applies to submissions.
To release, bump the version with npm version <new version>, push, then either push a tag equal to that version or run the Release workflow from the Actions tab. The workflow lints, tests, builds, attests the build provenance and publishes the release.
MIT