Skip to main content
OSC Structure Export v5 sends the complete audio-derived modal model to an external receiver: Baryon → receiver. Parameter automation uses a separate OSC control path.
The full-basis engine uses protocol v5. Update custom receivers and replace v4 TouchDesigner components together with the engine. The protocols are incompatible.

Configure OSC Data Out

In the Performer show bar, open Control I/O → Data Out, configure the receiver, and turn on OSC Data Out. The counters report complete topology and state batches, not individual UDP datagrams. Every eligible family, shell and response-spectrum bin is included. Rate changes transmission cadence; it does not change the acoustic model. There is no mode cap. In Performer, the authoritative stage supplies the model with Output set to Off, Display, Syphon, or Spout. Enable OSC Data Out independently of the video destination. Topology describes the static basis, signed source overlaps, natural frequencies, Q and finite-response transitions. State carries signed pressure/velocity, raw pressure/velocity moment matrices, normalization energy, source sample clocks, finite-response spectral inputs and material controls. These are normalized virtual-system quantities, not a calibrated measurement of a venue’s sound field. A receiver holds the sampled state; it must not invent phase progression from its own clock. Material RGB values are display controls, separate from acoustic energy.

Receivers

The terminal receiver validates complete matching snapshots, rejects stale or corrupt assemblies, and reports the prepared sample clock and raw normalization energy. Local arrival time only expires incomplete fragments. Download baryon_osc_structure.tox and drop it into TouchDesigner. Match its OSC Data Port to Baryon’s Port. After activation, its tables expose: The committed full model is also available as component.fetch('receiver').topology and .state. Tables change only after complete commits or explicit invalidation. Incomplete packets never display a partially updated field. A new topology clears the previous state while waiting for its matching observation.

Stream lifecycle

Only /baryon/hello activates a new stream UUID. A new UUID permanently retires the previous one. /baryon/v5/clear clears and retires its UUID, including queued assemblies. Delayed hello messages cannot revive a retired stream. Retargeting clears the old target and uses a new UUID. Socket recovery advertises the stream and reinstalls cached topology, but requests a fresh dynamic sample. Topology is also repeated every two seconds for loss recovery. Identical topology replay does not install a second model. Unchanged samples send nothing. Loss of source authority clears the receiver and requires a new complete matching model. Sample identity uses the acoustic epochs, frame/sample endpoint and source phase, plus the canonical exported material value. Renderer counters and render receipts are not part of acoustic state or export eligibility. Material is accepted display input, not a claim that pixels have reached a GPU or screen. The producer owns audio state. Receiver acknowledgements, mirror telemetry, transport completion and topology replay cannot start or reset audio.

OSC message contract

The application name is Baryon; transport is osc-structure; version is 5. OSC integers below are signed 32-bit; revision and sequence counters start at one and rotate to a new stream before exhaustion. Acoustic counters inside the binary payload retain their nonnegative JavaScript safe-integer range. Pages contain at most 960 bytes; every page except the final one contains exactly 960. Indices are zero-based. Every complete OSC datagram is at most 1,200 bytes, including padding. Payloads are bounded to 4 MiB and JSON headers to 16 KiB. An oversized model is rejected explicitly, never silently truncated. Begin, all pages and end must agree. Verify the lowercase hexadecimal SHA-256 of the concatenated payload before decoding or publication. Reject conflicting duplicate pages. Reordering and identical duplicates are allowed. Keep no more than two topology and two state assemblies; expire incomplete assemblies after 250 ms. An expired/rejected state sequence cannot be resurrected by late pages. An incomplete static topology may recover from an identical genuine replay. Commit state only after its complete topology revision exists, its source epochs match and its physical packet validates. Reject regressed observation sample/frame clocks and sequences at or below the last committed sequence. A newer complete snapshot can recover after a lost one; UDP does not guarantee delivery.

Binary payload

baryon-full-model-le-v1 preserves Float64 values without quantizing or renormalizing them. The byte layout is:
  1. Four magic bytes 42 59 4e 35 (BYN5).
  2. Unsigned 32-bit little-endian JSON-header byte length.
  3. UTF-8 JSON {schemaVersion:5, kind, metadata, arrays}.
  4. Arrays concatenated in the fixed order below, with no inter-array padding.
Each array descriptor is {name, type, length}; length counts elements. u16 is unsigned 16-bit little-endian; f64 is IEEE-754 Float64 little-endian. Reject an unexpected name/type/order, inconsistent dimensions, nonfinite values, trailing bytes or invalid acoustic state. Typed-array lengths are checked before allocation. The complete reference decoders are in scripts/osc/receive-structure-export.mjs and scripts/touchdesigner/osc_structure_receiver.py in the source checkout. Topology metadata contains the v3 acoustic topology’s scalar fields and spectrum convention, plus fieldConvention. State metadata contains the v3 observation’s scalar fields and spectrum endpoint, plus material. Binary transitions, inputSpectrum and boundaryDelta are restored under each packet’s spectrum object. For F families, K shells, C channels and spectrum frame size N: familyIndices has 3F elements; familyShells and sourceOverlaps have F; natural frequencies and Q have K; transitions have 6K. Pressure and velocity have CK values in channel-major order. Each raw moment matrix is K × K, row-major. Input spectrum contains C(N/2+1) complex bins, interleaved real/imaginary in channel-major order; boundary deltas have 2CK values, interleaved pressure/velocity. No phase-offset or phase-velocity vector is transmitted.

Source validation and component rebuild

The last command requires an installed TouchDesigner and regenerates both checked-in component copies. The component embeds the independent Python receiver; it has no external Python dependencies. Headless checks prove packet/schema behavior and artifact contents. Loading and inspecting the component in TouchDesigner remains the operator-integration check.