changedInput schema / $defs / d0 / anyOf
Previous value: -[
- {
- "$ref": "#/$defs/d6"
- },
- {
- "$ref": "#/$defs/d7"
- }
-]New value: +[
+ {
+ "properties": {
+ "endWord": {
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "startWord": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "startWord",
+ "endWord"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "occurrence": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "quote": {
+ "$ref": "#/$defs/d9"
+ }
+ },
+ "required": [
+ "quote"
+ ],
+ "type": "object"
+ }
+]
removedInput schema / $defs / d0 / description
Removed value: -"The words it starts on, as an insert anchor: { startWord,…"
removedInput schema / $defs / d1 / description
Removed value: -"Public https URL of the media."
removedInput schema / $defs / d1 / format
Removed value: -"starts_with"
removedInput schema / $defs / d1 / maxLength
Removed value: -2048
changedInput schema / $defs / d1 / pattern
Previous value: -"^https:\\/\\/.*"New value: +"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"
removedInput schema / $defs / d10
Removed value: -{
- "maximum": 2,
- "minimum": 0.05,
- "type": "number"
-}
removedInput schema / $defs / d2 / description
Removed value: -"How many spoken words it stays on screen, counted from the…"
removedInput schema / $defs / d3 / description
Removed value: -"A ready PNG or JPEG image or MP4 video from your own assets…"
removedInput schema / $defs / d3 / pattern
Removed value: -"^ast_[a-f0-9]{32}$"
addedInput schema / $defs / d3 / properties
Added value: +{
+ "amount": {
+ "exclusiveMaximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "direction": {
+ "enum": [
+ "in",
+ "out"
+ ],
+ "type": "string"
+ }
+}
addedInput schema / $defs / d3 / required
Added value: +[
+ "direction",
+ "amount"
+]
changedInput schema / $defs / d3 / type
Previous value: -"string"New value: +"object"
removedInput schema / $defs / d4 / description
Removed value: -"Optional picture zoom."
addedInput schema / $defs / d4 / maxLength
Added value: +2048
addedInput schema / $defs / d4 / pattern
Added value: +"^https:\\/\\/.*"
removedInput schema / $defs / d4 / properties
Removed value: -{
- "amount": {
- "exclusiveMaximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "direction": {
- "enum": [
- "in",
- "out"
- ],
- "type": "string"
- }
-}
removedInput schema / $defs / d4 / required
Removed value: -[
- "direction",
- "amount"
-]
changedInput schema / $defs / d4 / type
Previous value: -"object"New value: +"string"
removedInput schema / $defs / d5 / description
Removed value: -"image (PNG or JPEG) or video (MP4, H.264 or HEVC, 8-bit…"
removedInput schema / $defs / d5 / enum
Removed value: -[
- "image",
- "video"
-]
addedInput schema / $defs / d5 / pattern
Added value: +"^ast_[a-f0-9]{32}$"
addedInput schema / $defs / d6 / enum
Added value: +[
+ "image",
+ "video"
+]
removedInput schema / $defs / d6 / properties
Removed value: -{
- "endWord": {
- "exclusiveMinimum": 0,
- "type": "integer"
- },
- "startWord": {
- "minimum": 0,
- "type": "integer"
- }
-}
removedInput schema / $defs / d6 / required
Removed value: -[
- "startWord",
- "endWord"
-]
changedInput schema / $defs / d6 / type
Previous value: -"object"New value: +"string"
addedInput schema / $defs / d7 / enum
Added value: +[
+ "cut",
+ "fade",
+ "slide",
+ "tilt_in",
+ "pop",
+ "scale_up"
+]
removedInput schema / $defs / d7 / properties
Removed value: -{
- "occurrence": {
- "minimum": 0,
- "type": "integer"
- },
- "quote": {
- "maxLength": 10000,
- "minLength": 1,
- "type": "string"
- }
-}
removedInput schema / $defs / d7 / required
Removed value: -[
- "quote"
-]
changedInput schema / $defs / d7 / type
Previous value: -"object"New value: +"string"
removedInput schema / $defs / d8 / description
Removed value: -"How it appears: cut (default), fade, slide (in from the…"
removedInput schema / $defs / d8 / enum
Removed value: -[
- "cut",
- "fade",
- "slide",
- "tilt_in",
- "pop",
- "scale_up"
-]
addedInput schema / $defs / d8 / maximum
Added value: +2
addedInput schema / $defs / d8 / minimum
Added value: +0.05
changedInput schema / $defs / d8 / type
Previous value: -"string"New value: +"number"
removedInput schema / $defs / d9 / description
Removed value: -"Unique across inserts, overlays and layout_windows."
addedInput schema / $defs / d9 / maxLength
Added value: +10000
addedInput schema / $defs / d9 / minLength
Added value: +1
removedInput schema / $defs / d9 / pattern
Removed value: -"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"
removedInput schema / properties / actor_gender / description
Removed value: -"Gender of the face in image: female | male. Only with image: picks the default voice of that gender (female: sarah, male: george; on gemini-3.8-flash-tts: kore and charon). Refused with actor_id (its gender is known) and without image. An explicit voice or voice_id wins and the response warns that actor_gender changed nothing."
changedInput schema / properties / actor_id / description
Previous value: -"Saved Clipwright actor ID from list_actors. Choose actor_id, image, or person; do not combine them. Without voice or voice_id the voice follows the actor's gender. Do not combine with actor_gender."New value: +"From list_actors; not with image, person or actor_gender."
changedInput schema / properties / aspect_ratio / description
Previous value: -"Output format: 9:16 | 1:1 | 16:9. Omitted means 9:16 without an image; with an image, the supported format nearest the image's shape, even a landscape one — pass it explicitly whenever you pass image. A mismatch above 15% between the request and the source is refused (aspect_conflict) before any charge."New value: +"Omitted: 9:16, or the supported format nearest the image. A source more than 15% off the request is refused (aspect_conflict) before any charge."
changedInput schema / properties / broll_policy / description
Previous value: -"STORED ONLY: Saved policy for B-roll: anyone allows people including the actor; no_actor excludes the actor; no_people excludes all people, including hands. Segmented media generation is closed. This setting is stored only and has no effect on actor-only videos. Run override wins over the account actor default; otherwise no_people."New value: +"anyone, no_actor or no_people (the default). Templates with your own media need anyone."
removedInput schema / properties / call / additionalProperties
Removed value: -{}
removedInput schema / properties / call / description
Removed value: -"A call the presenter listens to: { after: { quote }, lines: [{ speaker: agent|caller, text }] (2–12), voices?, phone? }."
removedInput schema / properties / call / propertyNames
Removed value: -{
- "type": "string"
-}
removedInput schema / properties / caption_emphasis / description
Removed value: -"Key words or short phrases to emphasise, each quoted from script and matched as an insert quote is (case and punctuation ignored). An item is the quote, or { quote, look }: look punch shows a small lead-in line from the same sentence over the quote as a large glowing keyword, look pill shows the quote alone in a rounded pill, look color shows it in the accent colour at the same size. Without a look, punch draws punch, hormozi and accent draw color, and other presets draw the quote larger in their highlight colour. Every occurrence is emphasised. Requires captions=true and script; a quote absent from script is refused before any charge."
changedInput schema / properties / caption_emphasis / items / anyOf
Previous value: -[
- {
- "maxLength": 40,
- "minLength": 1,
- "type": "string"
- },
- {
- "properties": {
- "look": {
- "enum": [
- "punch",
- "pill",
- "color"
- ],
- "type": "string"
- },
- "punch_in": {
- "description": "Long form only: zoom into the presenter while the quote is…",
- "type": "boolean"
- },
- "quote": {
- "maxLength": 40,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "quote"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "maxLength": 120,
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "properties": {
+ "look": {
+ "enum": [
+ "punch",
+ "pill",
+ "color",
+ "box"
+ ],
+ "type": "string"
+ },
+ "punch_in": {
+ "type": "boolean"
+ },
+ "quote": {
+ "maxLength": 120,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "quote"
+ ],
+ "type": "object"
+ }
+]
changedInput schema / properties / caption_emphasis / maxItems
Previous value: -20New value: +60
removedInput schema / properties / caption_mode / description
Removed value: -"full (default when omitted): every spoken word is captioned. highlights: captions appear only around caption_emphasis quotes (lead-in, quote, short tail) and nowhere else; requires caption_emphasis. In both modes captions are hidden while a full-frame insert is on screen or a template meets their band."
removedInput schema / properties / caption_place / additionalProperties
Removed value: -{}
removedInput schema / properties / caption_place / description
Removed value: -"Pinned captions instead of caption_position: {relative_to:frame|face,y,edge?:top|center|bottom,max_width?}; y is a frame share, or face heights from the face centre."
removedInput schema / properties / caption_place / propertyNames
Removed value: -{
- "type": "string"
-}
removedInput schema / properties / caption_position / description
Removed value: -"Where captions sit: top, middle, lower or bottom (80% of the height). Omitted means the caption_style's own place. Requires captions=true."
removedInput schema / properties / caption_style / description
Removed value: -"Caption look when captions=true. hormozi: the default: heavy white uppercase with a thick black outline, up to three words per cue, one keyword per cue in yellow (emphasised, else the longest non-stop-word). accent: condensed bold white uppercase, no outline, up to three words per cue, one keyword per cue in orange (emphasised, else the longest non-stop-word). tiktok: bold rounded uppercase, one or two words at a time; the spoken word turns yellow and grows. youtube: clean bold sans-serif, five words on a dark rounded box near the bottom; words fade in, the spoken word in red. instagram: comic uppercase with a pink outline, two words at a time; the spoken word pops in orange. minimalist: plain sans-serif, five words on a half-transparent dark band, gentle fade. neon: cyan uppercase with a magenta outline, two words at a time; the spoken word pops in white. genz: large comic uppercase, one word at a time, slamming in with a pink highlight. campfire: rounded comic uppercase, three words; spoken words light up gold and stay lit. midnight: spooky uppercase, two words, slow fade; the spoken word in red. plottwist: heavy sans-serif, three words; the spoken word turns sky blue and grows. headline: tall condensed uppercase on a solid black band, three words; the spoken word scales up in yellow. promo: heavy sans-serif on a blue pill, three words; the spoken word pops in yellow. lecture: readable sans-serif, six words on a dark rounded box; the spoken word in green. highlighter: heavy sans-serif, four words; spoken words turn lime and stay lit. studio: sans-serif, seven words typed in on a blurred dark box; the spoken word in amber. broadcast: outlined sans-serif, eight words low in the frame; the spoken word in pale yellow. arcade: blocky yellow uppercase, two words; the spoken word bounces in white. clutch: brush uppercase, one word at a time, slamming in green. bubblegum: rounded display letters with a pink outline, two words; the spoken word bounces in yellow. crayon: marker handwriting with a navy outline, two words; the spoken word pops in orange. lyrics: handwritten script, five words; spoken words light up pink and stay lit. bassdrop: outlined display uppercase, one word at a time, scaling in orange. punch: mid-frame setup and punch: a small white lead-in line over one or two large blue glowing keywords; other words small and white. Alias: minimal draws minimalist. A font that cannot draw the script's letters is replaced by a plain sans-serif. Previews: https://clipwright.io/captions"
removedInput schema / properties / captions / description
Removed value: -"Burn word-timed captions into the video, over the presenter and over inserts. Not available with segments."
addedInput schema / properties / design
Added value: +{
+ "properties": {
+ "fonts": {
+ "properties": {
+ "body": {
+ "type": "string"
+ },
+ "display": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "logo_asset_id": {
+ "type": "string"
+ },
+ "look": {
+ "type": "string"
+ },
+ "motion": {
+ "enum": [
+ "calm",
+ "playful",
+ "premium",
+ "punchy"
+ ],
+ "type": "string"
+ },
+ "palette": {
+ "properties": {
+ "accent": {
+ "type": "string"
+ },
+ "accent_ink": {
+ "type": "string"
+ },
+ "background": {
+ "type": "string"
+ },
+ "ink": {
+ "type": "string"
+ },
+ "surface": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "radius": {
+ "enum": [
+ "square",
+ "soft",
+ "round",
+ "pill"
+ ],
+ "type": "string"
+ },
+ "style": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+}
removedInput schema / properties / edit_sounds / description
Removed value: -"A low sound on every cut (insert, full-frame template, layout window, framing), its peak on the cut. Needs inserts, layout_windows or framing; template_sounds.edit picks it (list_template_sounds). Price unchanged."
removedInput schema / properties / end_hold_s / description
Removed value: -"Seconds the last frame stays after the last word: the presenter freezes and every layer on screen then stays. Production seconds, not presenter seconds. Needs script and long-form qualification."
removedInput schema / properties / framing / description
Removed value: -"Text-anchored presenter sizes: each cuts to close or medium on its words and back to the take where they end. Items may not overlap one another, an insert or a layout window. A framing drawn wholly under full-frame templates is named in warnings[]. Where a punch_in emphasis meets a framing, the framing is drawn. Requires script and long-form qualification on the server; the price does not change."
addedInput schema / properties / framing / items / properties / cover_words / $ref
Added value: +"#/$defs/d2"
removedInput schema / properties / framing / items / properties / cover_words / description
Removed value: -"How many spoken words the size holds, counted from the…"
removedInput schema / properties / framing / items / properties / cover_words / exclusiveMinimum
Removed value: -0
removedInput schema / properties / framing / items / properties / cover_words / maximum
Removed value: -10000
removedInput schema / properties / framing / items / properties / cover_words / type
Removed value: -"integer"
addedInput schema / properties / framing / items / properties / id / $ref
Added value: +"#/$defs/d1"
removedInput schema / properties / framing / items / properties / id / description
Removed value: -"Unique across inserts, overlays, layout_windows, templates…"
removedInput schema / properties / framing / items / properties / id / pattern
Removed value: -"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"
removedInput schema / properties / framing / items / properties / id / type
Removed value: -"string"
removedInput schema / properties / framing / items / properties / size / description
Removed value: -"close: the presenter 1.18 times larger about the face;"
changedInput schema / properties / framing / items / properties / size / enum
Previous value: -[
- "close",
- "medium"
-]New value: +[
+ "close",
+ "medium",
+ "full"
+]
removedInput schema / properties / framing / items / properties / transition / description
Removed value: -"cut: a hard cut to the size;"
changedInput schema / properties / framing / maxItems
Previous value: -20New value: +60
changedInput schema / properties / image / description
Previous value: -"Public https url of the actor's photo (PNG, JPEG or WebP, up to 10 MB). A file on disk goes through upload_image (POST /v1/uploads) first — pass the url it returns. A source we cannot use — private or loopback host, http, unreachable, redirecting, over 10 MB, or not one of those image types — is refused (unusable_source) before any charge. We do not detect the face's gender: pass actor_gender or voice, or the default male voice is used with a warning."New value: +"Public https URL of the actor's photo (PNG, JPEG or WebP, up to 10 MB; a local file via upload_image); another source is refused (unusable_source) before any charge."
removedInput schema / properties / image / format
Removed value: -"starts_with"
changedInput schema / properties / inserts / description
Previous value: -"Text-anchored image or video inserts over full narration, each covering cover_words spoken words from its anchor; requires long-form qualification on the server, 1080p and explicit broll_policy=anyone. Captions draw over inserts."New value: +"Inserts on script words; need long-form qualification, 1080p and broll_policy=anyone."
addedInput schema / properties / inserts / items / properties / anchor / $ref
Added value: +"#/$defs/d0"
removedInput schema / properties / inserts / items / properties / anchor / anyOf
Removed value: -[
- {
- "$ref": "#/$defs/d6"
- },
- {
- "$ref": "#/$defs/d7"
- }
-]
changedInput schema / properties / inserts / items / properties / asset_id / $ref
Previous value: -"#/$defs/d3"New value: +"#/$defs/d5"
addedInput schema / properties / inserts / items / properties / box
Added value: +{
+ "properties": {
+ "height": {
+ "minimum": 0.1,
+ "type": "number"
+ },
+ "left": {
+ "type": "number"
+ },
+ "top": {
+ "type": "number"
+ },
+ "width": {
+ "minimum": 0.1,
+ "type": "number"
+ }
+ },
+ "required": [
+ "left",
+ "top",
+ "width",
+ "height"
+ ],
+ "type": "object"
+}
addedInput schema / properties / inserts / items / properties / cover_words / $ref
Added value: +"#/$defs/d2"
removedInput schema / properties / inserts / items / properties / cover_words / description
Removed value: -"How many spoken words this insert covers, counted from the…"
removedInput schema / properties / inserts / items / properties / cover_words / exclusiveMinimum
Removed value: -0
removedInput schema / properties / inserts / items / properties / cover_words / maximum
Removed value: -10000
removedInput schema / properties / inserts / items / properties / cover_words / type
Removed value: -"integer"
addedInput schema / properties / inserts / items / properties / fit
Added value: +{
+ "enum": [
+ "cover",
+ "contain",
+ "auto"
+ ],
+ "type": "string"
+}
addedInput schema / properties / inserts / items / properties / id / $ref
Added value: +"#/$defs/d1"
removedInput schema / properties / inserts / items / properties / id / pattern
Removed value: -"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"
removedInput schema / properties / inserts / items / properties / id / type
Removed value: -"string"
changedInput schema / properties / inserts / items / properties / image_motion / $ref
Previous value: -"#/$defs/d4"New value: +"#/$defs/d3"
changedInput schema / properties / inserts / items / properties / media_type / $ref
Previous value: -"#/$defs/d5"New value: +"#/$defs/d6"
changedInput schema / properties / inserts / items / properties / media_url / $ref
Previous value: -"#/$defs/d1"New value: +"#/$defs/d4"
addedInput schema / properties / inserts / items / properties / motion
Added value: +{
+ "properties": {
+ "direction": {
+ "enum": [
+ "down",
+ "up",
+ "left",
+ "right"
+ ],
+ "type": "string"
+ },
+ "kind": {
+ "enum": [
+ "scroll",
+ "pan"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "direction"
+ ],
+ "type": "object"
+}
addedInput schema / properties / inserts / items / properties / retime
Added value: +{
+ "properties": {
+ "at_s": {
+ "maximum": 600,
+ "minimum": 0,
+ "type": "number"
+ },
+ "mode": {
+ "enum": [
+ "ramp",
+ "stutter"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "mode"
+ ],
+ "type": "object"
+}
removedInput schema / properties / inserts / items / properties / transition / description
Removed value: -"How the insert comes in and goes out: cut (default), wipe…"
changedInput schema / properties / inserts / items / properties / transition / enum
Previous value: -[
- "cut",
- "wipe",
- "flash",
- "zoom"
-]New value: +[
+ "cut",
+ "wipe",
+ "flash",
+ "zoom",
+ "light_leak",
+ "glitch",
+ "power"
+]
changedInput schema / properties / inserts / maxItems
Previous value: -49New value: +99
removedInput schema / properties / interview / additionalProperties
Removed value: -{}
removedInput schema / properties / interview / description
Removed value: -"Off-screen speaker: { turns: [{ anchor: { quote }, cover_words? }] (words of script they say), off_screen?: { voice?, caption?: { style?, place? } }, gaze?: camera|left|right }. The presenter answers and holds still while they talk."
removedInput schema / properties / interview / propertyNames
Removed value: -{
- "type": "string"
-}
changedInput schema / properties / layout_windows / description
Previous value: -"Text-anchored reframings of the presenter: split (9:16 only) or card. Windows may not overlap one another or an insert. Same requirements as inserts. A covered or blurred presenter is still delivered vendor work and is billed as face time."New value: +"Presenter reframings: split (9:16 only) or card. A covered or blurred presenter is billed as face time."
changedInput schema / properties / layout_windows / items / properties / asset_id / $ref
Previous value: -"#/$defs/d3"New value: +"#/$defs/d5"
removedInput schema / properties / layout_windows / items / properties / blur_presenter / description
Removed value: -"Card only: blur the presenter behind the card."
changedInput schema / properties / layout_windows / items / properties / enter / $ref
Previous value: -"#/$defs/d8"New value: +"#/$defs/d7"
changedInput schema / properties / layout_windows / items / properties / id / $ref
Previous value: -"#/$defs/d9"New value: +"#/$defs/d1"
removedInput schema / properties / layout_windows / items / properties / layout / description
Removed value: -"split: presenter in the top half, media in the bottom half,…"
addedInput schema / properties / layout_windows / items / properties / media_share
Added value: +{
+ "maximum": 0.7,
+ "minimum": 0.3,
+ "type": "number"
+}
addedInput schema / properties / layout_windows / items / properties / media_side
Added value: +{
+ "enum": [
+ "top",
+ "bottom"
+ ],
+ "type": "string"
+}
changedInput schema / properties / layout_windows / items / properties / media_type / $ref
Previous value: -"#/$defs/d5"New value: +"#/$defs/d6"
changedInput schema / properties / layout_windows / items / properties / media_url / $ref
Previous value: -"#/$defs/d1"New value: +"#/$defs/d4"
changedInput schema / properties / layout_windows / maxItems
Previous value: -5New value: +15
changedInput schema / properties / look / description
Previous value: -"NOT HONORED YET: look is not honored yet: it does not reach the renderer"New value: +"NOT HONORED YET: it does not reach the renderer."
addedInput schema / properties / motion_style
Added value: +{
+ "description": "Free drawing style of captions, templates and scenes; describe_tool quote_ugc motion_style lists the styles and spans.",
+ "type": "object"
+}
addedInput schema / properties / moves
Added value: +{
+ "items": {
+ "properties": {
+ "anchor": {
+ "properties": {
+ "occurrence": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "quote": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "quote"
+ ],
+ "type": "object"
+ },
+ "cover_words": {
+ "$ref": "#/$defs/d2"
+ },
+ "data": {
+ "type": "object"
+ },
+ "name": {
+ "maxLength": 48,
+ "minLength": 1,
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
+ "type": "string"
+ },
+ "placement": {
+ "enum": [
+ "over",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "anchor"
+ ],
+ "type": "object"
+ },
+ "maxItems": 40,
+ "minItems": 1,
+ "type": "array"
+}
addedInput schema / properties / music
Added value: +{
+ "anyOf": [
+ {
+ "const": "auto",
+ "type": "string"
+ },
+ {
+ "properties": {
+ "mood": {
+ "maxLength": 400,
+ "minLength": 1,
+ "pattern": "^[^\\p{Cc}]+$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "mood"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "Music under the voice, off unless asked: \"auto\" or { mood }. 60 credits per video, charged only when delivered with it."
+}
changedInput schema / properties / name / description
Previous value: -"NOT HONORED YET: name is not honored yet: it does not reach the renderer"New value: +"NOT HONORED YET: it does not reach the renderer."
changedInput schema / properties / overlays / description
Previous value: -"Text-anchored images or videos over the visible presenter, each at one position or place. At most 2 on screen at once, on boxes that do not overlap. Captions move to the middle or bottom third off an overlay, never over the face, and hide while neither is free. Hidden under full-frame inserts. Same requirements as inserts: script, long-form qualification on the server, 1080p and explicit broll_policy=anyone. The presenter stays on screen, so the price does not change."New value: +"Images or videos over the presenter; at most 3 at once. Price unchanged."
changedInput schema / properties / overlays / items / properties / asset_id / $ref
Previous value: -"#/$defs/d3"New value: +"#/$defs/d5"
changedInput schema / properties / overlays / items / properties / enter / $ref
Previous value: -"#/$defs/d8"New value: +"#/$defs/d7"
removedInput schema / properties / overlays / items / properties / enter_duration_s / description
Removed value: -"Default 0.32."
removedInput schema / properties / overlays / items / properties / enter_offset_s / description
Removed value: -"Seconds from its first word, negative before;"
removedInput schema / properties / overlays / items / properties / exit / description
Removed value: -"How it leaves: cut (default), fade, pop_out or slide."
changedInput schema / properties / overlays / items / properties / id / $ref
Previous value: -"#/$defs/d9"New value: +"#/$defs/d1"
changedInput schema / properties / overlays / items / properties / media_type / $ref
Previous value: -"#/$defs/d5"New value: +"#/$defs/d6"
changedInput schema / properties / overlays / items / properties / media_url / $ref
Previous value: -"#/$defs/d1"New value: +"#/$defs/d4"
removedInput schema / properties / overlays / items / properties / place / additionalProperties
Removed value: -{}
removedInput schema / properties / overlays / items / properties / place / description
Removed value: -"Instead of position, a pinned box:…"
removedInput schema / properties / overlays / items / properties / place / propertyNames
Removed value: -{
- "type": "string"
-}
removedInput schema / properties / overlays / items / properties / position / description
Removed value: -"A corner (top_left, top_right, bottom_left, bottom_right),…"
changedInput schema / properties / overlays / maxItems
Previous value: -10New value: +30
addedInput schema / properties / pause_trim / anyOf
Added value: +[
+ {
+ "const": false,
+ "type": "boolean"
+ },
+ {
+ "properties": {
+ "comma_s": {
+ "$ref": "#/$defs/d8"
+ },
+ "mid_phrase_s": {
+ "$ref": "#/$defs/d8"
+ },
+ "sentence_end_s": {
+ "$ref": "#/$defs/d8"
+ }
+ },
+ "type": "object"
+ }
+]
removedInput schema / properties / pause_trim / description
Removed value: -"Shorten narration pauses longer than these seconds, cutting silence only."
removedInput schema / properties / pause_trim / properties
Removed value: -{
- "comma_s": {
- "$ref": "#/$defs/d10"
- },
- "mid_phrase_s": {
- "$ref": "#/$defs/d10"
- },
- "sentence_end_s": {
- "$ref": "#/$defs/d10"
- }
-}
removedInput schema / properties / pause_trim / type
Removed value: -"object"
changedInput schema / properties / person / description
Previous value: -"NOT HONORED YET: person is not honored yet: this request uses the default actor; choose actor_id from list_actors or provide image to select a different face"New value: +"NOT HONORED YET: the default actor is used; pick actor_id from list_actors or pass image."
changedInput schema / properties / person / maxLength
Previous value: -500New value: +2000
removedInput schema / properties / presenter_framing / description
Removed value: -"close (default) or wide: presenter lower, room above. Needs the actor's wide view (list_actors), 9:16 only; else close plus warnings[]."
changedInput schema / properties / presenter_framing / enum
Previous value: -[
- "close",
- "wide"
-]New value: +[
+ "close",
+ "wide",
+ "full"
+]
removedInput schema / properties / presenter_gaze / description
Removed value: -"[{ anchor: { quote }, cover_words?, gaze: camera|left|right }]. Where the presenter looks on these words, as the viewer sees it: camera, left or right. Needs actor_id with that view (list_actors); a change of gaze is a cut."
removedInput schema / properties / presenter_gaze / items / additionalProperties
Removed value: -{}
removedInput schema / properties / presenter_gaze / items / propertyNames
Removed value: -{
- "type": "string"
-}
changedInput schema / properties / presenter_gaze / maxItems
Previous value: -6New value: +20
removedInput schema / properties / presenter_mic / description
Removed value: -"true: presenter holds a tiny mic. Needs the actor's mic view in that framing (list_actors; library ones are wide); else no mic plus warnings[]."
removedInput schema / properties / presenter_place / additionalProperties
Removed value: -{}
removedInput schema / properties / presenter_place / description
Removed value: -"{face_height,face_centre:[x,y]} in frame shares; needs actor_id."
removedInput schema / properties / presenter_place / propertyNames
Removed value: -{
- "type": "string"
-}
addedInput schema / properties / product_asset_id
Added value: +{
+ "$ref": "#/$defs/d5"
+}
removedInput schema / properties / resolution / description
Removed value: -"Output resolution: 720p | 1080p | 4k (short side 720 / 1080 / 2160 px). Omitted means 1080p."
changedInput schema / properties / resolution / enum
Previous value: -[
- "720p",
- "1080p",
- "4k"
-]New value: +[
+ "720p",
+ "1080p"
+]
addedInput schema / properties / scenes
Added value: +{
+ "description": "25 credits per scene, charged only for scenes drawn in the delivered video. Needs script and long-form qualification.",
+ "items": {
+ "properties": {
+ "anchor": {
+ "$ref": "#/$defs/d0"
+ },
+ "brief": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "pattern": "^[^\\p{Cc}]+$",
+ "type": "string"
+ },
+ "colors": {
+ "items": {
+ "pattern": "^#[0-9a-fA-F]{6}$",
+ "type": "string"
+ },
+ "maxItems": 4,
+ "minItems": 1,
+ "type": "array"
+ },
+ "cover_words": {
+ "$ref": "#/$defs/d2"
+ },
+ "id": {
+ "$ref": "#/$defs/d1"
+ },
+ "placement": {
+ "default": "over",
+ "enum": [
+ "over",
+ "full"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "maxLength": 200,
+ "minLength": 1,
+ "pattern": "^[^\\p{Cc}]+$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "anchor",
+ "brief"
+ ],
+ "type": "object"
+ },
+ "maxItems": 12,
+ "minItems": 1,
+ "type": "array"
+}
changedInput schema / properties / script / description
Previous value: -"The words the actor says; required unless segments supplies the spoken text. Segments and text-anchored inserts require long-form qualification on the server. Script limits by speech model: eleven_v3: 5000 characters; eleven_flash_v2_5: 10000 characters; eleven_turbo_v2_5: 10000 characters; eleven_v4: 5000 characters; gemini-3.8-flash-tts: 5000 characters. Count includes spaces, audio tags and stress marks; emoji may count as two characters. Break tags are cut from the text sent to eleven_v4 and gemini-3.8-flash-tts and are not counted there. There is no word-count limit. Duration and price are estimates until measured. Russian stress: write the stressed vowel as a capital inside a lowercase word (\"потОм\", \"зАмок\") and eleven_v4 and gemini-3.8-flash-tts receive it as the stress mark U+0301 (\"пото́м\"); a mark typed directly is kept. A capital at the start of a word stays a capital, and a word with a second capital or a capital consonant inside (all caps, \"ВУЗы\") is left as it is. A single capital vowel inside a word is always read as stress, so write \"Яндекс Еда\", not \"ЯндексЕда\". Tell users writing in Russian that they can mark stress this way. eleven_flash_v2_5 and eleven_turbo_v2_5 cost less but misread stress marks: capitals reach them unchanged."New value: +"The words the actor says; required unless segments supplies them. Script limits by speech model: eleven_v3: 5000 characters; eleven_flash_v2_5: 10000 characters; eleven_turbo_v2_5: 10000 characters; eleven_v4: 5000 characters; gemini-3.8-flash-tts: 5000 characters. Spaces, audio tags and stress marks count."
removedInput schema / properties / segments / description
Removed value: -"Ordered actor and image segments; requires long-form qualification on the server, captions=false and 1080p. Image media requires explicit broll_policy=anyone."
removedInput schema / properties / segments / items / properties / duration_seconds / description
Removed value: -"Required for an image segment;"
changedInput schema / properties / segments / items / properties / image_motion / $ref
Previous value: -"#/$defs/d4"New value: +"#/$defs/d3"
addedInput schema / properties / segments / items / properties / media_type / $ref
Added value: +"#/$defs/d6"
removedInput schema / properties / segments / items / properties / media_type / description
Removed value: -"Explicit media source type;"
removedInput schema / properties / segments / items / properties / media_type / enum
Removed value: -[
- "image",
- "video"
-]
removedInput schema / properties / segments / items / properties / media_type / type
Removed value: -"string"
addedInput schema / properties / segments / items / properties / script / $ref
Added value: +"#/$defs/d9"
removedInput schema / properties / segments / items / properties / script / maxLength
Removed value: -10000
removedInput schema / properties / segments / items / properties / script / minLength
Removed value: -1
removedInput schema / properties / segments / items / properties / script / type
Removed value: -"string"
changedInput schema / properties / segments / maxItems
Previous value: -5New value: +20
addedInput schema / properties / shots
Added value: +{
+ "description": "Live shots of the actor on script words, no overlaps; 9:16, long-form qualification. Acting shots: wide or full, a cast from pictures. Each kind has its presenter-second price in list_prices.",
+ "items": {
+ "type": "object"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "type": "array"
+}
changedInput schema / properties / template_sounds / anyOf
Previous value: -[
- {
- "const": false,
- "type": "boolean"
- },
- {
- "additionalProperties": {
- "type": "string"
- },
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- }
-]New value: +[
+ {
+ "const": false,
+ "type": "boolean"
+ },
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+]
removedInput schema / properties / template_sounds / description
Removed value: -"Template sounds: false for none, or { beat: name } over the defaults; list_template_sounds names them."
removedInput schema / properties / template_theme / description
Removed value: -"The look of every template in the run: a preset and an optional accent; only with templates."
removedInput schema / properties / template_theme / properties / accent / description
Removed value: -"#RRGGBB in place of the preset's accent: the pills' fill…"
removedInput schema / properties / template_theme / properties / preset / description
Removed value: -"clean_light (light cards on our blue gradient), bold_dark…"
changedInput schema / properties / templates / description
Previous value: -"Graphic templates, each { id, kind, anchor, cover_words?, placement?, transition?, data }. On any script run. Templates never change the price: every run is billed by its parts as list_prices states them, and a presenter a template covers is still presenter time. Ids are unique across inserts, overlays, layout_windows and templates. Text is one line of Latin or the script's own letters, digits and common punctuation, with no emoji; a wide CJK glyph counts 2 toward a limit, and long text shrinks to fit the kind's width. size small|medium|large scales a kind; absent is medium. A media field takes { asset_id } of a ready asset of the kind it names. An inner quote names words inside the template's own words, after the one before it: its beat lands on their first word, and must not fall under an insert or full-frame template; a click or step without one is spread evenly. A beat spoken before its template has entered moves just after the enter, with a warning. A template that meets the caption band hides captions while it shows; one elsewhere, such as a small one at the top, leaves them. A full-frame template also hides the presenter, overlays and over-presenter templates while it shows, never meets a wipe or zoom insert, and the covered presenter is billed. At most 2 overlays and over-presenter templates show at once, on footprints that do not overlap. template_theme sets the look of them all. Kinds: tag (over): a short gradient pill over the presenter or an insert; without position it sits in the caption spot and hides captions while it shows; data text ≤ 32, position? top|center|bottom, size? small|medium|large. lower_third (over): a name and role bar low in the frame; captions are hidden while it shows; data name ≤ 28, role? ≤ 36, side left|right, size? small|medium|large. end_card (over): a site pill with an optional call to action in the caption spot; captions are hidden while it shows; data site ≤ 32, cta? ≤ 48, size? small|medium|large. title_card (full): a full-frame hook card: the title (up to two lines) on a white card beside an optional logo image, and an optional chip under it; data title ≤ 48, chip? ≤ 32, logo? {asset_id} image, size? small|medium|large. quote (full): a full-frame quote: marks, the text in up to four lines, then the author with an optional round photo, cut to a circle; data text ≤ 120, author? ≤ 32, photo? {asset_id} image (cut to fill), size? small|medium|large. stat (full|over): a number counting up from 0 to value (up to 2 decimals), with prefix and suffix around it and a label under it; full fills the frame, over sits at chest level on a card; data value number, prefix? ≤ 6, suffix? ≤ 6, label? ≤ 32, size? small|medium|large. callout (over): an arrow or ring that lands on a point of the frame and pulses, target {x,y} in % of the frame from its top left, with an optional label pill below or above it; it may point at the face, its label keeps off the face where it can; also over an insert; data target {x,y}, style arrow|ring, text? ≤ 24, size? small|medium|large. checklist (over): 2–4 rows, each an optional icon, a label and a switch or check box set on or off; a cursor clicks rows in turn (item is the row's index from 0), each click flipping it; below the face; data items 2–4 of {label ≤ 24, on true|false, icon? phone|briefcase|user|clock|chat|star}, clicks? 0–6 of {item number, quote? inner quote}, style? switch|check, size? small|medium|large. phone_call (over): an incoming call on a neutral phone at the side (right unless side left): the caller, a subtitle and a round avatar ring, then the call is answered on answer_at and its timer runs (or a hold banner shows); beside the face in wide frames, under it in tall ones; data caller ≤ 24, subtitle? ≤ 32, avatar? {asset_id} image (cut to fill), answer_at inner quote, side? left|right, size? small|medium|large, banner? ≤ 32, banner_note? ≤ 48, mask_number? true|false. compare (full): a full-frame card showing the before image, then the after image sweeps in on a diagonal on reveal_at and both stay side by side, each with an optional label pill; both images are cut to fill a 3:5 card; data before {asset_id} image (cut to fill), after {asset_id} image (cut to fill), labels? {before? ≤ 20, after? ≤ 20}, reveal_at inner quote, size? small|medium|large. notification (over): a phone notification at the top, above the face: an icon (else the app's initial), the app, a title and a body line; it drops in, holds at least 1.2 s, then leaves before its span ends; data app ≤ 20, title ≤ 32, body ≤ 80, icon? phone|briefcase|user|clock|chat|star, size? small|medium|large. progress (over): 2–5 steps in a column on a card, each completing with a check in turn, on its advance_at quote (one per step, in order) or spread evenly; below the face; data steps 2–5 of ≤ 20, advance_at? 2–5 of inner quote, size? small|medium|large. rating (over): five stars on a card filling in turn up to stars (1–5 in halves, a half star half filled), an optional label under them; at chest level; data stars number, label? ≤ 32, size? small|medium|large."New value: +"Price unchanged, a covered presenter still billed. Kinds: tag, lower_third, end_card, title_card, quote, stat, callout, checklist, phone_call, compare, notification, progress, rating, chat_window, video_grid, word_title, phone_screen, terminal, pointer_chips, chart, race, hand_title, word_fill. Data and limits per kind: describe_tool."
removedInput schema / properties / templates / items / properties / data / additionalProperties
Removed value: -{}
removedInput schema / properties / templates / items / properties / data / description
Removed value: -"The kind's fields, as its catalog line in templates names…"
removedInput schema / properties / templates / items / properties / data / propertyNames
Removed value: -{
- "type": "string"
-}
addedInput schema / properties / templates / items / properties / id / $ref
Added value: +"#/$defs/d1"
removedInput schema / properties / templates / items / properties / id / description
Removed value: -"Unique across inserts, overlays, layout_windows and…"
removedInput schema / properties / templates / items / properties / id / pattern
Removed value: -"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"
removedInput schema / properties / templates / items / properties / id / type
Removed value: -"string"
changedInput schema / properties / templates / items / properties / kind / enum
Previous value: -[
- "tag",
- "lower_third",
- "end_card",
- "title_card",
- "quote",
- "stat",
- "callout",
- "checklist",
- "phone_call",
- "compare",
- "notification",
- "progress",
- "rating"
-]New value: +[
+ "tag",
+ "lower_third",
+ "end_card",
+ "title_card",
+ "quote",
+ "stat",
+ "callout",
+ "checklist",
+ "phone_call",
+ "compare",
+ "notification",
+ "progress",
+ "rating",
+ "chat_window",
+ "video_grid",
+ "word_title",
+ "phone_screen",
+ "terminal",
+ "pointer_chips",
+ "chart",
+ "race",
+ "hand_title",
+ "word_fill"
+]
removedInput schema / properties / templates / items / properties / place / additionalProperties
Removed value: -{}
removedInput schema / properties / templates / items / properties / place / description
Removed value: -"Over placement only: a box as an overlay's place (not by…"
removedInput schema / properties / templates / items / properties / place / propertyNames
Removed value: -{
- "type": "string"
-}
removedInput schema / properties / templates / items / properties / placement / description
Removed value: -"over (drawn over the presenter) or full (fills the frame);"
removedInput schema / properties / templates / items / properties / transition / description
Removed value: -"Full placement only, as an insert's transition."
changedInput schema / properties / templates / maxItems
Previous value: -12New value: +40
changedInput schema / properties / tts_model / description
Previous value: -"Speech model: eleven_v3 | eleven_flash_v2_5 | eleven_turbo_v2_5 | eleven_v4 | gemini-3.8-flash-tts. Omitted means the model of the chosen voice (list_voices shows it): gemini-3.8-flash-tts for its own voices, eleven_v4 for every preset, catalog voice and raw voice_id. An explicit tts_model wins, except eleven_v3: it is no longer spoken, and a run naming it speaks eleven_v4 with a warning. eleven_v4 and gemini-3.8-flash-tts read stress marks (a capital vowel inside a Russian word, \"потОм\", becomes one; see script); eleven_flash_v2_5 and eleven_turbo_v2_5 are cheaper alternatives for languages other than Russian. gemini-3.8-flash-tts speaks only its own voices (list_voices with model=gemini-3.8-flash-tts; without voice, kore for a female actor and charon otherwise) and returns no word timings: a preset or catalog voice, voice_id, captions=true, segments and inserts are refused with it before any charge. Audio tags in square brackets are a convention of the other speech models and are not measured on it. Script limits by speech model: eleven_v3: 5000 characters; eleven_flash_v2_5: 10000 characters; eleven_turbo_v2_5: 10000 characters; eleven_v4: 5000 characters; gemini-3.8-flash-tts: 5000 characters. Count includes spaces, audio tags and stress marks; emoji may count as two characters. Break tags are cut from the text sent to eleven_v4 and gemini-3.8-flash-tts and are not counted there. There is no word-count limit. Duration and price are estimates until measured."New value: +"Speech model; omitted, the voice's own. gemini-3.8-flash-tts speaks only its own voices and refuses voice_id, captions, segments and inserts before any charge."
removedInput schema / properties / visible_ai_label / description
Removed value: -"Visible AI label for newly marked presenter videos, including long form; defaults to true in the server admission policy. False hides only the visible label and does not disable invisible marking or signed provenance. Historical outputs are unchanged."
changedInput schema / properties / voice / description
Previous value: -"Voice name from list_voices. Curated presets: sarah | george | eric | daria_ru_female. The API refuses a name list_voices does not return, before any charge. Omitted means the default voice for the actor's gender: the gender of actor_id, actor_gender with image, or george for the default actor and for image without actor_gender. gemini-3.8-flash-tts speaks only its own voices (kind model_voice in list_voices, such as kore): naming one selects that model, and a voice is refused with a tts_model that does not speak it, before any charge. Mutually exclusive with voice_id."New value: +"A list_voices name (presets sarah | george | eric | daria_ru_female); another is refused before any charge. Omitted: the actor's gender default."
changedInput schema / properties / voice_id / description
Previous value: -"Raw vendor voice id (16–32 letters and digits) for a voice outside the catalog. Checked lazily: an unknown id fails the run, not the request. Refused with tts_model=gemini-3.8-flash-tts. Mutually exclusive with voice."New value: +"Raw vendor voice id outside the catalog; an unknown id fails the run, not the request."
removedInput schema / properties / voice_pace / description
Removed value: -"Narration speed; 1 is the voice's own. gemini-3.8-flash-tts gets a style hint instead; eleven_v4 has no speed, so pick a voice by list_voices words_per_second; both named in warnings[]."