adapt-copy
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Index the brand photo library with AI vision so assets are searchable and matchable. \"catalogue our brand photos\"
Claude Code
$ npx -y skills add indranilbanerjee/socialforge --skill index-assets --agent claude-code
Codex
$ npx skills add indranilbanerjee/socialforge --skill index-assets -a codex -y
Cursor
$ npx skills add indranilbanerjee/socialforge --skill index-assets -a cursor -y
Gemini CLI
$ npx skills add indranilbanerjee/socialforge --skill index-assets -a gemini-cli -y
GitHub Copilot
$ npx skills add indranilbanerjee/socialforge --skill index-assets -a github-copilot -y
OpenCode
$ npx skills add indranilbanerjee/socialforge --skill index-assets -a opencode -y
Windsurf
$ npx skills add indranilbanerjee/socialforge --skill index-assets -a windsurf -y
name: index-assets description: "Index the brand photo library with AI vision so assets are searchable and matchable. \"catalogue our brand photos\"" argument-hint: "<brand-name> [--source <path>] [--refresh]" effort: high user-invocable: true
> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skills/`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).
Scan a brand's photo library and create an AI-powered asset index. Each image is analyzed by a vision model, chosen from your Google key's own model list (see "Which model" below), to understand what's in it, what mood it conveys, what posts it's suitable for, and how it can be cropped for different platforms.
Asset-heavy skill. **Grep before Read** the asset catalog (`${CLAUDE_PLUGIN_DATA}/socialforge/brands/<brand>/asset-index.json`) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session.
1. **Locate assets** — Read asset-source.json for the brand's photo library location 2. **Scan files** — Find all .jpg, .jpeg, .png, .webp files in the source 3. **AI analysis** — For each image, use the vision model chosen for the run (decided once, before the first image) to generate:
4. **Build index** — Create asset-index.json with all analyzed assets 5. **Identify style references** — Suggest 2-8 images as style reference candidates (best represent the brand's visual DNA)
The script decides the model once per run and never swaps one silently. In order:
1. **The brand's pin** — `model_pins["index-assets.vision.google"]` in the brand's `brand-config.json` (see `references/brand-config-schema.md`). Pin when a library must stay analysed by one model so its tags remain comparable. 2. **`--model <id>`** — for one run. 3. **The router** — `scripts/model_router.py` reads the models your `GEMINI_API_KEY` can use (one list call at most every 7 days) and takes the newest generally available Flash-class model. Previews, "latest" aliases, lite, image, speech and live variants, models shut down or redirected, and models younger than 14 days are never picked. 4. **The registry alias `latest-vision-google`**, tagged `offline` — when the list cannot be read, `MODEL_ROUTER_OFFLINE=1` is set, or Vertex AI serves the run (its catalogue is not the Gemini API's list).
A pin or `--model` is a name asked for: a deprecated model is kept with a warning that names its retirement date and replacement; a retired one stops the run (exit 2, nothing sent) and names the replacement. That holds offline too: with no list to read, the name is checked against the shipped registry and the hint book's record of Google's deprecations page, and the stricter wins. On a Vertex AI run neither applies (Vertex retires models on its own schedule), so the name is sent as asked and the run says it was not checked. A rejected key stops the run the same way. `index_assets.py --brand <brand> --show-model` prints the decision and stops. `asset-index.json` then records `vision_model` (what was asked, what was sent, the basis `live`, `cache`, `requested` or `offline`, the source and the time) and, on each analysed asset, `analysis_model` and `analyzed_at`, so a refresh that mixes models says so.
Before indexing, verify:
If asset source is not configured:
⚠️ No asset source configured for brand "{brand}".
Run /socialforge:brand-setup {brand} --update to add an asset source.
Or provide a path now: /socialforge:index-assets {brand} --source /path/to/photos[1/4] Scanning asset source... Found: 47 images (32 .jpg, 12 .png, 3 .webp) [2/4] Analyzing images with AI Vision... Analyzed: 12/47 (25%) — ~3 min remaining Analyzed: 24/47 (51%) — ~2 min remaining Analyzed: 47/47 (100%) ✓ [3/4] Building asset index... Tags generated: 184 unique tags across 47 assets Platform crops: 47 images × 6 platforms = 282 crop assessments [4/4] Identifying style reference candidates... Top 8 candidates selected based on visual consistency and quality
Asset Index Complete: acme-corp
Total assets: 47
Categories: people (12), products (8), office (6), events (5), lifestyle (9), graphics (7)
Background-removable: 23 assets (suitable for ANCHOR_COMPOSE mode)
Style reference candidates: 8 images suggested
Saved: ${CLAUDE_PLUGIN_DATA}/socialforge/brands/acme-corp/asset-index.json
Would you like to:
- Review style reference candidates? (I'll show all 8 with descriptions)
- Start monthly production? (/socialforge:new-month)
- Update specific assets? (/socialforge:index-assets acme-corp --source /path/to/photos --refresh)`/socialforge:index-assets [brand] --source <path> --refresh`
`--source` may be omitted on a refresh: the script reuses the source rec
Your client wants 30 days of social content across six platforms with brand-faithful imagery, AI-generated video, and provenance signed for EU markets. You have five days.
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Assemble the month-end delivery manifest: approved posts, copy, files and metadata as one JSON. \"build the delivery manifest\"
Set up or update a brand profile: colors, fonts, logo, voice, platforms, compliance rules. \"update our brand colors\"
Build the shareable HTML review gallery of every generated post for team or client. \"make me a gallery page\"
Embed C2PA content credentials and an AI-disclosure record in AI-generated assets. \"sign these images for AI disclosure\"
Compose just the creative (image or video) for a calendar post, in four modes. \"make the visual for this post\"
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…