[
  {
    "name": "connect_editor",
    "title": "Connect editor",
    "description": "Start here. Return the Sequence editor pairing URL and connection status. Show the URL to the user and ask them to approve Connect AI agent in their browser. No repository clone or app build is needed. Pairing links expire when the companion stops; keep one approved editor tab open. This tool works before an editor is connected.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "connected": {
          "type": "boolean",
          "description": "Whether an approved editor tab is currently connected."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Pairing URL for this companion session. Show it to the user; do not publish or persist its credentials."
        },
        "instructions": {
          "type": "string",
          "description": "Connection instructions to relay to the user."
        }
      },
      "required": [
        "connected",
        "url",
        "instructions"
      ],
      "additionalProperties": false
    }
  },
  {
    "name": "inspect_project",
    "title": "Inspect project",
    "description": "Inspect the approved, connected editor before editing. Return its project, current revision, stable IDs, missing media IDs and available codec/element capabilities. Use the returned revision for apply_edits; use IDs rather than names. Requires connect_editor and browser approval. Media bytes are not returned.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "project": {
          "type": "object",
          "properties": {
            "version": {
              "type": "number",
              "const": 1,
              "description": "Saved project format version."
            },
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 160,
              "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
            },
            "revision": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991,
              "description": "Current project revision. Pass this to apply_edits.expectedRevision."
            },
            "name": {
              "type": "string",
              "maxLength": 200,
              "description": "Project title."
            },
            "width": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 7680,
              "description": "Canvas width in pixels. Export requires an even dimension of at least 16."
            },
            "height": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 7680,
              "description": "Canvas height in pixels. Export requires an even dimension of at least 16."
            },
            "fps": {
              "type": "number",
              "exclusiveMinimum": 0,
              "maximum": 120,
              "description": "Project frame rate in frames per second."
            },
            "background": {
              "type": "string",
              "pattern": "^#[\\da-f]{6}$",
              "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
            },
            "initialized": {
              "type": "boolean",
              "description": "Whether the initial project setup has been completed."
            },
            "tracks": {
              "minItems": 1,
              "maxItems": 64,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160,
                    "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 100,
                    "description": "Track label shown in the timeline."
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "visual",
                      "audio"
                    ],
                    "description": "visual composites images and elements; audio contains sound."
                  },
                  "hidden": {
                    "type": "boolean",
                    "description": "Whether visual output from this track is hidden."
                  },
                  "muted": {
                    "type": "boolean",
                    "description": "Whether audio from this track is muted."
                  },
                  "locked": {
                    "type": "boolean",
                    "description": "Whether edits to clips on this track are blocked. Unlock before editing."
                  }
                },
                "required": [
                  "id",
                  "name",
                  "type",
                  "hidden",
                  "muted",
                  "locked"
                ],
                "additionalProperties": false,
                "description": "A complete timeline track. Supply a new unique ID when adding a track."
              },
              "description": "Timeline tracks in display order."
            },
            "assets": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160,
                    "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                  },
                  "name": {
                    "type": "string",
                    "description": "Original media file name."
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "video",
                      "audio",
                      "image",
                      "gif",
                      "text",
                      "shape",
                      "vector"
                    ],
                    "description": "Element or media kind. Use inspect_project capabilities to discover available element adapters."
                  },
                  "duration": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source duration in seconds; 0 for still images."
                  },
                  "width": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source width in pixels; 0 for audio-only media."
                  },
                  "height": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source height in pixels; 0 for audio-only media."
                  },
                  "fps": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source frame rate; 0 when not applicable."
                  },
                  "hasAudio": {
                    "type": "boolean",
                    "description": "Whether the source contains an audio stream."
                  },
                  "hdr": {
                    "type": "boolean",
                    "description": "Whether the source is high dynamic range."
                  },
                  "thumbnail": {
                    "description": "Optional browser-local thumbnail URL or data URL.",
                    "type": "string"
                  },
                  "size": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source file size in bytes."
                  },
                  "type": {
                    "type": "string",
                    "description": "Source MIME type."
                  }
                },
                "required": [
                  "id",
                  "name",
                  "kind",
                  "duration",
                  "width",
                  "height",
                  "fps",
                  "hasAudio",
                  "hdr",
                  "size",
                  "type"
                ],
                "additionalProperties": false,
                "description": "Imported media metadata. Media bytes remain in the editor browser."
              },
              "description": "Imported media metadata; does not include media bytes."
            },
            "clips": {
              "maxItems": 10000,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160,
                    "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                  },
                  "trackId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160,
                    "description": "ID of the destination track. The track must exist and be unlocked."
                  },
                  "assetId": {
                    "description": "ID of imported media. Omit for generated text, shape or vector elements.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "video",
                      "audio",
                      "image",
                      "gif",
                      "text",
                      "shape",
                      "vector"
                    ],
                    "description": "Element or media kind. Use inspect_project capabilities to discover available element adapters."
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 500,
                    "description": "Segment label shown in the timeline."
                  },
                  "start": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Segment start in absolute timeline seconds."
                  },
                  "duration": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Segment duration in timeline seconds, after applying playback speed."
                  },
                  "in": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source-media in point in seconds. For generated elements use 0."
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 8,
                    "description": "Playback rate multiplier. 1 is normal speed; 2 plays twice as fast."
                  },
                  "x": {
                    "type": "number",
                    "description": "Horizontal center in project-width units. 0.5 is the center of the canvas."
                  },
                  "y": {
                    "type": "number",
                    "description": "Vertical center in project-height units. 0.5 is the center of the canvas."
                  },
                  "width": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Unscaled width as a fraction of project width. 1 fills the canvas width."
                  },
                  "height": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Unscaled height as a fraction of project height. 1 fills the canvas height."
                  },
                  "rotation": {
                    "type": "number",
                    "description": "Rotation in degrees around the anchor."
                  },
                  "opacity": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "description": "Overall segment opacity from 0 (transparent) to 1 (opaque)."
                  },
                  "scale": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Uniform size multiplier applied to width and height. 1 preserves size."
                  },
                  "anchorX": {
                    "type": "number",
                    "description": "Horizontal transform anchor as a fraction of segment width. 0.5 is centered."
                  },
                  "anchorY": {
                    "type": "number",
                    "description": "Vertical transform anchor as a fraction of segment height. 0.5 is centered."
                  },
                  "volume": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 4,
                    "description": "Linear audio gain. 0 is silent, 1 is original level, 4 is the maximum."
                  },
                  "volumeKeyframes": {
                    "maxItems": 1000,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "time": {
                          "type": "number",
                          "minimum": 0,
                          "description": "Time in source-media seconds, before in-point trimming and speed changes."
                        },
                        "value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 4,
                          "description": "Linear gain at this source time. Values between points are interpolated."
                        }
                      },
                      "required": [
                        "time",
                        "value"
                      ],
                      "additionalProperties": false
                    },
                    "description": "Source-time audio envelope. An empty array uses constant volume."
                  },
                  "fadeIn": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Fade-in duration in timeline seconds; 0 disables it."
                  },
                  "fadeOut": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Fade-out duration in timeline seconds; 0 disables it."
                  },
                  "enter": {
                    "type": "string",
                    "enum": [
                      "none",
                      "fade",
                      "slide",
                      "zoom"
                    ],
                    "description": "Entrance or exit animation preset. none disables the animation."
                  },
                  "exit": {
                    "type": "string",
                    "enum": [
                      "none",
                      "fade",
                      "slide",
                      "zoom"
                    ],
                    "description": "Entrance or exit animation preset. none disables the animation."
                  },
                  "animDuration": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Entrance/exit animation duration in timeline seconds."
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 20000,
                    "description": "Text content for text elements. Use an empty string for other kinds."
                  },
                  "font": {
                    "type": "string",
                    "enum": [
                      "sans-serif",
                      "serif",
                      "monospace"
                    ],
                    "description": "Browser font family for text elements."
                  },
                  "fontSize": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Text size in project pixels."
                  },
                  "fill": {
                    "type": "string",
                    "pattern": "^#[\\da-f]{6}$",
                    "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                  },
                  "fillOpacity": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "description": "Solid fill opacity. Gradient stops carry their own opacity."
                  },
                  "fillGradient": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "linear",
                              "radial"
                            ],
                            "description": "Gradient geometry."
                          },
                          "angle": {
                            "type": "number",
                            "description": "Linear gradient angle in degrees; ignored for radial gradients."
                          },
                          "stops": {
                            "minItems": 2,
                            "maxItems": 8,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "offset": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1,
                                  "description": "Stop position from 0 (start) to 1 (end)."
                                },
                                "color": {
                                  "type": "string",
                                  "pattern": "^#[\\da-f]{6}$",
                                  "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                                },
                                "opacity": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1,
                                  "description": "Stop opacity from 0 (transparent) to 1 (opaque)."
                                }
                              },
                              "required": [
                                "offset",
                                "color",
                                "opacity"
                              ],
                              "additionalProperties": false
                            },
                            "description": "Two to eight color stops along the gradient."
                          }
                        },
                        "required": [
                          "type",
                          "angle",
                          "stops"
                        ],
                        "additionalProperties": false,
                        "description": "Gradient paint. Set the containing gradient field to null to use a solid color."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Fill gradient, or null to use the solid fill color."
                  },
                  "stroke": {
                    "type": "string",
                    "pattern": "^#[\\da-f]{6}$",
                    "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                  },
                  "strokeOpacity": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "description": "Solid outline opacity from 0 to 1."
                  },
                  "strokeGradient": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "linear",
                              "radial"
                            ],
                            "description": "Gradient geometry."
                          },
                          "angle": {
                            "type": "number",
                            "description": "Linear gradient angle in degrees; ignored for radial gradients."
                          },
                          "stops": {
                            "minItems": 2,
                            "maxItems": 8,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "offset": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1,
                                  "description": "Stop position from 0 (start) to 1 (end)."
                                },
                                "color": {
                                  "type": "string",
                                  "pattern": "^#[\\da-f]{6}$",
                                  "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                                },
                                "opacity": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1,
                                  "description": "Stop opacity from 0 (transparent) to 1 (opaque)."
                                }
                              },
                              "required": [
                                "offset",
                                "color",
                                "opacity"
                              ],
                              "additionalProperties": false
                            },
                            "description": "Two to eight color stops along the gradient."
                          }
                        },
                        "required": [
                          "type",
                          "angle",
                          "stops"
                        ],
                        "additionalProperties": false,
                        "description": "Gradient paint. Set the containing gradient field to null to use a solid color."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Outline gradient, or null to use the solid stroke color."
                  },
                  "strokeWidth": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Outline width in project pixels. 0 disables the outline."
                  },
                  "shape": {
                    "type": "string",
                    "enum": [
                      "rectangle",
                      "ellipse",
                      "line"
                    ],
                    "description": "Shape geometry; relevant only to shape elements."
                  },
                  "radius": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Rectangle corner radius in project pixels."
                  },
                  "keyframes": {
                    "maxItems": 1000,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "property": {
                          "type": "string",
                          "enum": [
                            "x",
                            "y",
                            "rotation",
                            "opacity",
                            "scale"
                          ],
                          "description": "Animated transform property; uses the same units as the segment field."
                        },
                        "time": {
                          "type": "number",
                          "minimum": 0,
                          "description": "Time in seconds relative to the segment start."
                        },
                        "value": {
                          "type": "number",
                          "description": "Property value at this keyframe. Must remain valid for the animated property."
                        }
                      },
                      "required": [
                        "property",
                        "time",
                        "value"
                      ],
                      "additionalProperties": false
                    },
                    "description": "Transform keyframes in segment-local timeline seconds. An empty array uses static properties."
                  }
                },
                "required": [
                  "id",
                  "trackId",
                  "kind",
                  "name",
                  "start",
                  "duration",
                  "in",
                  "speed",
                  "x",
                  "y",
                  "width",
                  "height",
                  "rotation",
                  "opacity",
                  "scale",
                  "anchorX",
                  "anchorY",
                  "volume",
                  "volumeKeyframes",
                  "fadeIn",
                  "fadeOut",
                  "enter",
                  "exit",
                  "animDuration",
                  "text",
                  "font",
                  "fontSize",
                  "fill",
                  "fillOpacity",
                  "fillGradient",
                  "stroke",
                  "strokeOpacity",
                  "strokeGradient",
                  "strokeWidth",
                  "shape",
                  "radius",
                  "keyframes"
                ],
                "additionalProperties": false,
                "description": "A complete timeline segment. Inspect an existing segment for reusable settings, and provide a new unique ID when adding."
              },
              "description": "Timeline segments referencing tracks and imported media by ID."
            }
          },
          "required": [
            "version",
            "id",
            "revision",
            "name",
            "width",
            "height",
            "fps",
            "background",
            "initialized",
            "tracks",
            "assets",
            "clips"
          ],
          "additionalProperties": false,
          "description": "Current browser-local project and its stable identifiers."
        },
        "missingAssets": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160,
            "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
          },
          "description": "Asset IDs whose original files need relinking in the browser."
        },
        "capabilities": {
          "type": "object",
          "properties": {
            "elements": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "video",
                      "audio",
                      "image",
                      "gif",
                      "text",
                      "shape",
                      "vector"
                    ],
                    "description": "Element or media kind. Use inspect_project capabilities to discover available element adapters."
                  },
                  "title": {
                    "type": "string",
                    "description": "Human-readable element name."
                  },
                  "duration": {
                    "type": "string",
                    "enum": [
                      "fixed",
                      "source"
                    ],
                    "description": "Whether element duration is independent of media or limited by its source."
                  },
                  "properties": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "id",
                        "trackId",
                        "assetId",
                        "kind",
                        "name",
                        "start",
                        "duration",
                        "in",
                        "speed",
                        "x",
                        "y",
                        "width",
                        "height",
                        "rotation",
                        "opacity",
                        "scale",
                        "anchorX",
                        "anchorY",
                        "volume",
                        "volumeKeyframes",
                        "fadeIn",
                        "fadeOut",
                        "enter",
                        "exit",
                        "animDuration",
                        "text",
                        "font",
                        "fontSize",
                        "fill",
                        "fillOpacity",
                        "fillGradient",
                        "stroke",
                        "strokeOpacity",
                        "strokeGradient",
                        "strokeWidth",
                        "shape",
                        "radius",
                        "keyframes"
                      ]
                    },
                    "description": "Editable segment properties supported by this element."
                  }
                },
                "required": [
                  "type",
                  "title",
                  "duration",
                  "properties"
                ],
                "additionalProperties": false
              },
              "description": "Available element adapters."
            },
            "animations": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "none",
                  "fade",
                  "slide",
                  "zoom"
                ],
                "description": "Entrance or exit animation preset. none disables the animation."
              },
              "description": "Supported animation presets."
            },
            "keyframeProperties": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "x",
                  "y",
                  "scale",
                  "rotation",
                  "opacity"
                ]
              },
              "description": "Properties supported by transform keyframes."
            },
            "sdrOnly": {
              "type": "boolean",
              "const": true,
              "description": "Only SDR output is supported."
            },
            "video": {
              "type": "object",
              "properties": {
                "avc": {
                  "type": "boolean",
                  "description": "H.264 encoding supported for current project dimensions."
                },
                "vp9": {
                  "type": "boolean",
                  "description": "VP9 encoding supported for current project dimensions."
                }
              },
              "required": [
                "avc",
                "vp9"
              ],
              "additionalProperties": false,
              "description": "Browser video encoder capabilities."
            },
            "audio": {
              "type": "object",
              "properties": {
                "aac": {
                  "type": "boolean",
                  "description": "AAC encoding supported."
                },
                "opus": {
                  "type": "boolean",
                  "description": "Opus encoding supported."
                }
              },
              "required": [
                "aac",
                "opus"
              ],
              "additionalProperties": false,
              "description": "Browser audio encoder capabilities."
            }
          },
          "required": [
            "elements",
            "animations",
            "keyframeProperties",
            "sdrOnly",
            "video",
            "audio"
          ],
          "additionalProperties": false,
          "description": "Capabilities detected in the connected browser."
        }
      },
      "required": [
        "project",
        "missingAssets",
        "capabilities"
      ],
      "additionalProperties": false
    }
  },
  {
    "name": "manage_assets",
    "title": "Manage assets",
    "description": "List imported assets, place available media on the timeline, or import local files. Requires an approved connected editor. Choose action list, place or import and supply only that action's fields. Imports require --allow-media directories or --allow-media-anywhere. Files transfer directly to the browser without a fixed file-size limit. Placement changes the project revision; inspect again before apply_edits.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "list",
              "description": "List imported media."
            }
          },
          "required": [
            "action"
          ],
          "additionalProperties": false,
          "description": "List metadata for all imported assets."
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "place",
              "description": "Place an existing asset on the timeline."
            },
            "assetId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 160,
              "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
            },
            "trackId": {
              "description": "Destination track ID. Omit to choose a compatible unlocked track automatically.",
              "type": "string",
              "minLength": 1,
              "maxLength": 160
            },
            "start": {
              "description": "Absolute timeline start in seconds. Omit to append after the last segment on the chosen track, or at 0 if empty.",
              "type": "number",
              "minimum": 0
            }
          },
          "required": [
            "action",
            "assetId"
          ],
          "additionalProperties": false,
          "description": "Create a segment from an imported, available asset."
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "import",
              "description": "Import allowed local files."
            },
            "paths": {
              "minItems": 1,
              "maxItems": 20,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "description": "Absolute local file path. Requires --allow-media for its directory or --allow-media-anywhere."
              },
              "description": "One to twenty file paths. Imports use binary transfers without a fixed file-size limit. The companion must allow each directory or use --allow-media-anywhere."
            }
          },
          "required": [
            "action",
            "paths"
          ],
          "additionalProperties": false,
          "description": "Import media from directories explicitly allowed when starting the companion."
        }
      ],
      "type": "object"
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160,
                    "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                  },
                  "name": {
                    "type": "string",
                    "description": "Original media file name."
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "video",
                      "audio",
                      "image",
                      "gif",
                      "text",
                      "shape",
                      "vector"
                    ],
                    "description": "Element or media kind. Use inspect_project capabilities to discover available element adapters."
                  },
                  "duration": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source duration in seconds; 0 for still images."
                  },
                  "width": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source width in pixels; 0 for audio-only media."
                  },
                  "height": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source height in pixels; 0 for audio-only media."
                  },
                  "fps": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source frame rate; 0 when not applicable."
                  },
                  "hasAudio": {
                    "type": "boolean",
                    "description": "Whether the source contains an audio stream."
                  },
                  "hdr": {
                    "type": "boolean",
                    "description": "Whether the source is high dynamic range."
                  },
                  "thumbnail": {
                    "description": "Optional browser-local thumbnail URL or data URL.",
                    "type": "string"
                  },
                  "size": {
                    "type": "number",
                    "minimum": 0,
                    "description": "Source file size in bytes."
                  },
                  "type": {
                    "type": "string",
                    "description": "Source MIME type."
                  }
                },
                "required": [
                  "id",
                  "name",
                  "kind",
                  "duration",
                  "width",
                  "height",
                  "fps",
                  "hasAudio",
                  "hdr",
                  "size",
                  "type"
                ],
                "additionalProperties": false,
                "description": "Imported media metadata. Media bytes remain in the editor browser."
              },
              "description": "Imported asset metadata."
            }
          },
          "required": [
            "items"
          ],
          "additionalProperties": false,
          "description": "Asset list or import result."
        },
        {
          "type": "object",
          "properties": {
            "revision": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991,
              "description": "Project revision after placing the asset."
            }
          },
          "required": [
            "revision"
          ],
          "additionalProperties": false
        }
      ],
      "type": "object"
    }
  },
  {
    "name": "apply_edits",
    "title": "Apply edits",
    "description": "Apply an atomic editing batch to the approved connected editor. Inspect first, pass its expectedRevision and a unique idempotencyKey, and use stable IDs. Each operation has an explicit schema; unknown fields are rejected. A batch contains 1–500 regular operations, or exactly one undo or redo. validateOnly checks without committing or saving an idempotency receipt. Revision conflicts require reinspection. Retries with the same key return the earlier receipt. Locked tracks and invalid project references are rejected.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "expectedRevision": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Exact revision from the latest inspect_project. A mismatch rejects the entire batch."
        },
        "idempotencyKey": {
          "type": "string",
          "minLength": 1,
          "maxLength": 160,
          "description": "Unique key for this batch, for example a UUID. Reuse only when retrying the same batch; a committed key returns its original receipt."
        },
        "validateOnly": {
          "description": "true validates without modifying the project. Omitted means false. Validation does not reserve the idempotency key.",
          "type": "boolean"
        },
        "operations": {
          "anyOf": [
            {
              "minItems": 1,
              "maxItems": 500,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "project",
                        "description": "Update project settings."
                      },
                      "patch": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "maxLength": 200,
                            "description": "Project title."
                          },
                          "width": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 7680,
                            "description": "Canvas width in pixels. Export requires an even dimension of at least 16."
                          },
                          "height": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 7680,
                            "description": "Canvas height in pixels. Export requires an even dimension of at least 16."
                          },
                          "fps": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "maximum": 120,
                            "description": "Project frame rate in frames per second."
                          },
                          "background": {
                            "type": "string",
                            "pattern": "^#[\\da-f]{6}$",
                            "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                          },
                          "initialized": {
                            "type": "boolean",
                            "description": "Whether the initial project setup has been completed."
                          }
                        },
                        "additionalProperties": false,
                        "description": "Project properties to change. Omitted properties retain their current values. IDs, revision and collections cannot be patched."
                      }
                    },
                    "required": [
                      "op",
                      "patch"
                    ],
                    "additionalProperties": false,
                    "description": "Change project name, canvas, frame rate or background."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "add_track",
                        "description": "Create a track."
                      },
                      "track": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                          },
                          "name": {
                            "type": "string",
                            "maxLength": 100,
                            "description": "Track label shown in the timeline."
                          },
                          "type": {
                            "type": "string",
                            "enum": [
                              "visual",
                              "audio"
                            ],
                            "description": "visual composites images and elements; audio contains sound."
                          },
                          "hidden": {
                            "type": "boolean",
                            "description": "Whether visual output from this track is hidden."
                          },
                          "muted": {
                            "type": "boolean",
                            "description": "Whether audio from this track is muted."
                          },
                          "locked": {
                            "type": "boolean",
                            "description": "Whether edits to clips on this track are blocked. Unlock before editing."
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "type",
                          "hidden",
                          "muted",
                          "locked"
                        ],
                        "additionalProperties": false,
                        "description": "A complete timeline track. Supply a new unique ID when adding a track."
                      }
                    },
                    "required": [
                      "op",
                      "track"
                    ],
                    "additionalProperties": false,
                    "description": "Insert a complete track at the top of the timeline. Its ID must be unique."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "update_track",
                        "description": "Update a track."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      },
                      "patch": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "maxLength": 100,
                            "description": "Track label shown in the timeline."
                          },
                          "type": {
                            "type": "string",
                            "enum": [
                              "visual",
                              "audio"
                            ],
                            "description": "visual composites images and elements; audio contains sound."
                          },
                          "hidden": {
                            "type": "boolean",
                            "description": "Whether visual output from this track is hidden."
                          },
                          "muted": {
                            "type": "boolean",
                            "description": "Whether audio from this track is muted."
                          },
                          "locked": {
                            "type": "boolean",
                            "description": "Whether edits to clips on this track are blocked. Unlock before editing."
                          }
                        },
                        "additionalProperties": false,
                        "description": "Track properties to change. Omitted fields retain their values; the track ID cannot change."
                      }
                    },
                    "required": [
                      "op",
                      "id",
                      "patch"
                    ],
                    "additionalProperties": false,
                    "description": "Update an existing track, including its lock, visibility and mute settings."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "delete_track",
                        "description": "Delete a track."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      }
                    },
                    "required": [
                      "op",
                      "id"
                    ],
                    "additionalProperties": false,
                    "description": "Delete a track and its segments. At least one track must remain."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "add_clip",
                        "description": "Create a segment."
                      },
                      "clip": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                          },
                          "trackId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "description": "ID of the destination track. The track must exist and be unlocked."
                          },
                          "assetId": {
                            "description": "ID of imported media. Omit for generated text, shape or vector elements.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160
                          },
                          "kind": {
                            "type": "string",
                            "enum": [
                              "video",
                              "audio",
                              "image",
                              "gif",
                              "text",
                              "shape",
                              "vector"
                            ],
                            "description": "Element or media kind. Use inspect_project capabilities to discover available element adapters."
                          },
                          "name": {
                            "type": "string",
                            "maxLength": 500,
                            "description": "Segment label shown in the timeline."
                          },
                          "start": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Segment start in absolute timeline seconds."
                          },
                          "duration": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Segment duration in timeline seconds, after applying playback speed."
                          },
                          "in": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Source-media in point in seconds. For generated elements use 0."
                          },
                          "speed": {
                            "type": "number",
                            "minimum": 0.1,
                            "maximum": 8,
                            "description": "Playback rate multiplier. 1 is normal speed; 2 plays twice as fast."
                          },
                          "x": {
                            "type": "number",
                            "description": "Horizontal center in project-width units. 0.5 is the center of the canvas."
                          },
                          "y": {
                            "type": "number",
                            "description": "Vertical center in project-height units. 0.5 is the center of the canvas."
                          },
                          "width": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Unscaled width as a fraction of project width. 1 fills the canvas width."
                          },
                          "height": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Unscaled height as a fraction of project height. 1 fills the canvas height."
                          },
                          "rotation": {
                            "type": "number",
                            "description": "Rotation in degrees around the anchor."
                          },
                          "opacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1,
                            "description": "Overall segment opacity from 0 (transparent) to 1 (opaque)."
                          },
                          "scale": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Uniform size multiplier applied to width and height. 1 preserves size."
                          },
                          "anchorX": {
                            "type": "number",
                            "description": "Horizontal transform anchor as a fraction of segment width. 0.5 is centered."
                          },
                          "anchorY": {
                            "type": "number",
                            "description": "Vertical transform anchor as a fraction of segment height. 0.5 is centered."
                          },
                          "volume": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 4,
                            "description": "Linear audio gain. 0 is silent, 1 is original level, 4 is the maximum."
                          },
                          "volumeKeyframes": {
                            "maxItems": 1000,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "time": {
                                  "type": "number",
                                  "minimum": 0,
                                  "description": "Time in source-media seconds, before in-point trimming and speed changes."
                                },
                                "value": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 4,
                                  "description": "Linear gain at this source time. Values between points are interpolated."
                                }
                              },
                              "required": [
                                "time",
                                "value"
                              ],
                              "additionalProperties": false
                            },
                            "description": "Source-time audio envelope. An empty array uses constant volume."
                          },
                          "fadeIn": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Fade-in duration in timeline seconds; 0 disables it."
                          },
                          "fadeOut": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Fade-out duration in timeline seconds; 0 disables it."
                          },
                          "enter": {
                            "type": "string",
                            "enum": [
                              "none",
                              "fade",
                              "slide",
                              "zoom"
                            ],
                            "description": "Entrance or exit animation preset. none disables the animation."
                          },
                          "exit": {
                            "type": "string",
                            "enum": [
                              "none",
                              "fade",
                              "slide",
                              "zoom"
                            ],
                            "description": "Entrance or exit animation preset. none disables the animation."
                          },
                          "animDuration": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Entrance/exit animation duration in timeline seconds."
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 20000,
                            "description": "Text content for text elements. Use an empty string for other kinds."
                          },
                          "font": {
                            "type": "string",
                            "enum": [
                              "sans-serif",
                              "serif",
                              "monospace"
                            ],
                            "description": "Browser font family for text elements."
                          },
                          "fontSize": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Text size in project pixels."
                          },
                          "fill": {
                            "type": "string",
                            "pattern": "^#[\\da-f]{6}$",
                            "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                          },
                          "fillOpacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1,
                            "description": "Solid fill opacity. Gradient stops carry their own opacity."
                          },
                          "fillGradient": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "linear",
                                      "radial"
                                    ],
                                    "description": "Gradient geometry."
                                  },
                                  "angle": {
                                    "type": "number",
                                    "description": "Linear gradient angle in degrees; ignored for radial gradients."
                                  },
                                  "stops": {
                                    "minItems": 2,
                                    "maxItems": 8,
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "offset": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop position from 0 (start) to 1 (end)."
                                        },
                                        "color": {
                                          "type": "string",
                                          "pattern": "^#[\\da-f]{6}$",
                                          "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                                        },
                                        "opacity": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop opacity from 0 (transparent) to 1 (opaque)."
                                        }
                                      },
                                      "required": [
                                        "offset",
                                        "color",
                                        "opacity"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "description": "Two to eight color stops along the gradient."
                                  }
                                },
                                "required": [
                                  "type",
                                  "angle",
                                  "stops"
                                ],
                                "additionalProperties": false,
                                "description": "Gradient paint. Set the containing gradient field to null to use a solid color."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Fill gradient, or null to use the solid fill color."
                          },
                          "stroke": {
                            "type": "string",
                            "pattern": "^#[\\da-f]{6}$",
                            "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                          },
                          "strokeOpacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1,
                            "description": "Solid outline opacity from 0 to 1."
                          },
                          "strokeGradient": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "linear",
                                      "radial"
                                    ],
                                    "description": "Gradient geometry."
                                  },
                                  "angle": {
                                    "type": "number",
                                    "description": "Linear gradient angle in degrees; ignored for radial gradients."
                                  },
                                  "stops": {
                                    "minItems": 2,
                                    "maxItems": 8,
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "offset": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop position from 0 (start) to 1 (end)."
                                        },
                                        "color": {
                                          "type": "string",
                                          "pattern": "^#[\\da-f]{6}$",
                                          "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                                        },
                                        "opacity": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop opacity from 0 (transparent) to 1 (opaque)."
                                        }
                                      },
                                      "required": [
                                        "offset",
                                        "color",
                                        "opacity"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "description": "Two to eight color stops along the gradient."
                                  }
                                },
                                "required": [
                                  "type",
                                  "angle",
                                  "stops"
                                ],
                                "additionalProperties": false,
                                "description": "Gradient paint. Set the containing gradient field to null to use a solid color."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Outline gradient, or null to use the solid stroke color."
                          },
                          "strokeWidth": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Outline width in project pixels. 0 disables the outline."
                          },
                          "shape": {
                            "type": "string",
                            "enum": [
                              "rectangle",
                              "ellipse",
                              "line"
                            ],
                            "description": "Shape geometry; relevant only to shape elements."
                          },
                          "radius": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Rectangle corner radius in project pixels."
                          },
                          "keyframes": {
                            "maxItems": 1000,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "property": {
                                  "type": "string",
                                  "enum": [
                                    "x",
                                    "y",
                                    "rotation",
                                    "opacity",
                                    "scale"
                                  ],
                                  "description": "Animated transform property; uses the same units as the segment field."
                                },
                                "time": {
                                  "type": "number",
                                  "minimum": 0,
                                  "description": "Time in seconds relative to the segment start."
                                },
                                "value": {
                                  "type": "number",
                                  "description": "Property value at this keyframe. Must remain valid for the animated property."
                                }
                              },
                              "required": [
                                "property",
                                "time",
                                "value"
                              ],
                              "additionalProperties": false
                            },
                            "description": "Transform keyframes in segment-local timeline seconds. An empty array uses static properties."
                          }
                        },
                        "required": [
                          "id",
                          "trackId",
                          "kind",
                          "name",
                          "start",
                          "duration",
                          "in",
                          "speed",
                          "x",
                          "y",
                          "width",
                          "height",
                          "rotation",
                          "opacity",
                          "scale",
                          "anchorX",
                          "anchorY",
                          "volume",
                          "volumeKeyframes",
                          "fadeIn",
                          "fadeOut",
                          "enter",
                          "exit",
                          "animDuration",
                          "text",
                          "font",
                          "fontSize",
                          "fill",
                          "fillOpacity",
                          "fillGradient",
                          "stroke",
                          "strokeOpacity",
                          "strokeGradient",
                          "strokeWidth",
                          "shape",
                          "radius",
                          "keyframes"
                        ],
                        "additionalProperties": false,
                        "description": "A complete timeline segment. Inspect an existing segment for reusable settings, and provide a new unique ID when adding."
                      }
                    },
                    "required": [
                      "op",
                      "clip"
                    ],
                    "additionalProperties": false,
                    "description": "Add a complete segment to an existing unlocked track. The segment ID must be unique."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "update_clip",
                        "description": "Update a segment."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      },
                      "patch": {
                        "type": "object",
                        "properties": {
                          "trackId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "description": "ID of the destination track. The track must exist and be unlocked."
                          },
                          "assetId": {
                            "description": "ID of imported media. Omit for generated text, shape or vector elements.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160
                          },
                          "kind": {
                            "type": "string",
                            "enum": [
                              "video",
                              "audio",
                              "image",
                              "gif",
                              "text",
                              "shape",
                              "vector"
                            ],
                            "description": "Element or media kind. Use inspect_project capabilities to discover available element adapters."
                          },
                          "name": {
                            "type": "string",
                            "maxLength": 500,
                            "description": "Segment label shown in the timeline."
                          },
                          "start": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Segment start in absolute timeline seconds."
                          },
                          "duration": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Segment duration in timeline seconds, after applying playback speed."
                          },
                          "in": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Source-media in point in seconds. For generated elements use 0."
                          },
                          "speed": {
                            "type": "number",
                            "minimum": 0.1,
                            "maximum": 8,
                            "description": "Playback rate multiplier. 1 is normal speed; 2 plays twice as fast."
                          },
                          "x": {
                            "type": "number",
                            "description": "Horizontal center in project-width units. 0.5 is the center of the canvas."
                          },
                          "y": {
                            "type": "number",
                            "description": "Vertical center in project-height units. 0.5 is the center of the canvas."
                          },
                          "width": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Unscaled width as a fraction of project width. 1 fills the canvas width."
                          },
                          "height": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Unscaled height as a fraction of project height. 1 fills the canvas height."
                          },
                          "rotation": {
                            "type": "number",
                            "description": "Rotation in degrees around the anchor."
                          },
                          "opacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1,
                            "description": "Overall segment opacity from 0 (transparent) to 1 (opaque)."
                          },
                          "scale": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Uniform size multiplier applied to width and height. 1 preserves size."
                          },
                          "anchorX": {
                            "type": "number",
                            "description": "Horizontal transform anchor as a fraction of segment width. 0.5 is centered."
                          },
                          "anchorY": {
                            "type": "number",
                            "description": "Vertical transform anchor as a fraction of segment height. 0.5 is centered."
                          },
                          "volume": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 4,
                            "description": "Linear audio gain. 0 is silent, 1 is original level, 4 is the maximum."
                          },
                          "volumeKeyframes": {
                            "maxItems": 1000,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "time": {
                                  "type": "number",
                                  "minimum": 0,
                                  "description": "Time in source-media seconds, before in-point trimming and speed changes."
                                },
                                "value": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 4,
                                  "description": "Linear gain at this source time. Values between points are interpolated."
                                }
                              },
                              "required": [
                                "time",
                                "value"
                              ],
                              "additionalProperties": false
                            },
                            "description": "Source-time audio envelope. An empty array uses constant volume."
                          },
                          "fadeIn": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Fade-in duration in timeline seconds; 0 disables it."
                          },
                          "fadeOut": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Fade-out duration in timeline seconds; 0 disables it."
                          },
                          "enter": {
                            "type": "string",
                            "enum": [
                              "none",
                              "fade",
                              "slide",
                              "zoom"
                            ],
                            "description": "Entrance or exit animation preset. none disables the animation."
                          },
                          "exit": {
                            "type": "string",
                            "enum": [
                              "none",
                              "fade",
                              "slide",
                              "zoom"
                            ],
                            "description": "Entrance or exit animation preset. none disables the animation."
                          },
                          "animDuration": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Entrance/exit animation duration in timeline seconds."
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 20000,
                            "description": "Text content for text elements. Use an empty string for other kinds."
                          },
                          "font": {
                            "type": "string",
                            "enum": [
                              "sans-serif",
                              "serif",
                              "monospace"
                            ],
                            "description": "Browser font family for text elements."
                          },
                          "fontSize": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "description": "Text size in project pixels."
                          },
                          "fill": {
                            "type": "string",
                            "pattern": "^#[\\da-f]{6}$",
                            "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                          },
                          "fillOpacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1,
                            "description": "Solid fill opacity. Gradient stops carry their own opacity."
                          },
                          "fillGradient": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "linear",
                                      "radial"
                                    ],
                                    "description": "Gradient geometry."
                                  },
                                  "angle": {
                                    "type": "number",
                                    "description": "Linear gradient angle in degrees; ignored for radial gradients."
                                  },
                                  "stops": {
                                    "minItems": 2,
                                    "maxItems": 8,
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "offset": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop position from 0 (start) to 1 (end)."
                                        },
                                        "color": {
                                          "type": "string",
                                          "pattern": "^#[\\da-f]{6}$",
                                          "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                                        },
                                        "opacity": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop opacity from 0 (transparent) to 1 (opaque)."
                                        }
                                      },
                                      "required": [
                                        "offset",
                                        "color",
                                        "opacity"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "description": "Two to eight color stops along the gradient."
                                  }
                                },
                                "required": [
                                  "type",
                                  "angle",
                                  "stops"
                                ],
                                "additionalProperties": false,
                                "description": "Gradient paint. Set the containing gradient field to null to use a solid color."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Fill gradient, or null to use the solid fill color."
                          },
                          "stroke": {
                            "type": "string",
                            "pattern": "^#[\\da-f]{6}$",
                            "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                          },
                          "strokeOpacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1,
                            "description": "Solid outline opacity from 0 to 1."
                          },
                          "strokeGradient": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "linear",
                                      "radial"
                                    ],
                                    "description": "Gradient geometry."
                                  },
                                  "angle": {
                                    "type": "number",
                                    "description": "Linear gradient angle in degrees; ignored for radial gradients."
                                  },
                                  "stops": {
                                    "minItems": 2,
                                    "maxItems": 8,
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "offset": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop position from 0 (start) to 1 (end)."
                                        },
                                        "color": {
                                          "type": "string",
                                          "pattern": "^#[\\da-f]{6}$",
                                          "description": "Opaque color in six-digit hexadecimal notation, for example #6366f1."
                                        },
                                        "opacity": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1,
                                          "description": "Stop opacity from 0 (transparent) to 1 (opaque)."
                                        }
                                      },
                                      "required": [
                                        "offset",
                                        "color",
                                        "opacity"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "description": "Two to eight color stops along the gradient."
                                  }
                                },
                                "required": [
                                  "type",
                                  "angle",
                                  "stops"
                                ],
                                "additionalProperties": false,
                                "description": "Gradient paint. Set the containing gradient field to null to use a solid color."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Outline gradient, or null to use the solid stroke color."
                          },
                          "strokeWidth": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Outline width in project pixels. 0 disables the outline."
                          },
                          "shape": {
                            "type": "string",
                            "enum": [
                              "rectangle",
                              "ellipse",
                              "line"
                            ],
                            "description": "Shape geometry; relevant only to shape elements."
                          },
                          "radius": {
                            "type": "number",
                            "minimum": 0,
                            "description": "Rectangle corner radius in project pixels."
                          },
                          "keyframes": {
                            "maxItems": 1000,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "property": {
                                  "type": "string",
                                  "enum": [
                                    "x",
                                    "y",
                                    "rotation",
                                    "opacity",
                                    "scale"
                                  ],
                                  "description": "Animated transform property; uses the same units as the segment field."
                                },
                                "time": {
                                  "type": "number",
                                  "minimum": 0,
                                  "description": "Time in seconds relative to the segment start."
                                },
                                "value": {
                                  "type": "number",
                                  "description": "Property value at this keyframe. Must remain valid for the animated property."
                                }
                              },
                              "required": [
                                "property",
                                "time",
                                "value"
                              ],
                              "additionalProperties": false
                            },
                            "description": "Transform keyframes in segment-local timeline seconds. An empty array uses static properties."
                          }
                        },
                        "additionalProperties": false,
                        "description": "Segment properties to change. Omitted fields retain their values; the segment ID cannot change."
                      }
                    },
                    "required": [
                      "op",
                      "id",
                      "patch"
                    ],
                    "additionalProperties": false,
                    "description": "Update an existing segment on an unlocked track. The resulting project must remain valid."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "delete_clip",
                        "description": "Delete a segment."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      },
                      "ripple": {
                        "description": "When true, move later segments on the same track earlier by the removed duration. Omitted means false.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "op",
                      "id"
                    ],
                    "additionalProperties": false,
                    "description": "Remove a segment from an unlocked track, optionally closing its timeline gap."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "delete_asset",
                        "description": "Delete imported media."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      }
                    },
                    "required": [
                      "op",
                      "id"
                    ],
                    "additionalProperties": false,
                    "description": "Remove an asset and all segments using it. Unlock every affected track first."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "split",
                        "description": "Split a segment."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      },
                      "time": {
                        "type": "number",
                        "minimum": 0,
                        "description": "Absolute timeline time in seconds, not source time. Leave at least one project frame on each side."
                      }
                    },
                    "required": [
                      "op",
                      "id",
                      "time"
                    ],
                    "additionalProperties": false,
                    "description": "Split a segment into two at an absolute timeline time. The right half receives a generated ID."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "transition",
                        "description": "Overlap with the preceding segment."
                      },
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160,
                        "description": "Stable identifier. For existing entities use the exact ID from inspect_project, not a name. New entities require a unique ID."
                      },
                      "seconds": {
                        "type": "number",
                        "minimum": 0,
                        "description": "Overlap and fade-in duration in seconds; must be shorter than both segments. 0 removes the overlap."
                      }
                    },
                    "required": [
                      "op",
                      "id",
                      "seconds"
                    ],
                    "additionalProperties": false,
                    "description": "Move this segment to overlap the preceding segment on its track and set its fade-in duration."
                  }
                ]
              }
            },
            {
              "minItems": 1,
              "maxItems": 1,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "undo",
                        "description": "Undo the previous history entry."
                      }
                    },
                    "required": [
                      "op"
                    ],
                    "additionalProperties": false,
                    "description": "Undo one history entry. Must be the only operation in the batch."
                  },
                  {
                    "type": "object",
                    "properties": {
                      "op": {
                        "type": "string",
                        "const": "redo",
                        "description": "Redo the next history entry."
                      }
                    },
                    "required": [
                      "op"
                    ],
                    "additionalProperties": false,
                    "description": "Redo one history entry. Must be the only operation in the batch."
                  }
                ]
              }
            }
          ],
          "description": "An atomic batch of regular edits, or one standalone undo/redo. Operations execute in order and may reference IDs created earlier in this batch."
        }
      },
      "required": [
        "expectedRevision",
        "idempotencyKey",
        "operations"
      ],
      "additionalProperties": false
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "revision": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Resulting project revision, or the proposed revision during validation."
        },
        "projectId": {
          "description": "Project ID; omitted for undo and redo.",
          "type": "string",
          "minLength": 1,
          "maxLength": 160
        },
        "validated": {
          "description": "Present when a regular batch passed project validation.",
          "type": "boolean",
          "const": true
        },
        "applied": {
          "type": "boolean",
          "description": "Whether the edit was committed. false for validateOnly."
        }
      },
      "required": [
        "revision",
        "applied"
      ],
      "additionalProperties": false,
      "description": "Edit receipt. Inspect again before preparing another batch."
    }
  },
  {
    "name": "preview_frame",
    "title": "Preview frame",
    "description": "Render an absolute timeline timestamp in the approved connected editor. Return the composed frame as MCP image content, plus timestamp and MIME type metadata. Uses the same browser renderer as manual editing and moves the playhead. Requires an open editor with available media. A preview shares the requested image with the AI client.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "time": {
          "type": "number",
          "minimum": 0,
          "description": "Absolute timeline timestamp in seconds. The editor clamps it to the project duration."
        }
      },
      "required": [
        "time"
      ],
      "additionalProperties": false
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "time": {
          "type": "number",
          "minimum": 0,
          "description": "Actual rendered timeline timestamp in seconds."
        },
        "mimeType": {
          "type": "string",
          "description": "MIME type of the image content returned alongside this metadata."
        }
      },
      "required": [
        "time",
        "mimeType"
      ],
      "additionalProperties": false
    }
  },
  {
    "name": "export_video",
    "title": "Export video",
    "description": "Start an asynchronous browser-local export and return its job ID. Requires an approved connected editor. Inspect codec capabilities first. Defaults to project dimensions, frame rate and name, 8 Mbps, SDR MP4/H.264/AAC with audio. Output dimensions must be even. Only one export runs at a time. Poll manage_jobs with the returned ID; the user downloads the completed file from the editor.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "settings": {
          "description": "Optional export overrides. Omitted fields use the defaults described on each property.",
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 200,
              "description": "Output file name. Omit to use the project name."
            },
            "width": {
              "type": "integer",
              "minimum": 16,
              "maximum": 7680,
              "multipleOf": 2,
              "description": "Even output width in pixels. Omit to use project width."
            },
            "height": {
              "type": "integer",
              "minimum": 16,
              "maximum": 7680,
              "multipleOf": 2,
              "description": "Even output height in pixels. Omit to use project height."
            },
            "fps": {
              "type": "number",
              "minimum": 1,
              "maximum": 120,
              "description": "Output frames per second. Omit to use project frame rate."
            },
            "bitrate": {
              "type": "number",
              "minimum": 100000,
              "maximum": 100000000,
              "description": "Video bitrate in bits per second. Omit for 8000000 (8 Mbps)."
            },
            "format": {
              "type": "string",
              "enum": [
                "mp4",
                "webm"
              ],
              "description": "mp4 uses H.264/AAC; webm uses VP9/Opus. Omit for mp4. Check codec capabilities first."
            },
            "audio": {
              "type": "boolean",
              "description": "Whether to include audio. Omit for true."
            },
            "allowToneMap": {
              "type": "boolean",
              "description": "Allow HDR sources to be tone-mapped to SDR. Omit for false. HDR output is not supported."
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "jobId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 160,
          "description": "New export job ID. Pass this to manage_jobs to read progress or cancel."
        }
      },
      "required": [
        "jobId"
      ],
      "additionalProperties": false
    }
  },
  {
    "name": "manage_jobs",
    "title": "Manage jobs",
    "description": "Read the current browser export status or cancel an identified export. Requires an approved connected editor. Omitted action means status. Supply jobId to reject a stale or different job; cancel requires jobId. Progress ranges from 0 to 1. Completion exposes download availability, not file bytes or a remote URL; download through the editor.",
    "icons": [
      {
        "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADqUlEQVR4AeyYPW/TQBiA37uirtCfwIQYAAEzgj8AlZAYUIJUtREjCzAxMwELIwpVJVoxICEBfwDEXBAwICb+QQtrRXPc48rVxbEd1/XH5Zyob3w+3715n8dnO6mWgq+7t8zJQc/0V/tmuNoz22s9s2PDeBI71ERt1EitBbFkqoDBbXOexPuL8seIvFJG1pTIJfsBSzZ8+VuiJmqjRmqlZmqfVmCuAGv1qdHyjcTTEvl2nJqpHYa82lIFrPTMObuUtq3V+3mTZ+EYDLDAlFbvhIBB31w5IfLJLiWWedqcmeuDBSbYksWPCYgsGXlnJ/h0fSdrLrUfMVm2iNHJMCbAWtqIBjoDQmrCBqPLdCiAm4UdEMyydyHdNoywxn2RAB4X3CziztC3sMIMZyRgtCD32OlSxMyab008M7sEDyvMsOvRolyno4sBux4puSYFX8NNkTJRMP3EsDKfxZyJRBkdsGsxcjHjePjdll3bO+Lp8EnTCWHnKRDct7503IPexPsSAhJ93dqdC6jifA/6InlR9jPycnKsbF533nwFuDa62G50Bdy46Z/ixgU8fCRy5qw/IhoVADbwSPBlNTQuAAkEAgjabUZrAoBGAD9e2LLfRrQqIAZGABHvN7n1QgDACCBoNxneCAAaAU1fEl4JQAKBCIJ23eGlAKARwOOSdp3hrQCg+c5w3EuCPHnhtYC8wqs65rWAXz9FnjwWef+2KtzJPN4KABp4JEyWXV2PlwIAR0B1mNmZvBLA2eY/PWyzS672iDcCOOOc+WrxpmdrXQBnG3AETC+3+hGtCojh2VaPVixjawI445z5YmXWN6pxAZxtwBFQH1bxzI0KABp4JBQvsd6RjQuoF+fo2RsVcPTy6p8xF1CFY36y5kXZz8jLybGyed15wa0AF65Iey7AWtq10dW/XW1EfneVHnYtSr52VQDs2i6Bj0UF8Fu9TBTNnxxX5rOYk8yTtQ+71nvyIWtA6P2w6xdv1F+j5GXosEk+mGHXHND78pxtlyJmjgQMX6vv9o74rCsCYIUZ3kgAjfUt9UCJfKEdcsAIa8x4KICOfyIrdkCwX4xgg1Gc15iAjS31wz4blxnojAmiGTEpWY4YHaIxAfQPN9Vna+mqnRDM5QALTLDB6MaEAA5iabilLnOzYH+WAwZYYErjSBUQD+RmoUZygWdm3DcrW2qmdhjyas4VwEQeF+ubarCwJ6fsUrpDYmuVy8OLm6UcvHapidqokVqpmdoPDme//wcAAP//mvPDqgAAAAZJREFUAwCuVbxoerjh3QAAAABJRU5ErkJggg==",
        "mimeType": "image/png",
        "sizes": [
          "64x64"
        ]
      },
      {
        "src": "data:image/png;base64,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",
        "mimeType": "image/png",
        "sizes": [
          "128x128"
        ]
      }
    ],
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "action": {
              "default": "status",
              "description": "Read the current export job. Omitted means status.",
              "type": "string",
              "const": "status"
            },
            "jobId": {
              "description": "Expected job ID. Omit to inspect the current job, including idle state.",
              "type": "string",
              "minLength": 1,
              "maxLength": 160
            }
          },
          "additionalProperties": false,
          "description": "Read export status without changing the job."
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "cancel",
              "description": "Cancel the current export."
            },
            "jobId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 160,
              "description": "ID of the export to cancel. A mismatched ID is rejected."
            }
          },
          "required": [
            "action",
            "jobId"
          ],
          "additionalProperties": false,
          "description": "Cancel the identified export. Ask the user before discarding an export they still need."
        }
      ],
      "type": "object"
    },
    "outputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Current job ID; empty when no export has started."
        },
        "status": {
          "type": "string",
          "enum": [
            "idle",
            "rendering",
            "complete",
            "error",
            "canceled"
          ],
          "description": "Export lifecycle state."
        },
        "progress": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Completed fraction from 0 to 1."
        },
        "fps": {
          "type": "number",
          "minimum": 0,
          "description": "Observed rendering throughput in frames per second."
        },
        "frames": {
          "type": "number",
          "minimum": 0,
          "description": "Number of frames rendered so far."
        },
        "error": {
          "type": "string",
          "description": "Error or cancellation message; empty when none."
        },
        "seconds": {
          "description": "Elapsed export duration in seconds, available after completion.",
          "type": "number",
          "minimum": 0
        },
        "renderer": {
          "description": "Renderer used for the completed export.",
          "type": "string"
        },
        "audioPrimingCorrectionMs": {
          "description": "Audio encoder priming correction applied in milliseconds, available after completion.",
          "type": "number",
          "minimum": 0
        },
        "storage": {
          "description": "Browser storage used for the completed file: origin-private file system or memory.",
          "type": "string",
          "enum": [
            "OPFS",
            "memory"
          ]
        },
        "settings": {
          "description": "Resolved settings for the current export; absent in initial idle state.",
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 200,
              "description": "Output file name. Omit to use the project name."
            },
            "width": {
              "type": "integer",
              "minimum": 16,
              "maximum": 7680,
              "multipleOf": 2,
              "description": "Even output width in pixels. Omit to use project width."
            },
            "height": {
              "type": "integer",
              "minimum": 16,
              "maximum": 7680,
              "multipleOf": 2,
              "description": "Even output height in pixels. Omit to use project height."
            },
            "fps": {
              "type": "number",
              "minimum": 1,
              "maximum": 120,
              "description": "Output frames per second. Omit to use project frame rate."
            },
            "bitrate": {
              "type": "number",
              "minimum": 100000,
              "maximum": 100000000,
              "description": "Video bitrate in bits per second. Omit for 8000000 (8 Mbps)."
            },
            "format": {
              "type": "string",
              "enum": [
                "mp4",
                "webm"
              ],
              "description": "mp4 uses H.264/AAC; webm uses VP9/Opus. Omit for mp4. Check codec capabilities first."
            },
            "audio": {
              "type": "boolean",
              "description": "Whether to include audio. Omit for true."
            },
            "allowToneMap": {
              "type": "boolean",
              "description": "Allow HDR sources to be tone-mapped to SDR. Omit for false. HDR output is not supported."
            }
          },
          "required": [
            "name",
            "width",
            "height",
            "fps",
            "bitrate",
            "format",
            "audio",
            "allowToneMap"
          ],
          "additionalProperties": false
        },
        "bytes": {
          "description": "Completed file size in bytes; absent until a file is available.",
          "type": "number",
          "minimum": 0
        },
        "downloadAvailable": {
          "type": "boolean",
          "description": "Whether the user can download the file from the editor."
        }
      },
      "required": [
        "id",
        "status",
        "progress",
        "fps",
        "frames",
        "error",
        "downloadAvailable"
      ],
      "additionalProperties": false
    }
  }
]
