overcast-event-bisect
Use this skill when a video contains a single MONOTONE transition — a condition
that is false before some instant and true after it (or vice versa), and does not
flip back. Binary search finds it in about log2(window/precision) vision calls
(~12 calls localizes to ~1s inside an hour). Use the broad overcast skill and
overcast/reference/verbs.md for exact flags.
Workflow
- Local clip + record id (
see frame://needs media on disk):
overcast doctor --json
overcast case init --json
overcast watch ./clip.mp4 --json # -> record id REC (also gives shot context)
- Confirm the transition is bracketed AND monotone — the two endpoints must disagree on the predicate:
overcast see frame://REC@<lo> --prompt "Is <predicate> true? answer only yes or no" --json
overcast see frame://REC@<hi> --prompt "Is <predicate> true? answer only yes or no" --json
If both give the same answer, the flip isn't in [lo,hi]. If the predicate
toggles more than once, it isn't monotone — use overcast-pinpoint instead.
- Bisect: test the midpoint, keep the half that still straddles the flip, repeat
until
hi - lois within your precision:
overcast see frame://REC@<mid> --prompt "Is <predicate> true? answer only yes or no" --json
# keep the straddling half: if mid's answer == lo's answer, set lo=mid; else hi=mid
# (correct whichever way it flips — false->true OR true->false)
- Report the transition window and show it:
overcast note "<predicate> flips" --ref REC --at <lo-hi> --confidence high --json
overcast view REC --at <lo-hi> --json
overcast brief --export ./transition.md --json
Output
The converged [lo, hi] bracket — the two adjacent see frames that straddle
the flip (their record.ids + media.at) — and the call count. That bracket IS
the answer window — don't over-claim a single frame.
Caveats
Bisection is only valid for a one-way change; a light that blinks or a person who
comes and goes will mislead it — verify monotonicity at step 2, and fall back to
overcast-pinpoint (peak search) or overcast-presence-window for recurring or
interval events. Needs the video local.