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.
| # | Tab | What you do there |
|---|---|---|
| 1 | Lights | Place or auto-generate the LEDs with a 3D gizmo |
| 2 | Patterns | Arrange them into frame-by-frame sequences, previewed live |
| 3 | Rules | Compound conditions that drive patterns, stages and sirens |
| 4 | Sirens | Tone slots, airhorn, rumbler, chirp, horn flags |
| 5 | Vehicle behavior | Park kill, suspend flags, spawn extras, per-vehicle sound overrides |
| 6 | Marketplace | Import 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
| Input | Action |
|---|---|
| Middle or Right drag | Orbit |
| Shift + drag | Pan |
| Ctrl + drag | Dolly |
| Scroll wheel | Zoom |
| Home | Frame the whole vehicle |
Left mouse stays free for the gizmo.
Numpad camera
Blender's convention, on the Lights tab.
| Numpad | Alone | With Ctrl |
|---|---|---|
| 8 / 2 | Orbit up / down | Pan up / down |
| 4 / 6 | Orbit left / right | Pan left / right |
| 1 | Front view | Back view |
| 3 | Right view | Left view |
| 7 | Top view | Bottom view |
| 9 | Flip the view 180° | — |
| 5 | Perspective / 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
| Button | Does |
|---|---|
| Plus | Add one LED |
| Flip | Mirror the selection (Shift+M) |
| Siren | Create LEDs from the vehicle's siren bones |
| Box | Import missing model-defined LEDs, keeping the ones you have |
| Wand | Auto-attach every LED to its nearest moveable bone — door, bonnet or boot |
| Trash | Delete 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
| Property | Description |
|---|---|
Position x, y, z | Local offset from the chassis, or from bone if set |
Rotation yaw, pitch, roll | Degrees. Drives directional bloom and corona output |
Size sw, sh | Surface width and height in metres |
| Name | Uppercase A-Z and 0-9 only, e.g. LBF1. Lowercase is capitalised, spaces and symbols dropped, on leaving the field. See LED naming |
| Groups | Tags for bulk selection and filtering. Traffic-advisor and side-specific patterns select on these |
| Bone | Optional, 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 |
| Shape | rect (default) or circle |
| Bloom | sprite (default), corona or both. The last two each draw one extra game corona per lit LED |
| Surface | Which texture the lens face uses — below |
| Extra | GTA extra ID (1–12). The LED renders only when that extra is enabled |
| Modkit | Modkit 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.
| Choice | Cost |
|---|---|
| How many LEDs you place | Up 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 both | One 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
| Mode | What it draws | Fields |
|---|---|---|
| Gen | A 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) |
| tELS | The built-in tELS/client/led.png | — |
| Res | A led.png from a vehicle resource | Which resource |
| YTD | A texture from a game texture dictionary | Dict (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.
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.
| Shortcut | Action |
|---|---|
| W / R / S | Gizmo to translate, rotate or scale |
| X | World-space / local-space gizmo |
| Q / E | Previous / next LED |
| Shift+D | Duplicate |
| Shift+M | Mirror around the vehicle's centreline |
| Delete / Backspace | Remove |
| 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.metaand 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.
| Option | Effect |
|---|---|
| Trigger Only | Hidden from 9/0 cycling. Only a trigger action starts it |
| Sync Near | Every client locks the frame index to a server clock. For synchronised fleet patterns |
| GTA Lights | Holds GTA's native emergency-lights flag, which drives the red-blue environment tint |
| High Beams | Holds high beams on |
| Livery | Restricts the pattern to one livery index. Omit for any |
| Modkit | Applies a modkit while active, restoring the previous one on stop |
| Extras | Forces extras (1–12) on or off while active, restoring each on stop |
| Mods | Applies 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.
| Field | Effect |
|---|---|
| engage | Conditions must stay true this long, in ms, before the rule turns on |
| release | Conditions 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 shutsengage 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
| Condition | Fires when |
|---|---|
lights_on | Emergency lights active |
stage_1 / stage_2 / stage_3 | Vehicle is at that stage |
park_kill | Driver exited with sirens running |
chirping | Chirp tone playing |
custom_pattern | Lights on and the base pattern is not the target of any pattern_set rule carrying a stage condition |
Audio
| Condition | Fires when |
|---|---|
siren | Any siren active — main, aux or burst |
main_siren_on / aux_siren_on | That channel active |
rumbler | Rumbler variant playing |
airhorn | Airhorn playing |
horn_tap | Horn tapped, under 400 ms |
horn_double_tap | Two taps within 600 ms |
horn_hold | Held over 500 ms |
siren_tone_1 … siren_tone_8 | Main siren on that tone |
Modes
| Condition | Fires when |
|---|---|
cruise | Cruise on |
takedown | Takedown on |
blackout | Running dark |
ta_left / ta_right / ta_center | Traffic advisor in that direction |
blackout is a suppressor, not a switch:
lights_onstays true under it, so a rule that should fire only when the vehicle is visible needslights_onand a negatedblackout- An LED overlay driven by a
blackoutrule is never seen. Use it for siren tone, rumbler, chirp or a HUD state
Vehicle state
| Condition | Fires when |
|---|---|
engine_on / engine_off | Engine running / stopped |
stationary | Under 2 mph |
speed_15 / speed_30 / speed_60 / speed_90 | Above that mph |
headlights / highbeam | On |
day / night | night = 20:00–05:59, day = 06:00–19:59 |
Controls
| Condition | Fires when |
|---|---|
brake | Brakes applied, with a driver aboard |
handbrake | Handbrake engaged |
reverse | Reverse gear and actually moving backward |
turn_left / turn_right | That signal flashing |
hazards | Both signals flashing. Also satisfies turn_left and turn_right, so add it negated for a genuine single-side rule |
Doors
| Condition | Fires when |
|---|---|
door_fl / door_fr / door_rl / door_rr | That door open |
hood / trunk | Open |
any_door_open | Any of the above |
locked / unlocked | Vehicle locked / unlocked |
Steering and transmission
| Condition | Fires when |
|---|---|
steer_left / steer_right | Wheel turned more than 15° that way |
rpm_25 / rpm_50 / rpm_75 | RPM above 25%, 50% or 75% |
gear_1 … gear_6 | In that gear |
Health and occupancy
| Condition | Fires when |
|---|---|
vehicle_damaged | Body health under 900 |
flipped | Upside-down |
driver_in_veh | Driver seat occupied |
passenger_front / passenger_rear | That seat occupied |
any_passenger | Any passenger seat occupied |
presence | Presence armed, and an on-foot player who is not another tELS owner within 5 m |
presence_mode | Presence armed, owner more than 5 m away, vehicle locked |
Action types
| Action | Effect |
|---|---|
| pattern_overlay | Layer a pattern over the base while the rule is true |
| pattern_set | Switch the base pattern. Rising edge |
| stage_set | Activate stage 1–3. Rising edge |
| main_siren_set / aux_siren_set | Start that channel on a specific tone |
| siren_overlay | Play a tone while the rule is true; stops on false |
| siren_next_tone / siren_prev_tone | Cycle the main siren's tone |
| park_chirp | Start 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_overlay | Chirp while the rule is true. Several rules may hold it; it stops when the last releases |
| chirp_stop | Stop an in-progress chirp, rising edge. Not in the Add Action list — set it by hand in data.json |
| horn_play_airhorn | Airhorn while the rule is true, respecting horn interrupt |
| horn_play_vehicle_horn | Native vehicle horn while the rule is true |
| arges_on / arges_off / arges_sweep | Spotlight. Inert in this build |
| ers_pullover | Briefly sets GTA's native emergency-lights flag, visual only, rising edge. See ERS pullover support |
Rising edge vs held.
pattern_set,stage_set,park_chirpanders_pulloverfire once, as the rule becomes true, and what they set stays setpattern_overlay,siren_overlayandhorn_play_airhornrun 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:
{
"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:
{ "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[]:
{ "$ref": "police4", "triggerId": "a1b2c3d4e5f6a7b8" }Sirens tab
Tone slots
Up to 8.
| Property | Description |
|---|---|
| Name | Display name — "Wail", "Yelp", "Priority" |
| Sound | Vanilla GTA sound string, e.g. VEHICLES_HORNS_SIREN_1 |
| Server Sound / Server Sound Ref | Server-bundled audio, used when Server-sided Sirens is on in /tels |
| Rumbler Sound / Rumbler Server Sound | Alternates while the rumbler is on. Main siren only |
| Enabled | Off slots are skipped by every lookup |
| Trigger Only | Skipped 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.
| Setting | Default | Description |
|---|---|---|
| Horn Interrupt | On | Main siren pauses while the airhorn plays, resuming on release |
| Use Normal Horn | On | E plays the native horn with lights off. Off makes the airhorn play regardless |
| Programmable Horn | Off | Suppress the default audio and the interrupt, driving the horn from horn_tap, horn_hold and horn_double_tap rules |
| Chirp Tone | 1 | Which tone slot the park chirp plays |
Play Full Siren (chirpByCode) | Off | Hold 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 change | Tone, rumbler and airhorn sounds only |
| Always shared | Slot 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 sounds | Clears a profile's overrides. Deleting the profile restores the default entirely |
| In game | Changing the livery updates playing sirens and airhorns within roughly 250 ms, leaving the stage, tone slot and on/off state alone |
| Audio packs | Must 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.
| Setting | Default | Description |
|---|---|---|
| Park Kill | On | Sirens stop when the driver exits, and park_kill fires |
| Lights Suspend TA | On | Traffic advisor suspends when lights activate |
| Lights Suspend Takedown | On | Takedown suspends when lights activate |
| No User Controls | Off | Disables 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-tab | Shows |
|---|---|
| Browse | Everything published, filtered and sorted by the toolbar |
| Installed | What 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
$allimports 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:
| Ceiling | What happens |
|---|---|
| 512 frames per pattern | The save succeeds and frames past 512 are dropped, naming the pattern and the count it was cut from |
| 512 KB per vehicle config | The save is refused and nothing is written. The catalogue applies the same ceiling |
tELS
Still stuck? Support can answer it directly.
Was this page helpful?
TIMMYG Studios