pro_engineer — assetto corsa

Pro Engineer/Assetto Corsa

Assetto Corsa — telemetry and a virtual race engineer

Everything it reads from AC, and everything it says back.

Assetto Corsa publishes its telemetry in shared memory for exactly this purpose. Pro Engineer reads those pages sixty times a second, works out what the tyres, brakes, fuel and driving are actually doing, and answers in sentences — on a second screen and inside the car, through Custom Shaders Patch.

Works with the base game and with Content Manager. Custom Shaders Patch is needed only for the in-game panel — everything else runs without it.

WHAT IT READS FROM AC

Four shared-memory pages, and nothing else. It does not inject code, hook the renderer or modify a single game file — it opens what Assetto Corsa already publishes and reads it.

Physics, at the game's own rateTyre pressures, inner/middle/outer temperatures, brake temperatures, wear, suspension travel, both pedals, steering, gear, RPM, speed, both G axes, slip, fuel and the wheel's force feedback level.
Graphics and sessionLap and sector times, position on track, the session type, the number of laps or the time left, and the flags.
StaticCar and track names, maximum RPM and fuel, and the tyre compound — enough to know what it is looking at before a wheel has turned.
Read until two reads agreeA page caught mid-write is inconsistent, and one bad frame in a thousand is a spike in a graph and a wrong verdict in an engineer. Each page is re-read until two consecutive reads match, and a frame that never settles is discarded rather than drawn.

Nothing measured is nothing said. Some cars and some mods do not publish tyre wear at all, and four zeros are not four destroyed tyres. Every average that was never taken is treated as absent — the verdict is withheld rather than invented, which is a distinction this project has had to learn the hard way.

THE ENGINEER, LIVE

Sentences, not thresholds. Grouped, so four cold tyres is one line rather than four; ranked, so the line you read at 200 km/h is the one that matters; and each carries how sure it is.

engineer — live
Fronts over 28.4 psi (target 27.5) >> Take 0.3 psi out of both fronts Rear inner edges 13 °C hotter than the outers >> Less negative camber at the rear confirm: the I/M/O spread next run out understeer — the car, not the driving 9 a lap on every one of 5 laps, while the times moved about T3 cost 0.34 s — 14 m late on the brakes, −4 km/h at the apex

High

Several observations agreeing closely — four corners saying the same thing, not one odd frame.

Medium

Enough to raise. Not enough to bet a setup change on.

Low

It is watching and has not decided. Being told that is worth more than a confident guess.

ON THE SECOND SCREEN

Nine tabs, every keyboard shortcut rebindable, and every on-screen hint printed from the binding — so it cannot tell you the wrong key. About 0.1 % of one CPU core, and no GPU cost at all: it is a terminal program.

Assetto Corsa telemetry dashboard in a terminal: tyre pressures and inner, middle and outer temperatures per corner, brake heat, fuel and lap timing
Dashboard — the live picture.
Post-stint race engineer debrief for Assetto Corsa with confidence markers and a verdict separating the car from the driving
Post-stint. Each line says how sure it is, and over a stint it separates the car from the driving — refusing to answer below four laps, because a car that understeers and a driver who turns in early produce the same trace.

INSIDE THE CAR, VIA CSP

Five windows as a Custom Shaders Patch Lua app — the main panel, the engineer, telemetry, status and the lap debrief — opened and closed independently, every block switchable, and readable at 4K because text is drawn at any size rather than at the five fixed tiers the platform offers.

It installs itself

Every time the application starts, and it rewrites itself whenever it differs from the running build. There is no step to forget and no version to match by hand.

It computes nothing

Lua runs on Assetto Corsa's render thread, where a millisecond is a sixth of the frame budget at 165 Hz. Everything is worked out on the desktop side and copied in; the panel formats text when a frame arrives, never while drawing.

It works outside a session

In the garage, in the pits, before the green — and it tells “waiting for the car” apart from “waiting for the application”, which are two different problems.

A diagnosis when it is blank

One screen that names which of the application, the bridge and the panel does not fit. It is the question this project is asked most, and guessing at it costs an evening.

WHERE THE TIME WENT

Corners are found in the trace — a stretch where lateral load stays up long enough to be a corner rather than a kink — so it needs no track data and works on mods and on tracks nobody has written a table for.

Corner-by-corner Assetto Corsa lap analysis against a reference lap, showing braking point, entry, minimum and exit speed per corner
Each corner is charged the track from its own entry to the next corner's entry — which is where a bad exit is actually paid for — so the per-corner deltas add up to the lap's own delta. One key hides everything that cost under a tenth.

It will not invent a comparison. Corners are matched by distance rather than by position in the list, because two laps can detect a different number of them and comparing T5 to T5 compares two different corners. A corner the reference lap does not have is drawn as no comparison rather than as a delta of zero.

GETTING IT RUNNING

Windows

Download, unzip, run. It finds Assetto Corsa, writes the in-game panel into assettocorsa\apps\lua\, and creates the shared memory the panel reads. Nothing has to start in a particular order.

# unzip anywhere, then
ac_pro_engineer.exe

Linux & Steam Deck

The desktop side is a native Linux binary and needs nothing else. The in-game panel additionally needs a small bridge running inside the game's Proton prefix, because only a Windows process in there can give the shared memory the name the game is allowed to open.

./ac_pro_engineer

# for the in-game panel, leave this running too
protontricks-launch --appid 244210 shm-bridge.exe

CSP needs libraries Proton ships only as stubs. If Content Manager opens on a black screen, or the game crashes the moment a Lua script runs, that is what the proton-setup.sh in the release archive installs. The full sequence is on the download page.

In the game

CSP's app sidebar → enable the panel, listed there as Pro Engineer. It is already in place; the application put it there when it started.

READ ON