Skip to main content
Use node config overrides when a trigger needs to change the same settings a user can configure in the workflow builder. This is the most precise way to customize a run without editing the saved workflow template.
This page documents frontend workflow-configurable fields only. Backend-only runtime fields are intentionally omitted.

Where Overrides Go

Add one of these fields to POST /trigger-template:
  • nodeConfigs
  • nodeConfigOverrides
  • actionConfigs
They all behave the same way. Most integrations should use nodeConfigs.
You can also send overrides as a list:

How Overrides Apply

  • Overrides are keyed by workflow node type, such as add_broll or add_subtitles.
  • The public API resolves each node type to the matching node in the selected workflow.
  • If the workflow does not contain that node type, the override is skipped and the workflow still runs.
  • If the workflow contains the node but the config has invalid field names, invalid types, or invalid enum values, the request returns INVALID_NODE_CONFIG.
  • Structured overrides win over legacy flat fields when both set the same nested value.
For example, if you send both broll: true and nodeConfigs.add_broll.enabled: false, the structured nodeConfigs value wins for add_broll.enabled.

Quick Example

This example changes clip length, b-roll, subtitles, and vertical reframe behavior for one trigger:

Supported Node Types

add_subtitles, add_title_overlay, add_watermark, and add_outro are deprecated but supported. Use style_video for new workflows. Existing workflows and their standalone node overrides continue to work.

Per-Node Examples

find_clips

Controls the clip discovery step.
Fields:

convert_to_vertical

Controls the Reframe / Convert to Vertical node.
Fields:

add_broll

Controls B-roll generation and sourcing.
Fields:

add_subtitles

Controls subtitle placement and styling.
Fields:
For most subtitle overrides, set style fields inside subtitle_config.speakerStyles[0]. For example, subtitle_config.speakerStyles[0].subtitleY sets the default subtitle Y position, and that value is inherited by subtitles when no more specific speaker style is present.
speakerStyles array entry fields:

style_video

Controls the complete visual treatment from the Style Video node. All styling elements are optional; an empty layers array is a valid no-op.
Top-level fields: Layer fields: Style Video supports multiple title, watermark, and media-overlay layers. It supports at most one subtitle layer and one lower-third layer. Watermark layers require config.url; media overlays require config.mediaUrl. Color grading fields:

add_music

Controls background music.
Fields: Music option fields:

add_watermark

Controls watermark rendering config.
Fields:

apply_branding

Controls the Apply Branding node.
Fields:

add_title_overlay

Controls the Title Overlay node.
Common title_config fields: By default this node generates a title for each clip with AI and ignores text. To use your own fixed title instead, set generateTitle to false and provide text:
The same fixed title is applied to every clip in the run. For different per-clip content, configure AI generation or title variables, or edit each clip after generation with Update Clip.

Title variables

Define as many variables as your title needs in titleVariables. A variable can generate a result, hold a fixed value, or reference current workflow data. Its id is the stable token used by templates; name is the editable display label shown on its colored block in the editor. Existing variables without a source retain generated behavior. titleVariableBindings maps text element IDs to reusable text templates. Use text-primary for a custom title’s main text and for most presets’ primary text. The older __primary__ key is still accepted and is saved as the primary element’s ID. Supporting fields use the preset’s editable element IDs, such as text-author, text-secondary, or text-likes for the tweet designs. Each template can combine fixed copy with multiple tokens, and a token may be repeated or reused across fields. Numbers and booleans render as text, including 0 and false. Unknown, malformed, or unfinished tokens render as empty text. Braces inside a variable’s resolved value remain literal text and are not expanded again. Variables change field contents while preserving typography, placement, animation, and uploaded graphics. titleVariableImageBindings maps a preset’s image slot to exactly one image token, such as { "avatar-image": "{{logo}}" }. You can use a fixed image variable or a current-input image reference such as {{clip.thumbnail}}. Image bindings also accept a fixed HTTP(S) image URL or an empty string to clear the slot. They do not combine multiple tokens or interpolate surrounding text. The slot retains its authored fitting, crop, and animation. Available workflow references: Use text and number keys directly in text templates or generated prompts, for example {{source.title}} or Summarize these points: {{clip.transcript}}. For an image slot, use an image reference. The workflow picker exposes only references available from upstream inputs, not fields from downstream or disconnected nodes. Runtime references are refreshed from the current input. Missing or incompatible references resolve empty; saved sample values cannot stand in for missing input from another run.
Use the inner title_config object as a Style Video title layer’s layers[].config, or pass the wrapper under nodeConfigs.add_title_overlay. At run time, generated variables run independently for each clip, fixed values stay unchanged, and references read the current input. Set generateTitle: false to use generated samples without AI generation; this does not freeze references. A primary variable binding supplies the title instead of the legacy headline prompt. When Use Source Title resolves a source title, that exact title takes precedence for the primary field; supporting variable fields still use their generated values. The workflow editor simulates one generated variable using sample inputs from Preview workflow values; Studio uses the current clip’s context. Preview samples do not override the actual input used by a workflow run. Definitions, text/image bindings, and resolved values are retained with the saved title so Studio can reopen and edit them. Reusable templates keep the sources, prompts, fixed values, and bindings for subsequent runs.

Styled title templates

Set titlePresetId to render one of the built-in styled title templates — the same templates available in the workflow editor’s Text panel — instead of the flat title styling. The same fields work inside the top-level titleConfig object of the trigger endpoint. The AI-generated title fills the template’s primary line, and the template’s design (fonts, colors, backplate, animation) is preserved. Supplying titlePresetId selects that template from a clean preset state for the run. Any palette, presetOverrides, presetTextOverrides, or presetGenerationBlocks stored on the workflow’s previously selected template are cleared first. The API seeds the template’s editor sample text and semantic generation blocks, then applies the fields in your request. This matches selecting a different template in the workflow editor and prevents customizations from the old template leaking into the new one. Available titlePresetId values: The workflow runtime also recognizes these twelve library presets when called directly with title_config.titlePresetId; callers do not need to copy presetGenerationBlocks from the editor. It supplies each preset’s default duration, placement, palette, and semantic generation blocks before applying caller overrides. Speaker Spotlight generates a featured person’s name. Both tweet variants generate a 15–35 word post body. Supporting text and attribution fields remain fixed unless explicitly configured for generation. iOS Text Message generates a 10–25 word message; Reddit Post generates a 6–15 word post title. Both supply a format-specific default prompt, while an explicit caller prompt takes precedence. Their image slot IDs are contact-image and community-image, respectively. iOS palettes are imessage, sms, and dark; Reddit palettes are light, dark, and dim. Optional customizations layered on the chosen template:
  • titlePaletteId — a palette id for templates that define palettes. cyan-block-title and cyan-divider-title: breaking-news, national-news, politics, world-news, local-news, weather, entertainment. tiktok-3d: tiktok, grape-lime, sunset. instagram-wrap: clean, midnight, peach.
  • presetOverrides — an object of style/position tweaks applied on top of the template. Supported keys include fontColor, fontFamily, fontWeight, fontStyle ("italic" / "normal"), textAlign, textTransform, lineHeight, letterSpacing, wrapWidth, maxLines, backgroundColor, backgroundStyle, padding, borderRadius, textShadow, boxShadow, and geometry (xPosition, yPosition, scale, width, height, rotation). Positions are 0–1 fractions of the frame.
  • presetTextOverrides — fixed text for a template’s secondary line(s), keyed by element id (e.g. { "text-secondary": "Episode #4" } for the Daily Vlog subtitle). The primary line uses the generated title or fixed text; a configured variable binding supplies the contents of its bound field.
  • presetOverrides.graphicSources — image URLs keyed by the preset’s image slot: brand-logo for the new branded title designs, or avatar-image for Tweet Card. Set a source to "" to remove it. The source is saved with the title and retains its authored placement, fit, and animation.
Example — generate a tweet-style body while supplying the profile and footer:
Use this config directly with the title node or under nodeConfigs.add_title_overlay for a workflow trigger. For a Style Video title layer, place the inner title_config object in layers[].config. Tweet Card’s palette IDs are light, dim, and dark. For the backgroundless version, select tweet-overlay; it defaults to the white palette and yPosition: 0.22, with blue and warm accent palettes also available. Both versions share the same text and avatar IDs. Author, handle, timestamp/source, and counts are editable display values; generation does not retrieve a real post. Example — a Breaking News headline template, recolored and nudged higher:
When titlePresetId is set, the flat typography/background fields (fontFamily, backgroundColor, etc.) are ignored — adjust the template with presetOverrides instead.

add_lower_thirds

Adds a speaker-name lower-third card when each speaker first talks. Add the Add Lower Thirds node to your workflow in the portal and style it there (preset, colours, position). Then name the people in each video on the trigger call with speaker_names — the names change every run, the styling does not.
speaker_names is positional, ordered by who speaks first. The first entry names the first person heard in the video, the second entry the second, and so on — the same “Speaker 1 / Speaker 2” model used in the studio editor. title is optional; omit it for a name-only card. To leave one speaker unnamed while naming a later one, pass null (or {}) in their position so the remaining names stay aligned:
Cards are timed from the transcript: each appears 1 second after that speaker’s first word and runs for the preset’s duration. A speaker who is never named, or who never speaks, simply gets no card. When two speakers talk at nearly the same moment, their cards play back to back rather than overlapping.
speaker_names is available through the API only — there is no field for it in the workflow builder, because who appears in a video changes with every run.

Overriding the styling

lower_thirds_config overrides the styling set in the builder. It merges, so send only what you want to change and everything else is kept:
Changing titlePresetId resets that preset’s colours and palette to their defaults (a colour chosen for one template does not carry to another), but keeps your position. To change template and colours in one call, send both in the same request.
If you send speaker_names to a workflow that has no Add Lower Thirds node, the request is rejected — add the node in the builder first. Everything else about the run is unchanged.

filler_words

Controls filler word, stutter, and silence cleanup.
Fields:

smart_zoom

Controls Smart Zoom.
Fields:

add_outro

Controls end card and outro music.
Fields:

add_audiogram

Controls audiogram display.
Fields:

remove_watermark

Controls watermark removal.
Fields: Watermark removal finds logos, watermarks, and sponsor badges placed on top of the video. Captions, subtitles, lower-third bars, chat overlays, full-width show banners, and anything physically in the scene are left alone. Parts of the video where the watermark isn’t on screen, such as full-screen B-roll, are left untouched. If removal fails or no watermark is found, the clip passes through unchanged with watermarkRemovalFailed: true.

add_brainrot

Controls Brainrot split-screen style.
Fields:

media_overlay

Controls media overlays.
Fields:

remove_curse_words

Controls curse word handling.
Fields:

Legacy Flat Fields

These flat trigger fields still work and are converted into node configs internally:

Trigger Template

Use node config overrides when triggering a workflow template