
Google Image Search
Find, score, and download rights-aware images for articles, decks, or Obsidian notes using Google Custom Search plus LLM picking.
Overview
google-image-search is an agent skill most often used in Grow (also Build docs, Launch distribution) that searches Google images, ranks results with an LLM, and downloads files for articles and notes.
Install
npx skills add https://github.com/glebis/claude-skills --skill google-image-searchWhat is this skill?
- Four modes: simple query, JSON batch config, auto config from term lists, and full Obsidian note enrichment under headin
- Google Custom Search API retrieval with LLM-powered selection via OpenRouter and the llm CLI
- Configurable result count, output directory, and batch workflows for many topics at once
- Designed for technical articles, presentations, and research docs—not generic stock browsing
- Credentials loaded from .env: Google API key, Search CX, and OPENROUTER_API_KEY
- Four documented modes: simple query, batch JSON, config generation from terms, and Obsidian note enrichment
- Default simple-query example uses --num-results 5 with a dedicated --output-dir
Adoption & trust: 528 installs on skills.sh; 249 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are writing or polishing content but waste hours hunting usable images and deciding which search results actually match your section topics.
Who is it for?
Indie publishers, technical bloggers, and Obsidian users who already have Google Custom Search and OpenRouter keys configured.
Skip if: Builders who need generative AI imagery, brand-locked asset libraries, or workflows without outbound API keys and network access.
When should I use this skill?
Finding images for articles, presentations, research documents, or enriching Obsidian notes with relevant visuals.
What do I get? / Deliverables
You end up with downloaded, LLM-filtered images in a chosen folder and optionally enriched Obsidian notes with visuals placed under the right headings.
- Downloaded image files under the specified output directory
- Optional updated Obsidian notes with images inserted below headings
- Batch run logs or configs for multi-topic searches
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Primary shelf is Grow/content because the skill’s payoff is richer published material and note libraries, though it also supports pre-launch asset gathering. Content subphase covers illustration for posts, research write-ups, and knowledge bases—not core product engineering.
Where it fits
Batch-fetch neural-interface diagrams for a series of blog posts from one JSON config.
Attach explanatory hardware photos to internal research notes before sharing a spec.
Pull hero and inline images for a slide deck promoting a new feature.
Prototype landing sections with relevant stock-style imagery while copy is still draft.
How it compares
An API-backed search-and-download pipeline with LLM reranking—not the same as inline DALL·E or Midjourney generation skills.
Common Questions / FAQ
Who is google-image-search for?
Solo builders and researchers who publish articles or maintain Obsidian vaults and want scripted image discovery instead of manual browser search.
When should I use google-image-search?
Use it in Grow/content when illustrating posts or notes, in Build/docs when drafting research, or before Launch/distribution when assembling slides and landing media.
Is google-image-search safe to install?
It requires API keys and network calls to Google and OpenRouter; review the Security Audits panel on this page and keep secrets in .env, never in committed files.
SKILL.md
READMESKILL.md - Google Image Search
# Google Image Search Skill Search for images using Google Custom Search API with intelligent scoring and LLM-based selection. ## When to Use - Finding images to illustrate technical articles or research - Adding visuals to presentations - Enriching Obsidian notes with relevant images - Batch image search for multiple topics - Generating image search configs from plain text lists ## Requirements - Google Custom Search API key and Search Engine ID - OpenRouter API key (for LLM selection) - llm CLI installed at `/opt/homebrew/bin/llm` Store credentials in `.env`: ``` Google-Custom-Search-JSON-API-KEY=your_key Google-Custom-Search-CX=your_cx OPENROUTER_API_KEY=your_openrouter_key ``` ## Modes of Operation ### 1. Simple Query Search for a single term: ```bash python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \ --query "neural interface wearable device" \ --output-dir ./images \ --num-results 5 ``` ### 2. Batch Processing Process multiple queries from JSON config: ```bash python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \ --config image_queries.json \ --output-dir ./images \ --llm-select ``` ### 3. Generate Config from Terms Create JSON config from a list of terms using LLM: ```bash python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \ --generate-config \ --terms "AlterEgo wearable" "sEMG electrodes" "BCI headset" \ --output my_queries.json ``` ### 4. Enrich Obsidian Note Extract visual terms from note, find images, and insert below headings: ```bash python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \ --enrich-note ~/Brains/brain/Research/neural-interfaces.md ``` This mode: 1. Detects Obsidian vault and attachments folder 2. Uses LLM to extract visual-worthy terms from note 3. Searches for images for each term 4. Downloads best images to attachments folder 5. Inserts image embeds below relevant headings 6. Creates backup before modifying note ## Key Options | Option | Description | |--------|-------------| | `--query TEXT` | Simple single query | | `--config FILE` | JSON config for batch | | `--generate-config` | Generate config from `--terms` | | `--enrich-note FILE` | Enrich Obsidian note | | `--output-dir DIR` | Where to save images | | `--urls-only` | Return URLs only, no download | | `--llm-select` | Use LLM to pick best image (default: on) | | `--no-llm-select` | Disable LLM selection | | `--num-results N` | Results per query (default: 5) | | `--dry-run` | Show what would be done | ## JSON Config Format Each entry supports: ```json { "id": "unique-id", "heading": "Display Heading", "description": "Context for what image to find", "query": "Google search query", "numResults": 5, "selectionCriteria": "What makes a good image", "requiredTerms": ["must", "have"], "optionalTerms": ["bonus", "terms"], "excludeTerms": ["stock", "clipart"], "preferredHosts": ["official-site.com"], "selectionCount": 2 } ``` See `references/api_config_reference.md` for full documentation. ## Scoring System Images are scored based on: - **Required terms**: -80 if missing, +30 if all present - **Optional terms**: +5 per match - **Exclude terms**: -50 per match - **Preferred hosts**: +25 if trusted, -5 if unknown - **MIME type**: +5 for PNG/JPEG, -10 for GIF - **Resolution**: +10 for high res, -10 for low res - **File size**: -5 if very small ## LLM Selection After scoring, LLM picks the best image from top candidates based on: - Title and UR