Skip to main content

Device screen, Broadcast news 1.0.0

TemplateDevice screen, tpl_366d6b2194a8
VariantBroadcast news
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length16 seconds

Example video​

The 1x1 cut of this version, drawn from its own worked example. Open the video on its own.

What it accepts​

A screenshot in a plain drawn phone or laptop, explained area by area: the screen scrolls or zooms to each of two to four highlighted areas in turn, outlines it while the rest pales, and its caption arrives beside the device with a line drawn from the area to it; a call to action closes it. metaData is the post's title, descriptions and hashtags and is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn: a kicker, the title, the device, the screenshot, the highlighted areas (where, a title and a line each), the call to action and the look. Areas are percentages of the screenshot's own width and height from its top left corner, so an area stays on its spot however the screen scrolls or zooms.
clipData.kickertextup to 20 charactersKicker: A word above the title, such as NEW APP, UPDATE or HOW TO.
clipData.titletextyesup to 80 charactersTitle: What the screen is and why it is worth a look. Shown from the first frame.
clipData.deviceenumphone, laptopDevice: The frame drawn round the screenshot: a phone for a tall app screen, a laptop for a wide web page. Left out, a screenshot wider than it is tall goes in the laptop and any other in the phone.
clipData.screenshotimageyesmedia:// file from the media library, alt text up to 120 charactersScreenshot: The screen from the media library, as tall as the page it shows. Never cropped at the sides; a tall one scrolls, and a small area is brought close by zooming in.
clipData.highlightslistyesat least 2, up to 4Highlighted areas: Two to four, shown in the order sent, each outlined on the screen in turn with its caption beside the device. Each adds a little over three seconds.
clipData.highlights[]groupArea
clipData.highlights[].xnumberyesfrom 0, to 100, 2 decimalsLeft edge, %: From 0 at the screenshot's left edge to 100 at its right.
clipData.highlights[].ynumberyesfrom 0, to 100, 2 decimalsTop edge, %: From 0 at the screenshot's top edge to 100 at its bottom.
clipData.highlights[].wnumberyesfrom 1, to 100, 2 decimalsWidth, %: Of the screenshot's width.
clipData.highlights[].hnumberyesfrom 1, to 100, 2 decimalsHeight, %: Of the screenshot's height.
clipData.highlights[].titletextyesup to 40 charactersTitle: What this part of the screen is or does, in a few words.
clipData.highlights[].texttextup to 110 charactersLine: One or two lines under the title.
clipData.ctatextup to 32 charactersCall to action: Written on the panel at the end, such as where to get the app or watch again.
clipData.lookgroupLook: How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides.
clipData.look.themeenumauto, brand, light, dark, boldTheme: The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.
clipData.look.paceenumauto, calm, standard, punchyPace: How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.
clipData.look.cornersenumauto, square, soft, roundCorners: The shape of cards, panels and marks.
clipData.look.alignenumauto, start, centreText alignment: Where the text lines up.
clipData.look.logoenumauto, freeLogo: The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.
metaDatagroupMeta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data.
metaData.titletextup to 100 charactersTitle: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes.
metaData.captionTinytextup to 200 charactersTiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionShorttextup to 500 charactersShort description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionMediumtextup to 1500 charactersMedium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionLongtextup to 4000 charactersLong description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.hashtagslistup to 15Hashtags: Written without the #. Up to 15, which every platform takes.
metaData.hashtags[]textup to 60 charactersHashtag

locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.

A picture is always a file from your media library: media:// followed by its id or its name. Anything the table does not list is refused, and so is anything over its limit, with a 422 that names the field.

The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 20,
"title": "Kicker",
"description": "A word above the title, such as NEW APP, UPDATE or HOW TO."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "Title",
"description": "What the screen is and why it is worth a look. Shown from the first frame."
},
"device": {
"type": "string",
"enum": [
"phone",
"laptop"
],
"title": "Device",
"description": "The frame drawn round the screenshot: a phone for a tall app screen, a laptop for a wide web page. Left out, a screenshot wider than it is tall goes in the laptop and any other in the phone.",
"enumNames": [
"Phone",
"Laptop"
]
},
"screenshot": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 120,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Screenshot",
"description": "The screen from the media library, as tall as the page it shows. Never cropped at the sides; a tall one scrolls, and a small area is brought close by zooming in."
},
"highlights": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Left edge, %",
"description": "From 0 at the screenshot's left edge to 100 at its right."
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Top edge, %",
"description": "From 0 at the screenshot's top edge to 100 at its bottom."
},
"w": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Width, %",
"description": "Of the screenshot's width."
},
"h": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Height, %",
"description": "Of the screenshot's height."
},
"title": {
"type": "string",
"maxLength": 40,
"title": "Title",
"description": "What this part of the screen is or does, in a few words."
},
"text": {
"type": "string",
"maxLength": 110,
"title": "Line",
"description": "One or two lines under the title."
}
},
"required": [
"x",
"y",
"w",
"h",
"title"
],
"additionalProperties": false,
"title": "Area"
},
"minItems": 2,
"maxItems": 4,
"title": "Highlighted areas",
"description": "Two to four, shown in the order sent, each outlined on the screen in turn with its caption beside the device. Each adds a little over three seconds."
},
"cta": {
"type": "string",
"maxLength": 32,
"title": "Call to action",
"description": "Written on the panel at the end, such as where to get the app or watch again."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"auto",
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.",
"enumNames": [
"The style's own",
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"auto",
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.",
"enumNames": [
"The style's own",
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks.",
"enumNames": [
"The style's own",
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"The style's own",
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides."
}
},
"required": [
"title",
"screenshot",
"highlights"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, the title, the device, the screenshot, the highlighted areas (where, a title and a line each), the call to action and the look. Areas are percentages of the screenshot's own width and height from its top left corner, so an area stays on its spot however the screen scrolls or zooms."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
},
"locales": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 20,
"title": "Kicker",
"description": "A word above the title, such as NEW APP, UPDATE or HOW TO."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "Title",
"description": "What the screen is and why it is worth a look. Shown from the first frame."
},
"device": {
"type": "string",
"enum": [
"phone",
"laptop"
],
"title": "Device",
"description": "The frame drawn round the screenshot: a phone for a tall app screen, a laptop for a wide web page. Left out, a screenshot wider than it is tall goes in the laptop and any other in the phone.",
"enumNames": [
"Phone",
"Laptop"
]
},
"screenshot": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 120,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Screenshot",
"description": "The screen from the media library, as tall as the page it shows. Never cropped at the sides; a tall one scrolls, and a small area is brought close by zooming in."
},
"highlights": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Left edge, %",
"description": "From 0 at the screenshot's left edge to 100 at its right."
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Top edge, %",
"description": "From 0 at the screenshot's top edge to 100 at its bottom."
},
"w": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Width, %",
"description": "Of the screenshot's width."
},
"h": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Height, %",
"description": "Of the screenshot's height."
},
"title": {
"type": "string",
"maxLength": 40,
"title": "Title",
"description": "What this part of the screen is or does, in a few words."
},
"text": {
"type": "string",
"maxLength": 110,
"title": "Line",
"description": "One or two lines under the title."
}
},
"required": [
"x",
"y",
"w",
"h",
"title"
],
"additionalProperties": false,
"title": "Area"
},
"minItems": 2,
"maxItems": 4,
"title": "Highlighted areas",
"description": "Two to four, shown in the order sent, each outlined on the screen in turn with its caption beside the device. Each adds a little over three seconds."
},
"cta": {
"type": "string",
"maxLength": 32,
"title": "Call to action",
"description": "Written on the panel at the end, such as where to get the app or watch again."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"auto",
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.",
"enumNames": [
"The style's own",
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"auto",
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.",
"enumNames": [
"The style's own",
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks.",
"enumNames": [
"The style's own",
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"The style's own",
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, the title, the device, the screenshot, the highlighted areas (where, a title and a line each), the call to action and the look. Areas are percentages of the screenshot's own width and height from its top left corner, so an area stays on its spot however the screen scrolls or zooms."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
}
},
"additionalProperties": false
},
"propertyNames": {
"enum": [
"aa",
"ab",
"ae",
"af",
"ak",
"am",
"an",
"ar",
"as",
"av",
"ay",
"az",
"ba",
"be",
"bg",
"bi",
"bm",
"bn",
"bo",
"br",
"bs",
"ca",
"ce",
"ch",
"co",
"cr",
"cs",
"cu",
"cv",
"cy",
"da",
"de",
"dv",
"dz",
"ee",
"el",
"en",
"eo",
"es",
"et",
"eu",
"fa",
"ff",
"fi",
"fj",
"fo",
"fr",
"fy",
"ga",
"gd",
"gl",
"gn",
"gu",
"gv",
"ha",
"he",
"hi",
"ho",
"hr",
"ht",
"hu",
"hy",
"hz",
"ia",
"id",
"ie",
"ig",
"ii",
"ik",
"io",
"is",
"it",
"iu",
"ja",
"jv",
"ka",
"kg",
"ki",
"kj",
"kk",
"kl",
"km",
"kn",
"ko",
"kr",
"ks",
"ku",
"kv",
"kw",
"ky",
"la",
"lb",
"lg",
"li",
"ln",
"lo",
"lt",
"lu",
"lv",
"mg",
"mh",
"mi",
"mk",
"ml",
"mn",
"mr",
"ms",
"mt",
"my",
"na",
"nb",
"nd",
"ne",
"ng",
"nl",
"nn",
"no",
"nr",
"nv",
"ny",
"oc",
"oj",
"om",
"or",
"os",
"pa",
"pi",
"pl",
"ps",
"pt",
"qu",
"rm",
"rn",
"ro",
"ru",
"rw",
"sa",
"sc",
"sd",
"se",
"sg",
"si",
"sk",
"sl",
"sm",
"sn",
"so",
"sq",
"sr",
"ss",
"st",
"su",
"sv",
"sw",
"ta",
"te",
"tg",
"th",
"ti",
"tk",
"tl",
"tn",
"to",
"tr",
"ts",
"tt",
"tw",
"ty",
"ug",
"uk",
"ur",
"uz",
"ve",
"vi",
"vo",
"wa",
"wo",
"xh",
"yi",
"yo",
"za",
"zh",
"zu",
"zh-CN",
"zh-TW",
"pt-BR"
]
}
}
},
"required": [
"clipData"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}

Ask Reelwire for the same document yourself, without signing in:

curl "http://localhost:4000/v1/formats/template/tpl_366d6b2194a8?variant=Broadcast%20news&version=1.0.0"

Delivery JSON​

Your own system sends this to one of your streams, POST /v1/stream, and every channel listening to that stream draws it with its template. data is the document described above; a stream with an empty field map passes it to the template unchanged. Try it first on POST /v1/stream/validate, which answers the same without publishing anything. Streams and feeds explains the rest, including how to map a document of your own shape instead.

{
"streamId": "st_your_stream_id",
"eventId": "01M2SQMKK3G1NVFXV31DCBVB95",
"occurredAt": "2026-09-23T07:00:00Z",
"locale": "en",
"data": {
"clipData": {
"kicker": "New in the editor",
"title": "The photo editor now selects the parts of a picture for you",
"device": "laptop",
"screenshot": {
"alt": "A landscape photo in the editor: a low evening sun over three snow-capped peaks and dark green foothills",
"url": "media://example-image.svg"
},
"highlights": [
{
"h": 33,
"w": 100,
"x": 0,
"y": 0,
"text": "The sky is selected for you, so the evening light can be lifted without touching the hills below",
"title": "The whole sky in one click"
},
{
"h": 24.5,
"w": 14.5,
"x": 64.5,
"y": 25,
"text": "Calm the glare of a low sun while the colours of the sky around it stay just as they were",
"title": "The sun on its own"
},
{
"h": 17.5,
"w": 58,
"x": 10,
"y": 41.5,
"text": "The snow on each peak is picked out, ready to brighten or sharpen in a single move",
"title": "Every snowy summit"
},
{
"h": 20,
"w": 100,
"x": 0,
"y": 80,
"text": "Open up the shadowed slopes at the foot of the picture without lightening the sky above",
"title": "Detail in the dark foreground"
}
],
"cta": "Try it in the editor today",
"look": {
"theme": "auto",
"pace": "auto",
"corners": "auto",
"align": "auto",
"logo": "auto"
}
},
"metaData": {
"title": "The photo editor now selects the sky, the sun, the snow and the foreground for you",
"captionTiny": "The photo editor now selects the parts of a picture for you: the whole sky in one click, the sun on its own, every snowy summit and the dark foreground, each ready to adjust alone.",
"captionShort": "The photo editor now selects the parts of a picture for you. One click picks out the whole sky, so the light can be lifted without touching the hills. The sun is found on its own, so its glare can be calmed while the sky keeps its colour. The snow on every peak is selected, ready to brighten or sharpen. And the dark foreground gets its detail back without lightening the sky above. Try it in the editor today.",
"captionMedium": "The photo editor now selects the parts of a picture for you, so each one can be adjusted on its own.\n\nThe whole sky in one click. The sky is selected as soon as you ask, so the evening light can be lifted or cooled without touching the hills below.\n\nThe sun on its own. A low sun is found by itself, so its glare can be calmed while the colours of the sky around it stay as they were.\n\nEvery snowy summit. The snow on each peak is picked out, ready to brighten or sharpen in a single move.\n\nDetail in the dark foreground. The shadowed slopes at the foot of the picture get their detail back without the sky above them getting lighter.\n\nEvery selection can be widened, narrowed or painted over by hand. Try it in the editor today. Screens are illustrative.",
"captionLong": "The photo editor now selects the parts of a picture for you, so each one can be adjusted on its own without careful brushing by hand.\n\nThe whole sky in one click. The sky is selected as soon as you ask, edge to edge and around every ridge, so the evening light can be lifted, warmed or cooled without touching the hills below.\n\nThe sun on its own. A low sun is found by itself, so its glare can be calmed while the colours of the sky around it stay just as they were. It works on a moon or a street light too.\n\nEvery snowy summit. The snow on each peak is picked out, ready to brighten or sharpen in a single move, so a range of mountains no longer needs a mask for every top.\n\nDetail in the dark foreground. The shadowed slopes at the foot of the picture get their detail back without the sky above them getting lighter, which is where most evening pictures lose the most.\n\nEvery selection can be widened, narrowed or painted over by hand, and saved to use again on the next picture from the same walk. The update is free and works on every picture already in your library.\n\nTry it in the editor today. Screens are illustrative.",
"hashtags": [
"photoediting",
"photography",
"landscape",
"editor",
"newfeature"
]
}
}
}

The delivery names no version: which build draws it is the channel's choice, the newest of its variant or the one it is pinned to. eventId is a ULID you make once per event: sending the same one again changes nothing. occurredAt is when the thing happened, not when you sent it. locale is the language of the text in data, and data.locales carries other languages beside it.