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.
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.
Background style
theme.background.style. Default flat. Non-image fields render panoramically across the whole set.
Background sub-fields
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).
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.
Photo sub-fields
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.
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
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.
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:
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.
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.
Output, accent, async
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.