Build your own telemetry
Custom traces you build from a formula. If the built-in graphs in Telemetry Graphs don't show the metric you care about, define your own — like throttle minus brake for net pedal input. No programming background needed: if you can write (a + b) / 2, you can write a math channel.
Opening the panel
Click MATH CHANNELS in the top-left of the Telemetry Graphs tab. The panel opens on the right side.
Channel list (top)
Formula editor (middle)
Status bar (bottom)
Your first math channel
Let's build a net pedal input channel — positive when you're on the throttle, negative when braking.
- 01Click + New at the top of the channel list.
- 02In the Formula field, type:Channel names highlight in teal as you type. A typo shows Unknown channel: ‘thottle’. Did you mean ‘throttle’?
throttle - brake - 03Fill in metadata:
- Name: net_pedal — lowercase, no spaces. Used to reference this channel from other formulas.
- Unit: % — free text label on the graph.
- Color: click the swatch and pick something distinct.
- 04Click Save. A new graph appears at the bottom of the stack — drive a lap and the trace fills in.
Formula syntax
A formula is a single expression — no variables, statements, or loops. The grammar is small enough to fit on this page.
Arithmetic
a + b addition
a - b subtraction
a * b multiplication
a / b division (returns 0 if b is 0)
a % b remainder
a // b floor division
a ** b power, e.g. 2 ** 3 == 8
-a negationComparisons
a > b a < b a >= b a <= b
a == b a != bBoolean operators
cond1 and cond2
cond1 or cond2
not condConditional (ternary)
value_if_true if condition else value_if_falseNumbers and constants
Channel reference
The raw telemetry channels you can reference inside a formula. Categories are for navigation; in formulas you just write the name.
Car state
Pedals and steering
Tyres
Brakes
Fuel and environment
Function reference
Stateless — look only at the current tick
Examples
abs(steer_deg) # steering effort regardless of direction
clamp(rate(speed) / 3.6, -50, 50) # longitudinal accel, capped at ±50 m/s²
avg(tyre_temp_fl, tyre_temp_fr) # average front tyre tempStateful — remember previous ticks
rate(speed)rate(speed * 2)Stateful function reference
Quick uses
Built-in presets
Fourteen channels ship with the app. They're useful on their own and double as worked examples — duplicate any of them to see how the formula is built.
Tyre diagnosticsfront_temp_avg
avg(tyre_temp_fl, tyre_temp_fr)rear_temp_avg
avg(tyre_temp_rl, tyre_temp_rr)temp_balance_fb
front_temp_avg - rear_temp_avgtyre_temp_avg
avg(tyre_temp_fl, tyre_temp_fr, tyre_temp_rl, tyre_temp_rr)tyre_temp_spread
max(max(tyre_temp_fl, tyre_temp_fr),
max(tyre_temp_rl, tyre_temp_rr)) -
min(min(tyre_temp_fl, tyre_temp_fr),
min(tyre_temp_rl, tyre_temp_rr))trail_brake_flag
1 if brake > 5 and abs(steer_deg) > 15 else 0throttle_rate
clamp(rate(throttle), -500, 500)brake_rate
clamp(rate(brake), -500, 500)throttle_jitter
abs(delta(throttle))throttle_smoothness
rolling_avg(throttle_jitter, 20)accel_longitudinal
rate(speed) / 3.6peak_brake_recent
rolling_max(brake, 100)fuel_used_lap
lap_start(fuel_l) - fuel_lRecipes
Five extra formulas you can paste in. Each one is a single math channel.
Coast flag — off both pedals
1 if throttle < 5 and brake < 5 else 0Pedal overlap — left-foot brake or mistake
1 if throttle > 5 and brake > 5 else 0Front–rear pressure delta
avg(tyre_pressure_fl, tyre_pressure_fr) -
avg(tyre_pressure_rl, tyre_pressure_rr)Steering smoothness
rolling_avg(abs(delta(steer_deg)), 30)Hottest tyre
max(max(tyre_temp_fl, tyre_temp_fr),
max(tyre_temp_rl, tyre_temp_rr))Tips and gotchas
- —Stateful function args must be a bare channel name. rate(speed) works; rate(speed * 2) saves cleanly but reads 0 forever, which is harder to debug than an error.
- —Division by zero, NaN, and infinity are silently coerced to safe values (0 or ±1×10⁹). The graph won't blow up, but a formula producing junk also won't shout about it. Sanity- check new formulas during a real session.
- —Errors at save time vs runtime. Syntax errors and unknown channel names show inline in the editor when you save. Errors that only happen during evaluation (a referenced channel disappears later) cause the channel to read 0 silently.
- —Built-in presets can't be edited or deleted. Click duplicate on a preset row to get a copy you can change.
- —Heavy rolling windows cost memory. Each channel keeps a ring buffer; a window of 20 (default) is cheap. 5000 across a dozen channels is not. If the eval-time number in the status bar climbs, that's the first place to look.
- —Channel name validation is helpful. Save a formula with a typo and the editor suggests the closest match: Unknown channel: ‘thottle’. Did you mean ‘throttle’?
- —Persistence. User-made channels are stored in math_channels.json in the S1napse config directory. Copy that file between machines or version it.
Related
- —Telemetry Graphs — the tab that hosts the math channels panel.
- —Lap Analysis — math channels also show up here when you replay a completed lap.