.claude/skills/generate-ad-creative/SKILL.md
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.
npx skillsauth add Abhi5415/clarido-marketing generate-ad-creativeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
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)Pull data at the ad level (not campaign or ad set) to evaluate individual creatives.
Analyze the data to identify:
Present two concepts to the user:
Present both concepts clearly with a recommendation, then ask the user which to proceed with. Allow the user to modify the concept before proceeding.
Ask the user to choose Concept A or B (or provide modifications). Once confirmed, proceed to asset generation.
Use Fal AI to generate video clips. Generate up to 3 variants with different prompts or parameters to give the user options.
fal-ai/kling-video/v3/pro/text-to-videovideos/public/ with descriptive names: {concept-name}-clip-v1.mp4, -v2.mp4, -v3.mp4Cost awareness: Each 5s Kling V3 Pro clip costs ~$1.12 (no audio). 3 clips = ~$3.36.
Use ElevenLabs Music API (POST /v1/music) to generate background music variants.
force_instrumental: true and music_length_ms to match ad duration{concept-name}-music-v1.mp3, -v2.mp3, etc.If ElevenLabs music fails (402), fall back to Fal AI Beatoven (beatoven/music-generation).
Use ElevenLabs Sound Generation (POST /v1/sound-generation) for any needed SFX:
videos/public/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.
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 benchBad names (too vague):
OverwhelmAd — which overwhelm ad? What style?NewAd — meaninglessVideoV2 — no contextLeadsCampaign — describes the objective, not the creativeThe name flows through everything:
videos/src/OverwhelmedInBedRealistic/OverwhelmedInBedRealistic-Square, OverwhelmedInBedRealistic-VerticalOverwhelmedInBedRealisticvideos/out/2026-02-16_10-30-00-000_OverwhelmedInBedRealistic/overwhelmed-in-bed-realistic-clip-v1.mp4Create the directory under videos/src/{AdName}/.
Follow Remotion best practices (see videos/.claude/skills/remotion/ rules):
useCurrentFrame() + interpolate() / spring() — NO CSS animations<Sequence> with premountFor for timing<Audio> and <Video> from @remotion/mediastaticFile() for assets in videos/public/#FFD60A) accent-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:
{AdName}-Square (1080x1080){AdName}-Vertical (1080x1920)<Folder> using the same {AdName}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.
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
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
Save the raw ad performance data pulled in Phase 1 as JSON for future reference.
development
Best practices for Remotion - Video creation in React
tools
Fully autonomous Pinterest pin production for Clarido. Auto-selects topics from blog gaps, generates content with pre-render validation, visual-reviews rendered PNGs via agent, publishes via Chrome automation, and emails results. No approval gates. Supports batch mode.
development
Produce an Instagram Reel for Clarido — remix an existing TikTok concept with a deeper script, new voiceover, and expanded illustrations, then publish via the Instagram API. Use when creating new Instagram Reels content.
data-ai
Pull cross-channel GTM performance data from Meta Ads, Instagram, Pinterest, Blog, GA4, and Search Console — generate a unified report with analysis and recommendations.