Load a video, step through it frame-accurately, and compute its median background image.
You have unsaved work on - from before the page reloaded.
Drag a video here, or
Already tracked this one?
The maze is static and the mouse moves, so the per-pixel median across evenly-sampled frames gives a clean empty-platform image.
Hough circles on the background: one big circle for the platform, ~20 small ones on its rim for the holes, indexed in ring order by angle.
Drag a circle's edge to resize it, drag its middle to move it. Click a hole (no drag) to mark it as the target - or use the dropdown below if clicking precisely is awkward on a small screen.
Prior trials completed is a human-entered label only - it's never read by the tracker, event detector, or classifier. It just rides along with this trial's numbers into the exported spreadsheet, so a researcher reading it later has context (e.g. "trial 1 of 5, still wandering" reads differently than "trial 9, still wandering").
Background subtraction against the median, gated to the confirmed platform circle and a plausible size range - largest matching blob wins each frame. A frame with no valid blob is marked failed, never guessed.
Scrub the frame viewer above - green crosshair = tracked, red X = failed frame.
Save a portable .bmp.json file with everything except the video itself (which stays wherever it already lives) - open it later, on any computer, to resume without re-tracking.
Per-hole pixel-change signal, duration-gated. An entry is the signal plus the mouse's own tracked blob going invalid right after; a poke is the signal plus the mouse's speed dropping to at-or-below its own trial's median. Low-confidence candidates are shown, not hidden - disagreement gets flagged, not silently resolved.
Human review survives a reload: a correction here or on the search-strategy verdict below persists and comes back after resuming a session, or after loading a saved project file. Re-detecting events with DIFFERENT thresholds still clears overrides on purpose - frame ranges may have shifted, so a stale override would be misleading, not just outdated. See KNOWN_LIMITATIONS.md for what's still missing (a free-text note per override, a timestamped audit log).
| Hole | Frames | Type | Confidence | Avg speed | Human review (draft) |
|---|
Two events at the same hole are merged into one visit when the raw center-density signal between them never drops close to baseline (reengage fraction x min center density) - a brief dip under the qualifying threshold doesn't end a visit, but a real return to baseline does. See DECISIONS.md 2026-09-04. Feeds the search-strategy classifier's visit sequence and the errors/perseverative-errors measure - not shown elsewhere yet.
| Hole | Frames | Events merged | Type |
|---|
Click a measure's name for its definition and how it's calculated. A row marked audited was changed by a human-review override above - re-click "Compute measures" after changing one to recalculate.
| Measure | Value |
|---|
Spatial (direct) / serial / random, per Gawel et al. 2019 (Table 1, citing O'Leary & Brown) - not invented here. Exactly one pattern must match to get a verdict; otherwise it's UNCLEAR and all three scores are shown for you to audit against the hole sequence, rather than forcing a guess.
One tidy row for this trial: every measure above, the search-strategy verdict, the thresholds that produced them, and the tool version - opens directly in Excel, no legend needed. "Video file" is always included, so every exported row stays traceable on its own.
Per-event detail: one row per hole visit (matches Merged Visits above, overrides included) - the "long form" alongside the trial summary's "short form."