Orca is an esoteric programming language for quickly building procedural sequencers. Each letter is an operation: uppercase operators run every frame, while lowercase operators run only when they receive a bang (*).
Orca is not a synthesizer. It is a live-coding environment that sends MIDI, OSC, and UDP to instruments and audiovisual software such as Ableton Live, Renoise, VCV Rack, and SuperCollider.
This repository is a fork of the original project by Hundred Rabbits. It retains the browser and Electron versions and adds a native macOS AU/VST3/Standalone plugin, a musical Game of Life mode, new operators, groove, and other workflow improvements.
- Choose a version
- Build and run
- Plugin usage
- Operators
- MIDI, UDP, and OSC
- Desktop Commander and project mode
- Groove
- Plugin Commander
- Life mode
- Reference tables
| Version | Best for | Notes |
|---|---|---|
| Browser/PWA | Trying classic Orca without installing it | Uses Web MIDI; browser builds do not provide UDP or OSC |
| Electron desktop | The original standalone Orca workflow | Cross-platform; supports MIDI, UDP, and OSC |
| JUCE plugin | Running Orca inside a DAW or as a native standalone app | This fork's macOS AU/VST3/Standalone build; includes Life mode and DAW automation |
Upstream builds and ports remain available:
- Download upstream desktop builds for Linux, Windows, and macOS.
- Use the upstream browser version with Web MIDI.
- Use in a terminal, written in C.
- Use on small computers, written in assembly.
- Use on the Monome Norns, written in Lua.
For help with the Orca language, visit the chatroom, mailing list, forum, or introductory tutorial.
If you enjoy this fork's additions, you can support the maintainer:
Clone the fork once, including the JUCE submodule used by the plugin:
git clone --recurse-submodules https://github.com/mcartagenah/Orca.git
cd OrcaIf the repository was cloned without submodules, initialize JUCE with:
git submodule update --init --recursiveThe root index.html loads the same JavaScript sources as the Electron app. Serve the repository root rather than opening the file directly:
python3 -m http.server 8000Then open http://localhost:8000. Allow MIDI access when prompted. UDP and OSC are unavailable in the browser build.
The desktop app uses Node 16 (desktop/.nvmrc):
cd desktop
npm ci
npm startThe plugin requires macOS, CMake 3.22 or newer, Xcode Command Line Tools, and the JUCE submodule. A non-installing Release build is:
cmake -S plugin -B plugin/build -DCMAKE_BUILD_TYPE=Release
cmake --build plugin/build --config Release --target OrcaPlugin_All -j8Artifacts are written beneath plugin/build/OrcaPlugin_artefacts/Release/.
To build and install the AU and VST3 into the current user's plugin folders:
make -C plugin configure
make -C plugin allmake all replaces existing Orca bundles in ~/Library/Audio/Plug-Ins/Components/ and ~/Library/Audio/Plug-Ins/VST3/. Build with CMake first if you do not want to modify installed plugins. The standalone app can be run from plugin/build/OrcaPlugin_artefacts/Release/Standalone/Orca.app.
The plugin is a silent Music Device: it generates MIDI but does not synthesize audio. Load it before an instrument in a MIDI-capable track, or route the system-wide virtual MIDI source named Orca to another application.
| Shortcut | Action |
|---|---|
Cmd+O |
Open an .orca or .life file |
Cmd+S |
Save as .orca or .life, according to the current mode |
Cmd+L |
Import .orca/.life modules into the injection cache |
Cmd+G |
Toggle Life mode |
Cmd+K |
Open the Plugin Commander |
Cmd+F |
Open command prompt with find: |
Cmd+= |
Zoom in |
Cmd+- |
Zoom out |
Cmd+Z |
Undo |
Cmd+Shift+Z |
Redo |
| Arrow keys | Move cursor |
Shift+Arrows |
Expand selection |
Cmd+C/V/X |
Copy/Paste/Cut |
Backspace |
Delete selected cells |
Space (Standalone only) |
Toggle the internal transport |
Life mode adds mode-specific shortcuts.
The following parameters are exposed to the host:
| Group | Parameter | Range | Default | Description |
|---|---|---|---|---|
| Shuffle | Shuffle | 0-200% | 100% | Swing amount: 0% inverse, 100% straight, 200% maximum swing |
| Life: Timing | Evolve Rate | 1-32 | 4 | Frames between evolutions |
| Life: Timing | Seq Mode | Off/Forward/Reverse/Mirror/Random/Euclid | Off | Sequencer scan mode |
| Life: Timing | Euclid Pulses | 1-32 | 3 | Active phases in Euclid sequencer mode |
| Life: Timing | Seq Horizontal | On/Off | Off | Scan columns left-to-right instead of rows top-to-bottom |
| Life: Timing | Pulse Mode | On/Off | On | Pulse (retrigger) vs Hold (sustain) |
| Life: Timing | Conductor Mode | On/Off | Off | Evolve only on Enter or incoming MIDI Note On |
| Life: Pitch | Scale | 15 types | Chromatic | Active musical scale |
| Life: Pitch | Root Note | C-B | C | Scale root note |
| Life: Pitch | Min Octave | 0-8 | 0 | Lower octave limit |
| Life: Pitch | Max Octave | 0-8 | 7 | Upper octave limit |
| Life: Pitch | Lock Octave | On/Off | Off | Prevent octave drift on birth |
| Life: Pitch | Chord Filter | Off/135/1357/125/145/1356/12356/1234567 | Off | Snap to chord degrees |
| Life: Dynamics | Decay | On/Off | Off | Age-based velocity + probability drop |
| Life: Dynamics | Min Velocity | 1-127 | 40 | Velocity floor at max age |
| Life: Dynamics | Min Probability | 1-100% | 10 | Probability floor at max age |
| Life: Dynamics | Max Notes | 0-32 | 0 | Per-channel per-step note cap (0=unlimited) |
| Life: Processing | Dedup | On/Off | Off | Merge identical {channel, pitch} notes |
| Life: Processing | Dedup CC | -1 to 127 | -1 | CC for dedup count modulation (-1=off) |
| Life: Processing | CA Rule | Presets | Life | Cellular automata rule set |
| Life: Pitch | Microtune | On/Off | Off | Pitch bend based on neighbor count |
| Life: Pitch | Microtune Amount | 0-100 | 50 | Pitch bend intensity |
Parameter-backed Commander commands and keyboard shortcuts notify the host, so they can be recorded in DAW automation. Editor-only state, such as the current cursor and paint channel, is not automatable.
The plugin sends MIDI in two ways:
- Host MIDI bus: Routed through the DAW's MIDI output (for instrument chains).
- Virtual MIDI port "Orca": Available system-wide to any application listening for MIDI input.
In the Electron app, CmdOrCtrl+G toggles the operator guide. In the plugin, the status bar identifies the operator and port beneath the cursor; Cmd+G is reserved for Life mode.
Aadd(a b): Outputs sum of inputs.Bsubtract(a b): Outputs difference of inputs.Cclock(rate mod): Outputs modulo of frame.Ddelay(rate mod): Bangs on modulo of frame.Eeast: Moves eastward, or bangs.Fif(a b): Bangs if inputs are equal.Ggenerator(x y len): Writes operands with offset.Hhalt: Halts southward operand.Iincrement(step mod): Increments southward operand.Jjumper(val): Outputs northward operand.Kkonkat(len): Reads multiple variables.Lless(a b): Outputs smallest of inputs.Mmultiply(a b): Outputs product of inputs.Nnorth: Moves Northward, or bangs.Oread(x y read): Reads operand with offset.Ppush(len key val): Writes eastward operand.Qquery(x y len): Reads operands with offset.Rrandom(min max): Outputs random value.Ssouth: Moves southward, or bangs.Ttrack(key len val): Reads eastward operand.Uuclid(step max): Bangs on Euclidean rhythm.Vvariable(write read): Reads and writes variable.Wwest: Moves westward, or bangs.Xwrite(x y val): Writes operand with offset.Yjymper(val): Outputs westward operand.Zlerp(rate target): Transitions operand to input.*bang: Bangs neighboring operands.#comment: Halts a line.
:midi(channel octave note velocity length): Sends a MIDI note.%mono(channel octave note velocity length): Sends monophonic MIDI note.!cc(channel knob value): Sends MIDI control change.?pb(channel value): Sends MIDI pitch bend.;udp: Sends UDP message.=osc(path): Sends OSC message.$self: Sends a command to the active platform's Commander.
~probability(chance): Bangs with probability (0=never, z=always).^scale(note scale): Quantizes value to musical scale (0=chromatic, 1=major, 2=minor, 3=pentatonic, 4=blues, 5=dorian, 6=mixolydian, 7=harmonic minor).{buffer(len val): Shift register — on bang, shifts south row right and inserts value at position 0.}freeze(val): Sample and hold — on bang, captures input; otherwise holds previous value.|gate(threshold val): Passes value southward if >= threshold, otherwise outputs..&arp(speed pattern len notes...): Arpeggiator — cycles through eastward notes (0=up, 1=down, 2=updown, 3=random).@markov(len states...): State machine — on bang, uses current state as index into eastward cells to determine next state.[strum(len rate): On bang, outputs sequential*bangs southward — one perrateframes. Len controls how many bangs, rate controls frames between each bang. Uses 2 state cells (position, rate countdown) then len output cells below.]chord(root type): Outputs chord notes southward. Root is a note letter (uppercase=natural, lowercase=sharp, e.g. C=C, c=C#). Types: 0=major, 1=minor, 2=dim, 3=aug, 4=sus2, 5=sus4, 6=maj7, 7=min7, 8=dom7.>humanize(max): On bang, delays the output bang by a random 0-max frames. State stored in south cell, bang output one cell below.<ratchet(subdivisions period): On bang, outputs N evenly-spaced bangs over the given period of frames. State stored in south cell, bang output one cell below.\swing(delay): Alternates between immediate and delayed bangs. Odd bangs pass through instantly, even bangs are delayed by N frames. Uses 3 south cells (toggle, countdown, output)./deflect: Redirects adjacent movers (N/S/E/W) to point away. Any mover next to/gets rewritten to face outward — e.g.Sto the east of/becomesE,Sabove/becomesN. Works as a passive obstacle that redirects instead of destroying. Preserves uppercase/lowercase.
The MIDI operator : takes five inputs: channel, octave, note, velocity, and length.
For example, :25C sends C5 on MIDI channel 3; :04c sends C-sharp 4 on MIDI channel 1. Orca channel values are zero-based, while many MIDI interfaces display channels as 1-16. Velocity is optional and ranges from 0 (0/127) to g (127/127). Length is the number of frames for which the note remains active. See midi.orca for an example.
The mono operator % takes the same five inputs as :.
Each new note stops the previous note on that channel if their lengths overlap. This makes % suitable for monophonic synthesizers and patches that should not receive chords.
The MIDI CC operator ! takes channel, knob, and value inputs.
Values are scaled from Orca's base-36 range to MIDI's 0-127 range. For example, !008 sends value 28 to the first channel's offset controller. The default CC offset is 64; use cc:0 to start at CC 0.
The pitch-bend operator ? takes channel, LSB, and MSB inputs.
Both value bytes are scaled to 0-127. For example, ?008 sends LSB 0 and MSB 28 on the first MIDI channel.
Program changes are sent through the Commander rather than an operator:
pg:channel;msb;lsb;program
Channel is 0-15; MSB, LSB, and program are 0-127. Many instruments display program 0 as patch 1. MSB and LSB may also be labeled bank and sub-bank. Leave either bank field blank to omit it; for example, pg:0;;;63 sends program 63 without changing the bank.
The UDP operator ; consumes consecutive cells to its east and sends them as a string when banged. For example, ;hello sends hello to the configured output. The default output is 127.0.0.1:49161; use udp:7777 to change the port and ip:127.0.0.12 to change the target. UDP is available in the Electron and plugin builds, not the browser build.
You can use resources/listener.js to test UDP messages. See it in action with udp.orca.
The OSC operator = consumes consecutive cells to its east. The first character becomes the OSC path; the remaining characters are sent as integers using the base-36 table. The default output is 127.0.0.1:49162; use osc:7777 and ip:127.0.0.12 to change it. OSC is available in the Electron and plugin builds, not the browser build.
For example, =1abc sends 10, 11, and 12 to /1; =a123 sends 1, 2, and 3 to /a. Use resources/listener.js to test OSC, see osc.orca, or follow the Sonic Pi example.
This section describes the browser/Electron Commander. The plugin has a related but separate Plugin Commander.
In Electron, Orca can receive commands over UDP port 49160. Press CmdOrCtrl+K to open the local Commander prompt, which can control transport, inject patterns, and change settings.
Project mode lets you inject saved Orca files into the active grid. Press CmdOrCtrl+L to load multiple .orca files, then press CmdOrCtrl+B and enter a loaded file's name and optional coordinates.
| UDP Input | OSC Input | UDP Output | OSC Output |
|---|---|---|---|
| 49160 | — | 49161 | 49162 |
Desktop commands accept their first two characters as shorthand; for example, write can be entered as wr. The implementation in commander.js is the authoritative list.
play: Play the program.stop: Stop the program.run: Run one frame.bpm:140: Set the tempo to 140 BPM.apm:160: Animate the tempo toward 160 BPM.frame:0: Set the frame counter to 0.skip:2: Advance the frame counter by 2.rewind:2: Move the frame counter back by 2.color:f00;0f0;00f: Change the interface colors.find:aV: Move the cursor to the firstaVmatch.select:3;4;5;6: Move to(3,4)and optionally select a5x6block.inject:pattern;12;34: Injectpattern.orca, optionally at(12,34).write:H;12;34: WriteH, optionally at(12,34).time: Write the elapsed minutes and seconds since frame 0.midi:1;2: Select MIDI output device 1 and input device 2.udp:1234: Set the UDP output port.osc:1234: Set the OSC output port.ip:127.0.0.12: Set the UDP/OSC target address.groove:75;25: Set groove ratios; see Groove.
Orca supports groove/shuffle to create swing and humanized timing. Groove works by varying the duration of each tick in a repeating cycle.
Groove ratios use 50 as the baseline (1.0x normal speed):
| Value | Ratio | Effect |
|---|---|---|
| 25 | 0.5x | Half duration (faster tick) |
| 50 | 1.0x | Normal timing |
| 75 | 1.5x | 1.5x duration (slower tick) |
| 99 | ~2.0x | Near-double duration |
groove:75;25— Classic swing. Long-short-balanced cycle.groove:25;75— Inverse swing. Short-long-balanced cycle.groove:50— Straight timing (reset to normal).
A closing ratio is automatically appended to balance the cycle, so the average tempo stays the same. For example, groove:75;25 becomes [75, 25, 50] internally — a 3-step cycle.
Use the command prompt (CmdOrCtrl+K) and type groove:75;25.
- Enter ratios through the Plugin Commander, for example
groove:75;25. - Automate the Shuffle parameter from 0-200%. It maps to a balanced three-step groove: 0% is maximum inverse swing, 100% is straight, and 200% is maximum swing.
The current groove is displayed in the status bar as groove:75;25;50.
Press Cmd+K to open the plugin's command prompt, or Cmd+F to open it with find: pre-filled. Press Enter to execute, Escape to cancel, and Up/Down to navigate command history.
The tables list each supported shorthand. Universal commands work in classic and Life modes; Life commands are accepted only while Life mode is active.
Universal commands (both modes):
| Command | Short | Description |
|---|---|---|
find:text |
fi |
Find text in grid and move cursor to first match |
select:x;y;w;h |
se |
Move cursor and optionally set selection size |
groove:75;25 |
gr |
Set groove ratios |
cc:0 |
cc |
Set MIDI CC offset |
pg:ch;msb;lsb;pgm |
pg |
MIDI program change with optional bank select |
copy |
co |
Copy selection |
paste |
pa |
Paste clipboard |
erase |
er |
Erase selection |
color:f00;0f0;00f |
cl |
Set theme colors (bLow;bMed;bHigh as hex RGB) |
inject:name |
in |
Inject cached module at cursor (or inject:name;x;y) |
Classic-mode commands:
| Command | Short | Description |
|---|---|---|
write:text;x;y |
wr |
Write text at position (or cursor if x;y is omitted) |
time |
ti |
Write the current time at the cursor |
clean |
-- | Remove all movers (N/S/E/W) and bangs (*) from grid (skips halted) |
autoclean |
-- | Toggle auto-clean on transport stop (autoclean:on/off) |
Network commands:
| Command | Short | Description |
|---|---|---|
udp:7777 |
ud |
Set UDP output port |
osc:7777 |
os |
Set OSC output port |
ip:127.0.0.1 |
ip |
Set target IP address |
osc:tidal |
-- | OSC preset for TidalCycles |
osc:sonicpi |
-- | OSC preset for Sonic Pi |
osc:supercollider |
-- | OSC preset for SuperCollider |
osc:norns |
-- | OSC preset for Norns |
Life mode commands:
| Command | Short | Description |
|---|---|---|
scale:minor |
sc |
Set scale by name |
root:D |
ro |
Set root note |
rate:4 |
ra |
Set evolve rate (1-32) |
pulse / hold |
pu/ho |
Set note mode |
channel:5 |
ch |
Set paint channel (0-15) |
octave:4 |
oc |
Set paint octave |
minoct:2 |
mi |
Set minimum octave limit |
maxoct:6 |
mo |
Set maximum octave limit |
decay |
de |
Toggle decay system (velocity + probability drop with age) |
minvel:60 |
mv |
Set floor velocity at max age (1-127, default 40) |
minprob:10 |
mp |
Set floor fire probability at max age (1-100%, default 10) |
maxnotes:4 |
mn |
Set max notes per step per channel (0=unlimited) |
seq |
sq |
Toggle sequencer mode between off and forward |
seq:forward/reverse/mirror/random/euclid:N |
sq |
Select a sequencer mode; N sets Euclid pulses |
euclid:3 |
eu |
Set the Euclid pulse count (1-32) |
orient:h |
or |
Set horizontal scan; use orient:v for vertical, or omit the value to toggle |
lockoct |
lo |
Toggle octave lock (prevent octave drift on birth) |
chord |
cd |
Toggle chord filter (off ↔ 135). Use chord:1357, chord:125, etc. for custom degrees |
dedup |
dd |
Toggle note deduplication (merge identical notes, scale velocity by count) |
dedupcc:1 |
dc |
Set CC number for dedup count modulation (-1=disabled) |
rule:23/36 |
ru |
Set a survival/birth rule or preset: life, highlife, 34life, seeds, diamoeba, daynight, replicator, 2x2, morley |
conductor |
cn |
Toggle conductor mode (manual evolution) |
microtune |
mt |
Toggle microtuning pitch bend |
microtune:75 |
mt |
Set microtune amount (0-100) |
loop:8 |
lp |
Arm loop recording for N generations (auto-plays when done) |
loop:stop |
lp |
Stop loop playback |
loop |
lp |
Toggle loop playback on/off |
reset |
-- | Reset to initial state |
The $ (self) operator also sends commands through the commander. For example, $groove:75;25 will set the groove when the $ operator is banged.
Life mode is a plugin-only cellular-automata sequencer. Instead of executing Orca operators, the grid evolves musical cells: births, survivors, and deaths drive MIDI notes while the DAW transport provides timing.
- Load the plugin before a MIDI instrument and start the DAW transport. In the standalone build, press Space to start its internal transport.
- Press
Cmd+Gto enter Life mode. - Press Tab to choose an octave and Shift+Tab to choose a MIDI channel.
- Type
A-Gfor natural notes ora-gfor sharps. Use the arrow keys to move and Backspace to erase. - Open the Plugin Commander with
Cmd+Kto set the scale, evolution rate, sequencer mode, and other musical rules.
Press Cmd+G to toggle between classic Orca and Life mode. Entering Life mode converts existing letter cells into live cells using the active paint channel and octave. Leaving Life mode silences Life notes and copies surviving note letters back to the classic grid.
- Alive cells carry a note (
A-Gora-g), MIDI channel (0-15), octave (0-8), age, and lock state. - Birth: Under the default rule, a dead cell with exactly three neighbors is born. Its pitch moves through the selected scale according to its position relative to its parents.
- Survival: Under the default rule, live cells with two or three neighbors survive.
- Death: Other live cells die and release their MIDI notes.
- Toroidal wrapping: The simulation wraps at every edge.
- Protected cells: Locked cells ignore death rules and act as permanent anchors.
- Pulse mode (default): Notes retrigger on every evolution step. Clusters of same-note cells produce ratchets (rapid sequential notes)
- Hold mode: Notes trigger on birth and sustain until death
Notes evolve within a selected scale. Available scales: chromatic, major, minor, pentatonic, dorian, phrygian, lydian, mixolydian, locrian, harmonic minor, melodic minor, minor pentatonic, blues, whole tone, diminished.
Decay (decay:on) is a unified aging system that makes cells fade over time — both in volume and reliability:
- Newborn cells play at full velocity (127) and always fire (100% probability)
- As cells age, both velocity and probability decay linearly over 64 generations
- At max age, velocity reaches
minvel(default 40) and probability reachesminprob(default 10%) minvel:80— raise the velocity floor (louder old cells)minprob:30— raise the probability floor (more reliable old cells)- Models organic aging: young cells are loud and reliable, old cells become quiet and sporadic
Max notes (maxnotes:N) caps how many notes fire per step per MIDI channel:
maxnotes:0= unlimited (default)maxnotes:4= at most 4 notes per channel per step- Prevents wall-of-notes from dense patterns while giving each channel its own budget
Sequencer mode staggers note emission across row or column groups during each evolution cycle. Use seq:<mode> to select a mode, orient:v for a top-to-bottom row scan, or orient:h for a left-to-right column scan. All controls are also available as DAW parameters.
| Variant | Description |
|---|---|
seq:off |
Emit eligible notes together without phase scanning |
seq:forward |
Scan in the selected orientation |
seq:reverse |
Scan in the opposite direction |
seq:mirror |
Ping-pong — alternates direction each evolution cycle |
seq:random |
Randomize phase order whenever the grid evolves |
seq:euclid:N |
Evenly distribute N active phases across the evolution rate |
- With
rate:8and 16 rows in vertical orientation, rows 0-1 fire on frame 0, rows 2-3 on frame 1, and so on. - Visual separators show phase groups, and a translucent sweep marks the active group.
euclid:3changes the Euclid pulse count without changing the selected sequencer mode.- Sequencer mode emits cells individually through phase scheduling rather than ratchet clustering.
- Phase scanning has no audible effect when
rate:1.
Octave lock (lockoct:on) prevents octave drift during note evolution. When cells are born, their note still evolves by stepping through the scale, but the octave stays locked to the parent median. Useful in sequencer mode to keep patterns in their intended register.
Chord filter snaps all emitted notes to the nearest chord tone of the current scale. This dramatically reduces dissonance by ensuring everything aligns harmonically:
chord(toggle) — cycles between off and triad (degrees 1, 3, 5)chord:135— triad (root, 3rd, 5th)chord:1357— seventh chord (root, 3rd, 5th, 7th)chord:125— sus2 voicingchord:145— sus4 voicingchord:1356— sixth chordchord:12356— add2 chordchord:1234567— full scale (all degrees allowed)- Custom degrees can be specified as any combination of digits 1-7
Works with any scale — for pentatonic scales (5 notes or fewer), all notes are considered chord tones. Especially effective with dense patterns that would otherwise produce clashing intervals.
Dedup (dedup:on) merges identical {channel, pitch} notes into a single note, scaling velocity by the number of cells:
- Velocity: average velocity of all contributing cells + log2(count) × 15 boost. With decay on, this preserves the age-based variation while rewarding density
- CC modulation (optional):
dedupcc:1sends CC1 (mod wheel) proportional to the count (8 cells = CC 127). Map this to filter cutoff or expression in your synth for timbral variation. Disabled by default (dedupcc:-1) - Especially useful with dense patterns where many cells converge on the same note — instead of firing 5 identical C3s, fires one louder C3
- Pairs well with decay: average velocity keeps age dynamics, count boost rewards density
By default, Life mode uses Conway's Game of Life (conventionally B3/S23). Commander values use survival/birth order, so Conway is written 23/3:
| Preset | Survival/Birth | Description |
|---|---|---|
life |
23/3 | Conway's Game of Life (default) |
highlife |
23/36 | Self-replicating patterns |
34life |
34/34 | Exploding/chaotic growth |
seeds |
/2 | All cells die, birth with 2 neighbors |
diamoeba |
5678/35678 | Diamond-shaped amoeba patterns |
daynight |
34678/3678 | Symmetric day/night behavior |
replicator |
1357/1357 | Self-replicating patterns |
2x2 |
125/36 | 2×2 block patterns |
morley |
245/368 | Move/Morley |
For custom rules, digits before / are survival counts and digits after / are birth counts. For example, rule:23/36 selects HighLife.
Conductor mode (conductor or Cmd+T) gives you manual control over when the grid evolves. Instead of evolving automatically every N frames, the grid only advances when you trigger it:
- Enter key: Press Enter to trigger one evolution step
- External MIDI: Any MIDI NoteOn received by the plugin triggers one evolution step — connect a keyboard, sequencer, or another plugin to control the pace externally
When combined with sequencer mode, the sequencer continues scanning rows independently at the evolve rate, but the GoL rules (birth/death/survival) only fire on trigger. This lets you keep the rhythmic pulse going while deciding when the pattern should evolve.
Mid-cycle triggers are supported: if you press Enter while the sequencer is mid-scan, the grid evolves immediately without disturbing the current seq phase.
Microtuning (microtune or Cmd+U) adds pitch bend messages before each note based on how many neighbors that cell has:
- Cells with 2 neighbors (the GoL equilibrium) get no bend (center = 8192)
- Cells with fewer neighbors bend downward
- Cells with more neighbors bend upward
microtune:75sets the bend intensity (0-100, default 50)
This creates organic pitch variation tied to the local density of the cellular automaton — isolated cells sound slightly flat while crowded cells sound sharp. The pitch bend is channel-wide (per MIDI spec), so it affects all notes on that channel.
Generation loop records a sequence of evolution snapshots and loops them back:
loop:8— arms recording for the next 8 evolutions- As the grid evolves, each generation's grid state and MIDI events are captured
- When recording completes, playback starts automatically — the grid cycles through the recorded generations instead of running live GoL rules
loop:stoporCmd+E— stops playback and returns to live evolutionloop(bare) orCmd+E— toggles playback on/off
The loop stores full grid snapshots (including ratchets and phase notes for seq mode), so playback is faithful to the original recording. Up to 64 generations can be recorded.
Status bar shows loop:rec 3/8 during recording and loop:5/8 during playback.
Control the octave range with minoct:N and maxoct:N:
minoct:2— no notes below octave 2maxoct:5— no notes above octave 5- Born cells are clamped to the active range
- Octave cycling (Tab) wraps within the range
- Tighter ranges reduce dissonance from extreme octave spread
Life mode includes a library of classic GoL patterns organized by category:
- Still Lifes (11): Block, Beehive, Loaf, Boat, Tub, Pond, Ship, Long Boat, Barge, Mango, Eater 1
- Oscillators (14): Blinker, Toad, Beacon, Pulsar, Pentadecathlon, Clock, Octagon 2, Figure 8, Tumbler, Fumarole, Queen Bee Shuttle, Twin Bees Shuttle, Ants, Turning Toads
- Spaceships (9): Glider (4 directions), LWSS, MWSS, HWSS, Copperhead, Loafer
- Methuselahs (9): R-pentomino, Diehard, Acorn, Pi, B-heptomino, Thunderbird, Herschel, Rabbits, Lidka
- Guns (3): Gosper Gun, Simkin Gun, Simkin Gun 1B
- Puffers (2): Puffer 1, Switchengine
Patterns are placed with random notes from the current scale, using the active paint channel and octave.
| Shortcut | Action |
|---|---|
Cmd+G |
Toggle Life mode on/off |
A-G / a-g |
Place a note cell |
Tab |
Cycle paint octave |
Shift+Tab |
Cycle paint channel |
Cmd+Shift+S |
Cycle scale |
Cmd+N |
Cycle root note (C, C#, D, ... B) |
Cmd+M |
Toggle pulse/hold mode |
Cmd+Shift+Up/Down |
Double/halve evolve rate |
Cmd+Shift+K |
Toggle lock (protect) selected cells |
Cmd+P |
Enter stamp mode / cycle pattern within category |
Cmd+Shift+P |
Cycle pattern backward within category |
Cmd+] / Cmd+[ |
Cycle pattern category |
Enter (conductor) |
Trigger evolution |
Enter (stamp mode) |
Place pattern |
Escape (stamp mode) |
Cancel stamp mode |
Cmd+E |
Toggle recorded-loop playback |
Cmd+Shift+E |
Rotate selection 90° clockwise |
Cmd+T |
Toggle conductor mode |
Cmd+U |
Toggle microtuning |
Cmd+Shift+H |
Mirror selection horizontal |
Cmd+Shift+J |
Mirror selection vertical |
Cmd+Up/Down |
Shift octave of selected cells |
Cmd+Left/Right |
Shift channel of selected cells |
Cmd+R |
Reset to initial state |
Cmd+Shift+R |
Save current state as new initial |
Cmd+Z |
Undo |
Cmd+Shift+Z |
Redo |
Cmd+S |
Save as a .life file |
Classic .orca files are plain-text grids. Life mode uses a separate text-based .life format because every cell also needs channel, octave, and lock metadata.
Save the active format with Cmd+S; open either format with Cmd+O or drag it onto the plugin. A .life file stores grid dimensions, live-cell metadata, scale, root, evolution rate, pulse mode, decay controls, maximum-note limit, sequencer mode, octave lock and range, chord filter, deduplication settings, and the cellular-automata rule. Settings absent from older files use defaults when loaded.
The .life format round-trips sequencer mode, Euclid pulse count, and scan orientation. It does not yet store the paint cursor, conductor/microtuning state, or generation loops. DAW project state stores automatable parameters separately through the host.
Orca uses base 36. Numeric operator inputs accept digits and letters according to the following table. For example, Do bangs every 24th frame.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| C | D | E | F | G | H | I | J | K | L | M | N |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| O | P | Q | R | S | T | U | V | W | X | Y | Z |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
The MIDI operators interpret letters beyond the chromatic scale as transpositions. For example, 3H is equivalent to 4A.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B |
|---|---|---|---|---|---|---|---|---|---|---|---|
| _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | A0 | B0 |
| C | D | E | F | G | H | I | J | K | L | M | N |
| C0 | D0 | E0 | F0 | G0 | A0 | B0 | C1 | D1 | E1 | F1 | G1 |
| O | P | Q | R | S | T | U | V | W | X | Y | Z |
| A1 | B1 | C2 | D2 | E2 | F2 | G2 | A2 | B2 | C3 | D3 | E3 |
- Pilot, a companion synth tool.
- Aioi, a companion to send complex OSC messages.
- Estra, a companion sampler tool.
- Gull, a companion sampler, slicer and synth tool.
- Sonic Pi, a livecoding environment.
- Remora, ESP32 LED controller firmware.
- Overview Video
- Orca Podcast
- Ableton & Unity3D
- Japanese Tutorial
- German Tutorial
- French Tutorial
- Examples & Templates
- This application supports the Ecosystem Theme.
- Download and share your patches on PatchStorage.
- Support this project through Patreon.
- See LICENSE.md for license rights and limitations (MIT).
- Pull requests are welcome!


