agentic-video Gallery

Find the cross-dissolve where two shots are joined

Cuts and editsSyntheticVerified
0:07generated · generated

Proof frames

Click a frame to seek

Tool calls

2 calls · agentic-video 0.3.1
detect_cutsimac · 277 ms

Arguments

{
  "source": "$CLIP"
}

Result

{
  "ok": true,
  "data": {
    "cuts": [
      {
        "timestamp_sec": 3.15,
        "score": 0.15295,
        "kind": "transition"
      }
    ],
    "total": 1
  }
}
inspect_windowimac · 266 ms

Arguments

{
  "source": "$CLIP",
  "start_sec": 1.68,
  "end_sec": 4.64,
  "fps": 2
}

Result

{
  "ok": true,
  "data": {
    "source_path": "~/hill/gallery/repo/cards/dissolve-synthetic/clip.mp4",
    "start_sec": 1.68,
    "end_sec": 4.64,
    "fps": 2,
    "frames": [
      {
        "index": 1,
        "timestamp_sec": 1.68,
        "timecode": "00:00:01.680",
        "file_path": "<cache>/4243b17707c5dd916f23/dense_3a61649497147e939ded/frame_0001.jpg",
        "width": 640,
        "height": 360,
        "requested_timestamp": 1.68,
        "decoded_timestamp": null,
        "timestamp_delta": null
      },
      {
        "index": 2,
        "timestamp_sec": 2.18,
        "timecode": "00:00:02.180",
        "file_path": "<cache>/4243b17707c5dd916f23/dense_3a61649497147e939ded/frame_0002.jpg",
        "width": 640,
        "height": 360,
        "requested_timestamp": 2.18,
        "decoded_timestamp": null,
        "timestamp_delta": null
      },
      {
        "index": 3,
        "timestamp_sec": 2.68,
        "timecode": "00:00:02.680",
        "file_path": "<cache>/4243b17707c5dd916f23/dense_3a61649497147e939ded/frame_0003.jpg",
        "width": 640,
        "height": 360,
        "requested_timestamp": 2.68,
        "decoded_timestamp": null,
        "timestamp_delta": null
      },
      {
        "index": 4,
        "timestamp_sec": 3.18,
        "timecode": "00:00:03.180",
        "file_path": "<cache>/4243b17707c5dd916f23/dense_3a61649497147e939ded/frame_0004.jpg",
        "width": 640,
        "height": 360,
        "requested_timestamp": 3.18,
        "decoded_timestamp": null,
        "timestamp_delta": null
      },
      {
        "index": 5,
        "timestamp_sec": 3.68,
        "timecode": "00:00:03.680",
        "file_path": "<cache>/4243b17707c5dd916f23/dense_3a61649497147e939ded/frame_0005.jpg",
        "width": 640,
        "height": 360,
        "requested_timestamp": 3.68,
        "decoded_timestamp": null,
        "timestamp_delta": null
      },
      {
        "index": 6,
        "timestamp_sec": 4.18,
        "timecode": "00:00:04.180",
        "file_path": "<cache>/4243b17707c5dd916f23/dense_3a61649497147e939ded/frame_0006.jpg",
        "width": 640,
        "height": 360,
        "requested_timestamp": 4.18,
        "decoded_timestamp": null,
        "timestamp_delta": null
      }
    ],
    "contact_sheet_path": "/private<cache>/4243b17707c5dd916f23/contact_sheets/sheet_6samples_4cols_ca80d5.jpg",
    "estimated_vision_tokens": 1548,
    "tool_file": {
      "_tag": "ToolFile",
      "name": "sheet_6samples_4cols_ca80d5.jpg",
      "mimeType": "image/jpeg",
      "encoding": "base64",
      "data": "<180672 base64 chars dropped>",
      "byteLength": 135503
    }
  }
}

Question and answer

Question
Is there a fade between shots? Where is it?
Answer
The tool reports a transition at 3.15 seconds, where the two shots meet.
Check passedanswer 3.15, expected 3.16 ±1.0

How it was checked

Truth from
constructed
Fixed at

Planted by this recipe before any tool ran: shot A is 4.16 s of synthetic-bouncing-ball from 0.4 s; shot B is 4.72 s of testcard from 7.44 s (another source of the same domain; neither shot has a hard cut inside). ffmpeg joined them with one 2.0 s cross-dissolve (xfade fade) from 2.16 s to 4.16 s of the clip. The truth is the fade midpoint 3.16 s, with tolerance 1 s (half the fade), so a cut time anywhere inside the fade passes. The window given to inspect_window is the fade plus 0.5 s either side, fixed here.

A script joined two shots, one from 'Generated bouncing ball with a bounce counter and click sound' and one from another clip of the same kind, with a planted 2.0 s cross-dissolve and no sound, so the answer is one time inside that fade (not its start and end); the card does not show whether detect_cuts finds other cuts.

Try it yourself

Use agentic-video on my video. Run detect_cuts on the whole video, then run inspect_window over the part where the picture fades into the next shot. Tell me the time of the fade.
  1. Get the .mcpb file and open it in Claude Desktop.
  2. Or: pip install agentic-video

Clip and licence

Licence
generated

Generated for the gallery; no third-party material.

Also uses (insert 1)

Licence
generated

Generated for the gallery; no third-party material.