Skip to content
NAME0x0Public

About

Turn any website, video, image, or WebGL shader into a live Windows wallpaper. Free, open-source C#/.NET 8 + WebView2 desktop app - a free alternative to Wallpaper Engine and Lively.

Topics

Resources

Stars

10 stars

Watchers

1 watching

Forks

Latest commit

 

History

21 Commits

Folders and files

Repository files navigation

WebDesk 🖥️

Turn any website, video, image, or WebGL shader into a live Windows wallpaper. A free, open-source alternative to Wallpaper Engine and Lively — built on C#/.NET 8 + WebView2.

Website CI Release Latest release Downloads .NET Platform License


🚀 Quick start

  1. Download WebDesk.exe from the latest release.
  2. Run it — no installer, fully portable, self-contained (no .NET install required).
  3. Pick a wallpaper from Discover, browse the web for one, or paste a URL.

Closing the window hides WebDesk to the tray. Right-click the tray icon → Exit to quit.

✨ Features

  • Any wallpaper type — live websites, local HTML, video (.mp4/.webm), images, and WebGL shaders.
  • In-app browser + capture — browse Moewalls, MotionBGs, MyLiveWallpapers, 4KWallpapers, Unsplash, Pinterest, X, anywhere — then "Set image/video" or "Set live page" as your wallpaper. Works on any site, no scraping.
  • Discover — a curated, community-updatable catalog plus the Wallhaven provider (keyless search). Submit your own wallpapers straight from the app.
  • Audio-reactive shaders — shader uniforms (iBass/iMid/iTreble/iLevel) driven by your system audio via WASAPI loopback.
  • Per-monitor wallpapers — one wallpaper everywhere, a different one per display, or leave a display untouched (its real wallpaper + icons stay). Renders behind desktop icons (WorkerW).
  • Library & playlists — save/star wallpapers, point at a local folder, and rotate a playlist on a timer (with shuffle).
  • Performance — auto-pause on fullscreen apps or on battery, plus a shader frame-rate cap.
  • Global hotkeys — Ctrl+Alt+→ next · Ctrl+Alt+P pause/resume · Ctrl+Alt+M mute.
  • Polished UI — light/dark theme with an accent color, tray recents, run-at-startup (to tray), and an in-app self-updater.

⌨️ Usage

Surface What it does
Home Current wallpaper + featured picks
Discover Catalog + Wallhaven search, filter by tag, Set / Save / ★ / + playlist
Browser Real in-app browser with the capture bar
Library Saved & Starred · Local Folder · Playlist (rotation + shuffle)
Settings Theme/accent, performance, startup, mute, library folder, updates
Tray Open · Pause/Resume · Recent · Settings · Exit

Command-line flags (also handy for shortcuts): --tray (start hidden), --page=<home|discover|browser|library|settings> (deep-link, sub-routes like discover/wallhaven/nature), --open=<url> (open in the browser pane), --grab=<media|page> (open a URL and set it as wallpaper headlessly).

❓ FAQ

Where is my data? Settings and library live in %APPDATA%\WebDesk; caches in %LOCALAPPDATA%\WebDesk. The exe stays portable — the only system change is the optional "run at startup" registry entry.

Do I need anything installed? No. The build is self-contained. The Microsoft Edge WebView2 runtime is preinstalled on Windows 11 and most Windows 10 machines; if missing, install the Evergreen Bootstrapper from Microsoft.

How do I add wallpapers to Discover? Open the in-app Submit form (Discover → "+ Submit a wallpaper"), or send a PR adding an entry to catalog/catalog.json (id, title, type, source, optional thumbnail/tags/author/audio).

🛠️ Build from source

Requires the .NET 8 SDK (or newer) on Windows.

# Run locally
dotnet run --project WebDesk.csproj

# Build a portable, self-contained single-file exe -> publish/WebDesk.exe
dotnet publish WebDesk.csproj -c Release -r win-x64 --self-contained true \
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish

# Regenerate the icon from the logo (optional; needs Python + Pillow)
python tools/make_icon.py

🧩 Architecture

Three WebView2 surfaces, one rendering path. A URL navigates directly; local HTML loads via a virtual-host folder mapping; video/image are wrapped in a generated fullscreen HTML shell; shaders run in a WebGL runner. No separate media engine.

WebDesk/
├── WebDesk.csproj            # Project + WebView2 / NAudio package refs
├── app.manifest              # Per-monitor DPI awareness + Win10/11 compat
├── catalog/catalog.json      # Discover catalog (community-editable)
├── tools/make_icon.py        # Regenerates Resources/app.ico from logo.svg
├── wwwroot/                   # Embedded management UI (SPA), served via virtual host
│   ├── index.html · styles.css · app.js · bridge.js
│   ├── browser-home.html      # Browser start page (site tiles)
│   ├── shader-runner.html     # WebGL shader host (audio uniforms, FPS cap)
│   └── logo.svg
└── src/
    ├── Program.cs · WebDeskContext.cs        # Entry + app root (services/tray/windows)
    ├── MainWindow.cs                          # App shell + in-app browser pane
    ├── WallpaperSurface.cs · DesktopHost.cs   # Per-monitor renderer, WorkerW reparent
    ├── WallpaperController.cs                 # Apply / pause / rotate / audio routing
    ├── Bridge.cs                              # JSON-RPC bridge (SPA ⇄ C#)
    ├── CatalogService.cs · ProviderService.cs # Discover catalog + Wallhaven
    ├── LibraryStore.cs · LocalLibraryService.cs
    ├── PerfGuard.cs · RotationService.cs · HotkeyService.cs · AudioCapture.cs
    ├── SettingsStore.cs · Models.cs · AppPaths.cs · AppInfo.cs
    ├── AssetExtractor.cs · IconLoader.cs · StartupRegistration.cs
    ├── Updater.cs · NativeMethods.cs

🔄 CI/CD

Self-healing GitHub Actions:

  • ci.yml — builds and validates on every push/PR. NuGet cached, restore retried, stale runs auto-cancelled.
  • release.yml — on a v* tag: publishes the single-file exe, writes a SHA-256 checksum, and creates a GitHub Release with generated notes.
  • auto-rerun.yml — re-runs failed CI/Release jobs once automatically, so transient (network/NuGet/runner) failures recover without intervention.
  • dependabot.yml — weekly updates for GitHub Actions and NuGet packages.

Cut a release:

git tag -a vX.Y.Z -m "WebDesk X.Y.Z"
git push origin vX.Y.Z

🌐 Website

The landing page lives in website/ — Next.js + Tailwind + Framer Motion, with a live WebGL shader hero and a user-controllable accent color. It pulls the latest release and the Discover catalog at build time, so the download button and gallery stay current. Deployed on Vercel (webdesk-live.vercel.app).

cd website
npm install
npm run dev      # http://localhost:3000

🤝 Contributing

Fork → branch → PR. Adding wallpapers? Just edit catalog/catalog.json. Bugs/ideas? Open an issue.

🔍 Troubleshooting

  • Wallpaper not showing / black screen — ensure the WebView2 runtime is installed and graphics drivers are current; try Pause→Resume from the tray.
  • Video won't autoplay with sound — disable "Mute audio" in Settings (muted is the default).
  • Captured video doesn't play — some sites stream via blob: URLs; WebDesk falls back to setting the live page instead.

📜 License

MIT — see LICENSE.

🙏 Acknowledgments

Microsoft WebView2 · NAudio · Wallhaven API · .NET

About

Turn any website, video, image, or WebGL shader into a live Windows wallpaper. Free, open-source C#/.NET 8 + WebView2 desktop app - a free alternative to Wallpaper Engine and Lively.

Topics

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages