ritwiksharma.com
Work
Distributed Systems · Installation · Solo software engineer

NEOM Sindalah Tower Lighting

A distributed real-time lighting control system for the Sindalah island development, NEOM. One Surface Pro tablet running a Unity frontend orchestrates 13 networked TouchDesigner machines (plus a master node) over MQTT, driving 42 LED-illuminated towers across the island. Designed, built, and deployed on-site as solo software engineer in three weeks.

Role
Solo software engineer
Client
NEOM Sindalah
Location
Sindalah Island, Saudi Arabia
Duration
2024 · 3 weeks on-site
Scale
14 PCs · 42 LED towers
Status
Deployed

What it is

Sindalah is the first completed island of the NEOM development on the Red Sea coast of Saudi Arabia. Across the island, 42 architectural towers, glowing marble monoliths, illuminated entrance pillars, sculpted obelisks, are lit by programmable LED arrays. Each tower is wired to one of 13 building-level Asus PCs distributed across the site, all interconnected over LAN to a master coordinator and a single tablet that runs the show.

I designed the software stack end to end: the Unity-based operator interface on the Surface Pro, the TouchDesigner control runtimes on every building PC, the MQTT pub/sub layer that ties them together, the DMX output that drives the actual fixtures, and the on-site network configuration that made it all reliable in production.

The Unity control panel running on a Surface Pro tablet. NEOM branding top-right, building selectors arranged in a grid, sci-fi UI treatment matching the development's aesthetic.
The operator interface: Unity application running on a Surface Pro tablet. The 13 building selectors map to the 13 building PCs distributed across the island. One tap selects a building, the next layer drills into individual tower groups and scene playback.

The architecture

Three layers: a single operator surface, a distributed control fleet, and the physical lighting hardware.

  Operator                Distributed runtimes              Physical
  ┌──────────────────────────────────────────────────────────────────────────┐
  │  Surface Pro                                                  │
  │  Unity tablet     MQTT       Master PC       LAN              │
  │  control panel    pub/sub    (coordinator)   broadcast        │
  └──────────────│────────────│──────────────│───────────────────────────────────────────────────────────────────────────────────────────┐
                  │       │            │
                  └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
              Building PC 1   Building PC 2   …   Building PC 13      │
              TouchDesigner   TouchDesigner       TouchDesigner          │
              MQTT subscribe  MQTT subscribe      MQTT subscribe         │
              DMX output      DMX output          DMX output             │
                  │               │                   │              │
                  └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
              42 LED towers, grouped by building, addressed by fixture ID
              (marble pillars, obelisks, stair washes, facade strips)

The Unity tablet does not talk to the lights directly. It publishes intent ("Building 13, scene A, tempo 0.7") to MQTT. The relevant TouchDesigner instance subscribes to its building topic, translates the intent into per-fixture DMX values, and streams them out over the lighting protocol. The master PC handles fleet-wide synchronisation and any cross-building scenes that need to play in unison.

This is the same architectural shape as the agent ecosystem behind Soup and the channel-adapter pattern behind Relay: one orchestration brain, many specialised runtimes, message bus in the middle. NEOM is the version where the runtimes are physically distributed across an island and the output is real light.

The TouchDesigner backend

Each building PC runs an identically-structured TouchDesigner project, parameterised by its building ID. The project subscribes to its MQTT topic ("Building13"), receives commands, runs them through a switching layer, looks up the correct DMX channel ranges for that building's specific fixtures, and outputs to the lighting controllers.

The TouchDesigner project for Building 13. Python MQTT callbacks, node-graph signal chain ending in multiple DMX-out nodes, one per fixture group.
The control runtime for one building. Python MQTT callbacks at the top, signal chain in the middle (constants, switch, lookup, math, shuffle, rename, pattern, lookup, DMX out), feeding multiple parallel DMX output nodes, one per fixture group in that building.

The reason each building is its own project instead of one giant fleet project: failure isolation. If a building loses network or a PC reboots, the rest of the island keeps running. The master PC notices the missing subscriber and the operator sees that one building dropped, but Buildings 1 through 12 carry on without interruption.

Scale

Site plan of Sindalah Island with the 13 building locations highlighted as numbered grey markers (1 through 13), overlaid on the building footprint layout, with sub-tower numbering 01 through 23.
Sindalah's layout. The 13 numbered markers in green are the building PC sites. The thinner annotations (01-23) are individual tower groupings within each building's responsibility. LAN cable was run between every building, with the master at the centre.

The physical scale matters because it shaped every engineering decision:

On the ground

I was on-site at Sindalah for the three-week deployment, coordinating with the lighting team and commissioning every building one by one. The construction-phase photos give a sense of what the towers actually look like, glowing through translucent marble, washing illuminated stair treads, internally lit obelisks acting as architectural landmarks.

A tall marble-clad obelisk lit in deep pink and red from the inside, with warm yellow LED strips wrapping the stair base.
One of the marble obelisks during commissioning. The colour is dynamic, the same fixture can sweep through any RGB scene the operator selects.
Night view of a building entrance with an illuminated marble pillar (cream and rust veined) glowing from within, warm-lit stair treads, and a slatted ceiling overhead.
A building entrance at night. The vertical marble pillar is back-lit by an internal fixture; the stair treads are independent strip lighting; both are addressed separately by the same building runtime.
A high-end storefront (“The Vault”) during construction. Warm LED strip embedded along the planter edge, contractors visible inside in hi-vis vests.
A storefront during commissioning. The warm LED line along the planter edge is one of the dozens of fixture types the system addresses.

What this project demonstrates

Stack

UnityC#TouchDesignerPythonMQTTDMXLAN networkingSurface Pro
Related work