skills/ads-generate/SKILL.md
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 skillsauth add tapanshah/ads-audit-claude ads-generateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates platform-sized ad creative images from your campaign brief and brand
profile. Uses Gemini by default (gemini-2.5-flash-image, stable GA).
| Command | What it does |
|---------|-------------|
| /ads generate | Generate all images from campaign-brief.md |
| /ads generate --platform meta | Generate Meta assets only |
| /ads generate --prompt "text" --ratio 9:16 | Standalone generation without brief |
| /ads generate --batch | Use Gemini Batch API (50% cost, 24h turnaround) |
Required before running:
# 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"
If the API key is not set, this skill will display the setup instructions above and stop. It will never fail silently.
Verify the required environment variable is set before proceeding:
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')
"
If this exits with code 1, display the Environment Setup section above and stop.
Check for:
campaign-brief.md → primary source for prompts and dimensionsbrand-profile.json → brand color/style injection (optional but recommended)If campaign-brief.md is found: Use ## Image Generation Briefs section as the
generation job list.
If no campaign-brief.md: Enter standalone mode (Step 2b).
Ask the user:
Then skip to Step 5.
Load ~/.claude/skills/ads/references/image-providers.md to confirm:
For each platform in the campaign brief, load the relevant spec reference:
~/.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.mdSpawn the visual-designer agent using the Task tool with context: fork.
The agent will:
./ad-assets/[platform]/[concept]/ directory structuregeneration-manifest.jsonAfter the visual-designer completes, spawn the format-adapter agent
with context: fork to validate dimensions and report missing formats.
Present a summary:
Generation 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 managers
Before generating, estimate and show the cost:
When running without a campaign brief:
Platform 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)
Calls generate_image.py directly:
python ~/.claude/skills/ads/scripts/generate_image.py \
"[user prompt]" \
--size [WxH] \
--output [filename] \
--json
~/.claude/skills/ads/references/image-providers.md — provider config, pricing, limits~/.claude/skills/ads/references/[platform]-creative-specs.md — per-platform specs~/.claude/skills/ads/references/brand-dna-template.md — brand injection schemadevelopment
YouTube Ads specific analysis covering campaign types, creative quality, audience targeting, and measurement. Evaluates video ad performance across skippable, non-skippable, bumper, Shorts, and Demand Gen formats. Use when user says "YouTube Ads", "video ads", "pre-roll", "bumper ads", "YouTube campaign", or "Shorts ads".
testing
TikTok Ads deep analysis covering creative quality, tracking, bidding, campaign structure, and TikTok Shop. Evaluates 25 checks with emphasis on creative-first strategy, safe zone compliance, and Smart+ campaigns. Use when user says "TikTok Ads", "TikTok marketing", "TikTok Shop", "Spark Ads", "Smart+", or "TikTok campaign".
testing
Strategic paid advertising planning with industry-specific templates. Covers platform selection, campaign architecture, budget planning, creative strategy, and phased implementation roadmap. Use when user says "ad plan", "ad strategy", "campaign planning", "media plan", "PPC strategy", or "advertising plan".
development
Product photography enhancement for ad creatives using AI image generation. Takes a product image and generates 5 professional photography styles for ad use: Studio, Floating, Ingredient, In Use, and Lifestyle. Requires GOOGLE_API_KEY or configured ADS_IMAGE_PROVIDER. Triggers on: "product photo", "product photography", "photoshoot", "enhance product image", "product shoot", "product photos for ads", "generate product photos", "studio shot", "lifestyle photo".