Repository navigation
Small Fast Targets
The rule: can you see its shape? A body, a head, legs, wings, an outline — anything you could put more than one landmark on — goes to AllTracker (with Segment for the outline). A target that is only a dot small enough to be one point (a few px to ~20 px across, no visible shape) goes to Moving spot. Moving spot follows one point per target: on anything bigger it would follow only the centre of a blob, and the test says so.
Kinetrace has three point models — the methods that follow the points you click. They sit in the Track ▾ menu; the choice applies to the next run, can be changed at any time. Each point has its own tracker (AT / CT / MS beside its name in LAYERS; right-click → Tracker), saved with the project, and a Track press tracks every selected point with its own.
| Your footage | Point model | Clicking needed |
|---|---|---|
| An animal, a person or an object whose shape you can see | AllTracker (default) + Segment (SAM 3) for the outline | one click per body part to start |
| High-contrast painted dots or stickers, when speed matters | CoTracker3 | one click per point |
| A target that is only a dot — small enough to be one point (a few px to ~20 px), no shape of its own — often over a moving background (waves, ripples, sky, leaves) | Moving spot | the dot on two frames in a row to start; 20 frames in a row for the test |
| A round marker (wand ball) | Point ▾ → Ball marker (any point model) | one click per ball |
AllTracker and SAM 3 stay the choice for animals: they need no clicking beyond the first, and the silhouette can keep landmarks on the body (the animal's Keep its points on its silhouette). Moving spot is for the footage where they fail.
AllTracker and CoTracker3 follow the texture around the click. A white spot a few pixels across, filmed on water, has none of its own; the water around it has plenty, so both follow the water. Their confidence stays high (0.74–0.98), so auto-pause never fires: on real footage of such a spot both were off within 2 frames.
kinetrace/spots.py, no model and no GPU. On every frame the spot is searched
where a constant-velocity prediction puts it, within a search radius that may
grow with the speed, by one detector (a cue):
- bright spot — the strongest bright blob (difference of Gaussians at the spot's own size) of the whiteness channel, min(R, G, B): white or pale on blue water, sky or foliage;
- dark spot — the same on the darkness channel, 255 − max(R, G, B);
- unusual change — what changes much more than those pixels usually do, each pixel against its own last 30 frames (a bat over a river; it fails at sea, where every pixel changes).
It stops at the first frame where the spot is not there or two candidates are equally likely (two crossing, a glint on it): the track ends on the frame before, the run auto-pauses there with the point selected, and the user clicks it again. A spot whose prediction leaves the picture simply ends. With two clicks in a row it knows the speed; with one, the first search is wider and it stops if two spots there look alike, or if the click was a little off the spot (rather than following the strongest glint in the search area): click the spot more precisely, or on a second frame. In a run that holds other points too, they keep every frame up to a Moving spot's stop. Regions are left out of a Moving spot run.
Track ▾ → Test the point models on my clicks… (or right-click the point).
Place the point by hand on at least 20 frames in a row (one or two skipped
frames are fine; 30 is better). The test starts every model from the first
click and follows the clicks; wherever one drifts more than the drift limit
(max(6 px, 1.5 × the spot's size, 0.2 % of the picture width)) or stops, it is
put back on that click — one correction. Moving spot is tried at every
cue × several search radii × 3 speed gains in one pass over the frames. The
radii come from two things: the spot's size, measured at the first click (3 to
about 60 px across; a bigger target is told that AllTracker + Segment suits it
better), and the clicks' own motion — Moving spot's prediction replayed over
them, 1.5 × its 90th-percentile miss + 2 px, then 1.6 and 2.5 × that — so a
turning or dodging animal is offered a wide enough search;
AllTracker and CoTracker3 (ticked by default with a GPU) are re-tracked from
every correction. The fewest corrections win, then the fewest silent drifts,
then the median error; a tie goes to AllTracker. The button names the winner and the point
(Use Moving spot for P1) and sets the tracker of that point only (the project's default
and your other points are untouched); for Moving spot it also stores the
settings it found on that point (cameras/<cam>/spots.json).
The app suggests the test in two situations: a point tracked by AllTracker / CoTracker3 corrected by hand on 5 of the last 20 frames, and a new point placed on a small isolated spot in a camera with no silhouette.
Synthetic clips with exact ground truth (tests/verify_spots.py): a flapping
white spot over moving water with glints stronger than it — bright spot,
60 frames, 0.09 px median; a dark bird against a cloudy sky — dark spot,
0.02 px; a dark bat over flickering water among rocks as dark as it — unusual
change, 0.29 px, where the dark-spot cue stops within a few frames. On each,
the test recommends the right cue with 0 corrections over 29 clicked frames.
A run that stops is the design, not a failure: the data ends where the spot can no longer be told from its background, and one click carries it on.
- Install & run
- Workflow: track an animal
- Small, fast targets: which point model
- Segments, silhouettes & skeletons
- Several cameras & 3D
- Human bodies
- Export formats
- Working with other programs
- Projects & autosave
- Keyboard & mouse
- Accuracy
- Performance (4K)
- Limitations
- Testing
- Folder map & design
Also
- User manual — for beginners, also in the app (F1)
- Licences of everything used