From eachlabs-skills
Generate Google Ads creatives using each::sense AI. Create display ads, YouTube thumbnails, Discovery ads, Performance Max assets, and responsive display ads optimized for Google's ad formats and best practices.
npx claudepluginhub joshuarweaver/cascade-content-creation-misc-1 --plugin eachlabs-skillsThis skill uses the workspace's default tool permissions.
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.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
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 shots