Skip to content

MCP tool reference

Connect an account key using the connection guide, then choose a tool for one specific step. The schemas and scopes below are generated from the same registry that serves the MCP client. Each example has been checked against that schema without executing the tool. Open-ended params objects require the handler-specific constraints described alongside the example; structural validation does not prove a successful execution.

Tools marked admin only are absent from ordinary account keys. A spend scope grants technical access to a paid operation; it does not replace agreement on the task and budget. Never automatically retry a paid call after an ambiguous outcome. Read recovery and run a node first.

Discover current node types, model choices and domain constraints.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Find the intended node and supported model operation before constructing a graph.

  • Catalog visibility follows the account; do not assume an unavailable option exists.

Read the studio’s curated guidance for an image or video model.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"medium": {
"type": "string",
"enum": [
"video",
"image"
],
"description": "video — модели, которые делают клип; image — которые рисуют кадр"
},
"model": {
"type": "string",
"description": "id модели из списка этой среды; без него придёт сравнение всей среды"
}
},
"required": [
"medium"
],
"additionalProperties": false
}
{
"medium": "video",
"model": "seedance2"
}

Check the result: Separate current facts, measured observations and missing advice.

  • A missing brief is reported explicitly; do not invent guidance from a model name.

Find applicable skills by node type and target model.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"node_type": {
"type": "string",
"description": "тип ноды из каталога студии — оставит только уместные ей приёмы"
},
"model": {
"type": "string",
"description": "id модели-генератора дальше по цепочке — приёмы под неё встанут первыми"
}
},
"additionalProperties": false
}
{
"node_type": "avg/prompt_scriptwriter"
}

Check the result: Choose IDs whose scope and model fit the authoring node.

  • Returns metadata, not protected instruction bodies.

Read the saved nodes, links, current revision and scene addresses.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
}
},
"additionalProperties": false,
"required": [
"project_id"
]
}
{
"project_id": "<url or id returned by list_projects>"
}

Check the result: Confirm the target project and retain its revision before changes.

  • A saved done status does not establish that a result matches current inputs.
  • The overview does not include every full result text.
  • Studio-owned step instructions can be redacted even when their node or trace row is visible; an ordinary API key does not expose the protected text.

Check whether nodes ran and what each recorded run did.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"limit": {
"type": "integer",
"description": "сколько последних прогонов вернуть (по умолчанию 5, максимум 30). Повторяющаяся строка у одной ноды — сильный признак, что нода себя пропускает"
}
},
"additionalProperties": false,
"required": [
"project_id"
]
}
{
"project_id": "<url or id returned by list_projects>",
"limit": 5
}

Check the result: Compare recorded status, reuse, cost and node IDs with the current graph.

  • An empty provenance trace is not equivalent to an empty run history.

Inspect the recorded inputs and origins of a generation.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"node_id": {
"type": "string",
"description": "id ноды из read_project_graph"
},
"artifact_id": {
"type": "string",
"description": "id материала; так ищется причина результата, который уже был готов и заново не считался (у самой ноды записи не будет)"
},
"limit": {
"type": "integer",
"description": "сколько последних событий ноды вернуть (по умолчанию 5, максимум 100). Больше — только если нужна история правок, на «почему» отвечает последнее"
}
},
"additionalProperties": false,
"required": [
"project_id"
]
}
{
"project_id": "<url or id returned by list_projects>",
"node_id": "<node id returned by read_project_graph>",
"limit": 1
}

Check the result: Check the specific generation and any explicit omission notes.

  • Some operations, including montage, assembly, export and isolation, do not record this provenance.
  • Use read_run_history to answer whether a node executed.
  • Studio-owned step instructions can be redacted even when their node or trace row is visible; an ordinary API key does not expose the protected text.

Follow a scene through its carriers, origin, rewrites and deliveries.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"scene_id": {
"type": "string",
"description": "адрес сцены из сводки канваса: у ноды он стоит рядом с тем, что в неё пришло (scene_in) и что из неё вышло (scene_out)"
}
},
"required": [
"project_id",
"scene_id"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"scene_id": "<scene_out address returned by read_project_graph>"
}

Check the result: Compare original text with rewrites and actual delivery records.

  • A new script run can create new scene addresses.
  • A truncated or omitted text flag means the full text must be inspected on the canvas.
  • Studio-owned step instructions can be redacted even when their node or trace row is visible; an ordinary API key does not expose the protected text.

Discover reusable Elements available to this account.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Choose the intended returned ID before applying it to an Element node.

  • A library Element is applied to a node that accepts library Elements, then connected downstream.

Read the full description of one discovered Element and its views: each view’s kind (sheet, figure, face or object) and, over MCP, a signed url that opens the picture for 15 minutes.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"element_id": {
"type": "string",
"description": "id элемента из списка элементов"
}
},
"required": [
"element_id"
],
"additionalProperties": false
}
{
"element_id": "<element id returned by list_my_elements>"
}

Check the result: Confirm identity, role and reference material before using it.

  • The ID must belong to an accessible Element; do not guess IDs.
  • A view that cannot be signed comes without a url; request the Element again when a link expires.

Find saved personal prompts for reuse.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Review the intended prompt and insert its complete text into the appropriate authoring field.

  • A saved prompt is not a generated result or a model adapter.

Find saved graphic design systems.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Choose a design for the Design system node and review the eventual Decoration output.

  • These rules govern overlays, not the underlying character or video motion.

Discover ready-made and owned generator configurations.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Check the generator’s kind and destination node before applying its ID.

  • A generator prepares settings; applying it does not generate media.
  • Recipe attachments and personal generators are account-specific.

Check current balance and whether billing is active.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Read billing_active alongside balance_usd before interpreting a zero balance.

  • A balance check is not a quote for a particular generation.

Review spending over a selected period.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "за сколько последних дней считать; по умолчанию 30, максимум 365"
}
},
"additionalProperties": false
}
{
"days": 7
}

Check the result: Compare totals by operation, model and project when investigating a charge.

  • History explains recorded spending; it does not cancel submitted work.

Discover the owning account’s projects and usable project links.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Choose the intended returned project; stop on an empty list or resolve an ambiguous choice.

  • A project URL does not grant access to another account.

Find generated media and uploaded documents.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "только материалы этого проекта"
},
"kind": {
"type": "string",
"description": "вид материала: image, video, audio, document"
},
"limit": {
"type": "integer",
"description": "сколько вернуть; по умолчанию 20, максимум 100"
}
},
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"kind": "video",
"limit": 20
}

Check the result: Select the intended material using its kind, project and creation context.

  • The list is bounded; absence from the first page is not proof that a material never existed.
  • Use get_artifact when an external download link is needed.

Get one material and a temporary download link.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"artifact_id": {
"type": "string",
"description": "id из list_artifacts"
}
},
"required": [
"artifact_id"
],
"additionalProperties": false
}
{
"artifact_id": "<artifact id returned by list_artifacts>"
}

Check the result: Use download_url before expires_at, or follow download_note if a link cannot be issued.

  • A link expires after 15 minutes; request a fresh one instead of repeating generation.
  • A video from your own V2 decoration also returns design_profile, the saved series style, and design_profile_fingerprint. Pass design_profile unchanged as params.series_profile to the next decorate_video, together with params.renderer: ‘hyperframes’ and params.decoration_version: 2, to keep the series in one style; without them the style is not applied and the response says so in series_profile_warning. Other materials and other accounts’ videos have no such field.

Find asynchronous generation jobs and their status.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "только задачи этого проекта"
}
},
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>"
}

Check the result: Locate the job for the intended operation; retain its job_id. A done job names its material in artifact_id.

  • Jobs and graph runs have different identifiers and status calls.
  • The list carries no download links; get_job issues one per finished job.

Check one asynchronous job after submission.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "id задачи, его возвращает запуск генерации и list_jobs"
}
},
"required": [
"job_id"
],
"additionalProperties": false
}
{
"job_id": "<job identifier returned by generation>"
}

Check the result: Wait for a terminal status. A done job returns artifact_id and download_url with expires_at, or download_note if a link cannot be issued.

  • Accepted or running is not a finished file.
  • The download link expires after 15 minutes; call get_job or get_artifact again for a fresh one instead of repeating generation.

Read the lore wizard standard of a workspace and which required steps are still empty.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "id пространства из list_workspaces; у Вини можно не передавать — тогда пространство проекта хода; по MCP передавай всегда"
}
},
"additionalProperties": false
}
{
"workspace_id": "<workspace id returned by list_workspaces>"
}

Check the result: Ask the person the question of next, one step at a time, and keep the answers word for word for write_lore.

  • Returns titles of non-wizard documents in other_docs, not their text; read a text with get_workspace_lore.
  • Read-only; it writes nothing.

Create a new empty project in an intended workspace.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "как назвать проект — человек увидит это имя в списке"
},
"workspace_id": {
"type": "string",
"description": "в какое пространство положить — id из list_workspaces; не передан — пространство по умолчанию"
}
},
"required": [
"name"
],
"additionalProperties": false
}
{
"name": "Paper boat practice"
}

Check the result: Retain project_id, returned URL and initial revision; read back the empty graph.

  • This creates an actual project; an empty discovery result should not silently trigger it.

Apply explicit graph edits to a saved project.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"ops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"op": {
"type": "string",
"enum": [
"add_node",
"set_field",
"connect",
"apply_library_element",
"apply_skill",
"rename",
"edit_plan",
"edit_timeline",
"apply_generator",
"pin_file"
]
},
"ref": {
"type": "string",
"description": "add_node: временное имя для ссылок из connect"
},
"type": {
"type": "string",
"description": "add_node: тип ноды — ровно как он назван в каталоге студии (describe_studio)"
},
"pos": {
"type": "array",
"items": {
"type": "number"
},
"description": "add_node: [x, y]"
},
"fields": {
"type": "object",
"description": "add_node: стартовые значения параметров"
},
"node": {
"type": "string",
"description": "set_field/apply_library_element/rename/pin_file: временное имя ноды из этого же предложения или id существующей"
},
"title": {
"type": "string",
"description": "rename: новый заголовок карточки (непустой, до 120 символов)"
},
"key": {
"type": "string"
},
"value": {
"type": [
"string",
"number",
"boolean",
"array"
],
"items": {
"type": "string"
},
"description": "set_field: новое значение параметра в родном типе (число — числом, флаг — булевым, список — списком целиком, а не по одному значению)"
},
"from": {
"type": "string"
},
"from_port": {
"type": "string"
},
"to": {
"type": "string"
},
"to_port": {
"type": "string"
},
"element_id": {
"type": "string"
},
"generator_id": {
"type": "string",
"description": "apply_generator: id решения из list_generators либо адрес вложения рецепта (att:…), как его прислал человек"
},
"skill_id": {
"type": "string",
"description": "apply_skill: id приёма из списка приёмов"
},
"artifact_id": {
"type": "string",
"description": "pin_file: id своего материала из списка материалов (list_artifacts)"
},
"url": {
"type": "string",
"description": "pin_file: адрес файла из своих материалов либо ссылка на ролик или пост TikTok, Instagram, YouTube — такой файл студия сначала приносит в материалы"
},
"quality": {
"type": "string",
"description": "pin_file со ссылкой на YouTube: качество ролика, например «720p»"
},
"remove": {
"type": "boolean",
"description": "apply_skill: true — снять приём с ноды, а не поставить"
},
"kind": {
"type": "string",
"enum": [
"plate",
"title",
"outro"
],
"description": "edit_plan: вид вставки — плашка, титр или финальная карта (аутро)"
},
"action": {
"type": "string",
"enum": [
"add",
"set",
"remove"
],
"description": "edit_plan: добавить новую, изменить существующую или убрать"
},
"index": {
"type": "integer",
"description": "edit_plan (set/remove): номер вставки из decor_plan"
},
"at": {
"type": "number",
"description": "edit_plan: секунда появления"
},
"dur": {
"type": "number",
"description": "edit_plan: длительность показа в секундах (1..6)"
},
"text": {
"type": "string",
"description": "edit_plan: текст вставки — плашка до 4 слов, титр до 5"
},
"sub": {
"type": "string",
"description": "edit_plan (аутро): призыв-пилюля на финальной карте"
},
"steps": {
"type": "array",
"description": "edit_timeline: шаги правки ленты Монтажа, до 40 в одной правке; клип в шаге называй ИМЕНЕМ входа Монтажа («видео 2») — так, как порт назван в связях сводки канваса, не номером по счёту: при отключённом входе номер на карточке и имя входа расходятся",
"items": {
"type": "object",
"properties": {
"step": {
"type": "string",
"enum": [
"move",
"edges",
"reset_edges",
"mute",
"song",
"voice_at"
],
"description": "move — поставить клип на позицию to (с 1); edges — края куска клипа in/out в секундах ИСХОДНОГО клипа (клип уже снят); reset_edges — вернуть клипу целиком; mute — заглушить (on:true) или вернуть звук (on:false) клипа; song — песня: at (с какой секунды ролика), from (с какой секунды песни), until (до какой секунды песни — обрезка конца, 0 снимает её), fade_in/fade_out (затухания до 5 с), volume (0..1); если песня нарезана на куски (сводка «песня N кусками»), шаг правит первый кусок, остальные остаются; voice_at — голос целиком с секунды at ролика"
},
"clip": {
"type": "string",
"description": "имя входа Монтажа, например «видео 2» (move, edges, reset_edges, mute)"
},
"to": {
"type": "integer",
"description": "move: позиция клипа в ролике, с 1"
},
"in": {
"type": "number",
"description": "edges: начало куска, секунды клипа"
},
"out": {
"type": "number",
"description": "edges: конец куска, секунды клипа (больше in)"
},
"on": {
"type": "boolean",
"description": "mute: true — заглушить клип, false — вернуть звук"
},
"at": {
"type": "number",
"description": "song: с какой секунды ролика начинается песня; voice_at: с какой секунды ролика начинается голос"
},
"from": {
"type": "number",
"description": "song: с какой секунды песни начинать"
},
"until": {
"type": "number",
"description": "song: до какой секунды песни играть — обрезка конца (больше from); 0 — снова до конца песни"
},
"fade_in": {
"type": "number",
"description": "song: затухание на входе, секунд (0..5)"
},
"fade_out": {
"type": "number",
"description": "song: затухание на конце, секунд (0..5)"
},
"volume": {
"type": "number",
"description": "song: громкость песни 0..1 (не действует, если звук клипов выключен и голоса нет)"
}
},
"required": [
"step"
]
}
}
},
"required": [
"op"
]
}
},
"based_on_revision": {
"type": "integer",
"description": "версия проекта, которую ты видел в read_project_graph. Если проект с тех пор изменили, правка будет отклонена, а не наложена вслепую. Не знаешь — не передавай."
}
},
"required": [
"project_id",
"ops"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"based_on_revision": 0,
"ops": [
{
"op": "add_node",
"ref": "idea",
"type": "avg/text_input"
},
{
"op": "set_field",
"node": "idea",
"key": "text",
"value": "A blue paper boat crosses a quiet pond."
}
]
}

Check the result: Replace the example revision with the current one, then inspect returned refs and the saved graph.

  • Operations change the real graph but do not generate content.
  • Use current node IDs or refs from this batch; revisions and ports are validated.
  • Studio-owned step instructions can refuse set_field and apply_generator even in a writable project.

Build image/video branches from written Prompt Scriptwriter scenes.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"node_id": {
"type": "string",
"description": "id ноды «Промпт Сценарист» с написанными сценами (read_project_graph)"
},
"only": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"description": "номера сцен, которые развернуть; по умолчанию все неразвёрнутые. Разворачивай по возрастанию номеров: «Монтаж» клеит ролик в порядке своих входов, и сцена, развёрнутая позже соседки с большим номером, встанет в ролике после неё — ответ скажет об этом в warnings"
},
"based_on_revision": {
"type": "integer",
"description": "версия проекта, которую ты видел в read_project_graph; если проект с тех пор изменили, разворот будет отклонён, а не наложен вслепую. Не знаешь — не передавай."
}
},
"required": [
"project_id",
"node_id"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"node_id": "<node id returned by read_project_graph>"
}

Check the result: Inspect created nodes, skipped scenes, warnings and Montage’s input order.

  • Written scenes must already exist; expansion is free but subsequent generation can charge.
  • Expand selected scenes in ascending order and wait for an active run first.

Discover the account’s project spaces.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Select a returned workspace, including the declared default when appropriate.

  • Workspace IDs and project IDs are different.

Create an account-owned space for related projects.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "как назвать пространство — человек увидит это имя в студии"
}
},
"required": [
"name"
],
"additionalProperties": false
}
{
"name": "Paper boat practice"
}

Check the result: Confirm the returned workspace and choose it explicitly for later project creation.

  • Creating a workspace does not move existing projects into it.

Move a project into an existing workspace.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"workspace_id": {
"type": "string",
"description": "куда перенести — id из list_workspaces"
}
},
"required": [
"project_id",
"workspace_id"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"workspace_id": "<workspace id returned by list_workspaces>"
}

Check the result: Read the project again and check the target workspace and inherited lore.

  • Moving can change the workspace lore read by the project’s authoring nodes.

Read workspace lore and its active documents.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "id из list_workspaces"
},
"doc_id": {
"type": "string",
"description": "id документа из списка — тогда вернётся и его текст"
}
},
"required": [
"workspace_id"
],
"additionalProperties": false
}
{
"workspace_id": "<workspace id returned by list_workspaces>"
}

Check the result: Inspect the complete selected document before changing or disabling it.

  • Workspace lore is shared by projects in that workspace; project-local lore is separate.

Create or update one workspace lore document.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "id из list_workspaces"
},
"title": {
"type": "string",
"description": "название документа, 1–200 знаков — человек видит его в окне лора"
},
"text": {
"type": "string",
"description": "полный текст документа (UTF-8, до 2 МБ); не передан при doc_id — текст прежний"
},
"doc_id": {
"type": "string",
"description": "id документа из get_workspace_lore — заменить его; не передан — завести новый"
},
"on": {
"type": "boolean",
"description": "включён ли документ в запросы; по умолчанию у нового — да, у существующего — как было"
}
},
"required": [
"workspace_id",
"title"
],
"additionalProperties": false
}
{
"workspace_id": "<workspace id returned by list_workspaces>",
"title": "Practice setting",
"text": "The pond is quiet. The recurring prop is a blue paper boat.",
"on": true
}

Check the result: Read the returned document with get_workspace_lore and confirm its complete text and active state.

  • Supply the existing doc_id to update it; omission creates a new document.
  • Disabling a document is not deleting it.

Write the person’s answers by the lore wizard standard as the World, Format and Episode log documents of a workspace.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "id из list_workspaces"
},
"answers": {
"type": "object",
"description": "ответы человека по шагам стандарта (lore_standard), дословно",
"properties": {
"world": {
"type": "object",
"description": "документ «Мир», ровно один",
"properties": {
"premise": {
"type": "string",
"description": "Суть мира (обязательно) — О каком мире все твои ролики — в двух-трёх фразах?"
},
"audience": {
"type": "string",
"description": "Зритель (обязательно) — Кто смотрит твои ролики и где?"
},
"cast": {
"type": "string",
"description": "Герои и кто кому кто (обязательно) — Кто живёт в этом мире и кем они приходятся друг другу?"
},
"places": {
"type": "string",
"description": "Места — Где происходят события?"
},
"laws": {
"type": "string",
"description": "Законы мира и запреты (обязательно) — Что в этом мире возможно, а что никогда не случается?"
},
"tone": {
"type": "string",
"description": "Тон и язык (обязательно) — Каким голосом говорит этот мир и на каком языке?"
},
"unplaced": {
"type": "string",
"description": "Не разложено: строки, которые не легли ни в один шаг, — едут в «Мир» отдельным разделом"
}
},
"additionalProperties": false
},
"formats": {
"type": "array",
"description": "документы «Формат: ‹вид›», по одному на вид ролика; может быть пустым",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"story",
"music_video",
"product_ad",
"explainer",
"other"
],
"description": "Вид ролика (обязательно): story — история (серия, скетч, короткий фильм); music_video — клип под песню; product_ad — реклама продукта; explainer — объяснялка или обучающий ролик; other — другое"
},
"kind_other": {
"type": "string",
"description": "Название вида (обязательно при kind: other) — Как ты называешь этот вид роликов?"
},
"length": {
"type": "string",
"description": "Длина и число сцен — Сколько длится один ролик и из скольких сцен он состоит?"
},
"structure": {
"type": "string",
"description": "Как устроен выпуск — Как обычно развивается один ролик от начала до конца?"
},
"devices": {
"type": "string",
"description": "Обязательные приёмы и чего не делать — Что обязательно есть в каждом ролике, а чего в нём быть не должно?"
},
"production": {
"type": "string",
"description": "Производство: музыка, надписи, кто говорит — Какая музыка, нужны ли надписи и кто говорит в кадре?"
},
"ideas": {
"type": "string",
"description": "Идеи будущих выпусков — О чём могли бы быть следующие ролики?"
}
},
"additionalProperties": false
}
},
"journal": {
"type": "object",
"description": "документ «Журнал выпусков», необязательный",
"properties": {
"entries": {
"type": "string",
"description": "Выпуски — Какие ролики уже вышли?"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"source_doc_id": {
"type": "string",
"description": "id документа общего лора, из которого разложены ответы, — проверить полноту и выключить его"
}
},
"required": [
"workspace_id",
"answers"
],
"additionalProperties": false
}
{
"workspace_id": "<workspace id returned by list_workspaces>",
"answers": {
"world": {
"premise": "A small seaside town where cats run the post office.",
"audience": "Parents aged 30-45 watching on the phone in the evening.",
"cast": "Sonya is the postwoman; Boris is her brother.",
"laws": "Cats only talk to each other.",
"tone": "Warm irony, lines in English."
},
"formats": [
{
"kind": "story",
"length": "About a minute, six scenes."
}
]
}
}

Check the result: Call lore_standard again and confirm gaps is empty and filled matches the answers.

  • An empty required step refuses with that step’s question and writes nothing.
  • With source_doc_id every line of the source must appear in the answers; lost lines refuse with the list and nothing is written.
  • The source document is switched off, not deleted; other documents stay as they were.
  • The answers are the full set: start from filled of lore_standard and change what is needed; a wizard document missing from the answers (a format, the episode log) is switched off, not deleted.

Store a small owned file in the material library.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"data_url": {
"type": "string",
"description": "data:<MIME>;base64,<содержимое файла в base64>"
},
"filename": {
"type": "string",
"description": "исходное имя файла, например «ТЗ.pdf»; особенно важно для документов и неизвестных форматов"
},
"kind": {
"type": "string",
"enum": [
"image",
"video",
"audio",
"document"
],
"description": "необязательно: вид файла; должен совпадать с MIME-типом"
},
"project_id": {
"type": "string",
"description": "необязательно: id своего проекта; без него файл попадёт в общую библиотеку аккаунта"
}
},
"required": [
"data_url"
],
"additionalProperties": false
}
{
"data_url": "data:text/plain;base64,UHJhY3RpY2UgYnJpZWYu",
"filename": "practice-brief.txt",
"kind": "document"
}

Check the result: Confirm returned material metadata and retrieve it when needed.

  • Uploading a document stores it; it does not extract text or make it an image reference.
  • Use chunked upload for files above the direct-upload limit.

Begin a chunked upload for a larger file.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"size": {
"type": "integer",
"minimum": 0,
"description": "размер исходного файла в байтах до кодирования base64"
},
"mime_type": {
"type": "string",
"description": "MIME-тип файла, например application/pdf или text/plain"
},
"filename": {
"type": "string",
"description": "исходное имя файла, например «ТЗ.pdf»; особенно важно для документов и неизвестных форматов"
},
"kind": {
"type": "string",
"enum": [
"image",
"video",
"audio",
"document"
],
"description": "необязательно: вид файла; должен совпадать с MIME-типом"
},
"project_id": {
"type": "string",
"description": "необязательно: id своего проекта; без него файл попадёт в общую библиотеку аккаунта"
}
},
"required": [
"size",
"mime_type"
],
"additionalProperties": false
}
{
"size": 15,
"mime_type": "text/plain",
"filename": "practice-brief.txt",
"kind": "document"
}

Check the result: Retain the returned upload_id and chunk constraints.

  • The declared size must match the complete file; no material exists until finishing succeeds.
  • A chunked upload accepts up to 2 GiB of original bytes and stores the file as sent, without re-encoding; upload_artifact takes a whole file only up to 24 MiB.

Send one numbered chunk of an active upload.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"description": "upload_id, полученный из start_upload"
},
"index": {
"type": "integer",
"minimum": 0,
"description": "порядковый номер куска, начиная с 0"
},
"data": {
"type": "string",
"description": "исходные байты куска в base64, без data: префикса"
}
},
"required": [
"upload_id",
"index",
"data"
],
"additionalProperties": false
}
{
"upload_id": "<upload_id returned by start_upload>",
"index": 0,
"data": "UHJhY3RpY2UgYnJpZWYu"
}

Check the result: Confirm acceptance before sending the next index or finishing.

  • data is base64 for the chunk; keep the original byte order.

Validate and finish a previously uploaded file.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"description": "upload_id, полученный из start_upload"
}
},
"required": [
"upload_id"
],
"additionalProperties": false
}
{
"upload_id": "<upload_id returned by start_upload>"
}

Check the result: Confirm the returned artifact_id and metadata, then pin it if it belongs in the graph.

  • Missing chunks or a mismatched complete size must be corrected; finishing does not invent missing bytes.

Discard an unfinished chunked upload.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"description": "upload_id, полученный из start_upload"
}
},
"required": [
"upload_id"
],
"additionalProperties": false
}
{
"upload_id": "<upload_id returned by start_upload>"
}

Check the result: Confirm cancellation of this temporary upload session.

  • This does not delete an already finished library material.

Run a selected node and the upstream work it needs.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"node_id": {
"type": "string",
"description": "id ноды из read_project_graph (или refs из apply_graph_ops). Прогонится она и всё, что выше неё и ещё не свежее."
},
"mode": {
"type": "string",
"enum": [
"up_to",
"regen"
],
"description": "up_to (по умолчанию) — как ▶ «до этой ноды»: свежее берётся из кэша за $0. regen — как ↻ «Перегенерировать»: ЭТА нода заново и платно, всё выше — из кэша."
},
"max_cost_usd": {
"type": "number",
"minimum": 0,
"description": "потолок траты на этот прогон, $. Обязателен, если смета больше нуля; смета выше потолка — отказ до единого запроса. Узнать смету: price_quote."
},
"accept_warnings": {
"type": "boolean",
"description": "согласие на предупреждения плана (price_quote отдаёт их в warnings): например, перезапуск сотрёт правки сцен, сделанные человеком в окне Режиссёра. Без true при непустых warnings прогон не стартует (need_accept_warnings), ничего не списывается."
},
"wait_s": {
"type": "integer",
"minimum": 0,
"maximum": 40,
"description": "сколько секунд подождать окончания внутри вызова (0–40, по умолчанию 20). Не дождался — прогон идёт, смотри get_run."
}
},
"required": [
"project_id",
"node_id"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"node_id": "<node id returned by read_project_graph>",
"mode": "up_to",
"max_cost_usd": 0,
"wait_s": 20
}

Check the result: Replace the zero ceiling only with an explicitly accepted current quote, then follow get_run and read back the result.

  • Zero is a useful refusal boundary for a paid plan, not a promise that this node costs nothing.
  • Graph support is per node; one owner can have one active run.

Wait for and inspect a graph run’s result.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"run_id": {
"type": "string",
"description": "run_id из run_node"
},
"wait_s": {
"type": "integer",
"minimum": 0,
"maximum": 40,
"description": "подождать терминального статуса не дольше, чем столько секунд (0–40, по умолчанию 0)"
}
},
"required": [
"project_id",
"run_id"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"run_id": "<run_id returned by run_node>",
"wait_s": 20
}

Check the result: Read the terminal status, saved revision, node results, cost and reported warnings.

  • done, error, stopped, interrupted and not_saved are distinct outcomes.
  • A failed or unknown critic report is not a successful content review.

Stop a graph run from starting further requests.

Setting Value
Scope spend
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"run_id": {
"type": "string",
"description": "run_id из run_node"
}
},
"required": [
"project_id",
"run_id"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"run_id": "<run_id returned by run_node>"
}

Check the result: Follow get_run to the final state and check outstanding jobs and charges.

  • The call itself is free but requires spend permission.
  • Already submitted work can finish and be charged.

Estimate a specific generation or graph run without performing it.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"tool": {
"type": "string",
"description": "имя инструмента, который собираешься запустить: generate_video, upscale_image, …",
"enum": [
"generate_text",
"generate_image",
"generate_video",
"generate_music",
"generate_voice",
"clone_voice",
"isolate_audio",
"dub_video",
"lipsync_video",
"upscale_image",
"write_script",
"write_scene_prompts",
"rewrite_scene",
"direct_scene",
"make_subtitles",
"normalize_subtitles",
"decorate_video",
"analyze_video",
"assemble_video",
"edit_video",
"extract_audio",
"import_clip",
"inspect_import",
"run_node"
]
},
"params": {
"type": "object",
"description": "ровно те же params, с которыми будешь запускать: от них и зависит цена. Для run_node — {node_id, mode}: смета прогона ноды со всем, что выше неё и не свежее.",
"additionalProperties": true
}
},
"required": [
"project_id",
"tool",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"tool": "run_node",
"params": {
"node_id": "<node id returned by read_project_graph>",
"mode": "up_to"
}
}

Check the result: Inspect estimated cost, planned nodes, warnings and whether the estimate is a ceiling.

  • The quote is tied to the current inputs; quote again after changes.
  • A quote does not start a run.

Generate text for a supplied instruction.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"prompt": "Write three short titles for a film about a blue paper boat."
}
}

Check the result: Read the complete returned text and any artifact identifier.

  • Paid when not cached; this does not automatically build a graph.

Generate an image from explicit text and optional supported references.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"prompt": "One blue paper boat on a quiet pond at dawn.",
"aspect": "16:9"
}
}

Check the result: Inspect the returned image before using it as a video frame.

  • Use a model from discovery; refs must be applicable to it.
  • A new image is not guaranteed to preserve every detail.

Submit a music track from a brief.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"prompt": "Gentle instrumental background with soft piano and no vocals.",
"seconds": 30
}
}

Check the result: Follow the job, then listen to the whole track.

  • Choose a currently offered music model and valid duration; lyrics and vocal support depend on that model.

Synthesize speech using an existing voice.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"voice_id": "<selected voice id>",
"text": "The little boat finds its way home."
}
}

Check the result: Listen for full wording and pronunciation; retain the audio material.

  • Selecting a voice in the browser or cloning one provides the voice_id.
  • This returns audio, not a lip-synced video.

Create a reusable voice from an owned recording.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"sample_url": "<owned material url returned by upload or generation>",
"name": "Practice narrator"
}
}

Check the result: Listen to and confirm the resulting voice before using it for a full script.

  • Use a recording you are entitled to use; source must be an owned uploaded file.
  • The result is a voice identifier, not spoken script audio.

Extract cleaner speech and, when available, a residual background track.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"source_url": "<owned material url returned by upload or generation>"
}
}

Check the result: Listen separately to voice_url and any bg_url.

  • The background is best-effort; do not promise clean music/SFX separation.
  • Source must be an owned studio audio/video file.

Translate and revoice an existing recording.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"source_url": "<owned material url returned by upload or generation>",
"target_lang": "en"
}
}

Check the result: Follow the dubbing job and review the translated audio.

  • The output is audio even for video input; matching visible lips is separate.

Upscale an owned image with controlled creative reconstruction.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"image_url": "<owned material url returned by upload or generation>",
"factor": 2,
"creativity": 0.2
}
}

Check the result: Compare detail, faces and lettering at full size.

  • Quote using the actual source dimensions; detail changes are possible.

Use the retained structured-script operation.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"system_key": "scriptwriter",
"scene_count": 1,
"sys_ctx": {
"theme": "A blue paper boat crosses a quiet pond.",
"n": 1,
"maxSec": 5,
"lang": "en",
"souls": []
}
}
}

Check the result: Inspect all returned scene fields before passing them to another operation.

  • This is a retained operation associated with the legacy Scriptwriter node.
  • For new graph workflows prefer Prompt Scriptwriter and run_node; do not create a legacy node.

Write scenes from a brief using the current prompt-writing operation.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"system_key": "prompt_scriptwriter",
"prompt": "Write one five-second scene without dialogue: a blue paper boat crosses a quiet pond."
}
}

Check the result: Read all returned prompts, scene markings, warnings and critic outcome.

  • Writing does not generate images or clips.
  • Use run_node when results must follow the graph’s Elements, lore and saved scene outputs.

Rewrite one supplied scene without regenerating its neighbours.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"scene": "A blue paper boat crosses a quiet pond.",
"brief": "Make the action fit five seconds; keep the camera fixed.",
"seq": 1,
"total": 1,
"duration": 5
}
}

Check the result: Compare the returned scene against the original and requested change.

  • A low-level reply alone does not replace a Prompt Scriptwriter scene output in the graph.

Apply a staging direction to supplied scene text.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"scene_text": "A blue paper boat crosses a quiet pond.",
"prompt": "Keep the camera locked throughout.",
"tags": [
"static_lock"
]
}
}

Check the result: Review the revised text and any technique warnings.

  • The tool remains available, but the standalone Director node is legacy.
  • Technique instructions do not guarantee visual compliance.

Recognize speech in a supplied video.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"url": "<owned material url returned by upload or generation>",
"language": "en"
}
}

Check the result: Review transcript, segment timings, SRT and VTT.

  • No spoken soundtrack means no words to transcribe; this does not burn captions into the video.

Improve supplied subtitle text while preserving the segment contract.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"segments": [
{
"start": 0,
"end": 2,
"text": "the little boat finds its way home"
}
],
"context": "A narrator describes a paper boat."
}
}

Check the result: Check every returned segment’s wording and timing before use.

  • This is an additional text operation; do not silently replace an approved transcript.

Generate and render a graphic overlay treatment for a supplied video.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"url": "<owned material url returned by upload or generation>",
"context": "A short film about a blue paper boat.",
"plates": false,
"titles": false,
"burn_subtitles": false,
"outro": "off"
}
}

Check the result: Follow the returned job_id with get_job; when it is done, download the video from its download_url and watch it.

  • The call answers within seconds with job_id and status running; analysis, composition and rendering continue as a job. The finished job in get_job carries artifact_id and a short-lived download_url.
  • Repeating the call with the same params while that job is running returns the same job_id with joined: true and reserves no money again. A call after the job has finished is a new, separately charged decoration.
  • Supply valid VTT/SRT if captions are wanted; this call does not automatically transcribe speech.
  • Optional params.caption_look: tiktok or card (omitted or unknown means card).
  • To keep a series style, pass the previous video’s design_profile from get_artifact as params.series_profile with params.renderer: ‘hyperframes’ and params.decoration_version: 2; without both the style is not kept, and price_quote and the launch return series_profile_warning. The style survives a lost response because the finished video stores it.
  • This route is separate from the browser-rendered Decoration node.

Submit an explicit video generation.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"model": "seedance2",
"mode": "from_text",
"prompt": "One blue paper boat crosses a quiet pond. Locked camera.",
"duration": 5
}
}

Check the result: Follow the returned job identifier; review the complete clip and retrieve its material.

  • Confirm this mode and duration in the current catalog and quote first.
  • This lower-level call does not discover upstream graph inputs.

Match a supplied speech track to a speaker in an existing clip.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"video_url": "<owned material url returned by upload or generation>",
"audio_url": "<owned audio url>",
"sync_mode": "cut_off"
}
}

Check the result: Follow the job and inspect the entire video with sound.

  • Both files are required; the selected sync mode controls mismatched lengths.

Analyze a reference clip before selecting what to reuse.

Setting Value
Scope spend
Cost class paid
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"video_url": "<owned material url returned by upload or generation>",
"mode": "style"
}
}

Check the result: Read the breakdown, frame style, motion style, plans and notes.

  • mode style is the quick detail level; story requests the detailed analysis with sound.
  • Creative reuse choices belong to Prompt for the model; analysis can charge measured work.

Join explicit clips in the given order.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"clips": [
"<owned material url returned by upload or generation>",
"<second owned clip url>"
]
}
}

Check the result: Watch the whole returned video and confirm clip order and sound.

  • No model generation charge; this is not the same as running a Montage node through run_node.
  • Optional params.plans is one {start, seconds} or null per clip, in clip order: each planned clip is trimmed to its song timecode and the reply lists trims, short clips, timecode breaks and a song/video length mismatch (music); an unplanned clip goes in whole and a clip is never stretched.
  • A returned file URL may need node attachment or an available material record before external retrieval.

Trim a clip through the retained server editing route.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"url": "<owned material url returned by upload or generation>",
"trim_start": 0,
"trim_end": 3
}
}

Check the result: Check the returned duration and cut points.

  • This is a legacy server route; the current Clip trim node renders in the browser.
  • Do not treat its parameters as the complete browser editor contract.

Extract a clip’s audio track, or pass through recognized audio.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"url": "<owned material url returned by upload or generation>"
}
}

Check the result: Listen to the returned audio and inspect whether extraction occurred.

  • A silent video cannot yield a soundtrack; this does not isolate speech.

Import a supported public media link into owned studio materials.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"url": "<supported media link supplied by the user>"
}
}

Check the result: Check all returned items and pin the intended file to a media-source node.

  • For YouTube, call inspect_import first and pass the selected quality.
  • The example placeholder must be replaced with a supported source, not an arbitrary file URL.

Inspect available YouTube import quality choices.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"params": {
"type": "object",
"description": "что и чем делать: модель, режим, длительность, формат, тексты и ссылки на материалы. Какие поля есть у выбранной модели — скажет describe_studio.",
"additionalProperties": true
},
"node_id": {
"type": "string",
"description": "на какую ноду холста положить результат — чтобы человек увидел его в проекте, а не только в списке материалов. Адреса нод даёт read_project_graph, а также apply_graph_ops в ответе. Не указан — результат останется в материалах."
}
},
"required": [
"project_id",
"params"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"params": {
"url": "<YouTube link supplied by the user>"
}
}

Check the result: Let the user choose a returned quality before import_clip.

  • Inspection does not download the video; this quality-choice operation is for YouTube.

List the key owner’s connected social accounts before preparing a post.

Setting Value
Scope read
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {},
"additionalProperties": false
}
{}

Check the result: Pick the account by platform and nickname and confirm its state is connected before naming it in put_publish_draft.

  • Returns id, platform, nickname, username and state only; tokens, scopes and expiry are never exposed.
  • Connecting or reconnecting an account happens in the studio account screen, not through MCP.

Prepare a post (caption with hashtags, cover frame, account) for a person to publish.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required yes
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "проект студии: ссылка на него (поле url из create_project, list_projects, read_project_graph — целиком, путём /studio/… или только хвостом из 12 символов) либо id проекта; получить список: list_projects"
},
"platform": {
"type": "string",
"enum": [
"tiktok",
"youtube"
],
"description": "куда публикуем"
},
"caption": {
"type": "string",
"description": "текст поста вместе с хэштегами, до 2200 символов; студия его не режет и не дописывает"
},
"cover_ms": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "кадр обложки: миллисекунды от начала ролика; null или не передан — первый кадр"
},
"social_account_id": {
"type": [
"string",
"null"
],
"description": "id аккаунта из list_social_accounts той же площадки; null — выберет человек"
},
"node_id": {
"type": [
"string",
"null"
],
"description": "id ноды с готовым роликом из read_project_graph; null — студия выберет сама"
}
},
"required": [
"project_id",
"platform",
"caption"
],
"additionalProperties": false
}
{
"project_id": "<url or id returned by list_projects>",
"platform": "tiktok",
"caption": "A blue paper boat crosses a quiet pond #paperboat #calm",
"cover_ms": 1200
}

Check the result: Give the returned open_url to the person: it opens the project with the publish window filled in; read back the stored draft fields.

  • It never publishes: the person reviews, edits and presses Publish on the platform’s own consent screen.
  • One draft per platform per project; a new call replaces the previous draft entirely.
  • On YouTube the first caption line becomes the title (up to 100 characters) and the cover frame is not applied.
  • While TikTok allows this app only drafts for a public account, the caption is shown for copying and the cover is chosen in the TikTok app.

Save an Element (a character, object or place) to the library of the key owner, or update a saved one, so the studio can apply it to an Element node.

Setting Value
Scope write
Cost class free
Availability account key with the required scope
Project context required no
{
"type": "object",
"properties": {
"element_id": {
"type": "string",
"description": "id своего элемента из list_my_elements или из прошлого ответа save_element — обновить его; не передан — завести новый"
},
"name": {
"type": "string",
"description": "имя; у нового элемента обязательно"
},
"role": {
"type": "string",
"enum": [
"персонаж",
"объект",
"локация"
],
"description": "что это: персонаж, объект или локация; у нового по умолчанию персонаж"
},
"images": {
"type": "array",
"items": {
"type": "string"
},
"description": "адреса своих картинок студии по порядку; у персонажа первой — лист персонажа. Передан — заменяет картинки элемента целиком (кадры «Доделать», нарисованные с того же листа, сохраняются); не передан — прежние"
},
"view_kinds": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"enum": [
"sheet",
"face",
"figure",
"object",
null
]
},
"description": "вид каждой картинки, по одному на картинку и в том же порядке: sheet — лист персонажа, figure и face — кадры фигуры и лица, object — кадр предмета, null — без вида (фото); без images — виды уже сохранённых картинок"
},
"description": {
"type": "string",
"description": "описание для сценариста: кто это, история, роль в сюжете"
},
"character": {
"type": "string",
"description": "характер для сценариста: как ведёт себя, чего хочет"
},
"look": {
"type": "string",
"description": "что брать с картинки — короткий факт о том, что на приложенной картинке; его читает генератор кадра"
}
},
"additionalProperties": false
}
{
"name": "Sonya",
"role": "персонаж",
"images": [
"<url of the character sheet>",
"<url of the figure frame>",
"<url of the face frame>"
],
"view_kinds": [
"sheet",
"figure",
"face"
],
"description": "The postwoman of a small seaside town, 28.",
"character": "Stubborn, jokes a lot.",
"look": "Red hair, blue postal jacket."
}

Check the result: Find the returned element_id in list_my_elements and read its full text with describe_element.

  • Pictures must be the owner’s own studio files (a url from upload_artifact or a generation result); an outside address, someone else’s file or a non-picture refuses and nothing is written.
  • With element_id only the fields passed are replaced; images replace the whole list, and Finish frames drawn from the same sheet are kept.
  • For a character put the character sheet first, not a single portrait; the source photo the sheet was drawn from may follow it with the kind null.
  • view_kinds gives one kind per picture (sheet, figure, face, object or null); the studio does not guess kinds, so without them every picture counts as a sheet or photo and the Element has no frames. A count that does not match the pictures refuses and nothing is written.
  • There is no deletion: a person removes an Element in the studio.

Reviewed: 2026-10-14. Sources: the current MCP registry, schemas and handler-reviewed examples. No paid handlers were executed to build this reference.