skills/claude-ads/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 kennyolofsson23-netizen/claude-code-config 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
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
testing
Full QA pass: run all tests, check types, catch regressions, write missing tests. Use when the user says "run tests", "QA", "verify changes", "check for regressions", "test everything", or "make sure it works".
development
Provides guidance for property-based testing across multiple languages and smart contracts. Use when writing tests, reviewing code with serialization/validation/parsing patterns, designing features, or when property-based testing would provide stronger coverage than example-based tests.
development
Initialize a new project with Kenny's universal conventions and stack-appropriate infrastructure. Use this skill whenever: setting up a new project, creating a new repo, scaffolding a new app, starting fresh on a new idea, 'init project', 'new project', 'set up a new app', 'create a project for X', or any variant of starting a new codebase from scratch. Also trigger when the user says 'bootstrap', 'scaffold', or 'kickstart'. This skill ensures every project gets the same quality gates and conventions while adapting infrastructure to the chosen stack.