v0.2.0 — see what the detector sees
The release that makes the system inspectable, and fixes what inspecting it revealed.
You can see what the detector sees
A review surface plays the whole game with every stored track drawn over it. It renders the same data scoring reads — not a re-run, not an approximation — so what it shows is the truth about what will be scored.
This exists because "it hasn't really detected anybody" and "still sub-par moments" were unanswerable from logs. They turned out to be the same bug.
Identifying your athlete by pointing at them
The picker offered the longest tracks. On footage that fragments into 3,652 of them, the longest belong to a coach, the referee, and whoever stood still longest — so it presented a page of strangers with no way to say not those, him. Reported as "just random kids", which is exactly what it was. The wrong track got bound, every score after that followed the wrong child, and the automatic re-bind faithfully preserved the mistake across re-detections.
Now: scrub to a point where you know your athlete is on screen and click the box around them. That binds and re-scores without re-running detection. A click resolves to the smallest box containing the point, so a child standing in front of a wide crowd box selects the child.
Boxes also appear on each suggested moment's player, with the athlete drawn distinctly from everyone else, and a sentence saying what is on screen: "9 person(s) tracked at 142.3s" rather than a track count.
The reel looks edited
- Fades at both ends of every clip, picture and sound. The audio half matters more: a crowd at full volume stopping dead mid-syllable reads as a corrupt file rather than a cut. Clamped to a third of the clip so a short moment does not become mostly fade.
- Background music, uploaded per project and mixed under the game audio at 0.18 — the crowd, the squeaking shoes and a parent shouting are most of why a clip is worth keeping. It loops, ends with the footage rather than running on, and fades out instead of being cut off mid-bar. Level and fade length are adjustable at export.
Both filter graphs were run against real FFmpeg on the production container rather than only asserted as strings: a filter_complex that is subtly wrong does not fail loudly, it silently drops what you asked for.
Also in this release
- Uploaded music lives in a project directory deliberately excluded from the derived-file sweep, so
project cleancannot throw away something you provided. - Version strings in the CLI and the API health payload track the release; the sport plugin and CV worker versions deliberately do not, because they describe contracts that did not change.
Known limits, unchanged
- The COCO model cannot see a hoop. A basketball-specific model is on the server and selected by a global environment variable, which is not yet a per-project choice.
- Nothing extracts audio, so the
audio_spikesignal has never fired. - Every deploy kills a running analysis. The loss is visible; preventing it needs detection to outlive the web process.
- Tiling roughly doubles track fragmentation, which makes identification harder — which is why pointing at your athlete now matters more than the picker.