Open-source project
varietywalls/variety avatar
varietywalls/variety

Variety: Linux Wallpaper Downloader and Manager

Wallpaper downloader and manager for Linux systems

1,715 stars199 forksPythonGPL-3.0

At a glance

What is it?
Variety is a GTK-based wallpaper manager for Linux desktops that can rotate local images, download wallpapers, apply filters, and display quotes or a clock. It is practical for users who want an automated wallpaper workflow, but its declared maintenance mode is the main adoption caveat.
Who is it for?
Variety is a reasonable choice for a Linux desktop user who values automated wallpaper rotation, online sources, image filters, and tray controls. It is less suitable for someone seeking a rapidly evolving project or a minimal wallpaper changer without online-source features.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Variety Changes on a Linux Desktop

Variety addresses Linux users who rotate wallpapers manually or want a desktop that changes without repeated file selection. It can use images already on the computer or obtain wallpapers from services such as Wallhaven, Unsplash, Bing, and Reddit. Its rotation interval provides a scheduled change rather than requiring the user to open an image viewer each time.

The application also includes selection and organization tools. The README describes ways to separate preferred images from unwanted downloads, which is important because automated retrieval is useful only when the resulting library remains manageable. Local images are supported alongside online sources, so the application is not tied to one provider.

Variety can add desktop content beyond the wallpaper. Its documented extras include quotations and a digital clock. Image effects are another part of the package: `setup.py` describes effects such as oil painting and blur, while the installation documentation lists ImageMagick as an optional dependency for wallpaper filters.

The intended interface depends on the desktop. Most supported Linux desktop environments work without special configuration. Where the desktop supports it, Variety appears as a tray icon with pause and resume controls. On systems without suitable tray support, the desktop entry menu offers similar controls. For i3, openbox, and other window managers, the README names `feh` or `nitrogen` as the default tools for applying wallpapers. This desktop compatibility comes with optional dependencies rather than being entirely universal.

The project is written primarily in Python and uses GTK+ 3 for its desktop interface. Its entry point is declared in `pyproject.toml` as `variety = "variety:main"`, so installing the package also makes the `variety` command available.

How Variety Downloads and Rotates Images

Variety's documented data path has two inputs: local files and online wallpaper services. A source can supply an image for display, and the configured interval controls when the wallpaper changes. Downloaded images enter the user's wallpaper collection, where the documented selection and sorting tools can separate images worth keeping from unwanted results.

The application delegates some desktop-specific work. On i3, openbox, and similar window managers, Variety uses `feh` or `nitrogen` by default to set the wallpaper. Other desktop environments can use their native wallpaper mechanisms. This means Variety acts as the organizer and scheduler, while the lower-level command or desktop facility applies the selected image.

Image handling is partly delegated to external libraries. The required runtime list includes `gexiv2`, `Pillow`, `pygobject`, and `pycairo`. Optional loaders add `libavif-gdk-pixbuf` for AVIF and `webp-pixbuf-loader` for WebP support. Without those optional components, support for those image formats may be limited.

The UI follows the capabilities of the desktop. GTK+ 3 is required, and `libayatana-appindicator` is optional for AppIndicator support. GNOME may also require the GNOME AppIndicator extension for tray icon support. If the tray icon is unavailable, the installed desktop entry still exposes pause and resume actions. This fallback is useful, although it offers less direct access than a tray control.

Installing Variety from a Linux Distribution

For the first installation, a distribution package is the shortest documented path. Variety requires Python 3.9 or newer when run from source, but the listed distribution packages can carry the required libraries for the target system. The README lists packages for Arch Linux, Debian, Fedora, OpenSUSE, Ubuntu, and NixOS.

On a recent Ubuntu or Debian-based system, enable Ubuntu's `Universe` repository if necessary, update the package index, and install Variety with the documented command:

bash
sudo apt update && sudo apt install variety

The command installs the packaged application and its declared distribution dependencies. After installation, start `variety` from the applications menu or run it in a terminal:

bash
variety

This is the first real use available from the documented commands: it launches the wallpaper manager, where local or online sources can be selected and the rotation interval configured.

Users who need command-line options can inspect the launcher's supported interface:

bash
variety --help

The README states that these options can control Variety from the terminal, but it does not enumerate them. The help output is therefore the authoritative place to check before scripting any startup or control behavior.

Older Ubuntu releases are covered by the documented `variety/stable` PPA. This route is separate from the standard Ubuntu package and may provide a newer release:

bash
sudo add-apt-repository ppa:variety/stable
sudo apt update
sudo apt install variety

Building Variety from Source in a Virtual Environment

A source installation is appropriate when the distribution package is unavailable, an older version must be tested, or the source tree must be inspected. The documented build requirements are `setuptools` and `setuptools-gettext`. `pyproject.toml` further requires `setuptools >= 62.3.0` because the build uses extended glob patterns for package data.

Clone the repository and enter its directory:

bash
git clone https://github.com/varietywalls/variety.git && cd variety

The README then creates a virtual environment that retains access to system site packages. This matters because GTK-related Python libraries may already be supplied by the Linux distribution:

bash
python3 -m venv --system-site-packages ~/variety-venv

Activate the environment and install Variety in editable mode:

bash
source ~/variety-venv/bin/activate
pip install -e .

With the environment active, run `variety`. The command should open the application in the same way as the source README's final instruction describes. If it fails, the first areas to inspect are the optional runtime components for the current desktop. `feh` or `nitrogen` are relevant to i3, openbox, and other supported window managers, ImageMagick is relevant to wallpaper filters, and the ImageMagick-based optional feature should not be treated as a prerequisite for basic operation.

The optional Ubuntu addition `variety-slideshow` is separate from the core package. The README describes it as a pan and zoom image slideshow and screensaver that integrates with Variety. It is not included in the standard Ubuntu Universe repository and is installed through the documented PPA context:

bash
sudo apt install variety-slideshow

Online Sources, Image Formats, and Desktop Constraints

Variety offers more than basic timed rotation, but several capabilities depend on services or optional system components. Online retrieval is listed for Wallhaven, Unsplash, Bing, Reddit, and other sources. The documentation does not specify which source is selected initially, whether every service requires an account, or whether each source imposes provider-specific limits. Those details need verification during configuration rather than assumption.

Desktop support is broad in principle but conditional in practice. GTK+ 3, `gexiv2`, and `libnotify` are required runtime components. AppIndicator support can use `libayatana-appindicator`, while GNOME tray behavior can depend on the GNOME AppIndicator extension. Systems without tray support retain pause and resume actions through the desktop entry, but the interaction is less immediate.

Image format support has the same dependency model. The core package includes Pillow, but AVIF and WebP support depend on `libavif-gdk-pixbuf` and `webp-pixbuf-loader`. Filters can depend on ImageMagick. A desktop that launches Variety successfully can still lack a requested format or effect if the corresponding optional package is missing.

The repository also exposes server-side and test directories, but the README does not explain whether users can run a self-hosted provider or what configuration such a provider requires. Those entries indicate related code in the repository layout, not documented user features. The application should not be adopted on the assumption that every source is self-hosted or that its provider interface is stable.

Variety Slideshow as a Different Approach

Variety Slideshow is the clearest documented alternative or companion. It is a separate project described as a pan and zoom image slideshow and screensaver that integrates with Variety. Its focus is animated image presentation and screensaver behavior, while Variety focuses on desktop wallpaper management, provider downloads, rotation, filtering, and desktop controls.

The distinction matters for installation and permissions. `variety-slideshow` is not available in the standard Ubuntu Universe repository, while core Variety is available through several listed distribution repositories. The README says that adding the `variety/stable` PPA usually provides newer releases and also allows installation of the optional slideshow addition. A user who needs only scheduled wallpaper changes does not need the separate package, while someone seeking a pan and zoom screensaver has a different documented path.

This comparison should not be read as a claim about all wallpaper tools. The practical choice is between core wallpaper management and an integrated slideshow feature.

Maintenance, Upgrades, and the GPL-3.0 Boundary

The repository is not archived, and the last push was on 2026-09-30. The release history includes Variety 0.9.1 on 2026-08-30, Variety 0.9.0 on 2026-05-03, and Variety 0.9.0-beta1 on 2026-01-03. Those facts show recent repository and release activity, but the README explicitly places Variety in maintenance mode. It says the maintainers do not have time to triage all issues or make major changes.

That distinction affects adoption. A recent release can provide fixes while leaving substantial feature work or issue response outside the project's current priorities. Distribution-package users also have an upgrade path through their Linux package manager, while source users must decide whether to update the repository and reinstall the editable package. The README does not publish a migration guide or rollback procedure.

The project is identified as GPL-3.0-only in `pyproject.toml`, and `setup.py` includes the GNU General Public License version 3 notice. For organizations, this means license obligations and distribution terms should be reviewed against the actual `LICENSE` file and the way the software is packaged or modified. This is a licensing boundary, not legal advice. The repository includes `COPYING`-style license text through its `LICENSE` file and source headers, so redistribution decisions can start from the project's own files.

Before adopting Variety, users should compare the package version available from their distribution with the repository release they need. They should also confirm that required desktop components, optional image loaders, and desired online sources are available. The maintenance notice is the decisive project-specific warning: recent commits do not remove the stated limitation on major changes and issue triage.

Editorial conclusion

Variety is a reasonable choice for a Linux desktop user who values automated wallpaper rotation, online sources, image filters, and tray controls. It is less suitable for someone seeking a rapidly evolving project or a minimal wallpaper changer without online-source features. Before adoption, verify that the package version in the chosen distribution has the required wallpaper sources, desktop integration, and image-format support. For source installations, first confirm that the system provides GTK+ 3, gexiv2, libnotify, and the Python dependencies declared in `pyproject.toml`.

Frequently asked questions

How do I install Variety on Ubuntu or Debian?

On a recent Ubuntu or Debian-based system, update the package index and install the package with `sudo apt update && sudo apt install variety`. Ubuntu's `Universe` repository must be enabled when using the standard Ubuntu package.

What desktop components does Variety need?

The documented runtime requirements include GTK+ 3, `gexiv2`, and `libnotify`, along with Python dependencies. Tray support can require `libayatana-appindicator`, and GNOME may require the GNOME AppIndicator extension.

Can Variety install wallpapers from online services?

Yes. The README lists Wallhaven, Unsplash, Bing, Reddit, and other online sources. It also supports local images and scheduled rotation.

Is Variety actively maintained?

The repository is not archived and the last push was on 2026-09-30, but the README explicitly says that Variety is in maintenance mode and that maintainers do not have time to triage all issues or make major changes.

Does Variety support AVIF and WebP images?

The README lists `libavif-gdk-pixbuf` for AVIF support and `webp-pixbuf-loader` for WebP support as optional runtime dependencies. Those loaders are needed when the corresponding format support is required.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. varietywalls/variety on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/varietywalls-variety.svg)](https://hysenlabs.com/projects/varietywalls-variety)

Was this useful?