unsplash-image — Claude Code skill: search and download Unsplash
Searches Unsplash for stock photos, downloads the one it picks, and can stamp a title and subtitle onto the image. Handy when a post or cover needs a picture.
npx skills add OpenClaudia/openclaudia-skills --skill unsplash-image -a claude-code
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a claude-codeWhat unsplash-image does
The skill wraps a script at ~/.agents/tools/unsplash-search.py, which the agent calls with a search query and an output path. You can filter by orientation (landscape, portrait, squarish) or by color, take a random result or the first one, and use --list to see what matched without downloading anything.
Text overlay turns on with --title, and --subtitle rides along with it. The script paints a semi-transparent dark band across the bottom, white title text with a shadow, gray subtitle, and handles word wrapping and font size on its own. That part needs Pillow, so install the dependencies up front: pip install requests Pillow. Skip --title and Pillow is not involved.
The script reads UNSPLASH_CLIENT_ID from ~/.agents/tools/.env. No key, no API calls — check that file first if a search comes back empty. Downloads arrive at "regular" quality, 1080px wide; for anything larger you edit the script to use urls.full or urls.raw. Each run prints the photo URL, the photographer's name, the saved path, and pings Unsplash's download tracking endpoint, since their API terms require attribution.
What it helps with
- find a stock photo from a description and drop it into the project
- build a cover image with a title laid over the photo
- filter results by orientation for a wide banner
- preview matching photos without saving any of them
- get an image into markup without opening a browser
Example prompts for the agent
- find a photo of a coffee shop and save it to ./coffee.jpg
- make a cover: technology image, title "My Post", subtitle "A short description"
- list results for sunset, don't download anything
How to install unsplash-image
1Skills CLI (Vercel)
npx skills add OpenClaudia/openclaudia-skills --skill unsplash-image -a claude-codenpx skills add OpenClaudia/openclaudia-skills --skill stock-images -a claude-code2Manually: put the files in place
~/.claude/skills/stock-images/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/stock-images/
1Skills CLI (Vercel)
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a codex2Manually: put the files in place
.agents/skills/stock-images/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a cursor2Manually: put the files in place
.cursor/skills/stock-images/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install OpenClaudia/openclaudia-skills stock-images2Manually: put the files in place
.github/skills/stock-images/SKILL.md1Skills CLI (Vercel)
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a gemini-cli2Platform CLI
gemini skills install https://github.com/OpenClaudia/openclaudia-skills --path skills/stock-imagesManually: put the files in place
.devin/skills/stock-images/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about unsplash-image
How do I install unsplash-image in Claude?
Run npx skills add OpenClaudia/openclaudia-skills --skill unsplash-image -a claude-code, then npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a claude-code. The skill file lands at ~/.claude/skills/stock-images/SKILL.md.
What does unsplash-image do?
It queries the Unsplash API and downloads the chosen image to a file you name. Pass --title and it also overlays a title, plus a subtitle if you give one.
What do I need before using it?
An UNSPLASH_CLIENT_ID in ~/.agents/tools/.env and the requests library. Text overlay additionally needs Pillow: pip install requests Pillow.
Source text
SKILL.md · MIT
--- name: unsplash-image description: Search for images on Unsplash and download them. Optionally add text overlay (title/subtitle) to the image. Use when the user asks to find a stock photo, search for an image, get an Unsplash image, or download a photo with text. argument-hint: [search query] allowed-tools: Bash(*), Read, Write --- # Unsplash Image Search & Download Search Unsplash for images, download them, and optionally add text overlay. ## Tool Location - Script: `~/.agents/tools/unsplash-search.py` - Env file: `~/.agents/tools/.env` (contains `UNSPLASH_CLIENT_ID`) ## Quick Usage ### Search and download a random matching image ```bash python ~/.agents/tools/unsplash-search.py \ --query "nature landscape" \ --output ./image.jpg ``` ### With orientation filter ```bash python ~/.agents/tools/unsplash-search.py \ --query "coffee shop" \ --orientation landscape \ --output ./coffee.jpg ``` ### With text overlay (title and subtitle) ```bash python ~/.agents/tools/unsplash-search.py \ --query "technology abstract" \ --output ./cover.png \ --title "My Blog Post Title" \ --subtitle "A short description" ``` ### List results without downloading ```bash python ~/.agents/tools/unsplash-search.py \ --query "sunset" \ --list ``` ### Pick the first result instead of random ```bash python ~/.agents/tools/unsplash-search.py \ --query "mountains" \ --pick first \ --output ./mountains.jpg ``` ## CLI Options | Option | Description | |--------|-------------| | `--query, -q` | **(Required)** Search query string | | `--output, -o` | **(Required unless --list)** Output file path | | `--orientation` | Filter: `landscape`, `portrait`, or `squarish` | | `--color` | Color filter (e.g., `blue`, `green`, `red`, `black_and_white`) | | `--pick` | How to select from results: `random` (default) or `first` | | `--title` | Title text to overlay on the image | | `--subtitle` | Subtitle text to overlay (only used with --title) | | `--list` | List search results instead of downloading | | `--count` | Number of results to fetch, max 30 (default: 30) | ## Text Overlay When `--title` is provided, the script adds a text overlay to the bottom portion of the image with: - Semi-transparent dark background behind the text - White title text with shadow - Gray subtitle text (if provided) - Automatic word wrapping and font sizing **Requires Pillow**: `pip install Pillow` ## Dependencies - `requests` (for API calls and image download) - `Pillow` (only needed if using text overlay with `--title`) Install if needed: ```bash pip install requests Pillow ``` ## Output The script prints: - The download URL - Photographer attribution (required by Unsplash) - The saved file path - Confirmation of text overlay if applied ## Notes - Unsplash API guidelines require attribution. The script prints photographer info. - The script triggers Unsplash's download tracking endpoint as required by their API terms. - Images are downloaded at "regular" quality (1080px width). For higher resolution, modify the script to use `urls.full` or `urls.raw`.
© OpenClaudia · MIT · OpenClaudia/openclaudia-skills