get_video_frames
Extract video frames as images to inspect a clip. Control count, interval, time range, and size; use contact sheets to skim long videos without exceeding limits.
Instructions
Get frames of a video as image blocks, to "watch" a clip. Immich keeps one poster per video; this downloads the video and cuts frames locally (PyAV, a dependency since 1.7.1, or ffmpeg on PATH). Every frame is one image for the model. Workflow: 6 frames first; to look closer, narrow with start/end or use interval (down to 1 s). Above 12 frames the tool returns a JSON plan with frames_planned and estimated_tokens instead of images: show it to the user and call again with confirm=true only if they agree. Hard cap 120 per call. For base64 JSON with timestamps use get_video_frames_json. Read-only.
Args:
asset_id: The video asset's UUID.
count: Frames evenly spaced over the segment (default 6). Ignored when interval > 0.
size: 'thumbnail' (250px, ~1.6k tokens per frame) or 'preview' (1440px, ~6.4k). Default 'thumbnail'.
start: Segment start in seconds (default 0).
end: Segment end in seconds (0 = to the end).
interval: One frame every N seconds instead of count (1 = one per second, the maximum granularity).
confirm: Required (true) when more than 12 frames would be produced; ask the user first.
sheet: Pack the frames into contact sheets (30 per image, timestamps burned in):
a long video becomes one or two images instead of dozens, so no
confirmation is needed. Use it to skim, then cut the moments that matter.
Returns: JPEG image blocks in time order, or JSON (confirmation plan / error).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| size | No | thumbnail | |
| count | No | ||
| sheet | No | ||
| start | No | ||
| confirm | No | ||
| asset_id | Yes | ||
| interval | No |