{"slug":"getpix","title":"getpix","summary":"Search and fetch free, licensed stock images from the internet (Pexels, Pixabay, Unsplash, Openverse, Wikimedia Commons). Two jobs: add optimized WebP images to sites, blogs, and docs, or show a fitting photo right in the chat while answering about a topic. Use when the user want","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T16:57:57.646214Z","repo":{"url":"https://github.com/smk-labs/claude-plugins","stars":11,"forks":1,"license":"MIT","updatedAt":"2026-09-27T07:01:05Z"},"bodyHtml":"<hr>\n<h2>name: getpix\ndescription: Search and fetch free, licensed stock images from the internet (Pexels, Pixabay, Unsplash, Openverse, Wikimedia Commons). Two jobs: add optimized WebP images to sites, blogs, and docs, or show a fitting photo right in the chat while answering about a topic. Use when the user wants to find, download, insert, or see a real photo, e.g. \"find an image of X\", \"show me a photo of X\", \"add a hero photo\", \"getpix\", or Persian requests like \"عکس پیدا کن\" / \"عکسشو نشونم بده\" / \"عکس بذار\". Also use proactively when a photo would genuinely help an answer (a place, animal, object, dish). Not for AI image generation.</h2>\n<h1>getpix</h1>\n<p>Find a good free image, then either show it in the chat or install it into a project. Everything goes through one script; never call the image APIs yourself and never dump raw API JSON into context.</p>\n<p>Script: <code>${CLAUDE_PLUGIN_ROOT}/scripts/getpix.sh</code></p>\n<h2>Show in chat (no project file involved)</h2>\n<p>When the user just wants to see an image, or a photo would make an answer clearer:</p>\n<ol>\n<li><code>search \"english words\" -n 5</code></li>\n<li><code>thumb N</code> for the most promising result; it prints a local file path.</li>\n<li>Read that file: it renders inline in the conversation for the user. If it is clearly wrong, try one other candidate, then stop.</li>\n<li>Under it, give a one-line source note: title, creator, source, license (all already in the search output). No <code>get</code>, no optimization needed.</li>\n</ol>\n<p>Cost: one search plus 1 to 2 thumbnails. Do this proactively when it genuinely helps, not on every reply.</p>\n<h2>Insert into a project (site, blog, docs)</h2>\n<ol>\n<li><strong>Query in English, 2 to 4 concrete words.</strong> Stock APIs are English-centric: translate the user's request first (\"قهوه و لپتاپ\" becomes <code>laptop coffee desk</code>). Prefer subject + setting over abstract words.</li>\n<li><strong>Search:</strong>\n<pre><code>bash \"${CLAUDE_PLUGIN_ROOT}/scripts/getpix.sh\" search \"laptop coffee desk\" -n 5 -o landscape\n</code></pre>\nOutput is a compact numbered list: source, dimensions, license, title, creator. Sources without keys are skipped automatically; Openverse and Wikimedia always work keyless.</li>\n<li><strong>Pick.</strong>\n<ul>\n<li><strong>Fast mode (default):</strong> choose from the metadata alone: dimensions fit the slot, license is easy, title/alt matches the topic. Spend zero images.</li>\n<li><strong>Picky mode</strong> (user asked for \"best\", \"beautiful\", a hero image, or the pick really matters): preview at most 2 to 3 candidates:\n<pre><code>bash \"${CLAUDE_PLUGIN_ROOT}/scripts/getpix.sh\" thumb 3   # prints a local file path\n</code></pre>\nRead each printed file, judge subject, composition, and whether colors fit the site, then pick.</li>\n</ul>\n</li>\n<li><strong>Fetch and optimize</strong> (only the chosen one; never download originals of the losers):\n<pre><code>bash \"${CLAUDE_PLUGIN_ROOT}/scripts/getpix.sh\" get 3 -d ./public/images -w 1600 --name coffee-desk-hero\n</code></pre>\nThe script downloads a reasonably sized variant, converts to WebP (magick, else cwebp, else JPEG via sips), and never upscales. Widths: content 1200 to 1600, hero 1920, card/thumb 640.</li>\n<li><strong>Insert.</strong> Use the printed path. Write a descriptive <code>alt</code> (the printed alt suggestion is a starting point), add <code>loading=\"lazy\"</code> below the fold, and set width/height if the framework wants them.</li>\n<li><strong>Attribution.</strong> The <code>get</code> output says exactly what each source needs. Pexels and Pixabay: none required. Unsplash: required, add the credit line near the image or in the page footer. Openverse and Wikimedia: follow the printed license line. Never skip a printed \"REQUIRED\" attribution.</li>\n</ol>\n<h2>Token and speed rules</h2>\n<ul>\n<li>One search is usually enough. If results are bad, reword once (different nouns), do not loop.</li>\n<li>Preview at most 3 thumbnails per request, whatever the mode.</li>\n<li>Never <code>cat</code> the raw JSON in <code>${TMPDIR}/getpix/</code>; the script's stdout is the only interface.</li>\n<li>If a <code>get</code> fails with a slow-origin error, take the next candidate instead of retrying the same one.</li>\n</ul>\n<h2>Running several at once</h2>\n<p>getpix stores search results in one cache file. Two runs that share it overwrite each other, so <code>get 3</code> quietly downloads the other run's third result. When several agents or workers use getpix at the same time, give each one its own session id:</p>\n<pre><code>export GETPIX_SESSION=hero-coffee    # e.g. the slug this worker owns\n</code></pre>\n<p>Or per command: <code>search \"...\" --session hero-coffee</code>, then <code>get 1 --session hero-coffee</code>. Ids keep letters, digits, dot, dash and underscore; anything else is replaced.</p>\n<ul>\n<li>One id per worker, on every getpix call that worker makes. The same id on two workers is the same bug again.</li>\n<li><code>get</code> prints the search it resolved against: <code>from search \"espresso crema\" (5 results)</code>. If that names a query you did not ask for, the cache was shared.</li>\n<li>Each session leads with a different source, so a fleet spreads its downloads over the five APIs instead of aiming them all at one. To spread the search calls too, pin a different <code>-s</code> per worker.</li>\n<li>Session dirs under <code>${TMPDIR}/getpix/</code> are swept after a day. Nothing to clean up by hand.</li>\n</ul>\n<h2>Keys (all free, all optional)</h2>\n<table>\n<thead>\n<tr>\n<th>Env var</th>\n<th>Where</th>\n<th>Free limit</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>PEXELS_API_KEY</code></td>\n<td>pexels.com/api</td>\n<td>200/hour</td>\n</tr>\n<tr>\n<td><code>PIXABAY_API_KEY</code></td>\n<td>pixabay.com/api/docs</td>\n<td>100/min</td>\n</tr>\n<tr>\n<td><code>UNSPLASH_ACCESS_KEY</code></td>\n<td>unsplash.com/developers</td>\n<td>50/hour (demo)</td>\n</tr>\n<tr>\n<td>none needed</td>\n<td>Openverse</td>\n<td>~200/day anonymous</td>\n</tr>\n<tr>\n<td>none needed</td>\n<td>Wikimedia Commons</td>\n<td>generous</td>\n</tr>\n</tbody>\n</table>\n<p>No keys at all still works (Openverse + Wikimedia). With keys, quality and volume improve; <code>sources</code> subcommand shows what is active. If every source errors, tell the user which env var to check instead of retrying.</p>\n","files":[{"path":"SKILL.md","sizeBytes":5352,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-27T19:36:56.245293Z","sha256":"E13A16669F6E213750925F3BC3D5AB2794FCCD492035EBCEA32CDCE72FC2B488","sizeBytes":2824},"review":null,"source":{"repositoryUrl":"https://github.com/smk-labs/claude-plugins","path":"getpix/skills/getpix","license":"MIT","commit":"c8619ef5a89122c25c24f81ad34180461d6d15ca","subtreeSha":"DCF76EC39E5CF26BCB993A61D6A79E9501345902B777584134F568CEBDD0EAB4","lastSyncedAt":"2026-09-27T19:34:11.035739Z"},"reviewedAt":"2026-09-27T19:42:51.124396Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/smk-labs/claude-plugins/tree/main/getpix/skills/getpix"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install smk-labs-claude-plugins@llmmart"},{"target":"git","command":"git clone https://github.com/smk-labs/claude-plugins.git"}]}