kria
kria · modulation · schema v1KRIA — a 4-track grid step-sequencer, a clean-room reimagining of monome's Kria (inspired by monome Kria; behavior reimplemented from monome's public docs, no monome source or doc prose reproduced). Like CLIP PLAYER it is a browser-native companion to a monome grid 128 (WebSerial, no native helper — see lib/control/monome) but is FULLY usable from the card with a mouse. MODEL: four INDEPENDENT tracks, each with its own per-step sequences edited on separate PAGES selected from a nav row. Pages (Phase A): TRIG (does the step fire? + per-step ratchet subdivisions), NOTE (the Y axis picks a pitch DEGREE within the active scale), OCTAVE (per-step +0..+5 octave offset), DURATION (per-step gate length as a fraction of the step). Per-track extensions: LOOP (per-track loop start + length, wrapping), TIME (per-track clock DIVISION — advance once every N base ticks), DIRECTION (forward / reverse / pingpong / drunk / random), and per-step PROBABILITY (4-level) + GLIDE (pitch slew). A shared SCALE (major / minor / pentatonic / chromatic) maps NOTE degrees to V/oct. 16 PATTERN slots each hold a full snapshot of all four tracks; switching patterns is QUANTIZED — tap a slot to CUE it and the engine swaps it in on the next track-0 loop boundary (or after a cue-clock countdown). CLOCK: locks to the rack's TIMELORDE singleton (runs only while TIMELORDE.running, tempo = TIMELORDE.bpm); patch an external CLOCK IN to override the tempo (each rising edge advances the base grid, via the canonical windowed edge counter — no double-count), and a RESET IN rising edge re-anchors every track to its loop start. Without a TIMELORDE node the card's BPM knob + RUN button drive it. CARD: a TRACK selector (1-4), a PAGE selector (TRG/NTE/OCT/DUR + PAT), a 16-step editor for the selected track+page (with a clock-locked playhead column), and a 16-slot pattern strip (tap empty = create + activate, tap another = cue a quantized switch); a GRID button connects + binds a monome grid (capability-gated, Chromium) so the same edits + cues happen on hardware with live varibright LED feedback. Inputs — CLOCK IN (external clock, rising edge advances), RESET IN (rising edge re-anchors all tracks). Outputs (the Ansible Kria shape) — PITCH 1-4 (per-track V/oct with per-step glide slew) + GATE 1-4 (per-track gates; DURATION shapes the width, ratchet subdivides). All ports live on the yellow drill-down PATCH PANEL (no side jacks); the BPM knob is MIDI / control-surface assignable. USAGE: patch each track's PITCH+GATE into a voice (VCO + VCA/ADSR), clock from TIMELORDE, build trig/note/octave/duration patterns per track from the card or a monome grid, then perform by cueing pattern slots for quantized arrangement changes.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
clock | gate | External base clock: each rising edge advances the shared 16th-note grid one tick, from which every track derives its own stepping via its clock division. When patched it overrides the internal BPM for step timing (the rack tempo still sets gate/glide durations), and the pulses themselves run the sequencer. gate / trigger; trigger — fires once per rising edge |
reset | gate | A rising edge (a trigger) re-anchors all four tracks to the start of their loop windows at once and clears any pending pattern cue, so everything restarts cleanly together. gate / trigger; trigger — fires once per rising edge |
outputs
| id | cable | what it does |
|---|---|---|
pitch1 | pitch | Track 1's pitch CV (V/oct): the current step's note + octave lanes mapped through the shared scale and root, with the glide lane slewing the ramp between steps for portamento. V/oct pitch CV |
gate1 | gate | Track 1's gate: goes high on steps whose trigger lane is set and whose probability roll passes; the duration lane sets how wide it stays high and the ratchet lane subdivides it into 1–4 evenly-spaced re-hits within the step. gate / trigger |
pitch2 | pitch | Track 2's pitch CV (V/oct), quantized through the shared scale/root with its own glide slew. V/oct pitch CV |
gate2 | gate | Track 2's gate, shaped by track 2's duration, probability and ratchet lanes. gate / trigger |
pitch3 | pitch | Track 3's pitch CV (V/oct), quantized through the shared scale/root with its own glide slew. V/oct pitch CV |
gate3 | gate | Track 3's gate, shaped by track 3's duration, probability and ratchet lanes. gate / trigger |
pitch4 | pitch | Track 4's pitch CV (V/oct), quantized through the shared scale/root with its own glide slew. V/oct pitch CV |
gate4 | gate | Track 4's gate, shaped by track 4's duration, probability and ratchet lanes. gate / trigger |
params
| id | label | range | default | curve |
|---|---|---|---|---|
bpm | BPM | 30..300 | 120 | linear |
running | Run | 0..1 | 0 | discrete |
controls
| control | what it does |
|---|---|
| BPM | Internal fallback tempo in beats per minute, used only when there is no TIMELORDE node in the rack AND nothing is patched into CLOCK IN; when a TIMELORDE is present its tempo wins, and an external clock overrides both. |
| Kria cell {n} | A cell of the per-step editor grid for the selected track — this is where you enter each step's value, INCLUDING its note. The same grid is reused by the page selector (TRIG / NTE / OCT / DUR): on the NOTE (NTE) page it IS the per-step note entry — the lit row picks that step's scale DEGREE (bottom row = degree 0, up to degree 6), which the shared SCALE + ROOT then quantize into the track's pitch CV; on the other pages the same cell instead sets the step's trigger, octave or gate duration. Click a cell to set/clear it for the active page; the column tracking the playhead is highlighted as it runs. (An attached monome grid drives these same edits.) |
| Run | Local play/stop transport (1 = running, 0 = stopped), exposed as the card's RUN button. When a TIMELORDE node exists its run state drives playback instead, and an external clock's pulses can run the tracks regardless. |
source
kria.ts on GitHub.