In depth

Turning a Broadcast into a Play-by-Play: Exploring the SoccerNet 2026 Winning Solution

Cristian Gonzalez September 22, 2026

Building on an earlier blog, where we reconstructed a football match in 3D for the Novel View Synthesis challenge, we continue exploring SoccerNet 2026 with another of its challenges: Player-Centric Ball Action Spotting.

The Player-Centric Ball Action Spotting challenge takes a normal broadcast and asks, when something happens to the ball, what was the action, when did it happen, and which player did it?

The winning solution, PAVE, builds on the challenge's baseline and teaches it to read each action using information about the players around it. In this blog we explore how it works, where it succeeds, where it still struggles, and how close it brings us to a play-by-play produced straight from the broadcast.

From a broadcast to a match that can be measured

To learn what happened and who did it, a model needs matches where the answers are already known: every player followed through the broadcast, and every touch of the ball tied to the player who made it.

The FOOTPASS dataset provides that for 54 full matches from the 2023/24 season of Ligue 1, the Bundesliga, Serie A, La Liga and the Champions League. The players are detected and tracked with computer vision models, identified by team and shirt number, and placed on the pitch from the camera's position. The ball actions, more than 100,000 of them, were then labelled by hand by a team of professional annotators.

A broadcast frame from Real Madrid against Napoli with a box around every tracked player, each labelled with shirt number and role, and one player marked as making a pass.
A frame from the dataset with its annotations: each tracked player with their shirt number and role, and the action labelled for the player on the ball.

So every match the model learns from comes in two parts: the broadcast footage, and a structured description of what happens in it.

What counts as an action?

The challenge considers eight types of ball action, each marked as a single moment in the video:

Drive: receiving the ball and carrying it.

Pass: playing the ball towards a teammate.

Cross: playing the ball from a wide area towards the penalty area.

Shot: an attempt on goal.

Header: intentionally playing the ball with the head.

Throw-in: putting the ball back into play from the sideline.

Tackle: taking the ball from an opponent.

Block: stopping an opponent's pass or shot.

Their distribution in the dataset is very uneven, ranging from more than 50,000 passes to only around 300 tackles.

Bar chart of how often each action appears: pass 49.9 percent, drive 39, header 4, cross 2.3, throw-in 1.9, block 1.4, shot 1.2, tackle 0.3.
How often each action appears in the dataset, with approximate counts. Passes and drives together account for almost nine out of every ten annotated events.

That imbalance is one of the central difficulties of the task: a model can be very good at the actions that happen constantly and still miss most of the rare ones.

The winning solution: PAVE

PAVE was created by Faisal Altawijri and Ismail Mathkour, and works in two stages, like the pipeline provided with the challenge.

The first stage, the Track-Aware Action Detector or TAAD, goes player by player: for each one it takes a short sequence of frames and estimates how likely each of the eight actions is at each moment. PAVE lets it look at the whole sequence of frames together, instead of judging each moment almost on its own.

The same six crops of a player around a cross, shown twice. In the baseline row a bracket under the moments covers only the ones next to the cross; in the PAVE row it covers all six, and its bar for Cross is longer.
The baseline scores each moment from the frames around it, while PAVE lets each moment draw on the whole clip, which makes it more confident about the right action.

On its own, scoring each player separately produces many false alarms, and it ignores how actions are connected, like a cross from one player that is met by a header from another.

So the scores go to a second stage, the Denoising Sequence Transduction model or DST, which combines those scores with the location of each player and how they are moving, and turns them into a clean sequence of actions. In this stage, PAVE introduces its most important change.

In the baseline, the second stage takes in all the players together at each moment and follows the play through time. PAVE adds an attention step before that, a technique that lets each player weigh how much every other player matters, based on where they are and how they are moving. Only then is each player followed through time. This gives the model a picture of the play at every moment: who is close to whom, where the opponents are, and how everyone is arranged around the ball.

Two rows. Baseline: a small pitch with players as dots, taken in as one block and followed as a single track through time. PAVE: one player linked to every other player, thicker lines for closer players, then one track per player through time.
The baseline follows all the players as a single block, while PAVE first lets each player weigh the others, then follows each one separately.

PAVE also trains four different models for this second stage, each built slightly differently, and runs all of them on the same match. An action is kept only when at least two of the four models predict it. Tackles are the exception: they are so rare that PAVE keeps them even when only one model finds them.

The whole pipeline can be seen below on one real moment of a match, from the broadcast to the final play-by-play.

The pipeline on one real moment in two rows: the broadcast frame with player boxes and per-player crops with action scores on top, then an arrow carrying each player's scores into the pitch maps of the second stage, four models and the resulting play-by-play list.
One moment of a match on its way to becoming a play-by-play record. Each player is scored on their own crop, the second stage adds where everyone is and how they are moving, and at least two of the four models have to agree before an action is kept.

How good is it?

The challenge scores predictions with Macro F1, where a prediction only counts as correct when the action, the moment and the player all match the annotation. The score balances how many predictions were correct against how many of the real actions were found, and averages this over the eight actions so rare ones count as much as common ones, with higher being better.

PAVE reached 58.94 on the challenge set, a group of matches whose annotations are not made public, against 46.41 for the baseline that came with it. The largest share comes from letting the players look at each other, with the improved first stage and the combination of the four models adding the rest.

Bar chart of the final leaderboard, Macro F1 on the challenge set: PAVE 58.94, AISATSANZ 56.40, TeamKIST 55.69, UniBW Munich VIS 50.35, challenge baseline 46.41, WRF32010 46.06, Sarthi-GameChanger 44.63.
The final leaderboard of the challenge, with every team scored on the same hidden matches and the baseline that came with the challenge shown in dark.

Watching the model follow a match

To see what those numbers look like on real footage, we trained PAVE ourselves and overlaid its predictions on matches it was not trained on.

Predictions on matches the model never saw during training. Each label names the action and the player it was assigned to.

The model follows a large part of the game well: passes and drives appear at roughly the right moments and on the right players, and whole sequences often come out right, like a pass that is carried down the wing, crossed and turned into a shot.

A pass, a run down the wing, a cross and a shot, each credited to the right player.

It still makes mistakes, as in this tackle in the middle of the pitch, where it finds the right moment and the right player but reads the action as a drive.

A frame where a defender takes the ball from an opponent while the overlay labels the moment as a drive.
A tackle read as a drive: the moment and the player are right, the action is not.

Which actions are the hardest?

The per-action scores show a clear gap between common and rare events. Passes, drives and throw-ins are found reliably, crosses and shots reasonably well, headers and blocks less so, and tackles rarely.

Bar chart of F1 per action for the winning solution: pass 84.0, drive 83.9, throw-in 82.8, cross 76.4, shot 67.7, header 45.0, block 35.4, tackle 12.3.
The winning solution's published F1 score for each action on the validation matches, the per-action scores that Macro F1 averages.

Training data is part of it, since there are far more passes than tackles to learn from. But some actions are also ambiguous in a broadcast: two players can arrive at the ball together, a block can happen in a crowded penalty area, and a header is hard to see when the ball is small or hidden.

One of the rare tackles the model does find, with two players arriving at the ball together.

A first draft of the play-by-play

According to the FOOTPASS authors, play-by-play data is still largely annotated by hand, by trained operators who go through the footage to label each action. In a single edition of the challenge, the winning solution raised the score from 46.41 to 58.94, and on the most common actions, passes, drives and throw-ins, it scores above 80.

The same authors note that models like this are typically used to assist annotation rather than to automate it fully, and they chose the challenge's scoring with that use in mind: removing a wrong suggestion is faster than searching the video for an action that was missed.

These methods also rely on knowing where every player is, which team they play for and which shirt number they wear before they can say who did what. Finding and following the players, reading their numbers and placing them on the pitch are research areas of their own, with their own datasets, so a reliable play-by-play also depends on progress there. As both sides improve, the models that read the actions and the tracking they build on, a play-by-play produced straight from the broadcast gets closer, with people checking it rather than writing it from scratch.

Related posts