Loading...
Loading...
AI image generation for paid ad creatives. Reads campaign-brief.md and brand-profile.json to produce platform-sized ad images using Gemini (default) or a configured provider. Requires GOOGLE_API_KEY or ADS_IMAGE_PROVIDER + matching key. Triggers on: "generate ads", "create images", "make ad creatives", "generate visuals", "create ad images", "generate campaign images", "make the images", "generate from brief".
npx skill4agent add agricidaniel/claude-ads ads-generategemini-2.5-flash-image| Command | What it does |
|---|---|
| Generate all images from campaign-brief.md |
| Generate Meta assets only |
| Standalone generation without brief |
| Use Gemini Batch API (50% cost, 24h turnaround) |
# Gemini (default — recommended)
export GOOGLE_API_KEY="your-key"
# Get a key: console.cloud.google.com/apis/credentials
# Switch to a different provider (optional)
export ADS_IMAGE_PROVIDER="openai"
export OPENAI_API_KEY="your-key"
export ADS_IMAGE_PROVIDER="stability"
export STABILITY_API_KEY="your-key"
export ADS_IMAGE_PROVIDER="replicate"
export REPLICATE_API_TOKEN="your-token"python3 -c "
import os, sys
provider = os.environ.get('ADS_IMAGE_PROVIDER', 'gemini')
keys = {'gemini': 'GOOGLE_API_KEY', 'openai': 'OPENAI_API_KEY',
'stability': 'STABILITY_API_KEY', 'replicate': 'REPLICATE_API_TOKEN'}
env_var = keys.get(provider, 'GOOGLE_API_KEY')
if not os.environ.get(env_var):
print(f'Error: {env_var} not set (provider: {provider})', file=sys.stderr)
sys.exit(1)
print(f'OK: {env_var} is set')
"campaign-brief.mdbrand-profile.json## Image Generation Briefs~/.claude/skills/ads/references/image-providers.md~/.claude/skills/ads/references/meta-creative-specs.md~/.claude/skills/ads/references/google-creative-specs.md~/.claude/skills/ads/references/tiktok-creative-specs.md~/.claude/skills/ads/references/linkedin-creative-specs.md~/.claude/skills/ads/references/youtube-creative-specs.md~/.claude/skills/ads/references/microsoft-creative-specs.mdvisual-designercontext: fork./ad-assets/[platform]/[concept]/generation-manifest.jsonformat-adaptercontext: forkGeneration complete:
Generated assets:
✓ ./ad-assets/meta/concept-1/feed-1080x1350.png
✓ ./ad-assets/tiktok/concept-1/vertical-1080x1920.png
✗ ./ad-assets/google/concept-1/landscape-1200x628.png [error reason]
Format validation: See format-report.md
Cost estimate: ~$[N] at $0.067/image (Gemini 1K)
Next steps:
1. Review assets in ./ad-assets/
2. Check format-report.md for any missing formats
3. Upload to your ad platform managersPlatform target → dimensions used:
meta-feed → 1080×1350 (4:5)
meta-reels → 1080×1920 (9:16)
tiktok → 1080×1920 (9:16)
google-pmax → 1200×628 (1.91:1)
linkedin → 1080×1080 (1:1)
youtube → 1280×720 (16:9)
youtube-short → 1080×1920 (9:16)python ~/.claude/skills/ads/scripts/generate_image.py \
"[user prompt]" \
--size [WxH] \
--output [filename] \
--json~/.claude/skills/ads/references/image-providers.md~/.claude/skills/ads/references/[platform]-creative-specs.md~/.claude/skills/ads/references/brand-dna-template.md