From eachlabs-skills
Generate Google Ads creatives using each::sense AI: display ads, YouTube thumbnails, Discovery ads, Performance Max assets, and responsive display ads optimized for Google's formats.
How this skill is triggered — by the user, by Claude, or both
Slash command
/eachlabs-skills:google-ad-creative-generationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate high-converting Google Ads creatives using each::sense. This skill creates images and videos optimized for Google's ad placements, formats, and best practices across Display Network, YouTube, Discovery, and Performance Max campaigns.
Generate high-converting Google Ads creatives using each::sense. This skill creates images and videos optimized for Google's ad placements, formats, and best practices across Display Network, YouTube, Discovery, and Performance Max campaigns.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a Google Display ad banner for a SaaS product, 300x250 medium rectangle, showing a clean dashboard interface with professional blue color scheme"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
| Format | Size (px) | Aspect Ratio | Use Case |
|---|---|---|---|
| Medium Rectangle | 300x250 | 1.2:1 | Most common, high inventory |
| Large Rectangle | 336x280 | 1.2:1 | Premium placements |
| Leaderboard | 728x90 | 8:1 | Header/footer placements |
| Mobile Leaderboard | 320x50 | 6.4:1 | Mobile header |
| Half Page | 300x600 | 1:2 | High visibility sidebar |
| Large Mobile Banner | 320x100 | 3.2:1 | Mobile interstitial |
| Billboard | 970x250 | 3.9:1 | Premium desktop header |
| Wide Skyscraper | 160x600 | 1:3.75 | Sidebar placements |
| Format | Size/Ratio | Use Case |
|---|---|---|
| Custom Thumbnail | 1280x720 (16:9) | Video thumbnails, companion banners |
| In-Feed Thumbnail | 1200x628 | YouTube Discovery ads |
| Bumper Ad | 6 sec, 16:9 | Short unskippable ads |
| Skippable In-Stream | 15-30 sec, 16:9 | Pre-roll, mid-roll ads |
| Format | Size (px) | Aspect Ratio | Use Case |
|---|---|---|---|
| Square | 1200x1200 | 1:1 | Discovery feed, Performance Max |
| Landscape | 1200x628 | 1.91:1 | Gmail, Discover, YouTube |
| Portrait | 960x1200 | 4:5 | Mobile-first placements |
| Asset Type | Recommended Sizes | Notes |
|---|---|---|
| Landscape Image | 1200x628 | Required, 1.91:1 ratio |
| Square Image | 1200x1200 | Required, 1:1 ratio |
| Logo (Landscape) | 512x128 | Optional, 4:1 ratio |
| Logo (Square) | 128x128 | Recommended, 1:1 ratio |
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 300x250 Google Display ad for an online course platform. Show a person learning on laptop, modern gradient background in purple and blue, leave space for headline text at top and CTA button at bottom."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 16:9 YouTube thumbnail for a tech review video. Show a smartphone floating with dramatic lighting, bold contrasting colors, leave right side clear for text overlay. Eye-catching and clickable style."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 1.91:1 landscape Discovery ad for a travel agency. Show a stunning beach destination with turquoise water, aspirational vacation vibes. Native content feel, not overly promotional. 1200x628 pixels."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a product image for Google Shopping. Show wireless headphones on pure white background, multiple angles visible, clean e-commerce style. High detail, professional product photography look."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 1:1 square ad for a fitness app install campaign. Show app interface mockup on phone screen with workout tracking visible, energetic person exercising in background. Vibrant orange and black brand colors."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
# Landscape asset (required)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 1200x628 landscape image for responsive display ads. Insurance company - show a happy family in front of their home, warm and trustworthy feeling, soft natural lighting. Leave clear space for headline overlay."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "responsive-insurance-001"
}'
# Square asset (required)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 1200x1200 square version of the same insurance ad. Same family, same style, recomposed for square format."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "responsive-insurance-001"
}'
# Asset 1 - Square
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 1:1 square image for Performance Max campaign. E-commerce fashion brand - show model wearing casual summer dress, lifestyle outdoor setting, Instagram-worthy aesthetic."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "pmax-fashion-001",
"mode": "max"
}'
# Asset 2 - Landscape
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 1.91:1 landscape version for the same fashion campaign, same model and dress, wider scene showing more environment."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "pmax-fashion-001",
"mode": "max"
}'
# Asset 3 - Portrait
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 4:5 portrait version for mobile placements, same fashion campaign, vertical composition focusing on the dress."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "pmax-fashion-001",
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 6 second 16:9 bumper ad video for a car dealership. Quick cuts showing sleek new car exterior, interior dashboard, driving on highway. End with logo frame. Fast-paced, cinematic quality."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 728x90 leaderboard banner for a web hosting company. Horizontal layout with server imagery on left, gradient blue tech background. Leave center-right area for headline and CTA. Modern and professional."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 300x250 remarketing display ad featuring this watch product. Place the watch prominently with a lifestyle background showing success and sophistication. Add visual urgency elements suggesting limited availability."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"image_urls": ["https://example.com/product-watch.jpg"]
}'
When creating Google ad creatives, include these details in your prompt:
"Create a [dimensions] [ad format] for [product/service].
Show [visual description] with [color scheme/style].
Leave space for [text elements].
[Additional requirements like brand guidelines, urgency, etc.]"
Ask your users before generating:
"Do you want fast & cheap, or high quality?"
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final ad creatives, Performance Max assets, A/B testing winners | Slower | Highest |
eco | Quick drafts, concept exploration, bulk banner variations | Faster | Good |
Use session_id to iterate on ad creatives:
# Initial creative
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 300x250 display ad for a fintech app, modern and trustworthy"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "fintech-display-001"
}'
# Iterate based on feedback
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Make the background darker, add subtle grid pattern, more techy feel"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "fintech-display-001"
}'
# Generate size variations
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Now create a 728x90 leaderboard version with the same style"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "fintech-display-001"
}'
Generate multiple banner sizes for a campaign:
# Medium Rectangle
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 300x250 display ad for online shoe store, lifestyle shot of running shoes in action"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "shoe-campaign-001",
"mode": "eco"
}'
# Leaderboard
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 728x90 leaderboard version, same shoe campaign style, horizontal layout"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "shoe-campaign-001",
"mode": "eco"
}'
# Half Page
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 300x600 half page version, vertical layout showcasing the shoes"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "shoe-campaign-001",
"mode": "eco"
}'
| Error | Cause | Solution |
|---|---|---|
Failed to create prediction: HTTP 422 | Insufficient balance | Top up at eachlabs.ai |
| Content policy violation | Prohibited content | Adjust prompt to comply with Google Ads policies |
| Timeout | Complex generation | Set client timeout to minimum 10 minutes |
| Dimension mismatch | Invalid size requested | Use standard Google Ads dimensions from the table above |
each-sense - Core API documentationmeta-ad-creative-generation - Meta (Facebook/Instagram) ad creativestiktok-ad-creative-generation - TikTok ad creativesproduct-photo-generation - E-commerce product shotsnpx claudepluginhub joshuarweaver/cascade-content-creation-misc-1 --plugin eachlabs-skillsGenerates ad creatives including display images, video ads, copy variations for Google Ads, Meta, LinkedIn, Reddit. Supports A/B testing, bulk creation, platform resizing, and formatting.
Generates creator-quality ad creatives (key visuals + composed banners) from strategy briefs using a 6-step MCP workflow. Use when asked to create ad images, banners, variations, or display/social ad creatives.
Generates on-brand ad creatives for Google, Meta, and other paid platforms. Extracts brand identity from websites, writes ad copy variants, and produces brand-consistent images using reference-based generation.