shotkit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited shotkit (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
End-to-end App Store screenshot pipeline for indie iOS developers. From raw Simulator capture to upload-ready assets, with native App Store Connect integration.
This skill is fully automated. When triggered, the agent handles the entire pipeline — booting simulators, capturing screenshots, compositing with trending styles, and uploading to App Store Connect — without requiring manual interaction.
Stage 1 — Auto-Capture (optional): Boots Xcode Simulator devices, launches the app via bundle ID, navigates screens via deep links, sets a clean status bar (9:41, full battery), and captures raw UI screenshots — all without user interaction.
Stage 2 — Generate Copy: Produces locale-aware headlines (max 30 chars) + sublines (max 60 chars) for each screenshot frame. If no copy.json is provided, the agent generates one based on the app's features and target audience.
Stage 3 — Composite: Renders styled screenshot images using Pillow — background, device UI area, app screenshot, and text overlay — with 5 template styles.
Stage 4 — Organize & Validate: Outputs an ASC-ready folder structure ({locale}/{device}/), validates dimensions against App Store requirements, and generates an upload checklist.
Stage 5 — Upload (optional): Uploads screenshots directly to App Store Connect via native API integration. Supports uploading new screenshots and replacing existing ones.
Ask the developer for the following (or infer from context if already provided):
Required:
Screenshot source (choose one):
If the developer chooses option A, also ask:
myapp://) and paths for each screen to captureTemplate style (choose one, or generate previews for all):
minimal — white/light background, small device frame, centered text, clean typographybold — full-bleed gradient background, large text, high contrast, punchydark — dark/black background, device glow effect, premium feeleditorial — magazine-style layout, split composition, text beside deviceflat — no device frame, full-bleed app UI with text overlay bar at bottomDevice targets (default: iPhone 6.9" + iPad 13"):
Read references/device_specs.md for the full device dimensions table.Run the dependency installer:
bash skills/shotkit/scripts/install_deps.shThis checks for Python 3, installs Pillow, and verifies xcrun is available.
Option A — Fully automated capture with deep links:
bash skills/shotkit/scripts/auto_capture.sh \
--bundle-id com.yourapp.bundleid \
--devices "iPhone 16 Pro Max,iPad Pro 13-inch (M4)" \
--screens "home,detail,settings,profile,onboarding" \
--deeplinks "myapp://home,myapp://detail/1,myapp://settings,myapp://profile,myapp://onboarding" \
--output ./raw-capturesOption A (with config file): Create a capture_config.json:
{
"bundle_id": "com.yourapp.bundleid",
"devices": ["iPhone 16 Pro Max", "iPad Pro 13-inch (M4)"],
"screens": [
{"name": "home", "deeplink": "myapp://home"},
{"name": "detail", "deeplink": "myapp://detail/1"},
{"name": "settings", "deeplink": "myapp://settings"},
{"name": "profile", "deeplink": "myapp://profile"},
{"name": "onboarding", "deeplink": "myapp://onboarding"}
]
}Then run:
bash skills/shotkit/scripts/auto_capture.sh --config capture_config.json --output ./raw-capturesThe auto-capture script will:
Option B — Interactive capture (fallback):
bash skills/shotkit/scripts/capture_simulator.sh com.yourapp.bundleid ./raw-capturesThis is the legacy interactive mode where the developer navigates manually and presses ENTER to capture.
Option C — Existing screenshots: Skip this step. Point --captures at the existing folder in Step 4.
If the developer has not provided a copy.json, generate one based on the app's features and target audience. Follow the format in references/copy_example.json:
{
"en-US": {
"screenshots": [
{"headline": "Max 30 chars", "subline": "Max 60 chars for the subline text", "scene": "Screen name"}
]
}
}Rules:
Save as copy.json in the project root or a path the developer specifies.
Run the compositing engine:
python3 skills/shotkit/scripts/generate_screenshots.py \
--app-name "YourApp" \
--captures ./raw-captures \
--copy ./copy.json \
--template bold \
--devices iphone-6.9 ipad-13 \
--locales en-US it \
--output ./screenshots-outputThis will:
{output}/{locale}/{device}/01_screen.pngAvailable templates: minimal, bold, dark, editorial, flat, trending
Read references/template_guide.md for detailed template descriptions and customization.Trending template (recommended):
shotkit generate --app-name "YourApp" --captures ./raw --template trending --icon ./icon.png
shotkit generate --app-name "YourApp" --captures ./raw --template trending --palette aurora
shotkit generate --app-name "YourApp" --captures ./raw --template trending --brand-color "#1E90FF"The trending template uses curated color palettes and layouts based on top-charting App Store apps. It can also auto-extract brand colors from your app icon. Run shotkit palettes to see all available palettes.
shotkit validate --dir ./screenshots-outputChecks:
First-time setup:
shotkit initThis connects to App Store Connect, verifies credentials, and saves config to .shotkit.json.
Download existing screenshots (backup):
shotkit download --output ./backupUpload new screenshots:
shotkit upload --dir ./screenshots-outputReplace existing screenshots:
shotkit update --dir ./screenshots-outputThe upload command validates screenshots automatically before uploading.
Read references/app_store_connect.md for full ASC integration details.shotkit screenshots \
--bundle-id com.yourapp.id \
--app-name "YourApp" \
--template trending \
--icon ./icon.png \
--deeplinks "myapp://home,myapp://detail,myapp://settings" \
--screens "home,detail,settings" \
--devices iphone-6.9 \
--locales en-USThis runs capture + generate + validate in sequence.
For fully automated capture, the app must support URL schemes or Universal Links. Common patterns:
myapp://home — main screenmyapp://feature/detail?id=1 — specific contentmyapp://settings — settings screenmyapp://onboarding — onboarding flowAdd URL schemes in Xcode: Target → Info → URL Types.
For best results, ensure the app has realistic demo data loaded before capture. Options:
--demo-mode) that loads sample contentxcrun simctl to push notifications or set defaults before captureThe automated capture handles multiple devices sequentially — it boots each device, captures all screens, then shuts it down before moving to the next. This keeps resource usage low.
The auto-capture script automatically sets the status bar to the Apple-standard "marketing" look: 9:41 AM, full battery, full signal, no carrier name. Use --no-clean-status to skip this.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.