beta · fan-run · not affiliated with the league office
Pitch trackingLVC Softball
← Back to the site

We're teaching a computer to watch softball. It is not very good yet.

There's a camera behind the plate and a second one out by the shed. Software watches them and tries to find every pitch, measure how high it arcs, and see where each batted ball lands. Some of that works. A lot of it doesn't. This page is the honest version of where it stands — and how you can make it better in about two minutes.

What we have today

17
games run through the pipeline
4,066
clips it thinks contain a pitch
not re-measured
share of real pitches it finds (was ~1 in 4)
637
labels collected so far — we need thousands

Those are counts of what the software proposed, not of what it got right. Nobody has checked most of them — that is the whole problem.

GameClips found
Bash Bros v 7th Floor · 7/26587
Nails v Bash Bros · 7/27579
Nails v Big Papi's · 7/26394
Big Units v Lunch Pail · 7/25379
Honey Badgers v Ryan Express · 7/25349
Wild Things v Big Units · 7/22330
Mambas v Lunch Pail · 7/24324
Sultans v 7th Floor · 7/26311
Mambas v Muscle Hamsters · 7/30250
Jul 13 night session135
Bash Bros v Lunch Pail · 7/1984
7th Floor v Big Units · 7/1673
Big Units v Sultans · 7/1968
7th Floor Crew v Nails · 7/2363
Muscle Hamsters v Nails · 7/959
All-Star · 7/1144
Mambas v 7th Floor · 7/1437

Why only these games?

Because a game can only be analysed once every one of its cameras is completely copied off the field box — 99% is as unusable as 0%, since gaps in the footage don't produce an error, they produce invented and missed pitches. That copy is still running, and the disk at the field deletes old footage to make room.

📦 Footage upload status →

What's actually wrong with it

It used to miss most pitches, and we don't yet know how much that improved. On the All-Star game it surfaced somewhere around 44–62 clips against 250-odd pitches actually thrown, and on roughly half of all at-bats it found nothing at all. Since then the two cameras were combined into a single pass, which was built specifically to close that gap and produces far more candidates per game — but nobody has measured the new recall, and an unmeasured improvement is not an improvement. Doing that measurement is one of the things the grading page is for.
Most of the arc heights can't be trusted. 2,913 of the 4,066 clips carry a height, and 2,703 of those come from the camera behind the plate, where a high lob simply leaves the top of the frame. When that happens the software reports the top of the frame — about 13.6 ft — because that is the last place it saw the ball. 1,533 clips sit exactly on that ceiling, and 1,739 are currently flagged "illegally high", which is the ceiling talking, not the pitcher. Those numbers are lower bounds, not measurements. The fix is a tape-measure session at the field to validate the side camera; until that is done, treat every height on this site — and any page that calls an arc illegal — as a guess.
The clips are often cut in the wrong place. The recorder's filenames round to whole seconds and the camera's clock runs about 0.32% fast against the box's, so a clip can land half a second to a full second away from the pitch it is meant to show — sometimes missing it entirely. That is our fault, not the detector's, which is exactly why the grading page has a separate “clip is off” button.
It falls apart as the light goes. Between 18:35 and 20:45 the amount of picture information coming off the barrel camera drops about 75-fold. A ten-minute window at 20:50 produced zero candidates; the identical code on a 19:00 window produced three. Anything measured across a whole evening game is averaging a bright first inning with a nearly blind seventh.
The field map is soft. The maths that turns a pixel into a spot on the field is currently good to about ±18 ft. That's fine for saying “shallow left”. It is nowhere near good enough to claim a distance, and we won't.
And we just deleted all our homework. The old label set — 91 answers — has been archived and cleared. 69 of the 91 came from a single game, 62 of them arrived inside one 2.5-minute burst at 2.4 seconds a clip, and there was no record of who answered, so there was no way to tell one enthusiastic person from twenty careful ones. Rather than train on that, we started clean on 28 July, with the record-keeping in place this time. The counter above is the entire training set — and so far it is essentially one person's work, which is the single biggest thing holding this up. Nothing has been graded twice, so nothing is confirmed yet.

What's new in v2

v1 asked one question: “is this clip a ball, yes or no?” — always about a clip the software had already found. That can make it more accurate, but it can never make it see more: a checker can't find a pitch the finder never proposed. asks four questions instead.

🔎Is there a pitch in this window? the important one

Shown on stretches of game where the software found nothing. This is the only question that can raise the ceiling — every “yes, there was a pitch here” is a miss we can go and fix. The clips for it are still being cut, so it isn't open yet.

Is that the ball? open now

The old question, with two fixes: you can say “can't tell” instead of being forced to pick a side, and you can say “the clip is off” when the video is mis-cut, so a bad clip is never counted against the detector. 4,066 clips are waiting, and only about 1 in 10 has been looked at once.

🎯Click the ball

One click on a frame. A fast ball smears across the picture, and we always click the middle of the smear — a published 2026 result got a large accuracy jump from that convention alone, with no change to the software at all. Waiting on the panoramic frames.

📐Click the landmark

Point at a base, the rubber, a foul pole. A few dozen of these could roughly halve that ±18 ft error on the field map — and because we store every click as a raw click, fixing the map improves every spray label we have ever collected, retroactively. Also waiting on the panoramic frames.

How you actually teach one of these

No jargon. This is the whole idea.

You show it examples with the answer attached.

“Here is a picture. The ball is here.” Thousands of times. That's a label, and that's what the grading page collects. The software isn't told any rules about softball — nobody writes down what a pitch looks like.

It looks for what the examples have in common.

It doesn't understand softball. It finds patterns in pixels that reliably line up with the answers you gave. If your examples were all bright first-inning pitches, the pattern it finds will quietly be “bright” as much as “ball”.

You test it on examples it has never seen.

Grading itself on its own homework proves nothing. We hold some labels back, and the score on those is the only score that counts.

More examples, and more varied examples, make it better.

Varied matters more than many. Bright and dusk and near-dark. Both cameras. Lobs and line drives. Rain. The clips where you weren't sure. A thousand near-identical bright clips teach it less than two hundred mixed ones.

Then you do it again.

Train, look at what it still gets wrong, collect labels aimed at exactly that, retrain. The reason we ask “can't tell” is that the clips people are unsure about are usually the ones the model is about to get wrong too — they're the most valuable things in the pile.

What we still need

QuestionWhy it's neededRoughly
Any pitch here?Breaks the recall ceiling — the only one that canas many as we can get
Real pitch?Stops the bats, birds and sprinklers getting in2 people per clip
Click the ballThe actual training material for a ball detectora few thousand
Click this landmarkHalves the field-map error, retroactivelya few dozen

Grading is for signed-in league members (that changed on 28 July). Your answers are stored against your league account rather than an anonymous browser ID — that is the only way we can tell two graders apart, weigh a careful one above a hurried one, and avoid showing you the same clip twice. We also record how long you spend on each clip, so answers that came too fast to be real can be filtered out. Nothing else is kept.

Two minutes is genuinely useful

We are starting from nothing, so twenty clips from you is a real contribution and a hundred is a big one. It works fine on a phone at the field.

Open Pitch Lab

The small print

This is a fan-run side project, not a league system, and it is not affiliated with the league office. The league's real statistics are kept in TurboStats and that remains the record — nothing here replaces it or is meant to. Any pitch measurement on this site is experimental, frequently wrong, and should never be used to argue a call. We publish the mistakes on purpose; that's the only way anybody can tell whether it's getting better.

Everything from before is still online and still works: browse the v1 archive →