Rosters, CSVs, and logging at the speed of a game
Plays are eight seconds apart, dropdown menus lose, and the front office's spreadsheet is the logging layer you need.
You cannot log a game with a mouse. That is the verdict, and Friday night is the proof: 140 plays, eight seconds between snaps, one operator, and a coaching staff that wants cut-ups by Saturday morning. Any logging interface has to survive that tempo, or it does not matter what else it does.
Eight seconds is the whole budget
Watch what a dropdown costs. Reach for the mouse, click the players field, scroll a list of 53 names, click one. The next play is already over, and now you are logging from memory, which is where errors are born. Multiply that by 140 plays and by three or four facts per play, and the dropdown interface has eaten the game by halftime.
The test for any logging tool is simple: can you commit a fact without looking away from the screen and without your hands leaving the keyboard. Keys stamp values in a keystroke or two. Dropdowns are for forms you fill out once a day, not for facts you record every eight seconds while the next one is developing.
The spreadsheet already exists
Here is the step people skip: you do not need to build the identity data, because the organization already maintains it. The front office, the SID, the club administrator, somebody keeps a spreadsheet of number, name, position, year. It is accurate because it has to be; other people's jobs depend on that sheet being right.
So source your logging vocabulary from that sheet instead of retyping it. This advice is tool-agnostic. Whatever you log with, the roster spreadsheet is the single source of identity, and your job is to import it, not transcribe it. Retyping creates a second, slightly wrong copy, and the slightly wrong copy is the one that ends up baked into filenames.
ClipLogger takes the CSV or TSV as a lookup table: one column is the code (the jersey number), the columns you choose join into the stored value (first plus last name, so "72" commits "Marcus Johnson," not "Marcus"), and the extra columns ride along as autocomplete detail without polluting what gets written.
Type the number, commit the name
A code-replace layer turns a modifier key into a code surface: hold shift, type 7-2, and an autocomplete HUD resolves it against the roster as you type; commit, and the full name lands in the players field. Two keystrokes per athlete, eyes on the play the whole time. The same mechanism logs anything with a code: location codes, shot codes, SKUs on a product shoot.
This is the speed a dropdown cannot reach, and the reason is mechanical, not aesthetic. A jersey number is something you read off the field and type without thinking. A name in a list is something you hunt for, and hunting is exactly the operation there is no time for.
One number, one person, or nobody
Speed without honesty produces fast errors, so the resolution rule matters: a jersey number should resolve only when exactly one active person wears it. Two players sharing a number resolve to nobody, on purpose, rather than the tool picking one. At game speed you want a system that refuses to be confidently wrong.
In ClipLogger the roster import does double duty. It becomes the code-replace source, and it seeds the project's cast with one person per row, number bound, before a single clip is analysed. A typed "72" and a "72" the AI reads off a frame resolve through the same rule to the same person, so one athlete can never fork into two identities across a season. The AI side is roster-locked too: it can propose that a cast member appears in a clip, it cannot invent a new person, and nothing is written until you confirm it. Suggestions land in review; your keystroke is still the decision.
Mid-season churn without rewiring
Rosters move. Transfers, injuries, a walk-on earning a number in week six. The convention survives only if updating is cheap, so the lookup table has to be replaceable in place: bring in the fresh sheet, replace the table's contents, and every key binding that points at it keeps working. Re-importing a roster updates the existing entries rather than minting duplicates, so week ten's log and week one's log still agree about who number 72 is. The alternative, rebuilding your bindings every time the depth chart moves, is how logging systems quietly die by October, one skipped update at a time.
Import the roster the front office already keeps, put it under your fingers as codes, and your logging keeps pace with the game instead of narrating it from memory.