Set a new desktop wallpaper every day from various sources.
backdrop fetches a daily image from one of several curated sources and sets it as your desktop wallpaper. It automatically picks the best display mode based on the image dimensions and your screen aspect ratio.
Run it once manually or let backdrop schedule a daily update automatically.
- Linux (debian, arch, fedora, etc.)
- Gnome, KDE, Cinnamon, XFCE, Mate, Cosmic, LXQt
- Windows
- Mac OS
Download the latest release for your platform from the releases page.
Install with a single command:
curl -fsSL https://ensl.ee/backdrop | bashOr clone the repo and run the installer locally:
git clone https://github.com/aensley/backdrop.git \
&& cd backdrop && ./install.shThe installer detects your distro and installs the best available package format (.deb, .rpm, or AppImage), ensures the systemd unit files are in place, and runs backdrop enable to start the daily timer.
Run the .msi or setup .exe installer. Windows SmartScreen may warn about an unknown publisher; click More info → Run anyway.
Install with a single command:
curl -fsSL https://ensl.ee/backdrop | bashOr download the .dmg from the releases page, open it, and drag backdrop to your Applications folder. Then symlink the CLI:
sudo ln -sf "/Applications/backdrop.app/Contents/MacOS/backdrop" /usr/local/bin/backdropAfter either method, run backdrop enable to start the daily timer.
Note: backdrop is not code-signed, so macOS Gatekeeper may block it on first launch. To open it anyway:
- Right-click the app → Open
- Click Open in the dialog that appears
You only need to do this once. Alternatively, go to System Settings → Privacy & Security and click Open Anyway after the blocked launch attempt.
backdrop <command>
| Command | Description |
|---|---|
update / refresh |
Refresh wallpaper from the active source (default). Uses local cache if today's image is already downloaded. |
update --force |
Force a fresh download even if today's image is already cached. |
set <source> / use |
Switch active source and refresh now |
set-time <HH:MM> |
Set the daily run time (24-hour); restarts timer if active |
status |
Show active source, last image, image title, display method, and config |
random |
Refresh from a randomly chosen source (does not change active source) |
enable |
Enable the daily timer (see Scheduling) |
uninstall |
Remove backdrop; --purge also deletes config and cached images |
help |
Show help |
The --force flag can be combined with update, set, and random commands to always download a fresh image, bypassing the local cache.
| Key | Name |
|---|---|
bing |
Bing Image of the Day https://www.bing.com/ |
apod |
NASA Astronomy Picture of the Day https://apod.nasa.gov/apod/ |
earth |
Earth.com Image of the Day https://www.earth.com/ |
eo |
NASA Earth Observatory Image of the Day https://science.nasa.gov/earth/earth-observatory/image-of-the-day/ |
iotd |
NASA Image of the Day (default) https://www.nasa.gov/image-of-the-day/ |
natgeo |
National Geographic Photo of the Day https://www.nationalgeographic.com/photo-of-the-day/ |
wmc |
Wikimedia Commons Picture of the Day https://commons.wikimedia.org/wiki/Commons:Picture_of_the_day |
Switch sources at any time:
backdrop set apodThis will also immediately update the wallpaper from the new source.
backdrop enable registers a daily timer using the platform's native scheduler:
| Platform | Mechanism |
|---|---|
| Linux | systemd --user timer (backdrop.timer / backdrop.service in ~/.config/systemd/user/) |
| macOS | launchd agent (~/Library/LaunchAgents/com.andrewensley.backdrop.plist) |
| Windows | Task Scheduler task named backdrop |
Use backdrop set-time HH:MM to change when it fires. The timer is disabled as part of backdrop uninstall; there is no standalone disable command. To disable manually, use your platform's scheduler directly (e.g. systemctl --user disable --now backdrop.timer on Linux).
The config file lives at ~/.config/backdrop/config and is created on first run. You can edit it directly or use the set / set-time commands.
| Key | Default | Description |
|---|---|---|
sources |
iotd |
Comma-separated list of active sources, e.g. iotd,apod,bing |
rotate_interval |
0 |
Minutes between source rotations. 0 disables rotation (uses daily schedule instead) |
screen_aspect_ratio |
1.7778 |
Fallback aspect ratio if auto-detect fails (16:9=1.7778, 16:10=1.6, 21:9=2.3333, 4:3=1.3333) |
zoom_min_coverage |
0.55 |
Crop tolerance: if filling the screen would crop more than this fraction of the image, use scaled mode instead |
user_agent |
backdrop/2.0 (personal daily wallpaper app) |
HTTP User-Agent sent with all requests |
timer_time |
08:00 |
Time of day to run the daily update (24-hour HH:MM); ignored when rotate_interval > 0 |
| Platform | Config file | Cached images |
|---|---|---|
| Linux | ~/.config/backdrop/config |
~/.local/share/backdrop/ |
| macOS | ~/Library/Application Support/backdrop/config |
~/Library/Application Support/backdrop/ |
| Windows | %APPDATA%\Roaming\backdrop\config |
%LOCALAPPDATA%\backdrop\ |
Cached images older than 14 days are pruned automatically on each update. Each image has a companion .json sidecar file that stores the title, description, and source URL retrieved from the image's origin site; these are pruned on the same schedule.
backdrop uninstallTo also remove your config and cached wallpapers:
backdrop uninstall --purge