Skip to content

feat: add DISTANCE mode with traces and leaderboard (PR 4)#63

Draft
AlexBodner wants to merge 3 commits into
feat/soccer-pr3-speedfrom
feat/soccer-pr4-distance
Draft

feat: add DISTANCE mode with traces and leaderboard (PR 4)#63
AlexBodner wants to merge 3 commits into
feat/soccer-pr3-speedfrom
feat/soccer-pr4-distance

Conversation

@AlexBodner

@AlexBodner AlexBodner commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds DISTANCE analytics mode: direction dots (same as DIRECTION) plus cumulative distance chips (m), per-player trace lines on the radar minimap, and a 3-second distance leaderboard end-card. No m/s badges.
  • Distance integrates via gated pitch homography on VideoTrackingSession.tracks.
  • Extracts shared _render_speed_distance_traces(..., show_speed=) in distance.py (spotlight + speed overlay hooks for PR5).

Stack: PR 1 → PR 2 → PR 3 (base) → this PR

Demo

DISTANCE mode — speed + distance chips, trace minimap, end-card (08fd33_0.mp4, truncated preview).

Download full demo clip

Homography / kinematics design

  • VideoTrackingSession.tracks — lazy collect_tracks + compute_kinematics using _gated_speed_transforms() (not gap-filled).
  • session.gap_filled_transforms_by_frame — instant speed badges (same as SPEED).
  • session.minimap_transforms_by_frame — warp feet for trace buffer on radar.
  • valid_pitch_cm() — filters trace outliers before drawing polylines.

Scope

  • examples/soccer/distance.py — shared trace renderer + run_distance
  • kinematics.pyPlayerTrack, compute_kinematics, cumulative_distance_at_frame
  • motion.pydraw_distance_labels, build_trace_minimap, draw_distance_end_card, dim_frame, spotlight
  • speed.pyonly_tid filter on _speed_by_tid
  • Mode.DISTANCE wired in main.py + README section

Not included: run_all, SPEED_AND_DISTANCE wiring (PR5), GK goal-distance locks, goal shading (PR6).

Test plan

  • Merge PR 3 first (rebase if PR 3 changes during review)
  • python main.py --source_video_path data/2e57b9_0.mp4 --target_video_path data/renders/2e57b9_0-distance.mp4 --mode DISTANCE --max-frames 90 --tracker bytetrack
  • Verify distance chips, trace minimap, and end-card leaderboard
  • Confirm SPEED and DIRECTION modes unchanged

AlexBodner and others added 3 commits July 3, 2026 10:35
Integrate distance via gated homography on VideoTrackingSession.tracks while reusing gap-filled speed badges and minimap traces from PR3.

Co-authored-by: Cursor <cursoragent@cursor.com>
Share _render_speed_distance_traces in distance.py with focus_tid and append_end_card hooks, plus spotlight helpers and only_tid speed filtering, so PR5 adds wiring only.

Co-authored-by: Cursor <cursoragent@cursor.com>
Shared renderer accepts show_speed; SPEED_AND_DISTANCE wiring in PR5 uses show_speed=True.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant