README from GitHub, MIT
Eucalypso Module for Schwung
Euclidean MIDI sequencer module for Ableton Move, built for Schwung.
Features
Eucalypso is a chainable MIDI FX module (midi_fx) for Schwung. It generates up to 4 parallel Euclidean lanes with deterministic timing and seeded per-lane note variation.
- Internal clock or external MIDI clock sync
- Hold/latch play modes with restart/continuous retrigger behavior
- Rate, swing, voice limit, and global velocity/gate controls
- 4 independent Euclidean lanes (steps, pulses, rotation, drop + drop seed)
- Per-lane register note index and octave offsets
- Per-lane note randomization and octave randomization with dedicated seeds
- Global velocity and gate randomization with shared seed/cycle controls
- Note register modes for held notes, scale-derived notes, or fixed drumpad notes
- Held-note ordering (up, down, played, rand with seed)
- Scale selection, scale range, root, and base octave controls
Prerequisites
- Schwung installed on your Ableton Move
- SSH access enabled:
http://move.local/development/ssh
Installation
Via Module Store
If Eucalypso is published in Module Store:
- Launch Schwung on your Move
- Select Module Store
- Navigate to MIDI FX -> Eucalypso
- Select Install
Manual Installation
./scripts/build.sh
./scripts/install.sh
Usage
Eucalypso is a MIDI FX module:
- Insert Eucalypso in a chain's MIDI FX slot
- Play and hold notes/chords into the chain
- Route output to a synth/sampler module
- Configure timing in Global, note pool behavior in Note Register, and pattern behavior in each Lane
Note Emission Behavior
- Timing always advances from transport/clock; lane rhythm phase does not depend on incoming note timing.
- Note output is gated by the active note state:
holdmode: output only while notes are physically held.latchmode: output from the latched note set after keys are released, until that set is replaced.register_mode=held: lane note indices select from the active held/latched note register.register_mode=scale: lane note indices select from the configured scale register, but output is still gated by active held/latched state.register_mode=drumpad: lane note indices select from fixed drumpad notes (36-51), and lane output is additionally gated by held/latching drumpad 1-4 for lanes 1-4.- If a lane note index is out of register range,
missing_note_policydecides behavior (skipdefault,fold,wrap, or seededrandom).
Parameters
In Shadow UI, parameters are organized into sections.
Global
| Parameter | What it does |
|---|---|
play_mode (Play) | Selects hold or latch. |
rate (Rate) | Step division from 1/32 up to 1. |
retrigger_mode (Retrig) | restart or cont sequence behavior on new trigger. |
sync (Sync) | Selects internal or MIDI clock. |
bpm (BPM) | Internal tempo (40-240) when sync=internal. |
swing (Swing) | Swing amount (0-100). |
max_voices (Voices) | Limits simultaneous output voices (1-64). |
global_velocity (Vel) | Global base velocity (1-127). |
global_v_rnd (Vel Rnd) | Global velocity random amount (0-127). |
global_gate (Gate) | Global base gate length (1-1600). |
global_g_rnd (Gate Rnd) | Global gate random amount (0-1600). |
global_rnd_seed (Rnd Seed) | Shared seed base for global random engines. |
rand_cycle (Rand Cyc) | Loop length for deterministic random cycles (1-128). |
Note Register
| Parameter | What it does |
|---|---|
register_mode (Reg Mode) | Builds note register from held, selected scale, or fixed drumpad notes. |
held_order (Note Ord) | Note ordering: up, down, played, rand. |
held_order_seed (Rand Ord Seed) | Seed for randomized note order mode. |
missing_note_policy (Miss Pol) | Out-of-range lane note behavior: skip, fold, wrap, random. |
missing_note_seed (Miss Seed) | Seed for randomized missing-note resolution. |
scale_mode (Scale) | Chooses the active scale set for scale register mode. |
scale_rng (Scale Rng) | Register size: scale steps (1-24) in scale mode, or included drumpads (1-16) in drumpad mode. |
root_note (Root) | Root note (0-11). |
octave (Oct) | Global register octave offset (-3 to +3). |
Lanes (1-4)
Each lane has the same control set.
| Parameter | What it does |
|---|---|
laneX_enabled (On) | Enables/disables lane output. |
laneX_steps (Steps) | Lane pattern length (1-128). |
laneX_pulses (Pulse) | Euclidean trigger count (0-128). |
laneX_rotation (Rot) | Rotates lane pattern start. |
laneX_drop (Drop %) | Drop chance amount (0-100). |
laneX_drop_seed (Drop Seed) | Seed for lane drop decisions. |
laneX_note (Note) | Register index used by the lane (1-24; in drumpad mode, selects drumpad index within the active register size). |
laneX_n_rnd (Note Rnd) | Chance/amount to swap with a random register note. |
laneX_n_seed (Note Seed) | Seed for lane note randomization. |
laneX_octave (Oct) | Lane octave offset (-3 to +3). |
laneX_oct_rnd (Oct Rnd) | Lane octave randomization amount (0-100). |
laneX_oct_seed (Oct Seed) | Seed for lane octave randomization. |
laneX_oct_rng (Oct Rng) | Octave randomization set (+1, -1, +-1, +2, -2, +-2). |
laneX_velocity (Vel) | Lane velocity override (0 uses global velocity). |
laneX_gate (Gate) | Lane gate override (0 uses global gate). |
Troubleshooting
No sequence output:
- Verify Eucalypso is receiving MIDI notes
- Check lane
On,Steps, andPulsesettings - In
clocksync mode, ensure external MIDI clock start/tick is present - In
register_mode=drumpad, hold/latch drumpad 1-4 to gate lanes 1-4
Unexpected note choices:
- Check
register_modeandheld_order - Verify
Scale,Scale Rng,Root, andOctvalues - Review lane
Note,Note Rnd,Note Seed, andOctsettings - In
register_mode=drumpad,Scale Rngcontrols how many drumpad notes (36-51) are available
Timing behavior feels off:
- Confirm
retrigger_mode(restartvscont) - Confirm
syncsource (internalvsclock) - Re-check
swingandrate
Building from Source
./scripts/build.sh
Build output:
dist/eucalypso/dist/eucalypso-module.tar.gz
Credits
- Schwung framework and host APIs: Charles Vestal and contributors
- Eucalypso implementation: move-anything-eucalypso project contributors
AI Assistance Disclaimer
This module is part of Schwung and was developed with AI assistance, including Claude, Codex, and other AI assistants.
All architecture, implementation, and release decisions are reviewed by human maintainers. AI-assisted content may still contain errors, so validate functionality, security, and license compatibility before production use.