Scenery isn’t just an image folder. It’s an intelligent indexing engine designed for minimalist setups (Arch Linux, Hyprland, Sway).
It fixes the chaos of having thousands of images named like wallhaven-8392.jpg. Scenery analyzes your images, extracts dominant colors, computes their resolution, and lets you inject them into your desktop with simple commands.
- 🔍 Visual CLI Search: A beautiful
Rich-powered UI that shows metadata and terminal previews. - 🎨 Color Extraction: Automatically detects whether a wallpaper is
dark,red, ornordthrough palette analysis. - 🛡️ MD5 Integrity: Moved files? Renamed folders? Scenery uses hashes, not names, so your database never breaks.
- 🤖 Smart Import: Recursively scans your old wallpaper folder, detects duplicates, and organizes everything automatically.
- pipe-friendly: Designed for chaining.
scenery getoutputs clean paths, perfect forswww,feh, orhyprpaper.
Built with modern libraries to ensure stability and speed:
- Typer: For a robust CLI with autocomplete.
- Rich: For a beautiful terminal UI.
- Pillow: Image processing.
- Colorgram: Color palette extraction.
-
Clone the repository:
git clone https://github.com/Doble-2/scenery-wallpapers.git cd scenery-wallpapers -
Set up the environment (recommended on Arch due to PEP 668):
python -m venv .venv source .venv/bin/activate python -m pip install -U pip python -m pip install -r requirements.txt
Optional (terminal preview):
sudo pacman -S chafa- Configure Paths:
Create your
.envfile to protect your privacy.cp .env.example .env # Edit .env and set the path to your old wallpapers folder # IMPORTANT: Use absolute paths (e.g. /home/your-user/Pictures/Wallpapers)
Make sure your environment is activated. Here’s the typical workflow of an Architect:
Bring your old wallpapers into the 21st century. Scenery will copy them, avoid duplicates, and organize the structure.
python scenery.py import --verboseAnalyzes files in assets/, extracts colors, and generates the manifest.yaml database.
python scenery.py indexLooking for something dark to code at night?
python scenery.py search --tag dark --tag minimalistDefault output (simpler): clickable name, resolution, tags, and colors.
Useful flags:
# Show preview (uses chafa if you’re in the VS Code terminal)
python scenery.py search --tag minecraft --preview
# Control preview size
python scenery.py search --tag minecraft --preview --preview-width 50 --preview-height 12
# Show extra columns (if you need them)
python scenery.py search --tag minecraft --show-path --show-idUse scenery inside your Hyprland scripts or startup configuration.
Example: Change to a random wallpaper with SWWW
swww img $(python scenery.py get --random) --transition-type growExample: Specific “Nord” themed wallpaper
swww img $(python scenery.py get --tag "nord" --random)scenery-wallpapers/
├── assets/ # 🖼️ Your image sanctuary (managed by Scenery)
├── src/ # 🧠 Lógica del Core y CLI
├── manifest.yaml # 🗃️ Portable database (YAML)
└── scenery.py # 🚀 Entry point
Got an idea to improve the color algorithm or support more formats? PRs are welcome!
- Fork the repo.
- Create your branch (
git checkout -b feature/AmazingFeature). - Commit (
git commit -m 'Add AmazingFeature'). - Push (
git push origin feature/AmazingFeature). - Open a Pull Request.








