M3: The Toss Is the Bootstrap
That clip up top: a complete point — serve included — charting itself. SAM rides the ball, events flash as they're detected, and the notation string assembles along the bottom. First of its kind for this pipeline, and honestly imperfect.
Every milestone so far tracked the ball with one manual step: find the ball in a frame, draw a box around it, let SAM propagate. Fine for one clip; absurd for sixty. M0 logged it as an open problem and this session paid it off with a trick the pipeline earned last session: the serve toss is the bootstrap. In the second before contact, the ball hangs above the server's head — a small, isolated blob in the difference image, in a place the serve detector already knows. Box it. Done. No clicks.
Impostor season, again
For clips without a confident serve, the fallback hunts the fastest small mover over the court. Its first picks: the score bug's flip animation and a vibrating net sign. Broadcast overlays are fast small movers too — impostor lesson number four, after the spare balls, the line judge, and the ballkids. The fix: mask the overlay zones and require a three-point ballistic chain — consistent direction, consistent step. Flicker doesn't fly in a straight line.
(Two clips still fool it with line-junction glare during camera pans. Parked, on the record.)
The dribble charts itself
Six clips went through SAM for $0.55 — the whole pilot cost less than a gumball, thanks to a validation error that bounced the first attempt for free while teaching that the API wants integer pixels.
Then the detector — M2's v4, with fps finally a parameter instead of a baked-in 30 — met its first full point and found a failure mode the M0 rally could never have shown it: the pre-serve dribble. A server bouncing the ball before the toss produces real hits and real bounces, and the detector dutifully charted the warm-up. The serve detector already knows when the point starts, so events now get windowed to the point proper. One more thing the mid-rally clip had quietly spared us.
The first chart
point_16: s2b?b1f1f2b3b?b3? (serve ✓ — 8 shots, rally-shaped)
point_31: s?f?? (short point: serve, return, over)
A complete point, serve to final shot, written by the pipeline with no human in the loop. And the frame-check verdict, because that's the house rule: the serve call is right, the shot count is plausible, and the striker column breaks alternation wherever the detected event frame catches the ball mid-air between the players — nearest-player is the wrong striker signal when the ball is closest to nobody. The letters aren't trustworthy yet.
The verdict
The loop exists: clip in, notation out, every stage automated. Pilot cost $0.55; project total ~$1.30 of a $9 budget. And the full 54-clip run is deferred, on purpose — every known fix (alternation-aware striker assignment, contact-frame refinement, sparse-track handling) is free to iterate on the six tracks already paid for. The rest of the budget waits until the letters earn it.
The string started this milestone as ??2?1?1?2?2?2??? — a middle with
no beginning. It now starts with an s.