Use cases
Translate a finished video
Make a new language version of a finished video with translated narration, subtitles and a new voice.
Goal
Make a new language version of a finished video: translated narration and subtitles with a new voice, over the same pictures.
Before you start
- A finished video in the workspace (a run in state
READY). - A translation of every narrated shot. Silent shots stay silent.
MCP calls, in order
get_production_stateFind the finished run (
READY) of the video to translate.Arguments for get_production_state { "project_id": "<project_id of the finished video>" }get_run_scriptRead that run’s script: each shot’s narration and subtitle, and the
content_hash.Arguments for get_run_script { "project_id": "<project_id of the finished video>", "run_id": "<READY run_id>" }list_voicesPick a voice for the new language.
Arguments for list_voices { "language": "en" }create_localeCreate the new language version as a new project, with one translated narration and subtitle per shot. The original video does not change.
Arguments for create_locale { "project_id": "<project_id of the finished video>", "parent_run_id": "<READY run_id>", "expected_content_hash": "<content_hash from get_run_script>", "name": "<video name> (English)", "language": "en", "voice": "<voice id>", "shots": [ { "shot": 1, "narration": "<translated narration>", "subtitle": "<translated subtitle>" } ], "request_key": "<new UUIDv4>" }agent_preflightOn the new project: check for blockers and read the
create_quotearguments innext_calls.Arguments for agent_preflight { "project_id": "<project_id of the new language version>" }create_quoteQuote the new version. Stop and show the person the total.
Arguments for create_quote { "project_id": "<project_id of the new language version>", "composition_id": "<composition_id from next_calls>", "candidates": 1, "request_key": "<new UUIDv4>" }approve_productionOnly after the person says yesOnly after the person agrees.
Arguments for approve_production { "project_id": "<project_id of the new language version>", "quote_id": "<quote_id>", "expected_content_hash": "<content_hash from the quote>", "request_key": "<new UUIDv4>" }get_run_progressPoll until the new run is
READY.Arguments for get_run_progress { "project_id": "<project_id of the new language version>", "run_id": "<run_id from approve_production>" }prepare_deliveryPrepare the delivery package of the new version.
Arguments for prepare_delivery { "project_id": "<project_id of the new language version>", "run_id": "<run_id from approve_production>", "request_key": "<new UUIDv4>" }issue_deliveryOnly after the person says yesOnly after the person has checked the translated video.
Arguments for issue_delivery { "project_id": "<project_id of the new language version>", "run_id": "<run_id from approve_production>", "confirmed": true, "request_key": "<new UUIDv4>" }
What the person approves
- The translation, shown by the agent before
create_locale. - The quote, before
approve_production. - The translated video, before
issue_delivery.
Expected output
- A new project with the translated video: new narration, new subtitles, the same pictures.
- Ten target languages: Vietnamese, English, Japanese, Korean, Chinese, French, German, Spanish, Thai and Indonesian.
Good to know
- Videos where someone speaks on camera are not supported yet. The server stops with an error, and the agent asks the person what to do.
- Each narrated shot needs exactly one translation and one subtitle, or the server names the missing shot.