DMX and OSC

  • #protocols #lighting #touchdesigner
  • 305 words, Read time 1 minute, 32 seconds

At work I have been learning this thing called TouchDesigner, and my task was simple to describe and less simple to do: send a signal from TouchDesigner into Unreal. Along the way I met two protocols, DMX and OSC.

DMX comes from the lighting world. Each channel carries a value from 0 to 255, which makes sense when that value is the brightness of a red, green, or blue channel on an LED fixture. Channels are grouped into a universe, and a universe holds exactly 512 of them. That number is not arbitrary: DMX runs as a steady serial stream, and 512 is about as many channels as you can refresh quickly enough before the lights visibly lag.

When we want DMX over a network instead of a cable, there are two flavors. Art-Net is the older one and tends to broadcast its data to the whole network, which works but gets noisy. sACN is the newer, tidier standard that uses multicast and adds niceties like priority, so multiple sources can politely argue over the same lights.

OSC, on the other hand, grew up in audio, but really it carries whatever you want. Since it is just addressed messages, like /light/1/intensity followed by a value, it is far more flexible than DMX, and it sends floats instead of being capped at a certain range.

TL;DR: DMX is rigid but universally understood, and nearly every piece of stage gear speaks it. OSC is faster, more flexible, and higher resolution, but every application invents its own address scheme, so compatibility is more of a handshake than a guarantee.

In the end I chose based on who was listening. DMX when I am talking to lights, OSC when I am talking to software with opinions. Just like talking NICE with my colleagues and talking nice with my friends.