Agent skill
generate-ad-creative
End-to-end ad creative generation for Clarido — from performance analysis to rendered video variants. Use when creating new ad creatives, video ads, or marketing content.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/generate-ad-creative
SKILL.md
Generate New Ad Creative
End-to-end workflow for generating new Clarido ad creatives. Invoked by the user with /generate-ad-creative.
This skill covers the full pipeline: analyzing existing ad performance, generating two creative concepts (explore vs exploit), producing multiple asset variants, composing in Remotion, rendering final outputs, and documenting everything for auditability.
Workflow Overview
Phase 1: Performance Analysis & Concept Generation
Phase 2: User Selection
Phase 3: Asset Generation (multiple variants)
Phase 4: Remotion Composition & Rendering
Phase 5: Output Packaging & Documentation
Phase 1: Performance Analysis & Concept Generation
Step 1.1 — Pull Current Ad Performance
Use the Meta Marketing API to pull performance data for all active and recent campaigns.
# Key metrics to pull per ad:
# - CTR (click-through rate)
# - CPL (cost per lead) or CPA (cost per action)
# - ROAS (if applicable)
# - Video metrics: ThruPlay rate, video_p25/p50/p75/p100 (retention curve)
# - Spend, impressions, reach, frequency
# - Creative type (video, image, carousel)
# - Ad copy / headline
# - Audience targeting summary
# - Date range active
Use the Meta Marketing API credentials from .env:
META_ACCESS_TOKEN,META_AD_ACCOUNT_ID(act_217614761779242)- API version: v21.0
- Currency: CAD
Pull data at the ad level (not campaign or ad set) to evaluate individual creatives.
Step 1.2 — Analyze & Identify Patterns
Analyze the data to identify:
- Top performers: Which creatives have the best CTR, lowest CPL, highest retention?
- Creative patterns: What emotional hooks, visual styles, lengths, and formats work?
- Audience patterns: Which targeting is working best?
- Drop-off patterns: Where do viewers stop watching? (use video percentile metrics)
- Gaps: What emotional angles or formats haven't been tested yet?
Step 1.3 — Generate Two Creative Concepts
Present two concepts to the user:
Concept A: Exploration (new territory)
- A creative that tests a new emotional angle, visual style, or format not yet represented in the account
- Should be informed by what's working but deliberately different
- Higher risk, higher potential upside
- Include:
- Creative brief (hook, narrative arc, CTA)
- Visual style description
- Recommended duration (justify with retention data)
- Audience targeting recommendation
- Test plan: what metric will determine success, what's the minimum spend to validate, what's the kill criteria
Concept B: Exploitation (iterate on what works)
- A creative that is a close variant of the best-performing existing ad
- Change ONE variable: different hook, different visual treatment, different CTA, different pacing
- Lower risk, reliable baseline
- Include:
- What existing ad it's based on and what's being changed
- Creative brief
- Audience targeting (same as original or slight variation to test)
- Test plan: A/B framework against the original, success criteria
Present both concepts clearly with a recommendation, then ask the user which to proceed with. Allow the user to modify the concept before proceeding.
Phase 2: User Selection
Ask the user to choose Concept A or B (or provide modifications). Once confirmed, proceed to asset generation.
Phase 3: Asset Generation (Multiple Variants)
Step 3.1 — Generate Video Clips (up to 3 variants)
Use Fal AI to generate video clips. Generate up to 3 variants with different prompts or parameters to give the user options.
- Use Kling V3 Pro for best quality:
fal-ai/kling-video/v3/pro/text-to-video - Use the queue API (submit → poll → download) since video generation takes 2-5 minutes
- Generate all variants in parallel to minimize wait time
- Default: 5 seconds, 1:1 aspect ratio, no audio
- Save to
videos/public/with descriptive names:{concept-name}-clip-v1.mp4,-v2.mp4,-v3.mp4
Cost awareness: Each 5s Kling V3 Pro clip costs ~$1.12 (no audio). 3 clips = ~$3.36.
Step 3.2 — Generate Background Music (3-5 variants)
Use ElevenLabs Music API (POST /v1/music) to generate background music variants.
- Generate 3-5 variants with different prompts exploring different moods/instruments
- Each should match the ad's emotional arc (e.g., tense → calm, energetic → resolved)
- Set
force_instrumental: trueandmusic_length_msto match ad duration - Save as
{concept-name}-music-v1.mp3,-v2.mp3, etc.
If ElevenLabs music fails (402), fall back to Fal AI Beatoven (beatoven/music-generation).
Step 3.3 — Generate Sound Effects
Use ElevenLabs Sound Generation (POST /v1/sound-generation) for any needed SFX:
- Transition sounds, pop-ins, whooshes, etc.
- Keep duration short (0.3-1.0 seconds)
- Save to
videos/public/
Phase 4: Remotion Composition & Rendering
Step 4.1 — Name the Composition
Naming is critical. Every ad lives in videos/src/ alongside all others and appears in the Remotion Studio sidebar. Names must be descriptive enough to identify the creative at a glance months later.
Naming convention: {Scenario}{Style} in PascalCase.
- Scenario: The specific situation or emotional hook (not a generic category)
- Style: The visual treatment or format
Good names:
OverwhelmedInBedRealistic— person in bed, realistic AI videoFounderAtDinnerClay— founder checking phone at dinner, clay animation styleMorningJournalWatercolor— morning journaling scene, watercolor illustrationThreeAmThoughtSpiral— 3am anxiety thought cascadeTodoListAvalanche— to-do list growing out of controlParkBenchReflection— calm reflection moment on a park bench
Bad names (too vague):
OverwhelmAd— which overwhelm ad? What style?NewAd— meaninglessVideoV2— no contextLeadsCampaign— describes the objective, not the creative
The name flows through everything:
- Directory:
videos/src/OverwhelmedInBedRealistic/ - Composition IDs:
OverwhelmedInBedRealistic-Square,OverwhelmedInBedRealistic-Vertical - Folder in Remotion Studio sidebar:
OverwhelmedInBedRealistic - Output directory:
videos/out/2026-02-16_10-30-00-000_OverwhelmedInBedRealistic/ - Asset file prefixes:
overwhelmed-in-bed-realistic-clip-v1.mp4
Step 4.2 — Build the Composition
Create the directory under videos/src/{AdName}/.
Follow Remotion best practices (see videos/.claude/skills/remotion/ rules):
- All animations via
useCurrentFrame()+interpolate()/spring()— NO CSS animations - Use
<Sequence>withpremountForfor timing - Use
<Audio>and<Video>from@remotion/media - Use
staticFile()for assets invideos/public/ - Brand style: black/white with yellow (
#FFD60A) accent - Font: system font stack (
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif)
Structure:
videos/src/{AdName}/
├── config.ts # Timing, constants, text content
├── index.tsx # Main composition (layers video, overlays, audio)
├── [Components].tsx # Scene-specific components
Register in videos/src/Root.tsx:
- Square format:
{AdName}-Square(1080x1080) - Vertical format:
{AdName}-Vertical(1080x1920) - Group in a
<Folder>using the same{AdName}
Step 4.2 — Render All Combinations
For the user-selected video clip and music track, render both formats:
cd videos
npx remotion render {AdName}-Square out/{output-dir}/square.mp4
npx remotion render {AdName}-Vertical out/{output-dir}/vertical.mp4
If the user wants to compare multiple video/music combos, render the preferred combinations.
Phase 5: Output Packaging & Documentation
Output Directory Structure
Every generation run produces a timestamped directory:
videos/out/{YYYY-MM-DD_HH-MM-SS-mmm}_{ad-name}/
├── square.mp4 # 1080x1080 render
├── vertical.mp4 # 1080x1920 render
├── assets/
│ ├── clip-v1.mp4 # Video variant 1
│ ├── clip-v2.mp4 # Video variant 2
│ ├── clip-v3.mp4 # Video variant 3
│ ├── music-v1.mp3 # Music variant 1
│ ├── music-v2.mp3 # Music variant 2
│ ├── music-v3.mp3 # Music variant 3
│ └── sfx/ # Sound effects used
│ └── pop.mp3
├── BRIEF.md # Creative brief & documentation
└── performance-snapshot.json # Ad performance data at time of generation
BRIEF.md Contents
The brief must document:
# {Ad Name} — Creative Brief
**Generated**: {timestamp}
**Concept type**: Exploration / Exploitation
**Based on**: {if exploitation, which existing ad and what was changed}
## Performance Context
- Top performing ad at time of generation: {name}, {CTR}%, {CPL}
- Account-wide averages: {CTR}%, {CPL}
- Key insight that informed this creative: {insight}
## Creative Concept
- **Hook** (0-3s): {description}
- **Narrative** (3-Xs): {description}
- **Resolution/CTA** (X-end): {description}
- **Duration**: {X}s (rationale: {why this length})
- **Format**: Video with text overlays, no voiceover / with voiceover
## Visual Style
{Description of the visual approach}
## Audio
- **Background music**: {description of selected track}
- **SFX**: {what sounds are used and when}
## Ad Copy (for Meta)
- **Primary text**: {suggested ad copy}
- **Headline**: {headline}
- **CTA button**: {Learn More / Sign Up / Download / etc.}
## Audience Targeting
- **Interests**: {list}
- **Demographics**: {age, gender, location}
- **Lookalike**: {if applicable}
- **Exclusions**: {existing customers, etc.}
## Test Plan
- **Objective**: {Leads / App Installs / Link Clicks}
- **Budget**: ${X}/day for {Y} days
- **Success metric**: {CTR > X% / CPL < $Y}
- **Kill criteria**: {If CPL > $Z after ${A} spend, pause}
- **What we're testing**: {the specific hypothesis}
## Asset Variants Generated
- Video clips: {count} variants
- Music tracks: {count} variants
- Selected combination: clip-v{X} + music-v{Y}
## Rendering
- Square (1080x1080): square.mp4
- Vertical (1080x1920): vertical.mp4
- Codec: H.264
- FPS: 30
performance-snapshot.json
Save the raw ad performance data pulled in Phase 1 as JSON for future reference.
Important Guidelines
- Always run end-to-end: Don't stop at code — generate assets, render videos, produce the output directory
- Parallel generation: Submit all video clip requests and music requests in parallel to minimize total wait time
- Cost transparency: Before generating, tell the user the estimated cost (video clips + music)
- Brand consistency: Yellow accent (#FFD60A), black/white palette, system fonts
- Duration: Default to 13-15 seconds based on retention data. Justify any different length
- Muted-first design: Ads should work with sound off (text overlays carry the message). Audio enhances but isn't required
- User approval gates: Get user approval at concept selection AND before final render (show asset options first)
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?