Update existing render elements in a storyboard preview before rendering the final video
id.| Scenario | Description |
|---|---|
| Replace background visuals | Change a scene’s background image or video URL |
| Update scene text | Modify the text content displayed on a scene |
| Change background music | Replace the background music track URL |
| Adjust element timing | Modify startTime or duration of elements |
completed status.application/jsonid, elementType, type, startTime, duration) along with any properties you want to update. Only elements with matching id values in the existing storyboard will be updated.
id from the storyboard preview renderParams.elements array.Examples: backgroundElement_20260306230202544742ecd40c041449..., bgMusic, voiceOver, SceneText_202603062302035443dd4953bf12...elementType.Values:backgroundElement — Scene background image or videoaudioElement — Background music or voice-over audioSceneText — Scene text overlay (displayed on scenes)layerItem — Layer items such as title text, avatars, or overlaysvideo — Video mediaimage — Image mediaaudio — Audio mediatext — Text contentbackgroundElement_20260306230202544742ecd40c041449dac21bb737c799201). Always retrieve the actual IDs from the preview job response rather than constructing them manually.| Element | elementType | type | id Pattern | Description |
|---|---|---|---|---|
| Scene Background | backgroundElement | video, image | backgroundElement_{uniqueId} | Background visual for each scene |
| Scene Text | SceneText | text | SceneText_{uniqueId} | Sentence-level text overlay on a scene |
| Title/Layer Text | layerItem | text | {uniqueId} | Title text, headings, or overlay text |
| Layer Visual | layerItem | video, image | {uniqueId} | Overlay images, videos, or avatars |
| Background Music | audioElement | audio | bgMusic | Background music track |
| Voice-Over | audioElement | audio | voiceOver | AI-generated narration audio |
backgroundElement)| Property | Type | Description | Example |
|---|---|---|---|
url | string | Full-resolution media URL used for final video rendering | "https://cdn.com/video-hd.mp4" |
visualUrl | string | Media URL used for preview playback. Can be a lower-resolution video or even a thumbnail image for faster preview loading. When rendering the final video, url is used instead | "https://cdn.com/video-preview.mp4" or "https://cdn.com/preview-thumb.jpg" |
type | string | Media type of url: video or image | "video" |
visualType | string | Media type of visualUrl. Can differ from type — e.g., visualType may be image (thumbnail) while type is video (full render) | "image" |
backgroundColor | string | Solid background color in RGBA format. Used as fallback or when no media URL is set | "rgba(0, 0, 0, 1)" |
| Property | Type | Default | Description |
|---|---|---|---|
width | string | "100%" | Element width as a percentage of the video frame |
xPercent | string | "0%" | Horizontal position offset as percentage |
yPercent | string | "0%" | Vertical position offset as percentage |
objectMode | string | "cover" | How the media fits the frame. cover fills and crops to fit, fit letterboxes to show entire media |
cursor | string | "default" | Mouse cursor style in the editor |
| Property | Type | Default | Description |
|---|---|---|---|
loop | boolean | true | Whether to loop video playback when it reaches the end |
mute | boolean | true | Whether to mute the video’s built-in audio track |
segments | array | [] | Time segments for video clipping. Each segment: { "start": 0, "end": 10 } |
| Property | Type | Description | Example |
|---|---|---|---|
colorOverlay | object | Semi-transparent color overlay on top of the background | See below |
colorOverlay.hide | boolean | Whether the overlay is hidden | false |
colorOverlay.bgColor | string | Overlay color in RGB format | "rgb(22,91,110)" |
colorOverlay.opacity | number | Overlay opacity from 0 (transparent) to 1 (opaque) | 0.65 |
| Property | Type | Description | Example |
|---|---|---|---|
library | string | Source library where the media was selected from | "getty" |
Full Background Element Example
SceneText) and Layer Text (layerItem with type: "text")| Property | Type | Description | Example |
|---|---|---|---|
text | string | Text content to display. Supports <strong> tags to highlight keywords using keywordColor | "AI will <strong>save time</strong>" |
| Property | Type | Default | Description | Example |
|---|---|---|---|---|
fontFamily | string | "Arial" | Font family name | "Space Grotesk" |
fontWeight | number | 400 | Font weight (400 = normal, 700 = bold) | 400 |
fontSize | string | "16" | Font size in pixels | "32" |
fontColor | string | — | Text color in RGB or RGBA format | "rgb(255,255,255)" |
keywordColor | string | — | Color applied to text wrapped in <strong> tags | "rgba(248, 173, 151, 1)" |
textAlign | string | "left" | Text alignment: left, center, or right | "center" |
decoration | array | [] | Text decorations. Values: "decor-bold", "decor-italics", "decor-underline", "decor-linethrough" | ["decor-bold"] |
case | string | "none" | Text case transformation: none, case-uppercase, case-lowercase, case-capitalize, case-smallcapitalize | "none" |
lineHeight | number | 1.3 | Line height multiplier for spacing between lines | 1.48 |
| Property | Type | Default | Description | Example |
|---|---|---|---|---|
textBackgroundColor | string | "rgba(0,0,0,0)" | Background color behind the text or as a fill for the full-width box | "rgba(22, 91, 110, 1)" |
textBackgroundRadius | array | [0,0,0,0] | Border radius for the text background box: [topLeft, topRight, bottomRight, bottomLeft] | [8, 8, 8, 8] |
boxBackground | boolean | false | Whether text has a visible background box | false |
| Property | Type | Default | Description | Example |
|---|---|---|---|---|
dropShadowColor | string | "rgba(0,0,0,0)" | Drop shadow color in RGBA format | "rgba(0,0,0,1)" |
dropShadowBlur | number | 0 | Shadow blur radius | 3 |
| Property | Type | Default | Description | Example |
|---|---|---|---|---|
width | string | "90%" | Text box width as percentage of the video frame | "70.00%" |
fullWidth | boolean | false | Whether text spans the full viewport width with padding | false |
preset | string | — | Position preset anchor. See Position Presets | "bottom-left" |
opacity | number | 1 | Element transparency from 0 (invisible) to 1 (opaque) | 1 |
draggable | boolean | true | Whether the element can be repositioned in the editor | true |
resizable | boolean | false | Whether the element can be resized in the editor | false |
canChangeWidthOnly | boolean | true | Restrict resizing to width only (height adjusts automatically) | true |
snapTo | boolean | true | Snap to alignment guidelines when dragging | true |
midHandle | boolean | false | Use center handle for resizing | false |
cropable | boolean | false | Whether the element can be cropped | false |
| Property | Type | Default | Description | Example |
|---|---|---|---|---|
bullet | boolean | false | Display a bullet point beside each text line | false |
bulletColor | string | "#e30022" | Bullet point color | "#e30022" |
bulletWidth | number | 15 | Bullet point width in pixels | 15 |
| Property | Type | Description | Example |
|---|---|---|---|
animation | array | Array of animation objects for entry and exit effects | See below |
animation[].name | string | Animation name: Blur, Drift, Fade, Wipe, Show, Elastic, Typewriter, TextReveal, Bulletin, None | "Blur" |
animation[].type | array | Animation phase: ["entry"] or ["exit"] | ["entry"] |
animation[].writingStyle | string | How text animates in: character (per letter), word (per word), line (per line), paragraph (all at once) | "paragraph" |
animation[].speed | object | Animation speed configuration | { "value": 2 } |
animation[].speed.value | number | Speed value (higher = faster) | 2 |
animation[].direction | string | Direction of animation: up, down, left, right | "up" |
| Property | Type | Description |
|---|---|---|
textLines | array | Pre-calculated line break and character position data used by the rendering engine. Each entry contains character positions (charX), highlight flags (h), and line dimensions (ht). This is auto-generated — when updating text content, you must set textLines to an empty array [] so that line breaks and character positions are recalculated during preview and render |
Full Scene Text Element Example
Full Title/Layer Text Element Example
audioElement)bgMusic) or voice-over narration (voiceOver).
| Property | Type | Description | Example |
|---|---|---|---|
url | string | Audio file URL (MP3 or compatible format) | "https://tracks.melod.ie/.../track.mp3" |
fade | boolean | Whether to apply fade in/out effect to the audio. Typically true for background music | true |
| Property | Type | Description | Example |
|---|---|---|---|
segments | array | Array of audio segment objects. Each segment defines a playback range with its own volume level. Segments correspond to individual scenes in the video | See below |
segments[].startTime | number | Start time of the segment in the video timeline (seconds) | 0 |
segments[].duration | number | Duration of the segment (seconds) | 7.6 |
segments[].volume | number | Volume level for this segment (0 to 1). Background music typically uses 0.1, voice-over uses 1 | 0.1 |
segments[].audioTime | number | Offset position in the audio file to start playback from (seconds) | 0 |
Full Background Music Element Example
Full Voice-Over Element Example
layerItem with type: "video" or "image")| Property | Type | Default | Description | Example |
|---|---|---|---|---|
url | string | — | Full-resolution media URL used for final video rendering | "https://cdn.com/avatar-hd.mp4" |
visualUrl | string | — | Media URL used for preview playback. Can be a lower-resolution video or a thumbnail image for faster preview loading | "https://cdn.com/avatar-preview.mp4" or "https://cdn.com/avatar-thumb.jpg" |
type | string | — | Media type of url: video or image | "video" |
visualType | string | — | Media type of visualUrl. Can differ from type (e.g., image thumbnail for a video render) | "image" |
objectMode | string | "cover" | How media fits: cover (fill and crop) or fit (letterbox) | "cover" |
width | string | — | Element width as percentage | "25%" |
height | string | — | Element height as percentage (optional) | "30%" |
preset | string | — | Position preset anchor | "bottom-right" |
xPercent | string | — | Horizontal position when no preset | "70%" |
yPercent | string | — | Vertical position when no preset | "60%" |
opacity | number | 1 | Transparency (0 to 1) | 1 |
loop | boolean | true | Loop video playback | true |
mute | boolean | false | Mute video audio | true |
aspectRatio | number | — | Width/height ratio | 0.5625 |
flipHorizontal | boolean | false | Mirror the element horizontally | false |
flipVertical | boolean | false | Mirror the element vertically | false |
maskShape | string | "rectangle" | Mask shape: rectangle or circle | "circle" |
library | string | — | Source library (e.g., avatar, giphy) | "avatar" |
preset property defines a named anchor position for text and layer elements within the video frame:
| Preset | Description |
|---|---|
top-left | Anchored to top-left corner |
top-center | Anchored to top-center |
top-right | Anchored to top-right corner |
center-left | Anchored to middle-left |
center-center | Centered in the frame |
center-right | Anchored to middle-right |
bottom-left | Anchored to bottom-left corner |
bottom-center | Anchored to bottom-center |
bottom-right | Anchored to bottom-right corner |
full-width-top | Full width, anchored to top |
full-width-center | Full width, centered vertically |
full-width-bottom | Full width, anchored to bottom |
animation array contains animation configuration objects:
| Animation Name | Description |
|---|---|
Blur | Text fades in with a blur effect |
Drift | Text slides in from a specified direction |
Fade | Simple fade in/out |
Wipe | Text wipes in from a direction |
Show | Instant appearance |
Elastic | Bouncy elastic entrance |
Typewriter | Characters appear one by one |
TextReveal | Text reveals progressively |
Bulletin | News bulletin style animation |
None | No animation |
| Writing Style | Description |
|---|---|
character | Animate one character at a time |
word | Animate one word at a time |
line | Animate one line at a time |
paragraph | Animate the entire text block at once |
204 No Content response indicates the elements were updated successfully. The updated elements will be reflected when you:
Only existing elements can be updated
renderParams.elements array (returned from the storyboard preview job) can be updated. Elements are matched by their unique id.Element IDs come from the preview response
renderParams.elements — an array of all elements with their id values. Element IDs are auto-generated unique strings. Always retrieve the actual IDs from the response rather than constructing them manually.Updates are merged, not replaced
url of a background element will keep its existing loop, mute, objectMode, and other properties.Remove textLines when updating text content
text property of a SceneText or layerItem text element, you must set textLines to an empty array []. The textLines array contains pre-calculated line break positions and character coordinates that are specific to the original text. If you change the text but keep the old textLines, the rendering engine will use stale layout data, causing incorrect line breaks and character positioning. Setting textLines to [] ensures the system recalculates the layout during preview and video rendering.Scene text supports HTML highlighting
SceneText) elements support <strong> tags for keyword highlighting. For example: "This is <strong>important</strong> text" will render “important” with the element’s keywordColor.Updates persist for rendering