Appearance
MCP tools
The Animanager MCP server gives an AI agent 68 tools in 8 groups, and 4 ready-made prompts. This page is generated from the server's own catalogue at every build of the guide, so it lists exactly what the current version offers. An agent can read the same catalogue at any time with animanager_help.
To connect an agent, see Connect Claude, Codex or another MCP client. For what it may do on your behalf, see What an agent can and can't do.
What a tool needs
Every tool works with the signed-in session of the person who connected the agent, and the server checks that person's permissions on every call. Some tools also need:
| Need | Meaning |
|---|---|
helper | the Animanager Helper running on this computer |
browser | a canvas open in the browser (only when itemId is omitted) |
ask | an explicit request by the person in this turn |
edit | permission to edit canvases in the project |
publish | permission to post revisions on the stage |
chat | permission to post in the thread |
comment | permission to post comments on the stage (and to change its status when statusId is given) |
tokens | spends studio tokens |
farm | the render farm switched on for the studio and the role permission to use it |
submit | permission to submit render jobs in the project |
All tools
| Tool | Group | What it does | Needs |
|---|---|---|---|
canvas_open | Read | The canvases the user has open in the browser right now, most recently used first, each with its item id, the folder they are inside and the selected nodes. | helper, browser |
canvas_selected | Read | What the user has selected on the open canvas, in full. | helper, browser |
canvas_list | Read | What this user can open. Without arguments: studios, projects and spaces with their item counts (compact). | |
canvas_context | Read | The canvas of an item as short text: folders, every generator with its model, wiring, settings and prompt, wired media one line each, loose media... | |
canvas_lookup | Read | Any UUID the user pastes: a media id (the file with a link, every canvas and node it sits on, and when it was generated here, how: model, prompt, settings,... | |
canvas_media | Read | The file behind a media node (image, video, file or sketch, including what canvas_generate produced), or behind any media id you can read, on a canvas or... | |
canvas_video_frames | Read | Reads a STRETCH of a video: up to 12 small frames (768 px) evenly spaced between two seconds (default the whole clip, 8 frames), with the cuts and shots the... | |
canvas_video_frame | Read | One or a few EXACT frames of a video at full resolution: "pull the frame at 3.2 s", "give me the frames at 1.2 and 3.5 s". | helper |
canvas_video_sheet | Read | A contact sheet to order: "make me a contact sheet of 0 to 10 s with 16 frames", "3 frames a second between 4 and 6 s". | helper |
canvas_assets | Read | The studio's canvas assets: reusable named sets of media (a character sheet, a prop, a location) that a person made with "Set as Asset" on a folder. | |
canvas_add_media | Edit | Puts a file on the canvas as a media node (image, video or file by its type): a file on this computer by path (a render, a playblast, a screenshot another... | edit |
canvas_add_generator | Edit | Adds a new generation node for a model, with the same defaults the canvas menu gives it and an empty prompt, in the folder the user is looking at (or... | edit |
canvas_set_model | Edit | Switches an existing generation node to another model of the same family, keeping its name, wires, prompt and framing (aspect ratio, duration, count);... | edit |
canvas_write_prompt | Edit | Writes the prompt of a generation node (and optionally its aspect ratio, resolution, negative prompt or duration). | edit |
canvas_name | Edit | Names a media node (image, video, file, sketch), a frame, a folder or a text note. | edit |
canvas_connect | Edit | Wires a media node (or a frame/folder with a starred item) into a generation node. | edit |
canvas_disconnect | Edit | Removes a wire between two nodes, by connection id or by source and target (plus port when the same pair is wired more than once). | edit |
canvas_remove | Edit | Removes an EMPTY node: a generation node (with its wires) or a text note; or a media node (image, video, file) that YOU put on this canvas in this session... | edit |
canvas_import | Edit | Copies elements from another canvas into this one: a whole folder (with everything inside), a set of nodes (with what hangs from them), or the entire source... | edit |
canvas_place_asset | Edit | Brings an asset onto the canvas as a copy: its frame with the media, generators and wires inside, laid out as authored (an older asset comes as a blue frame... | edit |
canvas_place_media | Edit | Puts an existing media (a revision of another stage from production_revisions, a file from another canvas from canvas_lookup) on the ITEM canvas as a media... | edit |
canvas_video_cut | Edit | Cuts a segment out of a canvas video into a new clip: "cut from 1.0 to 2.5 s", "keep only the second shot". | edit |
canvas_move | Organize | Moves one or more nodes: to a position (the first node's top-left corner lands there, the others keep their offsets) or by an offset. | edit |
canvas_arrange | Organize | Tidies a set of nodes into a grid (default; square-ish, or columns wide), a row or a column, starting at the top-left of the set unless an origin is given. | edit |
canvas_create_frame | Organize | Wraps existing nodes in a new named frame sized to fit them (40 px around, or pad), the way F does on a selection: the nodes become its members, so moving... | edit |
canvas_frame_members | Organize | Adds nodes to a frame and/or takes nodes out of it. | edit |
canvas_fit_frame | Organize | Resizes a frame to what it holds, with pad pixels around (default 40): it grows to cover members that stick out and shrinks around a sparse group; the... | edit |
canvas_folder_to_frame | Organize | Turns a folder into a frame on its parent's plane so what it held is visible without entering it: the content keeps its layout, ids, media, names, stars,... | edit |
canvas_frame_to_folder | Organize | The reverse of canvas_folder_to_frame: a frame becomes a folder (same id, name and star) holding everything that was inside it, layout intact; the folder... | edit |
canvas_add_folder | Organize | Creates a folder on the canvas: in the folder the user is looking at (or parentFolderId), to the right of what is there unless at is given. | edit |
canvas_move_to_folder | Organize | Moves nodes into a folder of the canvas, or back to the root when folder is omitted. | edit |
canvas_generate | Generate | Runs a generator, image or video: optionally writes a new prompt (validated like canvas_write_prompt), then creates the result placeholder(s) on the canvas... | edit, tokens |
canvas_generation_status | Generate | Where generations started with canvas_generate stand: queued, running, done or failed, with each result (media id, the picture, and a link to the file valid... | |
production_estimate | Generate | What a batch of generations would cost BEFORE queuing it, from the same estimators the queue charges with: per line and in total, in the studio's TOKENS... | |
production_locate | Production | What an Animanager link points at. | |
production_stage | Production | THE entry point for production work: one stage of an item (a task) with its status, who is assigned to it (the artists on its timeline blocks, by the... | |
production_item | Production | An item (a shot, a character, an asset) with its place (studio, project, space, collection), every stage it has (taskId, status, who is assigned to it,... | |
production_space | Production | A space (a sequence, a set of characters) with its items and, for each item, its stages with status, assignee, how many revisions and when the last one was... | |
production_revisions | Production | The revisions of one stage (taskId) or of every stage of an item (itemId), newest first: version number, author, status, time spent, the body text, each... | |
production_thread | Production | One page of a conversation: the thread of a studio, project, space, item or stage (for a stage, id is the taskId). | |
production_stage_tables | Production | The data tables of one stage's revisions, newest first: for each CSV a revision carries, its revision (version, messageId, versionId, date), file name,... | |
production_feedback | Production | Every review feedback of one revision (versionId, from production_revisions or production_stage) or one feedback message (messageId, from the thread),... | |
production_publish_revision | Production | Publishes a revision on a stage, signed by the studio's bot "Anibot", with a summary, optional media and a status. | ask, publish |
production_post_message | Production | Posts a chat message as the bot ("Anibot") in a thread: studio, project, space, item or stage (id = taskId). | chat |
production_post_comment | Production | Posts a COMMENT on a stage as the bot ("Anibot"): the message type that sets the stage's status WITHOUT publishing a revision. | comment |
production_set_metadata | Production | Writes pipeline metadata values on a stage (taskId): the fields production_stage and production_item list, by fieldKey. | ask |
production_set_priority | Production | Sets the priority of one or several items (shots, assets, ads): 5 very high, 4 high, 3 normal (the default), 2 low, 1 very low. | ask |
production_run_job | Production | Runs "produce stage B from stage A" for a whole space as a SERVER JOB instead of doing it by hand item by item: for every item whose source stage has a... | edit, tokens |
production_job_status | Production | Where a job started with production_run_job stands: overall status, counts, and every item with its step (placing, generating image, generating video,... | |
production_revision_files | Files | The managed work files of one revision (its package): the primary work file(s), the files and exports it published with their paths, sizes and hashes, the... | |
production_stage_files | Files | The files currently published on a stage across all its revisions, as Get Files sees them: one section at a time (primary work files, files, exports), paged... | |
production_stage_inputs | Files | The pipeline inputs a stage consumes (its dependencies: the upstream stages and assets wired into it in the pipeline), each with its consumption mode... | |
workspace_status | Files | The local workspace of a stage on this computer, through the Helper: its folder, whether it exists and is prepared, how many files it holds, its state, the... | helper |
workspace_locate | Files | Which stage a local path belongs to, through the Helper: from the .animanager marker of the workspace folder that contains it, or, inside the workspace base... | helper |
workspace_item_status | Files | Every stage of an item with its local workspace folder on this computer, through the Helper: the taskId and name of each stage, its absolute folder under... | helper |
workspace_prepare | Files | Creates the local workspace folder of a stage on this computer through the Helper: the folder in the studio's structure under the workspace base, its files/... | helper |
workspace_get_files | Files | Get Files into the local workspace through the Helper. Three forms. | helper |
workspace_changes | Files | What changed in the local workspace of a stage since its last published revision, through the Helper: every candidate file with its status (new, changed,... | helper |
workspace_publish_revision | Files | Publishes a revision WITH managed work files from the local workspace of this computer, the way the app does with the Helper: stages the selected local... | helper, ask, publish |
workspace_job_status | Files | Where a Helper operation stands. | helper |
workspace_blender | Files | Which Blender opens a work file on this computer, through the Helper. | helper |
production_edit_revision | Files | Corrects a revision the way the revision menu does: its text, its status, the time spent, or its review media (mediaIds replaces the whole list, in order). | ask |
production_delete_revision | Files | Deletes a revision (its message, its version and its work-file package link) the way the revision menu does, through the same rule the app applies: its... | ask |
farm_queue | Render farm | The studio's render queue, as the Farm page shows it: each job with its status, frames done, priority, item and stage, revision, scene and dates, the totals... | farm |
farm_job | Render farm | One render job in full, what Job details shows on the Farm page: its status and frames, priority, the revision, item and stage it renders, its settings... | farm |
farm_launch | Render farm | Launches a Blender render on the studio's farm from a published revision, like Launch render on its revision card. | farm, ask, submit |
farm_files | Render farm | The files of a render job: the rendered frames (or previews, logs, metadata), each with its frame, size and a download link valid 24 hours. download: true... | farm |
animanager_help | Help | The catalogue of this MCP, generated from the tools themselves: what every tool does, when to use it, its parameters, what it needs (the Helper, an open... |
Read
Look at canvases, media and video frames without changing anything.
canvas_open
The canvases the user has open in the browser right now, most recently used first, each with its item id, the folder they are inside and the selected nodes. Call this first when the user says "this canvas", "the one I have open", "the selected generator". The first entry is the current canvas; the other tools use it when itemId is omitted.
Needs: the Animanager Helper running on this computer; a canvas open in the browser (only when itemId is omitted).
Ask for it with words like: "this canvas", "the one I have open", "which canvas".
Parameters
No parameters.
Example
canvas_open {}: the open canvases, current first.
Usually followed by: canvas_context, canvas_selected.
canvas_selected
What the user has selected on the open canvas, in full. For a selected generation node: its model and model card (connector, how references are cited, limits, aspect ratios, resolutions, method, what to avoid), every wired input with its slot, role, citation token, name and image (a reference video comes as several frames spread across the clip, with its length), the current prompt and settings, and ready instructions for writing the prompt, including how to treat a blocking animatic. For other nodes: what they are and what they are wired to. Call this first for "this generator", "the selected node", "what is connected here".
Needs: the Animanager Helper running on this computer; a canvas open in the browser (only when itemId is omitted).
Ask for it with words like: "selected node", "this generator", "what is connected here".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
imagePage | number | Page of pictures when they do not all fit one reply (default 1). |
Example
canvas_selected {}: the selected generator with its model card, wiring and prompt.
Usually followed by: canvas_write_prompt, canvas_generate.
canvas_list
What this user can open. Without arguments: studios, projects and spaces with their item counts (compact). With spaceId or query: the items too (name, collection, canvas size, item id). Use it to find the canvas or space the user means, then pass the item id or space id to the other tools.
Needs: only a signed-in session.
Ask for it with words like: "find the canvas", "which space", "search items", "list studios projects spaces".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Text to search in item titles, collection, space and project names. | |
studioId | string | Studio UUID, short id or Animanager URL. | |
projectId | string | Project UUID, short id or Animanager URL. | |
spaceId | string | Space UUID, short id or Animanager URL. Lists the items of this space. | |
items | boolean | Force items on (true) or off (false). |
Examples
canvas_list {"query":"Amy"}: items whose title, collection, space or project matches.canvas_list {"spaceId":"<spaceId>"}: the items of one space with their ids.
Usually followed by: canvas_context, production_space.
canvas_context
The canvas of an item as short text: folders, every generator with its model, wiring, settings and prompt, wired media one line each, loose media summarized, other nodes briefly. Handles (G1 = generator, M1 = media, F1 = frame, D1 = folder, T1 = text) and ids. The model card and prompt instructions of a generator come only when the scope is small: "nodes:<id or handle>,…" (also pulls in what feeds them) or a canvas with at most two generators; "folder:<folderId>" (root: "folder:") reads one folder; "all" the whole canvas. Wired media come back as images. Read once, then act: the write tools return what changed.
Needs: only a signed-in session.
Ask for it with words like: "read the canvas", "what is on the canvas", "generators and wiring".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Item whose canvas to read. Omit for the canvas the user has open (canvas_open). | |
scope | string | all | folder:<folderId> | nodes:<id,id>. Default all. | |
images | boolean | Attach thumbnails of the visible media as images (default true, max 8). | |
imagePage | number | Pictures come in pages that fit the reply size limit; the reply says how many pages there are. Default 1. | |
layout | boolean | Include positions and sizes (for canvas_move / canvas_arrange). Default false. |
Examples
canvas_context {"itemId":"<itemId>"}: the whole canvas as text with thumbnails.canvas_context {"scope":"nodes:G1"}: one generator with its card and what feeds it.
Usually followed by: canvas_write_prompt, canvas_connect.
canvas_lookup
Any UUID the user pastes: a media id (the file with a link, every canvas and node it sits on, and when it was generated here, how: model, prompt, settings, cost, generator node, every reference by role and media id) or a NODE id (which canvas holds it, its type, name and model, so you can read it with canvas_context). Use it FIRST whenever the person gives a bare id, asks "how was this made" or "what went into this", or to trace a result back to its references. Reading only.
Needs: only a signed-in session.
Ask for it with words like: "what is this id", "where is this media", "how was it generated".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
mediaId | string | Yes | The media id (UUID). |
Example
canvas_lookup {"mediaId":"<uuid>"}: the file, where it sits, and its generation record.
Usually followed by: canvas_place_media.
canvas_media
The file behind a media node (image, video, file or sketch, including what canvas_generate produced), or behind any media id you can read, on a canvas or not (a revision's playblast, a message attachment): a link to the original that works for 24 hours, the file name, type and size, and the picture itself at full detail (1024 px by default, 1536 px with size "max"; the thumbnails elsewhere are 512 px). This is how to look closely at one image: to judge a generation, read text in it, check hands, faces, edges or artifacts. For a video, also its cuts and shots and a link to its contact sheet with timestamps; sound: true adds its soundtrack by the numbers (format, loudness, true peak, silences, loudness second by second). Use it when the user asks for the image, the file or its URL, and give them the link: a chat cannot receive the file from here.
Needs: only a signed-in session.
Ask for it with words like: "link to the file", "download this media", "look closely", "cuts of the video".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. Not needed for a media id. | |
node | string | Node id, handle (M3) or media id (also one on no canvas, e.g. from production_revisions). Omit for the single selected node. | |
size | one of "thumbnail", "full", "max" | Size of the picture: full (1024 px, default), max (1536 px) or thumbnail (512 px). | |
sound | boolean | Video or audio: also read the soundtrack (has sound?, format, integrated loudness, loudness range, true peak, silences, loudest moment of each second). Levels measured by ffmpeg, not a listening. Default false. |
Example
canvas_media {"node":"M1","size":"full"}: a 24 h link and the picture at 1024 px.
canvas_video_frames
Reads a STRETCH of a video: up to 12 small frames (768 px) evenly spaced between two seconds (default the whole clip, 8 frames), with the cuts and shots the server detected: is that a cut or a push-in, where exactly does the shot change, what happens between 1.2 and 2.5 s. Pass node (a canvas video, or any video media id, e.g. a revision's playblast) or path (a video file on this computer; needs the Animanager Helper, frames at full resolution). For one or a few exact frames at full resolution (and to put them on the canvas) use canvas_video_frame; for a dense grid of a stretch, canvas_video_sheet. Reading only; nothing on the canvas changes.
Needs: only a signed-in session.
Ask for it with words like: "frames between", "is that a cut", "how does the motion go".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. Not needed for a media id. | |
node | string | Video node id, handle (M2) or media id (also one on no canvas). Omit for the single selected node. Ignored with path. | |
path | string | Absolute path of a video file on this computer, instead of node. | |
from | number | Start second (default 0). | |
to | number | End second (default the end of the clip). | |
count | number | How many frames, 1 to 12 (default 8). | |
imagePage | number | Page of frames when they do not all fit one reply (default 1). |
Example
canvas_video_frames {"node":"M2","from":0,"to":4,"count":8}: eight frames between 0 and 4 s with the detected cuts.
canvas_video_frame
One or a few EXACT frames of a video at full resolution: "pull the frame at 3.2 s", "give me the frames at 1.2 and 3.5 s". Pass node (a canvas video, or any video media id, e.g. a revision's playblast) or path (a video file on this computer; needs the Animanager Helper). Each frame comes back as a picture with its real second and a path on this computer, which production_post_comment, production_post_message and production_publish_revision attach with files (no canvas needed); with place: true it is also put on the canvas as an image node next to the video, named "<video> @ 3.20 s", ready for canvas_connect. To read a whole stretch use canvas_video_frames or canvas_video_sheet.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "the frame at", "pull a frame", "still from the video".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. Not needed for a media id. | |
node | string | Video node id, handle (M2) or media id (also one on no canvas). Omit for the single selected node. Ignored with path. | |
path | string | Absolute path of a video file on this computer, instead of node. | |
at | number or list of number | Yes | Second of the frame, or a list of up to 8 seconds. |
place | boolean | Also put each frame on the canvas as an image node (default false). | |
name | string | With place: name for the node (a single instant), instead of "<video> @ 3.20 s". | |
folderId | string | With place: folder to drop into (default: the folder of the video, or the one the user is looking at). | |
imagePage | number | Page of pictures when they do not all fit one reply (default 1). |
Examples
canvas_video_frame {"node":"M2","at":3.2}: the exact frame at 3.2 s, full resolution.canvas_video_frame {"path":"/abs/file.mp4","at":[1.2,3.5]}: frames of a local file; needs the Helper.
canvas_video_sheet
A contact sheet to order: "make me a contact sheet of 0 to 10 s with 16 frames", "3 frames a second between 4 and 6 s". Pass node (a canvas video, or any video media id, e.g. a revision's playblast) or path (a file on this computer; needs the Animanager Helper), from and to, and count (cells, max 48) or fps; columns (4), cellWidth (320, max 640), timestamps (printed on each cell). With no range or grid, the clip's standard sheet comes back as is. The legend gives the second of every cell. The sheet is also saved on this computer (attach it to a post with files); place: true also puts it on the canvas.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "contact sheet", "frames a second", "overview of the clip".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. Not needed for a media id. | |
node | string | Video node id, handle (M2) or media id (also one on no canvas). Omit for the single selected node. Ignored with path. | |
path | string | Absolute path of a video file on this computer, instead of node. | |
from | number | Start second (default 0). | |
to | number | End second (default the end of the clip). | |
count | number | How many cells, spread evenly from from to to (1 to 48). Or pass fps. | |
fps | number | Cells per second instead of count (capped at 48 cells). | |
columns | number | Cells per row (default 4). | |
cellWidth | number | Width of each cell in pixels (default 320, max 640). | |
timestamps | boolean | Print the second on each cell (default true). | |
place | boolean | Also put the sheet on the canvas as an image node (default false). | |
name | string | With place: name for the node. | |
folderId | string | With place: folder to drop into (default: the folder of the video, or the one the user is looking at). |
Example
canvas_video_sheet {"node":"M2","from":0,"to":10,"count":16}: a 16-cell sheet of the first 10 s.
canvas_assets
The studio's canvas assets: reusable named sets of media (a character sheet, a prop, a location) that a person made with "Set as Asset" on a folder. Each with id, name, how many images and videos it holds, where it is authored and whether it already sits on this canvas. Search by name with query. Bring one in with canvas_place_asset.
Needs: only a signed-in session.
Ask for it with words like: "studio assets", "character sheet", "reusable set".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
query | string | Part of the asset name to filter by. |
Example
canvas_assets {"query":"Amy"}: assets whose name matches.
Usually followed by: canvas_place_asset.
Edit
Add media and generators to a canvas, write prompts, name and wire nodes.
canvas_add_media
Puts a file on the canvas as a media node (image, video or file by its type): a file on this computer by path (a render, a playblast, a screenshot another tool just saved) or a file at an http(s) URL. The bytes are uploaded to the studio's storage the same way the browser does it, and the node lands in the folder the user is looking at (or folderId), to the right of what is there unless at is given. Images get their own aspect. Returns the node id and handle; name it here or with canvas_name so a prompt can cite it.
Needs: permission to edit canvases in the project.
Ask for it with words like: "put this file on the canvas", "upload a render", "add an image from a URL".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
path | string | Absolute path of a file on this computer. | |
url | string | http(s) URL of the file, when it is not on this computer. | |
name | string | Name for the node (shown on the canvas; references need one). | |
folderId | string | Folder of the canvas to drop into (default: the one the user is looking at, else root). | |
at | object (x, y) | Top-left position; default: to the right of what is there. |
Examples
canvas_add_media {"path":"/abs/render.png","name":"render v3"}: uploads a local file as a named media node.canvas_add_media {"url":"https://…/ref.jpg"}: a file fetched from the web.
Usually followed by: canvas_connect.
canvas_add_generator
Adds a new generation node for a model, with the same defaults the canvas menu gives it and an empty prompt, in the folder the user is looking at (or folderId), to the right of what is there unless at is given. Then wire references into it with canvas_connect and write its prompt with canvas_write_prompt. Image, video and sound models, and the Enhance node (the upscaler / cleaner: one image or video in, no prompt, set by engine): the model parameter lists them all. After adding an Enhance node: wire the media with canvas_connect, adjust engine, size and cleanLevel with canvas_set_model, run it with canvas_generate.
Needs: permission to edit canvases in the project.
Ask for it with words like: "add a generator", "new node for model", "add an enhance node", "upscaler".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
model | string | Yes | Model id. Image models: gpt-image (GPT Image 2), gpt-image-2.5-sunburst (OpenAI, editing precision), gpt-image-2.5-flare (OpenAI, fast), nano-banana, nano-banana-2, nano-banana-basic, seedream, seedream-pro, p-image. Video models: veo-3.1, seedance-2.0-mini, seedance-2.0-fast, seedance-2.0, seedance-2.5, minimax-h3, minimax-h3-max, kling-motion, kling-o1-edit, p-video. Sound: mmaudio-sfx. Enhance node engines: topaz-upscale (Topaz, faithful upscale 1x/2x/4x or clean at 1x, images and video), seedvr-upscale (SeedVR2, generative, to 720p-2160p), real-esrgan (fast GAN upscale, images), scunet-denoise (deterministic denoise, images, the menu default), nano-banana-clean and nano-banana-clean-pro (AI clean, images, 1K-4K), bytedance-upscale (AIGC video to 1080p-4K), ffmpeg-deband (free, smooths banding). Short names work too: topaz, seedvr, esrgan, scunet, nano, nano-pro, bytedance, deband, or enhance (menu default) and upscaler (Topaz). |
name | string | Optional name for the node. | |
folderId | string | Folder of the canvas to drop into (default: the one the user is looking at, else root). | |
at | object (x, y) | Top-left position; default: to the right of what is there. |
Example
canvas_add_generator {"model":"nano-banana-2","name":"key frame"}: an image generator with default settings.
Usually followed by: canvas_connect, canvas_write_prompt, canvas_generate.
canvas_set_model
Switches an existing generation node to another model of the same family, keeping its name, wires, prompt and framing (aspect ratio, duration, count); resolution and the other settings reset to the new model's defaults, so re-check them with canvas_selected. The model parameter lists the families. On an Enhance node this is also how its settings are set: size and cleanLevel (see those parameters); model may be omitted there to change only those. A model of another family is a different node: add it with canvas_add_generator, re-wire, and canvas_remove the old one. Prefer this over adding nodes when the person only wants a different model.
Needs: permission to edit canvases in the project.
Ask for it with words like: "change the model", "switch to seedance", "set the upscale factor".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
node | string | Generator node id or handle (G2). Omit for the single selected node. | |
model | string | Model id of the same family as the node. Families: image (gpt-image, gpt-image-2.5-sunburst, gpt-image-2.5-flare, nano-banana, nano-banana-2, nano-banana-basic, seedream, seedream-pro), Seedance (seedance-2.0-mini, seedance-2.0-fast, seedance-2.0, seedance-2.5), MiniMax (minimax-h3, minimax-h3-max), Enhance node engines (topaz-upscale, seedvr-upscale, real-esrgan, scunet-denoise, nano-banana-clean, nano-banana-clean-pro, bytedance-upscale, ffmpeg-deband, or their short names topaz, seedvr, esrgan, scunet, nano, nano-pro, bytedance, deband). Optional on an Enhance node when only size or cleanLevel change. | |
size | string | Enhance node only: the engine's upscale factor "1"/"2"/"4", output size "1K"/"2K"/"4K" or target resolution "720p".."2160p", "1080p"/"2k"/"4k", as canvas_selected lists them. | |
cleanLevel | one of "light", "standard", "strong" | Enhance node only (Topaz, Nano Banana and Deband): cleanup (Topaz, Nano Banana) or strength (Deband). |
Example
canvas_set_model {"node":"G1","model":"seedance-2.5"}: same node, other model; settings reset to its defaults.
canvas_write_prompt
Writes the prompt of a generation node (and optionally its aspect ratio, resolution, negative prompt or duration). The prompt is checked against the model card and the wiring first: citations must use the connector's syntax (given in canvas_context instructions) and only refer to wired references; settings must be ones the model accepts. Rejections come back with the exact rule to fix.
Needs: permission to edit canvases in the project.
Ask for it with words like: "write the prompt", "set the aspect ratio", "change the duration".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
node | string | Generator node id or handle (G2). Omit for the selected generator, else the generator you last read with canvas_selected or canvas_context, else the one the selected reference feeds. | |
prompt | string | Yes | |
aspectRatio | string | ||
resolution | string | ||
quality | one of "auto", "low", "medium", "high", "xhigh", "max" | ||
imageOptions | object (size, background, output_format, output_compression, mask_media_id, mask_url) | GPT Image nodes only. Options the node stores and sends with every generation. | |
negativePrompt | string | ||
durationSeconds | number |
Example
canvas_write_prompt {"node":"G1","prompt":"@Image1 walking at dusk","aspectRatio":"16:9"}: validated against the model card and the wiring.
Usually followed by: canvas_generate.
canvas_name
Names a media node (image, video, file, sketch), a frame, a folder or a text note. A reference needs a name before a prompt can cite it (the tokens in canvas_selected say "not named" otherwise), and the name is what the generator is told about that input, so name references by what they show: "Amy front view", "rooftop plate". Never writes prompts.
Needs: permission to edit canvases in the project.
Ask for it with words like: "name this node", "rename", "so the prompt can cite it".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
node | string | Node id, media id or handle (M3). Omit for the single selected node. | |
name | string | ||
names | list of object (node, name) | Several nodes in one call: [{ node, name }]. |
Examples
canvas_name {"node":"M1","name":"Amy front"}: names one node.canvas_name {"names":[{"node":"M1","name":"Amy"},{"node":"M2","name":"blocking"}]}: several at once.
canvas_connect
Wires a media node (or a frame/folder with a starred item) into a generation node. Picks the first free slot of the right kind unless a port is given (ports and slot names are in canvas_context). A taken port is refused unless replace is true, in which case the old wire is removed first.
Needs: permission to edit canvases in the project.
Ask for it with words like: "wire", "connect the reference", "plug into the generator".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
source | string | Source node id, media id or handle (M3). | |
target | string | Generator id or handle (G1). | |
port | string | Target port such as input-4 (optional). | |
replace | boolean | If the port is taken, swap the wire instead of refusing. | |
wires | list of object (source, target, port, replace) | Several wires in one call, in order: [{ source, target, port?, replace? }]. Each is reported; one failure does not undo the others. |
Examples
canvas_connect {"source":"M1","target":"G1"}: first free slot of the right kind.canvas_connect {"source":"M3","target":"G1","port":"input-1","replace":true}: swaps what was on that port.
canvas_disconnect
Removes a wire between two nodes, by connection id or by source and target (plus port when the same pair is wired more than once). A wire carries no content and the canvas keeps a record of it. Media is never deleted; an empty generation node or text note goes with canvas_remove.
Needs: permission to edit canvases in the project.
Ask for it with words like: "unwire", "remove the connection".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
connectionId | string | ||
source | string | ||
target | string | ||
port | string |
Example
canvas_disconnect {"source":"M1","target":"G1"}: removes that wire; nothing else changes.
canvas_remove
Removes an EMPTY node: a generation node (with its wires) or a text note; or a media node (image, video, file) that YOU put on this canvas in this session (canvas_add_media, placed frames and sheets, cuts, canvas_place_media). Use it to clean up a generator you added by mistake or replaced, or a capture you placed and no longer need. Only the node leaves the canvas: media is never deleted (the file stays in its revisions, messages and other nodes). Refused for media anyone else placed (or you placed in an earlier session), for frames and folders, and for a node that is generating. The canvas keeps a record of the removal.
Needs: permission to edit canvases in the project.
Ask for it with words like: "remove the generator I added", "delete the empty node".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
node | string | Yes | Node id or handle (G2, T1, M10). Always explicit: nothing is removed by selection. |
Example
canvas_remove {"node":"G2"}: removes an empty generator or note; media is never deleted.
canvas_import
Copies elements from another canvas into this one: a whole folder (with everything inside), a set of nodes (with what hangs from them), or the entire source canvas wrapped in a new folder. Same media, fresh ids, inner wires kept. Returns the new ids.
Needs: permission to edit canvases in the project.
Ask for it with words like: "copy from another canvas", "bring that folder here".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Destination canvas (item id). Omit for the open canvas. | |
sourceItemId | string | Yes | Canvas to copy from (item id). |
folderId | string | A folder in the source canvas to copy as a whole. | |
elementIds | list of string | Specific source node ids to copy (with their contents). | |
name | string | Name for the wrapping folder (whole-canvas copies) or for the copied folder. | |
targetFolderId | string | Folder of the destination canvas to drop into (default: root). | |
at | object (x, y) | Where to land; default: to the right of what is there. |
Example
canvas_import {"sourceItemId":"<itemId>","folderId":"<folderId>"}: copies a folder with everything inside, fresh ids.
canvas_place_asset
Brings an asset onto the canvas as a copy: its frame with the media, generators and wires inside, laid out as authored (an older asset comes as a blue frame with its media on a grid). Lands in the folder the user is looking at (or folderId), to the right of what is there unless at is given. A copy, never a link: editing it here changes nothing at the source. Every media inside is a node to wire with canvas_connect.
Needs: permission to edit canvases in the project.
Ask for it with words like: "place the asset", "bring the character sheet".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
asset | string | Yes | Asset id from canvas_assets. |
folderId | string | Folder of the canvas to drop into (default: the one the user is looking at, else root). | |
at | object (x, y) | Top-left position; default: to the right of what is there. |
Example
canvas_place_asset {"asset":"Amy"}: the asset as a frame with its media and wires.
canvas_place_media
Puts an existing media (a revision of another stage from production_revisions, a file from another canvas from canvas_lookup) on the ITEM canvas as a media node: same media, new node, nothing copied or deleted. This is how a source stage's playblast or storyboard reaches the canvas you generate on; then wire it with canvas_connect. Lands in folderId (or the folder the user is looking at), to the right of what is there unless at is given.
Needs: permission to edit canvases in the project.
Ask for it with words like: "put the playblast on the canvas", "use the revision media as reference".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Destination item canvas. Omit for the open canvas. | |
mediaId | string | Yes | |
name | string | Name for the node (references need one to be cited). | |
folderId | string | ||
at | object (x, y) |
Example
canvas_place_media {"mediaId":"<mediaId>","name":"layout v2"}: an existing media as a new node on the item canvas.
Usually followed by: canvas_connect.
canvas_video_cut
Cuts a segment out of a canvas video into a new clip: "cut from 1.0 to 2.5 s", "keep only the second shot". Frame-accurate (re-encoded), from 0.05 s to 30 min, the same as the cut panel of the player. The clip lands on the canvas as a new video node next to the source, ready to wire with canvas_connect or feed a generator; the source is untouched and nothing is deleted. Returns the node id, the media id, the length and a link to the file.
Needs: permission to edit canvases in the project.
Ask for it with words like: "cut from", "keep only the second shot", "trim the clip".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
node | string | Video node id, media id or handle (M2). Omit for the single selected node. | |
from | number | Yes | Start second of the segment. |
to | number | Yes | End second of the segment (after from). |
name | string | Name for the new clip (default "<video> cut 1.0-2.5 s"). | |
folderId | string | Folder to drop into (default: the folder of the video). |
Example
canvas_video_cut {"node":"M2","from":1,"to":2.5}: a new frame-accurate clip on the canvas.
Organize
Move nodes, arrange them and group them in frames and folders.
canvas_move
Moves one or more nodes: to a position (the first node's top-left corner lands there, the others keep their offsets) or by an offset. Frames carry everything inside them. A node that lands inside a frame becomes its member; one dragged out leaves it. Omit nodes to move the current selection.
Needs: permission to edit canvases in the project.
Ask for it with words like: "move the nodes", "put it next to".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
nodes | list of string | Node ids or handles. Default: the selection. | |
to | object (x, y) | Absolute position for the first node. | |
by | object (x, y) | Offset to apply to all of them. |
Example
canvas_move {"nodes":["G1"],"by":{"x":400,"y":0}}: moves by an offset.
canvas_arrange
Tidies a set of nodes into a grid (default; square-ish, or columns wide), a row or a column, starting at the top-left of the set unless an origin is given. Frames are placed as blocks (their on-screen rect plus the output chip) and carry their contents: pass several frames to order the groups; pass frame to lay out what ONE frame holds inside it (all its members, or the ones in nodes), after which the frame is fitted around them. Omit nodes to arrange the current selection.
Needs: permission to edit canvases in the project.
Ask for it with words like: "tidy", "arrange in a grid", "line them up".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
nodes | list of string | Node ids or handles. Default: the selection (or, with frame, every member of that frame). | |
frame | string | Frame id or handle (F1): arrange inside it, from its padded corner, then fit it to the result. | |
layout | one of "grid", "row", "column" | ||
columns | number | Grid width in nodes (e.g. 3 for rows of three variants). Default: square-ish. | |
origin | object (x, y) | Top-left of the layout. Default: the set's top-left, or the frame's padded corner. | |
gap | number | Pixels between nodes (default 15, or 40 when frames are involved). | |
pad | number | With frame: padding kept around the content when the frame is fitted (default 40). |
Example
canvas_arrange {"frame":"F1","layout":"grid"}: arranges the members of a frame.
canvas_create_frame
Wraps existing nodes in a new named frame sized to fit them (40 px around, or pad), the way F does on a selection: the nodes become its members, so moving the frame (canvas_move) carries them and canvas_arrange with frame lays them out inside. The nodes must sit in one folder plane. A frame that already holds some of them keeps them and nests in the new one when inside it. Returns the frame id and handle. Omit nodes to frame the current selection.
Needs: permission to edit canvases in the project.
Ask for it with words like: "group these in a frame", "frame the results".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
name | string | Yes | Title of the frame (shown above its border). |
nodes | list of string | Node ids or handles to wrap. Default: the selection. | |
pad | number | Pixels between the content and the border (default 40). |
Example
canvas_create_frame {"name":"Refs","nodes":["M1","M2"]}: a frame sized to those nodes.
canvas_frame_members
Adds nodes to a frame and/or takes nodes out of it. A node added from outside the frame is placed inside it, under what it already holds (a node from another folder is brought to the frame's plane); a node taken out is placed just under the frame and belongs to whatever frame contains it there. Frames carry their members either way. The frame is then fitted to its content unless fit is false. Omit add and remove to add the current selection.
Needs: permission to edit canvases in the project.
Ask for it with words like: "add to the frame", "take out of the frame".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
frame | string | Yes | Frame id or handle (F1). |
add | list of string | Node ids or handles to put in the frame. | |
remove | list of string | Member ids or handles to take out of the frame. | |
fit | boolean | Fit the frame to its content afterwards (default true). | |
pad | number | Padding for the fit (default 40). |
Example
canvas_frame_members {"frame":"F1","add":["M3"]}: adds a node to a frame and refits it.
canvas_fit_frame
Resizes a frame to what it holds, with pad pixels around (default 40): it grows to cover members that stick out and shrinks around a sparse group; the corner follows the content. Omit frame when a single frame is selected.
Needs: permission to edit canvases in the project.
Ask for it with words like: "fit the frame", "shrink the frame".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
frame | string | Frame id or handle (F1). Default: the selected frame. | |
pad | number | Pixels between the content and the border (default 40). |
Example
canvas_fit_frame {"frame":"F1"}: resizes a frame to its content.
canvas_folder_to_frame
Turns a folder into a frame on its parent's plane so what it held is visible without entering it: the content keeps its layout, ids, media, names, stars, prompts, settings and wires, and the folder's id, name and star become the frame's. With recursive, the folders inside become nested frames too, so every group is visible at once. Lands at at, else where the folder card was when that touches nothing, else to the right of everything on the plane (never overlapping; canvas_arrange the frames afterwards). Reversible with canvas_frame_to_folder. Anyone looking inside that folder should go up one level.
Needs: permission to edit canvases in the project.
Ask for it with words like: "open the folder as a frame", "make the folder visible".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
folder | string | Yes | Folder id or handle (D1). |
recursive | boolean | Also turn the folders inside it into frames, nested (default false). | |
at | object (x, y) | Top-left of the frame on the parent plane. | |
pad | number | Pixels between the content and the border (default 40). |
Example
canvas_folder_to_frame {"folder":"D1"}: the folder becomes a frame on its parent plane.
canvas_frame_to_folder
The reverse of canvas_folder_to_frame: a frame becomes a folder (same id, name and star) holding everything that was inside it, layout intact; the folder card sits where the frame's corner was. With recursive, the frames inside become folders inside it. Nothing is lost: ids, media, names, prompts, settings and wires stay.
Needs: permission to edit canvases in the project.
Ask for it with words like: "collapse the frame into a folder".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
frame | string | Yes | Frame id or handle (F1). |
recursive | boolean | Also turn the frames inside it into folders (default false). |
Example
canvas_frame_to_folder {"frame":"F1"}: the frame becomes a folder with the same id.
canvas_add_folder
Creates a folder on the canvas: in the folder the user is looking at (or parentFolderId), to the right of what is there unless at is given. Folders are places to navigate into, never geometry. Returns the folder id: pass it as folderId to the tools that add nodes, or fill it with canvas_move_to_folder.
Needs: permission to edit canvases in the project.
Ask for it with words like: "create a folder".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
name | string | Yes | Name of the folder. |
parentFolderId | string | Folder to create it inside (default: the one the user is looking at, else root). | |
at | object (x, y) | Top-left position; default: to the right of what is there. |
Example
canvas_add_folder {"name":"Layout from Storyboard"}: a folder to drop nodes into.
Usually followed by: canvas_move_to_folder.
canvas_move_to_folder
Moves nodes into a folder of the canvas, or back to the root when folder is omitted. A frame carries everything inside it; a folder carries its contents. The nodes keep their offsets to each other and land to the right of what the folder already holds unless at is given. Wires are kept, even when they now run between folders. Omit nodes to move the current selection.
Needs: permission to edit canvases in the project.
Ask for it with words like: "move into the folder", "back to the root".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
nodes | list of string | Node ids or handles. Default: the selection. | |
folder | string | Folder id or handle (D1). Omit to move to the root of the canvas. | |
at | object (x, y) | Top-left of the group inside the folder; default: to the right of what is there. |
Example
canvas_move_to_folder {"nodes":["M1"],"folder":"D1"}: moves nodes into a folder.
Generate
Run generators and estimate what a batch costs in tokens.
canvas_generate
Runs a generator, image or video: optionally writes a new prompt (validated like canvas_write_prompt), then creates the result placeholder(s) on the canvas and starts the generation on the same queue the Generate button uses. Returns the queue id and an estimated cost in euros. Video nodes (Seedance, MiniMax, Veo, Kling, p-video) run from their wiring: first/last frame, reference video, looks, sketches, audio, in standard mode (multi-shot plans and timed steps are authored on the canvas and are refused here). Follow up with canvas_generation_status (wait: true parks until it finishes): it brings each finished result and a link to its file. One call = one generation: never call it again for the same request unless the person asks. If it fails, nothing was queued and the error says why (usually a permission the person lacks): report it and stop, do not retry.
Needs: permission to edit canvases in the project; spends studio tokens.
Ask for it with words like: "generate", "run the generator", "make an image of", "render the video".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Omit for the open canvas. | |
node | string | Generator node id or handle (G2). Omit for the selected generator, else the generator you last read, else the one the selected reference feeds. Ignored when model is given. | |
model | string | ONE-CALL SETUP: add a new generator for this model (ids as in canvas_add_generator) instead of using an existing node, wire references into it, write prompt, run. Saves the add/name/connect/write/generate round trips. | |
references | list of string or object (source, name, port, replace) | With model or node: what to wire in, in port order. Each entry is a media id (from production_revisions/production_stage: it is placed on the canvas next to the generator), a node id or a handle, or an object { source, name?, port?, replace? }. name is required for citing; port picks a slot (input-3 = VIDEO on Seedance/MiniMax) else the first free one of the right kind. | |
name | string | Name for a generator added with model. | |
folderId | string | Folder for a generator added with model (default: the one the user is looking at). | |
prompt | string | New prompt to write before generating (validated against the card and the wiring). Omit to run the prompt the node already has. With model/references and no prompt, nothing runs: the reply brings the card, wiring and instructions so you can write one, then call again with node and prompt. | |
count | number | Images to produce, 1 to 10 (default: the node's own count). Video and utility nodes make one. | |
aspectRatio | string | ||
resolution | string | ||
quality | one of "auto", "low", "medium", "high", "xhigh", "max" | ||
imageOptions | object (size, background, output_format, output_compression, mask_media_id, mask_url) | GPT Image nodes only. Options the node stores and sends with every generation. | |
negativePrompt | string | ||
durationSeconds | number | Video nodes: clip length. |
Examples
canvas_generate {"node":"G1","prompt":"@Image1 at dusk","count":2}: writes the prompt and queues two results.canvas_generate {"model":"seedance-2.5","references":["M1","M2"],"prompt":"…"}: new generator, wired, queued in one call.
Usually followed by: canvas_generation_status.
canvas_generation_status
Where generations started with canvas_generate stand: queued, running, done or failed, with each result (media id, the picture, and a link to the file valid for 24 hours). Pass wait: true and the server parks the call until they finish (up to a minute), so one call replaces a polling loop; call again with wait if it comes back still running. Several queue ids at once with queueIds. The pictures are 512 px thumbnails by default; size "full" (1024 px) or "max" (1536 px) shows the results at a size you can judge (faces, hands, text, artifacts). When the user wants the picture or the file, give them the link: a chat cannot receive the file from here.
Needs: only a signed-in session.
Ask for it with words like: "is it done", "show me the results", "wait for the generation".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
queueId | string | One generation. | |
queueIds | list of string | Several generations at once (up to 50). | |
wait | boolean | Park until done (up to ~1 minute) instead of answering at once. Default false. | |
size | one of "thumbnail", "full", "max" | Size of the result pictures: thumbnail (512 px, default), full (1024 px) or max (1536 px). Larger pictures come in more pages. | |
imagePage | number | Page of result pictures when they do not all fit one reply (default 1). | |
itemId | string | Omit for the open canvas. |
Example
canvas_generation_status {"queueId":"<queueId>","wait":true}: parks up to 55 s and returns the pictures.
production_estimate
What a batch of generations would cost BEFORE queuing it, from the same estimators the queue charges with: per line and in total, in the studio's TOKENS (the only unit the person sees; never euros). Call it before a batch and tell the person the figure. It is information, not a brake: there is no spending cap unless the person gave one, and the queue takes everything at once (no artificial batches).
Needs: only a signed-in session.
Ask for it with words like: "how much would it cost", "estimate the batch".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
generations | list of object (model, count, durationSeconds, resolution, imageSize, quality, aspectRatio, label) | Yes | One entry per model: { model, count, durationSeconds? (video), resolution? (video: 480p/720p/1080p, 768P/1080P for MiniMax), imageSize? (image: 1K/2K/4K), quality? (gpt-image: low/medium/high), aspectRatio?, label? }. |
Example
production_estimate {"generations":[{"model":"seedance-2.5","count":12,"durationSeconds":5,"resolution":"720p"}]}: tokens per line and in total.
Production
Read and update the production: stages, revisions, threads, statuses and priorities.
production_locate
What an Animanager link points at. Call it FIRST with any link the person pastes (https://animanager.com/?studio=...&project=...&space=...&item=...&task=..., a /canvas/task/... or /canvas/item/... page, a link with &msg=): it answers with the level the link opens (studio, project, space, item or stage), its name and canonical id, every level above it with names and ids, the message it points at if any, and the tool to call next. Every id parameter of the other tools also accepts such a link or a short id, so this is for finding out where a link leads before working there. Reading only.
Needs: only a signed-in session.
Ask for it with words like: "this link", "what does this URL open", "where am I".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
link | string | Yes | The Animanager link as pasted. A short id or slug works too when type says what it is. |
type | one of "studio", "project", "space", "item", "stage" | Only for a bare id or slug: what it is. Omit for a link (it says by itself). |
Example
production_locate {"link":"https://animanager.com/?studio=…&item=…&task=…"}: what the link opens, ids of every level, and the next tool.
Usually followed by: production_stage, production_item, production_space.
production_stage
THE entry point for production work: one stage of an item (a task) with its status, who is assigned to it (the artists on its timeline blocks, by the display name a @mention takes), the studio's status list, its revisions (newest first, each with media links and thumbnails), a page of its thread (chat, comments, revisions, with authors; a REVIEW FEEDBACK comes with its version, media, frame, comment, drawn layers as text, and a picture of the frame with the drawings on top), its pipeline METADATA (the fields the pipeline shows on this stage, with their values: frame ranges, lengths, flags, notes), and a summary of the two canvases around it: the ITEM canvas (where the work is done) and the stage's references canvas. All four sources matter equally: revisions, thread, item canvas, stage canvas. If a stage has no revisions but has a canvas or a conversation, that is the material. Pass the taskId from production_space, production_item or the URL. TEXT: complete by default (textMode "full"): revision bodies, thread messages and metadata values come verbatim with their line breaks, long ones in a BEGIN/END block that names the source and its ids. textMode "summary" gives one-line excerpts, each marked "[shortened: …]" when cut. A reply too long for one message is paged: its last line gives a cursor; call again with the same arguments plus cursor for the rest. Nothing is ever dropped. Rules: work happens on the ITEM canvas; never cite references that are not wired; media is never deleted; publish only to the stage the person named.
Needs: only a signed-in session.
Ask for it with words like: "the stage", "status of the task", "what is on this stage", "latest revision", "the thread".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage instance UUID or an Animanager URL that identifies it. |
thread | number | How many thread messages to include (default 25, max 100). production_thread pages further back. | |
textMode | one of "full", "summary" | full (default): every revision body, thread message and metadata value complete and verbatim, line breaks preserved. summary: one-line excerpts (300 characters for revisions and metadata, 600 for messages), each marked "[shortened: first N of M characters; full text: …]" when cut. | |
cursor | string | Continuation cursor from the last line of the previous reply, when its text did not fit one message. Repeat the other arguments unchanged. Pictures travel with the first page only. | |
images | boolean | Attach the latest revision's media as pictures (default true). | |
size | one of "thumbnail", "full", "max" | Size of the pictures: thumbnail (512 px, default), full (1024 px) or max (1536 px) to judge them closely. | |
imagePage | number | Page of pictures when they do not all fit one reply (default 1). | |
feedbackImages | one of "recent", "all", "none" | Which review feedbacks get their picture attached (the frame with the drawings, texts and references on top): recent (default, the 6 most recent of this page), all, or none (text only). production_feedback gives every feedback of a revision with pictures. |
Example
production_stage {"taskId":"<taskId>"}: status, statuses, revisions, thread, metadata and both canvases.
Usually followed by: production_revisions, production_thread, canvas_context.
production_item
An item (a shot, a character, an asset) with its place (studio, project, space, collection), every stage it has (taskId, status, who is assigned to it, latest revision, pipeline metadata fields with values) and the asset items linked to it. Use it to find the taskId of a stage, or to see where an item stands overall. Metadata values are one-line excerpts here, marked "[shortened: …]" when cut: production_stage with the taskId gives them complete.
Needs: only a signed-in session.
Ask for it with words like: "the item", "the shot", "every stage of".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Yes | Item UUID, short id or Animanager URL. |
Example
production_item {"itemId":"<itemId>"}: its stages with taskIds and where it stands.
Usually followed by: production_stage, workspace_item_status.
production_space
A space (a sequence, a set of characters) with its items and, for each item, its stages with status, assignee, how many revisions and when the last one was posted. Use it to plan a batch: which items have the source stage done and the target stage empty. Space ids come from canvas_list.
Needs: only a signed-in session.
Ask for it with words like: "the sequence", "which items are done", "plan the batch".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
spaceId | string | Yes | Space UUID, short id or Animanager URL. |
Example
production_space {"spaceId":"<spaceId>"}: items with stages, statuses, revision counts.
Usually followed by: production_item, production_run_job.
production_revisions
The revisions of one stage (taskId) or of every stage of an item (itemId), newest first: version number, author, status, time spent, the body text, each media with a link valid 24 hours, thumbnail and media id, and the managed work files (primary work file, package state; versionId for production_revision_files and workspace_get_files). With images: true the pictures come as 512 px thumbnails, or larger with size "full" (1024 px) or "max" (1536 px) when you have to judge them. Media ids are what canvas_place_media and production_publish_revision take. TEXT: complete by default (textMode "full"): revision bodies, thread messages and metadata values come verbatim with their line breaks, long ones in a BEGIN/END block that names the source and its ids. textMode "summary" gives one-line excerpts, each marked "[shortened: …]" when cut. A reply too long for one message is paged: its last line gives a cursor; call again with the same arguments plus cursor for the rest. Nothing is ever dropped.
Needs: only a signed-in session.
Ask for it with words like: "revisions", "versions", "history of the stage", "media of v3".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | A stage instance UUID or Animanager URL. | |
itemId | string | An item UUID, short id or Animanager URL (all its stages). | |
limit | number | At most this many (default 50). | |
textMode | one of "full", "summary" | full (default): every revision body, thread message and metadata value complete and verbatim, line breaks preserved. summary: one-line excerpts (300 characters for revisions and metadata, 600 for messages), each marked "[shortened: first N of M characters; full text: …]" when cut. | |
cursor | string | Continuation cursor from the last line of the previous reply, when its text did not fit one message. Repeat the other arguments unchanged. Pictures travel with the first page only. | |
images | boolean | Attach the media as pictures (default false; production_stage already shows the latest). | |
size | one of "thumbnail", "full", "max" | Size of the pictures: thumbnail (512 px, default), full (1024 px) or max (1536 px) to judge them closely. | |
imagePage | number |
Example
production_revisions {"taskId":"<taskId>","images":true}: every revision with bodies, media links and thumbnails.
Usually followed by: canvas_place_media, production_publish_revision.
production_thread
One page of a conversation: the thread of a studio, project, space, item or stage (for a stage, id is the taskId). Messages come oldest first with author, type (chat, comment, revision), status and attached media ids. A REVIEW FEEDBACK (a comment made in review mode) comes whole: the version, media and frame it targets, its comment, every layer in text (strokes with colour and where they are, texts with position and content, pasted reference images with their media ids) and a PICTURE of the frame with the drawings, texts and references on top, as the reviewer saw it (the most recent 6 per page; production_feedback for all of a revision). hasMoreBefore says whether to page back with anchorId = the first message id and direction "before". Two kinds of paging, both explicit: anchorId/direction fetch OTHER messages; cursor continues the TEXT of this same page when it did not fit one reply. TEXT: complete by default (textMode "full"): revision bodies, thread messages and metadata values come verbatim with their line breaks, long ones in a BEGIN/END block that names the source and its ids. textMode "summary" gives one-line excerpts, each marked "[shortened: …]" when cut. A reply too long for one message is paged: its last line gives a cursor; call again with the same arguments plus cursor for the rest. Nothing is ever dropped.
Needs: only a signed-in session.
Ask for it with words like: "read the conversation", "earlier messages", "what did they say".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
type | one of "studio", "project", "space", "item", "stage" | Yes | |
id | string | Yes | UUID, short id or Animanager URL for the selected type. For a stage, this is its taskId. |
anchorId | string | A message id to page from. | |
direction | one of "before", "after", "around" | Default before. | |
limit | number | Messages per page (default 25, max 100). | |
textMode | one of "full", "summary" | full (default): every revision body, thread message and metadata value complete and verbatim, line breaks preserved. summary: one-line excerpts (300 characters for revisions and metadata, 600 for messages), each marked "[shortened: first N of M characters; full text: …]" when cut. | |
cursor | string | Continuation cursor from the last line of the previous reply, when its text did not fit one message. Repeat the other arguments unchanged. Pictures travel with the first page only. | |
feedbackImages | one of "recent", "all", "none" | Which review feedbacks get their picture attached (the frame with the drawings, texts and references on top): recent (default, the 6 most recent of this page), all, or none (text only). production_feedback gives every feedback of a revision with pictures. | |
size | one of "thumbnail", "full", "max" | Width of the feedback pictures: full (1024 px, also the default) or max (1536 px). | |
imagePage | number | Page of pictures when they do not all fit one reply (default 1). |
Examples
production_thread {"type":"stage","id":"<taskId>","anchorId":"<messageId>","direction":"before"}: the page before that message.production_thread {"type":"stage","id":"<taskId>","feedbackImages":"all","size":"max"}: every review feedback of the page with its picture.
Usually followed by: production_feedback.
production_stage_tables
The data tables of one stage's revisions, newest first: for each CSV a revision carries, its revision (version, messageId, versionId, date), file name, tableKey, status (ready, or invalid with the errors), the full schema (every column with label, type, currency, decimals, aggregate, better, thresholds) and the rows as JSON arrays in column order (numbers as numbers, empty cells null). Use it to read earlier days of a tracking table before deciding what to do next; tableKey keeps to one kind of table. With metric (a numeric column key) it returns that column over time instead: one series per row, oldest first, with the latest value, its change against the previous table and 7 back, whether that is better or worse, and the table total. Reading only; same access as production_stage. DATA TABLES: attach a CSV (UTF-8, comma separated, header row) and optionally a schema file with the same base name and .table.json (seguimiento.csv + seguimiento.table.json: title, tableKey, rowKey, columns with type text/long_text/number/integer/currency/percent/date/status/media/link, currency, decimals, aggregate, better, thresholds, rowStatusColumn, hierarchy, timeColumn); Animanager shows it as a table with totals, colours and changes against the previous revision's table of the same tableKey. Limits: 5 MB, 5000 rows, 80 columns. The reply lists any problem; the revision still publishes with the CSV as a plain file, so fix and publish again. Contract: docs/data-tables.md in the Animanager repository; production_stage_tables reads the tables back.
Needs: only a signed-in session.
Ask for it with words like: "data table", "read the table", "results of earlier days", "csv of the revisions", "tracking table", "yesterday's numbers", "compare with the previous report", "over time", "trend", "cost per result per ad", "improving or getting worse".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage instance UUID or an Animanager URL that identifies it. |
tableKey | string | Only tables with this tableKey (the schema's tableKey, or the CSV base name without .csv). | |
limit | number | At most this many tables (default 10, max 50; with metric the last this many, default 30, max 90). | |
rows | boolean | Include the rows (default true). false lists the tables with their schema only. | |
metric | string | A numeric column key (cost_per_result): that column of the tables of one kind (tableKey, default the newest kind) over time, a series per row (rowKey), null where a row or the column is missing that day. For "how does X evolve", "which ads improve". | |
cursor | string | Continuation cursor from the last line of the previous reply, when its text did not fit one message. Repeat the other arguments unchanged. |
Examples
production_stage_tables {"taskId":"<taskId>","tableKey":"seguimiento","limit":7}: the last seven tables of that kind with schema and rows.production_stage_tables {"taskId":"<taskId>","metric":"cost_per_result","limit":14}: that column over the last 14 tables, one series per row, with changes and whether each is better or worse.production_stage_tables {"taskId":"<taskId>","rows":false}: which tables the stage has, schema only.
Usually followed by: production_publish_revision.
production_feedback
Every review feedback of one revision (versionId, from production_revisions or production_stage) or one feedback message (messageId, from the thread), complete: which version, media and frame each one targets, the reviewer's comment, and every layer as data (strokes with colour and where they are, texts with position and content, pasted reference images with their media ids) and as a PICTURE: the frame of the media with the drawings, texts and references composed on top, exactly as the reviewer saw it, one per frame the layers land on. Reference images are media of the message too (canvas_media, canvas_place_media take their ids). Reading only.
Needs: only a signed-in session.
Ask for it with words like: "the review", "what did the client draw", "feedback on v3", "the notes on the frame", "annotations", "scribbles", "what did they mark".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
versionId | string | The revision whose feedbacks to read (versionId in production_stage and production_revisions). | |
messageId | string | One feedback message (id in production_thread), instead of a whole revision. | |
size | one of "thumbnail", "full", "max" | Width of the pictures: full (1024 px) or max (1536 px, default). thumbnail composes at 1024 px too: strokes are unreadable smaller. | |
images | boolean | Attach the composed pictures (default true). | |
imagePage | number | Page of pictures when they do not all fit one reply (default 1). | |
textMode | one of "full", "summary" | full (default): comments and texts verbatim. summary: one line per feedback. | |
cursor | string | Continuation cursor from the last line of the previous reply. |
Examples
production_feedback {"versionId":"<versionId>"}: every feedback of that revision: version, media, frame, comment, layers, and the frame with the drawings on top.production_feedback {"messageId":"<messageId>","size":"max"}: one feedback message with its picture at 1536 px.
Usually followed by: canvas_place_media, production_post_comment.
production_publish_revision
Publishes a revision on a stage, signed by the studio's bot "Anibot", with a summary, optional media and a status. The body is exactly your summary plus the report bullets: never put the person's name in it, the app shows "Anibot for <person>" from the record. Media is optional: a revision with a summary and no media is fine, as when a person posts one (unless the stage requires media: production_stage shows it); never attach unrelated media, such as the screenshot of a report, just to have an attachment. STRICTLY only when the person asked to publish in THIS request: set userAskedToPublish true only then; never on your own initiative. If they did not ask, leave the work on the canvas and ask whether to publish, and with which status. STATUS: if none was named, ask which one IN YOUR FIRST REPLY, before any work; no answer or "go ahead" means no statusId (the stage keeps its status). A status change WITHOUT a revision is production_post_comment, never an empty revision. Overwriting a human revision is normal: no warnings. Costs in TOKENS, never euros.
Needs: an explicit request by the person in this turn; permission to post revisions on the stage.
Ask for it with words like: "publish", "post the revision", "deliver v2", "publish a table", "publish the csv", "daily report table".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL to publish to. Only the one the person named. |
mediaIds | list of string | Media ids of the result (from the canvas or from other revisions), in display order. Optional: omit or [] for a text-only revision, which then needs a summary. | |
files | list of string | Absolute paths of files on this computer to attach after mediaIds (mediaIds may then be []; a frame or sheet saved by canvas_video_frame / canvas_video_sheet, a render, a data table): uploaded as attachments of this post, never put on a canvas. DATA TABLES: attach a CSV (UTF-8, comma separated, header row) and optionally a schema file with the same base name and .table.json (seguimiento.csv + seguimiento.table.json: title, tableKey, rowKey, columns with type text/long_text/number/integer/currency/percent/date/status/media/link, currency, decimals, aggregate, better, thresholds, rowStatusColumn, hierarchy, timeColumn); Animanager shows it as a table with totals, colours and changes against the previous revision's table of the same tableKey. Limits: 5 MB, 5000 rows, 80 columns. The reply lists any problem; the revision still publishes with the CSV as a plain file, so fix and publish again. Contract: docs/data-tables.md in the Animanager repository; production_stage_tables reads the tables back. | |
summary | string | What was made and how, for the people on the stage. Short. The body is this summary plus the report bullets, exactly as written (no name prefix). Required when there is no media. | |
report | object (wallTimeMinutes, generations, tokens, sources) | Account of the work, rendered as bullets after the summary (wall time, generations per model, tokens used, sources): { wallTimeMinutes?, generations?: [{ model, count, tokens? }], tokens?, sources?: string[] }. Tokens as canvas_generate reported them. | |
statusId | string | The status the person chose (ids in production_stage). Omit to keep the stage's current status (when they did not answer or told you to go ahead). | |
userAskedToPublish | boolean | Yes | true ONLY if the person explicitly asked to publish in this request. |
Examples
production_publish_revision {"taskId":"<taskId>","mediaIds":["<mediaId>"],"summary":"Layout pass","statusId":"<statusId>","userAskedToPublish":true}: a revision signed Anibot with those media.production_publish_revision {"taskId":"<taskId>","summary":"- Fixed: bullets show again in the chat","statusId":"<statusId>","userAskedToPublish":true}: a text-only revision (a fix report): no media needed.production_publish_revision {"taskId":"<taskId>","mediaIds":[],"files":["/abs/seguimiento.csv","/abs/seguimiento.table.json"],"summary":"Results of 30 Sep","userAskedToPublish":true}: a revision with a data table; the reply says whether the CSV reads as a table.
Usually followed by: production_stage.
production_post_message
Posts a chat message as the bot ("Anibot") in a thread: studio, project, space, item or stage (id = taskId). Optionally with media ids attached. For telling a team what was done or asking a question there; not for publishing work, which is production_publish_revision, and not for changing a stage's status, which is production_post_comment (a chat message never carries a status). To tag a team member write @ followed by their display name exactly as Animanager shows it (e.g. "@Ana García", names with spaces work); the server turns it into a real tag that notifies them, and the reply says who was tagged and which @names matched nobody. @everyone reaches the whole studio. When answering an agent request (a "/anibot <function> ..." request a host claimed through /v1/agent-requests), pass its requestId so the person's replies to this message reach that host.
Needs: permission to post in the thread.
Ask for it with words like: "tell the team", "post in the thread", "tag Ana".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
type | one of "studio", "project", "space", "item", "stage" | Yes | |
id | string | Yes | UUID, short id or Animanager URL for the selected type. |
text | string | Yes | |
mediaIds | list of string | ||
files | list of string | Absolute paths of files on this computer to attach after mediaIds (mediaIds may then be []; a frame or sheet saved by canvas_video_frame / canvas_video_sheet, a render): uploaded as attachments of this post, never put on a canvas. | |
requestId | string | The agent request (UUID) this message belongs to; replies to it are routed to the host holding that request. |
Example
production_post_message {"type":"stage","id":"<taskId>","text":"@Ana García the layout is up"}: a chat message as Anibot; tags resolve by display name.
Usually followed by: production_post_comment.
production_post_comment
Posts a COMMENT on a stage as the bot ("Anibot"): the message type that sets the stage's status WITHOUT publishing a revision. Use it to report progress, to hand the stage over after a publish (e.g. to WFA or LEAD), or to leave a note on the stage; never invent a revision for that. statusId (ids in production_stage) only when the person chose that status: a comment without it changes nothing. The stage status becomes the one of the latest comment or revision that carries a status, as when a person comments. Media ids attach as in production_post_message; @display names tag members the same way. Needs "Post comments" on the project (and "Change status" when statusId is given).
Needs: permission to post comments on the stage (and to change its status when statusId is given).
Ask for it with words like: "set the status", "move the stage to WFA", "change the status without publishing", "leave a comment on the stage", "report progress", "hand over to the lead".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL. |
text | string | The comment. May be empty when only the status changes. | |
statusId | string | The status the person chose (ids in production_stage). Omit to leave the stage status as it is. | |
mediaIds | list of string | Media ids to attach, in display order. | |
files | list of string | Absolute paths of files on this computer to attach after mediaIds (mediaIds may then be []; a frame or sheet saved by canvas_video_frame / canvas_video_sheet, a render): uploaded as attachments of this post, never put on a canvas. |
Examples
production_post_comment {"taskId":"<taskId>","text":"Blocking done, ready for review","statusId":"<statusId>"}: a comment as Anibot that moves the stage to that status, no revision created.production_post_comment {"taskId":"<taskId>","text":"Halfway through the fx pass"}: a comment that leaves the status as it is.
Usually followed by: production_stage.
production_set_metadata
Writes pipeline metadata values on a stage (taskId): the fields production_stage and production_item list, by fieldKey. Values belong to the ITEM, so a field shown on several stages has one value; the type is the field's (number, text, long_text, boolean; null clears). ONLY when the person asked to set that metadata in this request; never on your own initiative. Returns the fields as they stand afterwards.
Needs: an explicit request by the person in this turn.
Ask for it with words like: "set the frame range", "write the metadata", "fill the pipeline field".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage instance UUID or Animanager URL whose fields to write. |
values | list of object (fieldKey, value) | Yes | One entry per field: { fieldKey, value }. |
Example
production_set_metadata {"taskId":"<taskId>","values":[{"fieldKey":"frame_end","value":120}]}: writes fields by key; values belong to the item.
production_set_priority
Sets the priority of one or several items (shots, assets, ads): 5 very high, 4 high, 3 normal (the default), 2 low, 1 very low. Items are listed by priority first in the tree and grid. ONLY when the person asked to change the priority in this request, or an instruction they gave authorizes it (for example "rate the campaigns"); never on your own initiative. Needs the person's permission to edit those items; nothing is changed if any item is refused. reason (optional, short) is posted as a message in each item's thread signed by Anibot.
Needs: an explicit request by the person in this turn.
Ask for it with words like: "set the priority", "make it high priority", "rate the campaigns", "lower the priority", "prioritize these shots".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | One item: its UUID or Animanager link. Use itemIds for several. | |
itemIds | list of string | Several items (UUIDs or links), at most 200. | |
priority | integer | Yes | 5 very high, 4 high, 3 normal, 2 low, 1 very low. |
reason | string | Optional short reason (at most 500 characters), posted in each item's thread as Anibot. |
Examples
production_set_priority {"itemId":"<itemId>","priority":5,"reason":"Best CTR this week"}: very high; the reason goes to the item thread as Anibot.production_set_priority {"itemIds":["<itemId>","<itemId>"],"priority":2}: several items to low at once.
Usually followed by: production_space.
production_run_job
Runs "produce stage B from stage A" for a whole space as a SERVER JOB instead of doing it by hand item by item: for every item whose source stage has a revision with media and that has the target stage, the server places the source media on the item canvas (in a folder), adds the image generator (imageModel) wired to the stills, writes promptTemplate, generates, then the video generator (videoModel) wired to the still and the source clip, generates, and publishes as the bot when publish.statusId is given. Zero agent round trips per item. Use it for batches and for anything repetitive; keep the hand tools for work that needs judgment per item. First call with estimateOnly true and tell the person the figure; run only after they agree. scaffoldOnly prepares the canvases (references placed, generators wired, no prompt, nothing generated) so prompts can be written by hand or with canvas_generate afterwards.
Needs: permission to edit canvases in the project; spends studio tokens.
Ask for it with words like: "do it for the whole space", "produce layout from storyboard", "batch".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
spaceId | string | Yes | Space UUID, short id or Animanager URL. |
sourceStageId | string | Yes | Stage id of the source (production_space shows stage ids per item). |
targetStageId | string | Yes | Stage id to produce. |
imageModel | string | Image model for the still(s): nano-banana-2, gpt-image-2.5-sunburst, gpt-image-2.5-flare, gpt-image, seedream-pro… Omit to skip the image step. | |
videoModel | string | Video model for the clip: seedance-2.5, minimax-h3-max, veo-3.1, kling-motion… Omit to skip the video step. | |
promptTemplate | string | The prompt written on every item's generator, citing references the way the model expects (@Image1, "Video 1"). Required unless scaffoldOnly. | |
videoPromptTemplate | string | Prompt for the video generator when it should differ from promptTemplate. | |
scaffoldOnly | boolean | Prepare canvases only; generate nothing. | |
publishStatusId | string | Publish each result as a revision with this status, signed by the bot. ONLY if the person asked to publish. | |
itemIds | list of string | Limit to these items (default: every qualifying item of the space). | |
count | number | Stills per item, 1 to 4 (default 1). | |
estimateOnly | boolean | Do not create the job: report which items would run, which are skipped and why, and the cost. |
Example
production_run_job {"spaceId":"<spaceId>","sourceStageId":"<stageId>","targetStageId":"<stageId>","imageModel":"nano-banana-2","promptTemplate":"…","estimateOnly":true}: which items would run and the cost; run without estimateOnly.
Usually followed by: production_job_status.
production_job_status
Where a job started with production_run_job stands: overall status, counts, and every item with its step (placing, generating image, generating video, published, skipped with reason, failed with error). Pass wait true to park up to a minute before answering. jobId omitted with spaceId lists the recent jobs of the space.
Needs: only a signed-in session.
Ask for it with words like: "how is the job going", "stop the job".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string | ||
spaceId | string | With no jobId: list recent jobs for this space UUID, short id or Animanager URL. | |
wait | boolean | ||
cancel | boolean | Stop the job (items not started are cancelled; running generations finish on the canvas). |
Example
production_job_status {"jobId":"<jobId>","wait":true}: status per item; cancel: true stops it.
Files
Published work files and the local workspace of the Desktop Helper.
production_revision_files
The managed work files of one revision (its package): the primary work file(s), the files and exports it published with their paths, sizes and hashes, the files that changed in that revision versus the previous one, and the folder they belong to. With links true each file gets a download link (valid 24 hours) for use outside the workspace; Get Files into the workspace is workspace_get_files. versionId comes from production_revisions or production_stage. Reading only.
Needs: only a signed-in session.
Ask for it with words like: "files of the revision", "what did v3 publish", "download the package", "work file", "download the work file", "download the blend", "link to the workfile", "which blender saved the work file", "blender the blend was made with".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
versionId | string | Yes | The revision's version UUID (production_revisions shows it as versionId). |
links | boolean | Include a download link per file (default false). | |
cursor | string | Continuation cursor from the last line of the previous reply. |
Examples
production_revision_files {"versionId":"<versionId>"}: primaries, files, exports, the changed files of that revision, and the Blender, addon and Helper it was published with.production_revision_files {"versionId":"<versionId>","links":true}: with a 24 h link per file.
Usually followed by: workspace_get_files, workspace_blender.
production_stage_files
The files currently published on a stage across all its revisions, as Get Files sees them: one section at a time (primary work files, files, exports), paged explicitly with offset and limit, each with path, size, version and the revision it came from. Start with the summary (no section) to see the counts. Reading only.
Needs: only a signed-in session.
Ask for it with words like: "files on the stage", "current files", "what is published".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL. |
section | one of "primary", "files", "exports" | Which section to list. Omit for the counts of all three. | |
offset | number | First row to return (default 0). | |
limit | number | Rows per page (default 200, max 1000). |
Examples
production_stage_files {"taskId":"<taskId>"}: counts per section.production_stage_files {"taskId":"<taskId>","section":"files","offset":0,"limit":200}: one page of a section.
production_stage_inputs
The pipeline inputs a stage consumes (its dependencies: the upstream stages and assets wired into it in the pipeline), each with its consumption mode (linked or appended collections, files, continuation), the master version that would be fetched (pinned or latest), and whether it can be fetched now and why not. Their ids are what workspace_get_files takes as inputs. Reading only.
Needs: only a signed-in session.
Ask for it with words like: "dependencies", "inputs of the stage", "what does it consume", "upstream", "consumption mode".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL. |
Example
production_stage_inputs {"taskId":"<taskId>"}: each input with mode, master version and whether it can be fetched.
Usually followed by: workspace_get_files.
workspace_status
The local workspace of a stage on this computer, through the Helper: its folder, whether it exists and is prepared, how many files it holds, its state, the layout (where the work file goes and what its name must be, files/, exports/, the reserved .animanager folder), a work-file package another agent may have in progress, and the freshness of its pipeline inputs (up to date, outdated, never downloaded, broken). Needs the Helper running here. Reading only.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "local workspace", "where is the folder", "where do I save my files", "where does the work file go", "is it up to date locally", "inputs outdated", "is someone else publishing".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL. |
Example
workspace_status {"taskId":"<taskId>"}: the folder, its layout (work file name, files/, exports/), its state and the freshness of its inputs.
Usually followed by: workspace_prepare, workspace_get_files, workspace_changes.
workspace_locate
Which stage a local path belongs to, through the Helper: from the .animanager marker of the workspace folder that contains it, or, inside the workspace base folder, from the server's folder structure. Returns the stage (taskId, itemId, names), its workspace folder, and where the path sits in it (the root, files/, exports/, or a subfolder that should not exist). A path inside the workspace base that no stage owns was created by hand: do not work there. Reading only.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "which stage is this folder", "what stage does this path belong to", "am I in the right folder", "folder created by hand".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | Yes | An absolute local path (a folder or a file) on the computer running the Helper. |
Examples
workspace_locate {"path":"/Users/me/Animanager/Studio/Proj/Shots/Shot 010/Layout"}: the stage that owns the path and where the path sits in its layout.workspace_locate {"path":"/Users/me/Animanager/Studio/Proj/Shots/agent-42"}: no stage: a folder created by hand inside the workspace base.
Usually followed by: production_stage, workspace_status.
workspace_item_status
Every stage of an item with its local workspace folder on this computer, through the Helper: the taskId and name of each stage, its absolute folder under the workspace base, whether it exists and is prepared, its canonical base name and work-file families, and the item folder the stage folders share. One call instead of reading each stage or walking the disk. Needs the Helper running here (1.0.54+). Reading only: nothing is created.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "every stage folder of the item", "where are the workspaces of this item", "which stage folders exist", "item folder".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId | string | Yes | The item UUID, short id or Animanager URL. |
Example
workspace_item_status {"itemId":"<itemId>"}: each stage with its folder, whether it exists, its base name and families, and the item folder they share.
Usually followed by: workspace_status, workspace_prepare.
workspace_prepare
Creates the local workspace folder of a stage on this computer through the Helper: the folder in the studio's structure under the workspace base, its files/ and exports/ subfolders, and the starter work file when the stage has a work-file family with a starter and nothing published yet and no continuation input. This is the "Local files" button of the stage in the app (the local structure does not exist until someone presses it or calls this): call it before creating any file for a stage whose workspace_status says the folder does not exist. Idempotent: an existing workspace is left as it is. Returns the local path and the layout: where the work file goes and what it must be called, where the other files go, and the reserved folder.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "prepare the workspace", "local files", "local files button", "open local folder", "create the local folder", "create the local structure", "the folder does not exist yet", "no local folder", "create the work file", "where do I save my files", "set up the folder".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL. |
createInitialWorkFile | boolean | Create the starter work file when nothing is published yet (default true). | |
openFolder | boolean | Open the folder in the file manager (default false). |
Example
workspace_prepare {"taskId":"<taskId>"}: the folder with its structure (the app's Local files), its starter file when the family has one, and the layout: where to save what.
Usually followed by: workspace_get_files.
workspace_get_files
Get Files into the local workspace through the Helper. Three forms. A revision: versionId (from production_revisions) downloads that revision's work files into the stage's workspace folder, optionally only some paths, and with inputs also its pipeline inputs. The stage's published files: taskId plus latest true brings the current masters of the stage across every section (work files, files/, exports/) in one call, the way "Get all files" on the stage does. A stage's inputs: taskId plus inputs (ids from production_stage_inputs) fetches the masters of those dependencies the way "Get files" on the stage does. Before writing anything the revision and latest forms inspect the workspace: files already identical are skipped, and files that differ locally are CONFLICTS: the call stops and lists them unless proceed is true, and then the local file is never overwritten (the new one lands as a safe copy next to it, and the reply names the copies). Long downloads return a jobId to follow with workspace_job_status.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "get files", "get all files", "get the files of the stage", "download the work file", "download the workfile of the stage", "download the revision", "bring the published files", "fetch the inputs", "bring v2 locally", "update dependencies".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | The stage UUID or Animanager URL (required for the latest and inputs forms; derived from the revision otherwise). | |
versionId | string | The revision to get (version UUID). | |
latest | boolean | With taskId: get the files currently published on the stage, every section, in one call. | |
paths | list of string | Only these relative paths of the revision (default: every file of the revision). | |
inputs | list of string | Pipeline inputs to fetch too (sourceUpstreamId values from production_stage_inputs). With no versionId this is the whole request. | |
proceed | boolean | Download even when conflicts were found (local files are kept; the new versions become safe copies). | |
openFolder | boolean | Open the folder in the file manager when done (default false). |
Examples
workspace_get_files {"versionId":"<versionId>"}: that revision into the workspace; conflicts stop it.workspace_get_files {"taskId":"<taskId>","latest":true}: the files published on the stage, every section, in one call.workspace_get_files {"versionId":"<versionId>","proceed":true}: download anyway, local files kept as they are.workspace_get_files {"taskId":"<taskId>","inputs":["stage:<taskId>"]}: the masters of those pipeline inputs.
Usually followed by: workspace_job_status, workspace_status.
workspace_changes
What changed in the local workspace of a stage since its last published revision, through the Helper: every candidate file with its status (new, changed, unchanged, pending hash, invalid), whether it can be uploaded and whether the app would select it by default, the primary work file(s), and the files a work file depends on. This is the selection workspace_publish_revision takes as files. Needs the Helper running here. Reading only.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "what changed locally", "files to upload", "unpublished changes", "select files", "upload work files".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL. |
cursor | string | Continuation cursor from the last line of the previous reply. |
Example
workspace_changes {"taskId":"<taskId>"}: new, changed and unchanged files with the default selection, and a package another agent has in progress.
Usually followed by: workspace_publish_revision.
workspace_publish_revision
Publishes a revision WITH managed work files from the local workspace of this computer, the way the app does with the Helper: stages the selected local files as a work-file package, reserves the revision on the stage in the name of the PERSON the Helper is signed in as (with an agent record naming this client), attaches previews (review media: media ids from the canvas, or local files uploaded first) and attachments, and lets the Helper upload the work files in the background. asBot true signs the revision as the studio's bot "Anibot" instead, the person on record as requester (the app shows "Anibot for <person>"; never write their name into the text), exactly like production_publish_revision; the person must be allowed to publish there themselves, and their Helper still uploads and finalises the files. Use asBot when an agent publishes on someone's behalf (build installers, batch deliveries); leave it off when the person is publishing their own work through you. STRICTLY only when the person asked to publish in THIS request (userAskedToPublish true). A revision whose work files are still uploading is NOT finished: it is finished when the package status is "attached". Follow the package with workspace_job_status { taskId, packageId }. Retrying after a failure: pass the same messageId and packageId the reply gave and nothing is duplicated. Stage requirements (work files, media, text: production_stage shows them) are checked first. For a bot-signed revision with media only use production_publish_revision. A distribution file (an installer such as tool-1.2.3.vsix, or a .zip) becomes the work file of a stage that has no work-file family by copying it to the ROOT of that stage's workspace (workspace_prepare gives the folder), then workspace_changes (it is listed as a primary), workspace_publish_revision { files: [its name], userAskedToPublish: true } and workspace_job_status until attached; the revision then lists it among its work files under its published name <name>_revisionNNN.<ext> (production_revision_files { links: true } gives the download link).
Needs: the Animanager Helper running on this computer; an explicit request by the person in this turn; permission to post revisions on the stage.
Ask for it with words like: "publish with work files", "upload work files", "upload the blend", "post the revision with files", "deliver the workspace".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | The stage UUID or Animanager URL to publish to. Only the one the person named. |
summary | string | Yes | The revision text: what changed, for the people on the stage. |
statusId | string | The status the person chose (ids in production_stage). Omit to keep the stage's current status. | |
files | list of string | Relative paths of local files to publish as work files (from workspace_changes). Omit for the app's default selection: every new or changed file that can be uploaded. | |
previews | list of string | Review media, in display order: media ids (a canvas render, a revision media) or absolute paths of local image/video files, which are uploaded first. | |
attachments | list of string | Supporting files for the message: media ids or absolute local paths. An attachment is NOT a managed work file. A CSV (with its optional .table.json of the same base name) shows as a data table; the reply says whether it reads as one (docs/data-tables.md). | |
timeSpentMinutes | number | Time spent, in minutes, ONLY when the person stated it. Never invent hours; omit otherwise. | |
messageId | string | For a retry only: the messageId of the earlier attempt, so the same revision is reused. | |
packageId | string | For a retry only: the packageId of the earlier attempt, so the files are not staged again. | |
asBot | boolean | true to sign the revision as the studio bot "Anibot" with the person on record as requester (body "Person: ..."), as production_publish_revision does. Default false: the person signs. Needs a Helper with workspaceRevisionAsBot (1.0.54+); the same messageId and packageId on a retry. | |
userAskedToPublish | boolean | Yes | true ONLY if the person explicitly asked to publish in this request. |
Examples
workspace_publish_revision {"taskId":"<taskId>","summary":"Blocking pass","statusId":"<statusId>","files":["shot.blend"],"previews":["/abs/playblast.mp4"],"userAskedToPublish":true}: reserves the revision as the person and uploads the files in the background.workspace_publish_revision {"taskId":"<taskId>","summary":"Poster PNGs","files":["files/poster.png"],"userAskedToPublish":true}: a files-only revision on a stage without a work file family.workspace_publish_revision {"taskId":"<taskId>","summary":"Tool 1.2.3 installer","files":["tool-1.2.3.vsix"],"asBot":true,"userAskedToPublish":true}: signed by Anibot with the person on record as requester, the way production_publish_revision signs; the person's Helper still uploads the files.
Usually followed by: workspace_job_status, production_stage.
workspace_job_status
Where a Helper operation stands. A job (jobId from workspace_get_files or workspace_changes): queued, running, completed with its result, or failed with the error; wait true parks up to a minute. A work-file upload package (taskId + packageId from workspace_publish_revision): its status and phase, progress in files and bytes, the revision it belongs to, and the error when it failed; cancel true cancels the revision while its work files are not finished (it goes away as if it was never posted), retry true retries a failed one. A revision whose work files are still uploading is NOT finished: it is finished when the package status is "attached".
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "is the download done", "is the upload finished", "progress", "cancel the upload", "retry the upload", "is blender installed yet".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string | ||
taskId | string | With packageId: the stage UUID or Animanager URL the package belongs to. | |
packageId | string | ||
wait | boolean | Park up to a minute while it is still running (default false). | |
cancel | boolean | Package only: cancel the revision while its work files are not finished. The Helper stops, and the revision, its version, its notifications and its uploaded files go, as if it was never posted; the stage status goes back. Only the person who posted it; a finished upload cannot be canceled (delete the revision instead). | |
retry | boolean | Package only: retry a failed upload now. |
Examples
workspace_job_status {"jobId":"<jobId>","wait":true}: a download, scan or Blender install job.workspace_job_status {"taskId":"<taskId>","packageId":"<packageId>","wait":true}: a work-file upload package; attached = finished.
workspace_blender
Which Blender opens a work file on this computer, through the Helper. Lists every Blender build installed here: the portable builds Animanager keeps under <workspace base>/blender (installed from the studio's Asset Library or registered by a render job), the ones the addon reported, and the system installs. Names the version required: the one the revision was published with (versionId: the revision records its Blender, addon and Helper versions), the one a local .blend was saved with (path: read from the file header), or the one you name (version). Says which installed build matches (same major.minor: a .blend should be opened with the Blender that saved it; a newer build converts it on save) and, when none does, whether the studio's Asset Library holds a downloadable build for this computer: the item "Blender X.Y" in project "Asset Library" > space "Software" > collection "Blender", with archives named blender-<x.y.z>-<macos|windows|linux>-<arm64|x64>.<dmg|zip|tar.xz> in its files. install: true downloads and installs that build under <workspace base>/blender (a Helper job, minutes; follow with workspace_job_status) and registers it, only when no installed build matches. Needs the Helper running here (1.0.54+). Local paths are on the computer running the Helper and this MCP, not on the server.
Needs: the Animanager Helper running on this computer.
Ask for it with words like: "which blender", "open the blend", "blender build", "which blender build", "blender executable", "portable blender", "install blender", "blender is not installed", "blender in the asset library", "run blender", "launch blender".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
versionId | string | A revision (version UUID from production_revisions): its published Blender version is what is required, and its studio is where the Asset Library is looked up. | |
path | string | An absolute local path of a .blend on the computer running the Helper: its header says which Blender saved it. | |
version | string | A Blender version to look for, X.Y or X.Y.Z (e.g. "4.2" or "4.2.3"). | |
taskId | string | A stage UUID or Animanager URL, so the studio is known for the Asset Library lookup when no versionId is given. | |
install | boolean | Install the Asset Library build of the required version when no installed build matches (default false). | |
wait | boolean | With install: park up to a minute for the install job (default true). |
Examples
workspace_blender {"versionId":"<versionId>"}: the Blender the revision was published with, the installed builds here (Animanager portable ones marked), the one to use, and the Asset Library when none matches.workspace_blender {"path":"/Users/me/Animanager/Studio/Proj/Shots/Shot 010/Layout/Shot_010_Layout_v000.blend"}: the version a local .blend was saved with, from its header, and the build to open it with.workspace_blender {"version":"4.2","taskId":"<taskId>","install":true}: installs Blender 4.2 from the studio's Asset Library under <workspace base>/blender when no installed build matches.
Usually followed by: workspace_job_status, workspace_get_files.
production_edit_revision
Corrects a revision the way the revision menu does: its text, its status, the time spent, or its review media (mediaIds replaces the whole list, in order). For the author of the revision, or a moderator when the studio bot posted it. ONLY when the person asked to correct that revision in this request (userAskedToEdit true); never on your own initiative, and never to change the work itself (publish a new revision for that). Time only as the person stated it.
Needs: an explicit request by the person in this turn.
Ask for it with words like: "edit the revision", "fix the text of v2", "change the status of the revision", "correct the time".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
messageId | string | Yes | The revision's message id (production_revisions shows it). |
text | string | New text of the revision. | |
statusId | string | New status (ids in production_stage). | |
timeSpentMinutes | number | Corrected time spent in minutes, only as the person stated it. | |
mediaIds | list of string | The review media the revision should have, in order (replaces the current list). | |
userAskedToEdit | boolean | Yes | true ONLY if the person explicitly asked for this correction in this request. |
Example
production_edit_revision {"messageId":"<messageId>","text":"Blocking pass, fixed timing","userAskedToEdit":true}: corrects the text; status, time and media likewise.
production_delete_revision
Deletes a revision (its message, its version and its work-file package link) the way the revision menu does, through the same rule the app applies: its author, or a moderator, and nobody else. ONLY when the person asked to delete that exact revision in this request (userAskedToDelete true). Media files are never deleted; the stage status is recomputed from what remains. Irreversible.
Needs: an explicit request by the person in this turn.
Ask for it with words like: "delete the revision", "remove v3", "undo the publish".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
versionId | string | Yes | The revision's version UUID (production_revisions shows it as versionId). |
userAskedToDelete | boolean | Yes | true ONLY if the person explicitly asked to delete this revision in this request. |
Example
production_delete_revision {"versionId":"<versionId>","userAskedToDelete":true}: removes the revision the way the menu does; media stay.
Render farm
Follow the render queue and its nodes, launch renders from published revisions and get their files.
farm_queue
The studio's render queue, as the Farm page shows it: each job with its status, frames done, priority, item and stage, revision, scene and dates, the totals per status, and the render nodes with their state. Filter by item or stage, by status, by text, or to the jobs the person launched (mine). Acts as the person: the studio must have the render farm, and their role must let them use it. Reading only.
Needs: the render farm switched on for the studio and the role permission to use it.
Ask for it with words like: "render queue", "farm queue", "what is rendering", "is my render done", "which renders failed", "render nodes", "farm status", "my renders", "renders of this shot".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
studioId | string | Studio UUID or Animanager link. Optional with taskId or itemId, or when the person is in one studio. | |
itemId | string | Only the jobs of this item (any stage): UUID or link. | |
taskId | string | Only the jobs of this stage: taskId or link. | |
status | list of one of "queued", "running", "paused", "failed", "completed", "cancelled" | Only these statuses (running = rendering now). Default: all. | |
mine | boolean | Only the jobs the person launched. | |
search | string | Text in the job name, revision, item, stage or scene, like Search jobs on the Farm page. | |
sort | one of "status", "newest", "oldest" | status (default: rendering, queued, paused, failed, then finished), newest or oldest. | |
limit | number | Jobs per reply (default 30, max 200). | |
offset | number | Jobs to skip, to page further. | |
nodes | one of "active", "all", "none" | Render nodes to list: active (default: switched on and reporting), all, or none. |
Examples
farm_queue {}: every render job of the studio with status, frames done and priority, and the render nodes.farm_queue {"itemId":"<itemId>","status":["failed"]}: the failed renders of one item.farm_queue {"mine":true,"sort":"newest"}: the renders the person launched, newest first.
Usually followed by: farm_job, farm_files.
farm_job
One render job in full, what Job details shows on the Farm page: its status and frames, priority, the revision, item and stage it renders, its settings (scene, blend, Blender version, engine and samples, frames and chunk size, output, resolution, render region, compositing), its folder, its times, and every chunk with its frames, status, node, attempts, render time and, for a failed one, its error and the end of its Blender log. Acts as the person: the studio must have the render farm, and their role must let them use it. Reading only.
Needs: the render farm switched on for the studio and the role permission to use it.
Ask for it with words like: "render job details", "why did the render fail", "chunk errors", "render settings of the job", "render log", "which node rendered".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string | Yes | The render job id (jobId in farm_queue). |
cursor | string | Continuation cursor from the last line of the previous reply, when it did not fit one message. |
Example
farm_job {"jobId":"<jobId>"}: settings, folder, times and every chunk with its node, attempts and errors.
Usually followed by: farm_files, farm_launch.
farm_launch
Launches a Blender render on the studio's farm from a published revision, like Launch render on its revision card. ONLY when the person asked to launch a render in THIS request (userAskedToLaunch true); never on your own initiative. preview: true shows the settings it would use without launching (no ask needed). The settings start as the revision's Save for Animanager snapshot of the scene has them; you can change the same things the dialog lets the person change: scene, frames, engine, samples, resolution, render region, priority and chunk size. A revision saved before the add-on recorded its render settings cannot be launched: the reply says "This revision has no render settings snapshot yet". Launching needs the permission to submit render jobs in that project. Anibot posts in the stage chat when the job is queued and when it finishes.
Needs: the render farm switched on for the studio and the role permission to use it; an explicit request by the person in this turn; permission to submit render jobs in the project.
Ask for it with words like: "launch a render", "send to the farm", "render on the farm", "render this revision", "send renders", "render the frames", "farm render".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
versionId | string | The revision to render (versionId from production_revisions or production_stage). | |
taskId | string | A stage (taskId or link): renders its latest revision. Use versionId for an older one. | |
blend | string | When the revision has several blends: the item number (1, 2…) or the file name. Default: the most recently saved, like the dialog. | |
scene | string | Scene to render; its own saved settings are loaded first. Default: the scene saved as current. | |
frameStart | integer | First frame (from 1). | |
frameEnd | integer | Last frame. | |
frameStep | integer | Render every Nth frame (default as saved, usually 1). | |
engine | string | CYCLES, BLENDER_EEVEE_NEXT, BLENDER_EEVEE or BLENDER_WORKBENCH (Cycles, Eevee Next, Eevee, Workbench). | |
samples | integer or string | Samples. With Workbench, the anti-aliasing: OFF, FXAA, 5, 8, 11, 16 or 32. | |
resolutionX | integer | Width in pixels. | |
resolutionY | integer | Height in pixels. | |
resolutionPercentage | integer | Scale in percent (100 = full size). | |
region | object (mode, left, right, bottom, top, crop) | Render region: mode "scene" (the border saved in the blend, default), "full-frame", or "custom" with left, right, bottom, top in percent and crop (crop the output to the region). | |
priority | one of "Critical", "Very High", "High", "Elevated", "Normal", "Reduced", "Low", "Very Low" | Queue priority (default Normal). | |
chunkSize | integer | Frames a machine takes at a time (default 8). | |
preview | boolean | true: answer with the settings it would launch, launch nothing. | |
userAskedToLaunch | boolean | true ONLY if the person explicitly asked to launch this render in this request. |
Examples
farm_launch {"versionId":"<versionId>","preview":true}: the settings it would use, from the revision's Save for Animanager snapshot; launches nothing.farm_launch {"versionId":"<versionId>","frameStart":1001,"frameEnd":1048,"samples":64,"priority":"High","userAskedToLaunch":true}: launches with those changes, the rest as saved.
Usually followed by: farm_queue, farm_job.
farm_files
The files of a render job: the rendered frames (or previews, logs, metadata), each with its frame, size and a download link valid 24 hours. download: true has the Animanager Helper on this computer bring the frames into the stage's local folder (Farm/Renders/<job>), the same as Get renders on the Farm page: frames changed locally are kept. Works while the job renders too, with the frames delivered so far. Acts as the person: the studio must have the render farm, and their role must let them use it.
Needs: the render farm switched on for the studio and the role permission to use it.
Ask for it with words like: "download renders", "get renders", "render files", "frames of the render", "files of previous renders", "link to the render", "bring the renders locally", "render output folder".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string | Yes | The render job id (jobId in farm_queue). |
kind | one of "render", "preview", "log", "metadata", "manifest", "all" | render (default: the output frames), preview, log, metadata, manifest or all. | |
links | boolean | A 24 h download link per file (default true). | |
offset | number | Files to skip, to page further. | |
limit | number | Files per reply (default 200, max 1000). | |
download | boolean | true: download the renders into the stage's local folder with the Helper. | |
openFolder | boolean | With download: open the folder when done (default false). | |
wait | boolean | With download: wait up to a minute for it (default true); workspace_job_status follows it after. |
Examples
farm_files {"jobId":"<jobId>"}: its rendered frames with 24 h links.farm_files {"jobId":"<jobId>","download":true}: the frames into Farm/Renders of the stage's local folder through the Helper.
Usually followed by: workspace_job_status, workspace_status.
Help
The catalogue itself, as the agent sees it.
animanager_help
The catalogue of this MCP, generated from the tools themselves: what every tool does, when to use it, its parameters, what it needs (the Helper, an open canvas, an explicit ask, a permission) and whether that is available right now. No arguments: the index of every tool by group, paged explicitly, with who you act as and whether the Helper is running. query: search by what you want to do ("get files", "publish with workfiles", "frame at 3 s") and get the matching tools with the reason they matched. tool: one tool in full with examples and the tools that usually follow. group: one group. Call it whenever you are unsure which tool exists for a task, or after an error that says a tool, a permission or the Helper is missing.
Needs: only a signed-in session.
Ask for it with words like: "what can you do", "which tool", "list the tools", "help", "is the helper running", "who am I".
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | What you want to do, in words. Matched against names, hints, intent phrases, descriptions and parameters. | |
tool | string | A tool name: its full card (description, parameters, requirements, availability, examples, next tools). | |
group | string | A group name from the index (READ, EDIT, ORGANIZE, GENERATE, PRODUCTION, FILES, FARM, HELP): its tools with hints and parameters. | |
page | number | Page of the index (default 1). The footer says how many pages there are. | |
pageSize | number | Tools per page of the index (default 80, max 200). |
Examples
animanager_help {}: every tool by group, who you act as, whether the Helper runs.animanager_help {"query":"publish with workfiles"}: the tools for that intent.animanager_help {"tool":"production_stage"}: parameters, needs, examples.
Prompts
Prompts start a whole workflow by name from the agent: in Claude Code and Cursor as /mcp__animanager__<name>, in Claude Desktop from the prompt picker.
brief
Start a production job: asks what to do, on which space and stages, with which models and optional budget; estimates before running.
No arguments: the agent asks what it needs.
stage-to-stage
Generic pipeline step: from what a source stage holds (storyboard, layout, animatic, previs...) produce the target stage on the item canvas (images, then video), for one item or a whole space. Publishes only if asked.
| Argument | Required | Description |
|---|---|---|
spaceId | Yes | The space to work in (canvas_list shows ids). |
sourceStage | Yes | Name of the source stage (e.g. Storyboard, Layout, Animatic). |
targetStage | Yes | Name of the stage to produce (e.g. Layout, Previs, Animation). |
imageModel | Image model for the still(s): gpt-image-2.5-sunburst, gpt-image-2.5-flare, gpt-image, nano-banana-2, seedream-pro... | |
videoModel | Video model for the clip(s): seedance-2.5, minimax-h3-max, kling-motion, veo-3.1... | |
items | Item titles to limit the run to, comma separated. Empty = every item whose source stage has material. | |
budgetTokens | Optional spending budget in tokens for the whole run. Empty = no cap. | |
publish | "yes" only if the person wants the results published as revisions; then also give statusName. | |
statusName | Status for the published revisions (only with publish = yes). |
item-report
A written status report of one item: every stage, its status, latest revisions, open threads, and what the canvases hold.
| Argument | Required | Description |
|---|---|---|
itemId | Yes | The item to report on (production_space or canvas_list show ids). |
continuity-check
Compares the latest revisions of one stage across the items of a space (look, framing, timing) and lists the discontinuities.
| Argument | Required | Description |
|---|---|---|
spaceId | Yes | The space to check. |
stage | Yes | Name of the stage whose latest revisions to compare. |
