Title100/100
Analyse Instagram Reel
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Break down how an Instagram Reel is made: key frames, a shot-by-shot edit timeline (cuts, dissolves, fades, whip/wipe transitions), in-shot changes such as title animation, overlays and split-screen panels, pacing, camera motion and a timestamped transcript. Renders an interactive breakdown card. Use it when the user shares a reel and asks about its visuals, editing, animation or script. Reels from private accounts can't be fetched and come back as an error.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
url
Link to the Instagram Reel to analyse, as shared from the Instagram app or website. Only reels from public accounts can be fetched.
Clear enough to supply this argument.
transcribe
Whether to transcribe speech in the audio. Turn it off for a faster result when the reel is music-only or the transcript isn't needed.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Output schema88/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reel",
"video",
"pace",
"shots",
"transitions",
"inShotChanges",
"transcript",
"frames"
],
"properties": {
"pace": {
"type": "object",
"required": [
"shotCount",
"transitionCount",
"inShotChangeCount",
"avgShotS",
"cutsPer10s",
"label",
"overallMotion"
],
"properties": {
"label": {
"type": "string",
"description": "Pacing label, e.g. 'very fast (rapid cutting)' or 'single continuous shot'"
},
"avgShotS": {
"type": "number",
"description": "Average shot length in seconds"
},
"shotCount": {
"type": "number",
"description": "Number of shots (continuous segments between transitions)"
},
"cutsPer10s": {
"type": "number",
"description": "Transitions per 10 seconds of video; higher means faster cutting"
},
"overallMotion": {
"type": "string",
"description": "Duration-weighted motion level across shots: static, low, medium or high"
},
"transitionCount": {
"type": "number",
"description": "Number of transitions between shots"
},
"inShotChangeCount": {
"type": "number",
"description": "Number of in-shot changes (see inShotChanges)"
}
},
"description": "How fast the reel is cut and how much it moves",
"additionalProperties": false
},
"reel": {
"type": "object",
"required": [
"url",
"shortcode",
"username",
"caption",
"postedAt",
"likes",
"comments",
"views"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical link to the reel"
},
"likes": {
"type": [
"number",
"null"
],
"description": "Like count when analysed; null if Instagram didn't provide it"
},
"views": {
"type": [
"number",
"null"
],
"description": "View count when analysed; null if not provided"
},
"caption": {
"type": [
"string",
"null"
],
"description": "The reel's caption text, including hashtags"
},
"comments": {
"type": [
"number",
"null"
],
"description": "Comment count when analysed; null if not provided"
},
"postedAt": {
"type": [
"string",
"null"
],
"description": "When the reel was posted, as an ISO 8601 timestamp"
},
"username": {
"type": [
"string",
"null"
],
"description": "Creator's Instagram handle, without the @"
},
"shortcode": {
"type": [
"string",
"null"
],
"description": "Instagram's ID for the reel, taken from its link"
}
},
"description": "The reel and its creator, as Instagram shows them to logged-out visitors",
"additionalProperties": false
},
"shots": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"startS",
"endS",
"durationS",
"motion",
"cameraMove",
"inShotChanges"
],
"properties": {
"endS": {
"type": "number",
"description": "End time in seconds"
},
"index": {
"type": "number",
"description": "Shot number, starting at 1"
},
"motion": {
"type": "string",
"description": "Motion level inside the shot: static, low, medium or high"
},
"startS": {
"type": "number",
"description": "Start time in seconds"
},
"durationS": {
"type": "number",
"description": "Shot length in seconds"
},
"cameraMove": {
"type": [
"string",
"null"
],
"description": "Detected camera move such as 'pan right' or 'tilt up'; null if none"
},
"inShotChanges": {
"type": "number",
"description": "Number of in-shot changes inside this shot"
}
},
"additionalProperties": false
},
"description": "Shots in time order"
},
"video": {
"type": "object",
"required": [
"durationS",
"width",
"height",
"aspectRatio",
"fps",
"hasAudio"
],
"properties": {
"fps": {
"type": [
"number",
"null"
],
"description": "Frames per second"
},
"width": {
"type": "number",
"description": "Displayed width in pixels"
},
"height": {
"type": "number",
"description": "Displayed height in pixels"
},
"hasAudio": {
"type": "boolean",
"description": "Whether the video has an audio track"
},
"durationS": {
"type": "number",
"description": "Length of the video in seconds"
},
"aspectRatio": {
"type": [
"string",
"null"
],
"description": "Aspect ratio such as 9:16, 4:5 or 4:3"
}
},
"description": "Technical details of the video file",
"additionalProperties": false
},
"frames": {
"type": "array",
"items": {
"type": "object",
"required": [
"timeS",
"shot"
],
"properties": {
"shot": {
"type": [
"number",
"null"
],
"description": "Shot number the frame belongs to"
},
"timeS": {
"type": "number",
"description": "Time of the frame in seconds"
}
},
"additionalProperties": false
},
"description": "Key frames, in the same order as the image blocks in the result content"
},
"transcript": {
"type": "object",
"required": [
"available",
"speechDetected",
"language",
"segments",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "Why there is no transcript, when there isn't one"
},
"language": {
"type": [
"string",
"null"
],
"description": "Detected language code, e.g. 'en'"
},
"segments": {
"type": "array",
"items": {
"type": "object",
"required": [
"startS",
"endS",
"text"
],
"properties": {
"endS": {
"type": "number",
"description": "Segment end in seconds"
},
"text": {
"type": "string",
"description": "What was said"
},
"startS": {
"type": "number",
"description": "Segment start in seconds"
}
},
"additionalProperties": false
},
"description": "Timestamped speech segments"
},
"available": {
"type": "boolean",
"description": "Whether transcription ran"
},
"speechDetected": {
"type": "boolean",
"description": "Whether any speech was found; false for music-only reels"
}
},
"description": "Speech in the audio",
"additionalProperties": false
},
"transitions": {
"type": "array",
"items": {
"type": "object",
"required": [
"atS",
"type",
"durationS"
],
"properties": {
"atS": {
"type": "number",
"description": "Time in seconds where the transition starts"
},
"type": {
"type": "string",
"description": "hard_cut, dissolve, fade_to_black, fade_from_black, fade_white, flash_white, dip_to_black, motion_cut (a cut inside a whip/swipe/zoom-blur) or whip_or_wipe (fast motion or a foreground object hiding the cut)"
},
"durationS": {
"type": "number",
"description": "Length of the transition in seconds; 0 for a hard cut"
}
},
"additionalProperties": false
},
"description": "Transitions in time order. Types are measured heuristics; check them against the frames"
},
"inShotChanges": {
"type": "array",
"items": {
"type": "object",
"required": [
"atS",
"shareOfFrameChanged"
],
"properties": {
"atS": {
"type": "number",
"description": "Time in seconds"
},
"shareOfFrameChanged": {
"type": "number",
"description": "Share of the frame that changed, from 0 to 1"
}
},
"additionalProperties": false
},
"description": "Moments where part of the picture switches while the framing stays: title or text animation, overlays, colour or flash effects, split-screen panels or jump cuts. They don't start a new shot"
}
},
"additionalProperties": false
}