animate_image

Animate image

Animate an existing image or upload into a clip. Describe the motion in prompt; the image is frame zero, so it must show everyone who acts, at the height and distance the action needs: a clip cannot move what its first frame does not show. First search list_recipes for a matching motion recipe and read it with get_recipe. Prefer generate_with_recipe when its inputs and output fit; otherwise read the chosen model's guide and animate directly here.

Scope

Behaviour

Writes
Creates or changes items in the caller's own account.
Adds or updates
Adds or updates; nothing the caller already has is deleted or overwritten.
Stays in the account
Stays inside the caller's private Kuro account: any media provider it calls acts on Kuro's account, and the result is visible to no one else.

Inputs

Example call

A tools/call request with the required arguments only, each a placeholder read off the schema. Replace them before sending.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "animate_image",
    "arguments": {
      "image": {
        "type": "upload",
        "upload_id": "00000000-0000-4000-8000-000000000000"
      }
    }
  }
}

Input schema

As the server sends it in tools/list.

{
  "type": "object",
  "properties": {
    "image": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "upload"
            },
            "upload_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "type",
            "upload_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "generation"
            },
            "generation_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "type",
            "generation_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "prompt": {
      "type": "string",
      "maxLength": 4000,
      "default": ""
    },
    "model": {
      "type": "string",
      "enum": [
        "seedance-2.5",
        "seedance-2.0",
        "seedance-2.0-fast",
        "seedance-2.0-mini",
        "grok-imagine-video-1.5",
        "veo-3.1",
        "veo-3.1-fast",
        "veo-3.1-lite",
        "gemini-omni-1.1",
        "kling-v3-omni-video",
        "kling-v3-video",
        "happyhorse-1.0",
        "wan-3",
        "wan-3-prime",
        "gen-4.5",
        "p-video",
        "p-video-2",
        "flux-3",
        "minimax-h3-max",
        "p-video-avatar",
        "p-video-animate",
        "p-video-replace",
        "omni-human-1.5",
        "kling-avatar-v2",
        "kling-v3-motion-control",
        "sync-lipsync-2",
        "kling-lip-sync",
        "genjutsu-motion-transfer",
        "genjutsu-object-swap"
      ]
    },
    "duration_seconds": {
      "anyOf": [
        {
          "type": "number",
          "const": -1
        },
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 1800
        }
      ]
    },
    "resolution": {
      "type": "string",
      "enum": [
        "360p",
        "480p",
        "720p",
        "768p",
        "1080p",
        "4K"
      ]
    },
    "aspect_ratio": {
      "type": "string",
      "enum": [
        "adaptive",
        "16:9",
        "4:3",
        "3:2",
        "1:1",
        "2:3",
        "3:4",
        "9:16",
        "21:9"
      ],
      "description": "Defaults to 9:16 (vertical). Confirm the shape with the user when the destination is unclear — a feed, a banner and a phone screen want different ones. With a first frame, leave it out: the clip takes the frame's own shape, and a ratio that disagrees with the frame is refused."
    },
    "generate_audio": {
      "type": "boolean"
    },
    "presets": {
      "type": "object",
      "properties": {
        "style": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            {
              "type": "null"
            }
          ]
        },
        "motion": {
          "anyOf": [
            {
              "$ref": "#/properties/presets/properties/style/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "lighting": {
          "anyOf": [
            {
              "$ref": "#/properties/presets/properties/style/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        },
        "framing": {
          "anyOf": [
            {
              "$ref": "#/properties/presets/properties/style/anyOf/0"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "recreate_of": {
      "type": "string",
      "format": "uuid"
    },
    "subjects": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "description": "Names or ids of the account's Subjects (list_subjects). The server supplies each one's face and description — seated against the model's capacity — so do not also attach pictures of them."
    },
    "runs_on": {
      "type": "string",
      "enum": [
        "credits",
        "replicate",
        "fal",
        "siray",
        "runware",
        "higgsfield",
        "sunra",
        "comfy"
      ],
      "description": "Who pays: \"credits\", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose."
    },
    "first_frame": {
      "$ref": "#/properties/image"
    },
    "last_frame": {
      "$ref": "#/properties/image"
    },
    "reference_images": {
      "type": "array",
      "items": {
        "$ref": "#/properties/image"
      },
      "maxItems": 30
    },
    "reference_videos": {
      "type": "array",
      "items": {
        "$ref": "#/properties/image"
      },
      "maxItems": 10,
      "description": "The video this clip is driven by — a source performance to copy, or the take a mouth is re-synced in. Uploads and clips you generated alike, in the shape list_media returns."
    },
    "reference_audios": {
      "type": "array",
      "items": {
        "$ref": "#/properties/image"
      },
      "maxItems": 10
    }
  },
  "required": [
    "image"
  ],
  "additionalProperties": false
}

Related tools

Every tool· This page as Markdown