agentic-video Gallery

Find when a scoreboard-like box in one region changes

Motion and regionsScreen recordingVerified
0:20CC-BY-4.0 · Lucas Werkmeister

Proof frames

Click a frame to seek

Tool calls

1 calls · agentic-video 0.3.1
track_region_changesimac · 1477 ms

Arguments

{
  "source": "$CLIP",
  "start_sec": 0,
  "end_sec": 20,
  "region": {
    "x": 0.59375,
    "y": 0.4083333333333333,
    "width": 0.275,
    "height": 0.17777777777777778
  },
  "sample_fps": 4,
  "max_candidates": 5
}

Result

{
  "ok": true,
  "data": {
    "region": {
      "x": 0.59375,
      "y": 0.4083333333333333,
      "width": 0.275,
      "height": 0.17777777777777778
    },
    "start_sec": 0,
    "end_sec": 20,
    "sample_fps": 4,
    "sample_count": 80,
    "temporal_resolution_sec": 0.25,
    "scan_segments": [
      {
        "start_sec": 0,
        "end_sec": 20,
        "sample_count": 80
      }
    ],
    "threshold": 0.02,
    "baseline_median": 0,
    "baseline_mad": 0,
    "steady_change": {
      "detected": false,
      "active_fraction": 0.063291,
      "activity_floor": 0.001,
      "note": "Most sample pairs are still; changes, if any, are the listed…"
    },
    "samples": [
      {
        "from_timestamp_sec": 0,
        "timestamp_sec": 0.25,
        "from_timestamp_provenance": {
          "requested_timestamp": 0,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 0.25,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.000025,
        "mean_abs_diff": 0.000038,
        "changed_fraction": 0
      },
      {
        "from_timestamp_sec": 0.25,
        "timestamp_sec": 0.5,
        "from_timestamp_provenance": {
          "requested_timestamp": 0.25,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 0.5,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.001436,
        "mean_abs_diff": 0.002209,
        "changed_fraction": 0
      },
      {
        "from_timestamp_sec": 0.5,
        "timestamp_sec": 0.75,
        "from_timestamp_provenance": {
          "requested_timestamp": 0.5,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 0.75,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.000672,
        "mean_abs_diff": 0.001034,
        "changed_fraction": 0
      },
      {
        "from_timestamp_sec": 0.75,
        "timestamp_sec": 1,
        "from_timestamp_provenance": {
          "requested_timestamp": 0.75,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 1,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.000301,
        "mean_abs_diff": 0.000463,
        "changed_fraction": 0
      },
      {
        "from_timestamp_sec": 1,
        "timestamp_sec": 1.25,
        "from_timestamp_provenance": {
          "requested_timestamp": 1,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 1.25,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.000244,
        "mean_abs_diff": 0.000375,
        "changed_fraction": 0
      },
      "…trimmed 74 more"
    ],
    "candidates": [
      {
        "from_timestamp_sec": 8.75,
        "timestamp_sec": 9,
        "from_timestamp_provenance": {
          "requested_timestamp": 8.75,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 9,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.557333,
        "mean_abs_diff": 0.429532,
        "changed_fraction": 0.794678,
        "rank": 1
      },
      {
        "from_timestamp_sec": 5.5,
        "timestamp_sec": 5.75,
        "from_timestamp_provenance": {
          "requested_timestamp": 5.5,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 5.75,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.557186,
        "mean_abs_diff": 0.429437,
        "changed_fraction": 0.794434,
        "rank": 2
      },
      {
        "from_timestamp_sec": 2,
        "timestamp_sec": 2.25,
        "from_timestamp_provenance": {
          "requested_timestamp": 2,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "timestamp_provenance": {
          "requested_timestamp": 2.25,
          "decoded_timestamp": null,
          "timestamp_delta": null
        },
        "change_score": 0.557184,
        "mean_abs_diff": 0.429435,
        "changed_fraction": 0.794434,
        "rank": 3
      }
    ]
  }
}

Question and answer

Question
When does the scoreboard change?
Answer
The tool reports changes in the box at 2.25, 5.75, 9 seconds.
Check passedprecision 1.00 (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 scaled the source's first 20 s to 640x360 px and overlaid a 176x64 px scoreboard-like box at x=380, y=147 px (Pillow pictures: dark slate body, amber body in the planted intervals, white bars in both). The box changes at 2.16, 5.63, 8.94 s, the state switching at every time. The tolerance 0.5 s covers the tool's 0.25 s sample step.

A script drew the box over a fixed spot and changed its colour and brightness at 3 times it chose, so the answer is those planted times, not a real scoreboard; the tool takes the region as fractions of the frame, so the pixel box was converted.

Try it yourself

Use agentic-video on my video. A box in the picture is 176 by 64 pixels, with its top-left corner at x 380 px and y 147 px, in a 640 by 360 px frame. Convert that area to fractions of the frame and call track_region_changes on the first 20 seconds with sample_fps 4 and max_candidates 5. Tell me the times, in seconds, when the box changes colour.
  1. Get the .mcpb file and open it in Claude Desktop.
  2. Or: pip install agentic-video

Clip and licence

Licence
CC-BY-4.0
Author
Lucas Werkmeister
Source
commons.wikimedia.org
This file is licensed under the Creative Commons Attribution 4.0 International license.