off policy

projects sports22 October 2026

Claude as a Tennis Coach

We built a pipeline that turns any tennis video into precise measurements of how a player hits their serves, forehands and backhands. We ran it on 11 ATP pros, on myself and on my friend Richard Pham, and asked Claude what we should fix. It gave me coaching advice I wish I had received a long time ago.

Introduction

Nico and I both love sports. Nico was a professional dunker and was already famous before creating Shortcut. Two kids later, he is still freakishly athletic and still posts on the weekends. I am not nearly as athletic, but I grew up playing tennis competitively, and two years ago, before I had two kids, I was still competitive (>9 UTR, 5.0 NTRP). Both of us are still students of the games we love, and are looking to improve even as parents over 30. It would be wonderful if we could get expert advice that's personalized to our level and circumstance.

To the best of my knowledge, sports analytics has not been revolutionized by AI. We find this surprising. Deep, personalized analytics is insanely valuable to anyone trying to get better, amateur or pro. Also, models were already superhuman a year ago at digging through large, complex datasets, and they keep getting better. So clearly, we need to explore what's possible.

Djokovic vs. Shelton, US Open 2023 semifinal
Richard (far end) vs. me, filmed on a phone
Figure 1. The two kinds of footage the pipeline uses: a broadcast of pros playing a match (left) and a phone recording of Richard and I playing a point (right). Apologies to Richard for using footage of one of the rare points that I win.

In any sport, we often stagnate because it is difficult to be aware of our own movements, and tough, both physically and emotionally, to escape the local maxima of our bad habits. This is why coaches are so valuable. But finding a good coach is hard, even if you can afford it ($150 / hour for tennis in the Bay Area for anybody legit), because a good coach has to correctly diagnose each student’s problem and fit the fix to that student.

For example, athletes with great self-awareness often only need simple “Miyagi-like” one-liners. For a tennis serve, “imagine you are chucking your racquet at the ball and then catching it when you are making contact”. Coaching too prescriptively runs the risk of pigeon-holing without allowing the athlete to discover what works best for him. For beginners, though, high-level tips are often too abstract. I tried it with my wife (I don’t recommend coaching your spouse). She needed much more descriptive language (“your wrist should pronate and snap like so”) and precise drills (throwing a football with curve and depth) to get the feel. And good tone.

As an aside, this mirrors how prompting has changed. A year ago we prompted imperatively, with chain-of-thought, few-shot examples and step-by-step instructions enumerated for each case. Now, as models have gotten better, those tricks hurt, and the best prompts are declarative: they provide the setting, state the goal, and get out of the model’s way. While Claude and other agents lack the human touch, they are patient, available, and can be iteratively refined to personalize recommendations at a desired level of abstraction and detail.

So we need to figure out if Claude can be that coach. And the best domain for me to assess Claude's coaching abilities is tennis, because I can evaluate good coaching from bad.

Measuring Strokes

Tiafoe
Medvedev
Djokovic
Figure 2. Forehands from Tiafoe, Medvedev and Djokovic, slowed down and synced on contact. They differ, for example, in how far the shoulders have turned to face the net at contact. Yet they are all alike in where they meet the ball relative to their body.

Coaching encapsulates many, many facets in the beautiful game of tennis. It spans the mental (Timothy Gallwey's Inner Game of Tennis1), the tactical (Brad Gilbert's Winning Ugly2), the physical, the technical, and everything in-between. I think AI-assisted analytics can revolutionize every one of these dimensions. For the scope of this article, I chose the most vain and lowest-hanging fruit of them all: the technical. There's no shortage of Fed imitators out there in the wild.

To judge my strokes, I need to know what good strokes look like, so obviously, I look to what the best players in the world do. I handpicked 11 current pros, mostly based on their popularity (and notoriety). But the pros don’t all do the same thing. Tiafoe’s and Medvedev’s forehands look nothing like Djokovic’s (Figure 2). And yet, all of them meet the ball at roughly the same place relative to their bodies upon contact.

In other words, in some dimensions, their strokes vary a lot, and in others, very little. I call each of these dimensions a trait: one measurable aspect of one stroke at a key moment, like how far the shoulders have turned at contact. High-variance traits could be harmless style, or they could be the best fit to each player's build. For now, I can't tell these apart, and all the spread shows is that a wide range of mechanics work. But low-variance traits are always crucial, because the pros agree on these despite all that variety. And if my strokes fall outside of the range of values occupied by the pros, something is probably not right.

To analyze stroke biomechanics, Claude would ideally get the player’s joint positions with the start, contact and end of the stroke marked, plus its context: where the player stood, how fast the ball came in and where the opponent was, and what happened next, such as how fast the ball went out and who won the point. But broadcast video is anything but that. The camera cuts between angles and replays, ball kids and line judges move around the court, and nothing is labeled.

To get there, I pipelined a series of open-source models, mostly CNNs and vision transformers, that were specifically post-trained on tennis data. It cuts each broadcast down to live play, finds the players, the ball and the court lines, and labels every stroke with its type and the player’s skeleton (Figure 3). I chose each model by testing it against alternatives on hand-labelled footage (Methods: Benchmarks). It's also not hard to label your own data and train your own data for all of these, but that's another topic for another time.

stepjobmodelruns on
downloadfetch the match from YouTube—CPU
find cutssplit the video at camera cutsPySceneDetect3CPU
keep live playkeep shots that show the whole courtTennisCourtDetector4GPU
strokesevery hit and its stroke typeF3ED5GPU
detect peoplea box around every person, every frameRF-DETR6GPU
detect ballthe ball, every frameWASB7GPU
detect courtthe court lines, every 10th frameTennisCourtDetector4GPU
skeletons65 joints of each player at the near endRTMW-x8GPU
track peoplelink each person's boxes across framesByteTrack9CPU
find playersthe person playing at each end—CPU
name playersread the scoreboardOpusAPI
Figure 3. The pipeline, from a YouTube broadcast to the two players and their labeled strokes. Each black bar groups the steps that run together as one job on one machine. A video starts the next job as soon as it finishes one, so many videos run through the jobs in parallel.

From the skeletons, I then computed each trait from the joint positions at its key moment. For example, one serve trait is how straight the tossing arm is at the top of the toss, measured as the elbow angle (180° is fully straight).

Choosing the traits took most of my time. Claude proposed the first candidates, many more than we kept, and we refined them over many rounds through a series of sanity-checks, suggestions and feedback. This was the tedious part that relied a lot on human judgment, but thankfully, it only has to be done once, because the traits by definition carry over to any new player or recording.

Figure 4 shows how each player, the 11 pros and Richard and I, differs from each other, trait by trait. This is quantified in a heatmap in which rows are traits, columns are players, and colors measure how different a player's stroke trait is against the median. You can click the squares to see five examples of that player's strokes as well as a joint analysis of the trait below.

TiafoeZverevMedvedevSheltonKyrgiosDjokovicSinnerPaulAlcarazFritzRublevPeterRichardServetoss arm straightnessTiafoe, serve toss arm straightness: +2.3 SD of a player's strokesZverev, serve toss arm straightness: -0.6 SD of a player's strokesMedvedev, serve toss arm straightness: -2.2 SD of a player's strokesShelton, serve toss arm straightness: +0.8 SD of a player's strokesKyrgios, serve toss arm straightness: +1.6 SD of a player's strokesDjokovic, serve toss arm straightness: -1.5 SD of a player's strokesSinner, serve toss arm straightness: +0.1 SD of a player's strokesPaul, serve toss arm straightness: -1.3 SD of a player's strokesAlcaraz, serve toss arm straightness: +0.5 SD of a player's strokesFritz, serve toss arm straightness: +0.7 SD of a player's strokesRublev, serve toss arm straightness: -0.8 SD of a player's strokesPeter, serve toss arm straightness: not measured on our phone footageRichard, serve toss arm straightness: not measured on our phone footagetoss arm in over headTiafoe, serve toss arm in over head: -0.7 SD of a player's strokesZverev, serve toss arm in over head: -1.5 SD of a player's strokesMedvedev, serve toss arm in over head: +1.1 SD of a player's strokesShelton, serve toss arm in over head: -2.8 SD of a player's strokesKyrgios, serve toss arm in over head: -0.0 SD of a player's strokesDjokovic, serve toss arm in over head: -2.9 SD of a player's strokesSinner, serve toss arm in over head: +0.8 SD of a player's strokesPaul, serve toss arm in over head: -1.1 SD of a player's strokesAlcaraz, serve toss arm in over head: +0.8 SD of a player's strokesFritz, serve toss arm in over head: +3.1 SD of a player's strokesRublev, serve toss arm in over head: +1.9 SD of a player's strokesPeter, serve toss arm in over head: +2.0 SD of a player's strokesRichard, serve toss arm in over head: +1.7 SD of a player's strokestrophy shoulder tiltTiafoe, serve trophy shoulder tilt: -5.6 SD of a player's strokesZverev, serve trophy shoulder tilt: -2.5 SD of a player's strokesMedvedev, serve trophy shoulder tilt: -0.2 SD of a player's strokesShelton, serve trophy shoulder tilt: +0.6 SD of a player's strokesKyrgios, serve trophy shoulder tilt: -0.4 SD of a player's strokesDjokovic, serve trophy shoulder tilt: +1.1 SD of a player's strokesSinner, serve trophy shoulder tilt: -0.7 SD of a player's strokesPaul, serve trophy shoulder tilt: +1.6 SD of a player's strokesAlcaraz, serve trophy shoulder tilt: -0.4 SD of a player's strokesFritz, serve trophy shoulder tilt: +0.9 SD of a player's strokesRublev, serve trophy shoulder tilt: +1.1 SD of a player's strokesPeter, serve trophy shoulder tilt: not measured on our phone footageRichard, serve trophy shoulder tilt: not measured on our phone footagetoss-to-hit timeTiafoe, serve toss-to-hit time: +1.3 SD of a player's strokesZverev, serve toss-to-hit time: +1.0 SD of a player's strokesMedvedev, serve toss-to-hit time: -1.8 SD of a player's strokesShelton, serve toss-to-hit time: -0.8 SD of a player's strokesKyrgios, serve toss-to-hit time: -1.9 SD of a player's strokesDjokovic, serve toss-to-hit time: -0.7 SD of a player's strokesSinner, serve toss-to-hit time: -1.3 SD of a player's strokesPaul, serve toss-to-hit time: +0.3 SD of a player's strokesAlcaraz, serve toss-to-hit time: +1.1 SD of a player's strokesFritz, serve toss-to-hit time: +0.5 SD of a player's strokesRublev, serve toss-to-hit time: +0.7 SD of a player's strokesPeter, serve toss-to-hit time: -0.2 SD of a player's strokesRichard, serve toss-to-hit time: +1.0 SD of a player's strokesreachTiafoe, serve reach: -0.3 SD of a player's strokesZverev, serve reach: +0.6 SD of a player's strokesMedvedev, serve reach: -1.2 SD of a player's strokesShelton, serve reach: +1.2 SD of a player's strokesKyrgios, serve reach: +0.3 SD of a player's strokesDjokovic, serve reach: -0.8 SD of a player's strokesSinner, serve reach: +0.6 SD of a player's strokesPaul, serve reach: +0.0 SD of a player's strokesAlcaraz, serve reach: -0.5 SD of a player's strokesFritz, serve reach: -0.7 SD of a player's strokesRublev, serve reach: +0.3 SD of a player's strokesPeter, serve reach: not measured on our phone footageRichard, serve reach: not measured on our phone footagetrunk leanTiafoe, serve trunk lean: -2.5 SD of a player's strokesZverev, serve trunk lean: -1.4 SD of a player's strokesMedvedev, serve trunk lean: -1.1 SD of a player's strokesShelton, serve trunk lean: +1.9 SD of a player's strokesKyrgios, serve trunk lean: +1.5 SD of a player's strokesDjokovic, serve trunk lean: -2.5 SD of a player's strokesSinner, serve trunk lean: +1.0 SD of a player's strokesPaul, serve trunk lean: -2.0 SD of a player's strokesAlcaraz, serve trunk lean: +1.9 SD of a player's strokesFritz, serve trunk lean: +0.0 SD of a player's strokesRublev, serve trunk lean: +1.5 SD of a player's strokesPeter, serve trunk lean: +3.5 SD of a player's strokesRichard, serve trunk lean: +2.5 SD of a player's strokeships to hitting sideTiafoe, serve hips to hitting side: +1.2 SD of a player's strokesZverev, serve hips to hitting side: +2.1 SD of a player's strokesMedvedev, serve hips to hitting side: +1.7 SD of a player's strokesShelton, serve hips to hitting side: +1.4 SD of a player's strokesKyrgios, serve hips to hitting side: -1.1 SD of a player's strokesDjokovic, serve hips to hitting side: -0.8 SD of a player's strokesSinner, serve hips to hitting side: +1.3 SD of a player's strokesPaul, serve hips to hitting side: -1.4 SD of a player's strokesAlcaraz, serve hips to hitting side: -0.8 SD of a player's strokesFritz, serve hips to hitting side: -0.9 SD of a player's strokesRublev, serve hips to hitting side: -0.4 SD of a player's strokesPeter, serve hips to hitting side: +0.5 SD of a player's strokesRichard, serve hips to hitting side: +0.6 SD of a player's strokesForehandtake-back out to sideTiafoe, forehand take-back out to side: +0.0 SD of a player's strokesZverev, forehand take-back out to side: +0.6 SD of a player's strokesMedvedev, forehand take-back out to side: -0.3 SD of a player's strokesShelton, forehand take-back out to side: -0.2 SD of a player's strokesKyrgios, forehand take-back out to side: +0.2 SD of a player's strokesDjokovic, forehand take-back out to side: -1.6 SD of a player's strokesSinner, forehand take-back out to side: +0.5 SD of a player's strokesPaul, forehand take-back out to side: +0.9 SD of a player's strokesAlcaraz, forehand take-back out to side: -0.3 SD of a player's strokesFritz, forehand take-back out to side: -1.1 SD of a player's strokesRublev, forehand take-back out to side: +0.3 SD of a player's strokesPeter, forehand take-back out to side: -1.3 SD of a player's strokesRichard, forehand take-back out to side: +2.5 SD of a player's strokesshoulder turnTiafoe, forehand shoulder turn: -1.2 SD of a player's strokesZverev, forehand shoulder turn: +0.2 SD of a player's strokesMedvedev, forehand shoulder turn: +0.4 SD of a player's strokesShelton, forehand shoulder turn: -0.0 SD of a player's strokesKyrgios, forehand shoulder turn: -0.2 SD of a player's strokesDjokovic, forehand shoulder turn: +0.5 SD of a player's strokesSinner, forehand shoulder turn: -0.2 SD of a player's strokesPaul, forehand shoulder turn: -1.1 SD of a player's strokesAlcaraz, forehand shoulder turn: +0.2 SD of a player's strokesFritz, forehand shoulder turn: -0.2 SD of a player's strokesRublev, forehand shoulder turn: +1.1 SD of a player's strokesPeter, forehand shoulder turn: +0.3 SD of a player's strokesRichard, forehand shoulder turn: -0.8 SD of a player's strokeship turnTiafoe, forehand hip turn: -0.4 SD of a player's strokesZverev, forehand hip turn: +0.1 SD of a player's strokesMedvedev, forehand hip turn: +0.2 SD of a player's strokesShelton, forehand hip turn: +0.6 SD of a player's strokesKyrgios, forehand hip turn: -0.0 SD of a player's strokesDjokovic, forehand hip turn: +0.8 SD of a player's strokesSinner, forehand hip turn: -0.5 SD of a player's strokesPaul, forehand hip turn: -0.5 SD of a player's strokesAlcaraz, forehand hip turn: +0.0 SD of a player's strokesFritz, forehand hip turn: +0.0 SD of a player's strokesRublev, forehand hip turn: -0.0 SD of a player's strokesPeter, forehand hip turn: not measured on our phone footageRichard, forehand hip turn: not measured on our phone footageswing timeTiafoe, forehand swing time: -0.7 SD of a player's strokesZverev, forehand swing time: -0.4 SD of a player's strokesMedvedev, forehand swing time: +1.1 SD of a player's strokesShelton, forehand swing time: +0.4 SD of a player's strokesKyrgios, forehand swing time: -0.3 SD of a player's strokesDjokovic, forehand swing time: +0.7 SD of a player's strokesSinner, forehand swing time: +0.6 SD of a player's strokesPaul, forehand swing time: -0.6 SD of a player's strokesAlcaraz, forehand swing time: -0.1 SD of a player's strokesFritz, forehand swing time: +0.9 SD of a player's strokesRublev, forehand swing time: -0.3 SD of a player's strokesPeter, forehand swing time: +2.0 SD of a player's strokesRichard, forehand swing time: +0.5 SD of a player's strokesstance angleTiafoe, forehand stance angle: +0.1 SD of a player's strokesZverev, forehand stance angle: +0.6 SD of a player's strokesMedvedev, forehand stance angle: +0.2 SD of a player's strokesShelton, forehand stance angle: -0.2 SD of a player's strokesKyrgios, forehand stance angle: +0.1 SD of a player's strokesDjokovic, forehand stance angle: -0.6 SD of a player's strokesSinner, forehand stance angle: +0.1 SD of a player's strokesPaul, forehand stance angle: -0.2 SD of a player's strokesAlcaraz, forehand stance angle: -0.5 SD of a player's strokesFritz, forehand stance angle: +0.3 SD of a player's strokesRublev, forehand stance angle: -0.2 SD of a player's strokesPeter, forehand stance angle: +0.2 SD of a player's strokesRichard, forehand stance angle: -0.2 SD of a player's strokescontact heightTiafoe, forehand contact height: -0.6 SD of a player's strokesZverev, forehand contact height: -0.3 SD of a player's strokesMedvedev, forehand contact height: -1.1 SD of a player's strokesShelton, forehand contact height: -0.5 SD of a player's strokesKyrgios, forehand contact height: -0.5 SD of a player's strokesDjokovic, forehand contact height: +0.4 SD of a player's strokesSinner, forehand contact height: +0.9 SD of a player's strokesPaul, forehand contact height: +0.4 SD of a player's strokesAlcaraz, forehand contact height: +0.5 SD of a player's strokesFritz, forehand contact height: -0.1 SD of a player's strokesRublev, forehand contact height: +0.7 SD of a player's strokesPeter, forehand contact height: not measured on our phone footageRichard, forehand contact height: not measured on our phone footagecontact out to sideTiafoe, forehand contact out to side: -0.1 SD of a player's strokesZverev, forehand contact out to side: +0.3 SD of a player's strokesMedvedev, forehand contact out to side: -0.1 SD of a player's strokesShelton, forehand contact out to side: +0.5 SD of a player's strokesKyrgios, forehand contact out to side: -0.4 SD of a player's strokesDjokovic, forehand contact out to side: +0.6 SD of a player's strokesSinner, forehand contact out to side: +0.1 SD of a player's strokesPaul, forehand contact out to side: -1.7 SD of a player's strokesAlcaraz, forehand contact out to side: +0.6 SD of a player's strokesFritz, forehand contact out to side: -0.1 SD of a player's strokesRublev, forehand contact out to side: -0.3 SD of a player's strokesPeter, forehand contact out to side: +1.9 SD of a player's strokesRichard, forehand contact out to side: +1.4 SD of a player's strokesshoulders openTiafoe, forehand shoulders open: -1.3 SD of a player's strokesZverev, forehand shoulders open: +0.3 SD of a player's strokesMedvedev, forehand shoulders open: -1.1 SD of a player's strokesShelton, forehand shoulders open: -0.6 SD of a player's strokesKyrgios, forehand shoulders open: -0.6 SD of a player's strokesDjokovic, forehand shoulders open: +0.2 SD of a player's strokesSinner, forehand shoulders open: +0.4 SD of a player's strokesPaul, forehand shoulders open: +1.0 SD of a player's strokesAlcaraz, forehand shoulders open: +0.5 SD of a player's strokesFritz, forehand shoulders open: -0.5 SD of a player's strokesRublev, forehand shoulders open: +0.5 SD of a player's strokesPeter, forehand shoulders open: -1.6 SD of a player's strokesRichard, forehand shoulders open: -1.0 SD of a player's strokeshead movementTiafoe, forehand head movement: -0.2 SD of a player's strokesZverev, forehand head movement: -0.2 SD of a player's strokesMedvedev, forehand head movement: +0.1 SD of a player's strokesShelton, forehand head movement: +1.4 SD of a player's strokesKyrgios, forehand head movement: +0.3 SD of a player's strokesDjokovic, forehand head movement: -0.7 SD of a player's strokesSinner, forehand head movement: +1.6 SD of a player's strokesPaul, forehand head movement: +1.1 SD of a player's strokesAlcaraz, forehand head movement: -0.7 SD of a player's strokesFritz, forehand head movement: -0.2 SD of a player's strokesRublev, forehand head movement: +0.1 SD of a player's strokesPeter, forehand head movement: -1.3 SD of a player's strokesRichard, forehand head movement: +1.0 SD of a player's strokesfinish arm heightTiafoe, forehand finish arm height: -0.2 SD of a player's strokesZverev, forehand finish arm height: +0.1 SD of a player's strokesMedvedev, forehand finish arm height: +0.6 SD of a player's strokesShelton, forehand finish arm height: +1.9 SD of a player's strokesKyrgios, forehand finish arm height: -0.1 SD of a player's strokesDjokovic, forehand finish arm height: +0.0 SD of a player's strokesSinner, forehand finish arm height: -0.3 SD of a player's strokesPaul, forehand finish arm height: -0.8 SD of a player's strokesAlcaraz, forehand finish arm height: +1.2 SD of a player's strokesFritz, forehand finish arm height: +0.4 SD of a player's strokesRublev, forehand finish arm height: -0.7 SD of a player's strokesPeter, forehand finish arm height: +0.8 SD of a player's strokesRichard, forehand finish arm height: -0.7 SD of a player's strokesfinish out to sideTiafoe, forehand finish out to side: -0.1 SD of a player's strokesZverev, forehand finish out to side: -0.0 SD of a player's strokesMedvedev, forehand finish out to side: +0.6 SD of a player's strokesShelton, forehand finish out to side: +0.8 SD of a player's strokesKyrgios, forehand finish out to side: +0.2 SD of a player's strokesDjokovic, forehand finish out to side: -0.3 SD of a player's strokesSinner, forehand finish out to side: -0.8 SD of a player's strokesPaul, forehand finish out to side: -0.7 SD of a player's strokesAlcaraz, forehand finish out to side: +0.2 SD of a player's strokesFritz, forehand finish out to side: +0.2 SD of a player's strokesRublev, forehand finish out to side: -1.0 SD of a player's strokesPeter, forehand finish out to side: -0.1 SD of a player's strokesRichard, forehand finish out to side: -1.1 SD of a player's strokesshoulders open at finishTiafoe, forehand shoulders open at finish: -0.2 SD of a player's strokesZverev, forehand shoulders open at finish: +0.1 SD of a player's strokesMedvedev, forehand shoulders open at finish: -0.7 SD of a player's strokesShelton, forehand shoulders open at finish: -0.2 SD of a player's strokesKyrgios, forehand shoulders open at finish: -0.3 SD of a player's strokesDjokovic, forehand shoulders open at finish: +0.8 SD of a player's strokesSinner, forehand shoulders open at finish: +0.3 SD of a player's strokesPaul, forehand shoulders open at finish: +1.1 SD of a player's strokesAlcaraz, forehand shoulders open at finish: +0.0 SD of a player's strokesFritz, forehand shoulders open at finish: -0.4 SD of a player's strokesRublev, forehand shoulders open at finish: +0.5 SD of a player's strokesPeter, forehand shoulders open at finish: -1.2 SD of a player's strokesRichard, forehand shoulders open at finish: -0.2 SD of a player's strokesBackhandtake-back out to sideTiafoe, backhand take-back out to side: +0.6 SD of a player's strokesZverev, backhand take-back out to side: +0.5 SD of a player's strokesMedvedev, backhand take-back out to side: -0.8 SD of a player's strokesShelton, backhand take-back out to side: -1.0 SD of a player's strokesKyrgios, backhand take-back out to side: -0.4 SD of a player's strokesDjokovic, backhand take-back out to side: +0.3 SD of a player's strokesSinner, backhand take-back out to side: +0.6 SD of a player's strokesPaul, backhand take-back out to side: +0.6 SD of a player's strokesAlcaraz, backhand take-back out to side: +0.1 SD of a player's strokesFritz, backhand take-back out to side: -0.4 SD of a player's strokesRublev, backhand take-back out to side: -0.6 SD of a player's strokesPeter, backhand take-back out to side: +1.9 SD of a player's strokesRichard, backhand take-back out to side: +5.2 SD of a player's strokesshoulder turnTiafoe, backhand shoulder turn: -0.5 SD of a player's strokesZverev, backhand shoulder turn: +1.0 SD of a player's strokesMedvedev, backhand shoulder turn: +0.4 SD of a player's strokesShelton, backhand shoulder turn: +1.9 SD of a player's strokesKyrgios, backhand shoulder turn: -1.3 SD of a player's strokesDjokovic, backhand shoulder turn: -0.6 SD of a player's strokesSinner, backhand shoulder turn: -0.5 SD of a player's strokesPaul, backhand shoulder turn: -0.4 SD of a player's strokesAlcaraz, backhand shoulder turn: +0.7 SD of a player's strokesFritz, backhand shoulder turn: +0.4 SD of a player's strokesRublev, backhand shoulder turn: -0.0 SD of a player's strokesPeter, backhand shoulder turn: -1.1 SD of a player's strokesRichard, backhand shoulder turn: -1.5 SD of a player's strokeship turnTiafoe, backhand hip turn: -0.4 SD of a player's strokesZverev, backhand hip turn: +0.1 SD of a player's strokesMedvedev, backhand hip turn: -0.2 SD of a player's strokesShelton, backhand hip turn: -0.2 SD of a player's strokesKyrgios, backhand hip turn: -1.1 SD of a player's strokesDjokovic, backhand hip turn: +0.4 SD of a player's strokesSinner, backhand hip turn: -0.6 SD of a player's strokesPaul, backhand hip turn: +0.5 SD of a player's strokesAlcaraz, backhand hip turn: +0.5 SD of a player's strokesFritz, backhand hip turn: +0.3 SD of a player's strokesRublev, backhand hip turn: +0.1 SD of a player's strokesPeter, backhand hip turn: not measured on our phone footageRichard, backhand hip turn: not measured on our phone footageswing timeTiafoe, backhand swing time: -0.5 SD of a player's strokesZverev, backhand swing time: -0.9 SD of a player's strokesMedvedev, backhand swing time: -1.0 SD of a player's strokesShelton, backhand swing time: -0.5 SD of a player's strokesKyrgios, backhand swing time: -0.4 SD of a player's strokesDjokovic, backhand swing time: +0.3 SD of a player's strokesSinner, backhand swing time: +0.5 SD of a player's strokesPaul, backhand swing time: +0.3 SD of a player's strokesAlcaraz, backhand swing time: +0.2 SD of a player's strokesFritz, backhand swing time: +0.2 SD of a player's strokesRublev, backhand swing time: +1.0 SD of a player's strokesPeter, backhand swing time: +1.8 SD of a player's strokesRichard, backhand swing time: +2.4 SD of a player's strokesstance angleTiafoe, backhand stance angle: +0.4 SD of a player's strokesZverev, backhand stance angle: +0.2 SD of a player's strokesMedvedev, backhand stance angle: +0.2 SD of a player's strokesShelton, backhand stance angle: +0.8 SD of a player's strokesKyrgios, backhand stance angle: +0.4 SD of a player's strokesDjokovic, backhand stance angle: -0.2 SD of a player's strokesSinner, backhand stance angle: -0.1 SD of a player's strokesPaul, backhand stance angle: -0.4 SD of a player's strokesAlcaraz, backhand stance angle: -0.3 SD of a player's strokesFritz, backhand stance angle: -0.2 SD of a player's strokesRublev, backhand stance angle: -0.1 SD of a player's strokesPeter, backhand stance angle: +0.3 SD of a player's strokesRichard, backhand stance angle: +0.8 SD of a player's strokescontact heightTiafoe, backhand contact height: -0.5 SD of a player's strokesZverev, backhand contact height: -0.6 SD of a player's strokesMedvedev, backhand contact height: -0.8 SD of a player's strokesShelton, backhand contact height: +0.0 SD of a player's strokesKyrgios, backhand contact height: -1.3 SD of a player's strokesDjokovic, backhand contact height: +0.5 SD of a player's strokesSinner, backhand contact height: +1.3 SD of a player's strokesPaul, backhand contact height: +0.6 SD of a player's strokesAlcaraz, backhand contact height: +1.5 SD of a player's strokesFritz, backhand contact height: -0.5 SD of a player's strokesRublev, backhand contact height: +1.0 SD of a player's strokesPeter, backhand contact height: not measured on our phone footageRichard, backhand contact height: not measured on our phone footagecontact out to sideTiafoe, backhand contact out to side: +0.7 SD of a player's strokesZverev, backhand contact out to side: +0.5 SD of a player's strokesMedvedev, backhand contact out to side: +1.0 SD of a player's strokesShelton, backhand contact out to side: -0.6 SD of a player's strokesKyrgios, backhand contact out to side: -0.5 SD of a player's strokesDjokovic, backhand contact out to side: +0.1 SD of a player's strokesSinner, backhand contact out to side: -0.4 SD of a player's strokesPaul, backhand contact out to side: -0.1 SD of a player's strokesAlcaraz, backhand contact out to side: -0.0 SD of a player's strokesFritz, backhand contact out to side: +0.4 SD of a player's strokesRublev, backhand contact out to side: -0.3 SD of a player's strokesPeter, backhand contact out to side: +1.9 SD of a player's strokesRichard, backhand contact out to side: +2.4 SD of a player's strokesshoulders openTiafoe, backhand shoulders open: +0.2 SD of a player's strokesZverev, backhand shoulders open: -0.2 SD of a player's strokesMedvedev, backhand shoulders open: -0.4 SD of a player's strokesShelton, backhand shoulders open: -0.1 SD of a player's strokesKyrgios, backhand shoulders open: +0.3 SD of a player's strokesDjokovic, backhand shoulders open: -0.1 SD of a player's strokesSinner, backhand shoulders open: +0.1 SD of a player's strokesPaul, backhand shoulders open: +0.4 SD of a player's strokesAlcaraz, backhand shoulders open: -0.0 SD of a player's strokesFritz, backhand shoulders open: -0.4 SD of a player's strokesRublev, backhand shoulders open: +0.2 SD of a player's strokesPeter, backhand shoulders open: -0.1 SD of a player's strokesRichard, backhand shoulders open: +0.0 SD of a player's strokeshead movementTiafoe, backhand head movement: +0.3 SD of a player's strokesZverev, backhand head movement: -0.4 SD of a player's strokesMedvedev, backhand head movement: -0.5 SD of a player's strokesShelton, backhand head movement: +0.6 SD of a player's strokesKyrgios, backhand head movement: +0.3 SD of a player's strokesDjokovic, backhand head movement: -0.7 SD of a player's strokesSinner, backhand head movement: +1.2 SD of a player's strokesPaul, backhand head movement: +0.7 SD of a player's strokesAlcaraz, backhand head movement: -0.9 SD of a player's strokesFritz, backhand head movement: -0.4 SD of a player's strokesRublev, backhand head movement: +0.2 SD of a player's strokesPeter, backhand head movement: -0.7 SD of a player's strokesRichard, backhand head movement: +2.1 SD of a player's strokesfinish arm heightTiafoe, backhand finish arm height: -0.2 SD of a player's strokesZverev, backhand finish arm height: -0.4 SD of a player's strokesMedvedev, backhand finish arm height: +1.3 SD of a player's strokesShelton, backhand finish arm height: +1.4 SD of a player's strokesKyrgios, backhand finish arm height: -0.2 SD of a player's strokesDjokovic, backhand finish arm height: -0.7 SD of a player's strokesSinner, backhand finish arm height: +0.5 SD of a player's strokesPaul, backhand finish arm height: -0.4 SD of a player's strokesAlcaraz, backhand finish arm height: +0.6 SD of a player's strokesFritz, backhand finish arm height: +0.7 SD of a player's strokesRublev, backhand finish arm height: -0.3 SD of a player's strokesPeter, backhand finish arm height: +1.9 SD of a player's strokesRichard, backhand finish arm height: -0.0 SD of a player's strokesfinish out to sideTiafoe, backhand finish out to side: -0.8 SD of a player's strokesZverev, backhand finish out to side: -0.3 SD of a player's strokesMedvedev, backhand finish out to side: +1.8 SD of a player's strokesShelton, backhand finish out to side: +0.1 SD of a player's strokesKyrgios, backhand finish out to side: -0.9 SD of a player's strokesDjokovic, backhand finish out to side: +0.1 SD of a player's strokesSinner, backhand finish out to side: -0.2 SD of a player's strokesPaul, backhand finish out to side: -0.6 SD of a player's strokesAlcaraz, backhand finish out to side: +0.8 SD of a player's strokesFritz, backhand finish out to side: +0.3 SD of a player's strokesRublev, backhand finish out to side: +0.2 SD of a player's strokesPeter, backhand finish out to side: +0.2 SD of a player's strokesRichard, backhand finish out to side: -0.2 SD of a player's strokesshoulders open at finishTiafoe, backhand shoulders open at finish: +0.4 SD of a player's strokesZverev, backhand shoulders open at finish: -1.5 SD of a player's strokesMedvedev, backhand shoulders open at finish: -0.8 SD of a player's strokesShelton, backhand shoulders open at finish: -0.7 SD of a player's strokesKyrgios, backhand shoulders open at finish: +0.2 SD of a player's strokesDjokovic, backhand shoulders open at finish: -0.1 SD of a player's strokesSinner, backhand shoulders open at finish: -0.1 SD of a player's strokesPaul, backhand shoulders open at finish: +0.6 SD of a player's strokesAlcaraz, backhand shoulders open at finish: +0.8 SD of a player's strokesFritz, backhand shoulders open at finish: -1.0 SD of a player's strokesRublev, backhand shoulders open at finish: +0.2 SD of a player's strokesPeter, backhand shoulders open at finish: +0.2 SD of a player's strokesRichard, backhand shoulders open at finish: +1.1 SD of a player's strokesProsAmateurs≤ −1.5−1−0.50+0.5+1≥ +1.5z scorenot measured on our phone footage

Figure 4. Stroke fingerprints of 11 ATP pros and two amateurs, me and Richard. Each column is a player; each row is a stroke trait. Color is a z score of the player's median minus the median of other pros', and measures how different a player's stroke trait is against the median. Point at or click a square to see, on the left, that player's typical stroke. Clicking "Compare with" swaps the average for one pro for more detailed comparisons.

A good trait had to pass three tests. First, it must allow players of diverse heights and builds to be compared against each other. If the "reach" trait was in meters, it would have just ranked players by height. So physical measurements must be normalized to the player's dimensions, such as their torso length. Second, it must stay relatively invariant to the camera's zoom, angle and tilt, and where the player stood. This is primarily done by filtering for traits that are more independent of camera angles, and then regressing these factors out of each trait. Lastly, each trait must be atomic. Toss arm height would be a bad trait because it mixes how straight the arm is, how far it leans in, and how high the shoulder lifts. These were decomposed into multiple atomic traits: toss arm straightness and toss arm in over head. Of the 55 traits we computed, 31 are in Figure 4; Table 1 lists 19 of the other 24 and why each was left out; the remaining five overlap with traits in Figure 4.

The pros

With the traits measured, I could now quantify how different each pro's strokes are from the other pros' via Z-scores (Figure 5; see Methods for how it is computed).

00.511.522.5how differentSinner: 0.91Alcaraz: 0.97Rublev: 1.11Kyrgios: 1.20Paul: 1.28Fritz: 1.33Medvedev: 1.45Shelton: 1.53Zverev: 1.54Djokovic: 1.69Tiafoe: 2.581.42ServeKyrgios: 0.31Zverev: 0.31Fritz: 0.48Alcaraz: 0.52Rublev: 0.58Tiafoe: 0.60Sinner: 0.65Medvedev: 0.66Djokovic: 0.71Shelton: 0.81Paul: 0.930.60ForehandDjokovic: 0.41Tiafoe: 0.48Fritz: 0.48Rublev: 0.48Paul: 0.48Sinner: 0.62Zverev: 0.67Alcaraz: 0.67Kyrgios: 0.73Shelton: 0.86Medvedev: 0.880.61BackhandDjokovicTiafoeSheltonPaulMedvedev
Figure 5. How different each pro's stroke is from the other pros'. A pro's stroke would score 0 only if, on every trait of that stroke, his Z-score is 0. Hover over a dot for the player.

The serve is the most individual stroke. On average, a pro's serve differs from the others' about twice as much as his forehand or backhand does, probably because the server tosses his own ball, while a ground stroke has to answer whatever ball comes in. Tiafoe's serve is the most unusual of all, and nearly all of that is one trait, trophy shoulder tilt: at the top of the toss, his shoulder line tips 31°, where the other pros' tip about 100°.

The ground strokes are much more alike. The most unusual forehands are Shelton's and Paul's, and the most unusual backhand is Medvedev's. Shelton and Alcaraz are the only two whose forehand finish arm height is Nadal-like, high and over the hitting side of the body, and Medvedev's backhand finish is in a class of its own. The pros agree most on the forehand and backhand stance angle and on backhand contact out to the side. Those are the traits where falling outside the pros should worry me most.

The amateurs

Richard and I are a long way from the pros. I was 9 UTR two years and two kids ago. Richard was >13 UTR, playing for Columbia, a top-10 Division I program. The top-10 pros are around 16 UTR. For reference, a player rated one point higher is expected to win 8 or 9 times out of 10, so I am seven quantal levels below the pros, and Richard used to be three (as a corollary, Richard predictably and routinely kicks my ass).

We filmed ourselves rallying with a phone behind the baseline and ran the clips through the same pipeline (see Methods for how the phone footage was corrected). Figure 6 shows every trait we could measure for both of us against the pros. Seven traits are excluded because they were sensitive to recording positions: our phone sat lower, closer to the court and more to one side than a broadcast camera.

-4-3-2-10+1+2+3+4PeterRicharda prothe pros, ±1 SDBH: contact out to sidePeter: 0.65 torsosRichard: 0.72 torsosBH: take-back out to sidePeter: 0.88 torsosRichard: 1.39 torsosFH: swing timePeter: 0.30 sRichard: 0.20 sBH: swing timePeter: 0.27 sRichard: 0.30 sFH: contact out to sidePeter: 1.38 torsosRichard: 1.28 torsosBH: finish arm heightPeter: -31°Richard: -77°FH: shoulders openPeter: 52°Richard: 63°S: trunk leanPeter: 36°Richard: 31°FH: shoulders open at finishPeter: 111°Richard: 130°FH: take-back out to sidePeter: 0.27 torsosRichard: 1.08 torsosFH: head movementPeter: 0.18 torsosRichard: 0.48 torsosBH: shoulder turnPeter: 70°Richard: 63°BH: head movementPeter: 0.14 torsosRichard: 0.46 torsosS: toss arm in over headPeter: 19°Richard: 18°FH: finish arm heightPeter: -62°Richard: -119°BH: stance anglePeter: 68°Richard: 85°FH: stance anglePeter: 134°Richard: 124°BH: shoulders openPeter: 55°Richard: 58°S: hips to hitting sidePeter: -0.13 torsosRichard: -0.13 torsosFH: shoulder turnPeter: 109°Richard: 93°BH: shoulders open at finishPeter: 118°Richard: 138°BH: finish out to sidePeter: -0.53 torsosRichard: -0.61 torsosS: toss-to-hit timePeter: 0.63 sRichard: 0.77 sFH: finish out to sidePeter: -0.35 torsosRichard: -0.65 torsosdifference from the pros' median, in stroke-to-stroke spreads (z)
Figure 6. Every trait measured for Peter and Richard, against the eleven pros. Each row is one trait (S serve, FH forehand, BH backhand), sorted by how many pro standard deviations Peter is from the pros' median.

My forehand is where I differ most from the pros. I meet the ball further out to the side than any pro, with my shoulders less open to the net, and my forward swing takes longer. My guess is that all three come from hitting the ball late. Richard's forehand, on the other hand, is inside the pros' range on everything except for two traits: his contact is also out to the side, and his take-back is further out to the side than any pro's.

On the backhand we share a problem: both of us meet the ball further from the body than any pro. Among the pros, backhands hit further from the body more often end in unforced errors, so this may be worth fixing. Richard's front foot also steps across a little less than any pro's, and his head moves more.

On the serve, we both lean the trunk further than any pro: 36° for me and 31° for Richard, against at most 28° for Alcaraz and Shelton. Richard also takes a little longer from toss to hit than the slowest pro.

Claude's analysis

I then fed all these measurements to Claude with a blank context, and asked it what Richard and I should each work on. Figure 7 is its answer, edited for length.

Claude's advice for

Forehand

You turn, but you don't rotate through.

Peter
A typical pro: Zverev

The take-back turn is pro-level (109° vs. 105°). What follows isn't:

  • Your chest is still sideways at contact: shoulders open 52° vs. 81°, less than all eleven.
  • You reach for the ball: contact is further out to the side than every pro's (1.38 torsos vs. 0.96).
  • A small take-back feeds a slow forward swing (0.30 s vs. 0.17 s, slower than all eleven), so you guide the ball instead of accelerating through it.

FixLet the chest drive the swing until it nearly faces the net. Take the racquet back further so the forward swing can be short and fast, and meet the ball closer to your body and further in front.

Backhand

Straight arms, swinging up instead of through.

Peter
A typical pro: Tiafoe

Preparation and footwork are fine. The arms aren't:

  • Take-back: arms locked and racquet flat at the back fence, bigger than every pro's. The pros bend the elbows and keep the racquet head up.
  • Contact: arms still straight (148° vs. 111°), with the ball further out to the side than every pro's.
  • Swing: the racquet drops low and comes almost straight up, slower than all eleven (0.27 s vs. 0.16 s), to the highest finish of all twelve. The pros wrap over the shoulder with bent elbows.

FixBend the elbows a little and keep the racquet head up. Hit the ball just in front of the front hip, and swing through to finish over your right shoulder, not at the sky.

Serve

You fall sideways instead of going up and forward.

Peter
A typical pro: Kyrgios
  • Trunk lean at contact is 36° toward the tossing side, the most of all twelve (pros 21°).
  • The likely cause: your toss drifts over your head (toss arm 19° in vs. 9°), so you bend sideways to reach it.

FixToss further in front and slightly to the hitting side, about a metre inside the baseline, and practise landing inside the court.

In order

Forehand first (the most-used stroke, and the clearest gap), then the serve toss, then the backhand. Re-film in a few weeks and check that the forehand numbers move toward the pros.

Figure 7. Claude’s advice for each of us, edited for length; pick Peter or Richard at the top. Each number is a player’s median; the pros’ figure is the median of their eleven medians, or the range from the lowest to the highest. Lengths are in torso lengths (see Methods).

Earlier I wrote that a good coach has to diagnose each student's problem and pitch the fix at the right level. What I like about Claude's advice is that it covers the whole range of levels. It starts with how my mechanics differ from the pros', trait by trait and with numbers. It then joins several of these differences into one diagnosis per stroke: on my forehand, contact out to the side, shoulders closed at contact and a slow forward swing all come from guiding the ball with my arms instead of rotating through it, and on my serve, the trunk lean and the toss arm both come from a toss that drifts over my head. Finally, it ranks what I should work on, the forehand first, then the serve, then the backhand.

Claude did not know this, but it successfully recognized my weaker side (forehands) as well as Richard's (backhands), and prioritized fixes to them. Also, my own diagnosis of my forehand's issues was wrong, and Claude's diagnosis makes a lot more sense to me. So after iterating with it to provide a robust and rich set of features, it was able to join differences in multiple traits that look separate into root causes, and also provided very apt fixes to these issues.

I'm personally going to be an enthusiastic customer of this pipeline, and will be using it to chart my improvement over time.

Next steps

In an ideal world, everyone who loves a sport, from a kid at the local park to a weekend player in their fifties, would have a coach who watches their practices and matches, knows their game better than they do, and tells them the most important things to work on next. A phone camera, open-source models, and LLM's judgment already got us very far along this goal.

This post covered only one part of coaching: stroke technique. The same footage holds much more. For example, we can do the same analysis for footwork and fitness, which, for the large majority of amateur players, is more important than technique. We can also analyze the mental aspects of tennis, and quantify how behavior and demeanor in-between points affect performance.

None of this is specific to tennis. We are also open to other sports, especially golf (my parents are golf nuts, and it'd be fun to keep fueling their addiction). Reach out to [email protected] if you would like to partner with us, or want this kind of in-depth analysis for yourself or your team.

Methods

z score. Each square in Figure 4 compares one player's typical stroke with the other pros' on one trait. We take the player's median over all his strokes, subtract the median of the other pros' medians, and divide by how much a player's strokes typically vary from one to the next on that trait (the stroke-to-stroke standard deviation, averaged over the pros). Peter and Richard are compared with all eleven pros.

How different. Figure 5 sums up a player's z scores on one stroke as one number: square each z, average them over the stroke's traits, and take the square root (the root mean square).

Players. This list only included players with two-handed backhands, as we're already in the low data regime with 11 players, so I can't say anything about one handers, or backhands as an umbrella.

Strokes kept. A forehand or backhand counts only when the hitting wrist is on the matching side of the body at contact. This removes the strokes the stroke model calls the wrong way round, which it does often on left-handers such as Shelton. Feeds are removed too: a stroke counts only if the ball is not seen above the hitter's head in the second before contact.

Lengths. Every length is in the player's own torso lengths (mid-shoulder to mid-hip), so a tall player's long reach is not taken for style. Distances on the court are mapped into metres through the court lines, then divided by the player's torso in metres.

Camera. Before the pros are compared, the measured camera (zoom, angle, tilt, where the baseline sits in the picture, picture quality, the player's height on screen), the event (Australian or US Open) and the situation (where the player stood, how fast he ran, the shot's direction) are regressed out of each trait, with their effects estimated within each player so that a player's style is not taken for the camera. A trait is left off the heatmap when the camera still explains 10% or more of a player's stroke-to-stroke spread. The exceptions are the forehand and backhand stance angles (23% and 20%), most of which comes from how clearly the pose model sees the feet. We also kept four traits on both ground strokes that the camera moves by up to 19%, to look at them: contact height, shoulder turn, hip turn and shoulders open at finish.

Our footage. Peter and Richard were filmed with a phone behind the baseline, lower and closer than a broadcast camera. The two cameras don't overlap: the far baseline looks 0.22 to 0.25 as wide as the near one on the phone, against 0.51 on TV. So the broadcast's camera effects can't be carried over to the phone. Instead we measured how differently the two cameras see the body. A camera looking down shortens anything upright, so a torso looks shorter, for the player's height, the higher the camera. On TV, the pros' torsos measure 0.27 to 0.28 of their listed heights; on the phone, ours measure 0.31 to 0.32 of our own. The difference is the camera, not our builds: Peter and Richard agree with each other and sit outside every pro. Before measuring our strokes, we shrink our skeletons' heights in the picture until our torso-to-height ratio matches the pros' (dividing by 1.15 to 1.22). This corrects every length out to the side, which is counted in torso lengths, and every angle from upright. It can't correct anything pointing toward the net, which a lower camera sees less of, so traits that depend on that (heights and angles measured up and down the picture) are still left out for us. So is hip turn. We read a turn from how wide the hips or shoulders look across the picture, which assumes a camera looking straight down the court. Our phone sat off to one side and sees the court at a slant, so hips pointing at the net still look wide. The shoulders are further apart and steadier, so we kept their turns, though they may read a little low for us too.

Coaching. Claude (Opus 5.5) was started in a new session with no memory and asked what coaching advice it would give me. It read the measurements of the pros and of us, and the lists of traits left off the heatmap. After I asked it to look at my backhand, it watched clips of our strokes and revised its advice. The advice above is its text after that.

Traits left out

TraitStrokeWhy it is left out
elbow at contactForehand, backhandA forearm pointing at the net is foreshortened and looks bent.
take-back shoulder turnForehand, backhandMeasured as the forward swing starts, after the shoulders have begun to unwind; the heatmap shows shoulder turn at its most turned instead.
hip-shoulder sep.Forehand, backhandFrom behind, the two hip points are close together and jittery.
shoulder tiltForehand, backhandThe camera explains 23% of the stroke-to-stroke spread.
knee angleForehand, backhandThe camera explains 17% and 25% of the stroke-to-stroke spread.
feet apartForehand, backhandDepth on the court is squashed when seen from behind.
stance widthForehandThe camera explains 23% of the stroke-to-stroke spread.
stance forwardForehand, backhandDepth on the court is squashed when seen from behind.
wrist speedServe, forehand, backhandThe swing toward the net runs along the camera's line of sight, so most of its speed is unseen.
into courtServeThe camera explains 26% of the stroke-to-stroke spread.
Table 1. The traits we computed but left off the heatmap, and why.

Footage

PlayerMatchesMinutesServesForehandsBackhands
Carlos Alcaraz4105150 (133)146 (87)91 (60)
Novak Djokovic7179220 (166)221 (126)189 (96)
Taylor Fritz397174 (139)206 (125)157 (92)
Nick Kyrgios487146 (112)144 (84)128 (78)
Daniil Medvedev5118147 (107)152 (93)228 (125)
Tommy Paul4119145 (77)200 (94)153 (98)
Andrey Rublev392165 (120)123 (76)114 (69)
Ben Shelton7168302 (234)255 (157)96 (58)
Jannik Sinner493126 (101)123 (67)143 (98)
Frances Tiafoe7200294 (242)222 (127)224 (136)
Alexander Zverev6114124 (82)118 (65)142 (90)
Table 2. The footage of each pro. Each cell: strokes detected (strokes analysed, after removing slices, drop shots, shots on the run and shots away from the baseline).

Benchmarks

We chose each model by scoring it, and the strongest alternatives, on public test sets labelled by hand. Most of these are broadcast frames from other matches, and the skeleton labels come from close-range, self-recorded images, so they rank the models more than they measure how accurate each one is on our videos. Finding the people and placing their joints matter most here, because every trait is read from the skeleton.

DetectorFar player foundNear player foundSeconds per frame
RF-DETR Medium (used)100%100%0.025
RF-DETR Large99.5%100%0.024
YOLO11m98.5%100%0.030
RT-DETRv265%96%0.070
RF-DETR Keypoint, with a second pass on the far half40%90%0.096
Table 3. Finding the players: 197 broadcast frames from the Australian Open with both players outlined by hand. A player counts as found when a box covers at least half of the labelled one (intersection over union ≥ 0.5). Far players are about 80 pixels tall. Seconds per frame on one NVIDIA L4 GPU.
ModelTennis, allForehandBackhandServeFeetCrops per second
RF-DETR Keypoint0.7730.7460.7680.796——
ViTPose-Plus-Huge0.8240.8080.7980.890—438
RTMW-x (used)0.8550.8190.8300.9110.833490
Sapiens2 0.4B0.8650.8330.8460.9310.87120
Sapiens2 1B0.8680.8350.8490.9340.8857.5
Table 4. Skeletons, scored by OKS (object keypoint similarity): 1 when every joint is on its label, falling toward 0 as joints stray, in proportion to the size of the body. Tennis: 1,994 images from the Tennis Player Actions dataset, 17 body joints. Feet: 600 people from COCO-WholeBody, everyday photos. Each model sees the labelled box. Crops per second on one NVIDIA L40S GPU, 32 at a time; RF-DETR Keypoint finds the people itself, so it has no figure here.
StepModelTest setResult
detect courtTennisCourtDetector100 broadcast frames from its held-out split, 14 line crossings each95.6% of points within 7 pixels; median error 1.9 pixels
detect ballWASB100 broadcast frames from TrackNet's test games, 20 of them without a ballF1 0.886 within 4 pixels and 0.962 within 10; median error 2.1 pixels; a ball claimed on 2 of the 20 empty frames
find playerscourt position195 of the frames in Table 3, everyone on court labelledthe right players on 99.0% of frames
track peopleByteTrackone 34.5-second rally from the US Open, no labelsnear player kept in 92% of frames, far player in 98%; SAM 3's video mode kept them in 81% and 34%, and switched identities 3 to 5 times as often
Table 5. The other steps. Scene cuts and stroke detection were not scored.

After the article went out, people sent us their own matches. We ran them through the same pipeline, set them against the same 11 pros (Figure 8), and gave Claude each player's measurements with a blank context, asking what they should fix. Its answers are below, unedited.

TiafoeZverevMedvedevSheltonKyrgiosDjokovicSinnerPaulAlcarazFritzRublevPlayer APlayer BPlayer CPlayer DPlayer EPlayer FPlayer GServetoss arm straightnessTiafoe, serve toss arm straightness: +2.3 SD of a player's strokesZverev, serve toss arm straightness: -0.6 SD of a player's strokesMedvedev, serve toss arm straightness: -2.2 SD of a player's strokesShelton, serve toss arm straightness: +0.8 SD of a player's strokesKyrgios, serve toss arm straightness: +1.6 SD of a player's strokesDjokovic, serve toss arm straightness: -1.5 SD of a player's strokesSinner, serve toss arm straightness: +0.1 SD of a player's strokesPaul, serve toss arm straightness: -1.3 SD of a player's strokesAlcaraz, serve toss arm straightness: +0.5 SD of a player's strokesFritz, serve toss arm straightness: +0.7 SD of a player's strokesRublev, serve toss arm straightness: -0.8 SD of a player's strokesPlayer A, serve toss arm straightness: not measured on our phone footagePlayer B, serve toss arm straightness: not measured on our phone footagePlayer C, serve toss arm straightness: not measured on our phone footagePlayer D, serve toss arm straightness: not measured on our phone footagePlayer E, serve toss arm straightness: not measured on our phone footagePlayer F, serve toss arm straightness: not measured on our phone footagePlayer G, serve toss arm straightness: not measured on our phone footagetoss arm in over headTiafoe, serve toss arm in over head: -0.7 SD of a player's strokesZverev, serve toss arm in over head: -1.5 SD of a player's strokesMedvedev, serve toss arm in over head: +1.1 SD of a player's strokesShelton, serve toss arm in over head: -2.8 SD of a player's strokesKyrgios, serve toss arm in over head: -0.0 SD of a player's strokesDjokovic, serve toss arm in over head: -2.9 SD of a player's strokesSinner, serve toss arm in over head: +0.8 SD of a player's strokesPaul, serve toss arm in over head: -1.1 SD of a player's strokesAlcaraz, serve toss arm in over head: +0.8 SD of a player's strokesFritz, serve toss arm in over head: +3.1 SD of a player's strokesRublev, serve toss arm in over head: +1.9 SD of a player's strokesPlayer A, serve toss arm in over head: +5.4 SD of a player's strokesPlayer B, serve toss arm in over head: -0.0 SD of a player's strokesPlayer C, serve toss arm in over head: +6.5 SD of a player's strokesPlayer D, serve toss arm in over head: +0.8 SD of a player's strokesPlayer E, serve toss arm in over head: +8.4 SD of a player's strokesPlayer F, serve toss arm in over head: +4.3 SD of a player's strokesPlayer G, serve toss arm in over head: -3.2 SD of a player's strokestrophy shoulder tiltTiafoe, serve trophy shoulder tilt: -5.6 SD of a player's strokesZverev, serve trophy shoulder tilt: -2.5 SD of a player's strokesMedvedev, serve trophy shoulder tilt: -0.2 SD of a player's strokesShelton, serve trophy shoulder tilt: +0.6 SD of a player's strokesKyrgios, serve trophy shoulder tilt: -0.4 SD of a player's strokesDjokovic, serve trophy shoulder tilt: +1.1 SD of a player's strokesSinner, serve trophy shoulder tilt: -0.7 SD of a player's strokesPaul, serve trophy shoulder tilt: +1.6 SD of a player's strokesAlcaraz, serve trophy shoulder tilt: -0.4 SD of a player's strokesFritz, serve trophy shoulder tilt: +0.9 SD of a player's strokesRublev, serve trophy shoulder tilt: +1.1 SD of a player's strokesPlayer A, serve trophy shoulder tilt: not measured on our phone footagePlayer B, serve trophy shoulder tilt: not measured on our phone footagePlayer C, serve trophy shoulder tilt: not measured on our phone footagePlayer D, serve trophy shoulder tilt: not measured on our phone footagePlayer E, serve trophy shoulder tilt: not measured on our phone footagePlayer F, serve trophy shoulder tilt: not measured on our phone footagePlayer G, serve trophy shoulder tilt: not measured on our phone footagetoss-to-hit timeTiafoe, serve toss-to-hit time: +1.3 SD of a player's strokesZverev, serve toss-to-hit time: +1.0 SD of a player's strokesMedvedev, serve toss-to-hit time: -1.8 SD of a player's strokesShelton, serve toss-to-hit time: -0.8 SD of a player's strokesKyrgios, serve toss-to-hit time: -1.9 SD of a player's strokesDjokovic, serve toss-to-hit time: -0.7 SD of a player's strokesSinner, serve toss-to-hit time: -1.3 SD of a player's strokesPaul, serve toss-to-hit time: +0.3 SD of a player's strokesAlcaraz, serve toss-to-hit time: +1.1 SD of a player's strokesFritz, serve toss-to-hit time: +0.5 SD of a player's strokesRublev, serve toss-to-hit time: +0.7 SD of a player's strokesPlayer A, serve toss-to-hit time: -0.5 SD of a player's strokesPlayer B, serve toss-to-hit time: +0.4 SD of a player's strokesPlayer C, serve toss-to-hit time: -1.1 SD of a player's strokesPlayer D, serve toss-to-hit time: +0.1 SD of a player's strokesPlayer E, serve toss-to-hit time: +0.4 SD of a player's strokesPlayer F, serve toss-to-hit time: +1.3 SD of a player's strokesPlayer G, serve toss-to-hit time: -2.3 SD of a player's strokesreachTiafoe, serve reach: -0.3 SD of a player's strokesZverev, serve reach: +0.6 SD of a player's strokesMedvedev, serve reach: -1.2 SD of a player's strokesShelton, serve reach: +1.2 SD of a player's strokesKyrgios, serve reach: +0.3 SD of a player's strokesDjokovic, serve reach: -0.8 SD of a player's strokesSinner, serve reach: +0.6 SD of a player's strokesPaul, serve reach: +0.0 SD of a player's strokesAlcaraz, serve reach: -0.5 SD of a player's strokesFritz, serve reach: -0.7 SD of a player's strokesRublev, serve reach: +0.3 SD of a player's strokesPlayer A, serve reach: not measured on our phone footagePlayer B, serve reach: not measured on our phone footagePlayer C, serve reach: not measured on our phone footagePlayer D, serve reach: not measured on our phone footagePlayer E, serve reach: not measured on our phone footagePlayer F, serve reach: not measured on our phone footagePlayer G, serve reach: not measured on our phone footagetrunk leanTiafoe, serve trunk lean: -2.5 SD of a player's strokesZverev, serve trunk lean: -1.4 SD of a player's strokesMedvedev, serve trunk lean: -1.1 SD of a player's strokesShelton, serve trunk lean: +1.9 SD of a player's strokesKyrgios, serve trunk lean: +1.5 SD of a player's strokesDjokovic, serve trunk lean: -2.5 SD of a player's strokesSinner, serve trunk lean: +1.0 SD of a player's strokesPaul, serve trunk lean: -2.0 SD of a player's strokesAlcaraz, serve trunk lean: +1.9 SD of a player's strokesFritz, serve trunk lean: +0.0 SD of a player's strokesRublev, serve trunk lean: +1.5 SD of a player's strokesPlayer A, serve trunk lean: +3.1 SD of a player's strokesPlayer B, serve trunk lean: -0.1 SD of a player's strokesPlayer C, serve trunk lean: +0.1 SD of a player's strokesPlayer D, serve trunk lean: +1.7 SD of a player's strokesPlayer E, serve trunk lean: +2.4 SD of a player's strokesPlayer F, serve trunk lean: +0.0 SD of a player's strokesPlayer G, serve trunk lean: +2.3 SD of a player's strokeships to hitting sideTiafoe, serve hips to hitting side: +1.2 SD of a player's strokesZverev, serve hips to hitting side: +2.1 SD of a player's strokesMedvedev, serve hips to hitting side: +1.7 SD of a player's strokesShelton, serve hips to hitting side: +1.4 SD of a player's strokesKyrgios, serve hips to hitting side: -1.1 SD of a player's strokesDjokovic, serve hips to hitting side: -0.8 SD of a player's strokesSinner, serve hips to hitting side: +1.3 SD of a player's strokesPaul, serve hips to hitting side: -1.4 SD of a player's strokesAlcaraz, serve hips to hitting side: -0.8 SD of a player's strokesFritz, serve hips to hitting side: -0.9 SD of a player's strokesRublev, serve hips to hitting side: -0.4 SD of a player's strokesPlayer A, serve hips to hitting side: +2.3 SD of a player's strokesPlayer B, serve hips to hitting side: +4.5 SD of a player's strokesPlayer C, serve hips to hitting side: +2.6 SD of a player's strokesPlayer D, serve hips to hitting side: +1.3 SD of a player's strokesPlayer E, serve hips to hitting side: -0.1 SD of a player's strokesPlayer F, serve hips to hitting side: +1.2 SD of a player's strokesPlayer G, serve hips to hitting side: -1.7 SD of a player's strokesForehandtake-back out to sideTiafoe, forehand take-back out to side: +0.0 SD of a player's strokesZverev, forehand take-back out to side: +0.6 SD of a player's strokesMedvedev, forehand take-back out to side: -0.3 SD of a player's strokesShelton, forehand take-back out to side: -0.2 SD of a player's strokesKyrgios, forehand take-back out to side: +0.2 SD of a player's strokesDjokovic, forehand take-back out to side: -1.6 SD of a player's strokesSinner, forehand take-back out to side: +0.5 SD of a player's strokesPaul, forehand take-back out to side: +0.9 SD of a player's strokesAlcaraz, forehand take-back out to side: -0.3 SD of a player's strokesFritz, forehand take-back out to side: -1.1 SD of a player's strokesRublev, forehand take-back out to side: +0.3 SD of a player's strokesPlayer A, forehand take-back out to side: -3.3 SD of a player's strokesPlayer B, forehand take-back out to side: +1.7 SD of a player's strokesPlayer C, forehand take-back out to side: +1.7 SD of a player's strokesPlayer D, forehand take-back out to side: -4.6 SD of a player's strokesPlayer E, forehand take-back out to side: +2.0 SD of a player's strokesPlayer F, forehand take-back out to side: -2.1 SD of a player's strokesPlayer G, forehand take-back out to side: +0.2 SD of a player's strokesshoulder turnTiafoe, forehand shoulder turn: -1.2 SD of a player's strokesZverev, forehand shoulder turn: +0.2 SD of a player's strokesMedvedev, forehand shoulder turn: +0.4 SD of a player's strokesShelton, forehand shoulder turn: -0.0 SD of a player's strokesKyrgios, forehand shoulder turn: -0.2 SD of a player's strokesDjokovic, forehand shoulder turn: +0.5 SD of a player's strokesSinner, forehand shoulder turn: -0.2 SD of a player's strokesPaul, forehand shoulder turn: -1.1 SD of a player's strokesAlcaraz, forehand shoulder turn: +0.2 SD of a player's strokesFritz, forehand shoulder turn: -0.2 SD of a player's strokesRublev, forehand shoulder turn: +1.1 SD of a player's strokesPlayer A, forehand shoulder turn: -2.4 SD of a player's strokesPlayer B, forehand shoulder turn: -1.1 SD of a player's strokesPlayer C, forehand shoulder turn: -2.5 SD of a player's strokesPlayer D, forehand shoulder turn: +1.7 SD of a player's strokesPlayer E, forehand shoulder turn: -2.0 SD of a player's strokesPlayer F, forehand shoulder turn: +0.7 SD of a player's strokesPlayer G, forehand shoulder turn: -1.6 SD of a player's strokeship turnTiafoe, forehand hip turn: -0.4 SD of a player's strokesZverev, forehand hip turn: +0.1 SD of a player's strokesMedvedev, forehand hip turn: +0.2 SD of a player's strokesShelton, forehand hip turn: +0.6 SD of a player's strokesKyrgios, forehand hip turn: -0.0 SD of a player's strokesDjokovic, forehand hip turn: +0.8 SD of a player's strokesSinner, forehand hip turn: -0.5 SD of a player's strokesPaul, forehand hip turn: -0.5 SD of a player's strokesAlcaraz, forehand hip turn: +0.0 SD of a player's strokesFritz, forehand hip turn: +0.0 SD of a player's strokesRublev, forehand hip turn: -0.0 SD of a player's strokesPlayer A, forehand hip turn: not measured on our phone footagePlayer B, forehand hip turn: not measured on our phone footagePlayer C, forehand hip turn: not measured on our phone footagePlayer D, forehand hip turn: not measured on our phone footagePlayer E, forehand hip turn: not measured on our phone footagePlayer F, forehand hip turn: not measured on our phone footagePlayer G, forehand hip turn: not measured on our phone footageswing timeTiafoe, forehand swing time: -0.7 SD of a player's strokesZverev, forehand swing time: -0.4 SD of a player's strokesMedvedev, forehand swing time: +1.1 SD of a player's strokesShelton, forehand swing time: +0.4 SD of a player's strokesKyrgios, forehand swing time: -0.3 SD of a player's strokesDjokovic, forehand swing time: +0.7 SD of a player's strokesSinner, forehand swing time: +0.6 SD of a player's strokesPaul, forehand swing time: -0.6 SD of a player's strokesAlcaraz, forehand swing time: -0.1 SD of a player's strokesFritz, forehand swing time: +0.9 SD of a player's strokesRublev, forehand swing time: -0.3 SD of a player's strokesPlayer A, forehand swing time: +3.0 SD of a player's strokesPlayer B, forehand swing time: +1.0 SD of a player's strokesPlayer C, forehand swing time: +3.5 SD of a player's strokesPlayer D, forehand swing time: +2.0 SD of a player's strokesPlayer E, forehand swing time: +2.0 SD of a player's strokesPlayer F, forehand swing time: +3.0 SD of a player's strokesPlayer G, forehand swing time: +1.5 SD of a player's strokesstance angleTiafoe, forehand stance angle: +0.1 SD of a player's strokesZverev, forehand stance angle: +0.6 SD of a player's strokesMedvedev, forehand stance angle: +0.2 SD of a player's strokesShelton, forehand stance angle: -0.2 SD of a player's strokesKyrgios, forehand stance angle: +0.1 SD of a player's strokesDjokovic, forehand stance angle: -0.6 SD of a player's strokesSinner, forehand stance angle: +0.1 SD of a player's strokesPaul, forehand stance angle: -0.2 SD of a player's strokesAlcaraz, forehand stance angle: -0.5 SD of a player's strokesFritz, forehand stance angle: +0.3 SD of a player's strokesRublev, forehand stance angle: -0.2 SD of a player's strokesPlayer A, forehand stance angle: -0.4 SD of a player's strokesPlayer B, forehand stance angle: -1.6 SD of a player's strokesPlayer C, forehand stance angle: -0.2 SD of a player's strokesPlayer D, forehand stance angle: +0.0 SD of a player's strokesPlayer E, forehand stance angle: +1.3 SD of a player's strokesPlayer F, forehand stance angle: -1.5 SD of a player's strokesPlayer G, forehand stance angle: -0.2 SD of a player's strokescontact heightTiafoe, forehand contact height: -0.6 SD of a player's strokesZverev, forehand contact height: -0.3 SD of a player's strokesMedvedev, forehand contact height: -1.1 SD of a player's strokesShelton, forehand contact height: -0.5 SD of a player's strokesKyrgios, forehand contact height: -0.5 SD of a player's strokesDjokovic, forehand contact height: +0.4 SD of a player's strokesSinner, forehand contact height: +0.9 SD of a player's strokesPaul, forehand contact height: +0.4 SD of a player's strokesAlcaraz, forehand contact height: +0.5 SD of a player's strokesFritz, forehand contact height: -0.1 SD of a player's strokesRublev, forehand contact height: +0.7 SD of a player's strokesPlayer A, forehand contact height: not measured on our phone footagePlayer B, forehand contact height: not measured on our phone footagePlayer C, forehand contact height: not measured on our phone footagePlayer D, forehand contact height: not measured on our phone footagePlayer E, forehand contact height: not measured on our phone footagePlayer F, forehand contact height: not measured on our phone footagePlayer G, forehand contact height: not measured on our phone footagecontact out to sideTiafoe, forehand contact out to side: -0.1 SD of a player's strokesZverev, forehand contact out to side: +0.3 SD of a player's strokesMedvedev, forehand contact out to side: -0.1 SD of a player's strokesShelton, forehand contact out to side: +0.5 SD of a player's strokesKyrgios, forehand contact out to side: -0.4 SD of a player's strokesDjokovic, forehand contact out to side: +0.6 SD of a player's strokesSinner, forehand contact out to side: +0.1 SD of a player's strokesPaul, forehand contact out to side: -1.7 SD of a player's strokesAlcaraz, forehand contact out to side: +0.6 SD of a player's strokesFritz, forehand contact out to side: -0.1 SD of a player's strokesRublev, forehand contact out to side: -0.3 SD of a player's strokesPlayer A, forehand contact out to side: +1.0 SD of a player's strokesPlayer B, forehand contact out to side: +1.4 SD of a player's strokesPlayer C, forehand contact out to side: -0.8 SD of a player's strokesPlayer D, forehand contact out to side: +1.1 SD of a player's strokesPlayer E, forehand contact out to side: +0.2 SD of a player's strokesPlayer F, forehand contact out to side: +1.0 SD of a player's strokesPlayer G, forehand contact out to side: +0.5 SD of a player's strokesshoulders openTiafoe, forehand shoulders open: -1.3 SD of a player's strokesZverev, forehand shoulders open: +0.3 SD of a player's strokesMedvedev, forehand shoulders open: -1.1 SD of a player's strokesShelton, forehand shoulders open: -0.6 SD of a player's strokesKyrgios, forehand shoulders open: -0.6 SD of a player's strokesDjokovic, forehand shoulders open: +0.2 SD of a player's strokesSinner, forehand shoulders open: +0.4 SD of a player's strokesPaul, forehand shoulders open: +1.0 SD of a player's strokesAlcaraz, forehand shoulders open: +0.5 SD of a player's strokesFritz, forehand shoulders open: -0.5 SD of a player's strokesRublev, forehand shoulders open: +0.5 SD of a player's strokesPlayer A, forehand shoulders open: +0.1 SD of a player's strokesPlayer B, forehand shoulders open: -2.4 SD of a player's strokesPlayer C, forehand shoulders open: -0.5 SD of a player's strokesPlayer D, forehand shoulders open: +0.5 SD of a player's strokesPlayer E, forehand shoulders open: -0.0 SD of a player's strokesPlayer F, forehand shoulders open: +0.1 SD of a player's strokesPlayer G, forehand shoulders open: -0.2 SD of a player's strokeshead movementTiafoe, forehand head movement: -0.2 SD of a player's strokesZverev, forehand head movement: -0.2 SD of a player's strokesMedvedev, forehand head movement: +0.1 SD of a player's strokesShelton, forehand head movement: +1.4 SD of a player's strokesKyrgios, forehand head movement: +0.3 SD of a player's strokesDjokovic, forehand head movement: -0.7 SD of a player's strokesSinner, forehand head movement: +1.6 SD of a player's strokesPaul, forehand head movement: +1.1 SD of a player's strokesAlcaraz, forehand head movement: -0.7 SD of a player's strokesFritz, forehand head movement: -0.2 SD of a player's strokesRublev, forehand head movement: +0.1 SD of a player's strokesPlayer A, forehand head movement: +1.2 SD of a player's strokesPlayer B, forehand head movement: -1.4 SD of a player's strokesPlayer C, forehand head movement: -1.1 SD of a player's strokesPlayer D, forehand head movement: -0.3 SD of a player's strokesPlayer E, forehand head movement: -0.1 SD of a player's strokesPlayer F, forehand head movement: -0.5 SD of a player's strokesPlayer G, forehand head movement: +0.6 SD of a player's strokesfinish arm heightTiafoe, forehand finish arm height: -0.2 SD of a player's strokesZverev, forehand finish arm height: +0.1 SD of a player's strokesMedvedev, forehand finish arm height: +0.6 SD of a player's strokesShelton, forehand finish arm height: +1.9 SD of a player's strokesKyrgios, forehand finish arm height: -0.1 SD of a player's strokesDjokovic, forehand finish arm height: +0.0 SD of a player's strokesSinner, forehand finish arm height: -0.3 SD of a player's strokesPaul, forehand finish arm height: -0.8 SD of a player's strokesAlcaraz, forehand finish arm height: +1.2 SD of a player's strokesFritz, forehand finish arm height: +0.4 SD of a player's strokesRublev, forehand finish arm height: -0.7 SD of a player's strokesPlayer A, forehand finish arm height: +0.9 SD of a player's strokesPlayer B, forehand finish arm height: +0.6 SD of a player's strokesPlayer C, forehand finish arm height: +0.4 SD of a player's strokesPlayer D, forehand finish arm height: -0.1 SD of a player's strokesPlayer E, forehand finish arm height: +0.2 SD of a player's strokesPlayer F, forehand finish arm height: +0.4 SD of a player's strokesPlayer G, forehand finish arm height: +0.2 SD of a player's strokesfinish out to sideTiafoe, forehand finish out to side: -0.1 SD of a player's strokesZverev, forehand finish out to side: -0.0 SD of a player's strokesMedvedev, forehand finish out to side: +0.6 SD of a player's strokesShelton, forehand finish out to side: +0.8 SD of a player's strokesKyrgios, forehand finish out to side: +0.2 SD of a player's strokesDjokovic, forehand finish out to side: -0.3 SD of a player's strokesSinner, forehand finish out to side: -0.8 SD of a player's strokesPaul, forehand finish out to side: -0.7 SD of a player's strokesAlcaraz, forehand finish out to side: +0.2 SD of a player's strokesFritz, forehand finish out to side: +0.2 SD of a player's strokesRublev, forehand finish out to side: -1.0 SD of a player's strokesPlayer A, forehand finish out to side: -0.0 SD of a player's strokesPlayer B, forehand finish out to side: +0.1 SD of a player's strokesPlayer C, forehand finish out to side: -0.4 SD of a player's strokesPlayer D, forehand finish out to side: -1.7 SD of a player's strokesPlayer E, forehand finish out to side: -1.8 SD of a player's strokesPlayer F, forehand finish out to side: -0.8 SD of a player's strokesPlayer G, forehand finish out to side: -0.7 SD of a player's strokesshoulders open at finishTiafoe, forehand shoulders open at finish: -0.2 SD of a player's strokesZverev, forehand shoulders open at finish: +0.1 SD of a player's strokesMedvedev, forehand shoulders open at finish: -0.7 SD of a player's strokesShelton, forehand shoulders open at finish: -0.2 SD of a player's strokesKyrgios, forehand shoulders open at finish: -0.3 SD of a player's strokesDjokovic, forehand shoulders open at finish: +0.8 SD of a player's strokesSinner, forehand shoulders open at finish: +0.3 SD of a player's strokesPaul, forehand shoulders open at finish: +1.1 SD of a player's strokesAlcaraz, forehand shoulders open at finish: +0.0 SD of a player's strokesFritz, forehand shoulders open at finish: -0.4 SD of a player's strokesRublev, forehand shoulders open at finish: +0.5 SD of a player's strokesPlayer A, forehand shoulders open at finish: -1.1 SD of a player's strokesPlayer B, forehand shoulders open at finish: -1.5 SD of a player's strokesPlayer C, forehand shoulders open at finish: -1.3 SD of a player's strokesPlayer D, forehand shoulders open at finish: +0.0 SD of a player's strokesPlayer E, forehand shoulders open at finish: +0.1 SD of a player's strokesPlayer F, forehand shoulders open at finish: +0.1 SD of a player's strokesPlayer G, forehand shoulders open at finish: +0.4 SD of a player's strokesBackhandtake-back out to sideTiafoe, backhand take-back out to side: +0.6 SD of a player's strokesZverev, backhand take-back out to side: +0.5 SD of a player's strokesMedvedev, backhand take-back out to side: -0.8 SD of a player's strokesShelton, backhand take-back out to side: -1.0 SD of a player's strokesKyrgios, backhand take-back out to side: -0.4 SD of a player's strokesDjokovic, backhand take-back out to side: +0.3 SD of a player's strokesSinner, backhand take-back out to side: +0.6 SD of a player's strokesPaul, backhand take-back out to side: +0.6 SD of a player's strokesAlcaraz, backhand take-back out to side: +0.1 SD of a player's strokesFritz, backhand take-back out to side: -0.4 SD of a player's strokesRublev, backhand take-back out to side: -0.6 SD of a player's strokesPlayer A, backhand take-back out to side: -1.0 SD of a player's strokesPlayer B, backhand take-back out to side: +1.3 SD of a player's strokesPlayer C, backhand take-back out to side: +0.8 SD of a player's strokesPlayer D, backhand take-back out to side: -0.2 SD of a player's strokesPlayer E, backhand take-back out to side: +0.8 SD of a player's strokesPlayer F, backhand take-back out to side: +1.4 SD of a player's strokesPlayer G, backhand take-back out to side: +1.1 SD of a player's strokesshoulder turnTiafoe, backhand shoulder turn: -0.5 SD of a player's strokesZverev, backhand shoulder turn: +1.0 SD of a player's strokesMedvedev, backhand shoulder turn: +0.4 SD of a player's strokesShelton, backhand shoulder turn: +1.9 SD of a player's strokesKyrgios, backhand shoulder turn: -1.3 SD of a player's strokesDjokovic, backhand shoulder turn: -0.6 SD of a player's strokesSinner, backhand shoulder turn: -0.5 SD of a player's strokesPaul, backhand shoulder turn: -0.4 SD of a player's strokesAlcaraz, backhand shoulder turn: +0.7 SD of a player's strokesFritz, backhand shoulder turn: +0.4 SD of a player's strokesRublev, backhand shoulder turn: -0.0 SD of a player's strokesPlayer A, backhand shoulder turn: -1.2 SD of a player's strokesPlayer B, backhand shoulder turn: +0.6 SD of a player's strokesPlayer C, backhand shoulder turn: -2.1 SD of a player's strokesPlayer D, backhand shoulder turn: +1.6 SD of a player's strokesPlayer E, backhand shoulder turn: -1.9 SD of a player's strokesPlayer F, backhand shoulder turn: +1.0 SD of a player's strokesPlayer G, backhand shoulder turn: -2.3 SD of a player's strokeship turnTiafoe, backhand hip turn: -0.4 SD of a player's strokesZverev, backhand hip turn: +0.1 SD of a player's strokesMedvedev, backhand hip turn: -0.2 SD of a player's strokesShelton, backhand hip turn: -0.2 SD of a player's strokesKyrgios, backhand hip turn: -1.1 SD of a player's strokesDjokovic, backhand hip turn: +0.4 SD of a player's strokesSinner, backhand hip turn: -0.6 SD of a player's strokesPaul, backhand hip turn: +0.5 SD of a player's strokesAlcaraz, backhand hip turn: +0.5 SD of a player's strokesFritz, backhand hip turn: +0.3 SD of a player's strokesRublev, backhand hip turn: +0.1 SD of a player's strokesPlayer A, backhand hip turn: not measured on our phone footagePlayer B, backhand hip turn: not measured on our phone footagePlayer C, backhand hip turn: not measured on our phone footagePlayer D, backhand hip turn: not measured on our phone footagePlayer E, backhand hip turn: not measured on our phone footagePlayer F, backhand hip turn: not measured on our phone footagePlayer G, backhand hip turn: not measured on our phone footageswing timeTiafoe, backhand swing time: -0.5 SD of a player's strokesZverev, backhand swing time: -0.9 SD of a player's strokesMedvedev, backhand swing time: -1.0 SD of a player's strokesShelton, backhand swing time: -0.5 SD of a player's strokesKyrgios, backhand swing time: -0.4 SD of a player's strokesDjokovic, backhand swing time: +0.3 SD of a player's strokesSinner, backhand swing time: +0.5 SD of a player's strokesPaul, backhand swing time: +0.3 SD of a player's strokesAlcaraz, backhand swing time: +0.2 SD of a player's strokesFritz, backhand swing time: +0.2 SD of a player's strokesRublev, backhand swing time: +1.0 SD of a player's strokesPlayer A, backhand swing time: +1.2 SD of a player's strokesPlayer B, backhand swing time: +0.1 SD of a player's strokesPlayer C, backhand swing time: +1.5 SD of a player's strokesPlayer D, backhand swing time: +1.8 SD of a player's strokesPlayer E, backhand swing time: +1.8 SD of a player's strokesPlayer F, backhand swing time: +2.4 SD of a player's strokesPlayer G, backhand swing time: +1.8 SD of a player's strokesstance angleTiafoe, backhand stance angle: +0.4 SD of a player's strokesZverev, backhand stance angle: +0.2 SD of a player's strokesMedvedev, backhand stance angle: +0.2 SD of a player's strokesShelton, backhand stance angle: +0.8 SD of a player's strokesKyrgios, backhand stance angle: +0.4 SD of a player's strokesDjokovic, backhand stance angle: -0.2 SD of a player's strokesSinner, backhand stance angle: -0.1 SD of a player's strokesPaul, backhand stance angle: -0.4 SD of a player's strokesAlcaraz, backhand stance angle: -0.3 SD of a player's strokesFritz, backhand stance angle: -0.2 SD of a player's strokesRublev, backhand stance angle: -0.1 SD of a player's strokesPlayer A, backhand stance angle: +0.8 SD of a player's strokesPlayer B, backhand stance angle: +1.1 SD of a player's strokesPlayer C, backhand stance angle: +0.8 SD of a player's strokesPlayer D, backhand stance angle: -0.2 SD of a player's strokesPlayer E, backhand stance angle: +2.8 SD of a player's strokesPlayer F, backhand stance angle: -0.7 SD of a player's strokesPlayer G, backhand stance angle: +2.0 SD of a player's strokescontact heightTiafoe, backhand contact height: -0.5 SD of a player's strokesZverev, backhand contact height: -0.6 SD of a player's strokesMedvedev, backhand contact height: -0.8 SD of a player's strokesShelton, backhand contact height: +0.0 SD of a player's strokesKyrgios, backhand contact height: -1.3 SD of a player's strokesDjokovic, backhand contact height: +0.5 SD of a player's strokesSinner, backhand contact height: +1.3 SD of a player's strokesPaul, backhand contact height: +0.6 SD of a player's strokesAlcaraz, backhand contact height: +1.5 SD of a player's strokesFritz, backhand contact height: -0.5 SD of a player's strokesRublev, backhand contact height: +1.0 SD of a player's strokesPlayer A, backhand contact height: not measured on our phone footagePlayer B, backhand contact height: not measured on our phone footagePlayer C, backhand contact height: not measured on our phone footagePlayer D, backhand contact height: not measured on our phone footagePlayer E, backhand contact height: not measured on our phone footagePlayer F, backhand contact height: not measured on our phone footagePlayer G, backhand contact height: not measured on our phone footagecontact out to sideTiafoe, backhand contact out to side: +0.7 SD of a player's strokesZverev, backhand contact out to side: +0.5 SD of a player's strokesMedvedev, backhand contact out to side: +1.0 SD of a player's strokesShelton, backhand contact out to side: -0.6 SD of a player's strokesKyrgios, backhand contact out to side: -0.5 SD of a player's strokesDjokovic, backhand contact out to side: +0.1 SD of a player's strokesSinner, backhand contact out to side: -0.4 SD of a player's strokesPaul, backhand contact out to side: -0.1 SD of a player's strokesAlcaraz, backhand contact out to side: -0.0 SD of a player's strokesFritz, backhand contact out to side: +0.4 SD of a player's strokesRublev, backhand contact out to side: -0.3 SD of a player's strokesPlayer A, backhand contact out to side: +0.2 SD of a player's strokesPlayer B, backhand contact out to side: +2.8 SD of a player's strokesPlayer C, backhand contact out to side: +0.0 SD of a player's strokesPlayer D, backhand contact out to side: +0.9 SD of a player's strokesPlayer E, backhand contact out to side: +0.3 SD of a player's strokesPlayer F, backhand contact out to side: +0.3 SD of a player's strokesPlayer G, backhand contact out to side: +1.1 SD of a player's strokesshoulders openTiafoe, backhand shoulders open: +0.2 SD of a player's strokesZverev, backhand shoulders open: -0.2 SD of a player's strokesMedvedev, backhand shoulders open: -0.4 SD of a player's strokesShelton, backhand shoulders open: -0.1 SD of a player's strokesKyrgios, backhand shoulders open: +0.3 SD of a player's strokesDjokovic, backhand shoulders open: -0.1 SD of a player's strokesSinner, backhand shoulders open: +0.1 SD of a player's strokesPaul, backhand shoulders open: +0.4 SD of a player's strokesAlcaraz, backhand shoulders open: -0.0 SD of a player's strokesFritz, backhand shoulders open: -0.4 SD of a player's strokesRublev, backhand shoulders open: +0.2 SD of a player's strokesPlayer A, backhand shoulders open: -0.0 SD of a player's strokesPlayer B, backhand shoulders open: -1.2 SD of a player's strokesPlayer C, backhand shoulders open: +1.2 SD of a player's strokesPlayer D, backhand shoulders open: +0.3 SD of a player's strokesPlayer E, backhand shoulders open: +2.5 SD of a player's strokesPlayer F, backhand shoulders open: +0.5 SD of a player's strokesPlayer G, backhand shoulders open: +3.0 SD of a player's strokeshead movementTiafoe, backhand head movement: +0.3 SD of a player's strokesZverev, backhand head movement: -0.4 SD of a player's strokesMedvedev, backhand head movement: -0.5 SD of a player's strokesShelton, backhand head movement: +0.6 SD of a player's strokesKyrgios, backhand head movement: +0.3 SD of a player's strokesDjokovic, backhand head movement: -0.7 SD of a player's strokesSinner, backhand head movement: +1.2 SD of a player's strokesPaul, backhand head movement: +0.7 SD of a player's strokesAlcaraz, backhand head movement: -0.9 SD of a player's strokesFritz, backhand head movement: -0.4 SD of a player's strokesRublev, backhand head movement: +0.2 SD of a player's strokesPlayer A, backhand head movement: +1.5 SD of a player's strokesPlayer B, backhand head movement: -0.8 SD of a player's strokesPlayer C, backhand head movement: +0.6 SD of a player's strokesPlayer D, backhand head movement: -0.3 SD of a player's strokesPlayer E, backhand head movement: +0.4 SD of a player's strokesPlayer F, backhand head movement: -0.6 SD of a player's strokesPlayer G, backhand head movement: +0.4 SD of a player's strokesfinish arm heightTiafoe, backhand finish arm height: -0.2 SD of a player's strokesZverev, backhand finish arm height: -0.4 SD of a player's strokesMedvedev, backhand finish arm height: +1.3 SD of a player's strokesShelton, backhand finish arm height: +1.4 SD of a player's strokesKyrgios, backhand finish arm height: -0.2 SD of a player's strokesDjokovic, backhand finish arm height: -0.7 SD of a player's strokesSinner, backhand finish arm height: +0.5 SD of a player's strokesPaul, backhand finish arm height: -0.4 SD of a player's strokesAlcaraz, backhand finish arm height: +0.6 SD of a player's strokesFritz, backhand finish arm height: +0.7 SD of a player's strokesRublev, backhand finish arm height: -0.3 SD of a player's strokesPlayer A, backhand finish arm height: +3.2 SD of a player's strokesPlayer B, backhand finish arm height: +5.5 SD of a player's strokesPlayer C, backhand finish arm height: -1.2 SD of a player's strokesPlayer D, backhand finish arm height: +1.2 SD of a player's strokesPlayer E, backhand finish arm height: +1.8 SD of a player's strokesPlayer F, backhand finish arm height: +2.1 SD of a player's strokesPlayer G, backhand finish arm height: +0.3 SD of a player's strokesfinish out to sideTiafoe, backhand finish out to side: -0.8 SD of a player's strokesZverev, backhand finish out to side: -0.3 SD of a player's strokesMedvedev, backhand finish out to side: +1.8 SD of a player's strokesShelton, backhand finish out to side: +0.1 SD of a player's strokesKyrgios, backhand finish out to side: -0.9 SD of a player's strokesDjokovic, backhand finish out to side: +0.1 SD of a player's strokesSinner, backhand finish out to side: -0.2 SD of a player's strokesPaul, backhand finish out to side: -0.6 SD of a player's strokesAlcaraz, backhand finish out to side: +0.8 SD of a player's strokesFritz, backhand finish out to side: +0.3 SD of a player's strokesRublev, backhand finish out to side: +0.2 SD of a player's strokesPlayer A, backhand finish out to side: +0.6 SD of a player's strokesPlayer B, backhand finish out to side: +2.2 SD of a player's strokesPlayer C, backhand finish out to side: -0.7 SD of a player's strokesPlayer D, backhand finish out to side: +0.8 SD of a player's strokesPlayer E, backhand finish out to side: +1.8 SD of a player's strokesPlayer F, backhand finish out to side: -0.1 SD of a player's strokesPlayer G, backhand finish out to side: -0.1 SD of a player's strokesshoulders open at finishTiafoe, backhand shoulders open at finish: +0.4 SD of a player's strokesZverev, backhand shoulders open at finish: -1.5 SD of a player's strokesMedvedev, backhand shoulders open at finish: -0.8 SD of a player's strokesShelton, backhand shoulders open at finish: -0.7 SD of a player's strokesKyrgios, backhand shoulders open at finish: +0.2 SD of a player's strokesDjokovic, backhand shoulders open at finish: -0.1 SD of a player's strokesSinner, backhand shoulders open at finish: -0.1 SD of a player's strokesPaul, backhand shoulders open at finish: +0.6 SD of a player's strokesAlcaraz, backhand shoulders open at finish: +0.8 SD of a player's strokesFritz, backhand shoulders open at finish: -1.0 SD of a player's strokesRublev, backhand shoulders open at finish: +0.2 SD of a player's strokesPlayer A, backhand shoulders open at finish: +0.3 SD of a player's strokesPlayer B, backhand shoulders open at finish: -0.4 SD of a player's strokesPlayer C, backhand shoulders open at finish: +0.1 SD of a player's strokesPlayer D, backhand shoulders open at finish: -0.1 SD of a player's strokesPlayer E, backhand shoulders open at finish: +0.7 SD of a player's strokesPlayer F, backhand shoulders open at finish: +0.2 SD of a player's strokesPlayer G, backhand shoulders open at finish: +0.6 SD of a player's strokesProsAmateurs≤ −1.5−1−0.50+0.5+1≥ +1.5z scorenot measured on our phone footage

Figure 8. Stroke fingerprints of the 11 ATP pros and 7 players who sent us their matches. Each column is a player; each row is a stroke trait. Color is a z score of the player's median minus the pros' median. Point at or click a square to see, on the left, that player's typical stroke. Clicking "Compare with" swaps the average for one player.
Claude's advice for

Serve

Toss it up, not over your head

Your tossing arm swings in over your head, so the ball drifts to your far side. You then have to bend sideways to reach it, and that bend costs you height and power.

  • Your tossing arm ends well across your head; the pros' arm goes nearly straight up.
  • At contact you lean sideways a lot more than the pros do, and your hips slide toward your hitting side to make room.

FixToss without hitting the ball. Let the arm go straight up and stop pointing at the sky. The ball should land just in front of your hitting shoulder. Once it lands there most of the time, add the swing back in.

Forehand

Turn first, then swing short and fast

You don't turn your shoulders much, and your racket goes back behind you instead of out to the side. From there the forward swing has a long way to go, so it's slow to reach the ball.

  • You turn about two-thirds as far as the pros before swinging forward.
  • Your forward swing takes about twice as long as theirs, roughly 0.4 of a second against under 0.2.

FixAs soon as you read a forehand, turn so your back faces the side fence and your racket sits out to the side, away from your body. Pause there for a beat in feeding drills. Then make the forward swing feel short and quick.

Backhand

Swing through, finish over your shoulder

Your backhand already has a good contact point, and your shoulders are right where they should be when you hit. The difference is the finish. You pull the racket straight up instead of out and across, and your head moves a lot through the hit.

  • Your hitting arm finishes pointing almost straight up; the pros' arm wraps across to shoulder height.
  • Your head moves almost twice as much as theirs around contact.

FixFinish with your hands over your opposite shoulder and the racket wrapped behind you. Hold that finish for a count of two while your eyes stay on the spot where you hit the ball.

In order

Work on the forehand turn first. It's the biggest gap in your game, it slows down every forehand you hit, and you can feel the change in your very first session.

References

  1. Gallwey, W. T. The Inner Game of Tennis. Random House (1974).
  2. Gilbert, B. & Jamison, S. Winning Ugly: Mental Warfare in Tennis. Birch Lane Press (1993).
  3. Castellano, B. PySceneDetect: video cut detection and analysis tool. GitHub (2014).
  4. Kosolapov, S. TennisCourtDetector: deep learning network for detecting tennis court. GitHub (2023).
  5. Liu, Z. et al. F3Set: towards analyzing fast, frequent, and fine-grained events from videos. ICLR (2025).
  6. Robinson, I., Robicheaux, P., Popov, M., Ramanan, D. & Peri, N. RF-DETR: neural architecture search for real-time detection transformers. ICLR (2026).
  7. Tarashima, S., Haq, M. A., Wang, Y. & Tagawa, N. Widely applicable strong baseline for sports ball detection and tracking. BMVC (2023).
  8. Jiang, T., Xie, X. & Li, Y. RTMW: real-time multi-person 2D and 3D whole-body pose estimation. arXiv:2407.08634 (2024).
  9. Zhang, Y. et al. ByteTrack: multi-object tracking by associating every detection box. ECCV (2022).

Cite this

Wang, P. & Christie, N. Claude as a Tennis Coach. off policy (2026). https://offpolicyinc.com/work/claude-tennis-coach/

@misc{wang2026claude,
  author = {Wang, Peter and Christie, Nico},
  title = {Claude as a Tennis Coach},
  year = {2026},
  howpublished = {off policy},
  url = {https://offpolicyinc.com/work/claude-tennis-coach/}
}