DEM0NHUB [ SKILLS FOR CLAUDE ]

pinpin

BY @BAT — 15 DOWNLOADS — DEV

Query and use the user's Pin Pin screenshot/asset library from Claude Code. Pin Pin is a macOS app that stores saved images, GIFs, and videos in a local SQLite database with folders and tags. TRIGGER when the user says "pinpin", "pin pin", "my pins", "from pin pin", "pins tagged X", "screenshots I saved", "images in my pinpin", "grab a gif from pinpin", "what's in pinpin", or otherwise references their saved visual library. Use this before scraping the web — if the user has assets pinned, use them. Supports search by tag, folder, search_term, media_type, and keyword. Returns file paths ready to feed into video editors, Blender, ffmpeg, image tools, or other skills.

CLI INSTALL

curl -sS https://dem0n.vip/s/bat/pinpin/SKILL.md -o ~/.claude/skills/pinpin/SKILL.md --create-dirs

DOWNLOAD ALL gives you a single .zip containing SKILL.md + the tar.gz — drag it into Claude Code in one go.

Sign up to see the full skill

Get the source, install command, comments, and version history

GET AN INVITE

pinpin

Query the user's local Pin Pin library — a macOS screenshot/asset manager that stores pinned images, GIFs, and videos in SQLite.

Before scraping the web or generating new assets, check Pin Pin first. The user curates their library by theme — there's a good chance the aesthetic they're asking for is already pinned.

Database location

Pin Pin writes to one of two locations (check both, prefer the first that exists):

  1. ~/Library/Application Support/pin-pin/data/pinpin.db — shared location (newer versions)
  2. ~/Downloads/Pin Pin 2.app/Contents/Resources/app/data/pinpin.db — bundled DB (older versions)
  3. ~/Downloads/Pin Pin.app/Contents/Resources/app/data/pinpin.db — even older

The helper at scripts/pinpin.py picks the right one automatically.

Schema

pins(id, pin_id, media_type, source_url, media_url, title, search_term, file_path, folder_path, file_size, downloaded_at)
folders(id, path, name, last_used)
tags(id, pin_id, tag)  -- FK to pins.id
  • media_type is one of image, gif, video
  • file_path is the absolute local path to the pinned file
  • folder_path is the directory the user pinned it into
  • search_term is what the user searched for when they saved it (rich signal)
  • tags is a join table — a pin can have many tags

Usage

The helper script handles everything. Pick the invocation for what the user asked for:

List what's in the library

python3 scripts/pinpin.py stats

Returns total pins, breakdown by media_type, folder list, and top tags.

Search

# by tag
python3 scripts/pinpin.py search --tag "cyberpunk" --limit 20

# by keyword (matches title, search_term, tags)
python3 scripts/pinpin.py search --keyword "neon"

# by media type
python3 scripts/pinpin.py search --media gif --limit 50

# by folder
python3 scripts/pinpin.py search --folder "/Users/black/Desktop/Moodboard"

# combine filters (AND)
python3 scripts/pinpin.py search --tag "horror" --media video --limit 10

# random pick (good for generative workflows)
python3 scripts/pinpin.py search --tag "glitch" --random --limit 5

Output is JSON on stdout: [{"id", "file_path", "media_type", "title", "search_term", "folder_path", "tags": [...]}, ...]. Missing files are filtered out automatically.

Just the file paths (for piping into ffmpeg/etc)

Add --paths:

python3 scripts/pinpin.py search --tag "fire" --media gif --paths

Prints one absolute path per line.

Tag management

# add a tag to a pin (by id)
python3 scripts/pinpin.py tag --id 42 --add "moodboard-2026"

# remove a tag
python3 scripts/pinpin.py tag --id 42 --remove "old-tag"

How to use this from other skills/tasks

  • Video generation (visualizer, music-video, etc): call search --tag X --media gif --paths to get a list of files to feed in. The visualizer skill already integrates with Pin Pin directly, but other skills can use this as a source.
  • Image edits (flicky, canvas-design): use search --keyword X --media image --limit 5 then Read the file_path to inspect, and pass to the image pipeline.
  • Moodboards / style refs: use search --folder "/path" to pull an entire curated folder.
  • Finding deep cuts: if the user says "use that one thing I pinned about X", try search --keyword X first. The search_term field often contains the exact phrase the user typed when they saved it.

Behavior rules

  • Always check the DB is present and reachable before reporting empty results. If missing, tell the user to open Pin Pin at least once.
  • Never modify pins / folders tables — only tags is safe to write. The app owns the rest.
  • File paths may be stale (user deleted files outside the app). The helper filters missing paths; callers can trust what comes back exists on disk.
  • If the user asks "what did I pin about X" and results are empty, don't hallucinate — say the library has nothing matching and offer to widen the search.

BADGE

downloads ![downloads](https://dem0n.vip/s/bat/pinpin/badge.svg)

VERSIONS

  • 0.1.0 — 4.5 KB — 95df56425170

COMMENTS (0)

LOGIN TO COMMENT