Engineering · 12 Nov 2026
A single game produces more data than most analytics teams process in a month. Here is the path that data takes.
Eight 4K cameras at sixty frames per second, running for about two and a half hours, produce roughly 1.2 terabytes of ProRes. That number surprises people who think of hockey analytics as a spreadsheet problem. It is not. Before anything can be counted, it has to be carried, decoded, decoded again, and stored.
Uploads are resumable and chunked, but the real problem is not bandwidth, it is trust. A silently truncated file is worse than a missing one, because the pipeline will happily analyse it and produce confident nonsense. Every chunk carries a checksum, and a game is not queued for processing until the manifest reconciles.
Sources arrive in whatever the venue had: ProRes, H.264, occasionally a phone video shot from the stands. We normalise everything into six renditions — 360p through 4K60 — in H.264 and H.265, segmented as CMAF. That single ladder serves every downstream consumer: the review proxy on a phone, the 4K master for broadcast pulls, and the frames the tracking models consume.
Rendering clips from the master rather than from the proxy was the single biggest quality decision we made. It costs more GPU time and it is worth it: a clip that a scout sends to a general manager should not look like a stream from 2011.
Tracking runs at 25 fps on the analysis rendition. Players, officials, the puck and the ice markings are detected per frame; a multi-object tracker holds identity through occlusion and re-identifies players who leave the frame at the bench. Ice markings give us a homography, so everything downstream is in metres rather than pixels.
Events are classified from trajectory and pose features: zone entries and exits, shots, passes, hits. Then they are reconciled with the official scoresheet, because a model that disagrees with the clock is a model nobody trusts.
When a coach asks for a clip, we do not search video. We search the index — game, period, shift, event — and then render the requested frame range from the master. Median time from request to playable link is nine seconds; the twenty-second figure in the title is the whole round trip including CDN propagation to the first viewer.
Storage dominates the bill, not compute. Fourteen days of hot storage for a club playing three games a week is around 25 terabytes; the cold archive behind it is where the petabytes accumulate. That is why retention policy is a product decision and not an infrastructure detail — it decides which seasons your analysts can still learn from.
We publish a technical write-up roughly once a month.