A focused X11 video wallpaper manager for per-monitor playback.
  • Rust 84.4%
  • Shell 7.5%
  • CSS 4.5%
  • Nix 3.2%
  • Handlebars 0.4%
Find a file
2026-08-04 04:18:14 +02:00
.github feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
assets/release assets: use crimsonvariable mark as app icon 2026-08-02 05:40:21 +02:00
data feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
docs release: prepare v0.2.0-alpha.1 2026-08-04 04:18:14 +02:00
legal release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
packaging release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
src feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
tests/fixtures feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
tools feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
.gitignore release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
about.toml release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
Cargo.lock feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
Cargo.toml feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
CHANGELOG.md release: prepare v0.2.0-alpha.1 2026-08-04 04:18:14 +02:00
CLA.md docs: establish contributor assignment policy 2026-08-02 03:25:29 +02:00
CODE_OF_CONDUCT.md docs: establish project foundation 2026-08-02 01:15:15 +02:00
CONTRIBUTING.md feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
COPYRIGHT.md docs: establish contributor assignment policy 2026-08-02 03:25:29 +02:00
deny.toml release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
flake.lock feat: scaffold headless X11 core 2026-08-02 01:22:31 +02:00
flake.nix feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
LICENSE docs: establish project foundation 2026-08-02 01:15:15 +02:00
README.md release: prepare v0.2.0-alpha.1 2026-08-04 04:18:14 +02:00
SECURITY.md release: prepare v0.2.0-alpha.1 2026-08-04 04:18:14 +02:00
THIRD_PARTY_LICENSES.txt release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
THIRD_PARTY_NOTICES.md release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00
TODO.md feat: add static image wallpapers and harden lifecycle 2026-08-04 04:07:37 +02:00
TYPEFACE_CREDITS.md release: prepare 0.1.0-alpha.1 2026-08-02 05:24:54 +02:00

FF00-vwm

FF00-vwm is a graphical per-monitor video and static-image wallpaper manager for Linux X11. Pick an output, choose local media with the system file dialog, select its presentation, and apply it. The wallpaper continues running after the configuration window closes.

Alpha software: 0.2.0-alpha.1 is a public preview. It is intended for testing on personal X11 desktops, not unattended or production systems. Configuration and packaging details may change before 1.0.0.

FF00-vwm monitor manager using the Crimsonvariable interface system

Features

  • Independent media assignments for connected XRandR outputs.
  • Static PNG, JPEG, WebP, and SVG assignments using the package's pinned image loader closure.
  • A native GTK4 interface and system file chooser.
  • Fit, Fill, Stretch, Center, and static-image Tile display modes.
  • Non-destructive image rotation and horizontal or vertical mirroring.
  • Detached wallpaper processes using mpv, without xwinwrap.
  • Saved assignments and optional restore at X11 login.
  • Targeted process ownership checks that leave unrelated mpv processes alone.
  • GUI and headless lifecycle controls.
  • No telemetry, accounts, network service, or automatic downloads.

Supported environment

The first alpha supports Linux x86_64 in an X11 session. i3 is the primary tested window manager. Wayland, Flatpak, ARM, network videos, audio playback, playlists, and animated-image formats are not supported in this release.

Video playback requires mpv 0.36.0 or newer; static images work without mpv. Native builds also require the GTK4, GdkPixbuf loader, and X11 runtime libraries supplied by the operating system. The Nix package provides the tested runtime dependencies itself.

Try it with Nix

FF00-vwm is published through the crimsonvariable NUR namespace. With NUR configured, open a shell containing the packaged application:

nix-shell -p nur.repos.crimsonvariable.ff00-vwm

Then run ff00-vwm.

The immutable GitHub release flake remains available as a direct fallback that does not use the NUR namespace:

nix run 'github:crimsonvariable/ff00-vwm?ref=v0.2.0-alpha.1'

From a local checkout:

nix --extra-experimental-features 'nix-command flakes' run .

The Nix package includes mpv on the application's runtime path. It does not change system configuration or enable login restoration.

Native archive

Download the archive and SHA256SUMS from the matching prerelease, verify it, extract it, and run the user-local installer:

sha256sum --check SHA256SUMS
tar -xzf ff00-vwm-0.2.0-alpha.1-x86_64-linux.tar.gz
cd ff00-vwm-0.2.0-alpha.1-x86_64-linux
./install.sh

The default destination is ~/.local. Ensure ~/.local/bin is on PATH, then run ff00-vwm. The archive does not bundle mpv, GTK4, or image decoder modules and does not modify the system package manager. Install GTK4 and the PNG, JPEG, WebP, and SVG GdkPixbuf loaders through the distribution; install mpv when video playback is needed.

To install under another user-controlled prefix:

./install.sh --prefix /absolute/path

To remove exactly the files recorded by the installer:

~/.local/bin/ff00-vwm-uninstall

The native archive uses Debian 12 as its build baseline. It may not run on an older distribution; use the Nix package or build from source in that case.

Usage

Launch ff00-vwm without arguments for the graphical interface. Choose a video or static image for each connected output, select its display mode, and apply it. Image rotation and mirroring alter only presentation; the selected file is never rewritten. Login restore is opt-in and can be enabled or disabled in the application.

The headless commands are:

ff00-vwm apply    # apply saved assignments to connected outputs
ff00-vwm refresh  # rediscover geometry and reapply assignments
ff00-vwm status   # show dependency, output, assignment, and renderer state
ff00-vwm stop     # stop only renderers owned by FF00-vwm

Configuration follows the XDG base-directory convention. On a typical Linux desktop it is stored at ~/.config/ff00-vwm/config.toml. Runtime ownership records are kept below the user runtime directory and are not shared between users.

Building from source

The reference development environment is the locked Nix flake:

nix --extra-experimental-features 'nix-command flakes' develop
cargo build --locked

A conventional Cargo build needs Rust 1.85 or newer, GTK4 and GdkPixbuf development files, the WebP and SVG GdkPixbuf loaders, pkg-config, and X11/XRandR development files. Run the release checks with:

cargo fmt --check
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo test --locked --all-features
cargo audit
cargo deny check
nix --extra-experimental-features 'nix-command flakes' flake check

Development status

The 0.2.0-alpha.1 release adds lifecycle hardening and static images. Work toward the next alpha remains ordered in the roadmap rather than being promised without implementation and testing.

See TODO.md for the ordered acceptance checklist and docs/ARCHITECTURE.md for the reasoning and safety boundaries.

Safety and privacy

FF00-vwm passes video paths directly to mpv as arguments and does not interpolate them into a shell command. Image files are decoded locally and are not modified. It serializes lifecycle operations and validates private renderer ownership markers before signalling a process group. It does not send selected filenames, display details, analytics, or other data over the network.

See SECURITY.md for private reporting instructions. As with any alpha release, back up important configuration and review the known limitations in the release notes before use.

Repositories and contributions

Forgejo is the canonical development repository and source of truth. GitHub is a public release mirror. Issues, design discussions, and contributions belong on Forgejo; GitHub pull requests are not merged.

Read CONTRIBUTING.md before proposing a change. Contributions require an executed Contributor Copyright Assignment Agreement.

License

FF00-vwm is licensed under AGPL-3.0-or-later. Copyright and dual-licensing authority are documented in COPYRIGHT.md. Third-party projects remain subject to their own terms; see THIRD_PARTY_NOTICES.md and THIRD_PARTY_LICENSES.txt. Typeface attribution is recorded in TYPEFACE_CREDITS.md.

This project is independent and is not affiliated with or endorsed by mpv, GTK, the Rust project, X.Org, i3, NixOS, or any Linux distribution.