It Was
A Disaster.
Getting telemetry out of GT7 is not obvious. The PS4/PS5 broadcasts UDP packets — fine, that part's documented. But the actual data is encrypted with Salsa20, a stream cipher, using a key that Polyphony Digital baked into the game binary. The packet structure is completely proprietary. There's no official API, no documentation, nothing.
I spent a long time getting nowhere. Packets were coming in but the decryption was wrong. Numbers made no sense — speed reading –12,000 km/h, tyres at 6,000°, gear stuck on 0. The coordinate system was unclear. The byte offsets were guesswork. Every fix introduced two new breakages.
$ python gt7telem.py
RECV 296 bytes ... decrypting ...
speed: -12847.3 km/h gear: 0 rpm: 4294967295
tyre FL: 6144.0° ... something is very wrong
It was genuinely demoralising. The GT7 telemetry UDP stream had been reverse-engineered by the community, but piecing together scattered forum posts, half-finished GitHub repos, and conflicting byte offset tables was a nightmare. Nothing worked end-to-end.
Then I Found
Bornhall.
Somewhere deep in a late-night search spiral I stumbled across Bornhall's repository. And it had everything. The correct Salsa20 key. The full packet structure mapped to proper Python structs. Working decryption. Real values coming out the other side.
For the first time — actual numbers. Speed showing 187 km/h. Gear 4. Tyres reading 88–94°. The car dot moving around the track map in the right direction. It just... worked. Because Bornhall had already done the hard part.
I'm not exaggerating when I say this project would not exist without that repo. The decryption logic, the packet struct, the understanding of what each offset means — all of that foundation came from Bornhall's work. Everything built on top of it (the live dashboard, the lap analyst, the chart groups) only happened because that groundwork was already solid.
The least I can do is make sure that's front and centre every time anyone uses this tool.
Thank You,
Bornhall.
Full credit, full respect. The core GT7 telemetry protocol implementation in this project is built on top of Bornhall's reverse engineering work. Please go star the original repo.
This Wasn't
Even The Plan.
Here's the part most people don't know. None of this — the live dashboard, the lap analyst, any of it — was ever meant to be the main project. It started as a side requirement for something else: a Raspberry Pi Pico set up to drive the car autonomously in GT7, by replaying recorded laps back through the inputs.
The plan was a closed loop. Record a lap, feed it into a bot, the bot drives that exact lap back perfectly — steering, throttle, braking, all of it reproduced. The telemetry recorder (what eventually became this whole project) only existed in the first place to capture the lap data the bot would replay. There was even a half-built per-car profile system — brake scale, throttle scale, steer scale, speed bias — meant to let the bot adjust its driving per car.
The bot never made it past the workbench. The Pico just flat-out wouldn't run its own code.py — not flaky, not intermittent, it simply refused to execute. A powered USB hub got wired in to send signals to the PS4, hours went into troubleshooting it, and the reason it wouldn't run was never actually figured out. So the bot got scrapped.
But the telemetry recorder it needed didn't go away. It just kept getting built out on its own — more charts, more tabs, a real dashboard, a real analyst — until one day it was the entire project. TRACE exists because the thing it was built to support never worked.
The per-car profile format is still sitting in the codebase, untouched, scales defaulting to 1.0 and never read back by anything. If anyone out there gets a Pico running reliably and wants to pick the bot idea back up — genuinely, I'd love to see it actually drive a lap.