USER MANUAL · v1.2.0 · for the Expert Sleepers disting NT
Shoal plays melodies you didn't write - but that always sound like you meant them. Eight tracks each generate a looping melody from a seed; every note is locked to one global scale; tracks can follow one another like fish. The name: eight fish, moving as one. A reseed is the shoal turning.
The performance view: eight track rows, the selected track's detail panel, the global key bottom-right of the panel, live pot labels along the bottom. Everything in this manual is visible on this one screen.
Shoal uses disting NT plug-in API v13, introduced in firmware 1.15.0. Use firmware 1.15.0 or newer.
The easiest route is the disting NT Plugin Gallery, via the Plugin Manager in nt_helper. To install by hand instead:
shoal-plugin.zip from the latest
release.shoal.o at /programs/plug-ins/ormermodular/shoal.o.Shol).No compiler or development toolchain is required.
programs
folder, Finder may create a second folder called programs 2 instead of
merging into it. If that happens, move shoal.o into the existing
programs/plug-ins folder and delete the leftover./1.5, /2.6, /5.3) and five multipliers
(×1.25, ×1.3, ×1.5, ×2.6,
×5.3) - each inserted into its correct spot in that same spread, so ×1 is
still dead centre, now at position 13 of 29. Only the six slowest rates
(/64 through /6) sit at the same position they did in
v1.1.0. This means: any preset saved on v1.1.0 will load into v1.2 with different
Rate settings than you saved, on most or all of its tracks, silently - the module
has no way to warn you when this happens. Before you play an old preset, go through
each track's Rate on the Track pages and reset it to what you actually want. This is
a one-time cost; the dial won't reorder again.Internal
at 120 BPM (×1 = one step per beat), so a fresh Shoal runs the moment it lands.
To sync it to your rack instead, set Global → Clock source to
External and patch a clock (anything above ~1V) into Input 1 -
one pulse advances the ×1 tracks one step, so feed it quarter-note pulses.That's the whole game. Everything else is refinement.
The seed is the melody. A track's melody is completely determined by its Seed (0–999) - think of it as a recipe number, not a random amount. Same seed = same melody, every loop, every power-up, every preset recall. Reseeding just picks a new number. Because the seed is an ordinary parameter, presets capture your exact patterns - and you can CV-map the seed for pattern-switching madness.
A reseed never interrupts mid-loop. It arms (the panel blinks
RESEED ARM, the fish swims faster) and takes effect when the track wraps to
step 1. New sections start where sections should.
CHANCE - does this step play a note at all? 100% = every step, 50% = half rests. Seeded, so the same steps rest on every loop until you reseed.
Every seed produces a base melody: a line spanning two octaves of the scale, centred on the root, so melodies orbit their home note. With Note and Oct at 0 it's exactly what you hear. Two bipolar amounts then add seeded deviation on top:
Turn them up for wildness, back to 0 for the pure base melody - nothing is ever destroyed. Notes are built from the scale, so nothing is ever out of key.
Set a track's Sample source to another track and it mirrors that track's material - same musical contour - filtered through its own settings: chance, note/oct amounts, octave, rate, length, gate. Reseed the source and the follower changes with it. Instant related bass lines and counter-melodies, in agreement forever.
Direction doesn't change the notes - it changes the walk. Reverse plays your exact melody backwards; Pendulum and Pong fold it into palindromes (ends played twice or once); Drunk staggers (50% on, 25% repeat, 25% back); Random abandons order entirely. Three generative walks go further:
Six more, from v1.2:
Armed reseeds land at each mode's loop origin (step 1; the last step in Reverse; the pass boundary in Tide/Shuffle; immediately in Random/Drunk/Pools/Skitter). Stride, Gravity, Converge and Anchor land the same way - at step 1. Diverge lands at its own starting point instead - the pattern's middle step, where its cycle actually begins.
Each track has its own Length (1–64) and Rate (/64 … ×64, plus eight
non-integer ratios, all in true ascending order). The dial runs
/64 /32 /16 /8 /7 /6 /5.3 /5 /4 /3 /2.6 /2 /1.5 ×1 ×1.25 ×1.3 ×1.5 ×2 ×2.6 ×3 ×4 ×5 ×5.3 ×6 ×7 ×8 ×16 ×32 ×64 -
the odd ratios (3, 5, 7, plus 6) sit right next to the even ones, so a track at ×3 or /5
pushes against the grid while the rest of the shoal holds it. A 16-step
track over a 5-step track at /2 makes phrases that don't repeat for a long time; a 33-step
track over anything makes phrases that never seem to. This is where the generative
feeling really comes from.
The eight non-integer rates (v1.2) - /5.3, /2.6, /1.5, ×1.25, ×1.3, ×1.5, ×2.6, ×5.3 - slot in at their true position on the dial (e.g. /1.5 sits between /2 and ×1; ×1.5 between ×1 and ×2). /1.5 and ×1.5 are the simplest: where every other rate keeps a fixed number of advances every master tick, these alternate - ×1.5 fires 1, then 2, then 1, then 2 advances per tick (three advances every two ticks, on average - true 3-over-2, no drift); /1.5 fires 0, then 1, then 1 (two advances every three ticks). The other six use exact decimal ratios - not rounded to a "nicer" fraction (×1.3 really is 13/10, not 4/3) - built the same way: each spreads its advances as evenly as possible across a repeating window rather than a fixed count per tick, so the long-run rate is exact with no drift. ×1.25 is the simplest of those six: four ticks, five advances (1, 1, 1, 2 repeating) - the classic 5-against-4 cross-rhythm. ×2.6 repeats every five ticks for thirteen advances. The rest - /5.3, /2.6, ×1.3, ×5.3 - have longer, less obvious repeat windows (10, 13 and 53 ticks), which is rather the point: a lopsided pulse that never quite settles into a short, learnable groove - more texture than tempo.
Shoal can send MIDI note out per track, and can be clocked FROM MIDI instead of a CV or internal clock - useful on its own, and it's how Shoal talks to other algorithms on the same disting NT with no cabling at all.
Note out. Each track's Routing page has one MIDI parameter alongside its CV output config: MIDI channel (0 = off - the default, so updating firmware never starts sending MIDI a patch wasn't already asking for). MIDI velocity (1-127) and MIDI dest - a destination bitmask covering Breakout, Select bus, USB and Internal in any combination - are global settings on the Global page, shared by every track that has a channel set, rather than a per-track choice. Internal targets another algorithm on the same NT directly - no patch cable needed. That's a real, tested use case: feeding Shoal into Poly FM (a MIDI/I²C-only algorithm) in one unit. A track is monophonic, so at most one MIDI note sounds per track at a time; a new note always closes the previous one first. Note off fires on the exact same signal that silences the CV gate - natural gate end, mute, or a channel change mid-note - so MIDI timing always tracks the audible gate. Changing the global MIDI dest live closes every track's currently-sounding MIDI note, since one change now affects every track at once rather than just one. One simplification: Tie retriggers over MIDI (fast note-off then note-on) rather than the true legato overlap the CV gate achieves; audibly close on a sound that doesn't retrigger its envelope while gated.
MIDI clock in. Set Clock source to MIDI and Shoal locks to
incoming realtime MIDI clock (24 PPQN - Shoal's ×1 is one step per quarter note, so 24 clock
messages = one ×1 tick) instead of a CV signal or its own oscillator. MIDI Start resets the
pattern to step 1, same as the Reset input; Continue resumes in place; Stop halts it -
Run still has to be On as well, exactly as with the other two clock sources, so a
DAW's transport and Shoal's own Run switch both have to agree the patch should be playing.
One known limitation: the disting NT gives plug-ins no way to run code when an algorithm is removed from a preset outright (as opposed to muted, frozen, or reseeded, which Shoal does handle). If a track happens to be mid-note at that exact moment, there's no opportunity to send its note-off - the same situation as unplugging a MIDI cable mid-note. Everything else - normal playing, muting, freezing, reseeding, changing a track's MIDI channel or the global destination live - closes notes cleanly.
Each track can output a Current - a slow, smooth, seeded drift CV, 0-10V, on its own bus (Routing page, Current out). Think of it as "the water the melody swims in": a gentle wandering voltage for filter cutoffs, VCA levels, send amounts, or anything else that wants slow ambient movement alongside the melody, without patching in a separate LFO.
The Shoal twist versus any LFO: a Current is derived from the track's own Seed, so it repeats exactly with every pass, survives power cycles, and is shareable by number - seed 347 always comes with the same current, just like it always comes with the same melody. A fresh target lands every time the track advances a step - whether or not that step actually plays a note, so the Current keeps flowing even on a muted or low-Chance track - and it eases smoothly from wherever it was towards that target over the step, never jumping.
A Current moves at the track's own pace: a fast Rate gives a quicker, more restless drift; a slow one gives a long, gentle swell. A follower's Current is its own - it does not inherit its source track's current, even though it borrows the source's melody, so two followers of the same track get independently-moving water. Currents hold their last value through a Freeze, same as the melody.
Like every output, Current out defaults to None - a track sends nothing until you assign it.
Each track can output EOS - a short 5V trigger every time the track completes a full cycle of its Length (Routing page, EOS out). Use it to advance another sequencer, ping an envelope once per phrase, or trigger a reseed on a different track for cascading pattern changes.
EOS counts advances, not loop origin - a deliberate difference from how reseeds/ Evolve/Breathe key off the loop-origin flag elsewhere in Shoal. Random, Drunk, Pools and Skitter have no fixed loop shape, so their loop-origin flag is true on almost every step; wiring EOS to it there would pulse almost continuously rather than marking anything meaningful. Counting Length advances instead gives every one of the 15 Direction modes the same evenly-spaced pulse - Forwards, Reverse, Pendulum and the rest of the ordered modes get it exactly where you'd expect (their own loop origin); the four unordered modes get it at the same steady interval, giving them a sense of "phrase" they don't otherwise have.
EOS isn't gated by Chance or Mute - it marks the sequence's structure, not which steps happen to sound, so it keeps a steady pulse even on a sparse or muted track. It holds silent through a Freeze (nothing advances, so nothing completes a cycle) and, like every output, defaults to None.
Four controls made for long-form and ambient playing.
Each pass, that share of steps quietly re-roll themselves, pitch and rhythm alike. At 5%, a melody becomes a different melody over ten minutes without your hands. Seeded and repeatable; reseeding starts a fresh lineage. Followers evolve with their source.
The chance that an entire pass rests. Steps rest with CHANCE; phrases rest with BREATHE. The track's row dims while it sits out and re-enters on its next pass.
The shoal holds its breath: nothing advances, every running track's current note
hangs as a chord until you release. Freeze blooms: engaging it raises every
track's gate immediately - including tracks between notes - so the full chord always
sounds the instant you freeze. The bloom is deliberate and unclocked, like a sustain
pedal: it is what makes a slow gate patched into Freeze produce oceanic swells. The
fish stops swimming; FRZ shows on the panel. By default the Clock out
keeps running through a freeze so the rest of the patch stays in time - Frozen
clock out chooses.
Consonance gravity: that share of notes snap to the scale's root, third or fifth. High weight turns wild settings lush instead of angular.
When Shoal's display is showing, the pots and encoders are live performance controls. Buttons 1–4 keep their normal NT functions.
| Control | Turn | Push+turn | Tap | Hold |
|---|---|---|---|---|
| Pot L | CHANCE | - | home ⇄ back (100%) | - |
| Pot C | NOTE ±100% | - | home ⇄ back (0) | - |
| Pot R | OCT ±100% | - | home ⇄ back (0) | - |
| Enc L | select track | LENGTH | mute track | solo track |
| Enc R | RATE /64…×64 | (cancels reseed) | reseed track | reseed ALL |
Pushing a pot snaps its parameter to the default - the pure seeded melody for NOTE/OCT, full rhythm for CHANCE - and remembers where you were. Push again and your dialled value returns. Punch a track home mid-jam, punch it back: a mute button for chaos. The click itself never edits the value - the pot is ignored for a moment around each push, so a punch-back returns you to exactly the value you left. The pot label on the bottom bar glows while a pot is away from home.
◄n = following track n. M = muted,
S = solo. A dim row without M is breathing.DIR (the walk), SD (the current seed - jot down the
keepers) and EV (evolve). Below: rate, length, OCT (fixed
octave offset) and TR (transpose, in scale degrees). GATE, TIE and SLOP
are set-and-forget, so they live on the parameter page only.C NMIN), replaced by a blinking RESEED ARM while a reseed
waits to land. FRZ appears while frozen.Leave the controls alone (1 or 5 minutes - the Screensaver parameter) and the display dissolves into open water: eight fish, one per track, top to bottom in track order. Each fish darts forward when its track sounds a note, so the scene is a live picture of the patch - busy tracks race, sparse tracks glide, muted tracks drift dim and slow, a breathing track fades. Freeze stills the whole shoal while the bubbles keep rising. Touch anything and the normal display returns - the waking touch is swallowed, so waking never fires a gesture. CV-driven Seed, Reseed all and Freeze changes deliberately don't wake it, so a generative patch can fall asleep and be watched.
Exit the custom view and everything lives on 17 standard pages. Every parameter - all
233 of them - is CV/MIDI-mappable and saved in presets. Track parameters are prefixed
T1…T8 in mapping menus.
| Parameter | Range | What it does |
|---|---|---|
| Clock source | External / Internal / MIDI | Where ticks come from (default Internal - a fresh Shoal runs on its own). MIDI locks to incoming realtime MIDI clock (24 PPQN); Start resets to step 1, Continue resumes, Stop halts - Run must also be On |
| BPM | 20–300 | Internal clock speed. ×1 = one step per beat (quarter notes); ×4 = 16ths. Ignored while the clock is External (but remembered, so you can set a tempo before switching over) |
| Run | Off / On | Master play/pause (mappable = external transport) |
| Freeze | Off / On | Hold every sounding note as a chord; nothing advances. Clock out behaviour: see Frozen clock out |
| Scale | 13 scales | Chromatic, Major, Natural/Harmonic minor, Dorian, Phrygian, Lydian, Mixolydian, Major/Minor pentatonic, Blues, Hirajoshi, In-Sen |
| Root note | C-1…G9 | The tonal centre; C3 sits at 0V |
| Weight | 0–100% | Consonance gravity: % of notes snapped to root/3rd/5th |
| Screensaver | Off / 1 min / 5 min | Idle animation: the shoal swims the screen |
| Clock input | bus | Which input the clock comes in on |
| Reset input | bus / none | Rising edge → all tracks restart at step 1 on the next tick |
| Reseed input | bus / none | Rising edge → reseed everything, exactly like the encoder gesture: a fresh random Reseed all base, armed, landing at each loop origin. Built for short triggers |
| Clock out | bus / none | Shoal's master clock as 5V pulses (×1 rate, 50% duty) - clock other algorithms or external gear from Shoal's grid. Follows Run |
| Clock out mode | Add / Replace | As with the track outputs; Replace by default |
| Frozen clock out | Stops / Runs | What Clock out does during a Freeze. Runs (default) keeps the grid and pulses going so the rest of the patch stays in time; Stops holds the whole patch's breath at once. Changed from v1.0.0, which always stopped |
| Reseed all | 0–999 | Any change re-rolls every track (armed, on the grid) |
| MIDI velocity | 1–127 | Fixed velocity for every note any track sends (new in v1.2; global, not per-track - see the MIDI section above) |
| MIDI dest | 16 combinations | Which MIDI output(s) receive every track's notes: any mix of Breakout, Bus, USB and Internal (new in v1.2; global, not per-track) |
| Parameter | Range | What it does |
|---|---|---|
| Length | 1–64 | Steps in this track's loop |
| Rate | /64 … ×64, plus /5.3, /2.6, /1.5, ×1.25, ×1.3, ×1.5, ×2.6, ×5.3 in true ascending order | Speed relative to the master clock (×1 = one step per beat) |
| Direction | 15 modes | Forwards · Reverse · Pendulum · Random · Drunk · Pong · Tide · Shuffle · Pools · Stride · Gravity · Converge · Diverge · Skitter · Anchor |
| Shift | −63…+63 | Rotate the whole pattern - notes, gates, their timing - by that many steps, non-destructively (0 returns the original). On a follower: a canon |
| Chance | 0–100% | Probability a step plays a note |
| Breathe | 0–100% | Chance a whole pass rests (phrase-level silence) |
| Note | −100…+100% | Random note variation: magnitude = how often and how far, sign = direction |
| Oct | −100…+100% | Random octave leaps, same principle |
| Evolve | 0–100% | Share of steps that re-roll themselves each pass |
| Gate length | 5–95% | Gate time as a share of the step |
| Tie | 0–100% | Chance a note slurs into the next (no retrigger) |
| Slop | 0–100% | Humanised timing: seeded per-note delay, up to half a step |
| Octave | −3…+3 | Fixed octave shift for the whole track |
| Transpose | −7…+7 | Fixed shift in scale degrees - always in key. +2 on a follower = parallel thirds |
| Sample source | Off / Track 1–8 | Follow another track's material |
| Mute | Off / On | Silence the gates; pattern keeps running. Pitch CV holds its last note, so a gate-less voice (drone, self-oscillating filter) sustains rather than going quiet |
| Seed | 0–999 | The pattern. Change it (any way) to reseed |
Hearing Gate & Tie: these shape gate duration, so they're only audible on voices that follow it - an envelope with sustain (ADSR → VCA) is the classic test rig. Strike-based voices (Rings, plucks, drums, LPG pings) respond to the gate's edge only and will ignore both. For singing ties, add slew on the pitch line: tied notes become slides.
Pitch out / Gate out bus assignments, each with Add/Replace mode (Replace by default - a track owns its busses). Everything defaults to None: a track writes to no bus at all until you assign its outputs. Assign to physical Outputs for your rack, or to aux busses to drive other algorithms inside the preset.
Each routing page also carries the track's output voltages (new in v1.1; the defaults are exactly the old behaviour):
| Parameter | Range | What it does |
|---|---|---|
| Gate volts | 1–10V | The gate's high level (default 5V). 10V for vintage-style gear, 1V for LZX-standard video synthesis |
| Pitch scale | 5–200% | Scales the pitch CV around 100% = 1V/oct. 120% ≈ 1.2V/oct gear; small values compress the melody into a narrow CV window |
| Pitch offset | −10…+10V | Fixed voltage added after the scale - shift a track's CV range, or make a bipolar melody unipolar |
Each routing page also carries the track's MIDI note out (new in v1.2 - see the MIDI section above). Velocity and destination are global settings (Global page, above), shared by every track - only the channel is set per track:
| Parameter | Range | What it does |
|---|---|---|
| MIDI channel | 0–16 | 0 = off (default). 1–16 = the MIDI channel this track's notes send on |
Each routing page also carries the track's Current out (new in v1.2 - see the Currents section above). Like End-of-sequence, it defaults to None and is Replace-only - no Add/Replace mode, a track always owns its Current bus outright:
| Parameter | Range | What it does |
|---|---|---|
| Current out | bus / none | Which bus receives this track's Current - a slow, seeded 0-10V drift CV |
Each routing page also carries the track's EOS out (new in v1.2 - see the End-of-sequence section above). Unlike the other outputs it has no Add/Replace mode - a trigger bus always owns whatever it's patched to:
| Parameter | Range | What it does |
|---|---|---|
| EOS out | bus / none | Which bus receives a 5V trigger every time this track completes a full Length cycle |
The signature move: a second voice that agrees with your melody forever, through every reseed.
T1: your melody · T2: Source T1, Octave −2, Rate /4, Chance 50%, Gate 80%The same melody harmonises itself, in key, every reseed. Thin it with Chance so the harmony only appears on some notes.
T2: Source T1, same Rate/Length, Transpose +2 (thirds) or +4 (fifths-ish)The same melody enters four steps behind its leader, an octave down - a round that survives every reseed. Shift the follower, never the leader.
T2: Source T1, same Rate/Length, Shift −4, Octave −1Non-Euro gear with no external attenuators: each track's routing page has its own gate level, pitch scale and offset.
LZX video (0–1V): Gate volts 1V · Pitch scale 40% · Pitch offset +0.5V · 1.2V/oct gear: Pitch scale 120%Then don't touch anything for twenty minutes - Evolve and Breathe do the composing, Weight keeps it lush.
2–3 tracks, lengths 16/11/7, rates /2 and /4 · Chance 30–50% · Breathe 20% · Evolve 5–10% · Tie 30% · Slop 10% · Weight 60% · In-Sen or Hirajoshi · slow voicesFreeze is built for CV: whatever happens to be playing hangs as a chord, then the shoal swims on.
Slow LFO or foot-switch gate → CV-map FreezeDrums, LFOs and envelopes all ride Shoal's grid. The clock keeps running through a Freeze by default, so synced delays keep their tails while the melody hangs. Put Shoal above the algorithms that read it.
Clock out = an aux bus (or a physical output for external gear) · downstream algorithms' clock inputs = that busDAW-style start/stop from one gate: high = play from the top, low = stop.
Clock → In 1 · transport gate → In 2 · Reset input = In 2 and CV-map Run to In 2Take just the gate output - the seeded rests and drift make a repeating, groovy pattern.
Chance 65% · Note/Oct 0 · Gate 10% · Slop 15% · Rate ×8CV stepping a track's Seed switches whole melodies, each landing neatly at the loop start. Sequenced form from one voice.
Any stepped CV → CV-map a track's SeedEach track adopts the new key on its next note, cascading over a beat or two. CV-map Transpose instead for chord progressions on one voice, always in key.
CV → Root note, Scale or TransposeEvery one of Shoal's 233 parameters is mappable - a ramp rising over your set on Evolve, Weight or Chance is form-level automation with no hands. Solo and the pot punch-home gestures are deliberately not parameters: those stay under your fingers. Mute is mappable.
External and no clock is
arriving on the input the Clock input parameter points at, or Clock source
is MIDI and no realtime MIDI clock (and a Start or Continue) has arrived yet.
(A fresh Shoal defaults to Internal and runs on its own.)None, or set to destinations nothing is listening
on. Check the track isn't muted or soloed-out either - MIDI note out follows the same
mute/solo logic as the CV gate.M)? Another track solo'd (S)? Patched from the output you
actually assigned?Stops