Skip to main content

Screenshots

Capture, frame, review, and upload App Store screenshots
Manage the full screenshot workflow from local capture to App Store upload.

Overview

The screenshots command provides both local automation for capturing and framing screenshots, and App Store operations for uploading and managing screenshots in your app listings.

Local Workflow (Experimental)

The local screenshot automation features are experimental. If you encounter issues, please file feedback.

Capture Screenshots

Capture screenshots from running simulators or applications:
Supported Providers:
  • axe - Screenshot provider for iOS simulators
  • macos - Screenshot provider for macOS applications
Capture Options:
  • --bundle-id - Application bundle identifier
  • --name - Screenshot name (without extension)
  • --output-dir - Output directory for raw PNG files
  • --provider - Capture provider (axe or macos)
  • --udid - Simulator UDID or “booted”

Frame Screenshots

Add device frames and backgrounds to raw screenshots:
Supported Devices:
  • iphone-air - iPhone Air (6.9”)
  • iphone-17-pro - iPhone 17 Pro (6.7”)
  • iphone-17-pro-max - iPhone 17 Pro Max (6.9”)
  • iphone-16e - iPhone 16e (6.1”)
  • iphone-17 - iPhone 17 (6.7”)
  • mac - macOS desktop
Framing Options:
  • --input - Path to raw screenshot PNG
  • --device - Frame device profile
  • --output - Output path for framed image
  • --title - Overlay title text
  • --subtitle - Overlay subtitle text
  • --title-color - Title text color (hex format)
  • --subtitle-color - Subtitle text color (hex format)
Requirements:
  • Koubou CLI tool (version 0.14.0 or higher)
  • Install via: brew install koubou or download from releases

Review Workflow

Generate, review, and approve framed screenshots:

Plan and Apply Approved Artifacts

Turn approved review artifacts into a deterministic upload plan before mutating remote screenshot state:
Plan/Apply Options:
  • --app - App Store Connect app ID
  • --version - App Store version string
  • --version-id - App Store version ID (alternative to --version)
  • --review-output-dir - Directory containing manifest.json and approved.json
  • --skip-existing - Skip files whose checksum already exists remotely
  • --replace - Delete existing screenshots in each target set before uploading
  • --confirm - Required for apply

Run from Plan

Execute the full capture and framing workflow from a JSON plan:
Plan Format:

List Frame Devices

Show all supported frame device profiles:

App Store Workflow

List Screenshots

List all screenshots for a version localization:

Check Screenshot Sizes

Display supported screenshot dimensions and device types:
Common Display Types:
  • APP_IPHONE_65 - iPhone 6.5” (required for most iOS submissions)
  • APP_IPAD_PRO_3GEN_129 - iPad Pro 12.9” (required for iPad submissions)
  • APP_IPHONE_67 - iPhone 6.7”
  • APP_IPHONE_61 - iPhone 6.1”

Upload Screenshots

Upload screenshots to App Store Connect:
For app/version fan-out uploads, structure --path with locale directories such as ./screenshots/en-US/iphone/*.png and ./screenshots/fr-FR/iphone/*.png. Each locale directory is matched against the remote App Store version localizations, and only files matching the selected --device-type are uploaded from each locale subtree. A device-rooted layout such as ./screenshots/iphone/en-US/*.png also works when --path points at ./screenshots/iphone. File Requirements:
  • Format: PNG or JPEG
  • Exact dimensions must match the device type specification
  • Use asc screenshots sizes to verify required dimensions
  • Partial failures write a retry artifact under .asc/reports/screenshots-upload/
Resume a Failed Upload:
Typical Submission:

Download Screenshots

Download existing screenshots from App Store Connect:

Delete Screenshots

Remove screenshots from a version localization:

Complete Example Workflow