Pitch Lab

Sign in with your email — we'll send you a one-time login link.

Pitch Lab

Phase 2 · cloud sync · tracer trails connecting… ✓ saved

Upload video

Shoot from behind the pitcher. Slow-motion (iPhone 120/240fps, Sony HFR) tracks much better than normal speed.

How this prototype works

1
Upload your videoiPhone slow-motion clips work best — the ball stays visible for many frames. Normal 30fps clips will work but you'll need manual correction more often.
2
Find the release frameScrub forward (Right arrow steps one frame) until the ball has just left the pitcher's hand. Click Mark Release Frame.
3
Find the end frameScrub forward until the ball reaches the target (or leaves the frame). Click Mark End Frame.
4
Auto-detectThe tool walks every frame between your two markers, compares each to the release frame, and finds the bright spot that wasn't there before — the ball. It records the ball's position on each frame.
5
Manual correct (if needed)Switch to manual mode, scrub to any frame where the trail looks wrong, and click on the ball. That position overrides the auto-detect for that frame.
6
Save the pitchName it, tag the pitch type, save. It shows up in the Pitch Library tab.

What this prototype is NOT yet

Cloud sync is on — saved pitches (and their videos) now sync to your Supabase project, so you can open them from your phone and laptop. Videos download on demand the first time you open a pitch on a new device. Login/multi-user comes in the next phase.
No multi-pitch overlay — once the tracking is verified, Phase 2 adds the ability to superimpose multiple saved pitches on top of each other to compare release-point consistency.
No velocity / pitch ID — Phase 3 adds rubber-to-target distance calibration so the tool can estimate pitch speed and break.
No Claude coaching — Phase 4 hooks up Claude to give feedback on arm slot, target accuracy, and release consistency.

Why this approach

Ball tracking from behind-the-pitcher video is normally hard because the ball moves fast and gets small. Three things make it tractable here:
  • Slow-motion footage gives 40–80 frames of ball flight per pitch instead of 5–10
  • A high-contrast white ball against dark backgrounds lets simple frame-differencing find it
  • The phone is static, so the background is stable — anything that's bright and moving must be the ball
The auto-detect doesn't use any machine learning model. It's just: "diff this frame against the release frame, find the brightest moving blob in the area where the ball is expected to be."