Studio project schema
Portable metadata for a screenshot studio project. Binary assets are referenced by key and are not embedded.
Browse the types, required fields, and limits for Studio projects. This reference is generated from the same JSON schema used by the editor.
Version 8. 22 definitions, 111 fields. Every object is closed: a property the schema does not name is rejected.
project
- schemaVersion8Required
- idstringRequired
- Cannot be empty
- namestringRequired
- listingSourceobject
- appIconstring
- createdAtnumberRequired
- updatedAtnumberRequired
- screenshotTarget"iphone-6_9" | "ipad-13"Required
- allowTargetDeviceMismatchbooleanRequired
- slidesarray of slideRequired
- localesarray of string
- No duplicates·Each item: cannot be empty
- defaultLocalestring
- Cannot be empty
slide
Appears in project.
- idstringRequired
- Cannot be empty
- namestring
- At most 48 characters
- role"hero" | "feature" | "proof" | "differentiator" | "cta"
- backgroundbackgroundRequired
- texttextRequired
- devicedeviceRequired
- screenshotRefstring or nullRequired
- elementsarray of slideElement
- At most 8 items
- localizedTextobject keyed by string, values are localizedText
background
Appears in slide.
panorama
Appears in background.
- groupIdstringRequired
- Cannot be empty
- indexintegerRequired
- 0 to 4
- spanintegerRequired
- 2 to 5
gradient
Appears in background.
- colorsarray of stringRequired
- At least 2 items
- directionnumberRequired
localizedText
Appears in slide.
- contentstringRequired
- subCaptionstringRequired
elementPosition
Appears in badgeElement, ratingElement, laurelElement, appIconBadgeElement, deviceExtraElement, shapeElement, stickerElement.
- zone"top-left" | "top-center" | "top-right" | "middle-left" | "middle-center" | "middle-right" | "bottom-left" | "bottom-center" | "bottom-right"Required
- nudgeXnumberRequired
- Authored templates may exceed the interactive ±12 adjustment range.
- -100 to 100
- nudgeYnumberRequired
- -100 to 100
elementSize
"small" | "medium" | "large"
Appears in badgeElement, ratingElement, laurelElement.
elementColor
string
Matches ^(text|#[0-9a-fA-F]{6})$
Appears in badgeElement, ratingElement, laurelElement, shapeElement.
textColor
- "white" | "black" | "auto"
- string
Matches
^#[0-9a-fA-F]{6}$
Appears in text.
slideElement
badgeElement | ratingElement | laurelElement | appIconBadgeElement | deviceExtraElement | shapeElement | stickerElement
Appears in slide.
badgeElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"badge"Required
- positionelementPositionRequired
- textstringRequired
- At most 28 characters
- style"solid" | "soft" | "outline"Required
- sizeelementSize
- colorelementColor
ratingElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"rating"Required
- positionelementPositionRequired
- rating4 | 4.5 | 4.8 | 5Required
- countTextstringRequired
- At most 32 characters
- tone"light" | "dark"Required
- sizeelementSize
- colorelementColor
laurelElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"laurel"Required
- positionelementPositionRequired
- textstringRequired
- At most 36 characters
- tone"light" | "dark"Required
- sizeelementSize
- colorelementColor
appIconBadgeElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"appIconBadge"Required
- positionelementPositionRequired
- size"small" | "medium" | "large"Required
- style"plain" | "card"Required
deviceExtraElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"deviceExtra"Required
- positionelementPositionRequired
- devicedeviceRequired
- screenshotRefstring or null
shapeElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"shape"Required
- positionelementPositionRequired
- shape"blob" | "ring" | "grid-dots"Required
- tone"accent" | "light" | "dark"Required
- size"small" | "medium" | "large"Required
- colorelementColor
stickerElement
Appears in slideElement.
- idstringRequired
- Cannot be empty
- type"sticker"Required
- positionelementPositionRequired
- imageRefstring or nullRequired
- size"small" | "medium" | "large"Required
- mask"none" | "rounded" | "circle"Required
- layer"behind" | "front"Required
text
Appears in slide.
- contentstringRequired
- fontfontRequired
- sizenumberRequired
- colortextColorRequired
- align"left" | "center" | "right"Required
- verticalPositionnumberRequired
- horizontalOffsetnumberRequired
- showSubCaptionbooleanRequired
- subCaptionstringRequired
- subCaptionFontfontRequired
- subCaptionSizenumberRequired
- subCaptionSpacingnumberRequired
font
- "sf-pro" | "inter" | "poppins" | "dm-sans" | "playfair" | "space-grotesk" | "manrope" | "montserrat" | "outfit" | "sora" | "fraunces" | "dm-serif-display" | "oswald" | "archivo-black" | "bricolage-grotesque" | "jetbrains-mono" | "noto-sans-jp" | "noto-sans-kr" | "noto-sans-sc" | "noto-sans-tc" | "noto-sans-arabic" | "noto-sans-devanagari"
- string
A font you uploaded under the id after the prefix
Matches
^custom:.+
Appears in text.
device
Appears in slide, deviceExtraElement.
- model"iphone-17-pro-max" | "iphone-17-pro" | "iphone-16-pro-max" | "iphone-16-pro" | "ipad-13"Required
- angle"straight" | "slight-left" | "slight-right" | "dramatic-left" | "dramatic-right"Required
- verticalPositionnumberRequired
- frameScalenumberRequired
- horizontalPositionnumberRequired
- allowOffCanvasPositionbooleanRequired
- hiddenboolean
- spanPanoramaboolean
- tiltnumber
- -30 to 30
- popOutsarray of popOut
- At most 5 items
popOut
Appears in device.
- idstringRequired
- Cannot be empty
- xnumberRequired
- 0 to 1
- ynumberRequired
- 0 to 1
- widthnumberRequired
- 0.04 to 1
- heightnumberRequired
- 0.04 to 1
- scalenumberRequired
- 1.1 to 2.2
Download the JSON schema
The schema itself is served at /docs/project.schema.json. It is the same file this page was built from, so a validator you point at it agrees with the editor.