Luminator Technology Group

Author it once.
The whole fleet speaks.

Automated passenger announcements for the entire vehicle fleet. Author in the Creator — the Engine speaks them fleet-wide. One merged application, always on, with a tamper-evident record of what each passenger actually heard.

Author · playlists & triggers
Speak · Azure · ElevenLabs · Acapela
Show · LED · TFT · destination signs
Prove · ADA proof-of-play
The problem

Announcements are baked into vehicle firmware.

Every vehicle must tell passengers where it is and what happens next — audibly and visually, in their language, automatically. And under accessibility law the operator must prove it happened.

  • Changing a phrase = a software release and a fleet-wide reflash
  • Vendor-locked hardware workflows, per-vehicle programming, field visits
  • No usable evidence of what a passenger actually heard
🎯

The CreatorStudio answer

Replace per-vehicle programming and vendor-locked hardware with one authoring tool, one always-on engine, and open standards — MQTT PIS-PT in; ADT audio + LED/TFT sign frames out. Run it in the cloud for a whole operator, or as a single container on the vehicle. Same software either way.

What it does — at a glance

Six things, one platform

🎧

Author

Build announcements as playlists — text, live variables ({nextStop}), pauses and clips — in a browser.

Trigger

33 built-in transit triggers plus custom fact-based triggers and geofence zones you draw on a map.

🗣️

Speak

Neural TTS from Azure, ElevenLabs or Acapela — swap suppliers without re-authoring. ~50 voices, a dozen languages.

Show

Interior LED dot-matrix, exterior destination signs and interior TFT — rendered in the hardware's own font.

🧾

Prove

Durable, tamper-evident proof-of-play: dispatched vs vehicle-confirmed, where and when — signed evidence.

🖥️

Operate

A live fleet cockpit — heading-up map, event feed, sign previews, health telemetry and a route simulator.

The suite

Three apps, one portal

One sign-in, one design system, everything served together.

  • CreatorStudio — author the announcements
  • Engine Monitor — watch the live fleet & prove it
  • Vehicle Player — turn any device into a bus speaker

The MQTT broker is the integration hub — the topics are the API. The journey feed comes in, audio + LED frames go out, and the dashboard rides the same topics to monitor and control.

creatorstudio.suite / home
Platform home
System architecture · how it all fits

From configuration to announcement — full path

/ Space build next step · step back
1 · AUTHOR & PUBLISH 1 2 · CREATORSTUDIO ENGINE (Node / TS) 2 3 · MQTT HUB 3 4 · ON THE VEHICLE · THIN CLIENTS 4 5 · OPERATE 5 Creator · Angular /creator · Projects Playlists Triggers LED signs Voices Lexicon GTFS sim Azure PG engine_config row Realtime publish · hot-swap ~1 s Storage · audio-files fleet MP3 cache (object tier) Auth · RLS · anon / service config vs cache keys separated publish config Live journey feed · PIS-PT one MQTT stream per vehicle · doors · stop · GNSS · occupancy · journey phase {tenant}/{vehicleId}/pis/0/# Runtime pipeline ConfigStore hot-swap · last-known-good file fallback · multi-tenant process live sync ~1s VehicleContext · merge topics → journey state ingest gating · GNSS firehose filtered · per-vehicle context store Trigger engine · 33 built-in + custom + geofence edge-detect · debounce · door / velocity / stop-button gates Pipeline · trigger → playlist(s) · LED layouts · priority face overrides · render backpressure · proof records Playlist render resolve {vars} · voice runs → ADT 4.x MP3/OPUS Matrix LED render FNT · Display→Cycles→Layout → FF mono / RGB TTS cache layers LRU → FS → Azure Blob Prerender · History warm next stops · audit Publish out · MqttBus · fleet directory · health / metrics …/tts · …/display · …/signs · …/ff · engine/fleet · engine/played in TTS cloud · pluggable suppliers Azure AI Speech · ElevenLabs · Acapela · resilient retry / breaker / fallback synth if cache miss cache warm/miss MQTT topics = API TCP 1883 WS 9001 IN pis/0/# OUT tts (ADT) OUT display* OUT signs / ff ACK engine/played fleet · health retained where needed for late joiners journey data PIS in audio+LED Vehicle player · thin client Go · Python · browser — same MQTT contract Speakers ADT decode Interior LED dot-matrix / TFT Exterior front · side · rear Ultima / Mobitec FF RS-485 gateway · mono/RGB engine/played ack after clip ends Sign Unit · MatrixRenderer (Suite) On-sign hardware Unit — Presentation Schema consumer CreatorStudio L4 complements this Unit; does not replace it Display → Cycles → Layout → Text / Image / Rectangle Passenger information app · /player headsign · current / next stop · countdown · “getting off at” same broker topics · QR handoff · offline-tolerant · optional audio no install — any phone / tablet / staff tablet ADT+FF played Dashboard · /monitor live map · event feed · LED preview · health · performance proof-of-play · config view · play-on-device · GTFS simulator MQTT over WS + small HTTP surface — no private engine API monitor+ctrl

Press or wait — the architecture builds step by step.

How an announcement happens

From a live trip signal to sound & pixels — one pass

Feed
Live PIS-PT
One trip stream per vehicle over MQTT.
Context
Journey state
Merge topics into a live vehicle context.
Engine
Trigger
Edge-detect, debounce & gate — only state changes wake it.
Render
Resolve → MP3 + sign
Fill variables, synth speech, draw the frame.
Vehicle
Speak · Show · Ack
Play, display, and confirm what was heard.
Identical phrases synthesized once for the whole fleet
Cache key = hash(text + voice)
Played-ack closes the proof-of-play loop
GNSS firehose is gated
CreatorStudio · authoring

Design what the fleet says

Playlist library
Playlist library — grouped by interior / exterior / both
Playlist editor
Playlist editor — text, variables, pauses, per-line voice & "also speak in"
Triggers

When it speaks — built-in, custom & geofenced

Trigger matrix
33 built-in transit triggers, mapped to playlists
Custom triggers
Scratch-style boolean logic over 38 live journey facts
Geofence zones
Draw circle / polygon zones as trigger conditions
Voices & TTS suppliers

No vendor lock-in on voices

Play one line through every supplier — Azure Speech, ElevenLabs, Acapela or a silent mock — back to back, and pick which the engine renders with.

  • ~50 neural voices across a dozen languages
  • Real A/B comparison using the engine's real clients
  • Switch suppliers without touching a single announcement
  • Pronunciation lexicon — respellings or IPA, GTFS import, AI expansion
Voices and TTS suppliers
Route simulator

Test before it reaches a bus

Replay a real GTFS trip stop by stop and see exactly what would be spoken at each event — trip-start, approaching / arrived / departing, doors, stop-request, custom triggers interleaved.

  • Every row auditions through the real TTS voice
  • Catch a silent stop or a wrong variable on the bench
  • Publish history & rollback — restore any version in one click
Route simulator
Engine dashboard · operate

The live fleet cockpit

One vehicle, one screen: a heading-up map (the bus always points up) with stops coloured by what happened, and where each announcement fired.

  • Live event feed — this vehicle, or the whole fleet
  • Raw PIS-PT signal table + one-click signal injection
  • Sign previews — LED & TFT rendered live
Live monitor cockpit
Signs

See what the passenger sees

The interior LED dot-matrix, the exterior front / side / rear destination signs, and the interior TFT — all rendered live from the engine's output.

  • Same font the hardware ships — the preview matches the bus exactly
  • Raw Mobitec FF frames for serial gateways
  • MatrixRenderer layouts — Ultima faces, FNT fonts, trigger face overrides
LED signs and TFT preview
Proof of Play · the audit trail

Prove what was played & shown — where and when

Proof of Play grouped
Grouped record — dispatched vs vehicle-confirmed, with transcript
Proof of Play map
On the map — fired at the right place, not just the right time
Proof of Play replay
Replay — reconstruct what a passenger experienced, frame by frame

The durable, tamper-evident ADA compliance evidence — exportable as a signed CSV / JSON proof pack.

On the vehicle

A live passenger information screen

The browser player doubles as a passenger information system — the live headsign, current and next stop with an arrival countdown, and journey progress.

  • "Getting off at" picker — counts down and alerts when your stop is next
  • Rides the existing feed — speaks announcements, works offline
  • No install — scan a QR code and any device plays the vehicle
Passenger information app
Integration contract · thin-client MQTT

The topics are the integration API

One contract for Go, Python and browser clients. Sensors feed the engine; actuators consume and acknowledge.

DirTopicPayload
OUT{tenant}/{vehicleId}/pis/0/ttsADT 4.x — base64 MP3/OPUS, speakers, traceId
OUT…/display · …/exteriorInterior / exterior LED bitmaps
OUT…/display/signs (+ …/ff)Matrix frames + raw Mobitec FF
ACKengine/playedProof-of-play after clip ends
IN…/pis/0/#Sensors / journey into the engine
By the numbers

Fleet-scale on a 2-vCPU box

2,000
vehicles on one hardened engine process — 29 ms p50 loop lag, zero drops
≈2 ms
announcement latency on a cache hit — the dominant fleet-wide case
~1 s
config Publish → whole fleet live, no redeploy
100%
cache hit-rate at load — a phrase is synthesized once, reused fleet-wide
Cold synth of a unique phrase ≈1.0 s, then cached
Measured RSS ~250 MB at 2,000 vehicles
Single-process ceiling ~3,000–3,500 on that hardware
Multi-tenant — one engine per tenant, scale by process
Customer benefits

Why it matters

🧾

Compliance you can prove

Every announcement recorded — dispatched vs confirmed, with location, timestamp and transcript. When a regulator asks "did the stop get announced?", you have the evidence.

🛰️

One tool for the whole fleet

Author once, Publish once; the change reaches every vehicle instantly over the air. No per-vehicle programming, no field visits.

🛡️

Resilient by design

TTS retries, a circuit breaker and fallback audio keep the fleet talking. If the cloud is unreachable, the engine runs on last-known-good config.

📈

Scales without re-work

Identical phrases synthesized once and reused fleet-wide, so cost and latency stay flat as vehicles are added.

License packaging · overview

Modular SKUs — Core required, rest attach

Vehicle-scaled ARR. Example planning figures only — detail in LICENSE-PACKAGING.md.

SKUModuleValue in one lineExample*
L1Core EngineTriggers → ADT audio; thin clients€8 / veh / mo
L2Creator StudioOps change wording without releases€120 / seat
L3Cloud AI SpeechNeural TTS + fleet cache (one entitlement)€4 / veh / mo
L4Matrix LEDLayouts / Ultima / FF with audio Publish€6 / veh / mo
L5Proof of PlayDispatched vs played evidence€3 / veh / mo
L6Ops DashboardLive cockpit & healthincl. ≥50 veh
L7Passenger AppBrowser journey screen€1.5 / veh / mo
L8Multi-tenantOEM / host many fleets€2.5k + €400 / ten
L9Edge EngineSame software on-vehicle+€3 / veh
Bundle~ / veh / mo*
Starter Audio (L1–L3+L6)€12
Audio + Signs (+L4)€18
Compliance (+L5)€21
Full PIS (+L7)€22.5
Scale example · 500 veh mix
Blended ASP≈ €20.6 / veh / mo
Monthly≈ €10.3k
ARR≈ €124k
OEM host (3k veh + L8)≈ €829k ARR

*Illustrative planning figures, not list price. Primary scaler = vehicles; secondary = module attach.

Deploy anywhere

The same software,
your choice of where it runs.

Run it centrally for an operator, or as a single hardened container on the vehicle — multi-arch, non-root — for on-board autonomy. Open standards in, open standards out.

In · MQTT PIS-PT journey feed
Out · ADT audio + LED / TFT frames
Config · pg_notify hot-swap
Voices · Azure · ElevenLabs · Acapela

Cloud or on-vehicle edge — same engine, same MQTT contract, same publish path.

Use ← → arrow keys (or Space) to navigate · press F for fullscreen
1 / 19