ORRERY

GENERATIVE MIDI UNIVERSE
USER GUIDE  //  VERSION 0.9.0  //  RECLUSE STUDIOS

CONTENTS

  1. PART I — Getting started
  2. PART II — Building a universe
  3. PART III — Reference
PART I

Getting started

A generative MIDI universe, in your DAW. Orrery runs a patched solar system of musical bodies — clocks, keys, progressions, gravity — and streams the result to the host as multichannel MIDI. You bring the synths.

SEC.01 // INSTALL

Run Orrery-Setup-x.y.z.exe. No admin needed. It puts

%LOCALAPPDATA%\Programs\Common\VST3\Orrery.vst3 %LOCALAPPDATA%\Programs\Common\CLAP\Orrery.clap

on your DAW's default scan paths, and the quickstart, EULA and example patches under %LOCALAPPDATA%\Programs\Recluse Studios\Orrery. Rescan plugins once. Windows 10/11 x64. Both formats behave identically; pick the one your DAW likes.

SEC.02 // FIRST LIGHT

  1. Insert Orrery on a track. It arrives with FirstLight loaded.
  2. Put a synth after it on the same track (or on another track — see routing).
  3. Press play in the DAW. It plays. Stop, loop, seek — every sounding note is released first. Host tempo and transport are truth: the universe follows your grid at any tempo, and offline render is exact.

The editor is resizable. The footer reads engine ∥ patch file ∥ license.

SEC.03 // ROUTING

Orrery emits on one MIDI port, sixteen channels — each midiout body in the patch owns a channel (ch=N). Split channels onto tracks with your DAW's MIDI sends (REAPER: send → MIDI 5 → 1, or All → All into a multitimbral instrument). Multiple CLAP note ports are on the roadmap.

Recording. Orrery makes its MIDI inside the FX chain, so a track's default Record: input hears nothing. REAPER: set the track's record mode to Record: output (MIDI) (Orrery on its own track, MIDI send to the synth track), or Record: output (stereo) on the synth track for audio. Or just render — the performance is deterministic.

Control. Numbers can leave the universe too. Wire any number stream — a contour, an lfo, a gravity body's pull, a dice roll — into a midiout body's cc<N>, pb or at port and it becomes MIDI control on that body's channel:

  ramp.out  -> voice.cc74          # filter cutoff, MIDI-learn it on your synth
  swell.out -> voice.pb            # pitch bend, 0.5 sits at centre
  grav.pull -> voice.at            # channel aftertouch
  swell.out -> voice.cc1_14        # 14-bit: MSB on CC 1, LSB on CC 33

cc<N>_14 works for N up to 31 (its LSB rides N+32) and always sends the pair together, MSB first. The separator is there because cc114 is already CC 114 — cc1_14 is the 14-bit one.

A body's mod1mod4 slots work too. On the desktop those name a hosted plugin's parameters; name one after a controller and the plugin routes that slot there, so one file means the right thing in both places:

  voice : midiout  ch=1  mod1="cc11"
  ...
  swell.out -> voice.mod1          # expression, on CC 11

Type the port name into the wire dialog's TO PORT field (it takes any name; the list is only a suggestion), or write it in the patch text.

0..1 is the unit of exchange — 0 becomes 0, 1 becomes 127 (pitch bend gets the full 14 bits, centred at 0.5), and anything outside clamps rather than wraps. That is the range lfo, gravity.pull, morph drift, collide force and a default contour already speak. A stream that lives somewhere else is brought into range by the wire's own bead:

  dice.roll -[scale 0.2]-> voice.cc1     # a 0..5 die into the full sweep
  sun.tempo -[clamp 0 1]-> voice.cc74    # keep an unbounded number in bounds
  swell.out -[curve 2]->   voice.cc11    # bend the taper

Control is generated with the notes, so it is sample-accurate, identical at any buffer size, and follows the host tempo exactly like the music does. Repeated values are not resent and a rate cap keeps a fast stream from storming the host. Relocate — press play mid-piece, or loop — and every controller is restated at the new position, so a synth is never left on a stale value. A patch that draws no control wires sends no control at all.

control.orr in the install folder is this by example — LOAD it, learn CC 74 on your synth's cutoff, and press play.

SEC.04 // THE CANVAS

The window is the Celestial Canvas — where you build and watch the universe. Everything is direct manipulation; the patch text is just what gets saved:

Scenes and nudges are live. Click a scene and it lands on the next bar, carrying whatever is still sounding -- no cut notes, no re-articulation, no seam. The Scene parameter is host-automatable, so you can draw scene changes into an automation lane and they arrive the same way. Nudging a body's control on the canvas takes effect almost at once. Behind either, the plugin quietly re-derives the rest of the piece and swaps it in on the beat; the patch's own @work chain keeps running on its schedule regardless.

One consequence worth knowing: because the future is re-derived from the patch text, a nudge is an offset held by the plugin, not an edit. It lasts as long as the patch does, and loading another patch clears it. To make a change permanent, type it into PARAMS and SAVE.

SEC.05 // OSC OUT

The header's OSC button broadcasts what the universe is doing to any OSC listener -- TouchDesigner, Resolume, Max, a homebrew shader rig -- over UDP. Off until you ask for it, remembered with the project, and it keeps sending with the plugin window closed, which is the point: set it up, close it, work.

The wire format is the desktop Orrery's, byte for byte, so a rig built against orrery play --osc host:port works here unchanged:

  /orrery/note          (iiff)  channel (1-based), pitch, velocity, dur_beats
  /orrery/<body>/<port>         numbers (f), triggers (), gates (i)
  /orrery/scale/<body>  (i x12) the ring: one int per pitch class, 1 = lit
  /orrery/chord/<body>  (i x n) midi pitches
  /orrery/scene         (s)     on a scene change
  /orrery/meter         (ii)    the patch's opening meter, once per rebuild
  /orrery/tempo         (f)     the HOST's tempo -- see below

/orrery/tempo is the one addition: it carries the tempo of the DAW you are running in, which the desktop has no way to know. A patch's own transport still announces itself as /orrery/<sun>/tempo exactly as it does on the desktop.

Two things are deliberately not sent, because sending them would mean guessing: gravity fields (the plugin's telemetry keeps the well's weights but not its centre, and a half-message would misparse in a receiver expecting the desktop's), and mid-patch meter changes. Notes, numbers, scales, chords and scenes -- the things a visuals rig actually rides on -- are all there.

Sending happens on its own thread, never the audio thread, and is fire-and-forget: an unreachable destination is silence, not a dropout. Expect telemetry within a few milliseconds of the audio that caused it -- fine for frame-rate visuals. The MIDI itself is unaffected and stays sample-accurate.

SEC.06 // PATCHES

Patches are plain text (.orr). Bodies in @bodies, wires in @orbits, positions in @sky, scenes in @scenes, scene chains in @work. Wires carry music, never audio.

New to this? Read Part II first — it builds a patch from an empty sky in a few minutes and explains the way of working, which is genuinely unlike most plugins. Part III is the language reference — every body you can place, every port you can wire, every param you can write, with its range and default. It is generated from the vocabulary the plugin itself runs on, so it always matches the build you have.

Example patches ship in the install folder: firstlight.orr, the universe the plugin opens with, and control.orr, the control-output example above.

SEC.07 // AUTHORIZATION

Fourteen-day trial, full function. After that, note-ons are muted (note-offs always pass) until you activate: LICENSE → email + ORR-XXXX-XXXX-XXXX-XXXX serial → ACTIVATE. Three seats per license; DEACTIVATE frees this machine's seat. Activation talks only to key.reclusestudios.net and sends the serial, the email, and a non-reversible machine id — never your music.

Support: support@reclusestudios.net · Licensing: licensing@reclusestudios.net

Recluse Studios

[ figure: the Celestial Canvas, with a patch loaded ]
PART II

Building a universe

Most plugins hand you an instrument and you play it. Orrery hands you an empty sky and you build something that plays. That is the whole difference, and it is worth ten minutes before you touch anything.

You are not sequencing notes. You are wiring up a small machine — a pulse, a sense of key, something that decides what to play, forces that bend it — and then you press play in your DAW and listen to what the machine does. Change one wire and everything downstream changes with it. That is the instrument.

Nothing here needs the patch text. Everything below is done by clicking in the canvas; the text is just what gets saved.


SEC.01 // THE SPINE

Almost every patch that makes a sound has the same five parts. Learn this shape and you can read any patch, including the ones that ship.

   a pulse  ->  something that decides notes  ->  a way out
                          ^
                   a sense of key
                  (and, optionally, forces that bend the result)

Concretely, the smallest thing that plays:

you needa bodywhy
a pulseclocknothing happens without time passing
something decidingsequencerturns pulses into notes
a way outmidioutnotes leave here, on one MIDI channel

Three bodies, two wires, and it plays. A key comes next, and everything else in Orrery is making that middle part more interesting.


SEC.02 // BUILD ONE FROM AN EMPTY SKY

Do this once by hand. It takes about two minutes and it makes every other patch readable.

1. Place three bodies. In the palette on the left, click clock, then click somewhere in the sky. It lands there. Do the same for sequencer and midiout. Drag them into a rough left-to-right line — the layout means nothing to the music, only to you.

2. Wire the pulse. Press W (or click wire two bodies), click the clock, then click the sequencer. A little dialog appears asking which port on each end. Take tick out of the clock, and gate into the sequencer. Click wire it.

3. Wire the way out. W, sequencermidiout, notes out into in.

4. Press play in your DAW. Not in the canvas — the transport is your host's. Put a synth after Orrery on the track (or send its MIDI to a synth track). It plays: a seeded, wandering line. Every note it will ever play is already decided — the same seed gives the same performance forever — but it is not yet in any key.

5. Give it a key. This is the step that teaches you how Orrery thinks. A sequencer has no "key" input; it does not know about scales at all. Instead you put a notefilter in the path and hand that the key:

(To rewire, click the old sequencermidiout wire so it turns red, press Delete, then draw the new ones.)

Now the wandering line is filtered — notes off the scale simply do not get through. That is the shape of nearly everything here: a thing that generates, and things in the path that judge and bend what it made.

If that feels too lossy, set the notefilter's miss to snap. Instead of turning a stray note away it moves it to the nearest note that fits, so nothing is lost and everything is still in key. drop (the default) curates; snap corrects. Both are useful, and the difference is worth hearing — set it, press Enter, and listen to the same seed both ways.

6. Change one thing. Click the key body and, in PARAMS on the right, set scale to aeolian, press Enter. The universe restarts and the same machine plays something else. That is the loop you will spend all your time in.


SEC.03 // WHAT THE FAMILIES ARE FOR

Full detail — every port, every param, every range — is in Part III. This is just the map, so you know what to reach for.

Time. transport is the sun: one tempo for the patch (your DAW's tempo still rules the grid). clock is the pulse. sections counts out a form. lfo and contour are slow movement — an lfo runs on its own, a contour steps each time something pokes it. counter counts what arrives and fires when it reaches its target: the plain way to say every fourth one.

Pitch & harmony. key sets the tonal centre and mode, and hands a scale down the wire. progression walks roman numerals against that key and emits chords. voicelead turns chords into actual playable notes, choosing inversions that move least. notefilter is the bouncer — it takes a scale and refuses anything off it, or on degrees you ban, unless you set miss=snap and it moves them into the key instead. intervals walks a shape rather than a scale.

Only some bodies accept a scale. A scale can be wired into notefilter.scale, progression.key, intervals.scale, phrase.scale, mirror.scale and gravity.center — and nowhere else. A sequencer has no opinion about key; you shape what it made further down the chain. When in doubt, the wire dialog only suggests ports that exist.

Rhythm & chance. euclid spreads N hits over M steps — the classic generative rhythm. Wire its pattern into a sequencer's gate and the line steps only on the hits; wire its shape into that sequencer's mask instead and the line walks every step and only sounds on the hits. Same rhythm, two different tunes — worth trying both on the same patch.

A euclid's shape is a thing you can pass around and change on the way. The flip bead turns hits into rests, reverse reads the necklace backwards, and a pulsar plays whatever shape you hand it. That gets you a second part built from the first:

  puls.tick            -> ring.clock
  ring.pattern         -> kick.step       # the kick plays the hits
  ring.shape -[flip]-> beam.shape         # beam : pulsar
  puls.tick            -> beam.clock
  beam.pattern         -> hats.step       # ...and the hats play the gaps

Change ring.hits and both parts follow — one source of truth instead of two euclids to keep in step. A pulsar's rotate is scene-settable (a euclid's is not), so the derived part can turn against the source while the piece plays.

And interfere lays two shapes over each other. Two rhythms already layer without it — wire both euclids at the same port and both fire. What it gives you is where they agree (op=and) or where they trade off (op=xor):

  three.shape -> mesh.a          # mesh : interfere op=and
  eight.shape -> mesh.b
  mesh.out    -> accent.shape    # accent : pulsar — hits only where they agree

Shapes of different lengths run out to the length where the pair repeats, so a 3 against an 8 gives you the whole 24-step conversation rather than the first eight steps of it. That is the cheapest polyrhythm in the system. dice picks from a list, seeded, so it is random but repeatable. seq / sequencer step through notes.

Physics. This is where Orrery stops resembling other tools. gravity has a centre and a mass, and it pulls notes toward the stable tones of that centre — so you can have a key saying one thing and a gravity well bending it somewhere else. Negative mass pushes away instead. inertia gives a line momentum, so it keeps heading the way it was going. Others (wormhole, redshift, neutronstar, supernova) are stranger still — worth an afternoon.

Output & glue. midiout is the door: one MIDI channel per body, and that is how you drive several synths from one patch. capture records what passes. balance weighs two number streams against each other and fires when one overtakes the other — the comparison a bead cannot make, since a bead only ever sees one stream.


SEC.04 // MAKING IT MOVE

A patch that plays the same thing forever is a loop, not a universe. Three ways to give it a life:

Beads — shaping on the wire itself. Click a bead in the palette, then click a wire, and whatever passes gets transformed: note -12 drops it an octave, scale 0.5 halves a number, clamp 0 1 bounds it, lag 0.6 smooths it, curve 2 bends its taper, invert turns it upside down so that as one thing rises another falls. One bead per wire, and a neutral setting changes nothing, so they are safe to try.

Scenes — a set of changes with a name. A @scenes block names values for several bodies at once (a key change, a new mass, a different mode). A @work chain moves between them on schedule — Dawn -> Noon after=2bar. This is how a patch gets an arrangement. You can also fire one by hand — click it, and it lands on the next bar, carrying whatever is still sounding. The Scene parameter is host-automatable, so you can draw scene changes into an automation lane and they arrive the same way.

Numbers that wander. Wire an lfo or a contour into a param-shaped port and the patch breathes on its own. Anything that carries a number can drive anything that accepts one.

An lfo can be moved too. Its rate is a port as well as a param, so one slow shape can steer a faster one, and reset restarts the cycle — wire a section boundary or a beat into it and the wobble locks to the music instead of drifting against it:

  drift.out     -[scale 4]-> breath.rate   # a slow tide bends a faster one
  form.boundary ->           breath.reset  # every section opens on a fresh cycle

The rate port offsets what you wrote, the way a clock's does, so a 0..1 stream barely moves a 1hz LFO until you scale it up.

An lfo can be written in musical time, which is usually what you want in a DAW — a cycle measured on the grid stays locked to bars however the piece is played:

  swell : lfo  rate=4bar          # one full cycle every four bars
  tide  : lfo  rate=8th           # one every eighth note
  slow  : lfo  period=16bar       # `period` says the same thing

Note values are written the way you would write them — 8th, 16th, 32nd, 4th (a beat), 1st (a whole note) — and bar / beat work too. An LFO emits 32 times per cycle, so a 4bar cycle lands on an eighth-note grid, exactly.

Real time still works where you want a shape that ignores tempo: rate=0.5hz, period=90s, even period=1day for something that drifts across a session.

The other way to move in musical time is a contour driven by a clock, which steps once per trigger rather than sweeping continuously. contour's span is how many steps make a full cycle, so span=32 clocked at 8ths is a four-bar shape. control.orr is built this way.


SEC.05 // GETTING IT OUT

Notes. Each midiout body owns a MIDI channel (ch=). Several bodies means several channels out of the one plugin, which you split in your DAW — that is how one patch drives a pad, a bass and a bell at once.

Control. Wire a number into a midiout body's cc74 (or pb, at, cc<N>_14) and it leaves as MIDI control on that channel — MIDI-learn it on a synth and the universe is moving your filter. 0..1 is the unit of exchange. See <a href="#qs-sec-03-routing">Routing MIDI to your instruments</a>.

A note stream can drive one too, through a bead that reads what the note carries — loudness for how hard it was played, pitch for which note it was:

  lead.notes -[loudness]->    voice.cc11   # louder playing opens the swell
  lead.notes -[pitch 127]->   voice.cc74   # key tracking: the filter follows the line

The 127 matters. A pitch is a MIDI number, not a 0..1 value, and anything above 1 pins the controller at full scale — so dividing it is part of the bead, because a wire carries only one.

Visuals. The OSC button broadcasts everything the patch is doing — notes, numbers, scales, chords, scenes — to a visuals rig. See <a href="#qs-sec-05-osc-out">OSC out</a>.


SEC.06 // IT IS NOT MAKING A SOUND

In order of how often it is the answer:

Is your DAW playing? Orrery follows the host transport. The canvas's own Space bar does nothing here.

Does the wire land on a port that exists? This one now tells you. A wire to a port a body does not have is refused when you draw it, and the message names the port you asked for and lists the ones that body really has. It is worth knowing the shape anyway, because the near-misses are so plausible: a sequencer listens on gate, but a progression listens on clocknot gate; an arp steps on step while a euclid steps on clock, which is the reverse of most people's guess; a sequencer has no scale port at all, so a key wired straight at it is not a quiet key, it is a wire that cannot exist. A midiout takes notes on in.

The exception, and it is deliberate: midiout, capture and script accept any port name, because that is how a midiout names control output (voice.cc74, voice.pb — SEC.05) and how a script names whatever its Lua listens for. On those three, a typo is still yours to catch.

Is a notefilter eating the line? It is a bouncer by default: a note that is not in the scale does not get through, and a chromatic source against a narrow scale can be turned away almost entirely. Set the notefilter's miss to snap and it moves those notes into the key instead of refusing them — same scale, nothing lost. (Ban every degree with deny and even snap has nowhere to put a note; that is the one case where it is still silent.)

Is it emitting chords where notes are wanted? A progression emits chords, and a midiout only plays notes. A chord wired straight at the output makes no sound. Put a voicelead between them — that is its whole job.

Does the thing have what it needs to decide? A progression with no key wired in counts along forever and never emits, because it has no scale to build chords from. Same shape of problem elsewhere: if a body looks inert, check what it is missing rather than what it is doing.

Is the trial over? After the trial the footer reads OUTPUT MUTED and note-ons stop (held notes are still released properly — it never leaves a note hanging).

Did the patch fail to build? Then the last good universe is still playing and a toast said why. Orrery never goes dead on a bad edit.


SEC.07 // HABITS THAT PAY


Recluse Studios · Orrery. the earlier parts for install, routing and the canvas; Part III for every body, port and param.

PART III

Reference

Every body you can place, every port you can wire, every param you can write.

This file is generated from the engine's own vocabulary table, so it is never out of date with the plugin you have: if a body gained a port, it is here. Prose in the tables is the engine's own.

A patch is plain text. The sections it can carry:

@patch  <name>          the name shown in the canvas header
@bodies <name> : <kind>  key=value  key=value …
@orbits <body>.<port> -> <body>.<port>          a wire
        <body>.<port> -[<bead> <opts>]-> …      a wire with a bead on it
        <body>.<port> ~> <body>.<port>          a feedback wire (delivered one tick later)
@sky    <body> (x,y)  <body> (x,y) …            where bodies sit on the canvas
@scenes <name> : <body>.<param>=<value> …       a named set of changes
@work   <from> -> <to>  after=2bar              a scene chain
@notes  (x,y) "text"                            sticky notes on the canvas

Values are numbers (120, 0.5, -6db, 120bpm, 2bar), bare words (dorian, saw), quoted text ("Cutoff"), note names (C, F#, Bb), or lists in parentheses ((i bVII i v)).

Wires carry music, never audio — a note, a scale, a chord, a number, a trigger, a gate. What a port carries is in its carries column below, and a wire only makes sense when the two ends agree.


Time

transport

The sun: one master tempo that stretches time for the whole patch, and anything can conduct it.

Inputs

portcarrieswhat it does
temponumberbpm offset — anything can conduct

Outputs

portcarrieswhat it does
temponumberthe effective tempo, whenever it changes

Written params

paramrangedefaultsceneswhat it does
tempo10…1200bpm120bpma scene can ramp itthe master tempo
meterquoted text"4/4"a scene can set it (jumps)the time signature — every bar-denominated thing follows it (the bar unit, scenes, works, sections, the trace, the MIDI grid). Scene-settable: a meter map is scenes moving it, always landing on a bar line. Numerator 1-32, denominator 1/2/4/8/16

clock

The pulse: a trigger every beat, with an optional swing that keeps each pair of ticks the same total length.

Inputs

portcarrieswhat it does
ratenumberbpm offset
swingnumberoffsets the written swing

Outputs

portcarrieswhat it does
ticktriggeronce per beat

Written params

paramrangedefaultsceneswhat it does
rate1…1200bpm120bpma scene can ramp itbeats per minute
swing0.5…0.90.5a scene can ramp it0.5 straight, 0.66 a triplet lean

counter

Counts what arrives and fires when it reaches the target, then starts over — the plain way to say every fourth one. Deaf to the value, so it counts notes and triggers as happily as numbers.

Inputs

portcarrieswhat it does
clockanyanything arriving here counts as one
resetanyback to zero — the next arrival is 1 again

Outputs

portcarrieswhat it does
outtriggerfires the moment the count reaches target
countnumberthe running count, 1 up to target

Written params

paramrangedefaultsceneswhat it does
target1 and up4a scene can set it (jumps)count this many, fire, and start over

sections

The arrangement as a body on the map: write the form as bars per section, feed it beats, and it names the section you're in and fires a trigger at every handover.

Inputs

portcarrieswhat it does
clockanyone value per pulse of the meter — quarters in 4/4, eighths in 7/8

Outputs

portcarrieswhat it does
sectionnumberwhich section you're in (1-based), announced at start and at every handover
boundarytriggerfires as each section hands over to the next — wire it into reset ports, or name it in a work link (on=form.boundary)
beatanythe clock, passed through AFTER any boundary work — drive your loops from here and resets land before the downbeat plays

Written params

paramrangedefaultsceneswhat it does
plana list — (bars per section)(4 4)written onlythe form — (4 8 8 4) is intro, verse, chorus, outro; it rounds forever

lfo

A slow sine from 0 to 1 — breathing, drifting, tides. Write a cycle in musical time (4bar, 8th) to sit on the grid, or in hz / seconds / days / years to float free of it. Free-running until you wire its reset.

Inputs

portcarrieswhat it does
ratenumberoffsets the written rate, in hz — scale a 0..1 stream first
resetanystart the cycle again from zero — wire a bar or a section boundary here to phase-lock it

Outputs

portcarrieswhat it does
outnumber0..1, 32 times per cycle

Written params

paramrangedefaultsceneswhat it does
rate0.0001 and up (hz)1hza scene can set it (jumps)cycles per second — or write a musical cycle instead: 4bar, 2beat, 8th
perioda duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)1swritten onlyone full cycle — wins over rate; musical (4bar, 8th) or real (s/min/hour/day/year)

contour

A shape you step through by hand: each trigger on advance nudges it one notch between min and max.

Inputs

portcarrieswhat it does
advanceanyany value steps it once

Outputs

portcarrieswhat it does
outnumbersomewhere between min and max

Written params

paramrangedefaultsceneswhat it does
shapetriangle · saw · sinetrianglewritten onlythe curve it walks
minany number0a scene can ramp itthe bottom of the swing
maxany number1a scene can ramp itthe top of the swing
span1 and up64a scene can set it (jumps)advances per full cycle

Pitch & harmony

key

The tonal centre of your universe — pick a note and a mode, and everything downstream derives from it.

Inputs

portcarrieswhat it does
modenumber0-6, rotates the mode — modes ARE rotations

Outputs

portcarrieswhat it does
scalescalethe scale in force
keyscalethe same, as a key

Written params

paramrangedefaultsceneswhat it does
centera note name (C, F#, Bb) or a pitchCa scene can set it (jumps)the tonic
scaleionian · major · dorian · phrygian · lydian · mixolydian · aeolian · minor · locrianioniana scene can set it (jumps)the mode (alias: mode)

notefilter

The bouncer — notes off the scale, or on degrees you have banned, do not get through. Set miss=snap and it stops turning them away and starts moving them into the key instead.

Inputs

portcarrieswhat it does
scalescalewire it from a key
innotenotes to judge

Outputs

portcarrieswhat it does
outnotethe ones that made the cut — or, with miss=snap, all of them, moved to fit

Written params

paramrangedefaultsceneswhat it does
denya list — (1-based degree)()written onlydegrees to refuse: (2 6)
missdrop · snapdropa scene can set it (jumps)what happens to a note that does not fit — turn it away, or move it to the nearest note that does (never onto a denied degree)

progression

Roman-numeral chord changes against whatever key is wired in, advancing every few bars.

Inputs

portcarrieswhat it does
keyscalethe key to build on
clockanycounts 4 beats to the bar

Outputs

portcarrieswhat it does
chordchordone chord per each

Written params

paramrangedefaultsceneswhat it does
followa list — (roman numerals — quality suffixes 7 maj7 9 sus2 sus4 dim aug; flats borrow the root (bVII); case is color in written spelling)(i)written onlythe changes
spellscale · writtenscalewritten onlyscale climbs the key's ladder; written plays the page — case picks major/minor
eacha duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)4barwritten onlyhow long one chord lasts — unit-aware (2bar, 8beat, 6s)

voicelead

Gives each chord the smoothest path from the last one — it auditions every inversion and picks the one that moves least.

Inputs

portcarrieswhat it does
inchordchords to voice
velocitynumberoffsets the written velocity — anything can conduct dynamics

Outputs

portcarrieswhat it does
outnotethe chord's notes, voiced

Written params

paramrangedefaultsceneswhat it does
velocity0…10.6a scene can ramp itchords arrive with no dynamics of their own — this is the hand that plays them

intervals

Melody as motion instead of position — you write the intervals, and each trigger takes the next step.

Inputs

portcarrieswhat it does
scalescaleneeded for degree mode
rootnumberre-root, transposing the current position
resetanyback to the root
stepanytake the next interval
velocitynumberoffsets the written velocity — anything can conduct dynamics

Outputs

portcarrieswhat it does
notesnotewhere the walk landed

Written params

paramrangedefaultsceneswhat it does
intervalsa list — (semitones, or scale steps in degree mode)(0)written onlythe walk
rootany number57a scene can ramp itwhere it starts (MIDI, or a note name)
modedegreessemitoneswritten onlydegrees counts scale steps; anything else is semitones
onkeydrift · reanchordriftwritten onlywhat a key change does mid-walk: drift holds position (old behavior), reanchor re-walks the climbed degrees up the new ladder (degree mode only)
velocity0…10.78a scene can ramp ithow hard the walk lands

Physics

gravity

Tonal gravity: notes are pulled toward the stable tones of a centre — or, at negative mass, pushed away from them.

Inputs

portcarrieswhat it does
innotenotes to bend
massnumberoffsets the written mass
stretchnumberoffsets the tide
centerscalea scale (degree-shaped well) or a pitch (a bare centre)

Outputs

portcarrieswhat it does
outnotewhere the note landed
fieldfieldthe well itself, for a seq or a wellmix
pullnumberhow far this note moved, 0..1

Written params

paramrangedefaultsceneswhat it does
centera note name (C, F#, Bb) or a pitchCwritten onlythe centre of the well
mass-3…3.50.5a scene can ramp it0 no-op · 2+ event horizon · 3 singularity · -2 and below anti-horizon
reach1 and up (semitones)12a scene can set it (jumps)how far it searches for a target
stretch0.1…41a scene can ramp ittides: 1 is a bit-identical no-op
anchorany number3written onlythe octave the tide pivots around
seedany number7written onlywhich way the dice fall

inertia

Momentum for melodies — the line keeps heading the way it was already going.

Inputs

portcarrieswhat it does
innotenotes to bend
amountnumberoffsets the written amount

Outputs

portcarrieswhat it does
outnotethe blended note
driftnumberhow far it bent, 0..1

Written params

paramrangedefaultsceneswhat it does
amount0…10.5a scene can ramp it0 is a bit-identical no-op, 1 is pure ballistics

wellmix

Field superposition — wire up to four wells in and the summed field flows out: binary systems, interdiction lines.

Inputs

portcarrieswhat it does
afieldfirst well
bfieldsecond well
cfieldthird well
dfieldfourth well

Outputs

portcarrieswhat it does
outfieldthe combined field

hold

Sample and hold: it watches in and says nothing until trigger fires, then lets the last thing it saw out.

Inputs

portcarrieswhat it does
inanythe signal to watch — nothing passes through on its own
triggeranylet the held value out now

Outputs

portcarrieswhat it does
outanywhatever it was holding, in the type it arrived as

Written params

paramrangedefaultsceneswhat it does
repeat0…11written only1 speaks on every trigger; 0 only when the held value has changed

wormhole

Swallows a chunk of music and returns it later, backwards or upside down — a time machine for phrases.

Inputs

portcarrieswhat it does
innotenotes to swallow

Outputs

portcarrieswhat it does
outnotethe chunk, erupting
hawkingnotea faint quantum leaking while it holds

Written params

paramrangedefaultsceneswhat it does
moderetrograde · invert · bothbothwritten onlyanything else makes it a plain delay
gulpa duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)1barwritten onlyhow much it swallows at once
delaya duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)1barwritten onlyhow long it holds
hawking0…10a scene can set it (jumps)chance of a leak
seedany number13written onlywhich quanta escape

weak

Radioactive decay for notes — some fade, some vanish, some transmute a semitone.

Inputs

portcarrieswhat it does
innotenotes to irradiate

Outputs

portcarrieswhat it does
outnotewhat survived

Written params

paramrangedefaultsceneswhat it does
decay0…10.2a scene can set it (jumps)chance a note halves — deep rolls annihilate it
transmute0…10.1a scene can set it (jumps)chance it shifts a semitone
seedany number17written onlywhich notes are unlucky

em

Two charged voices push or pull each other by pitch distance — every sounding note is its own charge, and a shield damps what stands between.

Inputs

portcarrieswhat it does
anotethe first voice
bnotethe second voice
shieldnotea voice that damps the field
strengthnumbersets the coupling outright (not an offset)

Outputs

portcarrieswhat it does
a_outnotethe first voice, deflected
b_outnotethe second voice, deflected
forcenumberhow hard they shoved, 0..1

Written params

paramrangedefaultsceneswhat it does
qa-2…21a scene can ramp itcharge on the first voice
qb-2…21a scene can ramp itcharge on the second — flip it negative and they attract
strength0…41a scene can ramp ithow strong the coupling is

strong

Notes that land close together in time and pitch fuse into a chord; loners pass through.

Inputs

portcarrieswhat it does
innotenotes that might bind

Outputs

portcarrieswhat it does
fusednotecluster members, given one shared length
chordchordthe cluster, as a chord
outnotea note that stayed single

Written params

paramrangedefaultsceneswhat it does
windowa duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)0.25beatwritten onlyhow close in time counts as together (release=grid only)
radius1 and up (semitones)4a scene can ramp ithow close in pitch counts as together
releasegrid · exactgridwritten onlygrid waits out the window before releasing (catches strums, costs latency); exact fuses only notes that land on the SAME tick and releases them instantly — stabs stay on the beat

mirror

Turns a melody upside down around an axis you name — and unlike a wormhole's inversion, you can see the axis, move it with a wire, and hear it instantly.

Inputs

portcarrieswhat it does
innotenotes to reflect
axisnumbera pitch NAMES the axis; a number offsets the written one
amountnumbersets the blend outright, 0..1
scalescaleneeded for degree mode — without one it reflects chromatically

Outputs

portcarrieswhat it does
outnotethe note, inverted

Written params

paramrangedefaultsceneswhat it does
axis0…127midiC4a scene can ramp itthe line it folds around — a note name or a MIDI number
modechromatic · degreeschromatica scene can set it (jumps)degrees reflects by scale steps and stays in the key
amount0…11a scene can ramp it1 is a full reflection; 0 is a bit-identical no-op

echo

A canyon wall: every note comes back N times, quieter each time. Per-note and untransformed — the opposite of a wormhole, which returns a whole chunk once.

Inputs

portcarrieswhat it does
innotenotes to repeat

Outputs

portcarrieswhat it does
outnotethe note, then its repeats

Written params

paramrangedefaultsceneswhat it does
times0…163a scene can set it (jumps)how many times it comes back; 0 is a bit-identical no-op
delaya duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)0.5beatwritten onlythe gap between repeats
decay0…10.6a scene can ramp itvelocity multiplier per repeat — an inaudible tail is never scheduled
shifta number in semitones0a scene can ramp ittranspose each repeat; combine with redshift for a receding echo

Rhythm & chance

euclid

Euclidean rhythms — hits spread as evenly as possible across steps.

Inputs

portcarrieswhat it does
clockanyeach value advances one step
resetanythe necklace snaps back to its first bead

Outputs

portcarrieswhat it does
patterntriggerfires on hit steps only
shapepatternthe whole shape, once, at start

Written params

paramrangedefaultsceneswhat it does
hits0 and up4a scene can set it (jumps)how many land
steps1 and up8a scene can set it (jumps)how many slots
rotateany number0written onlyturn the necklace (a scene set of hits/steps resets this to 0)

pulsar

Plays a rhythm shape somebody else made. Same outputs as a euclid, but the necklace arrives on a wire instead of being worked out from hits and steps — so a shape can be flipped, reversed, and played several ways at once. Its rotate is the one a scene can turn.

Inputs

portcarrieswhat it does
shapepatternthe necklace to play — from a euclid, or one a bead has changed on the way
clockanyeach value advances one step
resetanyback to the first bead

Outputs

portcarrieswhat it does
patterntriggerfires on hit steps only — the same output a euclid gives
shapepatternwhat it is actually playing, rotation and all

Written params

paramrangedefaultsceneswhat it does
rotateany number0a scene can set it (jumps)turn the necklace — and unlike a euclid's, a scene can move this one

interfere (also combine)

Two rhythm shapes laid over each other, the way two waves interfere: and keeps the steps where both hit, xor the steps where exactly one does, or where either does. Shapes of different lengths are carried out to the length where the pair repeats, so a 3 against an 8 gives you the whole 24-step conversation.

Inputs

portcarrieswhat it does
apatternthe first shape
bpatternthe second — it may be a different length

Outputs

portcarrieswhat it does
outpatternthe composite, ready for a pulsar or a seq.mask

Written params

paramrangedefaultsceneswhat it does
opand · or · xoranda scene can set it (jumps)how they interfere — and is the default because it is the one nothing else can do: two rhythms already layer by wiring both at the same port, but their COINCIDENCES have never been reachable

dice

Seeded uniform choice from a list of faces — repeat a face to weight it.

Inputs

portcarrieswhat it does
rollanyany value rolls

Outputs

portcarrieswhat it does
rollnumberthe face that came up

Written params

paramrangedefaultsceneswhat it does
facesa list — (number)(0 1)written onlywhat can come up
seedany number1written onlysame seed, same rolls, forever

seq (also sequencer)

A step sequencer: your written notes one per trigger, or a seeded random line — and if you wire a field in, sway decides whose pen it is.

Inputs

portcarrieswhat it does
stepanyadvance and play
gateanythe same thing, by another name
maskpatterna rhythm shape from a euclid — the line still walks every step and only SOUNDS on the hits, which is a different tune from wiring that euclid at gate
fieldfielda gravity field with designs on your melody — see sway
resetanysnap back to step one — wire a section boundary in and every section starts on the loop's downbeat
velocitynumberoffsets the written velocity — anything can conduct dynamics

Outputs

portcarrieswhat it does
notesnoteone note per step — or the whole chord, together

Written params

paramrangedefaultsceneswhat it does
notesa list — (note name or MIDI number; join with + for a chord (50+57, D3+A3))()written onlya written melody; leave it out for seeded chaos
sway0…11a scene can set it (jumps)the wired field's grip on the pen: 1 = it writes every step (the interdictor), 0.3 = it grabs a third of them, 0 = your notes regardless
velocity0…10.8a scene can ramp ithow hard the notes land — scenes can morph it (a written crescendo)
steps1 and up8written onlyhow many random steps to invent
seedany number1written onlywhich random line you get

arp

Holds the latest chord and walks it one note per trigger — up, down, bouncing or seeded-random.

Inputs

portcarrieswhat it does
chordchordthe chord to walk
stepanytake one note
resetanyback to the bottom of the ladder, climbing
velocitynumberoffsets the written velocity — anything can conduct dynamics

Outputs

portcarrieswhat it does
notesnotethe next rung

Written params

paramrangedefaultsceneswhat it does
dirup · down · updown · randomupa scene can set it (jumps)which way it climbs
velocity0…10.75a scene can ramp ithow hard the steps land (ratchet repeats stay softer, proportionally)
octaves1 and up1a scene can set it (jumps)how far the ladder reaches
ratchet0…10a scene can set it (jumps)chance of a stutter repeat
seedany number3written onlyfor the random direction

phrase

A bar you write by hand at 16th resolution — melody, reusable trigger hits, and a seeded variation each time round.

Inputs

portcarrieswhat it does
clockanyone value per 16th
scalescalewhat the degrees mean
resetanyback to beat one of the phrase — sections and phrases breathe together
varnumbersets the variation chance outright (not an offset)
velocitynumberoffsets the written velocity — anything can conduct dynamics

Outputs

portcarrieswhat it does
notesnotethe melody
hitstriggerthe rhythm, reusable

Written params

paramrangedefaultsceneswhat it does
stepsquoted text"1..............."written onlydigits 1-9 degrees, accidentals # b beside them (b7, 4#), . rest, - tie, x repeat; ! accent, , ghost
octaveany number3a scene can set it (jumps)which octave the degrees land in
meterfree · followfreewritten onlyfree: the pattern's own length is its loop (bar-agnostic — polymeter lives here); follow: ask the sun — the phrase loops exactly at the meter's bar (a short pattern rests out the remainder, extra steps are ignored)
var0…10a scene can ramp itchance a step wanders
velocity0…10.8a scene can ramp itthe base velocity — accents scale from it (! and , keep their proportions)
seedany number5written onlywhich variations you get

Exotica

supernova

Hoards notes as stellar mass, then flings the whole hoard out at once and leaves a remnant behind.

Inputs

portcarrieswhat it does
innotemass to hoard (and pass through)
detonateanyblow it now

Outputs

portcarrieswhat it does
outnotethe passthrough
burstnotethe hoard, flung
boomtriggerthe moment itself
remnantnotethe drone left behind

Written params

paramrangedefaultsceneswhat it does
critical2 and up24a scene can set it (jumps)how many notes before it goes off by itself
yield0…48semitones24a scene can set it (jumps)how far the burst scatters
remnantneutronstar · blackhole · noneneutronstarwritten onlywhat it leaves
darka duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)4barwritten onlyhow long a black hole swallows everything
seedany number1987written onlywhich way the debris flies

neutronstar

Crushes every note into a narrow band around a drifting centre of mass, and sometimes the crust cracks.

Inputs

portcarrieswhat it does
innotenotes to crush

Outputs

portcarrieswhat it does
outnotethe crushed note
quaketriggerthe crust cracking

Written params

paramrangedefaultsceneswhat it does
density1 and up (semitones)5a scene can set it (jumps)how narrow the band is
centerany number48written onlywhere it starts — it drifts from there
quake0…10.08a scene can set it (jumps)chance of a crack
seedany number33written onlywhich notes quake

comet

A frozen phrase that visits once an orbit, brightening toward perihelion and shedding a quiet trail.

No inputs.

Outputs

portcarrieswhat it does
notesnotethe visit
dustnotean octave up, very quiet

Written params

paramrangedefaultsceneswhat it does
notesa list — (note name or MIDI number)(69 72 76 72)written onlythe frozen phrase
orbita duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)16barwritten onlyhow often it comes round
pacea duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)0.5beatwritten onlyhow fast it passes

redshift

The source is receding: notes drift progressively flat and dim. Negative rate is an approaching blueshift.

Inputs

portcarrieswhat it does
innotenotes to shift

Outputs

portcarrieswhat it does
outnotethe shifted note

Written params

paramrangedefaultsceneswhat it does
ratea number in semitones1a scene can ramp itsemitones per per; 0 is a bit-identical no-op
pera duration — musical (4bar, 2beat, 8th, 1/8) or real (500ms, 1.5s, 1day)8barwritten onlyhow long one semitone of drift takes

Output & glue

midiout (also instrument)

Where notes leave the universe: one MIDI channel, optionally a real CLAP or VST3 synth, with four wires that reach inside its knobs.

Inputs

portcarrieswhat it does
innotenotes to play (any port name works, but say in)
octavenumberre-homes incoming notes; 4 is as written
mod1number0..1 into the plugin param named by mod1=
mod2number0..1 into the plugin param named by mod2=
mod3number0..1 into the plugin param named by mod3=
mod4number0..1 into the plugin param named by mod4=

Outputs

portcarrieswhat it does
gainnumbertelemetry: the fader's position in dB, announced when a scene moves it

Written params

paramrangedefaultsceneswhat it does
ch1…161written onlyMIDI channel
humanize0…10written onlyseeded velocity breath
seedany number11written onlywhich breath (only used when humanize > 0)
pluginquoted textwritten onlypath to a .clap or .vst3 — quoted
idquoted textwritten onlywhich plugin inside a bundle
presetquoted textwritten onlya preset file to load
statequoted textwritten onlya saved state file — what the workshop writes
setquoted textwritten only"Cutoff:0.7, Res:0.2" — plugin params at start
mod1quoted textwritten onlyname a plugin param for the mod1 port
mod2quoted textwritten onlyname a plugin param for the mod2 port
mod3quoted textwritten onlyname a plugin param for the mod3 port
mod4quoted textwritten onlyname a plugin param for the mod4 port
wavesine · triangle · saw · square · noisesinewritten onlybuiltin voice only — noise is the drum kit (pitch tints it: low thud, high hiss)
attack0.0005 and up (s)0.005written onlybuiltin voice only
release0.005 and up (s)0.25written onlybuiltin voice only
detuneany number4written onlycents — builtin voice only
brightness0.5 and up6written onlylowpass, as a multiple of the note — builtin voice only
gain-96…24db0dba scene can ramp itthe fader — scenes can snap it, morphs RAMP it (the house mute is pad.gain=-96)
pan-1…10written only-1 left, 1 right

balance (also compare)

A beam balance: two number streams in, the tilt out. out is how far a outweighs b, and tip fires the moment the beam swings the other way. This is the one thing a bead cannot do — over and under weigh a stream against a number you wrote; this weighs it against another stream.

Inputs

portcarrieswhat it does
anumberthe near pan
bnumberthe far pan

Outputs

portcarrieswhat it does
outnumbera minus b — positive while the near pan is heavier
tiptriggerfires when the beam swings the other way

Written params

paramrangedefaultsceneswhat it does
slack0 and up0a scene can set it (jumps)how far past level the beam must swing before it counts as tipped — keeps a near-level pair from chattering

capture

The tape: wire any point in the patch into it and everything passing is written to a multi-track MIDI file.

Inputs

portcarrieswhat it does
innotenotes to tape (any port name works)

No outputs.

Written params

paramrangedefaultsceneswhat it does
pathquoted text"take.mid"written onlywhere the take lands — must be quoted

script

A node you write yourself in Lua — it gets ports, a seeded dice and a clock, so determinism holds for your code too.

Inputs

portcarrieswhat it does
inanywhatever your script listens for

Outputs

portcarrieswhat it does
outanywhatever your script emits

Written params

paramrangedefaultsceneswhat it does
filequoted text"node.lua"written onlyrequired, quoted — every other param is passed through to Lua
seedany number1written onlyfeeds self:rand()

Beads

A bead rides on a wire and transforms what passes: lead.notes -[note -12]-> voice.in. Strictly one in, one out. A wire carries at most one bead; its neutral setting is a no-op, so -[lag 0]-> changes nothing.

index

unit float to an integer 0..n-1 (7 = the modes)

optionrangedefaultwhat it does
n1 and up7how many slots

scale

multiply by k

optionrangedefaultwhat it does
kany number1multiplier

offset

add k

optionrangedefaultwhat it does
kany number0how much to add

note

transpose notes (or add k to bare numbers)

optionrangedefaultwhat it does
ka number in semitones0how far to transpose

clamp

bound the value (on notes, bounds the pitch)

optionrangedefaultwhat it does
loany number0floor
hiany number1ceiling

wrap

wrap into the range (0..12 = pitch classes)

optionrangedefaultwhat it does
loany number0floor
hiany number12ceiling

flip

on a rhythm shape: hits become rests and rests become hits. ring.shape -[flip]-> hats.mask is a hi-hat that plays exactly where the kick does not — the complement, which no euclid setting can give you. Anything that is not a shape passes through untouched

No options.

reverse

on a rhythm shape: turn the necklace over, last step first. Not the same as rotating it — a lopsided rhythm read backwards is a different rhythm. Anything that is not a shape passes through untouched

No options.

invert

turn it upside down: top - x, so as one thing rises the other falls. The default top of 1 is the unit range every control port speaks; write the top when the stream lives somewhere else (-[invert 127]-> for a pitch). No neutral setting — inverting is the whole job. Notes pass through untouched; to turn a MELODY over, use a mirror body

optionrangedefaultwhat it does
topany number1what counts as full — the value is taken away from this

curve

bend a unit range: x^e, sign preserved

optionrangedefaultwhat it does
e0.001 and up1exponent; 1 is a no-op

lag

one-pole smoothing; the first event snaps

optionrangedefaultwhat it does
a0…10.50 instant, 1 frozen

accum

running sum — deltas in, a walk out

optionrangedefaultwhat it does
span0 and up00 = never wrap

count

how many events have come down this wire — deaf to the value, so it counts notes and triggers too

optionrangedefaultwhat it does
span0 and up0wrap after this many; 0 = never wrap

over

a gate that opens while the value is above k (comparing two live streams needs a node)

optionrangedefaultwhat it does
kany number0the threshold

under

a gate that opens while the value is below k

optionrangedefaultwhat it does
kany number0the threshold

diff

change since the last value — a walk in, deltas out

No options.

vel

dynamics on a wire: every passing note lands factor× as hard, clamped to 0..1

optionrangedefaultwhat it does
factor0…41multiplies each note's velocity — 1 is a bit-identical no-op

loudness

a meter, not a transform: each passing note comes out as its velocity (0..1) — the wire's dynamics curve. Smooth it with a lag if it flickers; non-note values pass through untouched

No options.

pitch

the other half of loudness: each passing note comes out as its pitch, a MIDI number (60 = middle C). Key tracking — lead.notes -[pitch 127]-> voice.cc74 and the synth follows the line it is playing. The divisor is there because a wire carries one bead, so reading the pitch and bringing it into range has to happen in the same breath; leave it at 1 for the pitch itself. Non-note values pass through untouched

optionrangedefaultwhat it does
over0.000001 and up1divide by this — 127 puts a pitch on the 0..1 scale a control port wants

density

how fast events arrive on this wire, in events per beat

optionrangedefaultwhat it does
beats0.001 and up (beats)1the window; wider reads truer

Control output — the plugin's own ports

These are not engine ports; they are the plugin's, and they exist only here. Wire any number stream into one of them on a midiout body and it leaves as MIDI control on that body's channel:

portbecomes
cc0cc127Control Change on that number
cc<N>_14 (N ≤ 31)a 14-bit pair — MSB on N, LSB on N+32, always sent together
pbpitch bend (14-bit; 0.5 is centre)
atchannel aftertouch
mod1mod4whatever the body names it: voice : midiout mod1="cc11"

0..1 is the unit of exchange — 0 becomes 0, 1 becomes full scale, and anything outside clamps rather than wraps. That is already the range of lfo.out, a gravity body's pull, inertia's drift and a default contour. Bring anything else into range with the wire's own bead:

  dice.roll -[scale 0.2]-> voice.cc1     # a 0..5 die across the full sweep
  swell.out -[curve 2]->   voice.cc11    # bend the taper

Key tracking is the one worth knowing. The pitch bead reads a note's own pitch out as a number, so a synth follows the line it is playing:

  lead.notes -[pitch 127]-> voice.cc74   # filter opens as the melody climbs

Mind the 127. A pitch is a MIDI number (60 is middle C), not a unit value, and anything above 1 clamps to full scale here -- so a bare -[pitch]-> would pin the controller at 127 and never move. The divisor is part of the bead because a wire carries only ONE bead, so reading the pitch and bringing it into range has to happen in the same breath. Its sibling loudness reads velocity, which is already 0..1 and needs nothing.

Control is generated with the notes, so it is sample-accurate, identical at any buffer size, and follows host tempo exactly as the music does. Repeated values are not resent, a rate cap keeps a fast stream from storming the host, and every controller is restated when you relocate — so landing mid-sweep never leaves a synth on a stale value.


Recluse Studios · Orrery. Generated from the engine vocabulary — see QUICKSTART for getting started, routing, the canvas and OSC.


Recluse Studios · Orrery 0.9.0. Part III is generated from the engine's own vocabulary table, so it is never out of date with the plugin you have.