Skip to content

OSC

Native OSC address space of the media server, generated from the contract (osc/addresses.yaml, osc/legacy.yaml, v1.0.0-rc.1 — the contract files are normative; this page is a copy for reading).

  • UDP 7000 in (OSC 1.0), replies and pushes to the sender or to the subscriber’s replyPort (default 7001); TCP 7000 with SLIP framing (OSC 1.1). Announced over mDNS as _osc._udp (prefix=/freedome/v1).
  • {v} = venue (_ = default), {p} = player (_ = main).
  • No in-band auth. Each listener has a CIDR allow-list ([osc] allow, default private networks) and a fixed role ([osc] role, default operator). Addresses marked admin CIDR are accepted only from [osc] admin_allow (default loopback). Packets from other sources are dropped silently and counted (freedome_mediaserver_osc_rejected_total).
  • Bundles with a future time tag run at that time on the server clock (multi-node sync); more than 24 h ahead is refused. Packets over 64 KiB are refused; a TCP connection is closed after 3 framing errors.
  • Errors: /freedome/v1/error ,sss = problem code, detail, address. Successful commands answer nothing.
  • Subscriptions: /freedome/v1/subscribe ,s<topic> [,i<replyPort>] → pushes /freedome/v1/event ,s<topic> ,s<json envelope> plus the fast path /freedome/v1/venue/{v}/player/{p}/position ,ff (position, duration). UDP subscriptions expire after 300 s without renewal.
  • Every accepted OSC message is also offered to the show’s OSC triggers (cue automation).

Example (python-osc):

from pythonosc.udp_client import SimpleUDPClient
c = SimpleUDPClient("dome.local", 7000)
c.send_message("/freedome/v1/venue/_/output/brightness", 0.6)
c.send_message("/freedome/v1/venue/_/player/_/seek", 42.0)
Address Dir Args Maps to Scope
/freedome/v1/ping in s token? ping anon
/freedome/v1/info in getInfo anon
/freedome/v1/subscribe in s topic i replyPort? subscribe events:subscribe
/freedome/v1/unsubscribe in s topic i replyPort? unsubscribe events:subscribe
/freedome/v1/venue/{v}/player/{p}/play in s id? i itemIndex? f position? play playback:control
/freedome/v1/venue/{v}/player/{p}/pause in pause playback:control
/freedome/v1/venue/{v}/player/{p}/resume in resume playback:control
/freedome/v1/venue/{v}/player/{p}/stop in stop playback:control
/freedome/v1/venue/{v}/player/{p}/next in next playback:control
/freedome/v1/venue/{v}/player/{p}/previous in previous playback:control
/freedome/v1/venue/{v}/player/{p}/seek in f seconds seek playback:control
/freedome/v1/venue/{v}/player/{p}/rate in f rate patchPlayer playback:control
/freedome/v1/venue/{v}/player/{p}/loop in i loop patchPlayer playback:control
/freedome/v1/venue/{v}/player/{p}/volume in f volume patchPlayer playback:control
/freedome/v1/venue/{v}/output/brightness in f value patchOutput playback:control
/freedome/v1/venue/{v}/output/volume in f value patchOutput playback:control
/freedome/v1/venue/{v}/output/blackout in T F True patchOutput
/freedome/v1/venue/{v}/output/lighting in T F True patchOutput
/freedome/v1/venue/{v}/output/rotation in f degrees patchOutput playback:control
/freedome/v1/venue/{v}/cue/{c}/fire in fireCue playback:control
/freedome/v1/venue/{v}/param/{path} in f i s
/freedome/v1/venue/{v}/display/{d}/pattern in s kind setTestPattern displays:control
/freedome/v1/venue/{v}/audio/master/gain in f gainDb patchAudio audio:control
/freedome/v1/venue/{v}/audio/zone/{z}/gain in f gainDb patchAudioZone audio:control
/freedome/v1/venue/{v}/audio/source/{id}/position in f azimuth f elevation f distance? setSourcePosition audio:control
/freedome/v1/engine/visual/backend in s backend setComputeBackend system:admin (admin CIDR)
/freedome/v1/event out s topic s json event
/freedome/v1/venue/{v}/player/{p}/position out f position f duration event
/freedome/v1/error out s code s detail s address error
Address Dir Args Maps to Scope
/play in s mediaId play playback:control
/stop in stop playback:control
/pause in pause playback:control
/volume in f value patchOutput playback:control
/brightness in f value patchOutput playback:control
/rotation in f degrees patchOutput playback:control
/position in f seconds seek playback:control
/lighting in T F True patchOutput
/calibrate in startCalibrationJob calibration:run (admin CIDR)
/freedome/play in s contentId? play playback:control
/freedome/stop in stop playback:control
/freedome/status in getPlayer playback:read
/freedome/capabilities in getInfo anon
/freedome/render/single in
/freedome/config/reload in getConfig system:read (admin CIDR)
/freedome/backend/switch in s backend setComputeBackend system:admin (admin CIDR)
/freedome/backend/query in getEngine info:read
/server/status in getHealth anon
/server/subscribe in i replyPort? subscribe events:subscribe
/server/unsubscribe in unsubscribe events:subscribe
/server/restart in restartEngine system:admin (admin CIDR)
/server/shutdown in shutdownSystem system:admin (admin CIDR)
/server/exit in rebootSystem system:admin (admin CIDR)

Legacy aliases are served only with the legacy profile ([legacy] enabled = true). Legacy 0..100 values are scaled to 0..1. /server/{exit,restart,shutdown} need a second message …/confirm within 5 s from the admin CIDR. /freedome/render/single is answered legacy-unsupported (no pixels over the control plane).