My first project in Mumbai. Navjot Altaf, an artist exhibiting at NGMA, had a piece that spanned multiple floors of the gallery with multiple projectors on each floor — and the whole thing only worked if every projector was in sync, down to the frame. A floor of projectors drifting by even a few hundred milliseconds breaks the piece.
The sync layer
I built a UDP-broadcast-based sync protocol where a master player emits a continuous reference clock and every slave calculates its offset against the master, adjusting playback speed micro-fractionally to track. Frame-accurate across all players in steady state; re-syncs within a frame after any hiccup. FFmpeg did the heavy lifting for the actual decode; the sync layer sat above it.
The network
No single LAN spanned the gallery, so I had to build one. Two Wi-Fi networks on separate floors, bridged together so the master clock reached every player regardless of which floor they were on. Setup had to survive a venue where “we’ll just unplug that” is a hazard.
Why it matters
This project was the origin of what eventually became Arzen. The hardware player I built here evolved over the next two years — first for Chennai Biennale, where I optimised it down to an embedded ARM device, and then years later into a full product for cinemas. At NGMA it was cobbled-together desktop PCs; by the time it shipped as Arzen it was custom boards with a bespoke Linux image. Same underlying idea, rebuilt three times.