Ad creative generation skill

Generate on-brand ad creatives — visuals + copy — for Google, Meta (Facebook / Instagram), and other paid platforms via the Hyper MCP.

by hyperfx-ai·MIT license·GitHub ↗

★ 90 Stars on the repo·Checked

npx degit hyperfx-ai/marketing-skills/skills/ad-creative-generation#main ~/.claude/skills/ad-creative-generation

SKILL.md · 11.1 KB · installs the whole folder to ~/.claude/skills/ad-creative-generation

Files of Ad creative generation

Files 1 file
Show the full text202 lines

Ad Creative Generation

Generate ad creatives — both visuals and copy — that match a brand's identity. This skill orchestrates brand extraction, copywriting, and image generation into a single workflow.

Requirements

This skill assumes the Hyper MCP is connected to your agent so the tools below are available. Brand extraction also requires Firecrawl to be configured under your Hyper integrations.

How to run the tools in this skill

Every tool in this skill is named by its canonical tool name. Run it with the call your surface gives you:

Surface Find a tool Run it
MCP client (Claude, Cursor, Codex, ChatGPT) search("<what you want to do>"), then describe("<name>") call("<name>", {...})
Hyper CLI hyperai search "<what you want to do>", then hyperai describe <name> hyperai call <name> --json '{...}'

If a tool is not found, its integration is not connected or not enabled for the workspace: stop and tell the user which integration to connect.

Tool surface

Group Tools
Brand extraction firecrawl_branding_extract
Archetype recommendations (conditional) cmo_ad_brief
Competitor ad tracking (conditional) cmo_ads_track, cmo_ads_tracked_list
Image generation (default) images_generate (model="gpt-image-2")
Image generation (text-heavy) images_generate (model="nano-banana-pro")
Image generation (photoreal product shots) images_generate (model="seedream-4.5")

The cmo_* tools are conditional — they appear when the CMO toolkit is enabled in the workspace. When absent, skip them and use the reference frameworks; do not fail the workflow.

For deeper image-tool selection guidance see the image-generation skill. To turn finished creatives into running campaigns see google-ads and meta-ads.

Out of scope

  • Picking the right image model when the task isn't ad creative — use image-generation.
  • Creating, launching, or budgeting actual ad campaigns — use google-ads, meta-ads, tiktok-ads, pinterest-ads, or amazon-ads.
  • Searching live competitor ads — use meta-ads-library; to save and monitor competitor ads cross-platform (Meta + Google Ads Transparency, durable creatives, longevity ranking), use cmo_ads_track / cmo_ads_tracked_list when the CMO toolkit is enabled.

Critical rules

  • Always extract branding first before generating visuals for a website/brand.
  • Always pass both logo and screenshot as reference images — SVG logos are auto-converted to PNG.
  • DO NOT display image URLs — they are automatically shown in chat.
  • Read brand.screenshot.description to understand the product — never guess from the company name.
  • Default to logo + headline + product screenshot for SaaS / product ads unless the user requests a different style.
  • Use model="gpt-image-2" for the initial ad creative by default — with reference images for branded work, or without for loose first-pass concepts.
  • Do not default to model="nano-banana-pro" for the first creative pass — use it when the user explicitly asks or when readable text inside the image is the main requirement.
  • Set aspect_ratio to the placement — 1:1 (feed), 9:16 (story), 16:9 (banner) — and quality ("draft" | "standard" | "high"); images_generate takes those, not raw pixel sizes.
  • Respect character limits — Google RSA headlines are 30 chars, descriptions 90 chars; Meta primary text is 125 chars visible.
  • Change one variable per variant so test results are attributable.
  • Match aspect ratio to placement — feed is 1:1, story is 9:16 (use 1024x1536), banner is 16:9 (use 1536x1024).

Routing Table

Based on what the user needs, read the appropriate reference file:

User Need Reference
"Extract branding from this site" / brand colors, logo references/brand-extraction.md
"Write ad copy" / headlines / variants / hooks references/ad-copy-frameworks.md
Google RSAs / display ads / Performance Max assets references/google-ads-creatives.md
Meta / Facebook / Instagram ads / carousel / stories references/meta-ads-creatives.md

When the task spans multiple areas (e.g., "create ad creatives for this website"), follow the full workflow below.

Core Workflow

Phase 1: Brand Extraction

Call firecrawl_branding_extract with the website URL. This single call returns branding data, a saved logo, and a website screenshot:

brand = firecrawl_branding_extract(url="https://example.com")

The result contains:

  • brand.logo.file_id — logo image to use as reference
  • brand.screenshot.file_id — website screenshot to use as reference
  • brand.branding — colors, typography, spacing, personality

Both logo and screenshot are saved images ready to pass as reference_images to image generation tools. SVG logos are automatically converted to PNG, so always include the logo — no need to filter by format.

For deeper guidance on brand extraction, read references/brand-extraction.md.

Phase 2: Ad Copy Generation

If cmo_ad_brief is available, call it first — it returns ranked ad archetypes for the brand's goal and platform with the reasoning, hook examples, structure beats, dos/donts, and a generation prompt already grounded in the brand's saved data:

brief = cmo_ad_brief(goal="drive conversions", platform="meta", url="https://example.com")

Build the copy variants and visual direction on the recommended archetypes (brief.recommendations[n].prompt is a ready generation prompt; unresolved placeholders are listed per recommendation). If the tool is not available, work from references/ad-copy-frameworks.md instead.

Using the brand personality, tone, and value proposition from the extraction, write ad copy variants. Structure copy by what's being tested:

  1. Hook variants — different opening angles (number-led, question, pain-point, benefit-first)
  2. Body variants — different messaging (social proof, feature highlight, urgency)
  3. CTA variants — different calls to action (Learn More, Shop Now, Get Started, Try Free)

Change only one element per variant so results can be attributed to specific changes.

For copy frameworks, hook patterns, and variant strategy, read references/ad-copy-frameworks.md.

Phase 3: Visual Creative Generation

Generate ad images using brand assets as references. Always pass both logo and screenshot as reference images — SVG logos are automatically converted to PNG by the branding tool.

Read brand.screenshot.description to understand what the product actually does and what the UI looks like. Do not guess from the company name.

Preferred first pass: images_generate with model="gpt-image-2"

Default approach (best practice for SaaS / product ads)

By default, a strong ad creative has three layers: brand (logo), copy (headline), and product (realistic screenshot showing the core value prop). This is the recommended starting point when the user hasn't specified a creative direction. Use model="gpt-image-2" for this initial composition unless the user explicitly asks for another model or the image is primarily a text-rendering task.

images_generate(
    requests=[{
        "prompt": (
            "Social media ad creative for [company name]. "
            "Top: the [company] logo. "
            "Headline: '[headline from ad copy phase or site hero text]'. "
            "Below the headline: a clean, realistic product screenshot of [describe the actual UI "
            "based on brand.screenshot.description]. "
            "Match the brand style from the references."
        ),
        "reference_images": [brand.logo.file_id, brand.screenshot.file_id]
    }],
    model="gpt-image-2",
    aspect_ratio="1:1",
    quality="high"
)
Following user direction

If the user asks for a specific creative style (lifestyle imagery, abstract, illustration, people using the product, etc.), follow their direction. The defaults above are a starting point, not a constraint. The reference images still supply brand consistency regardless of creative direction.

Things to avoid (unless the user specifically asks)
  • Made-up visual elements (robot mascots, random platform logos, abstract graphics)
  • UI chrome (buttons, nav bars, form inputs) — ad platforms add their own CTAs
  • Guessing what the product does from the company name
  • Generic marketing clip art

Visual Tool Selection

Scenario Tool Why
On-brand creative (default) images_generate (model="gpt-image-2") with logo + screenshot refs Best default for the first branded concept
Text-heavy creative (headlines in image) images_generate (model="nano-banana-pro") Use only when text rendering inside the image is the main requirement
Quick ideation / concept exploration images_generate (model="gpt-image-2") Fast first-pass concepting with no references needed
Iterative refinement of existing image images_generate (model="nano-banana") with the image as a reference Edit a specific generated image
Photoreal product shots / material detail images_generate (model="seedream-4.5") Strong fabric/texture/spatial depth

Platform Quick Reference

Platform Format Image Size Key Limits
Meta Feed 1:1 1080x1080 Primary text: 125 chars visible
Meta Story 9:16 1080x1920 Full screen, 15s max
Meta Carousel 1:1 1080x1080 Up to 10 cards
Google RSA N/A (text only) N/A 15 headlines (30 chars), 4 descriptions (90 chars)
Google Display Various 1200x628 Responsive display ads

For full platform specs, read references/google-ads-creatives.md or references/meta-ads-creatives.md.

Ad Copy Variant Quick Reference

When generating variants from existing top performers:

  1. Identify the winning elements: hook type, CTA, messaging angle, format
  2. Generate variants that preserve winning elements while changing one variable
  3. Group variants by what's being tested (hook, body, CTA)
  4. Pair variants for A/B testing — each pair should isolate one variable

For detailed frameworks, read references/ad-copy-frameworks.md.

  • Follow user direction — if the user wants lifestyle, illustration, abstract, or any other style, follow their lead. The reference images still supply brand consistency regardless of creative direction.
1---
2name: ad-creative-generation
3description: Generate on-brand ad creatives — visuals + copy — for Google, Meta (Facebook / Instagram), and other paid platforms via the Hyper MCP. Extracts brand identity from a website, writes ad copy variants, and produces brand-consistent images using reference-based image generation. Use when the user asks for ad creative, ad copy variants, RSA headlines, Meta ad creative, display ads, carousel ads, or A/B test variants.
4metadata:
5 version: 1.0.0
6requires_toolkits:
7 - image_gen
8icon: image_gen
9short_description: Brand extraction, ad copy variants, and on-brand images for Google and Meta placements.
10---
11 
12# Ad Creative Generation
13 
14Generate ad creatives — both visuals and copy — that match a brand's identity. This skill orchestrates brand extraction, copywriting, and image generation into a single workflow.
15 
16## Requirements
17 
18This skill assumes the [Hyper MCP](https://app.hyperfx.ai/mcp) is connected to your agent so the tools below are available. Brand extraction also requires Firecrawl to be configured under your Hyper integrations.
19 
20### How to run the tools in this skill
21 
22Every tool in this skill is named by its canonical tool name. Run it with the call your surface gives you:
23 
24| Surface | Find a tool | Run it |
25| --- | --- | --- |
26| MCP client (Claude, Cursor, Codex, ChatGPT) | `search("<what you want to do>")`, then `describe("<name>")` | `call("<name>", {...})` |
27| Hyper CLI | `hyperai search "<what you want to do>"`, then `hyperai describe <name>` | `hyperai call <name> --json '{...}'` |
28 
29If a tool is not found, its integration is not connected or not enabled for the workspace: stop and tell the user which integration to connect.
30 
31## Tool surface
32 
33| Group | Tools |
34|-------|-------|
35| Brand extraction | `firecrawl_branding_extract` |
36| Archetype recommendations (conditional) | `cmo_ad_brief` |
37| Competitor ad tracking (conditional) | `cmo_ads_track`, `cmo_ads_tracked_list` |
38| Image generation (default) | `images_generate` (`model="gpt-image-2"`) |
39| Image generation (text-heavy) | `images_generate` (`model="nano-banana-pro"`) |
40| Image generation (photoreal product shots) | `images_generate` (`model="seedream-4.5"`) |
41 
42The `cmo_*` tools are conditional — they appear when the CMO toolkit is
43enabled in the workspace. When absent, skip them and use the reference
44frameworks; do not fail the workflow.
45 
46For deeper image-tool selection guidance see the `image-generation` skill. To turn finished creatives into running campaigns see `google-ads` and `meta-ads`.
47 
48## Out of scope
49 
50- Picking the right image model when the task isn't ad creative — use `image-generation`.
51- Creating, launching, or budgeting actual ad campaigns — use `google-ads`, `meta-ads`, `tiktok-ads`, `pinterest-ads`, or `amazon-ads`.
52- Searching live competitor ads — use `meta-ads-library`; to save and monitor competitor ads cross-platform (Meta + Google Ads Transparency, durable creatives, longevity ranking), use `cmo_ads_track` / `cmo_ads_tracked_list` when the CMO toolkit is enabled.
53 
54## Critical rules
55 
56- **Always extract branding first** before generating visuals for a website/brand.
57- **Always pass both logo and screenshot** as reference images — SVG logos are auto-converted to PNG.
58- **DO NOT display image URLs** — they are automatically shown in chat.
59- **Read `brand.screenshot.description`** to understand the product — never guess from the company name.
60- **Default to logo + headline + product screenshot** for SaaS / product ads unless the user requests a different style.
61- **Use `model="gpt-image-2"` for the initial ad creative by default** — with reference images for branded work, or without for loose first-pass concepts.
62- **Do not default to `model="nano-banana-pro"` for the first creative pass** — use it when the user explicitly asks or when readable text inside the image is the main requirement.
63- **Set `aspect_ratio` to the placement** — `1:1` (feed), `9:16` (story), `16:9` (banner) — and `quality` (`"draft" | "standard" | "high"`); `images_generate` takes those, not raw pixel sizes.
64- **Respect character limits** — Google RSA headlines are 30 chars, descriptions 90 chars; Meta primary text is 125 chars visible.
65- **Change one variable per variant** so test results are attributable.
66- **Match aspect ratio to placement** — feed is 1:1, story is 9:16 (use `1024x1536`), banner is 16:9 (use `1536x1024`).
67 
68## Routing Table
69 
70Based on what the user needs, read the appropriate reference file:
71 
72| User Need | Reference |
73|-----------|-----------|
74| "Extract branding from this site" / brand colors, logo | `references/brand-extraction.md` |
75| "Write ad copy" / headlines / variants / hooks | `references/ad-copy-frameworks.md` |
76| Google RSAs / display ads / Performance Max assets | `references/google-ads-creatives.md` |
77| Meta / Facebook / Instagram ads / carousel / stories | `references/meta-ads-creatives.md` |
78 
79When the task spans multiple areas (e.g., "create ad creatives for this website"), follow the full workflow below.
80 
81## Core Workflow
82 
83### Phase 1: Brand Extraction
84 
85Call `firecrawl_branding_extract` with the website URL. This single call returns branding data, a saved logo, and a website screenshot:
86 
87```python
88brand = firecrawl_branding_extract(url="https://example.com")
89```
90 
91The result contains:
92- `brand.logo.file_id` — logo image to use as reference
93- `brand.screenshot.file_id` — website screenshot to use as reference
94- `brand.branding` — colors, typography, spacing, personality
95 
96Both `logo` and `screenshot` are saved images ready to pass as `reference_images` to image generation tools. SVG logos are automatically converted to PNG, so always include the logo — no need to filter by format.
97 
98**For deeper guidance on brand extraction, read `references/brand-extraction.md`.**
99 
100### Phase 2: Ad Copy Generation
101 
102**If `cmo_ad_brief` is available, call it first** — it returns ranked ad
103archetypes for the brand's goal and platform with the reasoning, hook
104examples, structure beats, dos/donts, and a generation prompt already
105grounded in the brand's saved data:
106 
107```python
108brief = cmo_ad_brief(goal="drive conversions", platform="meta", url="https://example.com")
109```
110 
111Build the copy variants and visual direction on the recommended archetypes
112(`brief.recommendations[n].prompt` is a ready generation prompt; unresolved
113placeholders are listed per recommendation). If the tool is not available,
114work from `references/ad-copy-frameworks.md` instead.
115 
116Using the brand personality, tone, and value proposition from the extraction, write ad copy variants. Structure copy by what's being tested:
117 
1181. **Hook variants** — different opening angles (number-led, question, pain-point, benefit-first)
1192. **Body variants** — different messaging (social proof, feature highlight, urgency)
1203. **CTA variants** — different calls to action (Learn More, Shop Now, Get Started, Try Free)
121 
122Change only one element per variant so results can be attributed to specific changes.
123 
124**For copy frameworks, hook patterns, and variant strategy, read `references/ad-copy-frameworks.md`.**
125 
126### Phase 3: Visual Creative Generation
127 
128Generate ad images using brand assets as references. Always pass **both logo and screenshot** as reference images — SVG logos are automatically converted to PNG by the branding tool.
129 
130**Read `brand.screenshot.description`** to understand what the product actually does and what the UI looks like. Do not guess from the company name.
131 
132**Preferred first pass: `images_generate` with `model="gpt-image-2"`**
133 
134#### Default approach (best practice for SaaS / product ads)
135 
136By default, a strong ad creative has three layers: **brand** (logo), **copy** (headline), and **product** (realistic screenshot showing the core value prop). This is the recommended starting point when the user hasn't specified a creative direction. Use `model="gpt-image-2"` for this initial composition unless the user explicitly asks for another model or the image is primarily a text-rendering task.
137 
138```python
139images_generate(
140 requests=[{
141 "prompt": (
142 "Social media ad creative for [company name]. "
143 "Top: the [company] logo. "
144 "Headline: '[headline from ad copy phase or site hero text]'. "
145 "Below the headline: a clean, realistic product screenshot of [describe the actual UI "
146 "based on brand.screenshot.description]. "
147 "Match the brand style from the references."
148 ),
149 "reference_images": [brand.logo.file_id, brand.screenshot.file_id]
150 }],
151 model="gpt-image-2",
152 aspect_ratio="1:1",
153 quality="high"
154)
155```
156 
157#### Following user direction
158 
159If the user asks for a specific creative style (lifestyle imagery, abstract, illustration, people using the product, etc.), follow their direction. The defaults above are a starting point, not a constraint. The reference images still supply brand consistency regardless of creative direction.
160 
161#### Things to avoid (unless the user specifically asks)
162 
163- Made-up visual elements (robot mascots, random platform logos, abstract graphics)
164- UI chrome (buttons, nav bars, form inputs) — ad platforms add their own CTAs
165- Guessing what the product does from the company name
166- Generic marketing clip art
167 
168## Visual Tool Selection
169 
170| Scenario | Tool | Why |
171|----------|------|-----|
172| On-brand creative (default) | `images_generate` (`model="gpt-image-2"`) with logo + screenshot refs | Best default for the first branded concept |
173| Text-heavy creative (headlines in image) | `images_generate` (`model="nano-banana-pro"`) | Use only when text rendering inside the image is the main requirement |
174| Quick ideation / concept exploration | `images_generate` (`model="gpt-image-2"`) | Fast first-pass concepting with no references needed |
175| Iterative refinement of existing image | `images_generate` (`model="nano-banana"`) with the image as a reference | Edit a specific generated image |
176| Photoreal product shots / material detail | `images_generate` (`model="seedream-4.5"`) | Strong fabric/texture/spatial depth |
177 
178## Platform Quick Reference
179 
180| Platform | Format | Image Size | Key Limits |
181|----------|--------|-----------|------------|
182| Meta Feed | 1:1 | 1080x1080 | Primary text: 125 chars visible |
183| Meta Story | 9:16 | 1080x1920 | Full screen, 15s max |
184| Meta Carousel | 1:1 | 1080x1080 | Up to 10 cards |
185| Google RSA | N/A (text only) | N/A | 15 headlines (30 chars), 4 descriptions (90 chars) |
186| Google Display | Various | 1200x628 | Responsive display ads |
187 
188**For full platform specs, read `references/google-ads-creatives.md` or `references/meta-ads-creatives.md`.**
189 
190## Ad Copy Variant Quick Reference
191 
192When generating variants from existing top performers:
193 
1941. Identify the winning elements: hook type, CTA, messaging angle, format
1952. Generate variants that preserve winning elements while changing one variable
1963. Group variants by what's being tested (hook, body, CTA)
1974. Pair variants for A/B testing — each pair should isolate one variable
198 
199**For detailed frameworks, read `references/ad-copy-frameworks.md`.**
200 
201- **Follow user direction** — if the user wants lifestyle, illustration, abstract, or any other style, follow their lead. The reference images still supply brand consistency regardless of creative direction.
202 

Discussion

Alternatives

Also in Social & retail adsSee all 401 in Marketing →
Ad creativeWhen the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform. Also use when the user mentions 'ad copy variations,' 'ad creative,' 'generate headlines,' 'RSA headlines,' 'bulk ad copy,' 'ad iterations,' 'creative testing,' 'write me some ads,' 'Facebook ad copy,' 'Google ad headlines,' 'LinkedIn ad text,' 'static ads,' 'ad templates,' 'iMessage ad,' 'chat reveal ad,' 'ChatGPT ad,' 'Apple Notes ad,' 'AirDrop ad,' 'creative strategy,' 'creative roadmap,' 'creative retro,' 'hook writing,' 'creative review page,' 'present ad creative for approval,' 'motion video ad,' 'faceless video ad,' 'UGC ad,' 'greenscreen ad,' 'TikTok/Reels ad format,' 'which ad format to make,' 'Meta ad format tier list,' or 'creative format taxonomy.' Use this whenever someone needs to produce ad copy at scale or iterate on existing ads. For campaign strategy and targeting, see ads. For landing page copy, see copywriting.Marketing · MITAmazon Ads AuditYou share your Amazon advertising numbers and goals; you get back a plain-language review of what's draining your budget and what to change first.Business & ops · MITApple Ads AuditPaste what you're spending on Apple Search Ads and your recent numbers; get back a plain review of what's wasting money and what to fix first.Business & ops · MITAd creative builderUse when the user asks to "write ad copy", "generate RSA headlines", or "build ad creative at volume"; produces ad units — RSA headlines/descriptions, hooks, and an angle matrix — message-matched to the destination landing page. Not for scoring an ad account — use ad-account-auditor; not for the post-click page — use landing-optimizer; not for organic articles — use content-writer. 广告创意/广告文案/RSA标题Marketing · Apache-2.0