glebis/google-image-search
Search and download images via Google Custom Search API with LLM-powered selection. This skill should be used when finding images for articles, presentations, research documents, or enriching Obsidian notes with relevant visuals. Supports simple queries, batch processing from JSON config, automatic config generation from terms, and full note enrichment with automatic image insertion below headings.
npx skills add https://github.com/glebis/claude-skills --skill google-image-search
Search for images using Google Custom Search API with intelligent scoring and LLM-based selection.
/opt/homebrew/bin/llmStore credentials in .env:
Google-Custom-Search-JSON-API-KEY=your_key
Google-Custom-Search-CX=your_cx
OPENROUTER_API_KEY=your_openrouter_key
Search for a single term:
python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \
--query "neural interface wearable device" \
--output-dir ./images \
--num-results 5
Process multiple queries from JSON config:
python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \
--config image_queries.json \
--output-dir ./images \
--llm-select
Create JSON config from a list of terms using LLM:
python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \
--generate-config \
--terms "AlterEgo wearable" "sEMG electrodes" "BCI headset" \
--output my_queries.json
Extract visual terms from note, find images, and insert below headings:
python3 ~/.claude/skills/google-image-search/scripts/google_image_search.py \
--enrich-note ~/Brains/brain/Research/neural-interfaces.md
This mode:
| 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 |
Each entry supports:
{
"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.
Images are scored based on:
After scoring, LLM picks the best image from top candidates based on:
The LLM evaluates authenticity, clarity, and relevance for technical audiences.
When in an Obsidian vault:
.obsidian folderAttachments)![[image.png|alt text]]| File | Purpose |
|------|---------|
| google_image_search.py | Main entry point |
| api.py | Google Custom Search API |
| config.py | Credentials and config handling |
| download.py | Image download with magic bytes |
| evaluate.py | Keyword-based scoring |
| llm_select.py | LLM selection and term extraction |
| obsidian.py | Vault detection and enrichment |
| output.py | Markdown output generation |
Take glebis/google-image-search from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.