Skip to content

Editor

Configure a vehicle in game with /telsedit — LEDs, patterns, trigger rules, sirens and ERS pullover support.

/telsedit opens the editor while you are in a vehicle, any seat. It needs the tlib.admin ACE and writes to data.json.

#TabWhat you do there
1LightsPlace or auto-generate the LEDs with a 3D gizmo
2PatternsArrange them into frame-by-frame sequences, previewed live
3RulesCompound conditions that drive patterns, stages and sirens
4SirensTone slots, airhorn, rumbler, chirp, horn flags
5Vehicle behaviorPark kill, suspend flags, spawn extras, per-vehicle sound overrides
6MarketplaceImport patterns and setups other people published

Enter saves every tab at once. Escape cancels. Alt+1…Alt+6 jump to a tab — Alt, not Ctrl, which is a camera view. ? opens the shortcut sheet.

Camera controls

InputAction
Middle or Right dragOrbit
Shift + dragPan
Ctrl + dragDolly
Scroll wheelZoom
HomeFrame the whole vehicle

Left mouse stays free for the gizmo.

Numpad camera

Blender's convention, on the Lights tab.

NumpadAloneWith Ctrl
8 / 2Orbit up / downPan up / down
4 / 6Orbit left / rightPan left / right
1Front viewBack view
3Right viewLeft view
7Top viewBottom view
9Flip the view 180°—
5Perspective / orthographic—
.Focus the selection—
+ / −Zoom in / out—

Fly camera

The camera button at the bottom of the left toolbar toggles fly camera: WASD moves, right-drag looks. W, A, S, D, Q and E then belong to the camera, suspending the gizmo and LED shortcuts.

Lights tab

ButtonDoes
PlusAdd one LED
FlipMirror the selection (Shift+M)
SirenCreate LEDs from the vehicle's siren bones
BoxImport missing model-defined LEDs, keeping the ones you have
WandAuto-attach every LED to its nearest moveable bone — door, bonnet or boot
TrashDelete the selection (Delete)

To bone only some LEDs, select them and use Auto-detect on the properties panel's Bone row instead of the wand.

Click an LED in the viewport or the list to select it. Shift+click range-selects, Ctrl+click toggles one.

  • A vehicle with embedded tELS LED markers fills this tab on its own
  • Any saved layout wins over the model's, including one saved empty
  • To restore one model LED, delete it and re-import

LED properties

PropertyDescription
Position x, y, zLocal offset from the chassis, or from bone if set
Rotation yaw, pitch, rollDegrees. Drives directional bloom and corona output
Size sw, shSurface width and height in metres
NameUppercase A-Z and 0-9 only, e.g. LBF1. Lowercase is capitalised, spaces and symbols dropped, on leaving the field. See LED naming
GroupsTags for bulk selection and filtering. Traffic-advisor and side-specific patterns select on these
BoneOptional, e.g. siren1, door_dside_f. Position and rotation are then read in that bone's frame, so door, hood and trunk LEDs move with the part
Shaperect (default) or circle
Bloomsprite (default), corona or both. The last two each draw one extra game corona per lit LED
SurfaceWhich texture the lens face uses — below
ExtraGTA extra ID (1–12). The LED renders only when that extra is enabled
ModkitModkit index (0–9). The LED renders only while the vehicle wears it

What the vehicle costs to light

Two choices on this tab decide what every player pays for your vehicle. What is drawn scales with the LEDs lit on the current frame, not the LEDs configured.

ChoiceCost
How many LEDs you placeUp to TELS_MAX_LEDS, 64 by default, after which the rest never light and the console names the model. Most lightbars read correctly with fewer modules than builders tend to place
Bloom corona or bothOne extra game corona per lit LED. both draws that corona and the full layer stack

An Arges spotlight head costs one extra LED. The two render-quality tiers a player picks are in Usage → Render quality; the cap itself is TELS_MAX_LEDS.

Surface textures

ModeWhat it drawsFields
GenA procedural dot grid, per LED (default)Col (default 6), Row, Sz (0.05–0.9, default 0.3), Fth feather (0.05–0.9, default 0.55)
tELSThe built-in tELS/client/led.png—
ResA led.png from a vehicle resourceWhich resource
YTDA texture from a game texture dictionaryDict (e.g. police) and Tex

Row defaults to 1 when Col is 4 or fewer, 2 above that.

Custom LED textures

A vehicle resource supplies its own LED sprite from its fxmanifest.lua. Select it per LED with Surface → Res; the list reads No resources with tels_led_png declared when none has.

lua
tels_led_png 'textures/my_led.png'
files { 'textures/my_led.png' }

Identity

Editor-created LEDs carry a generated UUID; model-defined LEDs keep their tels_led_NNN marker identity. Pattern cells map to those IDs and exported patterns may use LED names, so keep both stable across revisions.

Multi-select

Move, rotate and scale together, or batch-edit any shared property.

ShortcutAction
W / R / SGizmo to translate, rotate or scale
XWorld-space / local-space gizmo
Q / EPrevious / next LED
Shift+DDuplicate
Shift+MMirror around the vehicle's centreline
Delete / BackspaceRemove
Ctrl (held)Temporarily toggle grid snap

W, Q and E are suspended under fly camera.

Global, all tabs:

  • Ctrl+Z undo · Ctrl+Y or Ctrl+Shift+Z redo
  • Alt+1…Alt+7 switch tab · ? shortcut sheet
  • Enter save and exit · Escape cancel and exit
  • None fire while the caret is in a text field

Arges tab

Patterns tab

A grid sequencer — columns are frames, rows are LEDs — previewed live on the vehicle. Space plays and pauses.

The pattern list on the left takes the keyboard as well as the mouse: Tab into it, then ↑/↓ (and Home/End) to choose a pattern and F2 to rename the one selected. Double-clicking a row renames it too.

Add the pattern

Add Pattern in the sidebar.

Set the FPS

1 to 30. Frame durations are ticks at this rate, so at 10 FPS duration: 1 is 100 ms.

Define the palette

RGB, optional alpha, a name. Cell values index into it.

Paint cells

Click cells to assign colours, 0 for off. Mark a cell dimmable to interpolate into the next frame instead of snapping; the ~ button dims a whole frame row.

Import from carcols.meta

carcols… in the toolbar opens an importer.

  • Paste a vehicle's carcols.meta and pick one of the siren sets it declares
  • tELS converts that set's sequences, flash rate, phase offsets and per-head colours into an editable pattern, clamped to 1–30 FPS. It is a conversion, not a link

Pattern options

Under Advanced behavior in the pattern sidebar.

OptionEffect
Trigger OnlyHidden from 9/0 cycling. Only a trigger action starts it
Sync NearEvery client locks the frame index to a server clock. For synchronised fleet patterns
GTA LightsHolds GTA's native emergency-lights flag, which drives the red-blue environment tint
High BeamsHolds high beams on
LiveryRestricts the pattern to one livery index. Omit for any
ModkitApplies a modkit while active, restoring the previous one on stop
ExtrasForces extras (1–12) on or off while active, restoring each on stop
ModsApplies a mod type plus a slot index, -1 for stock, restoring on stop

Show unfitted LEDs, above the disclosure, is an unsaved view toggle: off, the preview hides LEDs whose extra or modkit is not fitted; on, every LED draws.

Rules tab

Each rule is IF a compound of conditions is true, THEN run actions, in list order. Join conditions with AND or OR, and toggle NOT on any one of them.

Where two rules overlay a pattern onto the same LED, the one further down the Patterns list paints on top. Dragging triggers changes nothing; reorder the patterns.

HOLD: engage and release delays

Stops a rule flickering on a threshold — 15 mph exactly, a barely-touched brake, a bouncing door.

FieldEffect
engageConditions must stay true this long, in ms, before the rule turns on
releaseConditions must stay false this long before it turns off

Both default to 0 and are set independently.

  • engage 2000 / release 0 — flash only once a door has been open two seconds, and stop the moment it shuts
  • engage 0 / release 3000 — flash instantly, and keep going three seconds after the condition clears
  • A delay restarts from zero if the conditions flip back

Condition reference

Lights and stages

ConditionFires when
lights_onEmergency lights active
stage_1 / stage_2 / stage_3Vehicle is at that stage
park_killDriver exited with sirens running
chirpingChirp tone playing
custom_patternLights on and the base pattern is not the target of any pattern_set rule carrying a stage condition

Audio

ConditionFires when
sirenAny siren active — main, aux or burst
main_siren_on / aux_siren_onThat channel active
rumblerRumbler variant playing
airhornAirhorn playing
horn_tapHorn tapped, under 400 ms
horn_double_tapTwo taps within 600 ms
horn_holdHeld over 500 ms
siren_tone_1 … siren_tone_8Main siren on that tone

Modes

ConditionFires when
cruiseCruise on
takedownTakedown on
blackoutRunning dark
ta_left / ta_right / ta_centerTraffic advisor in that direction

blackout is a suppressor, not a switch:

  • lights_on stays true under it, so a rule that should fire only when the vehicle is visible needs lights_on and a negated blackout
  • An LED overlay driven by a blackout rule is never seen. Use it for siren tone, rumbler, chirp or a HUD state

Vehicle state

ConditionFires when
engine_on / engine_offEngine running / stopped
stationaryUnder 2 mph
speed_15 / speed_30 / speed_60 / speed_90Above that mph
headlights / highbeamOn
day / nightnight = 20:00–05:59, day = 06:00–19:59

Controls

ConditionFires when
brakeBrakes applied, with a driver aboard
handbrakeHandbrake engaged
reverseReverse gear and actually moving backward
turn_left / turn_rightThat signal flashing
hazardsBoth signals flashing. Also satisfies turn_left and turn_right, so add it negated for a genuine single-side rule

Doors

ConditionFires when
door_fl / door_fr / door_rl / door_rrThat door open
hood / trunkOpen
any_door_openAny of the above
locked / unlockedVehicle locked / unlocked

Steering and transmission

ConditionFires when
steer_left / steer_rightWheel turned more than 15° that way
rpm_25 / rpm_50 / rpm_75RPM above 25%, 50% or 75%
gear_1 … gear_6In that gear

Health and occupancy

ConditionFires when
vehicle_damagedBody health under 900
flippedUpside-down
driver_in_vehDriver seat occupied
passenger_front / passenger_rearThat seat occupied
any_passengerAny passenger seat occupied
presencePresence armed, and an on-foot player who is not another tELS owner within 5 m
presence_modePresence armed, owner more than 5 m away, vehicle locked

Action types

ActionEffect
pattern_overlayLayer a pattern over the base while the rule is true
pattern_setSwitch the base pattern. Rising edge
stage_setActivate stage 1–3. Rising edge
main_siren_set / aux_siren_setStart that channel on a specific tone
siren_overlayPlay a tone while the rule is true; stops on false
siren_next_tone / siren_prev_toneCycle the main siren's tone
park_chirpStart or stop chirp, rising edge. Chirp is a latch: it repeats until something stops it. Set the action's chirp toggle off to make the rule stop chirp instead
chirp_overlayChirp while the rule is true. Several rules may hold it; it stops when the last releases
chirp_stopStop an in-progress chirp, rising edge. Not in the Add Action list — set it by hand in data.json
horn_play_airhornAirhorn while the rule is true, respecting horn interrupt
horn_play_vehicle_hornNative vehicle horn while the rule is true
arges_on / arges_off / arges_sweepSpotlight. Inert in this build
ers_pulloverBriefly sets GTA's native emergency-lights flag, visual only, rising edge. See ERS pullover support

Rising edge vs held.

  • pattern_set, stage_set, park_chirp and ers_pullover fire once, as the rule becomes true, and what they set stays set
  • pattern_overlay, siren_overlay and horn_play_airhorn run while it is true and stop on false

ERS pullover support (night_ers)

night_ers detects a pullover from GTA's native emergency-lights flag. tELS renders its own lighting and never sets that flag, so add an ers_pullover action, which blips it on the rising edge of whatever conditions you attach — typically stage_2, siren, or both.

Add Trigger, set those conditions, then Add Action → ers_pullover, then Enter. In data.json that is one triggers[] entry:

json
{
  "id": "a1b2c3d4e5f6a7b8",
  "conditions": ["stage_2"],
  "negated": [false],
  "operator": "and",
  "enabled": true,
  "actions": [{ "type": "ers_pullover" }]
}

The blip window defaults to 500 ms. Override it only for a detector that needs longer:

json
{ "type": "ers_pullover", "durationMs": 800 }

durationMs is floored at 300 ms — a smaller number is raised, not used. A shorter blip is missed outright.

Across a fleet, configure the trigger once on your primary model and reference it from the others, in each one's triggers[]:

json
{ "$ref": "police4", "triggerId": "a1b2c3d4e5f6a7b8" }

Sirens tab

Tone slots

Up to 8.

PropertyDescription
NameDisplay name — "Wail", "Yelp", "Priority"
SoundVanilla GTA sound string, e.g. VEHICLES_HORNS_SIREN_1
Server Sound / Server Sound RefServer-bundled audio, used when Server-sided Sirens is on in /tels
Rumbler Sound / Rumbler Server SoundAlternates while the rumbler is on. Main siren only
EnabledOff slots are skipped by every lookup
Trigger OnlySkipped by R, 1–8 and cycling. Trigger actions still reach it

Airhorn, horn and chirp

Separate vanilla, server and rumbler-server fields for the airhorn, falling back to SIRENS_AIRHORN.

SettingDefaultDescription
Horn InterruptOnMain siren pauses while the airhorn plays, resuming on release
Use Normal HornOnE plays the native horn with lights off. Off makes the airhorn play regardless
Programmable HornOffSuppress the default audio and the interrupt, driving the horn from horn_tap, horn_hold and horn_double_tap rules
Chirp Tone1Which tone slot the park chirp plays
Play Full Siren (chirpByCode)OffHold the tone for as long as chirp is on, instead of repeating 75–125 ms blips every 4–6 seconds

Livery sound profiles

Sound profile → Default / Any livery holds the normal sounds. Enter a zero-based livery index and click Add livery to override its sounds. Unmatched liveries use the default; a new profile inherits until edited.

Profiles changeTone, rumbler and airhorn sounds only
Always sharedSlot numbers, names, enabled and trigger-only flags, the chirp slot, vehicle behaviour. Edit those in Default; removing a default slot removes its override everywhere
Use default soundsClears a profile's overrides. Deleting the profile restores the default entirely
In gameChanging the livery updates playing sirens and airhorns within roughly 250 ms, leaving the stage, tone slot and on/off state alone
Audio packsMust be installed and started for every profile that uses them

Selecting a profile edits configuration; it does not change the vehicle's livery.

Custom siren packs

Server Sound Ref takes any SoundSet name, but tELS only plays one whose audio bank it knows — its own pack, WM-ServerSirens and OISS. Every other pack needs its own mapping, or its sirens are silent.

Vehicle behavior tab

Flags for the vehicle you are editing. The three horn flags live on Sirens.

SettingDefaultDescription
Park KillOnSirens stop when the driver exits, and park_kill fires
Lights Suspend TAOnTraffic advisor suspends when lights activate
Lights Suspend TakedownOnTakedown suspends when lights activate
No User ControlsOffDisables every tELS keybind on this vehicle. GTA's own horn, radio wheel and cinematic camera stay available
Disabled Extras—Comma-separated extra IDs (1–12) forced off

Sound overrides

Which installed file plays for each tELS event on this model — Lights On, Lights Off, Tone Change, Airhorn, Chirp. Each row shows the server-wide mapping it inherits; choose a file to override it, or Inherit to drop back.

Set the server-wide mappings in /tels → Sounds, which needs the tlib.admin ACE.

Marketplace tab

The public catalogue of LED configs, patterns and whole vehicle setups, with a filter chip per kind, a search box and four sort orders.

Sub-tabShows
BrowseEverything published, filtered and sorted by the toolbar
InstalledWhat you imported, from your own client storage
  • Browsing and previewing are rate limited per player, so several previews in one breath can return "too many requests"
  • An import lands in the open vehicle as a draft edit: Enter saves it, Escape throws it away

LED configs

  • Pick the LED configs chip, or the button in the Light placement header, which opens this tab already filtered
  • Publish one from that header button with Share LED layout. No name is asked for — the listing is keyed to this vehicle's fingerprint and labelled with the model, so it finds the same car on another server
  • Once it is published, the button becomes Update and Un-share. Update replaces the listing in place, so it keeps its id and its import count; Un-share takes it out of the catalogue and cannot be undone — publishing again starts a new listing
  • Older listings, published before in-game editing existed, can only be re-shared as a new listing. The panel says so when that is the case

Sharing one pattern

Select the pattern, then press Share "<name>" at the top of the Patterns tab. One click, and it publishes under the pattern's own name — there is no form.

  • It becomes Update shared plus Un-share once published, exactly like an LED layout
  • Only patterns this vehicle owns can be shared. A pattern linked from another model has no frames of its own, so the button says to share it from there instead
  • Renaming a shared pattern loses the handle to its listing: the name is what it was published and filed under. Rename first, share after

Sharing the full vehicle setup

The Marketplace toolbar's Share full setup publishes the whole vehicle you have open — LEDs, patterns, triggers, siren and Arges together.

  • This is the one share that asks you to name it, because a whole vehicle has no name of its own. One line, not a title and a description
  • The dialog lists every section that will travel, with counts, plus the sound packs the share declares when the siren uses server-sided audio
  • The audio itself does not travel, so anyone without those packs gets silent tones
  • Patterns and triggers borrowed from another vehicle are left out
  • Published already? The button says Update and the dialog offers Un-share, the same three states as everywhere else
  • HUD skins and sound packs install from the HUD layouts side

Un-share before you delete a vehicle

Un-share first, then delete the config. Permission to edit or withdraw a listing is held against the vehicle it was shared from. Delete that vehicle's configuration — or remove the vehicle resource — and the editor has nothing left to attach the listing to, so Un-share disappears and the listing stays in the catalogue. Sharing again publishes a second one rather than replacing it.

Nothing on your server can take down a listing in that state. Ask us at timmygstudios.com/help, or through the ticket panel in 🆘︱support on Discord, and we will remove it.

Cross-vehicle references

Open the reference menu on any pattern, trigger, siren or settings block to import it from another model instead of duplicating.

  • Imported items show a link icon; items others reference show a share icon
  • Editing a referenced item edits the source
  • $all imports every non-referenced pattern or trigger at once
  • Data format: Configuration → Cross-vehicle references

Saving

Save writes all tabs to data.json and broadcasts to every client. Undo history clears.

Two ceilings, both reported in the server console naming the vehicle:

CeilingWhat happens
512 frames per patternThe save succeeds and frames past 512 are dropped, naming the pattern and the count it was cut from
512 KB per vehicle configThe save is refused and nothing is written. The catalogue applies the same ceiling

Still stuck? Support can answer it directly.

Was this page helpful?