0 / 0 graded
detected
legal arc
illegal
both cams
hits measured

v.69 is the two-camera union build: a pitch makes this list if either camera caught it — the barrel cam behind the plate (launch from the release point / drop onto the plate) or the re-aimed shed side camera, which now sees the whole arc including the apex that high lobs carry over the top of the barrel frame. The two panes show the same wall-clock instant (per-session clock offset measured and corrected). Grade each camera on its own row: the BARREL row judges the left pane's detection, the SHED row judges the right pane's trace — sometimes one is right while the other is off, and that's exactly the label we need. Grades save locally and export to JSON.

Heights. When the shed camera locks the ball, the gauge reads the side-view calibrated height (post-move provisional fit, ±0.5–1 ft — the 13 ft-pole verification pass will tighten it). High lobs that leave the top of the barrel frame get “≥13.6 ft” from the barrel alone — the shed reading replaces it whenever the side cam locked on. Cards marked no ball lock mean the side camera couldn't find the flight and the height fell back to the barrel.
Exit velocity (NEW · experimental). When a pitch is actually hit, the shed side cam re-decodes the contact moment at 60 fps, tracks the batted ball off the bat, and estimates exit speed off an anisotropic side-view calibration. Contact is anchored to the validated pitch-arc cusp, so ground balls and the red bat can't fake a hit — takes, whiffs and dark windows show “EXIT —” (fail-closed). Numbers are shown as ~approx, provisional calibration — a fun novelty read, not Rapsodo/Trackman. Single-camera depth is blind, so a ball that also moves toward/away from the cam is a floor, shown “≥ NN mph.”
PITCH (yellow)BATTED (orange)○ contact ring
Loading detected pitches…