Ad Creative Analysis
Analyze a directory of competitor or reference ad creatives. Produce a per-creative JSON analysis and a cross-creative pattern summary.
Step 1 — Accept Inputs
Expect one of:
- A directory path containing image files (
.jpg, .jpeg, .png, .webp, .gif) and/or video files (.mp4, .mov, .avi, .webm)
- An optional
metadata.json file in that directory with fields per filename: platform, spend, duration_days, impressions, format
If no path is given, ask the user: "Please provide the directory path containing the ad creatives."
List all files in the directory. Separate into image ads and video ads. Log the count of each before proceeding.
Step 2 — Analyze Image Ads
For each image file, use vision/image analysis to evaluate the following.
Design Evaluation
Assess these five dimensions:
- Visual hierarchy — Is the eye drawn to the right element first? Is there a clear focal point?
- Color usage — Does the palette create contrast, evoke emotion, and maintain brand coherence?
- Text overlay readability — Is copy legible at a glance? Font size, contrast, placement?
- CTA prominence — Is the call-to-action visually distinct, clearly placed, and easy to act on?
- Brand consistency — Logo placement, color adherence, font alignment with brand identity.
Image Scores (1-10 each)
attention_grab — How fast and strongly does the creative stop a scroll?
message_clarity — How clearly is the core message communicated without needing context?
cta_strength — How compelling and action-oriented is the CTA?
Image Extraction
Extract:
primary_message — The single core thing this ad is communicating (one sentence)
emotion_appeal — One of: fear, aspiration, social_proof, urgency, curiosity, humor, trust, belonging, exclusivity
target_audience — Inferred from visuals, copy, and context (e.g., "women 25-35 interested in fitness")
hook_text — The first piece of copy the eye lands on (headline or main text)
Step 3 — Analyze Video Ads
For each video file, analyze the video directly using vision. If a transcript file exists alongside the video (same filename, .txt or .srt extension), read and use it.
Video Evaluation
Assess these four dimensions:
- Hook quality (first 3 seconds) — Does it immediately create curiosity, shock, or recognition? Would someone stop scrolling?
- Script structure — Does it follow a logical persuasion arc (problem, solution, proof, CTA)?
- Pacing — Is the editing rhythm appropriate for platform and audience? Not too slow or rushed?
- CTA placement — Is the call-to-action clear, timed well, and repeated if needed?
Video Scale Score (1-10)
Assign a single scale_score representing the ad's viral and engagement potential at scale:
- 9-10: Exceptional hook, tight script, clear CTA. Likely to perform well at high spend.
- 7-8: Strong fundamentals, minor weaknesses. Good candidate for testing.
- 5-6: Average execution. Needs a stronger hook or clearer CTA before scaling.
- 3-4: Core idea present but poor execution. Requires significant rework.
- 1-2: Unlikely to perform. Fundamental issues with hook, message, or CTA.
See references/analysis-framework.md for detailed scale score rubric.
Video Extraction
Extract:
hook_text — Exact words spoken or shown in the first 3 seconds
hook_type — One of: question, bold_claim, pain_point, curiosity_gap, social_proof, before_after, demonstration
main_message — The core value proposition stated in the ad
emotion_appeal — One of: fear, aspiration, social_proof, urgency, curiosity, humor, trust, belonging, exclusivity
cta_text — The exact CTA spoken or shown
cta_timing — When the CTA appears (e.g., "end", "middle", "repeated throughout")
Step 4 — Universal Metadata (All Ad Types)
For every creative, regardless of type, record:
filename — The file name
ad_format — One of: single_image, carousel, video, story, reel
aspect_ratio — Detected or inferred (e.g., 1:1, 9:16, 16:9, 4:5)
dimensions — Width x height in pixels if detectable
ad_objective — Inferred from content and CTA: awareness, consideration, or conversion
platform_fit — Which platforms this format and ratio suits best (e.g., ["Instagram Feed", "Facebook Feed"])
Step 5 — Output Per-Creative JSON
Output one JSON object per creative. Print all results together in a single JSON array.
Image ad example structure
{
"filename": "ad_001.jpg",
"type": "image",
"ad_format": "single_image",
"aspect_ratio": "1:1",
"dimensions": "1080x1080",
"ad_objective": "conversion",
"platform_fit": ["Instagram Feed", "Facebook Feed"],
"scores": {
"attention_grab": 8,
"message_clarity": 7,
"cta_strength": 9
},
"primary_message": "Lose 10kg in 30 days without giving up your favourite food",
"emotion_appeal": "aspiration",
"target_audience": "Women 28-45 who have tried dieting before",
"hook_text": "Still counting calories? There's a better way."
}
Video ad example structure
{
"filename": "ad_002.mp4",
"type": "video",
"ad_format": "video",
"aspect_ratio": "9:16",
"dimensions": "1080x1920",
"ad_objective": "consideration",
"platform_fit": ["TikTok", "Instagram Reels", "Facebook Reels"],
"scale_score": 8,
"hook_text": "I was $40,000 in debt until I found this",
"hook_type": "before_after",
"main_message": "This budgeting app helped me pay off debt in 18 months",
"emotion_appeal": "fear",
"cta_text": "Download free — link in bio",
"cta_timing": "end"
}
Step 6 — Generate Cross-Creative Summary
After analyzing all creatives, produce a summary object appended to the output. Include:
total_analyzed — Count of creatives analyzed (split by type)
top_performers — Filenames of the top 3 creatives by score (images by average score, videos by scale score)
dominant_emotion — Most frequently detected emotion appeal across all ads
common_hooks — List of recurring hook patterns or phrases observed
cta_patterns — Most common CTA structures seen (e.g., "verb + free + urgency")
dominant_objective — Most common inferred ad objective
format_breakdown — Count per ad format
recommendations — 3-5 actionable observations for improving or scaling these creatives
Summary example structure
{
"summary": {
"total_analyzed": { "images": 5, "videos": 3 },
"top_performers": ["ad_004.jpg", "ad_002.mp4", "ad_007.jpg"],
"dominant_emotion": "aspiration",
"common_hooks": [
"Question-based hook challenging a common belief",
"Before/after framing in first sentence"
],
"cta_patterns": [
"Shop now + scarcity signal",
"Free trial + no credit card"
],
"dominant_objective": "conversion",
"format_breakdown": { "single_image": 4, "video": 3, "carousel": 1 },
"recommendations": [
"Hooks are strong but CTAs lack urgency — test adding 'today only' or limited quantity",
"All videos open with talking head — test a demonstration hook for variety",
"Aspiration dominates — test a fear/pain angle to broaden audience response"
]
}
}
Step 7 — Handle Missing or Unreadable Files
If a file cannot be analyzed (corrupted, unsupported format, too dark/blurry for vision):
- Include the filename in the output with
"status": "unreadable" and a brief "reason" field
- Continue analyzing remaining files, do not stop
Reference Material
Consult skills/ad-creative-analysis/references/analysis-framework.md for:
- Detailed scoring rubrics per metric
- Ad psychology pattern definitions
- Hook formula templates
- Extended example output
1---2name: ad-creative-analysis3description: Analyze ad creatives (images and videos) extracted from competitor research. Use when given a directory of ad images, video files, or transcripts to evaluate ad quality, score visual and messaging effectiveness, assign a scale score for viral/engagement potential, and generate a cross-creative pattern summary. Triggered by requests like "analyze these ads", "score these creatives", "what hooks are competitors using", "evaluate the ad library", "give me a scale score", "analyze the ad folder", or "what's working in these ads".4---56# Ad Creative Analysis78Analyze a directory of competitor or reference ad creatives. Produce a per-creative JSON analysis and a cross-creative pattern summary.910## Step 1 — Accept Inputs1112Expect one of:13- A directory path containing image files (`.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`) and/or video files (`.mp4`, `.mov`, `.avi`, `.webm`)14- An optional `metadata.json` file in that directory with fields per filename: `platform`, `spend`, `duration_days`, `impressions`, `format`1516If no path is given, ask the user: "Please provide the directory path containing the ad creatives."1718List all files in the directory. Separate into image ads and video ads. Log the count of each before proceeding.1920## Step 2 — Analyze Image Ads2122For each image file, use vision/image analysis to evaluate the following.2324### Design Evaluation2526Assess these five dimensions:27281. **Visual hierarchy** — Is the eye drawn to the right element first? Is there a clear focal point?292. **Color usage** — Does the palette create contrast, evoke emotion, and maintain brand coherence?303. **Text overlay readability** — Is copy legible at a glance? Font size, contrast, placement?314. **CTA prominence** — Is the call-to-action visually distinct, clearly placed, and easy to act on?325. **Brand consistency** — Logo placement, color adherence, font alignment with brand identity.3334### Image Scores (1-10 each)3536- `attention_grab` — How fast and strongly does the creative stop a scroll?37- `message_clarity` — How clearly is the core message communicated without needing context?38- `cta_strength` — How compelling and action-oriented is the CTA?3940### Image Extraction4142Extract:43- `primary_message` — The single core thing this ad is communicating (one sentence)44- `emotion_appeal` — One of: fear, aspiration, social_proof, urgency, curiosity, humor, trust, belonging, exclusivity45- `target_audience` — Inferred from visuals, copy, and context (e.g., "women 25-35 interested in fitness")46- `hook_text` — The first piece of copy the eye lands on (headline or main text)4748## Step 3 — Analyze Video Ads4950For each video file, analyze the video directly using vision. If a transcript file exists alongside the video (same filename, `.txt` or `.srt` extension), read and use it.5152### Video Evaluation5354Assess these four dimensions:55561. **Hook quality (first 3 seconds)** — Does it immediately create curiosity, shock, or recognition? Would someone stop scrolling?572. **Script structure** — Does it follow a logical persuasion arc (problem, solution, proof, CTA)?583. **Pacing** — Is the editing rhythm appropriate for platform and audience? Not too slow or rushed?594. **CTA placement** — Is the call-to-action clear, timed well, and repeated if needed?6061### Video Scale Score (1-10)6263Assign a single `scale_score` representing the ad's viral and engagement potential at scale:6465- **9-10**: Exceptional hook, tight script, clear CTA. Likely to perform well at high spend.66- **7-8**: Strong fundamentals, minor weaknesses. Good candidate for testing.67- **5-6**: Average execution. Needs a stronger hook or clearer CTA before scaling.68- **3-4**: Core idea present but poor execution. Requires significant rework.69- **1-2**: Unlikely to perform. Fundamental issues with hook, message, or CTA.7071See `references/analysis-framework.md` for detailed scale score rubric.7273### Video Extraction7475Extract:76- `hook_text` — Exact words spoken or shown in the first 3 seconds77- `hook_type` — One of: question, bold_claim, pain_point, curiosity_gap, social_proof, before_after, demonstration78- `main_message` — The core value proposition stated in the ad79- `emotion_appeal` — One of: fear, aspiration, social_proof, urgency, curiosity, humor, trust, belonging, exclusivity80- `cta_text` — The exact CTA spoken or shown81- `cta_timing` — When the CTA appears (e.g., "end", "middle", "repeated throughout")8283## Step 4 — Universal Metadata (All Ad Types)8485For every creative, regardless of type, record:8687- `filename` — The file name88- `ad_format` — One of: single_image, carousel, video, story, reel89- `aspect_ratio` — Detected or inferred (e.g., `1:1`, `9:16`, `16:9`, `4:5`)90- `dimensions` — Width x height in pixels if detectable91- `ad_objective` — Inferred from content and CTA: `awareness`, `consideration`, or `conversion`92- `platform_fit` — Which platforms this format and ratio suits best (e.g., `["Instagram Feed", "Facebook Feed"]`)9394## Step 5 — Output Per-Creative JSON9596Output one JSON object per creative. Print all results together in a single JSON array.9798### Image ad example structure99100```json101{102 "filename": "ad_001.jpg",103 "type": "image",104 "ad_format": "single_image",105 "aspect_ratio": "1:1",106 "dimensions": "1080x1080",107 "ad_objective": "conversion",108 "platform_fit": ["Instagram Feed", "Facebook Feed"],109 "scores": {110 "attention_grab": 8,111 "message_clarity": 7,112 "cta_strength": 9113 },114 "primary_message": "Lose 10kg in 30 days without giving up your favourite food",115 "emotion_appeal": "aspiration",116 "target_audience": "Women 28-45 who have tried dieting before",117 "hook_text": "Still counting calories? There's a better way."118}119```120121### Video ad example structure122123```json124{125 "filename": "ad_002.mp4",126 "type": "video",127 "ad_format": "video",128 "aspect_ratio": "9:16",129 "dimensions": "1080x1920",130 "ad_objective": "consideration",131 "platform_fit": ["TikTok", "Instagram Reels", "Facebook Reels"],132 "scale_score": 8,133 "hook_text": "I was $40,000 in debt until I found this",134 "hook_type": "before_after",135 "main_message": "This budgeting app helped me pay off debt in 18 months",136 "emotion_appeal": "fear",137 "cta_text": "Download free — link in bio",138 "cta_timing": "end"139}140```141142## Step 6 — Generate Cross-Creative Summary143144After analyzing all creatives, produce a `summary` object appended to the output. Include:145146- `total_analyzed` — Count of creatives analyzed (split by type)147- `top_performers` — Filenames of the top 3 creatives by score (images by average score, videos by scale score)148- `dominant_emotion` — Most frequently detected emotion appeal across all ads149- `common_hooks` — List of recurring hook patterns or phrases observed150- `cta_patterns` — Most common CTA structures seen (e.g., "verb + free + urgency")151- `dominant_objective` — Most common inferred ad objective152- `format_breakdown` — Count per ad format153- `recommendations` — 3-5 actionable observations for improving or scaling these creatives154155### Summary example structure156157```json158{159 "summary": {160 "total_analyzed": { "images": 5, "videos": 3 },161 "top_performers": ["ad_004.jpg", "ad_002.mp4", "ad_007.jpg"],162 "dominant_emotion": "aspiration",163 "common_hooks": [164 "Question-based hook challenging a common belief",165 "Before/after framing in first sentence"166 ],167 "cta_patterns": [168 "Shop now + scarcity signal",169 "Free trial + no credit card"170 ],171 "dominant_objective": "conversion",172 "format_breakdown": { "single_image": 4, "video": 3, "carousel": 1 },173 "recommendations": [174 "Hooks are strong but CTAs lack urgency — test adding 'today only' or limited quantity",175 "All videos open with talking head — test a demonstration hook for variety",176 "Aspiration dominates — test a fear/pain angle to broaden audience response"177 ]178 }179}180```181182## Step 7 — Handle Missing or Unreadable Files183184If a file cannot be analyzed (corrupted, unsupported format, too dark/blurry for vision):185- Include the filename in the output with `"status": "unreadable"` and a brief `"reason"` field186- Continue analyzing remaining files, do not stop187188## Reference Material189190Consult `skills/ad-creative-analysis/references/analysis-framework.md` for:191- Detailed scoring rubrics per metric192- Ad psychology pattern definitions193- Hook formula templates194- Extended example output