Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate a complete, style-consistent set of image assets for a web or app project in one pass — favicons, app icons, OG/social cards, hero images, empty-state illustrations, or a matching icon family. Use when the user asks for "icons for", "assets for", "favicon", "og image", "app icon", "a set of illustrations", or is setting up branding for a new project.
.claude/skills/sateezg-generate-a-consistent-asset-set/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 22% | 0% |
Individual images are the generate-image skill. This is for families of assets that must look like they came from the same designer — which requires a shared style contract, correct sizes, and correct filenames.
Before generating anything, write one style sentence you will paste verbatim into every prompt in the set. It must pin down: art style, palette (hex codes), stroke weight, corner treatment, background, and perspective. For example:
> Flat vector, 2px uniform stroke, palette #2563EB on #FFFFFF with #94A3B8 > accents, 4px rounded corners, centered, generous padding, no gradients, no > shadows, front-on view.
Pull the palette from the project when one exists — check tailwind.config.*, CSS custom properties, a design tokens file, or an existing logo. Ask the user only if nothing is discoverable.
One call per asset, style sentence repeated in each:
bashcodex-imagegen "<subject>. <style contract>" <path>.png --size <WxH>
Generate the most important asset first (the logo mark or the hero), show it to the user, and only continue once they're happy. Regenerating a whole set after the fact wastes their quota.
For assets that must match one already generated, pass it as a reference so the model has the style in front of it, not just described:
bashcodex-imagegen "a settings gear icon, same style as the reference" ./icons/settings.png --ref ./icons/home.png
Do not regenerate for each size. Generate one large master and resample it with ImageMagick (or sips on macOS) — it's instant, free, and pixel-consistent:
bashmagick master.png -resize 512x512 icon-512.png magick master.png -define icon:auto-resize=16,32,48,64 favicon.ico
Web favicon set — master at 1024x1024, then derive favicon.ico (16/32/48), favicon-32x32.png, apple-touch-icon.png (180x180), icon-192.png, icon-512.png.
Social / OG card — generate at 1536x1024, resample to 1200x630 (1200x630 isn't directly generatable: 630 is not a multiple of 16). Leave the centre clear if a title will be overlaid; ask whether text should be baked in — text renders reliably, but baked text can't be localised later.
iOS / Android app icon — master at 1024x1024, no transparency, no rounded corners (the OS masks them), subject centred with ~10% safe margin.
Icon family — all at 1024x1024 with the identical style sentence, downscaled to the size the UI actually uses.
Empty states / illustrations — 1536x1024, same palette as the product, generous whitespace so copy can sit alongside.
coherent side by side — not just each image on its own.
public/ or assets/ for web,kebab-case, size in the filename where a variant exists.
and spends real ChatGPT quota. Say the expected count before you start and let the user trim the list.
multiples of 16, ratio ≤ 3:1, total pixels 655,360–8,294,400. Every standard icon size (16, 32, 180, 192, 512) is below that floor — which is exactly why you generate one large master and resample.
may write a versioned sibling (icon-v2.png); the wrapper detects that and reports the real path.
For sets larger than about four images, hand the whole brief to the codex-artist subagent so the generation loop stays out of the main conversation.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | fail→pass | 17,050 | 17,161 | +1% | 1 | 1 | 0% | 2,020 | 3,304 | +64% | 0 | 0 | — |
case-10 | pass→pass | 12,241 | 5,239 | -57% | 1 | 1 | 0% | 1,959 | 2,051 | +5% | 0 | 0 | — |
case-11 | pass→pass | 14,038 | 7,531 | -46% | 1 | 1 | 0% | 1,371 | 1,512 | +10% | 0 | 0 | — |
case-01 | fail→fail | 36,510 | 15,024 | -59% | 1 | 1 | 0% | 7,707 | 1,404 | -82% | 0 | 0 | — |
case-02 | fail→fail | 57,844 | 7,908 | -86% | 1 | 1 | 0% | 8,256 | 1,746 | -79% | 0 | 0 | — |
case-03 | fail→fail | 23,670 | 6,630 | -72% | 1 | 1 | 0% | 4,735 | 1,431 | -70% | 0 | 0 | — |
case-04 | fail→fail | 41,446 | 14,533 | -65% | 1 | 1 | 0% | 8,233 | 1,841 | -78% | 0 | 0 | — |
case-05 | fail→fail | 31,378 | 16,338 | -48% | 1 | 1 | 0% | 2,924 | 1,867 | -36% | 0 | 0 | — |
case-06 | fail→fail | 25,192 | 20,604 | -18% | 1 | 1 | 0% | 3,653 | 1,726 | -53% | 0 | 0 | — |
case-07 | fail→fail | 47,583 | 12,833 | -73% | 1 | 1 | 0% | 8,228 | 1,651 | -80% | 0 | 0 | — |
case-08 | fail→pass | 14,151 | 11,318 | -20% | 1 | 1 | 0% | 1,562 | 2,060 | +32% | 0 | 0 | — |
case-12 | fail→pass | 10,984 | 8,641 | -21% | 1 | 1 | 0% | 911 | 1,616 | +77% | 0 | 0 | — |
case-13 | pass→fail | 7,416 | 9,179 | +24% | 1 | 1 | 0% | 1,315 | 1,799 | +37% | 0 | 0 | — |
case-14 | pass→pass | 13,706 | 9,721 | -29% | 1 | 1 | 0% | 1,801 | 1,817 | +1% | 0 | 0 | — |
case-15 | fail→pass | 27,682 | 10,415 | -62% | 1 | 1 | 0% | 1,415 | 2,050 | +45% | 0 | 0 | — |
case-16 | pass→pass | 16,533 | 12,706 | -23% | 1 | 1 | 0% | 1,896 | 2,349 | +24% | 0 | 0 | — |
case-17 | fail→pass | 16,814 | 12,481 | -26% | 1 | 1 | 0% | 1,843 | 2,255 | +22% | 0 | 0 | — |
case-18 | fail→pass | 10,937 | 12,742 | +17% | 1 | 1 | 0% | 1,689 | 2,365 | +40% | 0 | 0 | — |
case-19 | fail→pass | 19,187 | 2,944 | -85% | 1 | 1 | 0% | 1,982 | 1,539 | -22% | 0 | 0 | — |
case-20 | pass→pass | 9,390 | 12,704 | +35% | 1 | 1 | 0% | 838 | 2,377 | +184% | 0 | 0 | — |
case-21 | pass→pass | 9,441 | 8,352 | -12% | 1 | 1 | 0% | 1,476 | 2,320 | +57% | 0 | 0 | — |
case-22 | pass→pass | 12,899 | 10,583 | -18% | 1 | 1 | 0% | 1,383 | 2,123 | +54% | 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. 22 cases were attempted, and 14 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 14 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
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.