generate_clip
Generate clip
Start a short video clip generation. This spends credits, or runs on the user's own key (get_credits), and returns immediately.
Search list_recipes and read promising matches with get_recipe before choosing a model. Prefer a close-fitting recipe through generate_with_recipe; use this direct tool when none fits, with parameters from the chosen model's guide.
Presets add Style, Motion, Lighting and Framing through the presets map. Name the account's Subjects in subjects — the server seats each one's face.
Several models require a reference image, video or audio track — list_models has each model's durations, resolutions and required_inputs; create_upload, import_media or request_upload_link bring media in.
One call is one shot. Longer motion: carry the last frame into the next call (extract_video_frame), then join_clips. Speech is the exception: each line of at most 15 seconds starts from the same portrait, never a chained frame.
Models (credits for 5s at 720p):
- seedance-2.5: ~96.5
- seedance-2.0: ~75
- seedance-2.0-fast: ~62.5
- seedance-2.0-mini: ~37.5
- grok-imagine-video-1.5: ~33.5, needs image
- veo-3.1: ~83.5
- veo-3.1-fast: ~42
- veo-3.1-lite: ~21
- gemini-omni-1.1: ~62.5, length set by input
- kling-v3-omni-video: ~70
- kling-v3-video: ~70
- happyhorse-1.0: ~58.5
- wan-3: ~42
- wan-3-prime: ~58.5
- gen-4.5: ~50
- p-video: ~8.5
- p-video-2: ~12.5
- flux-3: ~71
- minimax-h3-max: ~33.5
- p-video-avatar: ~10.5, needs image+audio, length set by input
- p-video-animate: ~12.5, needs image+video, length set by input
- p-video-replace: ~12.5, needs image+video, length set by input
- omni-human-1.5: ~67, needs image+audio, length set by input
- kling-avatar-v2: ~22, needs image+audio, length set by input
- kling-v3-motion-control: ~29.5, needs image+video, length set by input
- sync-lipsync-2: ~21, needs video+audio, length set by input
- kling-lip-sync: ~6, needs video, length set by input
…and 2 more; list_models has every model.
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.
Credits
What the tool's description says about credits, verbatim.
- This spends credits, or runs on the user's own key (get_credits), and returns immediately.
Inputs
idempotency_keystring · optionalOptional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused.
at least 1 character · at most 128 characters
promptstring · 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": "generate_clip",
"arguments": {}
}
}Input schema
As the server sends it in tools/list.
{
"type": "object",
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Optional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused."
},
"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": {
"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
}
]
},
"last_frame": {
"$ref": "#/properties/first_frame"
},
"reference_images": {
"type": "array",
"items": {
"$ref": "#/properties/first_frame"
},
"maxItems": 30
},
"reference_videos": {
"type": "array",
"items": {
"$ref": "#/properties/first_frame"
},
"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/first_frame"
},
"maxItems": 10
}
},
"additionalProperties": false
}Related tools
- get_credits
Use only the account's existing entitlements: when work is unavailable, explain the limit without offering purchases, upgrades, subscriptions or checkout…
- 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.
- list_models
Read the full capability envelope for the models a room can run: aspect ratios, durations, resolutions, reference capacities, which inputs a model require…
- create_upload
Reserve an upload and get a presigned URL to PUT the bytes to.
- import_media
Fetch a file the client cannot upload itself and store it as an account upload.
- request_upload_link
Get a link the user taps to send pictures or videos from their own phone or computer straight into the account, with no setup and no sign-in.