Skip to main content
Glama

Preview the timeline

preview_timeline
Read-onlyIdempotent

Look at a timestamped contact sheet of the entire composed timeline. Pass audio mix or tracks to see the sound under each row of frames and a sound summary. Use after visual, timing or sound edits. Read the returned pixels.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "audio": "<audio>",
      "detail": "<detail>",
      "grid": "<grid>",
      "gridStep": "<gridStep>",
      "gridDensity": "<gridDensity>",
      "annotate": "<annotate>",
      "overlays": "<overlays>",
      "loupes": "<loupes>",
      "projectId": "<projectId>"
    },
    "name": "preview_timeline"
  }
}

Input Schema

NameRequiredDescriptionDefault
gridYesDraw a labelled grid and edge rulers to read coordinates off the picture: in source pixels (of the front video or image clip), film pixels (centre origin) or film_norm. null or none draws none.
audioYesThe audio strip drawn under each row of frames, on the same time axis: a log-frequency spectrogram (sub, bass, mids, highs) with a loudness line and ticks for clip starts and ends, hits, beats and downbeats, plus a text summary of each lane's loudness, each sound's hit time and masking. mix is what the viewer hears; tracks stacks music, voice, sound effects and video sound as separate lanes; none draws frames only. null (or leaving it out) means none.
detailYesHow much the answer says: brief is one line per result with its ids; normal (null) adds the transform; full adds every matrix of the chain.
loupesYesA magnified inset around a point with a crosshair, for checking a corner to the pixel. The point may be in any space (type point).
annotateYesYour own points, boxes, quads, lines or polygons drawn on the frame in any space, to check them before you commit: e.g. the four corners you think a sign has, in source pixels. null draws none.
gridStepYesGrid spacing in the grid's own units. null picks a step that keeps the labels legible (see gridDensity).
overlaysYesWhat to outline on every frame: tracks (each object track on screen, a plane's corners numbered 0 to 3), pins (each <pin>'s corners), follows (each <follow>'s anchor), regions (each region's box), safeAreas (TikTok, Reels and Shorts safe areas), clipBounds (each clip's picture after fit, with its id), crop (what a cover fit cuts off), occluders (the box of what passes in front of each tracked surface, from track_occluders). null outlines nothing.
projectIdYesThe project this call runs on without changing the open project. null (or leaving it out) uses the open project. wait_for_jobs takes the projectId of the calls that started the jobs.
gridDensityYesHow close the grid lines are when gridStep is null: sparse, normal (null) or dense.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / overlays / description
      Previous value: -"What to outline on every frame: tracks (each object track on screen, a plane's corners numbered 0 to 3), pins (each <pin>'s corners), follows (each <follow>'s anchor), regions (each region's box), safeAreas (TikTok, Reels and Shorts safe areas), clipBounds (each clip's picture after fit, with its id), crop (what a cover fit cuts off), occluders (not available yet). null outlines nothing."New value: +"What to outline on every frame: tracks (each object track on screen, a plane's corners numbered 0 to 3), pins (each <pin>'s corners), follows (each <follow>'s anchor), regions (each region's box), safeAreas (TikTok, Reels and Shorts safe areas), clipBounds (each clip's picture after fit, with its id), crop (what a cover fit cuts off), occluders (the box of what passes in front of each tracked surface, from track_occluders). null outlines nothing."
  2. Changed8 schema fields changed
    • addedInput schema / properties / annotate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "color": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "CSS colour, or null for cyan."
      +          },
      +          "geometry": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "assetId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For space source or source_norm: the asset whose pixels these are (or give clipId). Else null."
      +              },
      +              "clipId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "The clip whose chain to use: for space clip, and for source when several clips show the asset. Else null."
      +              },
      +              "points": {
      +                "description": "The points, each [x, y], in the order the type says.",
      +                "items": {
      +                  "items": {
      +                    "type": "number"
      +                  },
      +                  "maxItems": 2,
      +                  "minItems": 2,
      +                  "type": "array"
      +                },
      +                "type": "array"
      +              },
      +              "previewId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For space preview, preview_norm or tile: the previewId a preview_frame, preview_range or preview_timeline answer printed. Else null."
      +              },
      +              "space": {
      +                "description": "The space the points are in: source, source_norm, clip, film, film_tl, film_norm, preview, preview_norm, surface, tile. source: pixels of the asset; film: scene pixels from the frame's centre; film_norm: 0 to 1 of the frame; preview: pixels of a preview image (with previewId); surface: UV on a tracked surface (with trackId).",
      +                "enum": [
      +                  "source",
      +                  "source_norm",
      +                  "clip",
      +                  "film",
      +                  "film_tl",
      +                  "film_norm",
      +                  "preview",
      +                  "preview_norm",
      +                  "surface",
      +                  "tile"
      +                ],
      +                "type": "string"
      +              },
      +              "tile": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For a contact sheet: the tile index (0 is the top left tile). null picks the tile the point lies in."
      +              },
      +              "time": {
      +                "anyOf": [
      +                  {
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Timeline seconds this geometry is at; null uses the call's time, or a preview tile's own time."
      +              },
      +              "trackId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For space surface: the object track whose surface the UV is on. Else null."
      +              },
      +              "type": {
      +                "description": "point (1 point), box (2: top left, bottom right), quad (4: top left, top right, bottom right, bottom left), line (2), polygon (3 or more), polyline (2 or more).",
      +                "enum": [
      +                  "point",
      +                  "box",
      +                  "quad",
      +                  "polygon",
      +                  "line",
      +                  "polyline"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "space",
      +              "points",
      +              "previewId",
      +              "assetId",
      +              "clipId",
      +              "trackId",
      +              "tile",
      +              "time"
      +            ],
      +            "type": "object"
      +          },
      +          "label": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Text drawn beside it, or null."
      +          }
      +        },
      +        "required": [
      +          "geometry",
      +          "label",
      +          "color"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Your own points, boxes, quads, lines or polygons drawn on the frame in any space, to check them before you commit: e.g. the four corners you think a sign has, in source pixels. null draws none."
      +}
    • addedInput schema / properties / detail
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "brief",
      +        "normal",
      +        "full"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "How much the answer says: brief is one line per result with its ids; normal (null) adds the transform; full adds every matrix of the chain."
      +}
    • addedInput schema / properties / grid
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "none",
      +        "source",
      +        "film",
      +        "film_norm"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Draw a labelled grid and edge rulers to read coordinates off the picture: in source pixels (of the front video or image clip), film pixels (centre origin) or film_norm. null or none draws none."
      +}
    • addedInput schema / properties / gridDensity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "sparse",
      +        "normal",
      +        "dense"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "How close the grid lines are when gridStep is null: sparse, normal (null) or dense."
      +}
    • addedInput schema / properties / gridStep
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Grid spacing in the grid's own units. null picks a step that keeps the labels legible (see gridDensity)."
      +}
    • addedInput schema / properties / loupes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "point": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "assetId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For space source or source_norm: the asset whose pixels these are (or give clipId). Else null."
      +              },
      +              "clipId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "The clip whose chain to use: for space clip, and for source when several clips show the asset. Else null."
      +              },
      +              "points": {
      +                "description": "The points, each [x, y], in the order the type says.",
      +                "items": {
      +                  "items": {
      +                    "type": "number"
      +                  },
      +                  "maxItems": 2,
      +                  "minItems": 2,
      +                  "type": "array"
      +                },
      +                "type": "array"
      +              },
      +              "previewId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For space preview, preview_norm or tile: the previewId a preview_frame, preview_range or preview_timeline answer printed. Else null."
      +              },
      +              "space": {
      +                "description": "The space the points are in: source, source_norm, clip, film, film_tl, film_norm, preview, preview_norm, surface, tile. source: pixels of the asset; film: scene pixels from the frame's centre; film_norm: 0 to 1 of the frame; preview: pixels of a preview image (with previewId); surface: UV on a tracked surface (with trackId).",
      +                "enum": [
      +                  "source",
      +                  "source_norm",
      +                  "clip",
      +                  "film",
      +                  "film_tl",
      +                  "film_norm",
      +                  "preview",
      +                  "preview_norm",
      +                  "surface",
      +                  "tile"
      +                ],
      +                "type": "string"
      +              },
      +              "tile": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For a contact sheet: the tile index (0 is the top left tile). null picks the tile the point lies in."
      +              },
      +              "time": {
      +                "anyOf": [
      +                  {
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Timeline seconds this geometry is at; null uses the call's time, or a preview tile's own time."
      +              },
      +              "trackId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "For space surface: the object track whose surface the UV is on. Else null."
      +              },
      +              "type": {
      +                "description": "point (1 point), box (2: top left, bottom right), quad (4: top left, top right, bottom right, bottom left), line (2), polygon (3 or more), polyline (2 or more).",
      +                "enum": [
      +                  "point",
      +                  "box",
      +                  "quad",
      +                  "polygon",
      +                  "line",
      +                  "polyline"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "space",
      +              "points",
      +              "previewId",
      +              "assetId",
      +              "clipId",
      +              "trackId",
      +              "tile",
      +              "time"
      +            ],
      +            "type": "object"
      +          },
      +          "radius": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Image pixels around the point, null for 24."
      +          },
      +          "zoom": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Magnification, null for 4."
      +          }
      +        },
      +        "required": [
      +          "point",
      +          "radius",
      +          "zoom"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "A magnified inset around a point with a crosshair, for checking a corner to the pixel. The point may be in any space (type point)."
      +}
    • addedInput schema / properties / overlays
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "enum": [
      +          "tracks",
      +          "pins",
      +          "follows",
      +          "regions",
      +          "safeAreas",
      +          "clipBounds",
      +          "crop",
      +          "occluders"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What to outline on every frame: tracks (each object track on screen, a plane's corners numbered 0 to 3), pins (each <pin>'s corners), follows (each <follow>'s anchor), regions (each region's box), safeAreas (TikTok, Reels and Shorts safe areas), clipBounds (each clip's picture after fit, with its id), crop (what a cover fit cuts off), occluders (not available yet). null outlines nothing."
      +}
    • changedInput schema / required
      Previous value: -[
      -  "audio",
      -  "projectId"
      -]New value: +[
      +  "audio",
      +  "detail",
      +  "grid",
      +  "gridStep",
      +  "gridDensity",
      +  "annotate",
      +  "overlays",
      +  "loupes",
      +  "projectId"
      +]
  3. First observed

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, non-destructive, and closed-world. The description adds that the output is a pixel contact sheet and that it may include a sound summary, but it does not go further into return format or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, with the main purpose front-loaded and no filler. Every sentence contributes either purpose, audio behavior, or usage timing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex preview tool with a very rich schema, the description covers the essential purpose, when to use it, and the audio-inspection option. Since the schema carries the detailed parameter semantics and there is no output schema, the description is reasonably complete, though it could say more about the returned pixel output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all nine parameters in detail. The description only adds a little meaning for the audio parameter and does not discuss grid, overlays, loupes, annotate, or detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific verb and resource: looking at a timestamped contact sheet of the entire composed timeline. This clearly separates the tool from a generic preview, but it never names sibling alternatives such as preview_frame or preview_range.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: use after visual, timing, or sound edits, and pass audio mix or tracks to inspect sound. It does not explicitly state when not to use it or route the agent to sibling preview tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.