Fetch and download Windows Spotlight images automatically. Lightweight and easy to use.
Project description
pyspotlightarchiver
pyspotlightarchiver is a Python CLI tool for fetching, preserving, and managing Windows Spotlight images.
Inspired by Spotlight-Downloader.
🚀 Features
- List available Spotlight image URLs
- Download Spotlight images in 1080p or 4K resolution
- Filter by locale and orientation
- Embed EXIF metadata with
exiftool - Avoid duplicate downloads with perceptual hash and URL checks
- Automatic throttling to avoid rate limits
📦 Requirements
- Python 3.10 or higher (Download Python)
exiftool(optional, required for--embed-exif)
⚖️ Installation
From PyPI (recommended)
pip install pyspotlightarchiver
From source (for development)
-
Clone the repository:
git clone https://github.com/yell0wsuit/pyspotlightarchiver.git cd pyspotlightarchiver
Or download as ZIP and extract it.
-
(Optional) Create a virtual environment:
python -m venv venv .\venv\Scripts\activate # On Windows source venv/bin/activate # On Linux/Mac
We recommend using a virtual environment to avoid conflicts with other Python packages.
-
Install dependencies:
pip install -r requirements.txt
⚙️ Usage
Run the tool using:
pyspotlightarchiver [command] [options]
Available commands
list-url
List available Windows Spotlight image URLs.
pyspotlightarchiver list-url [options]
| Option | Description |
|---|---|
--api-ver |
API version to use (3 for 1080p, 4 for 4K). Default: 3. |
--locale |
Locale code (e.g., en-us). Use all to include all locales. Default: en-us. |
--orientation |
Filter by image orientation: landscape, portrait, or both. Default: landscape. |
--verbose |
Enable verbose output. |
download
Download Spotlight images to your computer.
pyspotlightarchiver download --single|--multiple [options]
Required:
-
--single: Download a single image.- If
--locale all, a random locale is selected. - If
--orientation both, both orientations are downloaded.
- If
-
--multiple: Download all available images.- With
--locale all, all locales are processed. - With
--orientation both, both versions are downloaded.
- With
Additional Options:
| Option | Description |
|---|---|
--api-ver |
API version (3 or 4). Default: 3. |
--locale |
Locale code (e.g., en-us). Default: en-us. |
--orientation |
Image orientation: landscape, portrait, or both. Default: landscape. |
--save-dir |
Directory to save downloaded images. Default: downloaded_spotlight. |
--embed-exif |
Embed EXIF metadata using exiftool. |
--exiftool-path |
Path to exiftool. Required if not in system PATH. |
--verbose |
Show detailed logs. |
📌 Notes
🔄 Locale throttling
When using --locale all, the tool throttles API requests to avoid rate limits.
- Locales are processed in chunks of 15.
- Delay increases after each chunk:
- After 15 locales: wait 5 sec
- After 30: wait 10 sec
- After 45: wait 15 sec
- ...up to a maximum of 180 seconds.
🔁 Download loop (with --multiple)
The tool continues downloading images until no new images are found after 50 consecutive attempts.
After every 10 attempts, delay increases gradually, capped at 180 seconds to avoid rate limiting.
📂 Caching & duplicates
- A local SQLite database tracks downloaded image URLs and perceptual hashes
- Located at:
.cache/downloaded_images.sqlite - Prevents redownloading of identical images.
- Detected perceptual duplicates are logged in:
phash_duplicates_report.md
💡 Tip: Do not delete the cache database to preserve download history.
📄 License
This project is licensed under the GNU GPLv3.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyspotlightarchiver-1.1.3.tar.gz.
File metadata
- Download URL: pyspotlightarchiver-1.1.3.tar.gz
- Upload date:
- Size: 136.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
743d22a7aea0c776eea7e132bfa6e48d993ea3cc323976603ac2e89c4825c5d5
|
|
| MD5 |
7ad883478bb28d575355707647bfb5b3
|
|
| BLAKE2b-256 |
dc2be1b71f568b75acd6caebb86d936ccfb94a9e481ff6848b8c86eba9648936
|
Provenance
The following attestation bundles were made for pyspotlightarchiver-1.1.3.tar.gz:
Publisher:
build.yaml on yell0wsuit/pyspotlightarchiver
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyspotlightarchiver-1.1.3.tar.gz -
Subject digest:
743d22a7aea0c776eea7e132bfa6e48d993ea3cc323976603ac2e89c4825c5d5 - Sigstore transparency entry: 1227121307
- Sigstore integration time:
-
Permalink:
yell0wsuit/pyspotlightarchiver@aaa6757ce0eda663692e4ec044ad406005b80391 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/yell0wsuit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yaml@aaa6757ce0eda663692e4ec044ad406005b80391 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyspotlightarchiver-1.1.3-py3-none-any.whl.
File metadata
- Download URL: pyspotlightarchiver-1.1.3-py3-none-any.whl
- Upload date:
- Size: 42.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ada79ea282c136f309c6c39da3b3dbaa1d669839075b0a0932143370f56d83f
|
|
| MD5 |
fcabd2a812aad65c32bc91e14584e7bd
|
|
| BLAKE2b-256 |
d0b903c19d4306dbbc9ef779165c570966e7354f8eae4f11ab7785bb5dfab526
|
Provenance
The following attestation bundles were made for pyspotlightarchiver-1.1.3-py3-none-any.whl:
Publisher:
build.yaml on yell0wsuit/pyspotlightarchiver
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyspotlightarchiver-1.1.3-py3-none-any.whl -
Subject digest:
1ada79ea282c136f309c6c39da3b3dbaa1d669839075b0a0932143370f56d83f - Sigstore transparency entry: 1227121423
- Sigstore integration time:
-
Permalink:
yell0wsuit/pyspotlightarchiver@aaa6757ce0eda663692e4ec044ad406005b80391 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/yell0wsuit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yaml@aaa6757ce0eda663692e4ec044ad406005b80391 -
Trigger Event:
push
-
Statement type: