Skip to content

Vocabulary

Everything a callouts.json may reference by name, and nothing else: the variables a step plays, the conditions an if branches on, and the cases a case step maps. All three are registered in iRaceDeck’s code with the descriptions you read here; a script names them and can never define one. A name that is not on this page is an unknown reference, and an entry that uses one is skipped when the script is compiled, with the name in the log.

Used by lists the callouts whose entries in the reference voice — default, the one iRaceDeck publishes — name the item, included fragments walked — it links to the callout reference, where you can see the entry that uses it. An item no entry there uses is still yours to use. The vocabulary is published generously on purpose: it is exactly what bounds the phrasings a pack can express, so if a phrasing you want has no variable or case here, that is a request to make rather than a workaround to find.

This page is generated from the code, and a test fails when the two drift apart, so it matches the release it documents.

60 variables, 31 conditions and 11 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.

{{caution.followCarNumber}}

The car number you line up behind under caution, spoken from the car-number group exactly as the sim spells it — "09" and "9" are different clips. Null while the pace car is the only thing ahead of you, and while the field carries no readable lineup, so branch on caution.followsPaceCar before naming it. Nothing to say is common rather than exceptional here, so keep the number in an optional clause with the words that introduce it: a null var in a required step aborts the whole callout, silently and at debug level, and the driver hears nothing at all. Where the callout must still say SOMETHING without the number — one lap to green, above all — branch on caution.hasFollowCarNumber and give the other branch a numberless wording.

Used by: pit-crew.caution-field-caught, pit-crew.caution-follow, pit-crew.caution-lineup-changed, pit-crew.caution-one-to-go

{{caution.racePosition}}

Your race position at the moment the call is spoken, from the canonical live running order — the number your display shows, in your class in a multi-class race — spoken from the position-number group, which stops at 64; a position past that is null, since there is no clip to say it with. This is what the position call on the last caution lap speaks. It is not your place in the restart lineup (caution.restartPosition): a lapped car lined up ahead of you is behind you in the race, and the two differ by exactly those cars. Null while the order cannot be read. Keep it in an optional clause with the words that introduce it: a null var in a required step aborts the whole callout, silently and at debug level. In the position call that clause IS the whole callout, and there that is right — a position call with no position has nothing true to say.

Used by: pit-crew.caution-position

{{caution.restartPosition}}

Your place in the restart LINEUP, spoken from the position-number group, which stops at 64 — a position past that is null, since there is no clip to say it with. Counted off the pace rows rather than the running order — that is what iRacing lines the field up by — and null whenever the rows carry no absolute position, which happens whenever session info cannot name the pace car. This is NOT the race position: a lapped car lined up ahead of you is behind you in the race, so a spoken "P" belongs to caution.racePosition, which is what the reference position call uses. Keep it in an optional clause with the words that introduce it: a null var in a required step aborts the whole callout, silently and at debug level.

Used by: no entry in the reference voice — available to a pack all the same

{{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.carNumber}}

The flagged car's number, spoken from the car-number group exactly as the sim spells it — "09" and "9" are different clips, and the car-number clips already say "car", so car-number/42 is "car forty-two". Resolves on the ahead and behind lines, never on the aggregate. Part of the sentence: a car the session cannot number, or a number the voice has no clip for, skips the whole line rather than leaving a gap — so a line that must be spoken regardless keeps a wording without it.

Used by: pit-crew.opponent-flag-black-ahead, pit-crew.opponent-flag-black-behind, pit-crew.opponent-flag-disqualify-ahead, pit-crew.opponent-flag-disqualify-behind, pit-crew.opponent-flag-furled-ahead, pit-crew.opponent-flag-furled-behind, pit-crew.opponent-flag-meatball-ahead, pit-crew.opponent-flag-meatball-behind

{{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. Kept for packs scripted against 3.3.0; the bundled pack names the car with opponentFlag.carNumber instead. Part of the sentence, so a number that cannot be resolved skips the whole line rather than leaving a gap.

Used by: no entry in the reference voice — available to a pack all the same

{{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 before iRacing has reported the session, 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, Celsius or Fahrenheit alike. Draws from the numbers-degrees clip group, whose lines carry the word degrees themselves and are recorded for -20 to 176 (below zero named minus1 to minus20); a reading the voice has no clip for aborts the clause it sits in.

Used by: pit-crew.race-start

{{raceStart.degreesUnit}}

Optional: the temperature unit's name alone, per the driver's display setting — composes after a numbers-degrees figure, which already says the word degrees, to make "twenty eight degrees, Celsius". Draws session-start/unit-celsius or session-start/unit-fahrenheit. The reference voice records neither and its script does not use it; a pack records both to have its engineer say the unit.

Used by: no entry in the reference voice — available to a pack all the same

{{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, Celsius or Fahrenheit alike. Draws from the numbers-degrees clip group, whose lines carry the word degrees themselves and are recorded for -20 to 176 (below zero named minus1 to minus20); a reading the voice has no clip for 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

{{readout.degreesUnit}}

Optional: the temperature unit's name alone, per the driver's display setting — composes after a numbers-degrees figure, which already says the word degrees, to make "twenty eight degrees, Celsius". Draws session-start/unit-celsius or session-start/unit-fahrenheit. The reference voice records neither and its script does not use it; a pack records both to have its engineer say the unit.

Used by: no entry in the reference voice — available to a pack all the same

{{readout.fuelDecimal}}

The tenths digit of that fuel figure together with its unit, recorded as one line ("point four liters.") — drawn from the numbers-fuel-decimal clip group, liters-0 to liters-9 and gallons-0 to gallons-9.

Used by: pit-crew.readout-fuel-average, pit-crew.readout-fuel-last-lap

{{readout.fuelNumber}}

The whole-number part of the fuel figure a Session Info key asked for, after rounding to a tenth, in the driver's display unit — drawn from the numbers-fuel clip group (0 to 120); a figure the voice has no clip for silences the callout.

Used by: pit-crew.readout-fuel-average, pit-crew.readout-fuel-last-lap

{{readout.laps}}

How many clean laps an average fuel readout covers — the laps actually averaged, fewer than the key's setting early in a stint — drawn from the readout-laps clip group (1 to 20), recorded as "lap," for one and "five laps," above.

Used by: pit-crew.readout-fuel-average

{{readout.tempNumber}}

The temperature a Session Info key asked for, track or air, as a whole number in the driver's display unit — drawn from the numbers-degrees clip group the session-start brief speaks, whose lines carry the word degrees and cover -20 to 176.

Used by: pit-crew.readout-air-temp, pit-crew.readout-track-temp

{{sessionStart.airTempNumber}}

The air temperature as a whole number in the driver's display unit, Celsius or Fahrenheit alike. Draws from the numbers-degrees clip group, whose lines carry the word degrees themselves and are recorded for -20 to 176 (below zero named minus1 to minus20); a reading the voice has no clip for aborts the clause it sits in.

Used by: pit-crew.session-start

{{sessionStart.degreesUnit}}

Optional: the temperature unit's name alone, per the driver's display setting — composes after a numbers-degrees figure, which already says the word degrees, to make "twenty eight degrees, Celsius". Draws session-start/unit-celsius or session-start/unit-fahrenheit. The reference voice records neither and its script does not use it; a pack records both to have its engineer say the unit.

Used by: no entry in the reference voice — available to a pack all the same

{{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, Celsius or Fahrenheit alike. Draws from the numbers-degrees clip group, whose lines carry the word degrees themselves and are recorded for -20 to 176 (below zero named minus1 to minus20); a reading the voice has no clip for 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

{{tireWear.heaviestTread}}

The remaining tread on the most-worn tire from the tire-wear report as a whole percent — the lowest of all twelve zone readings, rounded — spoken by the numbers-percent clip group, whose lines carry the word percent themselves, and nothing outside that report.

Used by: no entry in the reference voice — available to a pack all the same

{{tireWear.leftFrontTread}}

The left-front tire's remaining tread from the tire-wear report as a whole percent — the lowest of its three zones, rounded — spoken by the numbers-percent clip group, whose lines carry the word percent themselves, and nothing outside that report.

Used by: pit-crew.tire-wear-report

{{tireWear.leftRearTread}}

The left-rear tire's remaining tread from the tire-wear report as a whole percent — the lowest of its three zones, rounded — spoken by the numbers-percent clip group, whose lines carry the word percent themselves, and nothing outside that report.

Used by: pit-crew.tire-wear-report

{{tireWear.rightFrontTread}}

The right-front tire's remaining tread from the tire-wear report as a whole percent — the lowest of its three zones, rounded — spoken by the numbers-percent clip group, whose lines carry the word percent themselves, and nothing outside that report.

Used by: pit-crew.tire-wear-report

{{tireWear.rightRearTread}}

The right-rear tire's remaining tread from the tire-wear report as a whole percent — the lowest of its three zones, rounded — spoken by the numbers-percent clip group, whose lines carry the word percent themselves, and nothing outside that report.

Used by: pit-crew.tire-wear-report

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.

caution.hasFollowCarNumber

The car ahead of you in your line can be named — caution.followCarNumber would resolve. False while the pace car is the only thing ahead (ask caution.followsPaceCar for that), while the field carries no readable lineup, and when the session cannot spell the car's number. The condition to branch on when a callout must still speak without the number: the one-lap-to-green call says a plain "One lap to green." in the other branch rather than nothing, because an optional clause alone expands to an empty callout and the driver hears no warning at all.

Used by: pit-crew.caution-follow, pit-crew.caution-lineup-changed, pit-crew.caution-one-to-go

caution.isDoubleFile

The field is lined up in two columns rather than one. iRacing re-forms the field double file on the tick before the one-to-go flag when the restart is a double-file one.

Used by: no entry in the reference voice — available to a pack all the same

caution.isLeader

You would restart first. Not the same as having only the pace car ahead of you, which is true of both front cars on a double-file restart — that is caution.followsPaceCar.

Used by: pit-crew.caution-one-to-go

flag.furledStillShown

The furled black flag is still being shown (a pure read — the engine already asks this at speak time and marks the raise as announced when the call plays).

Used by: no entry in the reference voice — available to a pack all the same

flag.furledWithdrawn

An announced furled flag has been withdrawn and nothing worse took its place (a pure read — the engine already asks this at speak time and consumes the announcement when the call plays).

Used by: no entry in the reference voice — available to a pack all the same

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. The engine already asks this at speak time (it is the warning's own gate), so wrapping the body in it changes nothing; it is here for a pack that wants the warning silent on its own terms. False on a car without a limiter or when telemetry is unavailable.

Used by: no entry in the reference voice — available to a pack all the same

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. The engine already asks this at speak time (it is the warning's own gate), so wrapping the body in it changes nothing; it is here for a pack that wants the warning silent on its own terms. False on a car without a limiter or when telemetry is unavailable.

Used by: no entry in the reference voice — available to a pack all the same

pitStatus.stillBadAngle

The car is still at a bad angle in the pit box according to live telemetry, or telemetry is unavailable. The engine already asks this at speak time — it is the nag's own gate — so wrapping a nag's body in it changes nothing; it is here for a pack that wants a nag silent on its own terms. Unknown telemetry counts as still wrong, never as fixed.

Used by: no entry in the reference voice — available to a pack all the same

pitStatus.stillTooFarBack

The car is still too far back in the pit box according to live telemetry, or telemetry is unavailable. The engine already asks this at speak time — it is the nag's own gate — so wrapping a nag's body in it changes nothing; it is here for a pack that wants a nag silent on its own terms. Unknown telemetry counts as still wrong, never as fixed.

Used by: no entry in the reference voice — available to a pack all the same

pitStatus.stillTooFarForward

The car is still too far forward in the pit box according to live telemetry, or telemetry is unavailable. The engine already asks this at speak time — it is the nag's own gate — so wrapping a nag's body in it changes nothing; it is here for a pack that wants a nag silent on its own terms. Unknown telemetry counts as still wrong, never as fixed.

Used by: no entry in the reference voice — available to a pack all the same

pitStatus.stillTooFarLeft

The car is still too far left in the pit box according to live telemetry, or telemetry is unavailable. The engine already asks this at speak time — it is the nag's own gate — so wrapping a nag's body in it changes nothing; it is here for a pack that wants a nag silent on its own terms. Unknown telemetry counts as still wrong, never as fixed.

Used by: no entry in the reference voice — available to a pack all the same

pitStatus.stillTooFarRight

The car is still too far right in the pit box according to live telemetry, or telemetry is unavailable. The engine already asks this at speak time — it is the nag's own gate — so wrapping a nag's body in it changes nothing; it is here for a pack that wants a nag silent on its own terms. Unknown telemetry counts as still wrong, never as fixed.

Used by: no entry in the reference voice — available to a pack all the same

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

raceStart.wetnessKnown

iRacing has reported the track wetness. The brief waits up to ten seconds after a session change for it; false when it still has not, so say the conditions are unknown. Put only the wetness clause under it.

Used by: pit-crew.race-start

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.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.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

session.isPractice

The current session is a practice session.

Used by: no entry in the reference voice — available to a pack all the same

session.isQualifying

The current session is a qualifying session (open or lone).

Used by: no entry in the reference voice — 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 entry in the reference voice — available to a pack all the same

sessionStart.wetnessKnown

iRacing has reported the track wetness. The brief waits up to ten seconds after a session change for it; false when it still has not, so say the conditions are unknown. Put only the wetness clause under it.

Used by: pit-crew.session-start

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

tireWear.hasWear

At least one tire in the tire-wear report reads below one hundred percent as a whole number, so a heaviest-wear sentence names real wear rather than a tie-break between untouched tires.

Used by: pit-crew.tire-wear-report

Cases

A case resolves at fire time to one of its declared keys, and a case step maps keys to steps: { "case": "name", "of": { "key": [ … ], "default": [ … ] } }. A key not in of takes the default branch, or plays nothing when there is none; several keys may map to the same line, and a key may map to [] to say nothing about it. A key that is not declared below is refused when the script is compiled.

caution.line

Which lane you line up in. Only ever answered on an oval running double file — on any other discipline, and single file, there is no lane to name and the default branch runs.

inside
You line up in the inside lane.
outside
You line up in the outside lane.

Used by: pit-crew.caution-lineup-changed, pit-crew.caution-one-to-go

overtake.gainedReaction

Which reaction a gained overtake earns: a podium place (first, second or third) taken overall or in class, or any other position. Exactly one key applies per pass.

leader
The pass took the overall lead of a single-class race.
leader-class
The pass took the class lead in a multi-class race.
p2
The pass put the driver second overall in a single-class race.
p2-class
The pass put the driver second in class in a multi-class race.
p3
The pass put the driver third overall in a single-class race — onto the podium.
p3-class
The pass put the driver third in class in a multi-class race.
other
Any other position — the plain nice-pass line; the position itself follows in the separate readout.

Used by: pit-crew.overtake-gained

position.readoutShape

Which shape the position readout takes for the lap just completed: an invalidated qualifying lap, a lap that put the driver on pole, or the standard intro and number. Exactly one applies per lap; the invalid-lap shape takes precedence.

invalid-lap
A qualifying lap iRacing did not count (track limits, a pit-lane violation) — the didn't-count line, then the current position with the plain intro; never the pole line or the better framing.
pole
An improvement to first place in qualifying — the lap put the driver on pole, said as one self-contained line with no number.
standard
Any other readout — the intro (that-puts-us-to for a gain in qualifying, we're-currently otherwise) and the position number.

Used by: pit-crew.position-change

qualifying.lapsLeft

How many counted qualifying laps remain after the invalidated one: none, one to five by count, or plenty above that. Only meaningful when qualifying.tailIsSpeakable holds.

1
One lap left.
2
Two laps left.
3
Three laps left.
4
Four laps left.
5
Five laps left.
out-of-laps
No qualifying laps left — the invalidated lap was the last counted attempt.
plenty
Six or more laps left — more than the counted clips name, so the bundled script reassures rather than counts.

Used by: pit-crew.qualifying-invalidation-lap-invalidated

raceEnd.result

How the race ended for the driver — won, second, third, or fourth or worse — judged on the class position in a multi-class race and the overall position otherwise. Exactly one key applies per finish.

won
Finished first — or first in class in a multi-class race.
second
Finished second (in class, in a multi-class race).
third
Finished third (in class, in a multi-class race) — the last podium step.
other
Finished fourth or worse — the bundled script reads the result-is line and the position number.

Used by: pit-crew.race-end

raceStart.gridPosition

Where the driver starts the race: from pole, from a known position to read out, or unknown. Exactly one key applies per start.

pole
Starting from pole — the driver qualified first.
composed
A known grid position of second or worse, to read out with raceStart.position — a position the voice has no number clip for aborts the clause.
none
No usable grid position — say nothing about the grid.

Used by: pit-crew.race-start

readback.tirePattern

Which tires, or which compound change, are queued for the stop. A compound change covers all four tires and takes precedence over the corner pattern; exactly one key applies per snapshot.

compound-dry
A compound change to dry — covers all four tires, so no corner pattern applies.
compound-wet
A compound change to wet — covers all four tires, so no corner pattern applies.
all
All four tires.
fronts
Both fronts only.
rears
Both rears only.
lefts
Both left-side tires only.
rights
Both right-side tires only.
lf-rr
The left-front and right-rear diagonal.
rf-lr
The right-front and left-rear diagonal.
skip-lf
Three corners — every tire except the left-front.
skip-rf
Three corners — every tire except the right-front.
skip-lr
Three corners — every tire except the left-rear.
skip-rr
Three corners — every tire except the right-rear.
lf
The left-front only.
rf
The right-front only.
lr
The left-rear only.
rr
The right-rear only.
none
No tire change and no compound change queued.

Used by: pit-crew.pit-readback-entry, pit-crew.pit-readback-exit

tireWear.heaviestCorner

Which tire the tire-wear report found the least tread left on, whatever the zone.

lf
The left-front tire.
rf
The right-front tire.
lr
The left-rear tire.
rr
The right-rear tire.

Used by: no entry in the reference voice — available to a pack all the same

tireWear.heaviestSpot

Where the tire-wear report found the least tread left, as the tire and the zone of its tread together (lf-inside … rr-outside); ties go to the first tire front to rear, left before right, then inside before middle before outside.

lf-inside
The inside shoulder of the left-front tire, the edge nearer the car's centerline.
lf-middle
The middle of the left-front tire's tread.
lf-outside
The outside shoulder of the left-front tire, the edge farther from the car's centerline.
rf-inside
The inside shoulder of the right-front tire, the edge nearer the car's centerline.
rf-middle
The middle of the right-front tire's tread.
rf-outside
The outside shoulder of the right-front tire, the edge farther from the car's centerline.
lr-inside
The inside shoulder of the left-rear tire, the edge nearer the car's centerline.
lr-middle
The middle of the left-rear tire's tread.
lr-outside
The outside shoulder of the left-rear tire, the edge farther from the car's centerline.
rr-inside
The inside shoulder of the right-rear tire, the edge nearer the car's centerline.
rr-middle
The middle of the right-rear tire's tread.
rr-outside
The outside shoulder of the right-rear tire, the edge farther from the car's centerline.

Used by: pit-crew.tire-wear-report

tireWear.heaviestZone

Which zone of the most-worn tire's tread the tire-wear report found the least tread left in, named from the car's centerline so inside is the same shoulder on either side.

inside
The inside shoulder — the edge of the tread nearer the car's centerline.
middle
The middle of the tread.
outside
The outside shoulder — the edge of the tread farther from the car's centerline.

Used by: no entry in the reference voice — available to a pack all the same