wayper

The wallpaper manager that learns what you like. Wallhaven integration, AI-native, keyboard-driven.

GitHub stars License AUR Release
Download View on GitHub
wallpaper transitions

Features

Learns from you

Dislike a wallpaper the model missed to add an explicit training label. Ban stays a separate exact-image block for wallpapers you are tired of.

AI-native (MCP)

Tell Codex or Claude "switch to something with mountains" — it just works. First wallpaper manager with native AI assistant integration.

Keyboard-driven

Every action has a shortcut. Grid navigation, lightbox, favorites, settings — fully operable without a mouse.

Wallhaven client

Auto-downloads wallpapers with minimum-favorite filtering and rules/model strategy controls. Browse and search Wallhaven directly from the GUI.

Auto orientation

Portrait monitors get portrait wallpapers. No manual sorting needed.

Three-tier purity

SFW, Sketchy, NSFW — independently toggleable. Persistent across sessions.

Cross-platform

Windows, macOS, and Linux (Hyprland/Sway). CLI + GUI + MCP — pick your interface.

Pool management

Validates, resizes, rotates. Favorites, blacklist, history navigation — all built in.

JSON output

--json flag on every command for scripting and automation.

Install

Arch (AUR)
Windows
macOS
From source
paru -S wayper     # or: yay -S wayper
# Download the latest Windows installer from GitHub Releases
# Or install from source:
git clone https://github.com/yuukidach/wayper.git
cd wayper
uv venv
uv pip install -e .
# Download the latest .dmg from GitHub Releases
curl -LO https://github.com/yuukidach/wayper/releases/latest/download/wayper.dmg
open wayper.dmg
# Drag wayper.app to Applications, then run from Launchpad or:
wayper-gui
git clone https://github.com/yuukidach/wayper.git
cd wayper
uv venv && uv pip install -e .

Usage

wayper daemon               # start background rotation + downloads
wayper next                 # next wallpaper (forward or new random)
wayper prev                 # previous wallpaper from history
wayper fav [--open]         # favorite current wallpaper
wayper unfav                # remove from favorites
wayper dislike              # teach model, blacklist + switch
wayper ban                  # exact-image block only + switch
wayper unban                # undo last dislike or ban
wayper mode                 # toggle sfw↔nsfw (preserves sketchy)
wayper mode sketchy         # toggle sketchy on/off
wayper mode sfw,sketchy     # set exact purity combination
wayper model train         # train the lightweight local metadata ranking model
wayper model score --tags "tag1,tag2"  # explain a local dislike score
wayper model status        # inspect local model validation
wayper status               # show current state
wayper-gui                  # GUI app
wayper setup                # install .desktop entry (Linux)
wayper --json status        # machine-readable output

wayper model train reads only local Wallhaven metadata (normalized tags and compact color/category/purity context); it never opens image files or inspects pixels. The base model uses the standard library. Install uv pip install -e '.[semantic]' to enable the optional FastEmbed BAAI/bge-small-en-v1.5 text head, which encodes metadata only and keeps a persistent local embedding cache. Before any Review decisions exist, an installation may temporarily bootstrap from its older blacklist/favorite data. Once a Review decision or manual Dislike is recorded, only explicit Keep/Dislike decisions become new training labels; ordinary Ban remains outside the label stream. The semantic head learns related metadata patterns from those examples, without a manually configured person or region rule. Tag pairs remain opt-in with --max-combos. Live pool images are background controls unless explicitly kept. Wayper reserves the most recent part of each explicit Keep/Dislike class to learn an accuracy-first Review boundary that weights precision more than recall. Recommended and Auto-held use the same binary decision: scores below the learned boundary are omitted, and the page size is a maximum rather than a target to fill. Exact and semantic evidence only rank images that have already crossed the boundary. Open the dedicated Review view to control this loop. The sidebar chooses Rules, Model, or Rules + model for new downloads without disabling recommendations. Two explicit card lanes keep automatically quarantined downloads (Auto-held) separate from likely blocks already in the pool (Recommended); pending Auto-held cards open first. Drag, scroll, or use the side arrows to move through the full-window card stack. Press Enter/Space for the full preview, A to keep, or D to dislike and teach the model. An Auto-held Keep releases the file into the pool, while a recommendation Keep records a positive correction without moving it. Because Auto-held files are recoverable and require a human decision, a current trained model can quarantine likely blocks without the separate validation gate used for unattended deletion. Wayper refreshes the model locally after enough new feedback.

GUI

browse window

wayper-gui — browse your pool, favorites, and banned wallpapers. Quick actions, daemon control, download folder, settings. Designed to be fully operable without a mouse.

Grid view

p v pool / fav
m Model
b Blocklist
Enter / Space preview (lightbox)
h / l prev / next wallpaper
f favorite
d dislike + teach model
x / Del ban exact image only
u undo dislike / ban
o open on Wallhaven
F1 F2 F3 toggle SFW / Sketchy / NSFW
s settings
/ focus search bar
Esc clear search / unfocus
Arrow keys navigate grid
[ / ] blocklist: recoverable / all
19 switch monitor
Tab / Arrow keys enter and move through Review candidates
Enter / Space preview focused Review candidate
/ switch candidates in Review preview
a / d keep / dislike focused Review candidate

Lightbox preview

/ previous / next image
Enter set as wallpaper
f favorite
d dislike + teach model
x / Del ban exact image only
a keep Review candidate
o open on Wallhaven
Space / Esc close lightbox

MCP

Built-in MCP server lets AI assistants control your wallpapers. Ask Codex or Claude to "favorite this wallpaper" or "switch to something with mountains" — it just works.

# Codex (~/.codex/config.toml)
[mcp_servers.wayper]
command = "/path/to/wayper/.venv/bin/wayper-mcp"

# Claude Code (~/.claude/.mcp.json)
{
  "mcpServers": {
    "wayper": {
      "command": "/path/to/wayper/.venv/bin/wayper-mcp"
    }
  }
}

Tools: status next_wallpaper prev_wallpaper fav unfav dislike ban unban set_mode delete_wallpaper wallpaper_info tag_stats_top tag_stats_lookup tag_stats_combo uploader_stats_lookup

Keybindings

Bind wayper commands to your compositor shortcuts for instant wallpaper control.

Hyprland
AeroSpace (macOS)
bind = $mod, F9,       exec, wayper ban
bind = $mod CTRL, F9,  exec, wayper dislike
bind = $mod SHIFT, F9, exec, wayper unban
bind = $mod, F10,      exec, wayper fav
bind = $mod SHIFT, F10,exec, wayper unfav
bind = $mod CTRL, F10, exec, wayper fav --open
bind = $mod, F11,      exec, wayper next
bind = $mod SHIFT, F11,exec, wayper prev
bind = $mod, F12,      exec, wayper mode
bind = $mod SHIFT, F12,exec, wayper mode sketchy
exec-once = wayper daemon
cmd-shift-n = 'exec-and-forget wayper next'
cmd-shift-b = 'exec-and-forget wayper ban'
cmd-shift-f = 'exec-and-forget wayper fav'

Requirements