save_video_analysis
Save a video beat sheet
Store your beat sheet for an analysed video. Read measure_video first.
Emit exactly one shot object per shot in the bundle, with the same index — a beat sheet whose indexes do not match the measured shots is rejected and nothing is stored.
image_prompt and motion_prompt should describe the shot for a DIFFERENT subject: that is what makes the format reusable. Costs no credits.
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.
- Can delete or overwrite
- Can delete, overwrite, cancel or withdraw something the caller already has, so a host should confirm it.
- 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.
- Idempotent
- Calling it again with the same arguments has no further effect.
Credits
What the tool's description says about credits, verbatim.
- Costs no credits.
Inputs
upload_idstring · requireduuid
beat_sheetobject · requiredfields: format_summary, hook, structure, tags, shots, beats
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": "save_video_analysis",
"arguments": {
"upload_id": "00000000-0000-4000-8000-000000000000",
"beat_sheet": {
"format_summary": "<format_summary>",
"hook": "<hook>",
"structure": "<structure>",
"tags": [
"<tags>"
],
"shots": [
{
"index": 0,
"role": "hook",
"description": "<description>",
"shot_size": "extreme_wide",
"camera": "static",
"setting": "<setting>",
"on_screen_text": "<on_screen_text>",
"narration": "<narration>",
"sound": "<sound>"
}
],
"beats": [
{
"role": "hook",
"shot_indexes": [
0
],
"title": "<title>",
"intent": "<intent>"
}
]
}
}
}
}Input schema
As the server sends it in tools/list.
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"format": "uuid"
},
"beat_sheet": {
"type": "object",
"properties": {
"format_summary": {
"type": "string",
"minLength": 1,
"maxLength": 600
},
"hook": {
"type": "string",
"minLength": 1,
"maxLength": 400
},
"structure": {
"type": "string",
"minLength": 1,
"maxLength": 1200
},
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 30
},
"maxItems": 12
},
"shots": {
"type": "array",
"items": {
"type": "object",
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"role": {
"type": "string",
"enum": [
"hook",
"setup",
"build",
"proof",
"payoff",
"cta"
]
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 600
},
"shot_size": {
"type": "string",
"enum": [
"extreme_wide",
"wide",
"medium_wide",
"medium",
"medium_close",
"close",
"extreme_close",
"insert"
]
},
"camera": {
"type": "string",
"enum": [
"static",
"handheld",
"pan",
"tilt",
"push_in",
"pull_out",
"tracking",
"orbit",
"crane",
"whip",
"pov",
"drone"
]
},
"setting": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"on_screen_text": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 300
},
{
"type": "null"
}
]
},
"narration": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 1000
},
{
"type": "null"
}
]
},
"sound": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 300
},
{
"type": "null"
}
]
},
"image_prompt": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"motion_prompt": {
"type": "string",
"minLength": 1,
"maxLength": 6000
}
},
"required": [
"index",
"role",
"description",
"shot_size",
"camera",
"setting",
"on_screen_text",
"narration",
"sound"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 60
},
"beats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": {
"$ref": "#/properties/beat_sheet/properties/shots/items/properties/role"
},
"shot_indexes": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0
},
"minItems": 1,
"maxItems": 60
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"intent": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"role",
"shot_indexes",
"title",
"intent"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 60
}
},
"required": [
"format_summary",
"hook",
"structure",
"tags",
"shots",
"beats"
],
"additionalProperties": false
}
},
"required": [
"upload_id",
"beat_sheet"
],
"additionalProperties": false
}Related tools
- measure_video
Measure an uploaded video so you can reverse-engineer its format: shot boundaries with real timestamps, one or more keyframe images per shot, a timed tran…
- import_video_url
Import one public YouTube, Facebook or TikTok video (up to 10 minutes and 250 MB) into the Library.