Skip to main content
OSC Structure Export v4 sends Baryon’s audio-derived modal structure to an external receiver. It is outbound only: Baryon → receiver. Parameter automation remains the separate inbound OSC control path.
Baryon Desktop 1.2.0 uses protocol v4. Replace older receiver components with the current baryon_osc_structure.tox, or update a custom receiver to the v4 lifecycle and commit rules on this page.

Configure OSC Data Out

Open Performer Mode → Control I/OOSC Data Out, configure the receiver, and enable the switch. The status reports complete topology and state batches; it does not count individual UDP datagrams. The main Baryon process owns UDP and samples one authoritative producer at the selected rate. OSC alone does not start the visual-output helper. When Display, Syphon, or Spout is configured, the authoritative stage becomes the producer; Baryon does not fall back to the local preview while that stage is unavailable. Unchanged resolved samples send nothing. Structural topology is sent transactionally when mode identity, natural frequency, Q, geometry, or mode cap changes, and every two seconds as a recovery keyframe. Observation-derived response, support, and circular moments travel in grouped state messages; dynamic state is never replayed from a cache.

Terminal receiver

The receiver implements v4 activation, permanent stream retirement, complete topology/state assembly, and rollback rejection. It is a useful proof before opening TouchDesigner.

TouchDesigner monitor

Download baryon_osc_structure.tox, drop it into a network, and keep its OSC Data Port aligned with Baryon. Its frame, global, coverage, material, modes, spectral_moments, and raw DATs update only after complete monotonic commits. The source checkout includes the v4 generator:
Headless schema validation is available with:
When TouchDesigner is installed, rebuild the checked-in component’s embedded receiver callback with:
The binary .tox must still be opened and inspected inside TouchDesigner; headless generation and schema validation cannot prove operator behavior.

v4 stream lifecycle

streamSessionId is a unique UUID. Only /baryon/hello may activate an unknown stream. Activating a new stream permanently retires the previous UUID. /baryon/v4/clear clears and permanently retires its stream. Delayed packets and delayed hello messages from retired streams are ignored. Retargeting sends clear to the old target, allocates a new UUID, and re-encodes the committed topology while reusing the healthy UDP socket. Changing rate keeps the stream and resends hello. Changing the mode cap creates a new topology transaction.

Messages

Every address is one UDP datagram and stays at or below 1,200 bytes. Vector messages are paged only when their payload would exceed that boundary. Each page adds startMode and pageModeCount; single-value vectors fit all 160 modes in one page, while paired vectors use at most 104 modes per page. OSC d values carry engine generations, engine topology revision, frame ID, and applied-control revision. Wire sequences/revisions are signed int32 values from 1 through 2,147,483,647; Baryon rotates the stream before wrap.

Receiver commit rules

A receiver should stage topology by (stream, exportRevision) and state by (stream, stateSequence, exportRevision).
  • Only a complete greater topology revision replaces active topology.
  • Equal-revision recovery is accepted only when byte-identical.
  • A state commits only at message mask 511, after every vector range covers exactly 0…modeCount-1, with the active topology revision.
  • A state sequence less than or equal to the last committed sequence is rejected.
  • An early state end remains pending; incomplete state expires after 250 ms or two newer sequences.
  • Committing newer topology discards obsolete assemblies.

Phase

phaseReferenceTimeSeconds is the observation time, falling back to frame time. For advancing observations, extrapolate from local commit time. When observationAdvancing is 0, use the phase at reference unchanged; paused files must not continue oscillating.

Value semantics

The exported coefficient is normalized modal amplitude. Natural frequency and Q are structural mode parameters; response frequency and observed support are observation-derived state. Frequencies are hertz, phase offsets are radians, and phase velocities are radians per second. spectralMomentX/Y and spectralSecondMomentX/Y are the canonical first and second circular spectral moments. They are physical pitch descriptors, not RGB values, confidence, or mass fields. modeCount = min(activeModalFieldModeCount, configuredModeCap). The maximum cap matches the engine’s 160-mode capacity; it never pads a smaller active field. modeCount = 0 still sends every vector address with startMode = 0, pageModeCount = 0, and no vector values. Coverage and authority fields distinguish silence from capacity or descriptor limitations.

Troubleshooting