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".
Analyze a directory of competitor or reference ad creatives. Produce a per-creative JSON analysis and a cross-creative pattern summary.
Expect one of:
.jpg, .jpeg, .png, .webp, .gif) and/or video files (.mp4, .mov, .avi, .webm)metadata.json file in that directory with fields per filename: platform, spend, duration_days, impressions, formatIf 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.
For each image file, use vision/image analysis to evaluate the following.
Assess these five dimensions:
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?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, exclusivitytarget_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)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.
Assess these four dimensions:
Assign a single scale_score representing the ad's viral and engagement potential at scale:
See references/analysis-framework.md for detailed scale score rubric.
Extract:
hook_text — Exact words spoken or shown in the first 3 secondshook_type — One of: question, bold_claim, pain_point, curiosity_gap, social_proof, before_after, demonstrationmain_message — The core value proposition stated in the ademotion_appeal — One of: fear, aspiration, social_proof, urgency, curiosity, humor, trust, belonging, exclusivitycta_text — The exact CTA spoken or showncta_timing — When the CTA appears (e.g., "end", "middle", "repeated throughout")For every creative, regardless of type, record:
filename — The file namead_format — One of: single_image, carousel, video, story, reelaspect_ratio — Detected or inferred (e.g., 1:1, 9:16, 16:9, 4:5)dimensions — Width x height in pixels if detectablead_objective — Inferred from content and CTA: awareness, consideration, or conversionplatform_fit — Which platforms this format and ratio suits best (e.g., ["Instagram Feed", "Facebook Feed"])Output one JSON object per creative. Print all results together in a single JSON array.
{
"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."
}
{
"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"
}
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 adscommon_hooks — List of recurring hook patterns or phrases observedcta_patterns — Most common CTA structures seen (e.g., "verb + free + urgency")dominant_objective — Most common inferred ad objectiveformat_breakdown — Count per ad formatrecommendations — 3-5 actionable observations for improving or scaling these creatives{
"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"
]
}
}
If a file cannot be analyzed (corrupted, unsupported format, too dark/blurry for vision):
"status": "unreadable" and a brief "reason" fieldConsult skills/ad-creative-analysis/references/analysis-framework.md for: