Skills / Skills / Mimic Analyze Template
All skills

/ skill

mimic-analyze-template

Skills/mimic-analyze-template.md

Vision-analyze a static Meta ad image and write a reusable AdTemplate to Wiki/Mimic/Templates/

Open as raw file

Run this skill

Heads up — this skill doesn’t have a structured form yet, so type the full prompt with all decisions baked in (the subprocess can’t answer follow-up questions). Edit me if needed.

Runs with bypassPermissions — local dev only.

mimic-analyze-template

You are decomposing a proven static Meta ad into a reusable AdTemplate. The output is structured JSON that downstream /mimic generate calls will fill in with brand-specific values.

Inputs

  • image — local file path (relative to vault root) OR hosted URL
  • display_name — human-readable template name
  • slug — pre-computed kebab-case slug (caller already deduped)
  • source_brand — optional brand name (best-guess if not supplied)

Step 1 — Read the image

If image is a local path: Read it directly. Claude Code reads images visually as multimodal input.

If image is a URL: include it in your prompt as a markdown image reference, OR download it first via Bash curl into /tmp/mimic-input-{slug}.png and Read from there.

Step 2 — Produce the AdTemplate JSON

Internally generate JSON matching this schema (controlled vocabularies are STRICT — pick exactly one value per enum):

{
  "source_brand": "string (best guess from logo/wordmark, '' if none)",
  "layout": {
    "aspect_ratio": "1:1 | 9:16 | 4:5 | 16:9 | 3:4 | other",
    "composition": "string (e.g. 'split-vertical-image-top-text-bottom')",
    "primary_focal_point": "string",
    "visual_hierarchy": ["ordered list of what eye lands on"],
    "color_palette": ["hex codes, 2-6 entries"],
    "typography_style": "string"
  },
  "copy": {
    "headline":    { "text": "...", "treatment": "...", "placement": "..." },
    "subheadline": { "text": "...", "treatment": "...", "placement": "..." },
    "body": "string (or '')",
    "badges": [{ "text": "...", "treatment": "...", "placement": "..." }],
    "cta":         { "text": "...", "treatment": "...", "placement": "..." },
    "disclaimers": ["..."]
  },
  "persuasion": {
    "hook_type": "problem-agitation | before-after | transformation | curiosity | status | scarcity | social-proof | contrast | fear-removal | identity-signal | founder-story | listicle | comparison | callout",
    "awareness_stage": "unaware | problem-aware | solution-aware | product-aware | most-aware",
    "emotional_trigger": "string",
    "offer_framing": "string (e.g. 'discount-first', 'transformation', 'free-trial', 'bundle')",
    "proof_elements": ["list"]
  },
  "compliance": {
    "risk_level": "low | medium | high",
    "risk_factors": ["..."],
    "notes": "string"
  },
  "template_logic": {
    "editable_fields": [
      { "name": "lowercase_snake_case", "type": "text | image | color | number", "description": "...", "max_length": 60 }
    ],
    "locked_structural_elements": ["..."],
    "best_use_cases": ["..."],
    "required_inputs": ["..."],
    "brand_adaptation_rules": "multi-line string"
  },
  "image_prompt_template": "templated prompt with {placeholder} variables aligned to brand DNA fields (brand_imagery_style, brand_palette, brand_mood, hero_image_subject, etc.) so it stays brand-portable"
}

Rules:

  • Flag anything that looks like a health, financial, weight-loss, or income claim as risk_level: medium or high.
  • editable_fields should reflect what a designer would tweak per-iteration (headline, hero_image, badge_text, cta_text, brand_color_primary).
  • locked_structural_elements is what makes the template recognizable — don't list editable fields here.
  • Use empty arrays / empty strings rather than null. js-yaml refuses to serialize undefined.

Step 3 — Write the template

Build the full AdTemplate object with metadata:

type: ad-template
slug: {slug}
display_name: {display_name}
source_image_path: data/mimic/templates/{slug}.{ext}   # only if image was a local file copied to supernova-ui/data/mimic/templates/
source_image_url: {url}                                 # only if image was a URL
source_brand: {source_brand or extracted}
created: {now ISO 8601}
last_updated: {now ISO 8601}
analyzed_with: claude-opus-4-7
analyzed_at: {now ISO 8601}
layout: {...}
copy: {...}
persuasion: {...}
compliance: {...}
template_logic: {...}
image_prompt_template: "..."

Write to Wiki/Mimic/Templates/{slug}.md. The body markdown is just a one-paragraph human summary — frontmatter is the contract.

Step 4 — Copy the source image (only if local file input)

mkdir -p /Users/doorsy/Desktop/supernova/supernova-ui/data/mimic/templates
cp "{absolute_image_path}" /Users/doorsy/Desktop/supernova/supernova-ui/data/mimic/templates/{slug}.{ext}

This is what the dashboard's image endpoint will serve.

Step 5 — Log

Invoke Skills/log-operation.md with operation mimic-analyze-template, slug {slug}, source {path or URL}, hook_type, awareness_stage, risk_level.

Report to Adam

✓ Saved template at Wiki/Mimic/Templates/{slug}.md
   hook: {hook_type} · awareness: {awareness_stage} · risk: {risk_level}
   editable fields: {n}
Try: /mimic generate template={slug} brief={brief_slug} ...