Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add OpenClaudia/openclaudia-skills --skill unsplash-image -a claude-code
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a claude-code
Open on GitHub

What 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-code
npx skills add OpenClaudia/openclaudia-skills --skill stock-images -a claude-code

2Manually: put the files in place

~/.claude/skills/stock-images/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/stock-images/

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

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set50

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor