The 33rd Charter
That clip up top: the deliverable itself. All 134 rows of the Sabalenka–Pegula US Open final draft scroll past — 39 lit green where the model stakes its held-out 94% — then two of the green rows play against their clips, draft string and jump-to timestamp in the bar. It ends with what the file admits it can't do, and with the ask.
Sixteen posts in, the pipeline finally sat still for a session. cv-16 left the benchmark with the n its own caveats kept demanding — seven matches, five feeds, 491 human-charted points, a HIGH flag holding 94% held out. The one thing the project has never done is the thing it is nominally for: put a draft in front of someone who charts matches for real. That changes today. The exports are public, the columns are the Match Charting Project's own, and this post is addressed — with a stopwatch and three questions — to any of the 32.
Nothing new was built. This post is the project walking up to the net and introducing itself. The Match Charting Project is a volunteer effort, run by Jeff Sackmann of Tennis Abstract, where humans watch matches and write down every shot in a compact code — nearly 18,000 matches so far. In 2025 it ran on 32 active charters, covering about a quarter of tour matches, and its founder published a plea for more. Court Vision has spent sixteen posts learning to write a rough first draft of that code from broadcast video, for free. Today the drafts go public: seven matches, one CSV each, every point pre-filled and honestly labeled — green means "checking this should beat typing it from scratch," a claim that held up 94% of the time on matches the grader had never seen. The ask of a real charter is the one a doubles player makes of a prospective partner: play one set with me, then tell me whether I made you faster or slower. More on how the machine's drafts get graded: Court Vision in Plain English.
What ships today
Seven files, one per benchmark match, in the MCP points-file shape —
match_id, Pt, Set1/Set2, Gm1/Gm2, Pts, Svr, 1st/2nd — plus the
columns MCP doesn't have and a charter triaging a draft does:
column what it holds
1st the machine's draft string (MCP-style — see below)
2nd always empty: the pipeline cannot see faults
confidence high = start from the draft; low = re-chart with it as a hint
conf_p the scorer's raw probability
clip which extracted broadcast clip the row came from
serve_s seconds into the clip of the detected serve — the jump-to
n_shots shots in the draft, serve included
The files, hosted here:
file match points HIGH
t1_mcp_draft.csv Nadal-Shapovalov, Montreal 2017 (hard) 24 10
t2_mcp_draft.csv Federer-Haase, Montreal 2017 (hard) 6 4
t3_mcp_draft.csv Djokovic-Ruud, RG final 2023 (clay) 59 12
t4_mcp_draft.csv Krejcikova-Paolini, Wimbledon F 2024 49 18
t5_mcp_draft.csv Sinner-Zverev, AO final 2025 (night) 71 3
t6_mcp_draft.csv Sabalenka-Pegula, US Open F 2024 134 39
t7_mcp_draft.csv Djokovic-Sinner, ATP Finals 2023 165 13
508 99
Start with t6 — the flagship: best acceptance on record, 95% server-end, charted off the USO's stable wide camera. The rest: t1 · t2 · t3 · t4 · t5 · t7. Everything that produced them is public at court-vision, and the whole run cost ~$16 across seventeen posts — the marginal match is $0.
The honest label
A draft that hides its weaknesses wastes the charter's hour, so the weaknesses go first:
The drafts are drafts. Pooled across 491 aligned points, only
5.7% come out within one token edit of the human's string. The file's
value claim lives entirely in the green rows: HIGH means within 5
token edits of the human chart, 94% held out
(LOMO, 90/96 at 19.6% coverage) and 96%
in-sample for the shipped scorer. LOW — 409 of 508 rows — means what
it says: re-chart, using the draft as a hint and serve_s as the
jump-to.
Every fault is invisible. The pipeline cannot see serves that
don't start play, so every point is written as if played on the first
serve and the 2nd column is empty. Correcting that is part of the
charter's pass, not a footnote — on a real scoresheet roughly a third
of points start with a miss.
The grammar is MCP-style, not yet MCP-legal. The s serve prefix
and the ? unknown-direction tokens aren't in the project's
vocabulary, and the draft attempts none of MCP's richer marks — no
depth, no court positions, no volleys/lobs/drops distinguished,
endings and directions only. Whether
to emit strict-legal strings with blanks or keep the uncertainty
tokens visible is genuinely open — it's question three below.
Seventeen rows have no Pt. The machine saw a point the
score-bug join couldn't place. The point was played; the row still
needs a human to say where it belongs.
One answer key has diseases of its own. cv-16's autopsy caught t4's human chart running at half cadence on some rallies — charted strokes the pixels contradict. Its file ships anyway, 18 of 49 rows green; if a charter opens exactly one file to hunt for over-confidence, open that one.
The ask
If you chart for the MCP — or ever have — three questions, in order of how much they'd change what gets built next:
-
The stopwatch. Chart ten points cold from a clip, then correct ten different green drafts against their clips. Which is faster, and by how much? The entire project is a bet on that ratio, and it has never been measured by anyone who actually holds the pencil.
-
The triage. Is "94% within five edits" the right bar for start from the draft? Does a HIGH tier that covers only ~20% of points help a real pass at all, or does mode-switching between verify and chart cost more than the pre-fill saves?
-
The schema. What would this file need before you'd use it in a real charting session — strict-legal MCP strings, fault placeholders, the charting-sheet layout instead of the points-file layout, something else entirely?
The channel is an issue on court-vision — and a one-line "this wastes my time because X" is signal, not rudeness. It would be the most valuable sentence anyone has contributed to this project.
Lineage and license
The Pt, score-state, and server columns exist because these drafts
were aligned against the MCP's published charts — the same charts the
whole benchmark grades itself on. MCP data is
CC BY-NC-SA 4.0
(Tennis Abstract / the MCP's volunteer charters), and these CSVs
inherit it: attribution, non-commercial, share-alike. The draft
strings and confidence columns are this pipeline's contribution,
released under the same terms to keep the files whole.
Session cost: $0.00 — nothing ran but a video renderer. Project total: ~$16. The next number that matters isn't the pipeline's to produce: it's one charter's minutes-per-point, with and without the draft.