Project Overview
Lively Wallpaper is a free, open-source Windows application that turns videos, GIFs, web pages, and shaders into animated desktop wallpapers and screensavers. The UI is built on WinUI 3, and the app targets modern Windows 10 and Windows 11 desktops. You install it, pick or import a wallpaper, and your static desktop background becomes live content while your icons and desktop interactions keep working.
Use it for exactly what it says: animated wallpapers and screensavers on Windows. If you want a video loop behind your icons, an audio-reactive visualizer, or an HTML page rendered as your desktop background, Lively does that without a license fee. If you need macOS or Linux support, stop here — Lively is Windows-only, and that is a hard boundary, not a roadmap item you should bet on.
The project is mature and widely starred, with official distribution through the Lively website, the Microsoft Store, and winget. That matters: you are not sideloading a hobby binary, you are installing a packaged app with a real release channel.
Key Challenges Addressed
Animated wallpapers sound trivial until you try to build one. Lively targets the specific problems that make naive implementations fall over:
- Rendering behind the desktop without breaking it. Windows has no public "animated wallpaper" API. Lively attaches wallpaper render surfaces to the desktop's own layer, so icons stay on top, clicks still hit the desktop, and the wallpaper sits where a wallpaper belongs instead of floating as a borderless window that steals focus.
- Performance cost of always-on rendering. Decoding video 24/7 burns CPU, GPU, and battery. Lively ships playback rules that pause or kill wallpaper rendering when a fullscreen application is focused, when you are on battery, or when you are in a remote desktop session.
- Format fragmentation. Video loops, GIFs, web pages, and shader demos each need a different rendering engine. Lively unifies them: one library UI, one set of playback rules, multiple render backends under the hood.
- Screensavers being stuck in 2003. Windows screensavers are still
.scrfiles. Lively lets you reuse any wallpaper from your library as a screensaver, so you skip that legacy pipeline entirely.
Getting Started
Install from the Microsoft Store, the GitHub releases installer, or winget:
winget install rocksdanister.LivelyWallpaper
First useful workflow: launch Lively, pick one of the bundled wallpapers in the library and click it — your desktop is now animated. To use your own content, drag a video file, GIF, or URL onto the Lively window and it gets added to your library. Right-click a library item to set it per-monitor, customize it, or remove it.
Sharp edges you will hit immediately:
- Web and HTML wallpapers render through Microsoft Edge WebView2. If the WebView2 runtime is missing or broken, web wallpapers render as a blank surface while video wallpapers work fine. Install the WebView2 Evergreen runtime first, then retry.
- The default playback rules pause the wallpaper when a fullscreen app has focus. The wallpaper looks frozen the moment you alt-tab out of a game — that is the pause rule, not a bug. Check the performance settings before you go hunting for a crash.
- On multi-monitor setups, a single video stretched across displays means you selected span placement. If it looks distorted, switch to per-display placement and assign a wallpaper to each monitor instead.
Features and Use Cases
Video and GIF wallpapers. The bread-and-butter use case. Drop in a video loop and Lively plays it behind your icons. This is the cheapest path to a live desktop and the easiest to keep performant.
Web pages as wallpapers. Lively renders HTML/CSS/JavaScript as a wallpaper surface. That is the escape hatch for anything dynamic: audio-reactive visualizers, clocks, animated canvases, custom dashboards. If you can build it as a web page, you can run it as your desktop.
Shader wallpapers. GPU shader demos run as wallpapers, which gets you procedural animated backgrounds without shipping video files at all.
Applications and games as wallpaper. Lively can host running applications as the desktop background. Treat this as the power-user lane: it is the most resource-hungry mode and the easiest way to make your desktop feel sluggish if you point it at something heavy.
Screensaver mode. Any wallpaper in your library can double as your screensaver, so one library serves both purposes.
Playback rules. Per-condition pause behavior — fullscreen applications, battery power, remote sessions. This is the feature that makes animated wallpapers viable on a work laptop instead of a desk ornament for desktops only.
Command-line control. Lively exposes a documented command-line interface, so you can script wallpaper changes — rotate wallpapers on a schedule, switch by time of day, or wire it into your own automation.
Ecosystem and Dependencies
Lively stands on well-known engines rather than reinventing rendering:
- mpv handles video playback. You inherit mpv's codec breadth and hardware-decode support, which is why obscure video formats mostly just work.
- Microsoft Edge WebView2 renders web wallpapers. You get a current Chromium engine, but every active web wallpaper is a real browser surface with browser-level memory cost.
- WinUI 3 (Windows App SDK) drives the UI, which is why the app looks native on Windows 11 and why older Windows versions are out of scope.
The practical consequence: wallpaper compatibility problems are usually upstream problems. A video that fails in Lively will usually fail in mpv too, and a web wallpaper that leaks memory will leak in Edge. Debug at that layer, not in Lively's settings.
Architectural Overview
Lively splits into a WinUI 3 front end and wallpaper host processes. The UI manages your library, settings, and playback rules; the actual wallpapers run in separate processes whose render output is attached to the desktop's wallpaper layer.
That process isolation is the design decision that matters most for you. A crashing web wallpaper takes down its own process, not your desktop session and not the Lively UI. It also means each wallpaper's resource use is visible and attributable in Task Manager — when something eats RAM, you can see exactly which wallpaper did it.
The playback-rule engine watches foreground windows and power state, then pauses or resumes the wallpaper processes. Because pausing stops the render loop rather than hiding the window, a paused Lively wallpaper costs close to nothing — which is what makes the fullscreen and battery rules genuinely effective instead of cosmetic.
Pros and Cons
Pros:
- Free and open source — the obvious comparison is the commercial Wallpaper Engine on Steam, and Lively covers the core use cases without the purchase.
- Broad format support in one tool: video, GIF, web, shaders, and hosted apps.
- Playback rules make it usable on laptops and gaming machines, not just idle desktops.
- Process-isolated wallpapers keep failures contained and resource use visible.
- Real distribution channels: Microsoft Store, winget, and signed releases.
Cons:
- Windows-only, and WinUI 3 restricts it to modern Windows 10/11. No macOS, no Linux, ever in the current architecture.
- Web wallpapers carry full browser memory cost per active monitor. A multi-monitor setup running three web wallpapers is three WebView2 surfaces.
- The community wallpaper library is small compared to Wallpaper Engine's Steam Workshop. You will import or build more of your own content.
- Hosted-application wallpapers can be heavy, and there is no sandboxing beyond process separation — only run content you trust.
Comparison and Alternatives
GitHub stars
Weekly star gains
Full metrics details
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
Lively
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
149 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
153 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Issues opened
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Lively
GitHub API observation. Historical values render only when the source provides a real observation for that day.
151 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub API observation. Historical values render only when the source provides a real observation for that day.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub API observation. Historical values render only when the source provides a real observation for that day.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Issues closed
Weekly total
Full metrics details
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
Lively
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
151 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests opened
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Lively
GitHub API observation. Historical values render only when the source provides a real observation for that day.
151 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub API observation. Historical values render only when the source provides a real observation for that day.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub API observation. Historical values render only when the source provides a real observation for that day.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests closed
Weekly total
Full metrics details
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
Lively
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
151 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests merged
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Lively
GitHub API observation. Historical values render only when the source provides a real observation for that day.
151 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub API observation. Historical values render only when the source provides a real observation for that day.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub API observation. Historical values render only when the source provides a real observation for that day.
142 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Open/closed pull request ratio
Weekly average
Full metrics details
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
Lively
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
149 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
153 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Open/closed issues ratio
Weekly average
Full metrics details
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
Lively
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
149 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
153 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Releases
Weekly total
Full metrics details
GitHub release published_at events bucketed by UTC day; drafts are excluded.
Lively
GitHub release published_at events bucketed by UTC day; drafts are excluded.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
ScreenPlay
GitHub release published_at events bucketed by UTC day; drafts are excluded.
149 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
hidamari
GitHub release published_at events bucketed by UTC day; drafts are excluded.
153 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Hotness score
Weekly average
Full metrics details
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
Lively
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
ScreenPlay
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
149 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
hidamari
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
153 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Reliability score
Weekly average
Full metrics details
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
Lively
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
ScreenPlay
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
149 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
hidamari
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
153 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
The strongest commercial competitor is Wallpaper Engine, which is closed source and sold on Steam — if you want its Workshop content library, no open-source tool matches it. Among open-source options, ScreenPlay is the closest match: a Qt-based live wallpaper app with cross-platform ambitions covering video, web, and scene wallpapers. On Linux, komorebi provides animated and parallax desktop backgrounds for GNOME-family desktops, and hidamari focuses on video wallpapers for Wayland and X11. If you want minimal instead of full-featured, weebp is a tiny C utility that pins a video player to the Windows desktop and nothing more. On macOS, Plash takes the web-page-as-wallpaper idea and makes it the entire product.
| Project | Repo | Hotness (~6mo) | PRs merged (~6mo) | Star growth (~6mo) |
|---|---|---|---|---|
| Lively | https://github.com/rocksdanister/lively | 4.36 | 0 | 7965 |
| ScreenPlay | https://github.com/kelteseth/ScreenPlay | metrics pending | 0 | metrics pending |
| komorebi | https://github.com/cheesecakeufo/komorebi | metrics pending | 0 | metrics pending |
| hidamari | https://github.com/jeffshee/hidamari | metrics pending | 0 | metrics pending |
| weebp | https://github.com/Francesco149/weebp | metrics pending | 0 | metrics pending |
| Plash | https://github.com/sindresorhus/Plash | metrics pending | 0 | metrics pending |
The best overall alternative is ScreenPlay: it is the only open-source option in this set that matches Lively's multi-format scope (video, web, scenes) while targeting more than one operating system, and it has sustained maintenance behind it.
Conclusion
If you run Windows and want animated wallpapers without buying Wallpaper Engine, install Lively — it covers video, web, and shader wallpapers with playback rules that keep your laptop battery and game frame rates intact. Start at the official Lively site for downloads and documentation. I recommend it as the default open-source choice on Windows.
Do not disable the fullscreen pause rule in Lively's performance settings on a gaming machine — with it off, Lively keeps decoding video behind your game and you pay for it in dropped frames. Do this first: run winget install rocksdanister.LivelyWallpaper, drag one short video loop onto the Lively window, and confirm the wallpaper pauses when you launch a fullscreen app before you build out a multi-monitor setup.
