Back to .md Directory

Generate New Ad Creative

Guides an AI agent through a five-phase pipeline that analyzes ad performance, generates creative concepts, produces video and audio assets, renders Remotion compositions, and packages deliverables.

May 2, 2026
0 downloads
0 views
ai eval workflow
View source

What this file does

Guides an AI agent through a five-phase pipeline that analyzes ad performance, generates creative concepts, produces video and audio assets, renders Remotion compositions, and packages deliverables.

When to use it

  • You want an AI agent to produce ad creatives from performance data to final video files
  • You need a repeatable workflow for generating video ads with exploration and exploitation variants
  • You run a Meta ads account and want to automate creative production with cost transparency
  • You maintain a Remotion-based video generation pipeline and need a structured brief for each ad

Assumes this stack

PythonRemotionMeta Marketing APIFal AIElevenLabs

name: generate-ad-creative description: 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. disable-model-invocation: true allowed-tools: Bash(pipenv *), Bash(cd videos *), Bash(npx remotion *), Bash(npm *), Bash(mkdir *), Bash(ls *)

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: true and music_length_ms to 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 video
  • FounderAtDinnerClay — founder checking phone at dinner, clay animation style
  • MorningJournalWatercolor — morning journaling scene, watercolor illustration
  • ThreeAmThoughtSpiral — 3am anxiety thought cascade
  • TodoListAvalanche — to-do list growing out of control
  • ParkBenchReflection — calm reflection moment on a park bench

Bad names (too vague):

  • OverwhelmAd — which overwhelm ad? What style?
  • NewAd — meaningless
  • VideoV2 — no context
  • LeadsCampaign — 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> with premountFor for timing
  • Use <Audio> and <Video> from @remotion/media
  • Use staticFile() for assets in videos/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)

What's inside

5 phases, 14 steps, 3 code blocks, 2 file templates, naming conventions, and cost estimates

Change this for your project

  • Replace act_217614761779242 with your Meta ad account ID
  • Replace Clarido with your brand or product name
  • Replace #FFD60A with your brand accent color
  • Replace videos/ with your Remotion project root path

Where it goes

Save as SKILL.md inside a skill folder. Loaded when the agent selects that skill.

Worth borrowing

  • Separate creative concepts into exploration (new territory) and exploitation (iterate on winners) to balance risk and reliability
  • Gate user approval at concept selection and before final render to reduce wasted compute costs
  • Name compositions with a ScenarioStyle PascalCase convention so they remain identifiable months later in a shared sidebar

Related Documents