[ Documentation ]
App Store screenshots

App Store screenshots

rnx ships an end-to-end pipeline for App Store screenshot production: from capturing raw frames off a live flow, to framing them in real device chrome, to exporting branded marketing canvases in every required size.

Three pieces work together:

CommandRole
rnx mode screenshotToggle the in-shell screenshot chrome overlay (DOM browser chrome hidden, canvas framed)
rnx screenshotSingle-shot capture of the current canvas (full or cropped)
rnx screenshot appstoreBatch pipeline: capture a flow, frame each shot in device chrome, compose branded canvases for export

One-shot capture

terminal
rnx screenshot --output hero.png
rnx screenshot --id loginButton --output button.png
rnx screenshot --area 0,200,393,400 --output feed.png

The live sim keeps running. For clean marketing-ready frames (no browser chrome, no dev rail), flip screenshot mode first:

terminal
rnx mode screenshot on
rnx screenshot --output clean.png
rnx mode screenshot off

Batch: the screenshot appstore pipeline

rnx screenshot appstore runs a YAML plan that can:

  1. +
    Boot a sim and run a flow to land on each target screen
  2. +
    Capture raw PNGs
  3. +
    Frame each raw PNG in real device chrome (bezel, safe-area, Dynamic Island geometry)
  4. +
    Compose branded marketing canvases (background gradient, headline text, device pose) in every canvas preset you need
terminal
rnx screenshot appstore --plan .rnx/app-store.yaml
rnx screenshot appstore --plan .rnx/app-store.yaml --sim a9 # reuse live sim
rnx screenshot appstore --plan .rnx/app-store.yaml --compose-only # skip flow, reuse raws
rnx screenshot appstore --plan .rnx/app-store.yaml --capture-only # stop after raws

Plan shape

A minimal plan:

# .rnx/app-store.yaml
app: my-app
capture:
device: iphone-17-pro
flow: flows/hero-tour.yaml
slides:
- id: home
at: home
- id: compose
at: compose-new-post
- id: feed
at: feed-scrolled
compose:
canvases:
- iphone-6-9
- iphone-6-7
- iphone-6-5
background: dark
text: bold-top
pose: straight
locales:
- en
- es
- ja

One plan file produces slides × canvases × locales framed and composed PNGs, plus a manifest listing every output path for upload to App Store Connect.

Shared registries

The composer and the live in-shell screenshot mode pull from the same registries, so a slide you compose in the live shell matches what the batch pipeline exports.

  • +
    Canvas presets: App Store sizes (6.9”, 6.7”, 6.5”, 5.5”), iPad, custom
  • +
    Backgrounds: gradient + glow presets, or custom tokens
  • +
    Text presets: headline position, weight, size, color
  • +
    Pose presets: straight-on, tilted, multi-device lineup

Live composition in the shell

Screenshot mode in the browser / Electron shell gives you a WYSIWYG composer:

  • +
    Toggle from the MacMenuBar, rail button, or rnx mode screenshot on
  • +
    Pick a canvas preset, background, text preset, and pose from the in-shell controls
  • +
    The device FLIPs into the target canvas rect at the exact export size
  • +
    Type headline text inline; see it layout-balanced in the chosen text preset
  • +
    Capture with rnx screenshot --output hero.png, or hit the rail’s capture button

The live state shares canvas / background / text / pose tokens with the batch plan, so whatever you compose live is exportable to the same registry a plan file uses.

Recording vs screenshots

For video / webm / gif output, use rnx record instead:

terminal
rnx record --duration 5 --output demo.webm
rnx record --format mp4 --duration 8 --output demo.mp4
rnx record --format gif --duration 3 --output demo.gif
rnx record --frames 10 --output ./frames/ # N evenly-spaced PNGs

See the record reference for full options.