App assets
A one-shot pipeline that turns a single app idea into the full store-ready asset pack: app icon across every required size, splash screen, device-framed App Store / Play Store screenshots, and feature graphic. One visual language, one style reference, every platform.
When to Use
- Launching an iOS / Android / cross-platform app and need the full asset set before submission.
- Rebranding an existing app: re-render all icons + store art in a new style.
- Indie / hackathon ships where you'd otherwise hand-crop 30 icon sizes.
- Watch + phone + tablet variants that must feel like one product.
- Regenerating localized App Store screenshots for new markets.
Not for: motion assets (use gen-ai-use), marketing LP heroes (dev-screenshot-beautifier), or final pixel-perfect logo work (hand off to a designer).
Prerequisites
Ask before generating (one message, 6 questions):
- App name + one-line concept (e.g. "Rally — a focus timer for ADHD brains").
- Style direction: flat, gradient, claymorphic, glass, pixel? Any existing logo or style exemplar to reference?
- Brand tokens: primary + accent colors (hex), typography, mood keywords.
- Platforms: iOS, Android, watchOS, macOS, web PWA — which sizes do you need?
- Device frames for screenshots: iPhone 16 Pro, Pixel 9, Apple Watch, iPad Pro? Portrait or landscape?
- Deliverable folder: where should the pack land (e.g.
./app-assets/)?
How to Run
Estimate + validate the master style.
gen-ai models info flux-2-pro
gen-ai generate -m flux-2-pro -p "<style prompt>" --aspect-ratio 1:1 --dry-run --debug
Generate the master icon (1024×1024, the source-of-truth). This is what every downstream size gets derived from — make it right once.
gen-ai generate -m flux-2-pro \
-p "app icon, 'Rally' focus timer, minimalist gradient, magenta #FF006E to purple #8338EC, soft shadow, rounded-rect canvas, centered glyph, hyperreal studio render" \
--aspect-ratio 1:1 \
--download ./app-assets/icon-master \
--save-to-drive --drive-folder "rally-app-assets"
Review visually. Regenerate until approved — do NOT batch before the master is locked.
Derive all icon sizes locally (no gen-ai credits). Icons are deterministic resizes of the master.
MASTER=./app-assets/icon-master/result.png
# iOS sizes (App Store 1024, iPhone 60@2x/@3x, iPad, Settings, Spotlight, Notification)
for size in 1024 180 120 167 152 76 87 80 58 40 120 87 58; do
sips -z $size $size "$MASTER" --out "./app-assets/ios/icon-${size}.png"
done
# Android (mipmap-mdpi … xxxhdpi: 48, 72, 96, 144, 192, 512)
for size in 48 72 96 144 192 512; do
sips -z $size $size "$MASTER" --out "./app-assets/android/ic_launcher-${size}.png"
done
# watchOS (24, 27.5, 29, 40, 44, 50, 86, 98, 108)
for size in 48 55 58 80 88 100 172 196 216; do
sips -z $size $size "$MASTER" --out "./app-assets/watch/icon-${size}.png"
done
Generate the splash / launch screen off the same master (keep visual DNA).
gen-ai generate -m flux-kontext-pro \
-i ./app-assets/icon-master/result.png \
-p "splash screen, centered app icon on a vertical gradient, same magenta-to-purple palette, 9:19.5 mobile canvas, calm negative space" \
--aspect-ratio 9:16 \
--download ./app-assets/splash
Batch the App Store screenshots — one manifest per platform, framed separately.
gen-ai batch run app-store-shots.json -c 4 -o ./app-assets/screenshots
Then wrap with device frames using dev-screenshot-beautifier (see that skill) or a tool like fastlane frameit.
Feature graphic (Play Store) + promo (App Store).
gen-ai generate -m flux-2-pro \
-p "Play Store feature graphic, 'Rally' wordmark, 1024×500, same gradient, key benefit 'Focus in bursts'" \
--aspect-ratio 1024x500 \
--download ./app-assets/store
Verify mask alignment. iOS auto-masks to a rounded-rect; content must sit inside the safe zone or you'll get clipped corners. Preview at 60×60 — if the glyph bleeds, regenerate with centered glyph, 15% padding all sides in the prompt.
Quick Reference
App Store screenshots (6.9" iPhone, 1290×2796, 5 screens):
{
"defaults": {
"model": "flux-kontext-pro",
"aspectRatio": "1290x2796",
"imageUrls": ["./app-assets/icon-master/result.png"]
},
"jobs": [
{ "id": "screen-1-hero", "prompt": "iPhone app UI mockup, 'Rally' focus timer home screen, large timer dial, magenta-to-purple gradient, tagline 'Focus in bursts' above the fold" },
{ "id": "screen-2-session", "prompt": "iPhone app UI mockup, active focus session, glowing timer ring at 00:14:23, calm dark background" },
{ "id": "screen-3-stats", "prompt": "iPhone app UI mockup, weekly focus stats bar chart, magenta bars, caption 'You focused 12h this week'" },
{ "id": "screen-4-streak", "prompt": "iPhone app UI mockup, 14-day streak celebration, confetti, flame icon, headline 'Day 14 unlocked'" },
{ "id": "screen-5-settings", "prompt": "iPhone app UI mockup, settings screen, clean list rows, same palette, tagline 'Built for ADHD brains'" }
]
}
Quick Reference
| Sub-task |
Model |
Why |
| Master app icon (hero render) |
flux-2-pro |
Best photoreal gradients, clean glyphs |
| Icon style variations from master |
flux-kontext-pro + -i master.png |
Preserves identity, varies background/treatment |
| Vector-style / flat icons |
recraftv4 |
Clean shapes, flat color, tight edges |
| App Store screenshot mockups with readable UI text |
ideogram-v3 |
Renders in-image copy cleanly |
| Splash / onboarding illustration with app icon reference |
flux-kontext-pro + -i |
Keeps visual DNA across the set |
| Cheap drafts while style-hunting |
gemini-3.1-flash-image |
Lowest credits |
Confirm IDs with gen-ai models --mode image.
Procedure
- Lock the master before batching. One great 1024 is worth 30 mediocre variants. Never run the icon-size loop until the master is approved.
- Resize locally, don't regenerate.
sips / ImageMagick / sharp for all sizes below the master. AI-regenerating each size produces drift.
- Reference the master for every downstream asset.
-i icon-master.png into splash, screenshots, feature graphic. Shared visual DNA.
- Respect iOS mask. iOS auto-clips to a superellipse at the OS level; keep the glyph within 80% of the canvas, centered. Test at 60×60 before committing.
- Android adaptive icons need separate foreground + background layers (108×108 with 72×72 safe zone). Generate foreground transparent, background as a solid/gradient tile.
- Save everything to Drive.
--drive-folder "<app>-assets" — so a designer can review in one place without cloning your repo.
- Version the style prompt. Store the exact prompt in
app-assets/STYLE.md. Future "just one more screenshot" requests stay consistent.
- Don't re-render on every CI run. Assets are release artifacts — commit them, or generate once and upload to your asset pipeline.
Pitfalls
| Pitfall |
Fix |
| Icon clipped at corners after iOS mask |
Re-prompt with centered glyph, 15% safe-zone padding, regenerate master |
| Android adaptive icon background bleeds through |
Generate foreground with transparent bg (transparent background, isolated glyph); layer manually |
| Screenshots look inconsistent across 5 shots |
Always reference the master icon with -i on every screenshot job |
| Store screenshot copy is gibberish |
Switch the screenshot model to ideogram-v3 — it renders text |
| Watch icon glyph unreadable at 48px |
Increase stroke weight + contrast in the master; re-derive |
| Drift between iOS and Android variants |
Use one master image, resize locally — do not regenerate per platform |
| Style prompts forgotten 3 months later for "one more screen" |
Commit STYLE.md with the exact prompt + palette |
Verification
Run gen-ai whoami to confirm authentication, then re-run the failed command with --debug.
Cost & time
| Task |
Credits |
Time |
| 1 master icon (Flux 2 Pro, 1024) |
3-5 |
~15-25s |
| Local resize to ~25 icon sizes |
0 |
~5s total |
| 1 splash screen (Flux Kontext Pro, 9:16) |
3-5 |
~15-25s |
| 5× App Store screenshots (Ideogram v3) |
10-20 |
~60-90s batched c=4 |
| 1 feature graphic (Flux 2 Pro, 1024×500) |
3-5 |
~15-25s |
| Full app pack (iOS + Android + watchOS + store) |
~35-50 |
~5-8 min |
See also
gen-ai-use.md — CLI reference, flags, auth
gen-ai-batch.md — manifest shapes, batch resume, concurrency tuning
gen-ai-workflows.md — Workflow 5 (launch kit) for motion/reel companion assets
dev-screenshot-beautifier — device-frame the App Store screenshots
dev-og-image-service — social cards for the marketing site
1---2name: dev-app-assets3description: Generate icons, empty states, onboarding for apps.4license: MIT5---67# App assets89A one-shot pipeline that turns a single app idea into the full store-ready asset pack: app icon across every required size, splash screen, device-framed App Store / Play Store screenshots, and feature graphic. One visual language, one style reference, every platform.1011## When to Use1213- Launching an iOS / Android / cross-platform app and need the full asset set before submission.14- Rebranding an existing app: re-render all icons + store art in a new style.15- Indie / hackathon ships where you'd otherwise hand-crop 30 icon sizes.16- Watch + phone + tablet variants that must feel like one product.17- Regenerating localized App Store screenshots for new markets.1819Not for: motion assets (use `gen-ai-use`), marketing LP heroes (`dev-screenshot-beautifier`), or final pixel-perfect logo work (hand off to a designer).2021## Prerequisites2223Ask before generating (one message, 6 questions):24251. **App name + one-line concept** (e.g. "Rally — a focus timer for ADHD brains").262. **Style direction**: flat, gradient, claymorphic, glass, pixel? Any existing logo or style exemplar to reference?273. **Brand tokens**: primary + accent colors (hex), typography, mood keywords.284. **Platforms**: iOS, Android, watchOS, macOS, web PWA — which sizes do you need?295. **Device frames for screenshots**: iPhone 16 Pro, Pixel 9, Apple Watch, iPad Pro? Portrait or landscape?306. **Deliverable folder**: where should the pack land (e.g. `./app-assets/`)?3132## How to Run33341. **Estimate + validate the master style.**35 ```bash36 gen-ai models info flux-2-pro37 gen-ai generate -m flux-2-pro -p "<style prompt>" --aspect-ratio 1:1 --dry-run --debug38 ```39402. **Generate the master icon (1024×1024, the source-of-truth).** This is what every downstream size gets derived from — make it right once.41 ```bash42 gen-ai generate -m flux-2-pro \43 -p "app icon, 'Rally' focus timer, minimalist gradient, magenta #FF006E to purple #8338EC, soft shadow, rounded-rect canvas, centered glyph, hyperreal studio render" \44 --aspect-ratio 1:1 \45 --download ./app-assets/icon-master \46 --save-to-drive --drive-folder "rally-app-assets"47 ```48 Review visually. Regenerate until approved — do NOT batch before the master is locked.49503. **Derive all icon sizes locally** (no gen-ai credits). Icons are deterministic resizes of the master.51 ```bash52 MASTER=./app-assets/icon-master/result.png53 # iOS sizes (App Store 1024, iPhone 60@2x/@3x, iPad, Settings, Spotlight, Notification)54 for size in 1024 180 120 167 152 76 87 80 58 40 120 87 58; do55 sips -z $size $size "$MASTER" --out "./app-assets/ios/icon-${size}.png"56 done57 # Android (mipmap-mdpi … xxxhdpi: 48, 72, 96, 144, 192, 512)58 for size in 48 72 96 144 192 512; do59 sips -z $size $size "$MASTER" --out "./app-assets/android/ic_launcher-${size}.png"60 done61 # watchOS (24, 27.5, 29, 40, 44, 50, 86, 98, 108)62 for size in 48 55 58 80 88 100 172 196 216; do63 sips -z $size $size "$MASTER" --out "./app-assets/watch/icon-${size}.png"64 done65 ```66674. **Generate the splash / launch screen** off the same master (keep visual DNA).68 ```bash69 gen-ai generate -m flux-kontext-pro \70 -i ./app-assets/icon-master/result.png \71 -p "splash screen, centered app icon on a vertical gradient, same magenta-to-purple palette, 9:19.5 mobile canvas, calm negative space" \72 --aspect-ratio 9:16 \73 --download ./app-assets/splash74 ```75765. **Batch the App Store screenshots** — one manifest per platform, framed separately.77 ```bash78 gen-ai batch run app-store-shots.json -c 4 -o ./app-assets/screenshots79 ```80 Then wrap with device frames using `dev-screenshot-beautifier` (see that skill) or a tool like `fastlane frameit`.81826. **Feature graphic (Play Store) + promo (App Store).**83 ```bash84 gen-ai generate -m flux-2-pro \85 -p "Play Store feature graphic, 'Rally' wordmark, 1024×500, same gradient, key benefit 'Focus in bursts'" \86 --aspect-ratio 1024x500 \87 --download ./app-assets/store88 ```89907. **Verify mask alignment.** iOS auto-masks to a rounded-rect; content must sit inside the safe zone or you'll get clipped corners. Preview at 60×60 — if the glyph bleeds, regenerate with `centered glyph, 15% padding all sides` in the prompt.9192## Quick Reference9394App Store screenshots (6.9" iPhone, 1290×2796, 5 screens):9596```json97{98 "defaults": {99 "model": "flux-kontext-pro",100 "aspectRatio": "1290x2796",101 "imageUrls": ["./app-assets/icon-master/result.png"]102 },103 "jobs": [104 { "id": "screen-1-hero", "prompt": "iPhone app UI mockup, 'Rally' focus timer home screen, large timer dial, magenta-to-purple gradient, tagline 'Focus in bursts' above the fold" },105 { "id": "screen-2-session", "prompt": "iPhone app UI mockup, active focus session, glowing timer ring at 00:14:23, calm dark background" },106 { "id": "screen-3-stats", "prompt": "iPhone app UI mockup, weekly focus stats bar chart, magenta bars, caption 'You focused 12h this week'" },107 { "id": "screen-4-streak", "prompt": "iPhone app UI mockup, 14-day streak celebration, confetti, flame icon, headline 'Day 14 unlocked'" },108 { "id": "screen-5-settings", "prompt": "iPhone app UI mockup, settings screen, clean list rows, same palette, tagline 'Built for ADHD brains'" }109 ]110}111```112113## Quick Reference114115| Sub-task | Model | Why |116|----------|-------|-----|117| Master app icon (hero render) | `flux-2-pro` | Best photoreal gradients, clean glyphs |118| Icon style variations from master | `flux-kontext-pro` + `-i master.png` | Preserves identity, varies background/treatment |119| Vector-style / flat icons | `recraftv4` | Clean shapes, flat color, tight edges |120| App Store screenshot mockups with readable UI text | `ideogram-v3` | Renders in-image copy cleanly |121| Splash / onboarding illustration with app icon reference | `flux-kontext-pro` + `-i` | Keeps visual DNA across the set |122| Cheap drafts while style-hunting | `gemini-3.1-flash-image` | Lowest credits |123124Confirm IDs with `gen-ai models --mode image`.125126## Procedure127128- **Lock the master before batching.** One great 1024 is worth 30 mediocre variants. Never run the icon-size loop until the master is approved.129- **Resize locally, don't regenerate.** `sips` / `ImageMagick` / `sharp` for all sizes below the master. AI-regenerating each size produces drift.130- **Reference the master for every downstream asset.** `-i icon-master.png` into splash, screenshots, feature graphic. Shared visual DNA.131- **Respect iOS mask.** iOS auto-clips to a superellipse at the OS level; keep the glyph within 80% of the canvas, centered. Test at 60×60 before committing.132- **Android adaptive icons** need separate foreground + background layers (108×108 with 72×72 safe zone). Generate foreground transparent, background as a solid/gradient tile.133- **Save everything to Drive.** `--drive-folder "<app>-assets"` — so a designer can review in one place without cloning your repo.134- **Version the style prompt.** Store the exact prompt in `app-assets/STYLE.md`. Future "just one more screenshot" requests stay consistent.135- **Don't re-render on every CI run.** Assets are release artifacts — commit them, or generate once and upload to your asset pipeline.136137## Pitfalls138139| Pitfall | Fix |140|---------|-----|141| Icon clipped at corners after iOS mask | Re-prompt with `centered glyph, 15% safe-zone padding`, regenerate master |142| Android adaptive icon background bleeds through | Generate foreground with transparent bg (`transparent background, isolated glyph`); layer manually |143| Screenshots look inconsistent across 5 shots | Always reference the master icon with `-i` on every screenshot job |144| Store screenshot copy is gibberish | Switch the screenshot model to `ideogram-v3` — it renders text |145| Watch icon glyph unreadable at 48px | Increase stroke weight + contrast in the master; re-derive |146| Drift between iOS and Android variants | Use one master image, resize locally — do not regenerate per platform |147| Style prompts forgotten 3 months later for "one more screen" | Commit `STYLE.md` with the exact prompt + palette |148149## Verification150151Run `gen-ai whoami` to confirm authentication, then re-run the failed command with `--debug`.152153## Cost & time154155| Task | Credits | Time |156|------|---------|------|157| 1 master icon (Flux 2 Pro, 1024) | 3-5 | ~15-25s |158| Local resize to ~25 icon sizes | 0 | ~5s total |159| 1 splash screen (Flux Kontext Pro, 9:16) | 3-5 | ~15-25s |160| 5× App Store screenshots (Ideogram v3) | 10-20 | ~60-90s batched c=4 |161| 1 feature graphic (Flux 2 Pro, 1024×500) | 3-5 | ~15-25s |162| **Full app pack (iOS + Android + watchOS + store)** | **~35-50** | **~5-8 min** |163164## See also165166- `gen-ai-use.md` — CLI reference, flags, auth167- `gen-ai-batch.md` — manifest shapes, batch resume, concurrency tuning168- `gen-ai-workflows.md` — Workflow 5 (launch kit) for motion/reel companion assets169- `dev-screenshot-beautifier` — device-frame the App Store screenshots170- `dev-og-image-service` — social cards for the marketing site