Launched June 12th, 2026. Screenshot quality is improving quickly, and feedback is welcome. Send feedback

Options reference

Every render option, in one place.

A flat, copy-pasteable catalog of every field the render engine accepts and every value it allows, with defaults. This is the machine-readable companion to openapi.json (the authoritative contract) and the visual gallery. Styling resolves in a cascade: preset → theme → slide → slide.devices[], each step overriding the last. Every field is optional.

The cascade

Resolution order, last wins: preset (a named look) → theme (set-wide locked tokens) → slide.theme (per-slide theme override) → slide fields → slide.devices[] (per-device override in multi-device slides). Theme tokens are deliberately locked across the whole set (one background, one type scale, one device treatment) so the output reads as one store listing.

Canvas presets

canvas.preset picks an exact store dimension, or pass a custom canvas.width / canvas.height (320-4096 px each) for marketing sizes. Default: appstore.iphone_6_9.

canvas.presetOutput pxStore target
appstore.iphone_6_91290 × 2796iPhone 6.9" (default)
appstore.iphone_6_9_alt_12601260 × 2736iPhone 6.9" alt
appstore.iphone_6_9_alt_13201320 × 2868iPhone 6.9" alt (M4 iPad point size)
appstore.iphone_6_51284 × 2778iPhone 6.5"
appstore.iphone_6_5_alt_12421242 × 2688iPhone 6.5" alt
appstore.ipad_132064 × 2752iPad 13"
play.phone1080 × 1920Google Play phone (portrait)
play.phone_landscape1920 × 1080Google Play phone (landscape)
googleplay.phone_portrait1080 × 1920alias → play.phone
googleplay.phone_landscape1920 × 1080alias → play.phone_landscape

Style presets

preset applies a full look in one token. 17 presets; see them rendered. Each is a partial theme, so any theme / slide field overrides on top.

presetBackgroundHeadlineFrame / shadow
aurora-midnightdark aurora meshbold-lightreal · high
forest-frauncesgreen gradientdisplay-serifreal · high
burgundy-editorialsolid wineeditorialclay · high
navy-wavesnavy + waves patterngroteskreal · high
mustard-checkeryellow + checkerboldclay · medium
lilac-roundedlilac gradientroundedreal · medium
sky-gradientsky gradientroundedreal · medium
charcoal-monodark + plus-gridmonoreal · high
cream-contourcream + contourdisplay-serifreal · low
terracotta-duotoneduotone-splitboldreal · high
pistachio-trianglesgreen + trianglesroundedflat · medium
ink-neonblack, lime accentmonoreal · high
wine-fraunceswine gradientdisplay-serifreal · high
paper-editorialpaper + waveseditorialreal · low
studio-clayclay-orange soliddisplay-serifclay · high
neon-gridblack + blueprint gridcondensedreal · high
soft-lightminimal off-whiteboldreal · low

Background style

theme.background.style. Default flat. Non-image fields render panoramically across the whole set.

styleWhat it rendersCompanion field
flatneutral flat fill (default)color
solidsingle flat fillcolor
darkdark fill, forces light inkcolor
minimalnear-white field with a top highlightcolor
papercolor with a fine dotted paper texturecolor
gradienttwo-color linear gradientgradient { from, to, angle }
duotone-splittwo stacked color bandsduotone { top, bottom, split }
meshmulti-point aurora blendmesh { points[] }
imageyour photo + legibility treatmentimage { url, treatment, ... }

Background sub-fields

FieldType / valuesDefault
background.colorhex#f4f1ea
background.gradient.fromhexbackground.color
background.gradient.tohex#131517
background.gradient.anglenumber (deg)180
background.duotone.tophex#f4ead9
background.duotone.bottomhex#c2552d
background.duotone.split0-10.44
background.mesh.points[].colorhex (required)none
background.mesh.points[].atkeyword or "x% y%"center
background.mesh.points[].stop0-10.55
background.mesh.points[].alpha0-10.8
background.grain.opacity0-10.05
background.baseColorhex (image style)neutral slate

Mesh at keywords: top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right, top, bottom, left, right.

Patterns

background.pattern.type overlays a tiled texture. 13 types. Companion fields: opacity (default 0.1), size px (default 40), color hex (theme-aware default).

pattern.typeRenders
noneno pattern (default)
dot-gridevenly spaced dots
soft-gridthin square grid lines
blueprint-gridthin grid lines (technical look)
large-circlestiled ring outlines
radial-circlesconcentric rings centered behind the device
diagonal-linesrepeating 45° hatch lines
wavestiled sine-wave lines
checkercheckerboard squares
plus-gridtiled plus / cross marks
trianglestiled triangle outlines
contourtopographic concentric contour clusters
halftonedot-size gradient fading from the top down

Photo treatments

For background.style: "image". The treatment guarantees a readable caption zone; ink derives from the treatment, never the raw photo. Default dark-scrim.

image.treatmentEffectInk
dark-scrimdark gradient veil over the photolight
light-scrimlight gradient veil over the photodark
color-washdesaturated photo multiplied with washColorlight
blur-bandclear photo, frosted blurred caption bandlight

Photo sub-fields

FieldType / valuesDefault
[object Object] / image.b64image sourcenone
image.fitcover · containcover
image.focal[x, y] 0-1[0.5, 0.5]
image.washColorhex (color-wash only)background.color

Headline treatments

theme.headline.treatment. 9 webfont treatments. The type scale is computed once for the longest headline and locked across the set. Default bold.

treatmentFontNotes
boldInter heavydefault sans
bold-lightInter heavyforced light ink for saturated fields
serifsystem serifitalic accent word
display-serifFrauncesitalic accent word
groteskSpace Groteskgeometric sans
roundedNunitofriendly rounded
editorialNewsreaderitalic accent word
monoIBM Plex Monotechnical
condensedOswalduppercase condensed

Also: headline.align (left · center · right, default center), and optional headline.max / headline.min px bounds on the auto-fit size.

Device, frame, shadow, tilt

FieldValuesDefault
theme.device.idiphone-16-max · pixel-9-pro · ipadiphone-16-max (ipad on iPad canvas)
device.frame.stylereal · clay · flatreal
device.frame.tinthex (clay/flat only)none
device.shadow.elevationnone · low · medium · highhigh
device.alignTopsbooleantrue
device.width0-2 (fraction of canvas)layout-tuned
device.visibleTop0-1layout-tuned
device.visibleBottom0-1layout-tuned
slide.tiltnone · left · right · subtle-left · subtle-rightnone

Note: clay and flat always use the stylized CSS iPhone body (the photoreal iphone-16-max / pixel-9-pro components cannot be tinted). Shadows are dual-layer and auto-tuned to background luminance.

Slide fields

One slide per output image, in store order (max 10). Standard slides composite a device + screenshot + caption.

FieldType / valuesNotes
rolehook · feature · proof · closenarrative slot, affects layout emphasis (inferred if omitted)
headline.linesstring[]explicit line breaks
headline.accentstringword/phrase rendered in the accent color
subtitlestringsupporting line under the headline
screenshot{ url } or { b64 }your real capture (single-device slides)
devices[]SlideDevice[]multi-device composition (see below)
tiltsee device tableper-slide device tilt
bridgeleft · rightdevice straddles the adjacent slide for the panorama effect
[object Object] / deviceBottom0-1override device vertical placement
overlays[]Overlay[]proof elements (see below)
themeThemeper-slide theme override

Caption position

theme.captionPosition: top (default) or bottom places the headline block above or below the device. Landscape canvases use a side composition automatically.

Multi-device (slide.devices[])

Composite several framed screenshots on one canvas. Two phones → dual-phone layout; a phone plus an ipad → ecosystem layout. The last entry is the front device. Each entry:

FieldType / valuesNotes
screenshot{ url } or { b64 } (required)this device's capture
deviceiphone-16-max · pixel-9-pro · ipadbody for this entry
[object Object] / frame.tintsee device tableper-device frame
tiltsee device tabledefaults to a layout stagger
shadow.elevationnone/low/medium/highper-device shadow
shadow.alphaScale0-1dims back-device shadows
x0-1horizontal center (fraction of canvas)
width0-2device width (fraction of canvas)
[object Object] / visibleBottom0-1vertical placement

Overlays (proof elements)

slide.overlays[]. Each needs a kind; other fields depend on the kind. Placement: position keyword (top-left … bottom-right · center) or explicit anchor / size as [x, y] canvas fractions.

kindRendersFields
stars5-star row + rating + countrating, count
laurelaward laurel around a valuetext, source
pilltrust pill with a short claimtext
quote-cardtestimonial cardquote, author, handle, initials, variant (compact|hero)
press-quotepublication pull-quotequote, source
review-stacktwo stacked mini-reviewsreviews[] { quote, author, initials, rating }

Brand / close slides

Set slide.type: "brand" for an icon + name/headline + tagline column with no device, typically the first (hero) or last (close) panel.

FieldTypeNotes
type"brand"marks the slide as a brand slide
icon{ url } or { b64 }app icon, clipped to an iOS squircle
namestringapp name (hero variant, no headline)
headline.linesstring[]use instead of name for a close slide
taglinestringsub-line under the name/headline
subtitlestringfallback when tagline is absent

Output, accent, async

FieldType / valuesNotes
theme.accentColorhexaccent for headline words, pills, details; WCAG auto-contrast guarded
output.localesBCP-47 string[]fan the set out across markets with explicit per-locale copy
output.storesappstore · playrender the design for multiple store canvases
output.formatimages · fastlane_zipdefault images; fastlane_zip adds a deliver-ready archive
asyncbooleanfalse = sync (default); true = 202 + polling_url
webhook_urlhttps urlsigned callback for async renders; polling_url remains available

For the full request/response contract, errors, idempotency, and the compliance lint report, see the API reference. The authoritative, machine-readable schema (with every enum) is openapi.json.