Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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"
.claude/skills/miosa-osa-ads-generate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 210% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 96% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 105% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -18% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -39% | 0% |
> Generates platform-sized ad creative images from your campaign brief and brand > profile. Uses Gemini by default.
bash/ads generate /ads generate --platform meta /ads generate --prompt "text" --ratio 9:16 /ads generate --batch
| Flag | Type | Default | Description | |------|------|---------|-------------| | --platform | string | all | Generate for specific platform only | | --prompt | string | — | Standalone generation without brief | | --ratio | string | — | Aspect ratio for standalone mode | | --batch | flag | false | Use batch API (50% cost, 24h turnaround) |
bash# Gemini (default) export GOOGLE_API_KEY="your-key" # Alternative providers 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"
Verify the required environment variable is set before proceeding. If not set, display setup instructions and stop.
Check for:
campaign-brief.md — primary source for prompts and dimensionsbrand-profile.json — brand color/style injection (optional but recommended)If no campaign-brief.md: enter standalone mode (ask for prompt, platform, filename).
From ## Image Generation Briefs section of campaign-brief.md, extract each brief's prompt, dimensions, and safe zone notes.
For each brief, call the image generation API with:
./ad-assets/[platform]/[concept]/[filename].pngCheck all generated images against platform spec requirements (dimensions, file size).
Generation complete:
Generated assets:
./ad-assets/meta/concept-1/feed-1080x1350.png
./ad-assets/tiktok/concept-1/vertical-1080x1920.png
Cost estimate: ~$[N] at $0.067/image (Gemini)
Next steps:
1. Review assets in ./ad-assets/
2. Upload to your ad platform managersmeta-feed -> 1080x1350 (4:5)
meta-reels -> 1080x1920 (9:16)
tiktok -> 1080x1920 (9:16)
google-pmax -> 1200x628 (1.91:1)
linkedin -> 1080x1080 (1:1)
youtube -> 1280x720 (16:9)
youtube-short -> 1080x1920 (9:16)Before generating, estimate and show the cost:
brand-profile.json — from /ads dnacampaign-brief.md — from /ads create| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→fail | 24,640 | 24,480 | -1% | 1 | 1 | 0% | 3,852 | 4,420 | +15% | 0 | 0 | — |
case-05 | fail→fail | 9,088 | 11,230 | +24% | 1 | 1 | 0% | 1,783 | 2,839 | +59% | 0 | 0 | — |
case-06 | fail→fail | 23,306 | 21,497 | -8% | 1 | 1 | 0% | 3,617 | 3,912 | +8% | 0 | 0 | — |
case-07 | fail→fail | 6,223 | 2,350 | -62% | 1 | 1 | 0% | 1,022 | 1,202 | +18% | 0 | 0 | — |
case-01 | fail→pass | 7,181 | 13,068 | +82% | 1 | 1 | 0% | 1,028 | 3,189 | +210% | 0 | 0 | — |
case-02 | fail→pass | 7,442 | 8,179 | +10% | 1 | 1 | 0% | 1,135 | 2,229 | +96% | 0 | 0 | — |
case-03 | fail→pass | 6,606 | 7,604 | +15% | 1 | 1 | 0% | 1,063 | 2,175 | +105% | 0 | 0 | — |
case-08 | fail→pass | 9,613 | 3,304 | -66% | 1 | 1 | 0% | 1,601 | 1,318 | -18% | 0 | 0 | — |
case-09 | fail→pass | 14,909 | 4,337 | -71% | 1 | 1 | 0% | 2,554 | 1,561 | -39% | 0 | 0 | — |
case-10 | fail→pass | 10,186 | 1,992 | -80% | 1 | 1 | 0% | 1,787 | 1,212 | -32% | 0 | 0 | — |
case-11 | fail→pass | 12,057 | 6,221 | -48% | 1 | 1 | 0% | 2,020 | 1,909 | -5% | 0 | 0 | — |
case-12 | fail→pass | 7,920 | 2,955 | -63% | 1 | 1 | 0% | 1,092 | 1,339 | +23% | 0 | 0 | — |
case-13 | pass→pass | 6,056 | 1,565 | -74% | 1 | 1 | 0% | 990 | 1,079 | +9% | 0 | 0 | — |
case-14 | pass→pass | 12,934 | 1,592 | -88% | 1 | 1 | 0% | 2,454 | 1,087 | -56% | 0 | 0 | — |
case-15 | fail→pass | 8,546 | 2,399 | -72% | 1 | 1 | 0% | 1,471 | 1,224 | -17% | 0 | 0 | — |
case-20 | fail→fail | 9,534 | 1,690 | -82% | 1 | 1 | 0% | 1,517 | 1,112 | -27% | 0 | 0 | — |
case-16 | fail→pass | 9,492 | 2,631 | -72% | 1 | 1 | 0% | 1,636 | 1,348 | -18% | 0 | 0 | — |
case-17 | pass→pass | 6,630 | 1,938 | -71% | 1 | 1 | 0% | 1,028 | 1,213 | +18% | 0 | 0 | — |
case-18 | pass→pass | 7,420 | 1,589 | -79% | 1 | 1 | 0% | 1,185 | 1,070 | -10% | 0 | 0 | — |
case-19 | fail→pass | 9,999 | 2,277 | -77% | 1 | 1 | 0% | 1,613 | 1,279 | -21% | 0 | 0 | — |
case-21 | pass→pass | 13,829 | 8,543 | -38% | 1 | 1 | 0% | 2,197 | 2,229 | +1% | 0 | 0 | — |
case-22 | pass→pass | 11,676 | 2,146 | -82% | 1 | 1 | 0% | 1,758 | 1,159 | -34% | 0 | 0 | — |
case-23 | fail→pass | 11,810 | 2,541 | -78% | 1 | 1 | 0% | 1,844 | 1,102 | -40% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +52 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.