[{"name":"animate_mesh","description":"From a static 3D model to an animated one in one call: SkinTokens predicts the skeleton and skin weights, the rig is prepared as a UniMate asset on this Space (joint labels, facing, canonical T-pose) and UniMate generates a 60-frame motion from the prompt (or a chained expansion from `prompts`). Returns JSON with the three stages (rig, asset, animation), a URL for every output file (animated GLB, rigged GLB, rig.json, previews, joints JSON, motion .npy) and ready-made follow-up calls. Two ZeroGPU calls (about 20-60 s + 10 s), billed to the caller; the asset preparation adds 10-30 s of CPU. Give exactly one of mesh_url, example, rig_job_id, asset.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"caption in the training style: start with \"An object\" and describe one motion, e.g. \"An object walks forward.\"."},"mesh_url":{"type":"string","description":"http(s) URL of a .glb, .gltf, .obj or .fbx model (up to 60 MB)."},"example":{"type":"string","description":"id of a bundled mesh from list_examples (giraffe, fox, cesium_man, rigged_figure)."},"rig_job_id":{"type":"string","description":"an r_ job id from rig: skip the rigging and start from that rig."},"asset":{"type":"string","description":"an asset id from list_assets (u_... or unitree_go2, eagle, shark): skip rigging and preparation."},"prompts":{"type":"string","description":"2-6 captions separated by | for one long chained motion (replaces prompt; 60 + 50 frames per extra caption)."},"num_beams":{"type":"integer","description":"SkinTokens beam-search width 1-20 (default 10): more beams, better skeletons, slower.","default":10},"rig_seed":{"type":"integer","description":"seed of the rigging; -1 (default) picks a random one.","default":-1},"keep_skeleton":{"type":"boolean","description":"keep the armature already in the file and predict only the skin weights (default false)."},"preserve_original":{"type":"boolean","description":"transfer the rig onto the untouched input mesh so textures and world scale survive (default false)."},"labels_json":{"type":"string","description":"JSON object {joint name: label} correcting the automatic joint labels (see get_asset for names and vocabulary)."},"face_right":{"type":"string","description":"joint name that defines the asset's right side (with face_left); default: chosen automatically."},"face_left":{"type":"string","description":"joint name that defines the asset's left side."},"num_samples":{"type":"integer","description":"1-4 independent motion samples (default 1).","default":1},"cfg_scale":{"type":"number","description":"classifier-free guidance 1.0-15.0 (default 3.0; 5-7 when the prompt is ignored).","default":3.0},"seed":{"type":"integer","description":"seed of the motion; -1 (default) picks a random one.","default":-1},"overlap":{"type":"integer","description":"frames pinned between consecutive segments when prompts are chained, 1-59 (default 10).","default":10},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"animate_mesh"}},{"name":"rig","description":"Rig a 3D mesh with SkinTokens: predict a skeleton and per-vertex skin weights, and return the result as JSON with a URL for every output file: the rigged GLB (mesh + armature + weights), rig.json (joint names, hierarchy, rest positions, skin statistics), skin.npz, preview.png (look at it with view_rig) and preview.glb (visible bones + a test motion). The r_ job id then feeds prepare_asset or animate_mesh. Takes 20-60 s of ZeroGPU time, billed to the caller.","inputSchema":{"type":"object","properties":{"mesh_url":{"type":"string","description":"http(s) URL of a .glb, .gltf, .obj or .fbx file (up to 60 MB). Leave empty when using example."},"example":{"type":"string","description":"id of a bundled mesh from list_examples (giraffe, fox, cesium_man, rigged_figure) instead of mesh_url."},"num_beams":{"type":"integer","description":"beam-search width 1-20 (default 10): more beams give better skeletons and take longer.","default":10},"seed":{"type":"integer","description":"integer seed for reproducibility; -1 (default) picks a random one.","default":-1},"keep_skeleton":{"type":"boolean","description":"keep the armature already in the file and predict only the skin weights (default false)."},"preserve_original":{"type":"boolean","description":"transfer the rig onto the untouched input mesh so textures and world scale survive (default false)."},"postprocess":{"type":"boolean","description":"voxel-based mask on the skin weights, slower (default false)."},"influences":{"type":"integer","description":"bones kept per vertex in the GLB, 1-8 (default 4).","default":4}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"rig"}},{"name":"prepare_asset","description":"Make a rigged model animatable: turn a rig made here (rig_job_id), a rigged glb/gltf/fbx at a URL, or an earlier asset (asset_id, to correct its labels or facing) into a UniMate asset with the upstream rig_preprocess pipeline: Blender import, joint labels from one anatomical vocabulary, the facing pair, the canonical T-pose, the topology condition and the canonical GLB. About 10-30 s of CPU, no GPU. Returns the asset as JSON: id (use it in animate / expand), joint names and labels, facing pair, flagged joints, URLs of preview.png (check facing and labels; view_asset shows it) and annotation.json.","inputSchema":{"type":"object","properties":{"rig_job_id":{"type":"string","description":"an r_ job id from rig (leave the other sources empty)."},"mesh_url":{"type":"string","description":"http(s) URL of a rigged .glb, .gltf or .fbx (one armature with a skinned mesh)."},"asset_id":{"type":"string","description":"a u_ asset to re-annotate with the corrections below (a new asset id is returned)."},"labels_json":{"type":"string","description":"JSON object {joint name: label}, e.g. {\"bone_3\": \"Left Thigh\"}; the vocabulary is in get_asset."},"face_right":{"type":"string","description":"joint on the asset's right side that defines its facing (with face_left); empty: automatic."},"face_left":{"type":"string","description":"joint on the asset's left side."},"body_axis":{"type":"boolean","description":"true when face_right / face_left are a head / tail pair (snakes, fish)."},"rest_rotation":{"type":"string","description":"axis turns that stand up a rest pose authored lying down or upside down, e.g. \"x180\" or \"x90,y180\"."}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"prepare_asset"}},{"name":"animate","description":"Generate a 60-frame (2 s) motion for an asset from a text prompt with UniMate, and return the result as JSON with a URL for every output file: the animated GLB (mesh + skeleton + animation), the raw motion features (.npy), per-frame joint positions (JSON), a skeleton preview MP4 and a 6-frame contact sheet PNG (view_animation shows it). Takes a few seconds of ZeroGPU time, billed to the caller.","inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"asset id from list_assets: a prepared \"u_...\" id, or \"unitree_go2\" (quadruped robot), \"eagle\" (bird), \"shark\" (fish)."},"prompt":{"type":"string","description":"short caption in the training style: start with \"An object\" and describe one motion, e.g. \"An object walks forward.\" or \"An object flaps its wings.\"."},"num_samples":{"type":"integer","description":"1-4 independent samples of the same prompt (default 1).","default":1},"cfg_scale":{"type":"number","description":"classifier-free guidance scale 1.0-15.0 (default 3.0; 5-7 when the prompt is ignored, lower for calmer motion).","default":3.0},"seed":{"type":"integer","description":"integer seed for reproducibility; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"animate"}},{"name":"inbetween","description":"Motion in-betweening: keep the listed frames of an earlier motion (same asset) exactly and regenerate every other frame under a prompt, with UniMate's replacement-style flow sampling (upstream --inbetween). Returns the same JSON as animate (60 frames, file URLs) plus the reference and the resolved keep_frames.","inputSchema":{"type":"object","properties":{"reference_job_id":{"type":"string","description":"a_ job id of an earlier animate / inbetween / edit_joints / expand result (kept 24 h); for an animate_mesh result use its animation stage's job id."},"prompt":{"type":"string","description":"caption for the regenerated frames, training style (\"An object jumps in place.\")."},"keep_frames":{"type":"string","description":"comma-separated frame indices to hold (0-59; negatives count from the end). Default \"0,-1\" keeps the first and last frame; \"0,1,2,-3,-2,-1\" keeps three at each end.","default":"0,-1"},"reference_sample":{"type":"integer","description":"which sample of the reference result (default 0)."},"reference_start":{"type":"integer","description":"first frame of the 60-frame reference window (default 0; use it to pick a window of a longer expand result)."},"num_samples":{"type":"integer","description":"1-4 samples (default 1).","default":1},"cfg_scale":{"type":"number","description":"guidance 1.0 < x <= 15.0 (default 3.0).","default":3.0},"seed":{"type":"integer","description":"integer seed; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"inbetween"}},{"name":"edit_joints","description":"Text-guided joint editing: keep the listed joints of an earlier motion exactly (all 60 frames) and regenerate the other joints under a new prompt (upstream --motion_edit --keep_joints), e.g. keep the legs of a walking clip and ask for waving arms. Returns the same JSON as animate plus the kept and edited joints.","inputSchema":{"type":"object","properties":{"reference_job_id":{"type":"string","description":"a_ job id of an earlier result of the same asset (kept 24 h)."},"prompt":{"type":"string","description":"caption for the regenerated joints, training style (\"An object waves its arms.\")."},"keep_joints":{"type":"string","description":"comma-separated joint names or anatomical labels from get_asset (case-insensitive); a label such as \"Left Thigh\" selects every joint with that label. Every name must match."},"reference_sample":{"type":"integer","description":"which sample of the reference result (default 0)."},"reference_start":{"type":"integer","description":"first frame of the 60-frame reference window (default 0)."},"num_samples":{"type":"integer","description":"1-4 samples (default 1).","default":1},"cfg_scale":{"type":"number","description":"guidance 1.0 < x <= 15.0 (default 3.0).","default":3.0},"seed":{"type":"integer","description":"integer seed; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"edit_joints"}},{"name":"expand","description":"Motion expansion: chain several prompts into one continuous long motion (upstream --motion_expand). One 60-frame segment per prompt; each further segment starts pinned to the last `overlap` frames of the previous one, so the result has 60 + (60 - overlap) x (prompts - 1) frames (3 prompts: 160 frames, 5.3 s) in one GLB / .npy / JSON. Returns the same JSON as animate plus prompts, overlap and the frame range of each segment. num_samples x prompts is limited to 8 per call (about 7 s of GPU time each).","inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"asset id from list_assets."},"prompts":{"type":"array","items":{"type":"string"},"description":"2-6 captions in order, training style, e.g. [\"An object walks forward.\", \"An object turns around.\", \"An object sits down.\"]."},"overlap":{"type":"integer","description":"frames pinned between consecutive segments, 1-59 (default 10).","default":10},"num_samples":{"type":"integer","description":"1-4 samples of the whole chain (default 1).","default":1},"cfg_scale":{"type":"number","description":"guidance 1.0 < x <= 15.0 (default 3.0).","default":3.0},"seed":{"type":"integer","description":"integer seed; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"expand"}},{"name":"list_assets","description":"The skeletons this service can animate: the bundled rigs (unitree_go2, eagle, shark) and every asset prepared on this Space (u_... ids), each with joint names and anatomical labels (both usable in edit_joints' keep_joints), hierarchy, facing pair, annotation flags and rest-pose GLB URL. New assets come from rig + prepare_asset, or from animate_mesh.","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"list_assets"}},{"name":"get_asset","description":"One asset in full: joints with labels, parents and review flags, the facing pair and its alternatives, notes from the preparation, the label vocabulary hint, file URLs (preview.png, annotation.json, source) and the follow-up calls (animate, correct labels).","inputSchema":{"type":"object","properties":{"asset_id":{"type":"string","description":"an id from list_assets."}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"get_asset"}},{"name":"list_examples","description":"The bundled example meshes (id, description, license, URL) that rig and animate_mesh take by id, the bundled skeletons, and the real results this Space generated from them with the options that reproduce each.","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"list_examples"}},{"name":"get_result","description":"A finished result again (kept 24 h): an r_ rig, an a_ motion or a p_ animate_mesh result with its three stages; inputs, options, file URLs, timings, provenance.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","description":"the job_id returned by rig, animate, inbetween, edit_joints, expand or animate_mesh."}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"get_result"}},{"name":"view_rig","description":"Look at a rig: the preview PNG (mesh with the predicted skeleton drawn over it, front and side views) of a rig result, or of the rig stage of an animate_mesh result.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","description":"an r_ job id from rig, or a p_ job id from animate_mesh."}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"view_rig"}},{"name":"view_animation","description":"Look at a generated motion: a PNG contact sheet of 6 skeleton frames spanning the whole clip (left to right) of one sample of a motion result, or of the animation stage of an animate_mesh result.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","description":"an a_ job id from animate, inbetween, edit_joints or expand, or a p_ job id from animate_mesh."},"sample":{"type":"integer","description":"which sample (0-based, default 0)."}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"view_animation"}},{"name":"view_asset","description":"Look at what the motion model is told about an asset: its canonical T-pose with the facing pair and the forward direction, a front view, and every joint with its label (preview.png of a prepared asset). Check that the forward arrow points where the character faces and that left / right labels are on the right limbs.","inputSchema":{"type":"object","properties":{"asset_id":{"type":"string","description":"a prepared u_ asset id."}}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"view_asset"}},{"name":"service_info","description":"What this service does, every parameter with its default, limits, both models' provenance and licenses, and who pays the GPU time for this connection.","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"service_info"}},{"name":"guide","description":"The full agent guide (same as /llms.txt): workflow, parameters, outputs, errors, examples.","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"guide"}}]