Official Timing, Part 2: The Director's Cut

October 12, 2026 09:24pm

GTR2 replays get a TV director: a planner that reads the whole race in advance, a companion that clicks an invisible list inside the game, and a 30-car race at Spa broadcast without touching a camera.

The first part of this story ended with my GTR2 replays finally wearing 1990s TV graphics: timing banners, driver captions, a starting grid, the classification. It looked like television. It did not feel like television yet, because there was still one job nobody was doing: choosing what to show.

GTR2's replay camera follows one car at a time. With 30 cars on track, someone has to decide whose car that is, second by second, and until now that someone was me, with the replay controls in one hand and the overlay remote in the other. I spent more time switching cars than watching the race. So the Monday after the first article, the project got a new member of staff: a TV director.

Spa-Francorchamps, Sol Leung crossing the line to win, with the FDTV winner card, the finish pylon full of chequered flags and the track map

Spa-Francorchamps, lap 13 of 13. Every camera cut in this race was chosen by the director; I never touched the controls.

The race that made it real

On the afternoon of 12 October I raced 13 laps around Spa-Francorchamps against 29 AI drivers, starting 27th. Half an hour later the replay went through the usual pipeline, and I pressed one button on my phone: Go live.

What followed was the thing I had wanted since 2008. GTR2 jumped to the start of the replay in full screen, the starting grid wiped onto the screen, and when the lights went out the director took over. It followed the battle for fifth on the opening lap, cut to the leaders when they swapped places, put the camera on my Corvette as it climbed through the field, went onboard for a few seconds when two cars were nose to tail, and stayed on the eventual winner for the last kilometre to the flag. Then the classification rolled, the replay stopped itself, and my phone told me I could end the recording.

I recorded it twice: once with the modern scoring tower down the side of the screen, and once with the classic 90s banner. Every frame in this article comes from those two recordings, except the two control screens and the diagram.

The starting grid graphic wiping in from the left behind a yellow edge, over the Spa grid
Starting grid front row at Spa: Carter on pole and Wathen second, both Maserati Corse

Go live: the grid wipes in behind a yellow edge while the replay is still paused at 0.000, and goes away before Play is pressed.

What happened between the two articles

The director did not arrive alone. A few other things joined the overlay in the meantime, and the director uses most of them:

  • A track map in the top-right corner, drawn from the game's own racing-line file, with every car as a numbered dot. A car in the pits shows beside the pit lane, because the map places cars by their progress round the lap, not by guesswork.
  • Battle graphics, in both styles. The classic one is straight out of a 90s broadcast: two drivers' best and last laps side by side, then a live gap bar between them. The modern one turns the tower itself into a "Battle for 5th" train, with the gap between each pair of cars in big digits.
  • A championship prediction: the standings as they would be if the race finished right now, for races that belong to a championship on this site.
  • A phone remote, a pared-down control panel with just the buttons that matter on the night: race, display style, Director and Go live.
Modern scoring tower on lap 1 with a Battle for 5th section: Poel, Leung, Durand and Hromin with the gaps between them

The tower on the right was the director's very first battle in this race, on lap 1: Poel, Leung, Durand and Hromin, separated by about a second and a half. The camera is onboard Sol Leung's Lamborghini, looking along its flank at the cars ahead.

If that name rings a bell from the photo at the top, that is the point. Thirty minutes later, Sol Leung won the race. The director did not get lucky: it had read the whole race before the first frame was shown, and it knew.

Hindsight is the director's superpower

A human TV director works live. They see an overtake when it happens, so the camera often arrives a second too late. Ours has an unfair advantage: it plans from the decoded replay, so it knows every position, gap and lap time of the whole race before the replay starts. The first time a race is opened, it writes a complete shooting script, saves it next to the race data, and uses that same script every time the race is played. No randomness and no clock input: the same race always gets the same broadcast.

My rules, written down before a single line of the planner existed, read like a brief to a real director:

  • Arrive before the move, not after it. One car about to pass another: the camera is on the overtaking car about five seconds before the swap.
  • Trouble is a story. A car passed by two or more cars within a few seconds is in trouble, so follow the car going backwards, not the ones going past.
  • Every lead change is shown, even over the player's own battle: on the leader while the fight builds, then on the new leader for a few seconds after.
  • The finish overrides everything: the leader from ten seconds before the line until after it, then the cars finishing behind.
  • Ten seconds minimum, no maximum. A good battle can stay the best thing on track for laps.
  • Not every car gets airtime, and that is fine. The player and the leader get a bonus, but the player is a bonus, not the star.

At Spa, the script came out at 118 camera cuts, 39 graphics and 50 camera-angle changes. Seven of the 30 cars never got a shot. I got 21, the most of anyone, because 27th to 6th means a lot of overtaking. The winner was close behind with 19.

The director plan on the control desk: numbered shots with the replay time, the car, the reason and any onboard angle, with shot 46, a lead fight, highlighted

The shooting script on the control desk. Shot 46 is on air: Wathen defending the lead, with Leung's pass for the lead coming up at 12:15. Read it as a story and you can follow the whole race: Leung takes the lead, Wathen takes it back, and Leung takes it again for good on lap 7.

The planner also uses the camera angles. When the followed car sits within half a second of the car ahead for a few seconds, the director cuts onboard to a front-facing angle (the bonnet, or a low side view along the front wheel). When someone is right behind it, the director picks a rear-facing angle. A few seconds later it is back on the TV cameras. GTR2 does not say which onboard angle is showing (I searched its memory for one), so the companion keeps count of every press itself.

Sol Leung in fifth, with the modern tower showing a Battle for 4th section

Moments later, modern style: Leung is up to fifth and in the battle for 4th.

Classic battle bands: Poel in 5th and Leung in 6th with a live gap of 0.254 seconds

The same fight in classic style: a live gap of a quarter of a second.

The hard part: a game that does not take orders

Planning was the easy half. The hard question, from the very first conversation about a director, was control: GTR2 is a 2006 game with no remote control interface of any kind. Window messages sent to it are ignored. The only thing it listens to is input, so the director has to press keys and click the mouse like a person would, with GTR2 in front.

Keys alone were not enough. The replay's "next car" and "previous car" keys move one place up or down the running order, so getting from the leader to 25th place means 24 presses. The breakthrough was a list. GTR2 has a clickable driver list, but only on its monitor pages, not in the full-screen replay. The game's interface is described in a plain text file, though, and a copy of that list can be added to the full-screen replay page, made invisible and silent. Clicking row 3 of the hidden list jumps the camera straight to the car in third. The list shows 21 rows and scrolls, so the companion scrolls it back to the top before every click; reaching any car takes about a third of a second.

Two small details took longer than they should have. A fully transparent font in GTR2's interface is not invisible: it is drawn in solid black. An opacity of one out of 255 is invisible. And GTR2 stretches its 800 by 600 interface layout over the whole screen without keeping the proportions, so every click position had to be measured on the ultrawide game PC itself, not calculated.

The last piece was time. To follow the replay, the director needs to know where it is, and GTR2 does not say that either. A search of the running game's memory found the replay clock as a single number at a fixed address, the same on both of my PCs. The companion reads it many times a second, read-only, and the whole broadcast follows it. Pause the replay in the game and the graphics pause with it; rewind, and the graphics rewind too.

Diagram: the phone sends state to the home server relay; the engine page on the game PC runs the plan and sends a car command through the relay to the companion, which scrolls and clicks the hidden list in GTR2 and reads the replay clock from memory; OBS records the game and the overlay graphics

The whole chain. The phone never talks to the game; nothing heavier than a short message ever crosses the network.

A director that does not live in my pocket

The first version of the director ran inside the control page on my phone. It worked until the phone screen switched off: phones freeze background pages to save battery, and a frozen director misses its cuts. So the director moved out of the phone and onto the game PC, as an engine: an invisible browser page that the companion starts and keeps alive. The phone became what it should be, a remote control. I can lock it, put it in my pocket and watch the race on the big screen; nothing on air depends on it.

Go live had its own puzzle. The rule is that the starting grid must be fully shown and gone five seconds before the start. Spa's replay begins only 14 seconds before the lights go out, which is not enough time for all the grid pages. So Go live works backwards: it shows the grid with the replay still paused at zero and presses Play at exactly the moment that keeps the rule.

The end of a replay was the opposite problem. GTR2 loops a replay back to the start when it reaches the end, which is lovely for hot laps and terrible for a recording, because the race restarts right after the classification. The director stops the replay at the end, and if GTR2 wraps round anyway (its idea of "the end" can come a little before the last recorded moment), it catches the jump, stops, and seeks back to the closing frames. The phone shows "Director finished" as soon as the last cut and the last graphic are done, so I know when it is safe to stop the recording.

Fastest lap card: Sol Leung, Reiter Engineering, lap 4, 2:18.975

Lap 4: Leung sets the fastest lap of the race, and the director makes sure we see it.

The phone remote: preview, replay slider, a green Director finished message, race picker, Classic and Pylon buttons, Director and Go live

The phone at the end of the race: safe to stop recording.

Opening night

Spa was the first big race on the new system, and of course something went wrong. On the phone, the new race showed its replay clock frozen at 5.0 seconds, and every press of Go live switched the whole broadcast to a different, older race: once to Enna-Pergusa, once to Magny-Cours.

The culprit was the invisible engine. It had been started earlier in the day, before the Spa race existed, so its list of races did not include Spa. When the phone said "Spa is on air", the engine did not recognise the name and stayed on the race it knew. The clock froze because following the game is the engine's job, and it was busy with the wrong race. Go live made things worse, because it was carried out by the engine, which went live on its own race and told every screen to follow.

The fix is a page that notices when it is out of date: if it hears about a race it does not know, it reloads itself to fetch the new list. And Go live now refuses to run unless the page has the race that is actually on air. One restart of the companion, and Spa went live on the next try.

Revisiting a race

This is the part I did not expect. When you race, you see almost nothing: the car in front, the mirrors, the next braking point. I knew I had finished sixth at Spa. I did not know that the lead had changed hands three times on laps 6 and 7, that the winner had started seventh and was already in a four-car fight on the opening lap, or that Wathen would cross the line less than a second behind the winner.

Watching the replay with the director felt like reading a race report about a race I was in, written by someone who saw all of it. My own race became a subplot, which is exactly right: 21 shots of my Corvette climbing from 27th, mixed into the story of somebody else's win.

Modern tower at the finish: positions with intervals and a chequered flag beside every car that has finished
Race classification after 13 laps at Spa: Leung, Wathen, Carter, Poel, Jolicoeur, Horta sixth, with tyres, nationality, race time, speed and fastest lap

The finish: a chequered flag for every finisher, then the classification. 31 minutes of racing, decided by 0.987 seconds.

And because it is all built from the replay files, it works for every race I have ever kept. A replay from 2017 or 2009 gets the same treatment as one recorded this afternoon: the same planner, the same graphics, the same broadcast.

What is next

Classic battle card on lap 1 with dashes in place of the best and last lap times

The recordings also showed what to fix. On the first laps, the classic battle card has no lap times to compare yet and shows dashes; it should skip straight to the live gap until there is something worth comparing. Other ideas are queued up: a hide-everything button (I have forgotten to make the overlay visible again in OBS more than once), starting and stopping the OBS recording from the phone, and a see-through window on the game PC, so I can watch the graphics while recording instead of picturing them.

Further out, the director still waits for pit stops, which the replay data does not cover yet. And the biggest idea of all is still on the shelf: reading the game's memory during a live race, so FDTV could cover a race while it happens, not just afterwards.

Results and learnings

  • A 30-car, 13-lap race at Spa was broadcast from start to finish without me touching a camera: 118 cuts, 39 graphics and 50 onboard and TV angle changes, all planned before the first frame.
  • Planning with hindsight beats reacting. Knowing the whole race lets the camera be in the right place before the move, which is something live TV directors can only dream of.
  • Control was the real challenge, and the answer was hiding in the game's own interface file: an invisible list turned 24 key presses into one click.
  • Anything that must keep running belongs on the machine that runs the game, not on a phone that goes to sleep.
  • Pages that stay open for hours need to notice when the world has moved on. Opening night found the one case where they did not.
  • The rules came first, in plain words, before any code. When a shot looked wrong, the question was always "which rule?", never "which number?".

Like the first part, this was built with Claude as my pair programmer. I wrote the director's brief and judged every recording; Claude wrote the planner, the companion and the code that clicks rows nobody can see. After the second recorded run, my verdict on the director's choices was simple: they are great, leave them alone.

For years my replays were silent home videos. Now they come with a director who has already watched the race, knows where the story is, and has the camera there five seconds before it happens.

go to racing