removedInput schema / properties / columns
Removed value: -{
- "description": "For array rows: the layer key of each cell, in order, like a spreadsheet header",
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
-}
removedInput schema / properties / defaults
Removed value: -{
- "additionalProperties": {
- "anyOf": [
- {
- "description": "A text layer's text, with <s1>...</s1> tags for runs when it has several styles; or an image layer's asset id or file name",
- "type": "string"
- },
- {
- "additionalProperties": {},
- "description": "A text layer's text and visibility",
- "properties": {
- "text": {
- "description": "The layer's new text, tagged like a string value",
- "type": "string"
- },
- "visible": {
- "description": "false hides the layer; layout closes the gap",
- "type": "boolean"
- }
- },
- "type": "object"
- },
- {
- "additionalProperties": {},
- "description": "An image layer's image and framing",
- "properties": {
- "asset": {
- "description": "An asset id (search_assets, upload_images), the image's file name, or a designer image key. Omit to keep the template's image and only re-frame it.",
- "type": "string"
- },
- "fit": {
- "description": "cover fills the slot and crops (default), contain shows the whole image, stretch distorts to the slot. The designer's names work too: fill is cover, fit is contain",
- "enum": [
- "cover",
- "contain",
- "stretch",
- "fill",
- "fit"
- ],
- "type": "string"
- },
- "panX": {
- "description": "Moves the image by this fraction of the slot width; positive = right",
- "maximum": 1,
- "minimum": -1,
- "type": "number"
- },
- "panY": {
- "description": "Moves the image by this fraction of the slot height; positive = down",
- "maximum": 1,
- "minimum": -1,
- "type": "number"
- },
- "visible": {
- "description": "false hides the layer",
- "type": "boolean"
- },
- "zoom": {
- "description": "Zoom about the slot centre; 1 = none",
- "maximum": 4,
- "minimum": 0.2,
- "type": "number"
- }
- },
- "type": "object"
- }
- ]
- },
- "description": "Values every row gets unless it gives its own, such as a logo or call to action shared by all rows",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
-}
addedInput schema / properties / flow
Added value: +{
+ "description": "Instead of pages: one flow (get_template_inputs flows), a video joining some of its template's pages, that every row renders as, with a video output format. A name fills that layer on every page of the video; `<pageId>@<layer>` one page, `<pageId>#2@<layer>` a page's second visit.",
+ "minLength": 1,
+ "type": "string"
+}
removedInput schema / properties / flowIds
Removed value: -{
- "description": "Instead of pageIds: this template's flows (get_template_inputs flows), each a video joining some of its pages, that every row renders as, one video per row per flow, with a video outputFormat. A name fills every layer with it across a video's pages.",
- "items": {
- "format": "uuid",
- "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
- "type": "string"
- },
- "maxItems": 20,
- "minItems": 1,
- "type": "array"
-}
removedInput schema / properties / pageIds
Removed value: -{
- "description": "This template's pages (get_template_inputs pages) every row renders on, in order: one id for one file per row, several for one file per row per page, such as a carousel's slides. The first page when omitted. A row may carry keys of any of these pages; each page takes the keys it has.",
- "items": {
- "format": "uuid",
- "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
- "type": "string"
- },
- "maxItems": 20,
- "minItems": 1,
- "type": "array"
-}
addedInput schema / properties / pages
Added value: +{
+ "description": "Page ids (get_template_inputs pages, from any templates) every row renders on, in order: one id for one file per row, several for one file per row per page, such as a carousel's slides. A row's plain keys fill every page that has the layer; `<pageId>@<layer>` fills one page.",
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "minItems": 1,
+ "type": "array"
+}
changedInput schema / properties / rows / description
Previous value: -"1 to 500 rows. Each keys a layer by its name (case aside) or id, the key get_template_inputs gives, to a plain value: text as a string, an image as an asset id or file name, or { asset, fit, zoom, panX, panY } and { text, visible } when framing or visibility changes. rowExample in get_template_inputs is a ready row. With columns, a row is instead an array of cells in column order, which keeps large batches small. null leaves a layer at the template's own value. Layers left out keep the template's value, or the one in defaults."New value: +"1 to 1,000 rows, each its own modifications and output, rendered on every page named (or as the flow's video)"
addedInput schema / properties / rows / items / additionalProperties
Added value: +false
removedInput schema / properties / rows / items / anyOf
Removed value: -[
- {
- "additionalProperties": {
- "anyOf": [
- {
- "anyOf": [
- {
- "description": "A text layer's text, with <s1>...</s1> tags for runs when it has several styles; or an image layer's asset id or file name",
- "type": "string"
- },
- {
- "additionalProperties": {},
- "description": "A text layer's text and visibility",
- "properties": {
- "text": {
- "description": "The layer's new text, tagged like a string value",
- "type": "string"
- },
- "visible": {
- "description": "false hides the layer; layout closes the gap",
- "type": "boolean"
- }
- },
- "type": "object"
- },
- {
- "additionalProperties": {},
- "description": "An image layer's image and framing",
- "properties": {
- "asset": {
- "description": "An asset id (search_assets, upload_images), the image's file name, or a designer image key. Omit to keep the template's image and only re-frame it.",
- "type": "string"
- },
- "fit": {
- "description": "cover fills the slot and crops (default), contain shows the whole image, stretch distorts to the slot. The designer's names work too: fill is cover, fit is contain",
- "enum": [
- "cover",
- "contain",
- "stretch",
- "fill",
- "fit"
- ],
- "type": "string"
- },
- "panX": {
- "description": "Moves the image by this fraction of the slot width; positive = right",
- "maximum": 1,
- "minimum": -1,
- "type": "number"
- },
- "panY": {
- "description": "Moves the image by this fraction of the slot height; positive = down",
- "maximum": 1,
- "minimum": -1,
- "type": "number"
- },
- "visible": {
- "description": "false hides the layer",
- "type": "boolean"
- },
- "zoom": {
- "description": "Zoom about the slot centre; 1 = none",
- "maximum": 4,
- "minimum": 0.2,
- "type": "number"
- }
- },
- "type": "object"
- }
- ]
- },
- {
- "type": "null"
- }
- ]
- },
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- {
- "items": {
- "anyOf": [
- {
- "anyOf": [
- {
- "description": "A text layer's text, with <s1>...</s1> tags for runs when it has several styles; or an image layer's asset id or file name",
- "type": "string"
- },
- {
- "additionalProperties": {},
- "description": "A text layer's text and visibility",
- "properties": {
- "text": {
- "description": "The layer's new text, tagged like a string value",
- "type": "string"
- },
- "visible": {
- "description": "false hides the layer; layout closes the gap",
- "type": "boolean"
- }
- },
- "type": "object"
- },
- {
- "additionalProperties": {},
- "description": "An image layer's image and framing",
- "properties": {
- "asset": {
- "description": "An asset id (search_assets, upload_images), the image's file name, or a designer image key. Omit to keep the template's image and only re-frame it.",
- "type": "string"
- },
- "fit": {
- "description": "cover fills the slot and crops (default), contain shows the whole image, stretch distorts to the slot. The designer's names work too: fill is cover, fit is contain",
- "enum": [
- "cover",
- "contain",
- "stretch",
- "fill",
- "fit"
- ],
- "type": "string"
- },
- "panX": {
- "description": "Moves the image by this fraction of the slot width; positive = right",
- "maximum": 1,
- "minimum": -1,
- "type": "number"
- },
- "panY": {
- "description": "Moves the image by this fraction of the slot height; positive = down",
- "maximum": 1,
- "minimum": -1,
- "type": "number"
- },
- "visible": {
- "description": "false hides the layer",
- "type": "boolean"
- },
- "zoom": {
- "description": "Zoom about the slot centre; 1 = none",
- "maximum": 4,
- "minimum": 0.2,
- "type": "number"
- }
- },
- "type": "object"
- }
- ]
- },
- {
- "type": "null"
- }
- ]
- },
- "type": "array"
- }
-]
addedInput schema / properties / rows / items / properties
Added value: +{
+ "modifications": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "description": "A text layer's text, with <s1>...</s1> tags for runs when it has several styles; or an image layer's asset id or file name",
+ "type": "string"
+ },
+ {
+ "additionalProperties": {},
+ "description": "A text layer's text and visibility",
+ "properties": {
+ "text": {
+ "description": "The layer's new text, tagged like a string value",
+ "type": "string"
+ },
+ "visible": {
+ "description": "false hides the layer; layout closes the gap",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "additionalProperties": {},
+ "description": "An image layer's image and framing",
+ "properties": {
+ "asset": {
+ "description": "An asset id (search_assets, upload_images), the image's file name, or a designer image key. Omit to keep the template's image and only re-frame it.",
+ "type": "string"
+ },
+ "fit": {
+ "description": "cover fills the slot and crops (default), contain shows the whole image, stretch distorts to the slot. The designer's names work too: fill is cover, fit is contain",
+ "enum": [
+ "cover",
+ "contain",
+ "stretch",
+ "fill",
+ "fit"
+ ],
+ "type": "string"
+ },
+ "panX": {
+ "description": "Moves the image by this fraction of the slot width; positive = right",
+ "maximum": 1,
+ "minimum": -1,
+ "type": "number"
+ },
+ "panY": {
+ "description": "Moves the image by this fraction of the slot height; positive = down",
+ "maximum": 1,
+ "minimum": -1,
+ "type": "number"
+ },
+ "visible": {
+ "description": "false hides the layer",
+ "type": "boolean"
+ },
+ "zoom": {
+ "description": "Zoom about the slot centre; 1 = none",
+ "maximum": 4,
+ "minimum": 0.2,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "default": {},
+ "description": "Layer key to value: a layer's name (case aside) or id, the key get_template_inputs gives, to a plain value: text as a string, an image as an asset id or file name, or { asset, fit, zoom, panX, panY } and { text, visible } when framing or visibility changes. rowExample in get_template_inputs is ready to use. null leaves a layer at the page's own value; layers left out keep it too.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "output": {
+ "additionalProperties": false,
+ "description": "What to make; png when omitted",
+ "properties": {
+ "fileName": {
+ "description": "The file's name, without extension",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "format": {
+ "default": "png",
+ "description": "png, jpeg and webp render an image and pdf one vector page; mp4 and gif render the whole motion as a video, and webm (VP9) and mov (ProRes 4444) as a transparent video for overlaying on other footage. Video needs an animated template (get_template_inputs isAnimated) and costs more credits",
+ "enum": [
+ "png",
+ "jpeg",
+ "webp",
+ "pdf",
+ "mp4",
+ "gif",
+ "webm",
+ "mov"
+ ],
+ "type": "string"
+ },
+ "stillTime": {
+ "description": "Animated pages, images only: the second of the motion the image shows. Omit it to use the page's own still time (get_template_inputs stillTime), else the last frame. If the page has no still time, ask the user, because an outro or a loop can make the last frame a bad image.",
+ "maximum": 600,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+}
addedInput schema / properties / rows / items / type
Added value: +"object"
changedInput schema / properties / rows / maxItems
Previous value: -500New value: +1000
removedInput schema / properties / templateId
Removed value: -{
- "description": "The whole template, from search_templates. Not a page or flow id.",
- "format": "uuid",
- "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
- "type": "string"
-}
addedInput schema / properties / templates
Added value: +{
+ "description": "Instead of pages: template ids whose every page each row renders on, in page order",
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "minItems": 1,
+ "type": "array"
+}
changedInput schema / required
Previous value: -[
- "templateId",
- "rows"
-]New value: +[
+ "rows"
+]
addedOutput schema / properties / creditCost
Added value: +{
+ "description": "Credits those jobs spend when they render",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+}
removedOutput schema / properties / issues / items / properties / code / enum
Removed value: -[
- "unknown_layer",
- "ambiguous_layer",
- "bad_value",
- "type_mismatch",
- "asset_not_found",
- "asset_ambiguous"
-]
changedOutput schema / properties / issues / items / properties / field / description
Previous value: -"The row key the problem is in"New value: +"The modifications key the problem is in"
addedOutput schema / properties / issues / items / properties / row
Added value: +{
+ "description": "Zero-based position of the row in rows",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+}
removedOutput schema / properties / issues / items / properties / rowIndex
Removed value: -{
- "description": "Zero-based position of the row in rows",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
-}
changedOutput schema / properties / issues / items / required
Previous value: -[
- "rowIndex",
- "field",
- "message"
-]New value: +[
+ "row",
+ "field",
+ "message"
+]
addedOutput schema / properties / jobCount
Added value: +{
+ "description": "Jobs the batch makes: one per row per page",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+}
changedOutput schema / properties / rows / description
Previous value: -"Each row as the server understood it, keyed by layer key, images as { asset, name }"New value: +"Each row as the server read it on each page"
changedOutput schema / properties / rows / items / additionalProperties
Previous value: -{}New value: +false
addedOutput schema / properties / rows / items / properties
Added value: +{
+ "pages": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "modifications": {
+ "additionalProperties": {},
+ "description": "The row as this page read it, by layer; images as { asset, name }",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "page": {
+ "description": "The page, or the flow for a video",
+ "type": "string"
+ }
+ },
+ "required": [
+ "page",
+ "modifications"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "row": {
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+}
removedOutput schema / properties / rows / items / propertyNames
Removed value: -{
- "type": "string"
-}
addedOutput schema / properties / rows / items / required
Added value: +[
+ "row",
+ "pages"
+]
removedOutput schema / properties / sharedNames
Removed value: -{
- "description": "Layer names more than one layer has; rows key those layers by id. Mention them to the user.",
- "items": {
- "additionalProperties": false,
- "properties": {
- "ids": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "name": {
- "type": "string"
- }
- },
- "required": [
- "name",
- "ids"
- ],
- "type": "object"
- },
- "type": "array"
-}
changedOutput schema / required
Previous value: -[
- "valid",
- "rowCount",
- "validRows",
- "invalidRows",
- "issues"
-]New value: +[
+ "valid",
+ "rowCount",
+ "validRows",
+ "invalidRows",
+ "jobCount",
+ "creditCost",
+ "issues",
+ "rows"
+]