Generate professional, framed App Store screenshots with text overlays — in seconds.
Raw PNGs (UITests) → Screenshot Factory → App Store Connect
+ device frame
+ text overlays
+ shadows & glow
- No Swift dependencies — framing engine uses only Apple SDK (SwiftUI ImageRenderer, AppKit)
- Requires fastlane — for capture (
snap) and upload (deliver) - Configuration-driven — one
screenshots.jsondefines design, screens, and localized text - Full pipeline — capture + frame in a single command
- 6 ready-to-use templates — dark, light, vibrant, minimal, and more
Install the skill in your iOS project once, then just call it:
Claude Code
npx skills add iMark21/ScreenshotFactoryThen run /setup-screenshots in your project.
OpenCode Copy the skill to your project (one time):
mkdir -p .opencode/skills
cp -r path/to/ScreenshotFactory/.opencode/skills/setup-screenshots .opencode/skills/Then run /setup-screenshots in your project.
OpenCode also reads
.claude/skills/automatically, so if you already installed the Claude Code skill it works without extra steps.
Codex (OpenAI)
The AGENTS.md file at the root of this repo is read automatically. Ask your agent to set up Screenshot Factory.
The skill handles everything: clones and builds this tool if needed, asks the right questions, and sets up your project without touching a single file until you confirm.
To remove everything it created: call /setup-screenshots and say "uninstall".
git clone https://github.com/iMark21/ScreenshotFactory.git
cd ScreenshotFactory
swift build -c release
cp "$(swift build -c release --show-bin-path)/screenshot-factory" /usr/local/bin/Or as a Swift Package:
.package(url: "https://github.com/iMark21/ScreenshotFactory.git", from: "2.4.0")Copy these files to your project:
cp Capture/SnapshotHelper.swift MyApp/MyAppUITests/
cp Capture/capture.sh MyApp/fastlane/
cp Capture/pipeline.sh MyApp/fastlane/
chmod +x MyApp/fastlane/capture.sh MyApp/fastlane/pipeline.shConfigure fastlane/Snapfile:
project("MyApp.xcodeproj")
scheme("MyApp")
devices(["iPhone 17 Pro Max"]) # Add "iPad Pro 13-inch (M5)" if needed
languages(["en-US", "es-ES"])
launch_arguments(["--screenshot-mode"])
output_directory("./fastlane/screenshots")Start from a template:
cp Templates/dark-teal-accent.json fastlane/screenshots.jsonEdit fastlane/screenshots.json — add your app's texts per locale and adjust colors. Then run:
./fastlane/pipeline.sh # capture + frameOr frame only (if raw screenshots already exist):
screenshot-factory \
--config fastlane/screenshots.json \
--input fastlane/screenshots/ \
--output fastlane/screenshots_framed/| Template | Style | Best for |
|---|---|---|
dark-teal-accent |
Dark bg + per-screen accent {words} |
Games, social, entertainment |
space-navy |
Deep navy/indigo shifting per screen | Meditation, lifestyle, health |
obsidian-minimal |
Pure black, white text, alternating layout | Premium, e-commerce, productivity |
dark-atmospheric |
Moody single dark gradient | Atmospheric, immersive apps |
light-clean |
White/gray bg, dark text | Utilities, tools, professional |
vibrant-gradient |
Bold diagonal color gradient | Fitness, social, creative |
Use {word} syntax in keyword text to highlight a word in the accent color:
"keyword": "Keep track of your {goals}"| Key | Device | Size |
|---|---|---|
iPhone_6.9 |
iPhone 17 Pro Max | 1320 × 2868 |
iPad_13 |
iPad Pro 13" (M5) | 2064 × 2752 |
Apple auto-scales to smaller devices. Each device class needs its own raw captures — never reuse iPhone screenshots for iPad.
- macOS 13+
- Swift 5.9+ (Xcode 15+)
MIT — see LICENSE.