DMX and OSC

  • #protocols #lighting #touchdesigner
  • 301 words, Read time 1 minute, 30 seconds

So I was at work, learning this thing called TouchDesigner. My task was simple to describe but 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. Why exactly 512? 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 approaches. 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 argue over the same lights.

OSC, on the other hand, grew up in audio, but it actually 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.