Palinopsia · Control Surface

Palinopsia / OSC Reference

Every knob, slab and macro in the instrument answers to an OSC address. This is the full /opsia/… namespace : how Pandore, TouchDesigner, or any OSC source plays Palinopsia, and how Palinopsia answers back : mirroring its state, streaming the analyzed picture over /opsia/vision, and firing embodied gestures over /body. Opsia is just Palinopsia's short name : it is why every address starts with /opsia, and it is the name you will meet across this page.

namespace /opsia/… transport UDP values 0 – 1 normalized indices 1-based discovery OSCQuery : port+1

On this page

  1. 00Reading the map
  2. 01Layers
  3. 02Sources & FX racks
  4. 03A/B Harmony & Coupling
  5. 04Master finishing
  6. 05Background
  7. 06Field macros & Proximity
  8. 07World & Sequencer
  9. 08Macro knobs & Tempo
  10. 09Audio sensors
  11. 10Scenes & Randomize
  12. 11Sonify
  13. 12Vision
  14. 13Embodied · Body
  15. 14Discovery & feedback
  16. 15OSC Learn
00

Reading the map

one write path, uniform units

Continuous controls take a single normalized float, rescaled to the target's declared range on arrival, so a controller never needs to know a parameter's real min/max. A handful of address shapes cover everything else.

Continuous
One float 0..1, scaled into the declared range of the target.
Enum
An int index (from 0), a float 0..1 across the members, or the member's name string. The OSC type tag decides : a float 2.0 is the top of the range, not index 2.
Boolean
True at ≥ 0.5 (mute · solo · feedback · isolate).
Trigger
Fires on the rising edge : send 1, then 0 to re-arm.
Color
3–4 raw args r g b [a], or a single value read as grayscale.
Color part
Any color input's address followed by /hue, /saturation, /brightness or /alpha takes one float 0..1 : that part, in the color picker's own space, the rest of the color held.
Point2D
Two normalized args, each scaled to its own axis range.
Indices
Layers, Macro knobs, scenes, audio bands, Worlds and FX slots count from 1, like the UI. Enum indices count from 0.
Tempo
/opsia/bpm is sent in BPM, clamped 20..800. The few other raw values (seconds, gains, a pan, a count) say so in their row.
Outside /opsia
Any other address is a controller's own : OSC Learn learns it and plays what it was learned on (never in place of an /opsia/… address). While the Resolume mapper learns, Resolume's own /composition/… messages become its columns.
01

Layers

n = 1 … 4

A layer is addressed /opsia/layer1/… to /opsia/layer4/…, the form OSCQuery advertises and the feedback sends back. The older /opsia/layer/1/… is still read.

/opsia/layer{n}/opacity f 0..1

Layer opacity.

/opsia/layer{n}/speed f 0..1

Layer time multiplier : 0..1 maps to 0 to 20×.

/opsia/layer{n}/mix f 0..1

A/B source crossfade (0 = A, 1 = B).

/opsia/layer{n}/trail f 0..1

Feedback trail persistence.

/opsia/layer{n}/blend i · f 0..1 · s

Layer blend mode : an index, 0..1 across the 20 modes, or the name : normal · 50add · add · subtract · multiply · screen · overlay · softlight · hardlight · darken · lighten · difference · exclusion · dodge · burn · wrap · weave · lumakey · consume · lightercolor (index 0 to 19; 50add, the additive crossfade, came in at 1 in v1.3.0, so later indices moved up one).

/opsia/layer{n}/sourceblend i · f 0..1 · s

How B combines with A before the crossfade : the same 20 modes, by index, 0..1 or name.

/opsia/layer{n}/mute ≥ 0.5

Silence the layer.

/opsia/layer{n}/solo ≥ 0.5

Solo the layer.

/opsia/layer{n}/feedback ≥ 0.5

Layer samples its own previous frame.

/opsia/layer{n}/vary trigger

Vary this layer : a variant at its own amount, like its Vary button.

/opsia/layer{n}/video/{A|B}/play · loop · grain ≥ 0.5

A video slot's transport : play, loop, granular playback. Without {A|B} : the layer's first video slot. An Import audio slot answers to the same addresses (no direction, no grain).

/opsia/layer{n}/video/{A|B}/volume f 0..1

The film's own sound (0 = silent, the default), or an audio slot's volume. Heard on Sonify's output device.

/opsia/layer{n}/video/{A|B}/direction i · f · s

Forward · reverse · pendulum (index, 0..1 across, or the name).

/opsia/layer{n}/video/{A|B}/ignoreglobal ≥ 0.5

The clip plays at its own speed (× its layer's), whatever the global speed.

/opsia/layer{n}/video/{A|B}/speed f 0..1

Playback speed, log across 1/64× to 128× (a sound file plays 1/16× to 16×).

/opsia/layer{n}/video/{A|B}/position f 0..1

A one-shot seek within the trim (never echoed back : the playhead moves every frame).

/opsia/layer{n}/video/{A|B}/in · out f 0..1

The trim points.

/opsia/layer{n}/video/{A|B}/grainsize · grainspray · grainrev · grainjit f 0..1

The granular player's grain size, spray, reverse odds and jitter.

/opsia/layer{n}/video/{A|B}/grainsync i · f · s

Grains on free time or the tempo : free · 1/16 · 1/8 · 1/4 · 1/2.

/opsia/audiolayer/volume f 0..2

The Audio Layer's volume, a gain (1 = as it comes).

/opsia/audiolayer/mix f 0..1

A to B : 0.5 plays both whole, toward an end the other one fades out.

/opsia/audiolayer/mute ≥ 0.5

Mute the Audio Layer.

/opsia/audiolayer/play ≥ 0.5

Both files from their in points together (≥ 0.5), or both paused. Advertised, but never sent back by the feedback, so a destination that echoes its state can't restart the files mid-show (the per-slot play is sent).

/opsia/audiolayer/{A|B}/volume · pan · mute f

A slot's volume (a gain, 0..2), pan (-1 left .. 1 right), mute (≥ 0.5). A file, a live input or an NDI® source.

/opsia/audiolayer/{A|B}/play · loop · ignoreglobal · keeppitch ≥ 0.5

A file slot's transport; keep the pitch when its speed changes.

/opsia/audiolayer/{A|B}/speed · position · in · out f 0..1

A file slot's speed (log, like a video's; a sound plays 1/16× to 16×), a one-shot seek, the trim points.

02

Sources & FX racks

slot = A | B · i = 1-based

Each layer has two source slots and three FX racks : one per source, plus the mixed layer rack. Any shader input is addressable by its declared name; the value auto-scales to that input's type and range (including color and point2D multi-arg forms).

…/layer{n}/source/{slot} s

Swap the source generator : a shaderId (a shader of your own from the Source Editor goes by its user-… id), a built-in's display name, or none. The one already there keeps its settings. none empties the slot; a name it does not know leaves the slot as it is.

…/source/{slot}/{input} f 0..1 →

A source shader input, scaled to its range.

…/source/{slot}/{input}/{part} f 0..1

One part of a color : hue · saturation · brightness · alpha, the rest held. The same /{part} follows every color input address (its effects, the layer's, the master's, the Background's).

…/source/{slot}/fx/{i}/{input} f 0..1 →

An input on the per-source FX unit i.

…/source/{slot}/drop f f [f]

Marbling : a drop at x y (0..1 of the frame, y up), its size × the drop size (default 1). Live : never in the undo or the session. One number is the plain drop ▸ trigger.

…/layer{n}/fx/{i}/{input} f 0..1 →

An input on the per-layer FX unit i.

03

A/B Harmony & Coupling

per layer · the Mixer

How a layer's B answers its A : in color (the harmony) and to the sound (the coupling, driven by the audio tab's input). Both sit in the Mixer's columns.

…/layer{n}/harmony f 0..1

The A/B harmony, B's colors relative to A's (the Mixer's HUE, -1..1 there) : 0 pulls B onto A's colors, 0.5 leaves B as it is, 1 puts B on A's complement.

/opsia/coupling ≥ 0.5

The master switch for every layer's coupling (the Mixer header's ≈ coupling). On at launch, not saved.

…/layer{n}/coupling/mode i · f · s

Bond character : off · lean · hocket · cut · gate · drift.

…/layer{n}/coupling/amount f 0..1

Coupling depth.

…/layer{n}/coupling/tightness f 0..1

Vestigial (0) ↔ obvious (1).

…/layer{n}/coupling/feature i 0..6 · f · s

The audio feature that drives it : level · flux · transient · centroid · band · pitch · noisiness. An index (0 to 6) or a name reaches all seven; a float 0..1 spreads over the first six, level to pitch, as it always did, so noisiness takes index 6 or its name. Advertised and mirrored as a whole number 0..6.

…/layer{n}/coupling/band i 0..5 · f 0..1

Which of the six bands the band feature listens to : a whole number, 0 the lowest to 5 the highest, or a fraction 0..1 across the six. A whole number counts as the band whatever its type tag (a float 1.0 is band 1, the second). Advertised and mirrored as a whole number 0..5, so a fader built from the advertisement reaches every band.

…/layer{n}/coupling/auto ≥ 0.5

Level-matching (the Mixer's auto chip) : the feature heard against its own recent range, so a quiet track moves the mix as far as a loud one and silence stays still. On by default; below 0.5 the raw feature (a quarter-second crossfade). Advertised in OSCQuery and mirrored in feedback (1 on, 0 off).

04

Master finishing

always-on chain

Three locked finalizers close every composition : Vibe (palette / colour mastering), Context (atmosphere, depth, PBR relight) and the Finalizer (levels, grain, output shape). Address any of their inputs by name; freely-added master FX use the numbered rack.

/opsia/master/vibe/{input} f 0..1 →

A Vibe palette input (colour inputs take 3–4 args).

/opsia/master/{stage}/{color}/{part} f 0..1

A finishing color's part (vibe · context · finalizer) : hue · saturation · brightness (no alpha : these stages read RGB). Advertised in OSCQuery and sent back as feedback, like the Background source's color parts.

/opsia/master/context/{input} f 0..1 →

A Context input : haze, depth, light (point2D), PBR.

/opsia/master/finalizer/{input} f 0..1 →

A Finalizer input : levels, gain, grain, output shape.

/opsia/master/fx/{i}/{input} f 0..1 →

An input on a user-added master FX unit i.

05

Background

the ground the layers sit over
/opsia/bg/opacity f 0..1

Background opacity (0 = off).

/opsia/bg/speed f 0..1

Its own clock, 0 to 4× (0.0625 = the default 0.25×) : its source, effects and a Collage's films.

/opsia/bg/depth · bg/shadow f 0..1

The shadow the layers cast onto it (0 = flat).

/opsia/bg/blend ≥ 0.5

How the layers sit on it : 0 = blend in (Layer 1 blends onto it in its own mode) · 1 = group (the layers composite as if alone, and the Background shows through their dark and transparent parts).

/opsia/bg/randomize trigger

The Background's own dice : a new ground and rack, keeping opacity, speed, shadow and mode.

/opsia/bg/source s

Swap the ground (a ground's id or name, or none; anything else is ignored).

/opsia/bg/source/{input} f 0..1 →

A background source input, scaled to range.

/opsia/bg/source/drop f f [f]

Marbling on the Background : a drop at x y [size].

/opsia/bg/fx/{i}/{input} f 0..1 →

An input on background FX unit i.

06

Field macros & Proximity

0.5 = deadzone

Five single-float macros sweep the whole field at once. Each rests at 0.5 : pushing either way pulls the composition along one expressive axis. The temperament dials rest at 0 (off).

/opsia/density f 0..1

Sparse ⇄ dense.

/opsia/gesture f 0..1

Gesture ⇄ Texture.

/opsia/coalesce f 0..1

Dispersal ⇄ Coalescence.

/opsia/proximity f 0..1

Near ⇄ far : pushes the scene into depth.

/opsia/flow f 0..1

Flow ⇄ Interruption.

/opsia/tonicity · shutter · drift · superflicker f 0..1

The temperament dials (0 = off) : tonicity, the shutter, the analog drift, the superimposition flicker (held under the flash-safety limit).

07

World & Sequencer

diégèse · macro-form
/opsia/world s · i

Select the active World : id / name string, or a 1-based index into the bank.

/opsia/world/amount f 0..1

The World amount : how much of the active World's own change is on (1 all of it, the default; 0 the mood it found). Your edits, modulators and macros keep working under it. Remembered on this computer.

/opsia/seq/run ≥ 0.5

Run (≥ 0.5) or stop the macro-form sequencer.

/opsia/seq/skip trigger

Advance to the next scene now (respects transition + variation).

/opsia/seq/play ≥ 0.5

The Seq page's transport : play every lane marked with transport (the scenes, the Sonify keys, the Body rule timeline; the beat lanes together on bar 1, or on Ableton Link's next bar), or below 0.5 stop them all.

/opsia/seq/rules ≥ 0.5

Run (≥ 0.5) or stop the Body rule timeline : while it runs, each rule with blocks is on inside them and off outside them, in bars of the tempo; stopped, the rules stay as they are.

08

Macro knobs & Tempo

k = 1 … 16
/opsia/macro/{k} f 0..1

Drive Macro knob k, a smoothed macro that fans out to whatever you've mapped to it. Its old name /opsia/meta/{k} (before v1.3.2, when they were the Meta knobs) still works, in and in the feedback out.

/opsia/bpm f 20..800

Master tempo, raw, in BPM. With Ableton Link on, a tempo sent here counts as your own edit : it goes to every linked app (Link has no address of its own).

09

Audio sensors

inbound only · Pandore → Opsia

The audio brain pushes analysis features straight to the bus, where audio modulators and the A/B coupling read them per frame. They bypass the parameter store : sensor inputs, not controls, never echoed back on the feedback stream. They count while the audio tab's source is OSC, or Both (OSC wins while it is fresher than half a second, else the local input plays).

/opsia/audio/level f 0..1

Overall loudness.

/opsia/audio/flux f 0..1

Spectral flux (rate of change).

/opsia/audio/transient f 0..1

Onset / attack energy.

/opsia/audio/centroid f 0..1

Spectral brightness.

/opsia/audio/pitch f 0..1

Estimated pitch.

/opsia/audio/noisiness f 0..1

Noisiness (spectral flatness) : a clear tone at 0, noise at 1.

/opsia/audio/band/{1-6} f 0..1

Energy in one of six frequency bands.

10

Scenes & Randomize

rising-edge triggers

A control or a layer made Persistent (right-click → Persistent) keeps playing through a scene recall, a vary, or /opsia/randomize and its Transport scopes, fired from here as from the page. Pins have no address of their own; a message sent straight to a persistent control still moves it.

/opsia/scene/{n} trigger

Recall scene n (1-based) : full-instrument state.

/opsia/scene n i · f

Recall the scene whose number (1-based, rounded) is the argument. Not edge-tracked : every message recalls, so send it once (the dataflou mesh's scene destination plays this one).

/opsia/randomize trigger

Re-roll everything within curated ranges, at the Transport's intensity.

/opsia/randomize/{scope} trigger

Re-roll one scope, at the Transport's intensity : sources · sourceparams · sourcefx · sourcefxonly · layerfxonly · layer · master · finishing · modulators.

/opsia/panic trigger

Panic flush : drop every self-feeding buffer (feedback · trails · frame rings · accumulators) at once. Same as key 0 / the ⚡ Flush button; advertised over OSCQuery.

/opsia/vary trigger

Vary : a variant of the whole scene at the Transport's spread, like its Vary button.

/opsia/randomize/masterparams · macro · inspector · sonify · resolume · background trigger

The other randomizes, as MIDI Learn fires them : master FX parameters in place, the Sonify patch, the selected Inspector unit, the Resolume pins, the Background's dice, and macro, new Macro knob values with their destinations kept (not the Transport's Macro Knobs scope, which also re-rolls the destinations; that one has no address). meta, its old name, still works.

/opsia/output/x · y · scale · rotate · spin · feather f 0..1

The output transform : the whole finished frame moved as one picture, 0..1 over each range : x and y -1..1 (frame widths and heights), scale 0..2, rotate -180..180°, spin -360..360° a second, feather 0..0.2. 0.5 = none for x, y, scale, rotate and spin. Skipped while the dome is on (the dome has its own turn, spin and offset).

/opsia/output/flipx · flipy ≥ 0.5

Flip the output frame.

/opsia/output/edge i · f · s

What shows past the frame : black · repeat · mirror.

/opsia/output/reset trigger

Back to the frame as it is.

/opsia/space/mode i · f · s

Space : Sonify in the room, stereo · speakers · objects.

/opsia/space/turn · glide f 0..1

Turn the sound scene (0.5 = none) · how softly a following voice moves (0..2 s).

/opsia/space/mirror · headphones ≥ 0.5

Swap left and right · hear the room on headphones (binaural).

/opsia/space/pieces i · f

The Collage pieces as sources of their own : an integer count, or 0..1 of 30.

/opsia/space/{voice}/az · el · width · span · spin f 0..1

Where a Sonify voice sits, 0..1 over each range : az -180..180° (0.5 = straight ahead; an offset while the voice follows), el -15..90°, width 0..180°, span 0..1, spin -360..360° a second. Voices : spectra orbit flow events raster sstv filter chord collage signal assemblage.

/opsia/space/{voice}/follow ≥ 0.5

The voice follows the picture, else it stays at its fixed place.

/opsia/surface x y f f

Metasurface cursor : two 0..1 floats on the scene plane; the output becomes a live blend of the nearest scenes. Sending it turns the surface ON (Pandore's Trill Square plays it).

/opsia/surface/active bool

Enable / disable the Metasurface (≥ 0.5).

/opsia/surface/play bool

Draw sequencer : auto-trace the drawn path across the plane (≥ 0.5).

/opsia/surface/time f

Draw-path loop time : seconds (or milliseconds if > 120).

/opsia/surface/jump f

Draw-path jump jitter : 0..1 maps to 0–100 %. Random teleports of the playhead to other spots on the path.

/opsia/surface/way f

Draw-path direction : 0 forward · 1 backward · 2 ping-pong.

/opsia/surface/wiggle f

Draw-path smooth wobble : 0..1 maps to 0–100 %. A sinusoidal vibrato around the traced position (distinct from jump's teleports).

/opsia/surface/loop bool

Close the draw path into a loop (end→start), so forward play flows around instead of teleporting.

11

Sonify

image → sound · v = voice

The image-to-sound engine speaks its own sub-namespace. The eleven voices are spectra · orbit · flow · events · raster · sstv · filter · signal · chord · collage · assemblage (sstv is the Transmission voice); each takes the same shape of address, so a controller can play any voice's probes, pitch and timbre. The patch also travels with sessions and scenes. Index addresses (the root octave, a reading path, the orbit shape, the chord's voice count, a mode, an octave, a tap, a sync mode, the voicing) are advertised and sent as integers and read raw; a float sent there is read as 0..1 across the range. A NaN is read as 0.

/opsia/sonify/on bool

Master on/off for the sound engine.

/opsia/sonify/master f 0..1

Output gain.

/opsia/sonify/root · rootoct · scale i · s

The global quantizer (key root, root octave and scale) : a name (harmonic minor, dimwh, Diminished W-H…) or an index : 0 chromatic · 1 major · 2 minor · 3 minor pentatonic · 4 whole tone · 5 dorian · 6 phrygian · 7 lydian · 8 harmonic minor · 9 ionian · 10 mixolydian · 11 aeolian · 12 locrian · 13 major pentatonic · 14 major blues · 15 minor blues · 16 diminished W-H · 17 diminished H-W.

/opsia/sonify/keyseq/on · next bool · trigger

Run the key sequencer (≥ 0.5) or stop it; next changes the key now (each message at 0.5 or more, not edge-tracked).

/opsia/sonify/keyseq/mode s · i

How the next key is chosen : list · circle · affinity · pivot · picture.

/opsia/sonify/keyseq/glide · chance f 0..1

The glide to a new key (0 to 4 s) and the chance a change falls when the clock allows one.

/opsia/sonify/keyseq/every · vary f s · f 0..1

Free time : every how often a change may fall (0.25 to 300 s); vary draws each wait around it, between Every ÷ 4vary and Every × 4vary (0 = always Every).

/opsia/sonify/keyseq/keys s · i

Picture chooses from pool (0 : the roots and scales ticked) or list (1 : only the keys written for it).

/opsia/sonify/keyseq/range · hold f 0..1 · f s

Picture : range 0 reads the color wheel and the light as they are, 1 the piece's own range of them spread over every key and mood; hold the shortest a key stays (0 to 60 s).

/opsia/sonify/{v}/on · gain · pan bool · f

Per-voice enable, level and pan.

/opsia/sonify/{v}/{probe·pitch·param} f 0..1

A voice's probes (scan column, orbit centre/radius, raster rect…), pitch, and timbre / motion params, with the same names as the on-screen strip.

/opsia/sonify/eq/preset s · i

Recall a saved output EQ : its name, or its number in the menu (0 or flat : flat). The bypass switch and the glue stay.

/opsia/sonify/filter/linein · linefrom bool · s | i

The Filter voice plays a line-in (≥ 0.5) instead of its noise; linefrom says which : input (an audio input) or layer (the Audio Layer, its slots mixed before its own volume and mute).

/opsia/sonify/tap/a · tap/b i 0..4

What each image tap reads : 0 the master output, 1-4 a layer.

/opsia/sonify/{v}/tap i 0..1

Which tap a voice listens to (A or B). Every voice but collage and assemblage (they hear films, not the picture).

/opsia/sonify/{v}/looct · hioct i

A voice's octave range (spectra, flow, events, signal, chord, collage, assemblage, filter, synth) : an integer octave, or a float 0..1 across the voice's span (collage and assemblage reach octave 9); the low end always stays below the high end.

/opsia/sonify/spectra/sync · orbit/shape · filter/loop bool · i 0..4 · f

Spectra's sweep locked to the tempo (one sweep a bar; off, the rate you had set comes back); the Orbit's shape (circle, 1:2, 2:3, 3:4, 1:3); the Filter's noise loop (0 free noise, up a frozen stretch replayed : a flutter, then a buzz).

/opsia/sonify/collage/on · gain · pan · resonance · ring · harmonics · width · input · hp · lp · comp · ringin bool · f 0..1

The Collage voice : the films of a Collage source heard all at once, each piece panned by its place and rung at a note of the key. comp is one compressor on all the films (0 = off), so they hold one level.

/opsia/sonify/collage/hpslope · lpslope i 12 | 24 · f

The films' filters' slope : 12 or 24 dB per octave (an int as it is; a float, 0.5 and up = 24).

/opsia/sonify/glue/on · amount · voice bool · f 0..1 · s | i 0..4

The glue : one compressor on everything that leaves (Sonify and the Audio Layer), after the output EQ (both cards are in the audio tab). amount takes the threshold to -12 dB and the ratio to 4:1; voice clean · warm · punch · bite · slow.

/opsia/sonify/collage/bank · decay · cutoff · peak · slope · tone · tilt · waves · wavesrate · noise · noiserate · detune f 0..1

Its Ring bank (48 tuned resonant bands) : bank is the wet (0 the plain voice); tone and tilt are bipolar (0.5 = centre).

/opsia/sonify/collage/send · choke · wavessync · noisesync · voicing bool · i

The bank added on top (send) or crossfaded (mix); choke or sustain; sync modes 0 free · 1 straight · 2 triplet · 3 dotted; voicing 0 Clean · 1 SEM · 2 MS-20 · 3 Steiner · 4 K35.

/opsia/sonify/assemblage/{collage control} · accent · tape bool · f 0..1 · i

The Assemblage voice : an Assemblage edit's own sound, cut with the picture, each clip placed by its unit on the Assemble map. It takes every collage/… control above (its ring bank and octave range too), plus accent (a strike of the resonators at every cut) and tape (≥ 0.5 : the speed changes the pitch; below, the pitch is kept).

/opsia/sonify/chord/waves · wavesrate · wavessync f · i 0..3

The Chord's waves : a travelling level across its notes.

/opsia/sonify/signal/wave · heads · path · steps i · f 0..1

The Signal voice : read heads that play the picture as data. wave the grain (0 pip · 1 damped · 2 noise · 3 click · 4 fm · 5 square · 6 tri · 7 pink · 8 ping), heads 1 to 4, path 0 horizontal · 1 vertical · 2 radial · 3 spiral, steps per sweep 0..7 (8 · 12 · 16 · 24 · 32 · 48 · 64 · 96). An integer is the index; a float is 0..1 across the choices.

/opsia/sonify/signal/decay · tone · fm · rate · spread · thresh · density · snap f 0..1

Its grain length (0.2 ms to 500 ms), the noise grains' tone, the fm depth, the step rate (per second, or per beat when synced), the heads' polymeter spread, how bright a cell must be to fire, marks per head per step, and pitch from free frequency (0) to the scale (1).

/opsia/sonify/signal/sync bool

Lock Signal's steps to the beat clock both Sonify sequencers share : rate then counts steps per beat, and switching carries the pace over as the page's button does.

/opsia/sonify/synth/on · gain · pan · tap · looct · hioct bool · f 0..1 · i

The Synth voice : the moving things in the picture play it, each thing a voice (in poly the 8 strongest), its place the note on the key, its looks the sound. Its gain, its balance (0.5 the middle), its tap and its octave range (0 to 8).

/opsia/sonify/synth/engine · voices · filter · chorus s · i

Its engine (0 dco · 1 ms · 2 swarm · 3 fm · 4 modal · 5 voice · 6 fold · 7 pluck), voices (0 poly · 1 unison · 2 mono), filter (0 ladder · 1 ms · 2 morph), chorus (0 off · 1 I · 2 II) : a name or an index (a float 0..1 across the choices).

/opsia/sonify/synth/timbre · harmonics · morph · cutoff · resonance · drive · hpf · fmode · envamt · attack · decay · sustain · release · glide · drift · level f 0..1

Its sound : the engine's three macros, the filter (fmode the morph filter's low-pass to band-pass to high-pass), the envelope on the cutoff (envamt : 0.5 none), the envelope, glide, drift and its own level.

/opsia/sonify/synth/mode · grid · bars · slide · sens · picture s · i · bool · f 0..1

How the picture is read : mode 0 height · 1 keyboard · 2 radial (the dome : zenith to rim) · 3 score (a playhead on the beat, bars 0 one · 1 two · 2 four); grid 0 free · 1 on the 1/8 · 2 the 1/16 · 3 the 1/8 triplet; slide (≥ 0.5) or steps; sens how much movement counts; picture every patchbay depth scaled (0 : the picture only picks the notes).

/opsia/sonify/synth/patch/{dest}/source · depth s · i · f 0..1

The picture patchbay, one row per {dest} : vel · timbre · harmonics · morph · cutoff · reso · drive · env · pan · bend. source a name or an index : 0 none · 1 speed · 2 size · 3 brightness · 4 hue · 5 saturation · 6 texture · 7 x · 8 y · 9 direction · 10 age · 11 motion · 12 light · 13 warmth · 14 busyness · 15 cut (11 and up : the whole picture); depth 0..1 for -1..+1 (0.5 : none).

/opsia/sonify/synth/preset s · i

A factory sound by its name or its number (1-based) : the sound only (the read, the patchbay and the levels stay). Inbound only.

/opsia/sonify/fx/{input} f 0..1

The shared reverb / delay tail : send · delaytime · feedback · size · decay · damp · reverbmode · freeze · reverbmix …

12

Vision

outbound only · the picture answers back

The composited output is analysed back into features and streamed out (when OSC-out is on), so the image itself can play a sound brain, the inward half of the loop. Each is a single 0..1 float; bind them on the far side as you would any control. The Performance tab's picture section shows them all live, with what 0 and 1 mean.

/opsia/vision/{feature} f 0..1 →

One picture feature : brightness · contrast · motion · edges · entropy · centroidX · centroidY · warmth · saturation · hue · depth · depthSpread · flowX · flowY · divergence · curl · coherence (the last five are the picture's motion field : which way it flows, whether it spreads out or closes in, whether it turns, and whether it moves as one).

/opsia/body/{feature} f 0..1 →

One body feature, streamed while the Body camera runs : hands, each hand's shape handLeft… · handRight… + CurlThumb · CurlIndex · CurlMiddle · CurlRing · CurlPinky · PinchIndex · PinchMiddle · PinchRing · PinchPinky · Angle · Facing · Span (curls 1 = curled, pinches 1 = touching, angle 0.5 = upright, facing 1 = palm toward the camera, span 1 = close), pose, face, the nine silhouette zones, presence, the camera's motion field flowEnergy · flowX · flowY · flowDivergence · flowCurl · flowCoherence · flowCenterX · flowCenterY · flowArea, and the movement qualities moveEnergy · moveExpansion · moveFluidity · moveSuddenness · moveDirectness · moveSymmetry.

13

Embodied · Body

rule bangs out under /body/ · rules on / off in

The Body page's gesture rules can fire their own OSC. When a rule fires and its OSC out is on, Opsia sends a bang to the OSC-out target, so a body gesture (a pinch, a hand shape such as a fist, a peace sign or horns, a pose, a shadow covering a screen zone, someone walking into frame) can play the sound side. These live under /body/…, outside the /opsia namespace, with the name you gave the rule. Coming in, each rule can be turned on or off while you play, under /opsia/body/rule.

/body/{name} i 1

A gesture rule fired : the custom OSC name, or a truncated default like /body/HandsUpRndMod.

/opsia/body/rule/{n}/active · toggle ≥ 0.5 · trigger

A rule on or off, n its place in the Body page's list (1-based) : active ≥ 0.5 turns it on, below off (float, int or bool; fed back when it changes, camera on or not); toggle turns it on, or off when it is on. An inactive rule's gesture still shows in the monitor and fires nothing.

14

Discovery & feedback

two-way sync

Opsia doesn't just receive : it describes itself and mirrors its live state, so a controller's surface can auto-bind and stay in lock-step as modulators sweep, scenes recall, or a hand moves a slider. Three routes, one shared address space.

OSCQuery · HTTP

The fixed controls, self-describing (type · range · value · description) : index addresses typed i, the picture's features read-only. Shader inputs on sources and FX racks are not listed (address them by name); the three finishing units' and the Background ground's float inputs are.

On this computer only (it listens on 127.0.0.1; on port-1 when the OSC port is 65535). The tree follows what is loaded : while OSC in listens, it is published again (at most twice a second) whenever the rows change, a source or an effect loaded, a slot's film or sound, the Audio Layer's slots, the ground's inputs, the Body camera and its features.

http://127.0.0.1:port+1/ · ?HOST_INFO

OSCQuery · WebSocket

A live value-stream on the same port for web / no-UDP clients, every 100 ms while one is attached. With no LISTEN a client gets every path; LISTEN narrows it to the paths named, IGNORE drops one. Triggers, seeks, the audio sensors and /opsia/audiolayer/play are never streamed.

→ {COMMAND:"LISTEN", DATA:"/opsia/…"}
← {FULL_PATH, VALUE:[v]}

Outbound feedback

A throttled diff-and-send loop (every 100 ms) pushes only changed controls back to a configured host:port : the same /opsia/… addresses and values as OSCQuery advertises, indices as ints. It follows what is loaded live. Triggers, seeks, the audio sensors and /opsia/audiolayer/play are never echoed. Pandore's UI tracks Opsia's.

Opsia → UDP → host:port

MARK · the picture as sound

A scanline of the output, drawn like an optical soundtrack : /opsia/av/mark-signal (32 floats) with mark-level · mark-centroid · mark-flux, to the same host:port.

MARK on, in the OSC section's ↗ out

The OSC monitor (the OSC section's monitor button) shows every message in and out, live, with its address, values and destination.

The same addresses are played by two other routes : the dataflou mesh (each of its destinations is an /opsia/… address, played once per change) and the Agent (MCP)'s osc tool (/opsia/… only; a trigger it sends fires every time). The agent's numbers go as 0..1 floats, as on the wire, so 1 is the top of a menu; an int goes only to an index address, or as {"int": n}.

15

OSC Learn

any controller, in its own addresses

One port, two doors. Every message arrives on the same OSC input port : /opsia/… goes to the map above, exactly as before and also while Learn is on; any other address is a controller's own, learned in MIDI Learn's mode and played through what it was learned on. A learned address never replaces or hides a built-in one, and both may drive the same control : the last message wins.

Learn

MIDI Learn on, click a control, send from the controller : the first message, MIDI or OSC, binds. Every learnable control learns OSC (Macro knobs, transport, layers, Feel, scenes, rule boxes, the learn list's actions); one address can play several. One number : that value. Several (/accxyz x y z) : the one moved most over 300 ms. Strings are passed over; no value is a press. A stream already flowing at the click waits 1.5 s for anything fresher. Bundles unpacked, no wildcards.

/1/fader3 → Layer 1 opacity

Range

Found from the values : inside 0..1 (and true / false) → 0..1, inside -1..1 with some below 0 → -1..1, whole numbers to 127 → 0..127, else the span seen. It widens for 5 s after learning, then is typed per row in the Connect tab's mappings list. Continuous controls get it scaled into their own range; triggers fire going up past the middle (1 then 0 is one press), a rule's box toggles on each press.

i 64 of 0..127 → 0.504

Answers

Give the controller a reply port in the list : its learned controls answer in its own address and range (ints when it sends ints), at the IP it sent from, on change only, at most 30 a second, never the value that just came in (0.3 s after it last moved). The value playing : a modulator's, a scene recall's, Generate's. Off until a port is set; on / off per controller.

Opsia → UDP → controller IP : reply port

This computer · this session

Learn into computer (every session, as before) or session (saved in its file : a piece's own setup; New clears it, Generate keeps it, scenes never touch it). On an address and value the session uses, its mapping stands in for the computer's, there only. Learned addresses are never advertised : OSCQuery and dataflou keep /opsia only.

session > computer, per input