ワンクリックで
ad-creative
Design static ad creatives for social media and display advertising campaigns.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Design static ad creatives for social media and display advertising campaigns.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Source and evaluate candidates with job analysis, search strategies, specific candidate profiles, and outreach templates.
Draft emails, manage calendar scheduling, prepare meeting agendas, and organize productivity
Create brand identity kits with color palettes, typography, logo concepts, and brand guidelines.
Perform competitive market analysis with feature comparisons, positioning, and strategic recommendations.
Create social media posts, newsletters, and marketing content calibrated to your voice and platform.
Conduct thorough, multi-source research on complex topics with structured findings and citations.
| name | ad-creative |
| description | Design static ad creatives for social media and display advertising campaigns. |
Design static ad creatives for social media ads, display banners, and digital advertising campaigns. Build production-ready ads via the design subagent and present them as iframes on the canvas.
artifacts skill)Every ad should be built around a striking, full-bleed generated image. The image IS the ad — text is overlaid on top, not placed in a separate zone. This produces the punchy, scroll-stopping aesthetic that performs on modern social feeds.
Always generate images using generateImage from the media-generation skill unless:
Image style direction: Photorealistic, editorial, dramatic. Think fashion magazine meets Apple product launch. Single striking subjects, dramatic studio lighting, dark/moody backgrounds, high contrast. Avoid: abstract digital art, generic stock photo aesthetic, flat illustrations, busy compositions. Each image should have one clear focal point that makes someone stop scrolling.
Prompt strategy for generated images:
Default to square (1:1) for ad creatives. Use portrait/iPhone format (9:16, iframe size 608×1080) when:
Gather these inputs:
Enforce these programmatically. Count characters in code, don't eyeball.
| Placement | Dimensions | Safe zone (keep critical elements inside) |
|---|---|---|
| Feed (square) | 1080×1080 | ~100px margin all edges |
| Feed (portrait) — preferred | 1080×1350 (4:5) | 4:5 outperforms 1:1 on CTR; mobile-first |
| Stories | 1080×1920 | Top 14% (270px) + bottom 20% (380px) = dead zones |
| Reels | 1080×1920 | Top 14% + bottom 35% (670px) — like/comment/share UI is taller |
| Universal safe core | 1010×1280 centered | Design inside this box → works everywhere |
Upload at 2x pixel density (2160×2160 for a 1080 slot) for Retina sharpness. JPG/PNG, 30MB max.
20% text rule: officially removed — Meta no longer rejects text-heavy images, but the delivery algorithm still quietly throttles them. Keep text minimal; move details to primary text.
| Element | Limit | Notes |
|---|---|---|
| Primary text | 125 chars visible feed / ~72 chars visible in Reels | Write for 72 |
| Headline | 40 chars rec | Below image |
| Description | 30 chars rec | Often hidden on mobile |
Responsive Search Ads (RSA):
| Element | Limit | Qty | Rule |
|---|---|---|---|
| Headlines | 30 chars | up to 15, min 3 | Each must work standalone — Google combines randomly |
| Descriptions | 90 chars | up to 4, min 2 | Complement, don't repeat headlines |
| Display path | 15 chars × 2 | — |
Pin sparingly — pinning drops Ad Strength and limits ML optimization. Supply ≥5 headlines + ≥5 descriptions for ~10% more conversions at same CPA.
Responsive Display Ads (RDA) — default Display format:
| Asset | Spec | Qty |
|---|---|---|
| Landscape image | 1200×628 (1.91:1) | up to 15 total |
| Square image | 1200×1200 (1:1) | required |
| Portrait image | 1200×1500 (4:5) | optional, expands inventory |
| Logo square | 1200×1200 (128 min) | up to 5 |
| Logo wide | 1200×300 (4:1) | optional |
| Short headline | 30 chars | up to 5 |
| Long headline | 90 chars | 1 |
| Description | 90 chars | up to 5 |
All images ≤5MB, JPG/PNG only (no GIF in RDA). Keep file size <150KB for fast load.
Highest-inventory static sizes (if uploading fixed banners): 300×250 (medium rectangle — most served, works desktop+mobile), 728×90 (leaderboard), 320×50 (mobile banner), 300×600 (half-page — premium CPM, high CTR), 336×280.
Performance Max: same asset pool serves across Search/Display/YouTube/Gmail/Maps/Discover. Upload all 3 image ratios + a YouTube video (≤30s) or Google auto-generates one — don't let it.
| Element | Limit |
|---|---|
| Intro text | 150 chars rec (600 max) |
| Headline | 70 chars rec (200 max) |
| Image | 1200×627 (1.91:1) or 1200×1200 |
1080×1920, 9:16. Ad text: 100 char max (~80 visible). For Spark Ads (boosting organic creator posts), get the authorization code from the creator — Spark Ads outperform In-Feed Ads on engagement because they retain organic engagement metrics.
| Placement | Dimensions | Notes |
|---|---|---|
| Single image | 1200×675 (1.91:1) or 1080×1080 (1:1) | 1:1 gets more real estate in feed |
| Carousel cards | 1080×1080 (1:1) or 800×800 min | 2-6 cards; each card gets its own image + optional headline/URL |
| Portrait (organic or promoted) | 1080×1350 (4:5) | Taller images dominate mobile feed; 4:5 works for organic posts promoted via Amplify/Quick Promote |
| Element | Limit | Notes |
|---|---|---|
| Tweet text | 280 chars | ~100 chars visible before "Show more" on mobile when media is attached |
| Card headline | 70 chars | Below image on website cards; not present on carousel image cards |
Carousel strategy: Each card should be a self-contained visual — assume viewers swipe through quickly. Use carousels to show multiple visual worlds, product angles, or sequential narrative. High-performing carousels often use a consistent structural layout (same typography placement, same logo position) with varying visual treatments per card, so the brand stays recognizable while each card feels fresh. This creates a "same but different" effect that rewards swiping.
Before defining angles, determine whether this is a direct-response or awareness/launch campaign. The approach differs significantly.
Use for product launches, brand announcements, event teasers, or top-of-funnel awareness. These prioritize mood, intrigue, and brand impression over clicks.
Key differences from direct-response:
When to use awareness mode:
Use for conversion, lead generation, app installs, purchases. This is the default mode — most ad requests are direct-response.
Before writing individual copy, establish 3-5 distinct angles — different reasons someone would click:
| Category | Example |
|---|---|
| Pain point | "Stop wasting time on X" |
| Outcome | "Achieve Y in Z days" |
| Social proof | "Join 10,000+ teams who..." |
| Curiosity | "The X secret top companies use" |
| Comparison | "Unlike X, we do Y" |
| Urgency | "Limited time: get X free" |
| Identity | "Built for [specific role/type]" |
| Contrarian | "Why [common practice] doesn't work" |
Read order: 1) Hero element → 2) Benefit/offer → 3) CTA → 4) Logo (corner, small).
Rules:
chroma.contrast() if building programmatically)Read order: 1) Hero visual (dominates the frame) → 2) Brand name / headline (large, bold, bottom or mid-frame) → 3) Positioning line (smaller, beneath headline) → 4) Logo (top corner, subtle).
Rules:
For each angle, generate multiple variations. Vary:
Strong headlines: Specific over vague. Benefits over features. Active voice. Include numbers when possible ("3x faster," "in 5 minutes").
Strong descriptions: Complement headlines, don't repeat them. Add proof points, handle objections ("No credit card required"), reinforce CTAs.
Before presenting, check every piece against character limits. Flag anything over and provide a trimmed alternative. Include character counts.
## Angle: [Pain Point — Manual Reporting]
### Headlines (30 char max)
1. "Stop Building Reports by Hand" (29)
2. "Automate Your Weekly Reports" (28)
3. "Reports in 5 Min, Not 5 Hrs" (27)
### Descriptions (90 char max)
1. "Marketing teams save 10+ hours/week with automated reporting. Start free." (73)
2. "Connect your data sources once. Get automated reports forever. No code required." (80)
Launch a separate design subagent for each variation in parallel using startAsyncSubagent. Each subagent builds one ad variation as a standalone HTML page. This is much faster than building them sequentially.
Square (1:1) — default: Use 1080×1080 iframes. Group by angle in rows, with a landing page iframe alongside:
x=0, y=0: [Iframe: angle1-ad] (1080x1080)
x=1200, y=0: [Iframe: angle1-landing] (1280x720)
x=0, y=1180: [Iframe: angle2-ad] (1080x1080)
x=1200, y=1180: [Iframe: angle2-landing] (1280x720)
Portrait (9:16) — for stories/mobile/Instagram/TikTok: Use 608×1080 iframes. Arrange in rows of 5 with 50px gutters:
Row 1: x=0, x=658, x=1316, x=1974, x=2632 (y=0, each 608x1080)
Row 2: x=0, x=658, x=1316, x=1974, x=2632 (y=1130, each 608x1080)
Launch all variations simultaneously. Each subagent gets one ad + its landing page. Use startAsyncSubagent for each, then waitForBackgroundTasks to collect results.
Before launching subagents, generate all hero images first using generateImage. Each ad needs its own unique, photorealistic hero image. Save them to artifacts/mockup-sandbox/public/images/ and reference them in the component via /__mockup/images/[filename].png.
// Step 1: Generate all hero images BEFORE launching design subagents
// Use generateImage from the media-generation skill
// Save to artifacts/mockup-sandbox/public/images/ad-[name].png
// Each image should be a different visual metaphor — same brand, different world
// Step 2: Launch design subagents in parallel — each builds one ad component
await startAsyncSubagent({
task: `Create a production-ready ad creative component for the following angle.
Brand: [name]
Colors: Primary [hex], Secondary [hex], Accent [hex]
Fonts: [display font] (load from Google Fonts or use Inter)
Logo: [SVG description or path to uploaded logo]
User's stated style preferences: [include any specific preferences]
**Angle: [Pain Point]**
- Hero image: \`/__mockup/images/ad-[name].png\` (already generated — use this exact path)
- Headline: "[headline text]"
- Subtext: "[optional short line]"
Build this file: [ComponentName].tsx in artifacts/mockup-sandbox/src/components/mockups/[folder]/
**CRITICAL — Image-first full-bleed layout:**
The generated photo IS the ad. The component must use this exact structure:
\`\`\`
Outermost div: width: 100vw, height: 100vh, overflow: hidden, position: relative
Hero image: <img> with position: absolute, inset: 0, object-fit: cover, width: 100%, height: 100%
Bottom gradient overlay: position: absolute, bottom: 0, width: 100%, linear-gradient(transparent, rgba(0,0,0,0.7))
Text on top of gradient: position: absolute, bottom section
All font sizes in vw units (8-12vw for headlines in square, 8-20vw in portrait)
\`\`\`
Design rules:
- The hero image fills the ENTIRE frame — no margins, no panels, no colored backgrounds
- Text overlaid directly on the image with gradient for readability
- Headlines: HUGE, bold (font-weight 900), vw units
- Minimal text: brand name + one headline + one short subtext max
- Logo: small, top corner, SVG
- Use text-shadow for extra readability on busy backgrounds
- The vibe: if you saw this in your Instagram feed, you'd stop scrolling`,
specialization: "DESIGN",
relevantFiles: ["artifacts/mockup-sandbox/src/components/mockups/[folder]/[Component].tsx"]
});
// Repeat for each angle — all launch simultaneously
// Wait for all to complete
await waitForBackgroundTasks();
After all subagents finish, embed each page as an iframe on the canvas using apply_canvas_actions. Tell the user what was created and offer to focus the viewport.
100vw/100vh for the container and vw-based font sizes/padding. Never fixed pixel dimensions for the ad container. The ad must fill whatever iframe it's placed in without clipping or scrollbars.position: absolute; inset: 0; object-fit: cover). Text is overlaid on the image using a bottom gradient (linear-gradient(transparent, rgba(0,0,0,0.8))). No separate text panels, no side-by-side layouts, no colored backgrounds behind text. The image IS the ad.text-shadow for readability against busy backgrounds. Headlines should feel like they belong on the image, not pasted on top.The user can screenshot each iframe directly, or open the HTML files in a browser at the desired export size. Since the ads use vw/vh sizing, they'll adapt to any viewport. For batch export at specific dimensions: npx playwright screenshot angle1-ad.html --viewport-size=1080,1080.
When the user provides performance data:
Use webSearch to find examples of top-performing ads in the user's vertical. Search for ad breakdowns, swipe files, and case studies — e.g. webSearch("[industry] top performing Facebook ads 2026") or webSearch("[industry] TikTok ad examples"). The TikTok Creative Center and Meta Ad Library are useful reference sites but require direct browser interaction to filter; web search can surface articles and analyses that reference their data. Reverse-engineer: what hook, what angle, what visual pattern. Don't guess what works — look it up.
After delivering the ad creatives, always check whether the user has provided their actual logo. If they haven't (i.e., you used a placeholder SVG or described the logo in code), end your response with a plain-text note like:
"If you'd like to swap in your real logo, just upload or attach it and I'll drop it into all the ads."
This is a simple text reminder — not a tool call, not a modal, just a natural closing line. Skip this if the user already provided their logo file.