OUT —
the machine makes the sound: the page only sends MIDI out and synthesizes nothing (unless the built-in engines are in this build and chosen as the sound). Web MIDI is available in Chrome and Edge on desktop; in Safari and on a phone browser MIDI is unavailable, and only the gamepad view remains.
What is playing right now: the patch (→ held + LB/RB page, ◀ ▶ here), the sound output (your Model:Cycles over MIDI, or the built-in engines on this page), what each side sounds, the clock and the scale. Everything else lives on the other screens: Start cycles PERFORM → VISUAL → MIXER, hold Start for the quick menu.
each button hits its own track, each with its own channel. On Model:Cycles the note pitch sets the tone of the sound. Each track has its own hit note (shown on the pad): hold ↑ and press X / B to move it by a semitone, LB / RB by an octave, for the track hit last (the frame on the pad). The new note sounds at once as a short hit (the "audible" toggle in SETUP → Pads). The other arrows held: ↓ the roll (LB / RB rate, X / B length, Y on / off), → the kit (as in chords), ← the recorder. Hold a pad and press an arrow: the editor of that pad's track (← sound, ↑ sequence, ↓ motion, → pitch · mix). A tap of ↓ opens it on the last track, a tap of ↑ comes back up. Reset is the "reset note" button there or Share/Capture on the gamepad. Notes are remembered at the moment of the hit: if you shift the transpose with a button held, the same note is released.
A B X Y pick a chord from the current sequence. If a group's trigger is held (LT is tracks 1–3, RT is 4–6, both is all six), a press also plays the chosen chord on that group: a legato change with no stuck notes. Velocity is the trigger press, but not below 40; releasing the button does not silence the sound, releasing the trigger does. One triad note per track, each on its own channel. Sustain, latch, roll and quantize work as in the other modes.
The d-pad is a modifier. Hold ↑: LB / RB previous / next progression, LT / RT page by category, A like, B hide, Y source, X the chord depth (3 → 8 notes, around), a flick of the right stick up / down transposes ±1. Hold ↓: LB / RB previous / next motion of the side in play, X / B octaves −/+, Y / A rate faster / slower, L3 latch. Hold →: LB / RB kit, LT / RT page by category (DRUM / MELODIC / MIX first), A like, B dislike (hide), Y source. Hold ←: the recorder - A play / pause, B stop, Y REC a layer, X overdub, LB / RB pattern, LT / RT tempo (a light press nudges). Hold LT / RT / LB / RB and press an arrow: the editor of that track. A tap of ↓ dives into the editor of the last track, a tap of ↑ surfaces. Without an arrow LB / RB play pads 3 and 4. The tiles show each letter's job while the d-pad is held; no chord is picked then, the triggers keep playing. Chords are diatonic from the tonic and scale. A note is remembered at the moment of the hit. Switch with the "chords" / "pads" buttons or a short Back press.
sticks are four MACROS with our own names (Tone, Shape, Motion, Body by default; rename them in the editor). A synth PROFILE says where each macro lands: on the Model:Cycles (the default) they are the four knobs of the instrument, CC 16–19, and the deck shows the instrument's own parameter names (Punch / Body / Drop / Snap on Thump, Air / Motion / Detune / Mix on Swarm) while a macro keeps its default name; other hardware profiles use that synth's numbers; Custom is yours: several targets per macro, CC / NRPN / bend / engine FX, min–max, curves, invert, MIDI learn. The "⚙" button in this title bar opens the editor; the small text under each name is the live target. A patch can carry its own stick map on top (PATCH → Edit). In chords L3/R3 lock the stick's knobs (FIX lights up).
triggers: by default the left one mutes and the right one holds. Mute: at rest a hit is full velocity (127), squeezing takes it down to one. Sustain is done by the page, not via CC 64 (Model:Cycles has no pedal): while the trigger is pressed, note-offs pile up and go out together on release. "Pitch" and "bend" send MIDI; mute and sustain send nothing out. The "triggers play" / "stick release" / "mute" / "hold" toggles are in SETUP → Gamepad.
Each chord group has its own instrument (Thump, Snap, Clang, Knock, Glow, Choir, Crack, Clap, Bell, Grit, Swarm, Drone and their variations). "Instrument ▸" opens the list with each one's character and sends the choice to all three channels of the group at once; −/+ step through the twelve base sounds, "instant" sends on every step.
Group Delay and Reverb send: CC 12 and 13 on all three tracks of the group (A is 1–3, B is 4–6). Values are not sent on load.
With → held, LB and RB flip the visible patches of the active category (holding repeats). "♥ only" and "show ✕" filter the paging. A patch sets the machines, knobs and sends of all six tracks, which tracks LT plays and which RT, and where the sticks go. Sending: first notes are silenced and All Notes Off goes out, then CC 70 on all tracks, and ~40 ms later the other CCs. Changing the patch cuts the sound and replaces the sounds of all tracks. GATE (CC 67): toggles under the chord tiles; DRONE (machine 12) does not read GATE. A patch is not sent on page load. "?" marks hypothesis values, check by ear on the machine.
this is our own idea of the state, not the machine's reply: the page sends Start and Stop, but Model:Cycles reports nothing about itself.
built-in engines: contain DSP code by Emilie Gillet (MIT) — see third-party licences.
on the machine: SETTINGS → MIDI → Ports, "Inp from" = USB or M+U; SETTINGS → MIDI → Sync, "Clk In" on for the page clock.
HW = the MIDI port only · BUILT-IN = the engines on this page · BOTH = the same bytes to each. The big switch on PERFORM picks Model:Cycles or Built-in; BOTH is only here.
a browser clock is less stable than the machine's built-in sequencer. If the tempo drifts, turn the clock off here and start the machine with its own button. Messages are scheduled 100 ms ahead and go out with an exact timestamp; the time base is performance.now(), the same timeline in which Web MIDI accepts timestamps. The page creates no Web Audio nodes for it. In a background tab the browser throttles timers, so keep the page in front.
BPM and the state are on PERFORM (NOW column); play / stop also live in the quick menu (hold Start → Transport), on Space, and on hold Start + Y.
the scale is shared by all modes. Roll repeats on the grid while LS is held. Quantize delays a hit to the nearest grid step, up to one step of latency, so playing feels sticky. Off by default. It can only delay forward: if the nearest step is already behind, the hit goes out immediately.
By default pad channels are locked to 1–6 (a field on each pad). Enable editing only if the machine needs others.
gamepad not detected
nothing pressed yet
non-standard gamepad layout: button numbers may not match LB/RB/A/B/X/Y. Press "remap" and press the buttons one by one (pads 1 and 2, the LT and RT triggers, need no learning).
input: not selected / not listening / received 0
Changing the preset cuts the sound and replaces the sounds of all tracks. PC 0–95 is pattern A01…F16 (bank A–F × 16); a match with the machine's presets is not confirmed. PC is not sent on load.
no PC sent yet
Raw machine number for people who know the device table (the "Instrument ▸" picker on MIXER is the normal way). On the device, enable RCV CC and the track channel; changing cuts the sounding voice.
nothing sent yet
Subscribes only when toggled on; the page sends nothing on connect. Clock and active sensing are counted separately. Mirror works in chord mode only: a CC from the track channel is repeated on the other channels of its group (the source is not duplicated, echoes of our own messages are ignored); PC goes to the PC channel as is; notes are not mirrored.
nothing received
REC (or R) records everything the page sends to the machine (and the listener input, if enabled); clock is not recorded. Files: SMF format 1, PPQ 480, plus a .json sidecar. A pattern switch writes a marker. Clock follows REC (SETUP → Clock).
They are stored on the computer running the server; "Finder" and "open folder" open Finder there (including when connecting from another device over Tailscale). Signed in: mine / public on the service.
A recording becomes a song to play along: load one from the list, pick karaoke or highway, difficulty and ghost. Back pauses; the quick menu's Transport entry restarts the song. Recordings in the list have "▶ along".
Open a parent from a recording ("over" / "cont." in the list): the parent plays as a ghost through the port or engines, you play on top, REC records only your take. Takes, loop, solo parent and "save as remix" live in the layer bar at the bottom of the page.
Math sequences and algorithms played as music, up to three layers locked to the page clock. Inside the panel: Space play/stop, S surprise, 1–3 layers.
guest · recordings are saved on this computer. Sign in on the service to save to the cloud and share.
master FX (CC 85–88) are on the MIXER screen