The OSC In node (v0.5+) lets XOSC accept OSC packets from anything on your machine or LAN — Stream Deck via Companion, TouchOSC, Reaper / Ableton, another XOSC instance, or your own scripts.
Add a listener
1. Topbar → OSC In. A new node spawns at the canvas centre.
2. Open the inspector. Pick a bind (127.0.0.1 by default — keeps you loopback-only) and a port (9000 is the default).
3. Set the address to the OSC path you want this node to react to. Patterns support:
- — any non-slash chars (e.g. /layer//opacity matches /layer/1/opacity and /layer/12/opacity)
- ? — exactly one char
- Anything else compares literally.
4. Wire the node to any sink (OSC Out, Resolume Out) on the right.
Test it
From a terminal that has oscsend (part of liblo-utils):
oscsend 127.0.0.1 9000 /test f 0.5
The node body shows a green dot for ~400 ms after each hit, plus the last numeric arg and a hit counter.
Continuous values
The first i / f argument is treated as the value for downstream continuous routing. T (true) becomes 1, F (false) becomes 0. If there's no numeric arg, the node fires as a discrete pulse — useful for "did this address arrive at all" buttons.
The value goes through the same value transform editor as MIDI / Resolume sources, so you can clamp / scale / curve / deadzone an external feed without rewriting it on the sender's side.
Loopback vs. LAN
The default bindHost is 127.0.0.1: nothing outside your machine can reach the listener. To accept packets from a Stream Deck, another laptop, a hardware OSC controller, or any device on the LAN, switch the Bind dropdown to 0.0.0.0. The inspector surfaces a clear amber warning when you do — at venues you generally want a firewall in front.
A single UDP socket is opened per (bindHost, port) pair and shared across every OSC In node that targets it. So you can have one node listening on /scene/* and another on /cue/?/go on port 9000, and the listener is a single shared socket.
Loop hazard
If you pair an OSC In on /x with an OSC Out sending /x back to the same target on the same host (especially if that target is XOSC itself, or another XOSC instance with a mirroring config), you create a feedback loop. The dispatch-depth cap (see Node graph → Loop protection) terminates it at 8 hops, but you'll see your CPU spike briefly. Avoid wiring OSC In and OSC Out to the same address pattern unless you know what you're doing.