Skip to main content

What this workflow does

Given a source video URL and a time range, orchestrates:
  1. Trim — in_point / out_point on the video element
  2. Crop to vertical — crop_left / crop_right center-crop for 16:9 → 9:16 (auto-computed when omitted)
  3. Transcribe — POST /v1/tasks/transcribe with word-level timestamps
  4. Segment — group words into caption lines (sentence breaks or pauses > 0.8s)
  5. Style — optional opening title with difference blend motion; caption lines cycle color → box → glow (the first two paint with the text element’s background_color, which is required for them)
  6. Render — POST /v1/renders at 1080×1920 using the TikTok Captions recipe as the composition template

Example user prompt

Take the section from 00:22:43 to 00:44:56, crop to vertical, add an opening title with Difference blend, then burn in word-timed captions — mix color, box, and glow styles across different fonts.
The agent converts timecodes to seconds (1363 → 2696), follows this workflow, and posts the resulting RenderRequest.

Inputs

Output

Timecode conversion

Convert HH:MM:SS to seconds before starting the workflow:

Vertical crop (16:9 → 9:16)

When crop_left / crop_right are omitted, center-crop a landscape source:
For 16:9 source: crop_left = crop_right ≈ 0.342.

Caption line rules

After transcription, the agent:
  1. Converts each word’s start/end from milliseconds (the transcript’s clock) to seconds by dividing by 1000, then filters words to [start_seconds, end_seconds] and offsets to composition time (0 = clip start)
  2. Groups words into lines — split on . ? ! or a gap > 0.8s between words
  3. Skips words inside opening_title_duration when a title is set
  4. Creates one text element per line, each with its own unique id (cap-0, cap-1, …) — duplicate element ids are a blocking DUPLICATE_ELEMENT_ID error
  5. Sets each line’s time to the first word’s start and duration to last_word.end − time
  6. Cycles word_animation.style: color → box → glow → color … . color and box paint with background_color, so that field is required on those two — omit it and the request 422s (an absent value resolves to opaque black on the renderer, i.e. an invisible highlight). glow does not need it.
Word timestamps in word_animation.words are absolute composition seconds — the same clock as each text element’s time. See Word Animation Examples.

Render composition template

Follow the TikTok Captions recipe for element shapes. Minimal skeleton:
Each additional caption line is another text element with the next unique id (cap-1, cap-2, …) and the next style in the cycle.