All work

Desktop app · Windows 10 / 11

Wallive

A live video wallpaper for Windows that costs almost nothing to run.

  • ~0.9%CPU while playing 1080p at 30 fps
  • 29 MBmemory after 10 s paused
  • 0polling timers, fully event-driven
  • 13architecture decision records

The problem

Live wallpaper apps usually ship a browser engine or a general video player and keep decoding video even when every window covers the desktop. That costs CPU, memory and battery for something nobody is looking at.

What I built

Wallive is a tray-only Windows app. It plays a video behind the desktop icons on every monitor, while icons, the taskbar and windows stay on top. When you choose videos, it converts each one once, in the background, into a format your graphics chip decodes in hardware. Playback then uses the converted copy.

  • Plays several videos in turn every 1 to 60 minutes, in order or shuffled, and switches only at the end of a loop so no scene is cut.
  • Pauses automatically when windows cover every monitor, when a fullscreen app or game runs, when the display turns off, when Battery Saver is on, or when the session is locked.
  • Frees the decoder’s memory after 10 seconds of pause and resumes when the desktop is visible again.
  • Keeps working after Explorer restarts and display changes.

How it works

Frames go from the GPU’s hardware decoder through a Direct3D 11 video processor into a composition swap chain. They never pass through the CPU or a 3D render pass. One decoder feeds one DirectComposition visual per monitor. Everything else, including window coverage, power state and display changes, reacts to operating system events rather than timers.

  • Two desktop layouts. It detects both the classic “WorkerW” Explorer layout and the newer Windows 11 24H2 layout, and re-attaches after Explorer restarts.
  • Safe Rust by default. The crate denies unsafe code; only thin ffi.rs wrappers opt back in, each block with a // SAFETY: comment. Coverage math, codec choice and config are plain Rust with unit tests.
  • Imports run out of process. Transcoding runs in a short-lived child process, so the always-running process stays small.

Results

Measured on the development laptop (Intel integrated graphics, 1920x1080, Windows 11):

State CPU Memory
Playing 1080p 30 fps on AC power about 0.9% about 81 MB
Playing on battery about 1.2% about 81 MB
Paused about 0% 29 MB after 10 s

What is not tested yet

The README says what has not been tested. Several monitors, 4K and high-DPI screens, NVIDIA and AMD graphics, and Windows 10 on real hardware are implemented but untested. Test reports from those setups are the project’s most-wanted contribution.