Caption Video Tool
caption_videoCaption a whole short video (up to 3 minutes) in a caption_preset and get back a
captioned MP4. OpenClip transcribes it (the spoken language is detected
automatically), times the captions to the words, and renders it with the same
renderer as render_clip. This is Quick Captions for agents: use it for a finished
short video or a UGC clip.
To use a ChatGPT attachment: select it with create_upload's file parameter and wait for
uploaded: true. For other local files, call create_upload and PUT the bytes to
its upload_url first. Then pass that video id here. Do NOT call complete_upload (that starts the clip
pipeline instead). A Quick Captions video from list_videos works too. Videos from
the clip pipeline (submit_video / complete_upload) are captioned per clip with
render_clip. Discover preset keys with list_caption_presets.
Metered like the Quick Captions editor: no credits are used; free accounts get 2 captioned videos per month, paid plans are unlimited. Captioning the same video again (a new preset, a retry) does not count again, but once the free month's 2 are used nothing more renders that month.
Processing is ASYNCHRONOUS:
processing: the video is being transcribed and the render starts on its own. Poll get_video_status while downloading, uploaded, or processing. Stop on pending_credits, failed, or download_failed. On completed, poll get_render_status.rendering: the render is in flight. Poll get_render_status with thisvideountil it reportscompletedand arendered_clipURL.not_dispatched: the renderer is unavailable right now; try again later. Poll every 10-15 seconds for at most 15 minutes, then report the current state. A null rendered_clip URL is normal while rendering; keep polling. After transcription completes, if renders is empty or its entry is not_rendered, call caption_video once more with the same video and preset to finish the original request or surface its exact restriction. Do not repeat this recovery call. If it returns a tool error, read get_render_status once: the queued render may have started meanwhile. Follow rendering or completed within the original deadline; otherwise report that error and stop. Stop on failed, skipped, not_dispatched, or a second empty/not_rendered result. Explain the result and offer a retry. Never re-caption a completed output unless the user requests it. Share only a completed rendered_clip URL.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | The video id (hashid) from create_upload (no complete_upload needed) or list_videos. | |
| caption_preset | Yes | The caption preset key from list_caption_presets (invalid keys are rejected). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | The video id (hashid). Poll get_video_status / get_render_status with it. | |
| status | Yes | `processing`: transcribing, poll get_video_status then get_render_status; `rendering`: poll get_render_status; `not_dispatched`: nothing is in flight, try again later. | |
| viral_moment | Yes | The id (hashid) of the whole-video moment being rendered. Null while the video is still processing. |