asc-app-shots
App Store screenshot generation skill with two workflows: (A) AI-powered: fetches app metadata via `asc` CLI, analyzes screenshots with Claude vision, writes a ScreenPlan JSON, then generates final marketing screenshots via Gemini (`asc app-shots generate`), and optionally translates them (`asc app-shots translate`). (B) HTML-based (deterministic): writes a CompositionPlan JSON with precise device placement, text overlays, and backgrounds, then runs `asc app-shots html` to produce a self-contained HTML page with real device mockup frames and client-side PNG export — no AI needed. Use this skill when: (1) User asks to "create App Store screenshots" or "generate screenshot plan" (2) User asks to "make an HTML screenshot page" or "compose screenshots with mockups" (3) User mentions "asc-app-shots", "app-shots html", "composition plan", or screenshot marketing (4) User wants deterministic, reproducible screenshot layouts with device mockups (5) User wants AI-generated screenshots via Gemini
NPX Install
npx skill4agent add tddworks/asc-cli-skills asc-app-shotsTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →asc-app-shots: App Store Screenshot Generator
| Workflow A: AI (Gemini) | Workflow B: HTML (Deterministic) | |
|---|---|---|
| Plan format | | |
| Command | | |
| Output | PNG files via Gemini | Self-contained HTML with export |
| Mockup | AI-rendered device frame | Real PNG mockup frame (bundled) |
| Reproducible | No (AI varies each run) | Yes (same plan = same output) |
| Requires API key | Yes (Gemini) | No |
| Multi-device | One per screen | Multiple per screen |
Workflow B — HTML-based (Deterministic)
Step 1 — Write a CompositionPlan
references/composition-plan-schema.md{
"appName": "MyApp",
"canvas": { "width": 1320, "height": 2868, "displayType": "APP_IPHONE_69" },
"defaults": {
"background": { "type": "gradient", "from": "#2A1B5E", "to": "#000000", "angle": 180 },
"textColor": "#FFFFFF",
"subtextColor": "#A8B8D0",
"accentColor": "#4A7CFF",
"font": "Inter"
},
"screens": [
{
"texts": [
{ "content": "APP MANAGEMENT", "x": 0.065, "y": 0.028, "fontSize": 0.028, "fontWeight": 700, "color": "#B8A0FF" },
{ "content": "All your apps,\none dashboard.", "x": 0.065, "y": 0.055, "fontSize": 0.075, "fontWeight": 800, "color": "#FFFFFF" }
],
"devices": [
{ "screenshotFile": "screenshot-1.png", "mockup": "iPhone 17 Pro Max", "x": 0.5, "y": 0.65, "scale": 0.88 }
]
}
]
}Design patterns (Helm / premium App Store style)
- Small uppercase category label at top: ,
y: 0.028, colored to match gradientfontSize: 0.028 - Bold 2-line heading below: ,
y: 0.055,fontSize: 0.075, whitefontWeight: 800 - Large phone: ,
scale: 0.88— fills space below text, overflows bottomy: 0.65 - Each screen gets a unique gradient vibe (purple, blue, teal) fading to black
- Center-aligned text: ,
x: 0.5textAlign: "center" - Back phone: ,
x: 0.34,y: 0.58scale: 0.50 - Front phone: ,
x: 0.66,y: 0.64scale: 0.50 - Front phone rendered on top (listed second in array)
devices
- Purple: with label
{ "from": "#2A1B5E", "to": "#000000" }#B8A0FF - Blue: with label
{ "from": "#1B3A5E", "to": "#000000" }#7BC4FF - Teal: with label
{ "from": "#1A4A3E", "to": "#000000" }#7BFFC4
Step 2 — Run html command
# Auto-discover screenshots from plan directory
asc app-shots html --plan composition-plan.json --output-dir output
# Explicit screenshot paths
asc app-shots html --plan composition-plan.json --output-dir output screenshot-1.png screenshot-2.png
# Disable mockup frame (screenshots only, no device frame)
asc app-shots html --plan composition-plan.json --output-dir output --mockup noneapp-shots.html- All screenshots embedded as base64 data URIs
- Real device mockup frame (bundled iPhone 17 Pro Max - Deep Blue by default)
- Client-side PNG export via html-to-image CDN
- "Export All" button to download each screen as a PNG
Device mockup system
mockups.json- Use the default: omit
--mockup - Disable:
--mockup none - Use custom PNG:
--mockup /path/to/frame.png --screen-inset-x 80 --screen-inset-y 70 - Add custom mockups: place + PNG files in
mockups.json~/.asc/mockups/
mockupmockups.json{
"iPhone 17 Pro Max - Deep Blue": {
"category": "iPhone",
"model": "iPhone 17 Pro Max",
"displayType": "APP_IPHONE_67",
"outputWidth": 1470, "outputHeight": 3000,
"screenInsetX": 75, "screenInsetY": 66,
"file": "iPhone 17 Pro Max - Deep Blue - Portrait.png",
"default": true
}
}HTML command flags
| Flag | Default | Description |
|---|---|---|
| | Path to plan JSON |
| | Output directory |
| | Canvas width (overridden by plan's |
| | Canvas height (overridden by plan's |
| — | Named device type, overrides width/height |
| (bundled default) | Device name, file path, or |
| — | Override screen inset X from mockups.json |
| — | Override screen inset Y from mockups.json |
Workflow A — AI-powered (Gemini)
- This skill — fetch metadata + analyze screenshots → write
app-shots-plan.json - — read plan + call Gemini image generation → output
asc app-shots generatescreen-{n}.png - (optional) — translate generated screenshots into other locales
asc app-shots translate
Step 1 — Detect CLI command
which asc- If found → use directly
asc - If not found → use
swift run asc
Step 2 — Gather inputs
- App ID — read from first; if not present, run
.asc/project.jsonasc apps list - Version ID — run and use the first result
asc versions list --app-id <APP_ID> - Locale — default:
en-US - Screenshot files — check first; only ask user if no files found
.asc/app-shots/
Step 3 — Fetch App Store metadata
references/commands.mdAPP_INFO_ID=$(asc app-infos list --app-id <APP_ID> | jq -r '.data[0].id')
asc app-info-localizations list --app-info-id "$APP_INFO_ID" \
| jq '.data[] | select(.locale == "<LOCALE>") | {name, subtitle}'
VERSION_ID=$(asc versions list --app-id <APP_ID> | jq -r '.data[0].id')
asc version-localizations list --version-id "$VERSION_ID" \
| jq '.data[] | select(.locale == "<LOCALE>") | {description, keywords}'descriptionappDescriptionStep 4 — Analyze screenshots with vision
- Colors: primary, accent, text, subtext hex values
- Per-screen: heading (2-5 words), subheading (6-12 words), layoutMode, visualDirection, imagePrompt
- Tone: minimal / playful / professional / bold / elegant
references/plan-schema.mdStep 5 — Write plan and generate
.asc/app-shots/app-shots-plan.jsonasc app-shots generate--gemini-api-key$GEMINI_API_KEY~/.asc/app-shots-config.jsonStep 6 — Translate (optional)
asc app-shots translate --to zh --to jareferences/commands.mdGemini API key management
asc app-shots config --gemini-api-key AIzaSy... # save key
asc app-shots config # show current key (masked) + source
asc app-shots config --remove # delete saved key