XOSC speaks OSC over UDP. This page is the practical Resolume guide. Everything here is verified against Resolume's official docs (resolume.com/support/en/osc) — no guesses.
Default ports
- Resolume listens on UDP
7000by default. - Resolume's outbound port is whatever you configure per destination — it's not a fixed number.
127.0.0.1 and the port at 7000. If Resolume is across the network, set the LAN address of the Resolume box and ensure that box's firewall allows inbound UDP on the chosen port.
Address structure
Every parameter Resolume exposes has a string OSC address. Examples:
/composition/layers/1/video/opacity
/composition/layers/2/clips/8/transport/position
/composition/selectedlayer/video/mixer/blendmode
/composition/columns/4/connect
/composition/... is the absolute path. /composition/selectedlayer/... and /composition/selectedclip/... are the dynamic shortcuts — they target whichever layer/clip the operator has selected in the Resolume UI right now. Use these two for modular control surfaces — your bindings stay correct as the operator scrolls around the composition.
Argument types
Resolume accepts standard OSC type tags:
| Tag | Meaning | Notes |
|---|---|---|
| f | float | Used for faders/opacity; range is 0.0 to 1.0 for normalised parameters |
| i | int | Used for enumerations (blend mode index, clip index) |
| s | string | Many enums also accept the human-readable name, e.g. blend mode "Alpha" |
| color | RGBA 32-bit | Sent as a single int via OSC's color type tag |
Absolute vs. relative
Resolume supports a modifier-prefix convention that's specific to it. Send a string arg first to choose the math, then the value:
/composition/layers/1/video/opacity "a" 0.5 # absolute set to 0.5
/composition/layers/1/video/opacity "+" 0.1 # nudge up by 0.1
/composition/layers/1/video/opacity "-" 0.1 # nudge down by 0.1
/composition/layers/1/video/opacity "" 2.0 # multiply current by 2
/composition/layers/1/video/opacity "?" # poll: ask Resolume to send the current value back
In XOSC's output-node inspector, this is two arguments in the args list: a string "+" followed by a float 0.1. The "Add argument" button is your friend.
? is the polling form — Resolume will respond by sending you the current value of that parameter on its OSC output (see "Bidirectional sync" below).
Discovering an address — the only workflow you need
In Resolume: Shortcuts → Edit OSC. Click any control on the canvas. The address appears in the bottom-right of the Shortcuts panel. Copy → paste into XOSC's output node Address field. That's the entire mapping process.
Bidirectional sync (Resolume → XOSC)
Resolume can broadcast every UI change as an OSC packet so external apps can mirror its state.
- Toggle Output All Messages to fire OSC out for every parameter that changes.
- Or set up a custom output preset for just the parameters you care about (less network noise).
- Wildcards work: enable output for "all layers" / "all clips" in one switch.
useMappingRouter.ts). For now, treat XOSC as fire-and-forget.
Throttling continuous values
When the v0.2 continuous-value path lands (MIDI CC → OSC float, gamepad axis → OSC float), wrap each parameter's send in a 20–30ms throttle keyed on host:port:address. Resolume processes incoming OSC on a single thread; flooding it with 1000 updates/sec saturates that thread and breaks playback. 60Hz (≈16ms) is the maximum useful rate; 30Hz (≈33ms) is fine for nearly everything.
Common Resolume addresses (cheat sheet)
/composition/master # master opacity, float 0–1
/composition/tempocontroller/bpm # BPM, float
/composition/tempocontroller/resync # tap resync, trigger
/composition/decks/<n>/select # switch deck
/composition/columns/<n>/connect # fire whole column
/composition/layers/<L>/clips/<C>/connect # fire single clip
/composition/layers/<L>/video/opacity # layer opacity
/composition/layers/<L>/bypassed # bypass toggle
/composition/layers/<L>/video/mixer/blendmode # blend mode index or name
/composition/layers/<L>/clips/<C>/transport/position # scrub clip
/composition/selectedlayer/video/opacity # the dynamic version
If a particular address doesn't behave as expected, fall back to the OSC Mapping Mode workflow above — copy the actual string from a running Resolume instance.