agentsclimarketplace

Match assets

Skill indranilbanerjee/socialforge/skills/match-assets

Open-source agency-grade social media production plugin — 16 skills, 25 commands, AI image (Nano Banana Pro) + AI video (Kling v3.0 Pro) + C2PA signing (EU AI Act Article 50). Installs on Claude Code, Cowork, Codex, Cursor, Copilot CLI, Antigravity. By Indranil Banerjee (indranil.in).

Install
npx -y skills add indranilbanerjee/socialforge --skill match-assets

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Match brand assets to calendar posts and assign creative modes. Use when: after calendar parsing or asset re-matching.

SKILL.md

3.3 KB, as published. Nobody here has run it

/socialforge:match-assets — Asset Matcher

Match brand assets to parsed calendar posts using the multi-factor scoring algorithm. Assigns one of 4 creative modes per post.

Context efficiency

Asset-heavy skill. Grep before Read the asset catalog (${CLAUDE_PLUGIN_DATA}/<brand>/assets/index.json) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session.

Prerequisites

  • Calendar parsed (calendar-data.json exists)
  • Asset index built (asset-index.json exists)

If either is missing, prompt: "Run /socialforge:parse-calendar first, then /socialforge:index-assets."

The Matching Algorithm

For each post, calculate a multi-factor score against every indexed asset:

FactorWeightWhat It Measures
Tag Overlap30%Post keywords vs asset tags
Suitability Match25%Asset's "suitable_for" vs post context
Content Bucket Match20%Does asset suit this content bucket?
Crop Feasibility15%Can asset be cropped to all required platform ratios?
Freshness Penalty10%Penalize assets used recently this month

Freshness penalty: 0 uses = no penalty | 1 use = score x 0.85 | 2 uses = score x 0.60 | 3+ uses = score x 0.30

Creative Mode Assignment

Score RangeRecommended Mode
> 0.8ANCHOR_COMPOSE or ENHANCE_EXTEND
0.5 - 0.8ENHANCE_EXTEND or STYLE_REFERENCED
0.3 - 0.5STYLE_REFERENCED
< 0.3PURE_CREATIVE

Also selects 2-5 style reference images per post (always fed to AI generation alongside prompts).

Process

  1. Load calendar-data.json and asset-index.json
  2. For each post: extract keywords → score all assets → rank → assign mode
  3. Select style references per post
  4. Generate coverage report

Coverage Report

Asset Matching Complete: 28 posts
  ANCHOR_COMPOSE: 8 posts (direct brand asset matches)
  ENHANCE_EXTEND: 5 posts (asset needs enhancement)
  STYLE_REFERENCED: 9 posts (AI gen guided by brand DNA)
  PURE_CREATIVE: 4 posts (full AI generation)
  CAROUSEL_TEMPLATE: 2 posts (HTML template rendering)

  Asset gaps: 3 posts flagged (should have brand assets but none found)
    - P07: Founder post but no founder photos indexed
    - P14: Product demo but no product screenshots available
    - P22: Office culture post but no office photos

  Top used assets: asset_012 (3 posts), asset_005 (2 posts)
  1. Present for user confirmation — user can override any match
  2. Save to output/{brand}/{YYYY-MM}/asset-matches.json

User Override

For any post, user can:

  • Accept the recommendation
  • Select a different asset: "Use asset_015 for P07"
  • Change creative mode: "Make P14 PURE_CREATIVE instead"
  • Upload a new asset on the spot
  • Skip: "I'll handle P22 manually"

Timeout & Fallback

  • Per-post matching: 5-second timeout. If an asset index is very large (500+ images), process in batches.
  • Show progress: [12/28] Matching Post P12 — best match: asset_023 (score: 0.74, STYLE_REFERENCED)

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.