agentic-video Gallery

Find each shot change in a 4-shot film clip

ReviewFilmTool missed
0:26CC-BY-2.5 · Orange Open Movie Team (Blender Foundation)

Proof frames

Click a frame to seek

Tool calls

2 calls · agentic-video 0.3.1
detect_cutsimac · 3010 ms

Arguments

{
  "source": "$CLIP"
}

Result

{
  "ok": true,
  "data": {
    "cuts": [
      {
        "timestamp_sec": 3.52,
        "score": 0.26174,
        "kind": "cut"
      },
      {
        "timestamp_sec": 4.8,
        "score": 0.775656,
        "kind": "cut"
      },
      {
        "timestamp_sec": 8.65,
        "score": 0.304957,
        "kind": "transition"
      },
      {
        "timestamp_sec": 12.2,
        "score": 0.671473,
        "kind": "cut"
      },
      {
        "timestamp_sec": 19.96,
        "score": 0.394259,
        "kind": "cut"
      }
    ],
    "total": 5
  }
}
inspect_windowsimac · 2211 ms

Arguments

{
  "source": "$CLIP",
  "windows": [
    {
      "start_sec": 3.76,
      "end_sec": 5.76
    },
    {
      "start_sec": 11.2,
      "end_sec": 13.2
    },
    {
      "start_sec": 18.96,
      "end_sec": 20.96
    }
  ],
  "fps": 2
}

Result

{
  "ok": true,
  "data": {
    "windows": [
      {
        "index": 1,
        "input_indices": [
          0
        ],
        "start_sec": 3.76,
        "end_sec": 5.76,
        "fps": 2,
        "frames": [
          {
            "index": 1,
            "timestamp_sec": 3.76,
            "timecode": "00:00:03.760",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_3a9777c9366b47e06d58/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 3.76,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 2,
            "timestamp_sec": 4.26,
            "timecode": "00:00:04.260",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_3a9777c9366b47e06d58/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 4.26,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 3,
            "timestamp_sec": 4.76,
            "timecode": "00:00:04.760",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_3a9777c9366b47e06d58/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 4.76,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 4,
            "timestamp_sec": 5.26,
            "timecode": "00:00:05.260",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_3a9777c9366b47e06d58/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 5.26,
            "decoded_timestamp": null,
            "timestamp_delta": null
          }
        ],
        "contact_sheet_path": "/private<cache>/bd59e622f817ecaddfa3/contact_sheets/sheet_4s…",
        "estimated_vision_tokens": 1032,
        "tool_file": {
          "_tag": "ToolFile",
          "name": "sheet_4samples_4cols_1f481b.jpg",
          "mimeType": "image/jpeg",
          "encoding": "base64",
          "data": "<158468 base64 chars dropped>",
          "byteLength": 118851
        }
      },
      {
        "index": 2,
        "input_indices": [
          1
        ],
        "start_sec": 11.2,
        "end_sec": 13.2,
        "fps": 2,
        "frames": [
          {
            "index": 1,
            "timestamp_sec": 11.2,
            "timecode": "00:00:11.200",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_d3fb3de64f8015c73fb6/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 11.2,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 2,
            "timestamp_sec": 11.7,
            "timecode": "00:00:11.700",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_d3fb3de64f8015c73fb6/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 11.7,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 3,
            "timestamp_sec": 12.2,
            "timecode": "00:00:12.200",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_d3fb3de64f8015c73fb6/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 12.2,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 4,
            "timestamp_sec": 12.7,
            "timecode": "00:00:12.700",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_d3fb3de64f8015c73fb6/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 12.7,
            "decoded_timestamp": null,
            "timestamp_delta": null
          }
        ],
        "contact_sheet_path": "/private<cache>/bd59e622f817ecaddfa3/contact_sheets/sheet_4s…",
        "estimated_vision_tokens": 1032,
        "tool_file": {
          "_tag": "ToolFile",
          "name": "sheet_4samples_4cols_b5677c.jpg",
          "mimeType": "image/jpeg",
          "encoding": "base64",
          "data": "<164640 base64 chars dropped>",
          "byteLength": 123479
        }
      },
      {
        "index": 3,
        "input_indices": [
          2
        ],
        "start_sec": 18.96,
        "end_sec": 20.96,
        "fps": 2,
        "frames": [
          {
            "index": 1,
            "timestamp_sec": 18.96,
            "timecode": "00:00:18.960",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_79f4393355672b10ad35/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 18.96,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 2,
            "timestamp_sec": 19.46,
            "timecode": "00:00:19.460",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_79f4393355672b10ad35/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 19.46,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 3,
            "timestamp_sec": 19.96,
            "timecode": "00:00:19.960",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_79f4393355672b10ad35/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 19.96,
            "decoded_timestamp": null,
            "timestamp_delta": null
          },
          {
            "index": 4,
            "timestamp_sec": 20.46,
            "timecode": "00:00:20.460",
            "file_path": "<cache>/bd59e622f817ecaddfa3/dense_79f4393355672b10ad35/fram…",
            "width": 640,
            "height": 360,
            "requested_timestamp": 20.46,
            "decoded_timestamp": null,
            "timestamp_delta": null
          }
        ],
        "contact_sheet_path": "/private<cache>/bd59e622f817ecaddfa3/contact_sheets/sheet_4s…",
        "estimated_vision_tokens": 1032,
        "tool_file": {
          "_tag": "ToolFile",
          "name": "sheet_4samples_4cols_5cf3ec.jpg",
          "mimeType": "image/jpeg",
          "encoding": "base64",
          "data": "<287264 base64 chars dropped>",
          "byteLength": 215448
        }
      }
    ],
    "total": 3,
    "total_frames": 12,
    "estimated_vision_tokens": 3096
  }
}

Question and answer

Question
Where does the shot change? Show me each change.
Answer
detect_cuts lists 5 shot changes, at 3.52, 4.80, 8.65, 12.20, 19.96 seconds.
Tool returned
[3.52,4.8,8.65,12.2,19.96]
Truth
[4.76,12.2,19.96]
Check failedprecision 0.60 (min 1), recall 1.00 (min 1), tolerance 0.5s

How it was checked

Truth from
constructed
Fixed at

Planted by this recipe before any tool ran: ffmpeg joined 4 single shots with hard cuts only (no fades, no sound, each scaled to 640x360): shot 1 is 4.76 s of elephants-dream from 20 s; shot 2 is 7.44 s of sintel-trailer from 4.8 s; shot 3 is 7.76 s of melies-voyage-impossible from 7.96 s; shot 4 is 5.92 s of melies-voyage-impossible from 35.2 s. The planted shot changes are at 4.76 s, 12.2 s, 19.96 s, and the truth is those times with tolerance 0.5 s. The calls are detect_cuts with its default threshold, then inspect_windows over 1 s either side of each planted time at 2 fps, a window fixed here before the run.

A script joined 4 single shots from 3 public film clips with three hard cuts and no fades or sound, at times it chose. The windows are centred on those planted changes, not on the tool's output, and the card does not show any other change the tool might list.

Try it yourself

Using agentic-video on my video (the file I attach or name): run detect_cuts on the whole video and list the time of every shot change it finds. Then run inspect_windows over one second either side of each change and show me the frames there. Give me each change time.
  1. Get the .mcpb file and open it in Claude Desktop.
  2. Or: pip install agentic-video

Clip and licence

Licence
CC-BY-2.5
Author
Orange Open Movie Team (Blender Foundation)
Source
commons.wikimedia.org
This file is licensed under the Creative Commons Attribution 2.5 Generic license.

Also uses (insert 1)

Licence
CC-BY-3.0
Author
Blender Foundation (Durian Open Movie project)
Source
commons.wikimedia.org
This file is licensed under the Creative Commons Attribution 3.0 Unported license.

Also uses (insert 2)

Licence
PD
Author
Georges Méliès
Source
commons.wikimedia.org
This work is in the public domain in the United States because it was published (or registered with the U.S. Copyright Office) before January 1, 1931.