Python · computer vision

Sport Highlighter

Film your kid's hockey game, get a reel of just your kid. It finds one player by jersey number across a whole game and cuts their shifts into a single video, so nobody has to scrub through 90 minutes of footage.

Work in progressHockey firstRuns locally on a Mac

From one long video to one short reel

  1. Upload the gameOne handheld camera, a full 90-minute game.
  2. Find every skaterA YOLO detector marks each player, frame by frame.
  3. Follow themByteTrack links detections into short tracks of the same person.
  4. Split the teamsJersey colours separate home from away.
  5. Read the numberA small vision model, running on the Mac, reads jersey numbers.
  6. Cut the reelEvery confident sighting becomes a padded window; the windows join into one video.

No screenshots here on purpose: the footage is of kids' games, and it stays private.

The idea

A shift reel, not a highlight reel.

Hockey parents film whole games to watch one player. Finding the three minutes that matter means scrubbing the whole thing, and doing it again to make something you can send to grandma.

Picking out "goals and great plays" automatically is hard and often wrong. Showing every shift your kid played is a job a computer can actually do well: find them, keep a little context around each sighting, and stitch it together.

Why jersey numbers

The number is the identity.

Teammates look alike: same jersey, same helmet, same skates. Matching by appearance mixes them up. So the reel is anchored on (team, jersey number): a player only counts as found when their number is read with confidence.

Appearance matching still helps keep a track going between sightings, but it no longer decides who is who.

Where it stands

Honest numbers, measured properly.

The first reels work end to end, and I measure them against hand-labelled footage instead of eyeballing. Today a reel catches about half of a player's ice time. The bar it has to clear before I'd call it done:

85%of the player's ice time in the reel
<1%time showing the wrong player
≤5%time spent on the bench
Local first. Everything runs on an Apple-silicon Mac: detection, tracking and the vision model. Cloud GPUs are an option for later, not a requirement.
PythonFastAPIYOLO11ByteTrackQwen3-VL on MLXNext.jsReactSQLiteCloudflare Tunnel

More projects