Analytics is being updated and will return in a future beta version.
Players
Manage reusable players and see the Library teams they belong to.
Open the Team & Player Library tab to load player records.
Player Library
Active players appear here.
Teams
Manage your reusable private Teams and rosters for Match setup.
Open the Team & Player Library tab to load team records.
Team Library
Active private Teams appear here.
Players/Resolve match players
Resolve match players
Review named match players that are not linked to your visible Player Library.
Opening this list uses compact match metadata. Full match data is loaded only when you choose Resolve.
Open Resolve match players to load the queue.
User settings
These preferences are saved to your user account.
Open Settings to load your preferences.
Match setup
Use the video while this setup workspace is open: scrub/step through the match to identify players, then enter rosters and choose the near-side team for the current set.
Technical identifiers
Select Ball category, Sex category, and Age class to continue.
Select Ball category, Sex category, and Age class before continuing. These dimensions control rule handling and Analytics.
Match context (optional)
Record additional metadata to make matches easier to identify and compare.
Video segment (optional)
When annotating only part of a video, specify the segment and its start and end time here.
One player per line or comma-separated. Add “m” or “f” after the name or ID to specify sex, for example “John Doe m” or “Jane Doe f”. Leave rosters empty when identities are unknown; lineup confirmation creates true unknown players using the selected category context.
Marks which team the annotator is familiar with. For faster annotation, if you are unsure about opponent player names, leave them as unknown instead of trying to remember them throughout annotation. If you are equally familiar with both (for example a local tournament where all players are from your team), mark 'Not specified'.
Set lineup: active players and substitutes
Arrange active players left-to-right as seen in the video. The first set defaults to six active slots per team, using unknown placeholders when the roster has fewer than six players. Before set start, you may deliberately reduce either team to any positive count from one to six; zero is blocked and deliberate reductions are not auto-filled.
Player metadata
Optional roster syntax: Player name | male, Player name | female, or enter names only and select sex here after loading rosters. Player name, team, and sex are then automatically attached to throw/target events.
Set starts are saved only from the right Annotation panel after you seek to the correct video frame. Use this workspace to edit rosters, sides, colors, and draft lineups.
Spatial recording / court calibration
Click corners in this order: top-left, top-right, bottom-right, bottom-left. After all four are placed, the button changes to “Calibrate corners” so you can drag points while the joined lines update.
0 / 4 cornersNeeds setup
Optional court lines / polylines
Use polylines only when the joined corner outline shows that real court lines curve or diverge from a planar court. If curvature is substantial, mark the video as nonspatial.
Analysis setup
Set intervals
Temporal inference cadence
Request a time interval; the runner resolves the nearest executable source-frame stride from the actual probed video FPS.
Compact observation export interval controls proposal file size. It does not reduce the number of frames processed by the tracker.
Automatic player bootstrap
Searches shortly after each segment starts for a frame where active players are clearly separated.
Legacy semantic tracking remains selected.
Jersey prompts are optional natural-language descriptions and are separate from team display colors.
Developer export details
Sparse inference mode: safe sampled-proxy mode. Exported developer run plans use sampled_proxy and the terminal proposal helper.
The derived ROI is a review-required active-player extent based on court-corner image bounds plus asymmetric padding. It is not exact court geometry and does not project player height above the court plane.
Proposal identity workspace
Guided proposal-only review; export identity assignments separately to resume later. Match JSON and manual annotations are unchanged.
Identity assignments are proposal-only and are saved separately from Match JSON.To resume later, load Match JSON, load the proposal collection, then import identity assignments.Review assignments use proposal_track_identity_assignments_v0; continuous tracks use assigned_active_player_position_estimates_v0; event-aligned positions use source_time_sec joins.
Import a proposal collection to resolve proposal timebase.
Import proposal tracks to review identity assignments.
Review proposal tracks
Select a proposal track to review; assignments stay in the separate identity layer.
Review player identity links
Link match players to stable Library identities available to your account without changing historical event or lineup IDs.
Add player from Library
Add one existing Library player as a match-local roster candidate.
Review Match setup differences
Importing this Team requires the Match competitive setup to change.
Instructions
Use the video while this setup drawer is open: scrub/step through the match to identify players, then enter rosters and choose the near-side team for the current set.
Before registering any event, define the set start. Click Set start on the frame immediately before the players run for the balls, or, when audio is available, at the frame/time where the whistle is heard. Set end is defined either when the last player is eliminated, when the whistle is heard, or when the set timer ends; after a last-player elimination the app will ask whether to register set end automatically.
For spatial throw speed, use the exact frame sequence: pause/step to the ball-release frame and click the thrower’s feet; then play/step to the hit frame or closest frame where the ball passes the target and click the target’s feet. These two click times are used automatically as release and hit/end time. Use the slider/buttons for normal navigation; Shift+trackpad/wheel steps one frame and Option/Alt+trackpad/wheel uses your large frame-skip setting, while pinch/trackpad zoom is left available for zooming.
Calibrate court corners first. The blue polygon and green ideal court overlay should match the real court lines.
If the overlay does not match because of fisheye/curved lines, use optional polylines for QC and consider nonspatial annotation for that video.
Click thrower feet at release. If you do not know the player, leave the name blank; the team is inferred from court side when possible.
Click target feet at hit/pass frame, then select the target name if known. Player buttons default to assigning the latest clicked position.
After saving a throw, correct ball possession only if the simple automatic update is wrong. Corrections affect the next throw’s “before” state.
Results
These results are calculated from the currently saved events. Active time uses explicit set-start and set-end events when available. If a set end is missing, the last event in that set is used as a temporary endpoint.
2D court: throws and targetsperson filter: green = positive, red = negative, yellow = neutral
Lines connect thrower and target court positions when both were clicked and transformed. Thin guide lines show the middle line, neutral-zone lines 2 m from middle, and activation lines 5.5 m from middle.
Team stats
Team
Throws
Hit rate
Thrown at
Defense rate
Catch rate
Avg balls/attack faced
Total balls faced
Active time
Score
Score/min
Player stats
Team
Player
Sex
Throws
Hit rate
Thrown at
Defense rate
Catch rate
Avg balls/attack faced
Total balls faced
Active time
Score
Score/min
Record call
Which call should be recorded for the selected/offending player?
After choosing the call, select the offending player.
Allowing the embedded player contacts Google/YouTube before you press Play. It shares your IP address, device/browser information, page origin, video choice and playback activity. Cookies and similar storage support playback and preferences, security, audience analytics and feature measurement. This app uses YouTube’s privacy-enhanced player: Google says ads in this mode are non-personalized, and embedded views do not personalize subsequent YouTube viewing or advertising. This does not mean no provider contact or storage.
You can decline and keep using the app and local video. Embedded YouTube playback needs this choice. It does not change your account access or legal acknowledgement.
Storage, purposes and withdrawal details
Google/YouTube receives the provider data. In a September 26, 2026 check without a Google login, loading the API before Play stored third-party cookies on youtube.com: YSC (session/security), __Secure-YNID and VISITOR_INFO1_LIVE (Google describes analytics and, in other contexts/settings, advertising uses; these observed API-script cookies do not establish personalization by privacy-enhanced embedded views), __Secure-ROLLOUT_TOKEN (feature measurement), and VISITOR_PRIVACY_METADATA (its exact purpose was not established in that check). The persistent cookies observed lasted about 180 days. __Secure-YEC was also offered but not retained in that browser; Google describes security and analytics uses and a 13-month duration.
The player also used local storage keys yt-icons-last-purged and ytidb::LAST_RESULT_ENTRY_KEY whose exact purpose and expiry were not established. Actual storage varies with Google settings, browser rules and provider changes; privacy-enhanced embedding does not eliminate it.
This app can turn the whole player on or off. The player API does not offer separate switches for these purposes. Google’s privacy and advertising controls apply separately.
Withdrawing stops and removes the player without deleting annotations or reloading the app. It prevents new player loads until you allow again. Already sent data, in-flight requests or closing messages cannot be recalled; existing Google cookies are not deleted. Manage them and Google activity through your browser and Google settings.
The app stores the current account-wide choice, disclosure/purpose version, explicit-choice time, expiry and a minimal revision/retry reference on the server. It does not record viewing activity for this choice. Allow and refusal apply across signed-in browsers and devices for up to 180 days; reads, login and playback do not renew them. Sign-out stops this player and clears its account cache while retaining your server choice. A missing, expired or materially changed choice needs an explicit decision. Earlier browser-only choices are not promoted automatically. Withdrawal stops this player immediately; connected sessions recheck within 15 seconds under normal operation. Offline or suspended sessions recheck before resuming. A failed withdrawal stays blocked here with a retry message until saved. Withdrawal does not erase annotations or guarantee removal of Google-held data or cookies.
Use a file you recorded, received from the rights holder, licensed, or are otherwise authorized to process.
YouTube status: not loaded. Use the included local server for YouTube mode.
Court · metres
Court size
Seek pending. If it remains unresolved, pause and confirm the displayed time.
YouTube video quality
YouTube controls embedded video quality automatically. These steps may help if the video becomes blurry.
Reload embedded player
Try this first. It reloads the embedded player near the current video time without changing your annotation data.
Open in YouTube
If reload does not help, open the video in YouTube and change quality there if YouTube allows it. Settings may be saved within the same browser session. If quality doesn't automatically improve, reload the video using step 1. Your annotation state remains in this app.
Calibration workspace0 / 4 cornersUse Court setup padding when cut-off court corners fall outside the video.