Skip to main content
Glama

Generate character animations

generate_character_animation

PAID, and the cost MULTIPLIES BY THE NUMBER OF ANIMATIONS (each is its own image-to-video call, ~400 credits at defaults). This is real motion — a walk cycle, an attack, an idle bob — not the 1-frame still that create_animation_from_pose produces. Read the character's gameType and use the standard animation names for it (get_character shows what already exists); the project gameType is irrelevant after character creation. A topdown character inside a platformer project still uses top-down prompts and directional behavior. A name that already exists is NEVER replaced: the server allocates the next numeric slug (walk → walk_2 → walk_3), and the returned animations list contains the resolved names. Ask the user which animations they want before spending: 4 animations cost 4x. Every animation defaults to 2 seconds, including walks, runs, attacks, and loops. Omit animDurations and customAnims[].duration unless the user explicitly asks for a different clip length; never infer a longer duration from the motion or from the fact that it loops. If the character came from a 2x2 create, there are at least four siblings and animating is per-character: show the user the characterPreviews from get_job and have them pick one before you spend. For multi-direction sets, mirrorAnims gives you FREE flipped copies of a direction generated in the same call (walk_left from walk_right) — prefer a real generation when the character is asymmetric, because a held item switches sides under a mirror. The server chooses the release-new-animation-pipeline rollout for this API-key owner; there is no flag argument to set. When the user wants stored poses as the actual video endpoints, call list_character_poses and pass their ids through poseFirstFrameIds / poseLastFrameIds. Omit those maps to let the server plan anchors automatically; never pass a pose URL. Before each new clip the server classifies the effective anchor as empty-handed, held, or unclear and adds the matching inventory-preservation lock automatically; there is no inventory argument to send. For topdown/isometric clips with targetFacings, automatic planning uses one cached standing internal 360 rotation for every action, including custom actions; its one-time surcharge is included in the dry-run quote. Do NOT call generate_character_turn merely to prepare an animation — that explicit visible turn is a separate action. When that internal 360 is needed, the job pauses at waiting_approval before any animation video starts. Present directionalPoseReview from get_job and call approve_directional_poses only after the user accepts all eight candidates. The dry-run response includes animationPipelineAssignmentToken; copy it verbatim into the confirmed call so the quoted rollout decision cannot change while the user is deciding. If it expires, run the same dry-run again. The same response includes preflight with per-animation resolved names, durations and credits; setup and total credits; model resolution; runtime frame size; and explicit unknown-until-generated frame count/FPS/ETA. Show that structured preview instead of inventing precision. For free treatment accounts only, the server may allow ONE activation request beyond the 600-credit rolling limit when this call requests exactly one fresh playable animation (no reuse, edit, or mirror), the full preflight total is at most 1000 credits, fewer than two distinct net-paid generation jobs occurred in the rolling window, and no playable animation has succeeded before. Required internal pose/360 setup is included in that same claimed job and remains authorized across its approval pause. This is server-decided and shown in dryRun.freeCreditLimit.firstAnimationAllowance. Explicit turn/turn_ rotations, reuse, edit, mirror, and multi-animation requests do not qualify; a failed fully-refunded claim is reusable only if it produced no playable animation. Never split calls, omit requested work, or retry to game it. Returns { jobId, animations } — poll get_job. When the job reaches done, it returns an animationQualityGate requiring get_character; finish that review/repair loop before exporting or saying the animation is ready. A prompt that composes too long for the model is rejected with PROMPT_TOO_LONG before anything is charged, and the response names the animation. Check isTemplate on that entry: false means YOUR text is what is long, so shorten it; true means the shipped template is over the ceiling and no prompt you send can fix it — report it rather than retrying. DEFAULTS TO A COST PREVIEW — see the dryRun argument.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dryRunNoDEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits and get an explicit yes for that amount, THEN re-call with dryRun:false to actually spend.
animationsYesAnimation slugs to generate, e.g. ["walk_right","idle"]. REQUIRED — each one is a separate paid video call.
videoModelNoOverride the video model.
animPromptsNoPer-animation extra guidance, keyed by animation slug. Folded into that animation's composed prompt.
characterIdYesCharacter id.
customAnimsNoDefine animations that are NOT part of the game type's standard set, keyed by the new slug.
mirrorAnimsNoFREE mirrored copies, keyed newName → sourceName (e.g. { "walk_left": "walk_right" }). The source must be in this call's animations list; its fresh frames are flipped in the same job at no extra cost.
animDurationsNoUSER-REQUESTED OVERRIDES ONLY (2-10s). Omit this field by default: every animation, including walks and loops, defaults to 2s. Never choose a longer clip unless the user explicitly requested that duration. Longer clips cost more.
targetFacingsNoCamera-relative facing per animation slug (n, ne, e, se, s, sw, w, nw). Use this for custom actions and any standard action whose slug does not itself encode the intended direction.
idempotencyKeyNoOptional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot double-dispatch.
poseLastFrameIdsNoOptional per-animation END anchor pose ids, keyed by animation slug. Resolve ids with list_character_poses and use only status:"done" poses. The same pose id may be used for both endpoints of a loop.
poseFirstFrameIdsNoOptional per-animation START anchor pose ids, keyed by animation slug. Resolve ids with list_character_poses and use only status:"done" poses. Omit an entry to let the server choose/generate its anchor.
animationPipelineAssignmentTokenNoOpaque server proof returned by this tool's dry-run. Copy it verbatim into the confirmed dryRun:false call; never create or edit it. If the server reports ANIMATION_PIPELINE_ASSIGNMENT_EXPIRED, preview again.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as a mutating, non-idempotent, open-world operation, and the description adds enormous context beyond that: cost multiplies per animation, name collisions allocate numeric slugs (walk → walk_2), the server decides the pipeline rollout with no flag, inventory-preservation locks are added automatically with no argument, the job pauses at waiting_approval for the internal 360, and responses include an animationQualityGate requiring get_character. The PROMPT_TOO_LONG isTemplate distinction and free-treatment allowance rules further disclose edge behaviors that annotations could never capture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded well (cost warning first, then core purpose) and every sentence carries real information, but at roughly 700+ words it is a wall of text. The free-treatment credit policy is a multi-condition paragraph that could have been condensed to 'check dryRun.freeCreditLimit.firstAnimationAllowance; server-decided,' and the workflow steps could be tightened. The content justifies its existence; the sheer volume hurts scannability for an agent trying to extract the key constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 13 parameters, nested objects, no output schema, paid execution, and a multi-stage workflow, the description is remarkably complete: it covers the return shape ({ jobId, animations }, poll get_job), the dry-run preview contents, error codes (PROMPT_TOO_LONG, ANIMATION_PIPELINE_ASSIGNMENT_EXPIRED, ENTITY_BUSY/402/429), retry semantics via idempotencyKey, the post-done quality gate loop, and explicitly preempts hallucinated arguments (no pipeline flag, no inventory argument). Nothing an agent needs to safely invoke this tool is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes far beyond the schema: it attaches cost semantics to animations (each is a separate ~400-credit call), mandates that animDurations/customAnims[*].duration are user-requested overrides only with a hard 2s default, reveals mirrorAnims are FREE, requires poses be resolved via list_character_poses with status:'done', forbids passing pose URLs, and demands animationPipelineAssignmentToken be copied verbatim with expiry handling. This converts flat schema properties into actionable agent behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with an unambiguous definition: this produces real motion (walk cycle, attack, idle bob), explicitly contrasted with 'the 1-frame still that create_animation_from_pose produces.' It names the resource (character animations), the action (generate), and the key differentiator (actual video motion vs still), making sibling discrimination trivial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Exceptional when/when-not guidance: explicitly says 'Do NOT call generate_character_turn merely to prepare an animation,' names create_animation_from_pose as the alternative for stills, and specifies when to use mirrors vs real generation (asymmetric characters), when to use stored poses, and when to ask the user (before any spend). It even instructs the dry-run-to-confirm workflow and the 2x2 sibling selection procedure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, and the descriptions are extremely detailed with cross-references (e.g., animate_asset vs frame_animation vs generate_character_animation). A few pairs like reprocess_asset vs revise_asset could be confused initially, but their descriptions and use cases are explicit enough to prevent misselection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_project, get_asset, cancel_job). Verbs are imperative and nouns are appropriately singular/plural, making the API predictable and readable.

Tool Count2/5

At 41 tools, the server is far beyond the 15-25 range considered reasonable for most APIs. While the domain is broad (project, assets, characters, animations, jobs, exports, credits), the sheer number creates a heavy surface that may overwhelm agents and suggests the API could be consolidated into higher-level operations.

Completeness4/5

The tool set covers the full creative pipeline: project creation, asset/character generation, animation (both AI and frame-based), revisions, exports, and job management. Minor gaps include lack of delete operations for assets/characters/projects and no listing of all jobs, but these are not critical for the core workflow and are likely intentional for a generative art platform.

Resources