Skip to content

LED Names & Model LEDs

Name LEDs by physical place so one pattern works across a fleet, and author a discoverable LED layout into the vehicle model itself.

An LED's name drives HUD display and pattern targeting. Follow this standard and a pattern written for one car works on the next. Set names per LED in the Editor.

Format

[ZONE][FACE?][SIDE?][NUM]
PartDescription
ZONE2–4 letter zone code, from the tables below
FACEOptional F (forward) or R (rear), only where the zone has multiple faces
SIDEOptional L or R, only for physically separate side-facing units
NUMSequential, starting at 1
  1. All uppercase, no spaces, no symbols.
  2. Forward and rearward lights use sequential numbers only, no L/R suffix — RD1, RD2, LBF1, LBF2.
  3. Side-facing lights take an L/R suffix — MRL, MRR, SRL1, SRL2. Omit NUM when there is one per side: LBAL, not LBAL1.
  4. Names describe physical location only. Takedown, traffic advisor and alley lights are pattern behaviours, not names.
  5. Numbers count left to right from outside the vehicle — see Numbering direction.
  6. Numbering starts at 1. Start at 0 only to extend past the core — see Numbering beyond the core range.

Numbering direction

The observer stands outside looking in, so their left is not the vehicle's left every time.

FaceNames#1 sits on the vehicle's
Front-facingLBF#, FG#, FB#, DS#, FV#right
Rear-facingLBR#, RD#, RV#left
Right-side facingSRR#, DOR#rear
Left-side facingSRL#, DOL#front

Numbering beyond the core range

#1–#6 is the cross-vehicle core that patterns and the HUD target reliably. A face with more LEDs extends outward instead of renumbering: a rear lightbar with 8 LEDs uses LBR0–LBR7, keeping LBR1–LBR6 portable. A pattern silently skips a name the vehicle does not define.

Zone reference

Roof

CodeDescriptionExample
LBF#Lightbar, front faceLBF1, LBF2
LBR#Lightbar, rear faceLBR1, LBR2
LBAL / LBARLightbar alley left / right, side-facingLBAL
MBF# / MBR#Mini bar, front / rear faceMBF1, MBR1
MBAL / MBARMini bar alley left / rightMBAL
BK#Beacon / rotatorBK1

Front exterior

CodeDescriptionExample
FG#Front grilleFG1, FG2
FB#Front bumper / push bar, forward-facingFB1, FB2
FBL / FBRFront bumper side end caps, side-facingFBL, FBR
HD#Hood lightsHD1, HD2

Front interior (projects forward through the windshield)

CodeDescriptionExample
DS#Dash lights, low mountDS1, DS2
FV#Front visor lights, high mountFV1, FV2

Side

CodeDescriptionExample
MRL / MRRMirror lightsMRL, MRR
SRL# / SRR#Side runner lightsSRL1, SRR1
DOL# / DOR#Door lightsDOL1, DOR1
PIL / PIRPillar light sticks, B/C-pillarPIL, PIR

Rear interior (projects rearward through the rear glass)

CodeDescriptionExample
RD#Rear deck, low mountRD1, RD2
RV#Rear visor, high mountRV1, RV2

Rear exterior

CodeDescriptionExample
RB#Rear bumper faceRB1, RB2
RR#Rear runner, body/rocker perimeterRR1, RR2
RSP#Rear step pad lightsRSP1, RSP2
LPL / LPRLicense plate lightsLPL, LPR

Specialty

CodeDescriptionExample
SPL / SPRSpotlight, A-pillar or roof edgeSPL, SPR
SC#Scene / work lightsSC1, SC2
CAB#Cabin / interior dome lightsCAB1

HUD default LEDs

When no layout declares which LED names to show, the HUD resolves the first group below with at least one matching LED on the vehicle.

PriorityNames checkedTypical source
1stRD1 – RD6Rear deck lights
2ndRV1 – RV6Rear visor lights
3rdLBR1 – LBR6Lightbar rear face

Only LEDs that exist are shown — RD1, RD2, RD3 gives three indicators, not six. With none of these names present, the HUD shows all LEDs. A custom layout overrides this with its own data-hud-led bindings.

Out of scope

Factory light circuits — headlight and tail light flashers — are native vehicle lights, not placed LEDs. Do not invent names like HLF or TLF.

Model-defined LEDs

For vehicle modellers. Author named bones into your model and tELS reads the LED layout off the skeleton — no tels.json, no placement work for whoever installs the vehicle. A v1 embedded layout is discovered whenever the vehicle has no saved leds section.

  • You get geometry, not behaviour. Ship a patterns-only tels.json to light out of the box.
  • You export the bones by hand. Nothing is read from lightbar meshes, GTA siren lights, modelling empties or custom properties, and there is no modelling plugin.

Authoring contract: v1

Include a bone named tels_v1 to opt in; its placement is unused.

BoneMeaning
tels_led_001Centre of the LED rectangle. Its rotation defines the LED's frame
tels_led_001_rRight-edge midpoint, in the centre bone's positive local X
tels_led_001_uTop-edge midpoint, in the centre bone's positive local Z
  • Number each LED 001 through 064. Gaps are fine; never renumber during a revision
  • 64 is TELS_MAX_LEDS in config/render_config.lua. A server owner may raise it, but author against 64
  • The centre bone's +X points right, +Z points up, +Y points out of the lens. The edge markers cannot correct a wrong rotation
RuleDetail
Parenting_r and _u are children of the centre bone, with no independent animation. Parent the centre to whatever the LED follows — chassis, door, bonnet
PlacementPut the centre on the intended emitting surface. tELS adds no lens offset
DimensionsMetres. For a 0.10 m × 0.04 m rectangle, _r is at local (0.05, 0, 0) and _u at (0, 0, 0.02). sw and sh are half-extents, so that yields sw: 0.05, sh: 0.02
BoundsBoth half-extents between 0.005 m and 2 m. Off-axis error within the greater of 0.5 mm or 1% of the larger half-extent
LODsKeep every marker bone present and consistent across streamed variants and LODs
AnimationThe centre bone may move at runtime — that is how door and bonnet LEDs work — but animated LED dimensions are not supported

What gets skipped

A failed set is skipped and named in the client console (F8); the rest still loads.

Cause
An incomplete set — a centre bone with no _r, or no _u
Non-finite coordinates, reversed axes, or a degenerate size
An edge marker not aligned on the axis it belongs to
A marker numbered above the server's TELS_MAX_LEDS

A vehicle that streams in without its skeleton ready is retried at most once every five seconds, so a transient failure is not permanent. The editor forces a fresh scan.

Stable pattern identities

An embedded LED's ID and initial name are both its centre bone name, such as tels_led_001, and its initial group is Model LEDs.

  • Renaming or removing a marker breaks references to its old identity
  • A new marker takes an unused number

A patterns-only tels.json references them without repeating placement:

json
{
  "example_vehicle": {
    "patterns": [
      {
        "name": "Example flash",
        "fps": 4,
        "colors": [{ "r": 255, "g": 0, "b": 0, "a": 1 }],
        "frames": [
          { "duration": 1, "cells": { "tels_led_001": 1 } },
          { "duration": 1, "cells": {} }
        ]
      }
    ]
  }
}

Declare it in the vehicle resource, using your model's real spawn name in place of example_vehicle:

lua
tels_config 'tels.json'

Do not include leds: [] in a patterns-only config — an explicit empty array deliberately disables the embedded layout.

Saved layout precedence

ConfigResult
No leds fieldUse the model layout, if present
Explicit leds array, including []Use that array exclusively. Never merged with model geometry
No valid model layoutThe existing manual placement workflow

An ordinary editor save stores a full explicit layout overriding the model geometry. Your model file is never written to.

  • The box icon — Import missing model-defined LEDs in the Lights tab appends only markers whose ID or centre-bone attachment is absent, keeping existing edits and patterns and respecting the LED cap. It persists only when you save
  • To restore one marker, delete that LED and import it again
  • Updating the model does not clear a saved override. The only way back to automatic placement is to back up the config and remove its leds section

Extras, modkits and appearance

Version 1 embeds placement, orientation and size only. Extra and modkit visibility, livery restriction, texture and group are not inferred — set those in the editor and save an explicit layout.

Legacy and Enhanced

The same markers work on both generations.

Still stuck? Support can answer it directly.

Was this page helpful?