This page is generated from the code, and a test fails when the two drift apart, so it matches the release it documents.
46 variables, 24 conditions and 7 cases.
Variables
A variable resolves at fire time to one clip, or to a pool it picks a take from — a number, a name, a line chosen by the sim's state. Write it as {{name}}, or as { "var": "name" }. A variable that resolves to nothing aborts the callout unless the step sits inside an optional.
{{cornerName.clip}}
The name of the corner the driver is approaching, drawn from the corner-names group (one clip per corner, named by its slug — corner-names/eau-rouge, corner-names/turn-5). Nothing when the voice has no clip for that corner, which skips the callout rather than half-saying it.
Used by: pit-crew.corner-name-approaching
{{gap.decimal}}
The tenths of the live gap, 0–9, drawn from the lap-time-decimal group (lap-time-decimal/6 is "point six seconds"). Read live at speak time; nothing when gap.readoutIntro has nothing.
Used by: pit-crew.gap-threshold, pit-crew.gap-trend
{{gap.line}}
The trend line for the gap that just changed, drawn from the gap group by side and direction: gap/ahead-closing, gap/ahead-opening, gap/behind-closing, gap/behind-opening. A complete sentence on its own.
Used by: pit-crew.gap-trend
{{gap.readoutIntro}}
The lead-in of the live gap readout ("Gap is"), from gap/readout-intro. Resolves only when the gap can be read at speak time — under a minute, on the same lap, and still to the car the line named — and gap.second and gap.decimal resolve on exactly the same test, so the three are spoken together or not at all.
Used by: pit-crew.gap-threshold, pit-crew.gap-trend
{{gap.second}}
The whole seconds of the live gap, 0–59, drawn from the lap-time-second group (lap-time-second/1 is "one"). Read live at speak time; nothing when gap.readoutIntro has nothing.
Used by: pit-crew.gap-threshold, pit-crew.gap-trend
{{gap.thresholdLine}}
The line for a gap that just dropped under the driver's alert threshold, drawn from the gap group by side: gap/threshold-ahead (we have caught the car ahead) or gap/threshold-behind (the car behind is right with us). A complete sentence on its own.
Used by: pit-crew.gap-threshold
{{incident.points}}
The penalty points the incident cost, as the sim scored it, spoken as a whole clause from the incidents group (incidents/points-2 is "That cost us two penalty points."). Nothing for a light contact worth no points, or for a count the voice has no clip for — a whole clause, so a script may make it optional and the type line still stands on its own.
Used by: pit-crew.incident-collision-car, pit-crew.incident-collision-world, pit-crew.incident-contact-car, pit-crew.incident-contact-world
{{lapTime.decimal}}
The tenths of a second (0 to 9), spoken as "point N seconds" — the clip that ends the readout. Draws from the lap-time-decimal clip group.
Used by: pit-crew.lap-time-best
{{lapTime.intro}}
The opening line of the lap-time readout: first-good-lap on the driver's first valid lap of the session, best-lap-yet on every later improvement. Draws from the lap-time-intro clip group.
Used by: pit-crew.lap-time-best
{{lapTime.minute}}
The whole-minute part of the lap time, as one clip per minute value; nothing for a lap under a minute. Draws from the lap-time-minute clip group — a minute the voice has no clip for aborts the readout.
Used by: pit-crew.lap-time-best
{{lapTime.second}}
The whole-second part of the lap time (0 to 59), one clip per value with a trailing comma. Draws from the lap-time-second clip group.
Used by: pit-crew.lap-time-best
{{opponentFlag.number}}
The flagged car's race position as a spoken number, drawn from the position-number group (position-number/4 is "P4"). Read live at speak time — class position in a multi-class race — and falling back to the position the event carried. Only the ahead lines name a position; part of the sentence, so a number that cannot be resolved skips the whole line rather than leaving a gap.
Used by: pit-crew.opponent-flag-black-ahead, pit-crew.opponent-flag-disqualify-ahead, pit-crew.opponent-flag-furled-ahead, pit-crew.opponent-flag-meatball-ahead
{{opponentPit.number}}
The pitting car's race position as a spoken number, drawn from the position-number group (position-number/4 is "P4"). Read live at speak time — class position in a multi-class race — and falling back to the position the event carried. Part of the sentence, so a number that cannot be resolved skips the whole line rather than leaving a gap.
Used by: pit-crew.opponent-pit-nearby
{{overtake.lost.comeOn}}
The "Come on, <name>." opener of the lost-position line, a full clip per driver name from the position-overtake-come-on group (position-overtake-come-on/driver is the generic fallback). A complete sentence on its own, so the bundled script makes it optional: a voice without the chosen name's clip skips it and the line still plays.
Used by: pit-crew.overtake-lost
{{pitSpeed.limitIntro}}
The lead-in to the spoken pit-speed limit ("The pit speed limit is"), from the session-start/pit-speed-intro clip. Nothing to say while the session conditions are unknown, so keep it in one optional clause with the number and the unit.
Used by: pit-crew.no-limiter-entry
{{pitSpeed.limitNumber}}
The pit-speed limit as a number, from the session-start-speed-numbers/<limit> clip. The group covers the limits iRacing actually uses rather than every number, so a limit the voice has no clip for empties the clause instead of rounding to a wrong one.
Used by: pit-crew.no-limiter-entry
{{pitSpeed.limitUnit}}
The pit-speed limit's unit, sentence-final, from the pit-limiter/unit-kmh or pit-limiter/unit-mph clip — recorded apart from the session brief's unit clips, which end on a comma because a temperature follows them there.
Used by: pit-crew.no-limiter-entry
{{position.intro}}
The lead-in of a position readout, chosen by what the lap did: position-intro-better/that-puts-us-to for a gain (or a first fix) in qualifying, position-intro-worse/currently for a loss, a held place, or any lap in a race, where standings do not follow from lap times. A fragment of the sentence — keep it required before position.number.
Used by: pit-crew.position-change
{{position.number}}
The driver's position as a spoken number, drawn from the position-number group (position-number/4 is "P4"): the position the lap just completed left the driver in during qualifying, and the live position at the moment it is spoken during a race — class position in a multi-class session either way. The point of the readout, so a script keeps it required.
Used by: pit-crew.position-change
{{position.pole}}
The self-contained pole line, position-intro-pole/that-puts-us-on-pole ("That puts us on pole.") — a complete sentence that replaces the intro and the number when the lap put the driver on pole in qualifying.
Used by: pit-crew.position-change
{{positionReadout.intro}}
The "We're currently" lead-in of a position readout, from position-intro-worse/currently. Resolves to nothing for a second readout within 30 seconds of the last one that moved at most one place — the number is then spoken bare — so the bundled script wraps it in an optional clause; a script that wants the lead-in every time drops the optional. Resolving it also records this readout for the next one's decision, so name it at most once per entry.
Used by: pit-crew.overtake-gained-position, pit-crew.overtake-lost-position
{{positionReadout.number}}
The driver's current race position as a spoken number, drawn from the position-number group (position-number/4 is "P4"), read live at the moment it is spoken — class position in a multi-class race. The whole point of the readout, so a script keeps it required.
Used by: pit-crew.overtake-gained-position, pit-crew.overtake-lost-position
{{raceEnd.greeting}}
The driver's name as a race-end greeting, one clip per name the voice recorded (the generic driver clip when no name is picked). Draws from the race-end-greeting clip group — a name the voice lacks resolves to nothing, so keep it optional.
Used by: pit-crew.race-end
{{raceEnd.podiumThird}}
The whole third-place line — we made the podium. Draws the podium-third line from the race-end clip group.
Used by: pit-crew.race-end
{{raceEnd.position}}
The final position as a spoken number — the class position in a multi-class race, the overall position otherwise. Draws from the position-number clip group; a position the voice has no clip for aborts the readout.
Used by: pit-crew.race-end
{{raceEnd.raceOverResultIs}}
The lead-in of the fourth-or-worse readout — the race is over, the final result for us is. A fragment of a sentence: the position number must follow it. Draws the race-over-result-is line from the race-end clip group.
Used by: pit-crew.race-end
{{raceEnd.secondPlace}}
The whole second-place line. Draws the second-place line from the race-end clip group.
Used by: pit-crew.race-end
{{raceEnd.weWon}}
The whole winning line — we won, well done. Draws the we-won line from the race-end clip group.
Used by: pit-crew.race-end
{{raceStart.airTempNumber}}
The air temperature as a whole number in the driver's display unit. Draws from the session-start-temp-numbers clip group; a reading outside the recorded range aborts the clause it sits in.
Used by: pit-crew.race-start
{{raceStart.degreesUnit}}
The temperature unit word — degrees celsius or degrees fahrenheit, per the driver's display setting. Draws the degrees-celsius and degrees-fahrenheit lines from the session-start clip group.
Used by: pit-crew.race-start
{{raceStart.greeting}}
The race-start greeting with the driver's name — "time to race, <name>" as one clip per name the voice recorded (the generic driver clip when no name is picked). Draws from the race-start-greeting clip group; a name the voice lacks resolves to nothing, so keep it optional.
Used by: pit-crew.race-start
{{raceStart.position}}
The grid position as a spoken number. Draws from the position-number clip group; a position the voice has no clip for resolves to nothing and aborts the clause it sits in.
Used by: pit-crew.race-start
{{raceStart.trackTempNumber}}
The track temperature as a whole number in the driver's display unit. Draws from the session-start-temp-numbers clip group; a reading outside the recorded range aborts the clause it sits in.
Used by: pit-crew.race-start
{{raceStart.wetness}}
The track wetness state as a word — dry, mostly dry, very lightly wet, lightly wet, moderately wet, very wet or extremely wet. Draws the wetness-<state> lines from the session-start clip group.
Used by: pit-crew.race-start
{{raceStatus.intro}}
The lead-in of a non-leader status update — "we're currently". Draws the currently line from the position-intro-worse clip group, shared with the position callout.
Used by: pit-crew.race-status
{{raceStatus.number}}
The driver's live position as a spoken number — the class position in a multi-class race, the overall position otherwise. Draws from the position-number clip group; a position the voice has no clip for aborts the readout.
Used by: pit-crew.race-status
{{raceStatus.stillLeading}}
The leader's whole status line — still leading the race, or still leading our class in a multi-class race. Draws the still-leading and still-leading-class lines from the race-status clip group.
Used by: pit-crew.race-status
{{sessionStart.airTempNumber}}
The air temperature as a whole number in the driver's display unit. Draws from the session-start-temp-numbers clip group; a reading outside the recorded range aborts the clause it sits in.
Used by: pit-crew.session-start
{{sessionStart.degreesUnit}}
The temperature unit word — degrees celsius or degrees fahrenheit, per the driver's display setting. Draws the degrees-celsius and degrees-fahrenheit lines from the session-start clip group.
Used by: pit-crew.session-start
{{sessionStart.greeting}}
The session-start greeting with the driver's name — "ok, <name>" as one clip per name the voice recorded. Draws from the session-start-greeting clip group; a name the voice lacks resolves to nothing, so keep it optional.
Used by: pit-crew.session-start
{{sessionStart.sessionLine}}
The line naming the session that just started — practice or qualifying (race is the race-start callout's). Draws the session-practice and session-qualifying lines from the session-start clip group.
Used by: pit-crew.session-start
{{sessionStart.speedNumber}}
The pit speed limit as a whole number in the driver's speed unit. Draws from the session-start-speed-numbers clip group, which covers the limits iRacing uses; a limit with no clip resolves to nothing and aborts the clause it sits in.
Used by: pit-crew.session-start
{{sessionStart.speedUnit}}
The speed unit word after the pit speed limit — kilometers per hour or miles per hour, per the driver's display setting. Draws the speed-unit-kmh and speed-unit-mph lines from the session-start clip group.
Used by: pit-crew.session-start
{{sessionStart.trackTempNumber}}
The track temperature as a whole number in the driver's display unit. Draws from the session-start-temp-numbers clip group; a reading outside the recorded range aborts the clause it sits in.
Used by: pit-crew.session-start
{{sessionStart.wetness}}
The track wetness state as a word — dry, mostly dry, very lightly wet, lightly wet, moderately wet, very wet or extremely wet. Draws the wetness-<state> lines from the session-start clip group.
Used by: pit-crew.session-start
{{spotterClip}}
The spotter call for the car-presence change that just happened, drawn from the spotter group: "Car left", "Two cars right", "Three wide", the combined swaps ("Clear right, car left"), the 2-to-1 de-escalation, "Clear", and the still-there reminders — inside/outside terms on an oval. Chosen by the spotter engine per transition and read when it fires, so it is the whole call.
Used by: pit-crew.spotter-call, pit-crew.spotter-info
Conditions
A condition answers yes or no at fire time. Write it in an if step — { "if": "name", "then": [ … ], "else": [ … ] } — and negate it with a single leading !. That ! is the only operator the format has.
flag.furledStillShown
The furled black flag is still being shown at speak time; speaking it marks the raise as announced.
Used by: pit-crew.flag-furled
flag.furledWithdrawn
An announced furled flag has been withdrawn; speaking it consumes the announcement.
Used by: pit-crew.flag-furled-cleared
lapTime.hasMinuteComponent
The lap is a minute or longer, so the minute word is spoken before the seconds. A pack may drop the minute with optional for a terse register; the assumed minute only holds where it is 1.
Used by: pit-crew.lap-time-best
limiter.stillEngagedOffPitRoad
The car has a pit limiter and it is still engaged out on the track, according to live telemetry when the line comes to speak — about a second and a half after leaving pit road. Wrap the on-track warning's whole body in it so a driver who has already switched the limiter off hears nothing. False on a car without a limiter or when telemetry is unavailable.
Used by: pit-crew.limiter-on-track
limiter.stillMissingOnPitRoad
The car has a pit limiter and it is still NOT engaged on pit road, according to live telemetry when the line comes to speak — a couple of seconds after the pit-entry reminder. Wrap the missing-limiter warning's whole body in it so a driver who engaged the limiter in the meantime hears nothing. False on a car without a limiter or when telemetry is unavailable.
Used by: pit-crew.limiter-missing
pitStatus.stillBadAngle
The car is still at a bad angle in the pit box according to live telemetry, or telemetry is unavailable. Wrap a repeat nag's whole body in it so a nag that waited behind a longer line stays silent once the driver has corrected; unknown telemetry counts as still wrong, never as fixed.
Used by: pit-crew.pit-status-bad-angle-repeat
pitStatus.stillTooFarBack
The car is still too far back in the pit box according to live telemetry, or telemetry is unavailable. Wrap a repeat nag's whole body in it so a nag that waited behind a longer line stays silent once the driver has corrected; unknown telemetry counts as still wrong, never as fixed.
Used by: pit-crew.pit-status-too-far-back-repeat
pitStatus.stillTooFarForward
The car is still too far forward in the pit box according to live telemetry, or telemetry is unavailable. Wrap a repeat nag's whole body in it so a nag that waited behind a longer line stays silent once the driver has corrected; unknown telemetry counts as still wrong, never as fixed.
Used by: pit-crew.pit-status-too-far-forward-repeat
pitStatus.stillTooFarLeft
The car is still too far left in the pit box according to live telemetry, or telemetry is unavailable. Wrap a repeat nag's whole body in it so a nag that waited behind a longer line stays silent once the driver has corrected; unknown telemetry counts as still wrong, never as fixed.
Used by: pit-crew.pit-status-too-far-left-repeat
pitStatus.stillTooFarRight
The car is still too far right in the pit box according to live telemetry, or telemetry is unavailable. Wrap a repeat nag's whole body in it so a nag that waited behind a longer line stays silent once the driver has corrected; unknown telemetry counts as still wrong, never as fixed.
Used by: pit-crew.pit-status-too-far-right-repeat
qualifying.tailIsSpeakable
The qualifying session is lap-limited and the laps-left count is known, so a laps-left tail can follow the invalidated line. False in time-limited qualifying, where a lap count means nothing.
Used by: pit-crew.qualifying-invalidation-lap-invalidated
raceStatus.isLeading
The driver is leading at speak time — first overall, or first in class in a multi-class race. The bundled script speaks the still-leading line instead of the position readout when this holds.
Used by: pit-crew.race-status
readback.fastRepairQueued
The car is damaged, the series offers fast repair, and fast repair is queued. False on a clean car, so nothing is said about repairs then.
Used by: pit-crew.pit-readback-entry, pit-crew.pit-readback-exit
readback.fastRepairSkipped
The car is damaged, the series offers fast repair, and fast repair is NOT queued — worth warning the driver about. False on a clean car, so nothing is said about repairs then.
Used by: pit-crew.pit-readback-entry, pit-crew.pit-readback-exit
readback.fuelQueued
Fuel is queued for the stop.
Used by: pit-crew.pit-readback-entry, pit-crew.pit-readback-exit
readback.hasAnyService
At least one service is queued: fuel, any tire, a compound change, fast repair on a damaged car in a series that offers it, or a windshield clean. When false the bundled script plays the empty-fallback line alone instead of a string of negatives.
Used by: pit-crew.pit-readback-entry, pit-crew.pit-readback-exit
readback.isFirstEntry
This is the initial pit-lane entry, not a mid-lane refire after the driver changed the queue — the carrier sentence (the opener) is worth speaking only once.
Used by: pit-crew.pit-readback-entry
readback.limiterReminderDue
The car has a pit limiter and it is not engaged on the initial pit-lane entry, so a reminder is due before the readback. Never true on a mid-lane refire, on the exit readback, or on a car without a limiter.
Used by: pit-crew.pit-readback-entry
readback.windshieldQueued
A windshield clean is queued. Only the positive is ever worth speaking: open-wheel cars have no windshield and telemetry cannot tell, so there is no negative line.
Used by: pit-crew.pit-readback-entry, pit-crew.pit-readback-exit
session.isPractice
The current session is a practice session.
Used by: no bundled entry — available to a pack all the same
session.isQualifying
The current session is a qualifying session (open or lone).
Used by: no bundled entry — available to a pack all the same
session.isRace
The current session is a race session (anything that is not practice or qualifying).
Used by: no bundled entry — available to a pack all the same
setupWarning.qualifyingMismatch
The session is qualifying and the loaded setup's name looks like a race setup, per the driver's setup-name patterns — worth a double-check-your-setup nudge. Never true in practice, and false when the warning is switched off or no pattern matches.
Used by: pit-crew.session-start
setupWarning.raceMismatch
The loaded setup's name looks like a qualifying setup at the start of a race, per the driver's setup-name patterns — worth a double-check-your-setup nudge. False when the warning is switched off or no pattern matches.
Used by: pit-crew.race-start