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
generation.write— Makes, edits, imports, shares and deletes media in the account.
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
imageobject (type: "upload") or object (type: "generation") · requiredpromptstring · optionalat most 4000 characters · default ""
modelstring · optionalone of "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-1 or integer · optionalresolutionstring · optionalone of "360p", "480p", "720p", "768p", "1080p", "4K"
aspect_ratiostring · optionalDefaults 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.
one of "adaptive", "16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16", "21:9"
generate_audioboolean · optionalpresetsobject · optionalfields: style, motion, lighting, framing
recreate_ofstring · optionaluuid
subjectsarray of string · optionalNames 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.
at most 4 items
runs_onstring · optionalWho 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.
one of "credits", "replicate", "fal", "siray", "runware", "higgsfield", "sunra", "comfy"
first_frameobject (type: "upload") or object (type: "generation") · optionallast_frameobject (type: "upload") or object (type: "generation") · optionalreference_imagesarray of object (type: "upload") or object (type: "generation") · optionalat most 30 items
reference_videosarray of object (type: "upload") or object (type: "generation") · optionalThe 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.
at most 10 items
reference_audiosarray of object (type: "upload") or object (type: "generation") · optionalat most 10 items
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
- list_recipes
Search and page through the RECIPE catalog — templates that ask you questions and then make something.
- get_recipe
Get one recipe by id — a look or a guided recipe, with its recommended models, creative guidance, and media slots.
- generate_with_recipe
Create one image or clip with a guided recipe — an arm or reprompt recipe.