Kandecksky
Live-performance clip launcher and granular instrument — user guide
Overview
Kandecksky is an audio looper meant to be played live. Most of the window is a clip grid; the first column is a granular instrument. It is controller-agnostic: any MIDI grid or pad controller can drive it through controller profiles and MIDI Learn, it works fine with just the mouse, and it can be automated over OSC. An Akai APC20 profile ships built in (MIDI & controllers).
Under the hood:
- A native Rust audio engine with its own low-latency audio stream, independent of the browser layer. Clips are mixed, stretched, and effected in Rust; the interface only sends commands.
- BPM-synced playback — clips tagged with a tempo are time-stretched (pitch preserved) to follow the master clock.
- A generative engine that can play the grid for you: euclidean rhythms, Markov chains, step sequencing, pattern mutation, and cellular automata.
- Sync as master or slave: MIDI Clock in or out, and OSC transport/tempo exchange with your DAW.
It reads WAV, MP3, OGG, FLAC, AIFF, M4A, and AAC files.
Quick start
- Point the library at your samples. In the Library
panel (left), click
…and choose a folder. Its audio files appear in the tree; the search box filters by name. - Load a clip. Drag a file from the library onto any grid cell — or right-click a cell and choose Load audio….
- Start the clock. Press Space or click ▶ PLAY. The four beat dots on the transport bar pulse with the bar.
- Launch the clip. Click the cell (or hit its controller pad). It arms amber and fires at the next quantize boundary, turning green while playing.
- Stop it. Click the playing cell again ( red = stopping at the boundary), use the track's clip-stop button, or Shift+Space to stop everything.
The interface
| Region | What it does |
|---|---|
| Brand rail (far left) | The vertical Kandecksky column. Purely decorative — blue, yellow, red, top to bottom. |
| Transport bar (top) | Clock controls on the left (PLAY, STOP, Bounce, BPM, TAP, GEN, beat dots); mode and settings buttons on the right (sync badge, LIM, RES, SETS, MACRO, MIDI, OUTPUT, PALETTE, SAVE, LOAD, HELP). |
| Library panel | Folder tree of your samples with search. Drag files onto cells or
the Plantilpunkt drop zone. Collapsible with ◀. |
| Clip grid | Tracks in columns, scenes in rows — the same 8×5 bank a grid controller presents. Scene-launch buttons sit at the right end of each row. |
| Plantilpunkt | The first column: a permanent granular instrument instead of a clip track (details). |
| Faders row | Per-track volume faders plus the MAIN master fader. Each track header also carries its FX and MIDI buttons. |
| Status bar (bottom) | Contextual hints and the current launch-quantize setting. |
Transport & clock
Controls
| Control | Action |
|---|---|
| ▶ PLAY / Space | Start the master clock. Queued clips fire on their boundaries. |
| ■ STOP / Shift+Space | Stop the clock and all playing clips. |
| ⏺ Bounce | Record the master output while playing; writes a WAV when you stop (Recording & export). |
| BPM | Master tempo, 40–300 BPM, editable to 0.1. Tempo-synced clips re-stretch to follow. |
| TAP / T | Tap tempo. |
| GEN / G | Toggle the generative engine. |
| Beat dots | Four dots pulse one per beat, in Kandinsky colors. |
Launch quantize
Clip launches and stops resolve on a beat boundary: Immediate, ½ bar, 1 bar (default), 2 bars, or 4 bars. Set it in ⚙ MIDI → Launch Quantize; the current value is always shown in the status bar, and a MIDI Learn target can cycle it from hardware.
Sync sources
The badge next to the transport buttons shows who owns the clock:
| Badge | Source |
|---|---|
| INT | Internal free-running clock (default). |
| MIDI CLK | Kandecksky follows incoming MIDI Clock (24 PPQN) from the device selected in ⚙ MIDI. |
| OSC | Kandecksky follows BPM and play/stop sent by a DAW over OSC (OSC & DAW integration). |
| LINK | Ableton Link — tempo and start/stop shared with every Link-aware app on the network (see below). The badge shows the peer count, e.g. LINK 2. |
Kandecksky can also be the master: enable MIDI Clock Out in ⚙ MIDI to send 24 PPQN clock plus START/STOP to a DAW or hardware on a chosen output port.
Ableton Link
Choose sync source Ableton Link in ⚙ MIDI to join a Link session. Unlike MIDI Clock's master/slave split, Link is peer-to-peer: any participant can change the session tempo, and everyone follows. Kandecksky follows session tempo and start/stop, and proposes its own BPM edits, tap tempo, and transport changes back to the session. There is nothing to set up; Link peers on the same network find each other on their own.
Clip grid
Launching
- Click a loaded cell to queue it. It shows amber while queued, then green when playing. Clicking a playing cell queues a stop — red until the boundary.
- Scene launch — the button at the right end of a row fires every loaded clip in that row at once.
- Clip-stop — each track has a stop button beneath the grid; the transport's ■ STOP stops all tracks.
- One clip per track — launching a clip on a track replaces whatever that track was playing, at the boundary.
Immediate-play gestures
- Slip mode — press and hold a pad (or cell) for 200 ms: the clip plays immediately, bypassing quantize. Releasing leaves it playing.
- Stutter — hold Shift and hold a playing pad: the last ⅛ note repeats in sync for as long as you hold. Release to continue normally.
Loop mode, badges & colors
- Cells are loops (
∞badge) or one-shots (1badge) — toggle in the right-click menu. - A BPM badge appears when a clip is tempo-synced; a
teal key badge shows the detected musical key; a
pitch badge (e.g.
+2st) shows transposition. - Set color… in the right-click menu assigns a cell color, shown as the cell's left border and mirrored on the pad LED where the controller supports it (APC20: red / green / amber).
- Follow actions — a one-shot can automatically trigger the next clip, a random clip, or loop back when it ends (set in the waveform editor).
- Hot-swap — drop a new file on a playing cell: it preloads in the background and swaps in at the next bar without interrupting playback.
Right-click menu
Load audio…, loop/one-shot toggle, Set clip BPM and Sync to Global BPM, Auto-trim silence, Export clip…, Set color…, and Clear clip.
Waveform editor
Double-click any loaded cell to open its editor. All edits apply in real time — most take effect at the next loop pass or relaunch.
| Control | Range | Notes |
|---|---|---|
| Trim in / out | anywhere in the file | Drag the handles on the waveform, or type exact seconds. |
| Cue points | named markers | Set named positions inside the clip; markers draw on the waveform. The active cue overrides trim start on launch. |
| Clip BPM | free entry | Tag the clip's native tempo. When synced, the engine time-stretches it to the master BPM — pitch preserved. |
| Pitch | −24 … +24 st | Semitone transposition, independent of tempo. The editor shows the detected key and what it becomes as you drag. |
| Reverse | on/off | Plays the sample backwards; composable with pitch and BPM sync. |
| Crossfade loop | 0–500 ms | Blends the loop's tail into its head so the loop point doesn't click. |
| Attack / Release | 0–5000 ms | Per-clip envelope applied in the engine. |
| Clip gain | −24 … +12 dB | Per-clip gain staging before the track fader. |
| Follow action | None / Next / Random / Loop back | What happens when a one-shot ends. |
| LFO | see below | Per-clip modulation, synced to the clock. |
Per-clip LFO
Enable the LFO to modulate volume or pitch with a sine or triangle wave. Rate is tempo-synced, from ¼ bar to 4 bars, and depth runs 0–1.
Plantilpunkt — the granular track
The first column is not a clip track: it is a permanent granular instrument that plays one sample as a cloud of short, overlapping grains. It's what you reach for when you want a spectral freeze, an endless texture pad, or a rhythm warped into something else entirely. Drop a sample on its drop a sample zone (or drag from the library), then press its ▶ PLAY.
| Knob | Range | What it does |
|---|---|---|
| POS | 0–100% | Read position in the sample. |
| SIZE | 5–500 ms | Grain length. |
| DENS | 1–32 | Simultaneous grains. Output is normalized by density, so high counts don't clip. |
| SPRY | 1–500 ms | Random scatter of each grain's start around POS. |
| P.SC | 0–12 st | Random per-grain pitch scatter. |
| RATE | −2× … +2× | Scan speed: the position cursor traverses the sample; negative scans in reverse; 0 holds still. |
- FREEZE locks the position cursor — hold any instant of the sample as an infinite pad.
- Scan Bars (Off / 1 / 2 / 4 / 8 bars) tempo-syncs the scan: the cursor covers the whole sample in exactly that many bars at the current BPM, and keeps up when the BPM changes.
- Each grain is shaped by a Hann envelope, so the output stays click-free whatever the settings.
- The granular voice runs through the track's full FX chain and fader, and all of its parameters are MIDI Learn targets.
Mixer & FX
Levels
- Per-track volume faders with peak VU meters (instant attack, ~300 ms decay).
- MAIN — master fader.
- LIM — master brickwall limiter at −1 dBFS. Leave it on for live sets.
Per-track FX chain
Open with the FX button on a track header. Signal flows EQ → compressor → delay → reverb:
| Effect | Parameters |
|---|---|
| 3-band EQ | Lo shelf 200 Hz · mid peak 1 kHz (Q 0.7) · hi shelf 6 kHz. |
| Compressor | Threshold, ratio, attack, release, makeup gain. |
| Delay | Time (up to 4 s, BPM-synced divisions available), feedback, wet. |
| Reverb | Freeverb — wet, room size, damping. |
Audio output & routing
Kandecksky owns its own audio device via the native engine — it does not play through the browser layer. Open OUTPUT on the transport bar to manage it:
- Device picker — choose any output device and click
Connect;
↻rescans. The status line shows the connected device, sample rate, and channel count. - Per-track direct outs — on a multichannel device, route individual tracks to their own channel pairs so a DAW can record stems instead of just the stereo mix. Reset to Default Routing puts everything back on the main pair.
Recording & export
- ⏺ Bounce — captures the master mix while the clock runs; when you stop, it saves a WAV wherever you choose.
- RES (resample) — records the live master output straight back into a grid cell, in real time. Sample the mix, then play it as a clip.
- Export clip… — right-click a cell to save its audio out as WAV.
Generative engine
Toggle with GEN or G. A per-track control strip appears below the faders; each track gets a trigger mode plus timing and probability shaping. Generative triggers bypass launch quantize — they land exactly on their scheduled step.
Trigger modes
| Mode | Behavior |
|---|---|
| Random | Pick a random loaded clip each trigger. |
| Rotate | Cycle through loaded clips in order. |
| Euclidean | Björklund rhythm — N pulses over M steps, with a phase offset. |
| Markov | Weighted next-clip choice with configurable memory. |
| Step sequencer | 16-step grid — left-click toggles a step, right-click sets that step's clip target. |
Per-track shaping
Division (1/16 → 2 bars) · clock multiply/divide (÷4 → ×4) · probability · swing (0–100%) · humanize (±ms) · ratchet (%) · euclidean phase · step condition (always / every 2–4 / odd / even) · density envelope (ramp probability from A→B over N bars).
Evolving patterns
- Call & response — pair two tracks: when A fires, B is muted for that beat, and vice versa.
- Pattern mutation — euclidean N/K drift toward target values one step per bar.
- Cellular automata — a 1-D ring CA rule evolves the 16-step pattern every bar.
Performance tools
Performance macros — MACRO
Map a single MIDI CC to several parameters at once: track volumes, FX sends, grain controls, each with its own range. A spare knob on your controller is the obvious candidate. Build macros in the MACRO modal; they persist across sessions.
Set list mode — SETS
Queue multiple saved set files and step through them with Next ▶ / ◀ Prev — or from hardware via a MIDI Learn target. The list survives restarts.
Stutter & slip
Covered in Clip grid: Shift+hold a playing pad repeats the last ⅛ note; holding a pad 200 ms plays it immediately without quantize.
MIDI & controllers
Kandecksky is not tied to one piece of hardware. A controller profile describes a device's factory pad/CC layout; MIDI Learn overrides sit on top of whichever profile is active and always win. Between the two, any common MIDI controller can drive the app.
Connecting
Open ⚙ MIDI, pick the MIDI input and output (the output is used for LED feedback where the hardware supports it), and choose a Controller Profile. Connection and profile persist — your controller reconnects automatically on every launch.
Controller profiles
| Profile | Use it for |
|---|---|
| Akai APC20 | The APC20's fixed factory layout, including full LED feedback (table below). |
| Generic pad controller | Most pad/grid controllers: pads map chromatically from note 36 (the drum-rack convention), row by row across the 8×5 grid. Volume faders on CC 7 (per channel), master on CC 14, knobs on CC 20–27. Dedicated scene-launch / track-select / stop buttons aren't assumed — bind those with MIDI Learn. |
| None | No factory layout at all: only MIDI Learn mappings (and the mouse/keyboard) reach the grid. Ideal for keyboards, mixers, or any controller whose layout matches neither profile — learn exactly the controls you want. |
APC20 profile layout
| Hardware | Function |
|---|---|
| 8×5 pad bank (notes 0–39) | Clip grid. LEDs mirror state: playing · queued · stopping — or the cell's assigned color when idle. |
| Scene buttons (82–86) | Launch a whole row. |
| Track faders (CC 7, ch 1–5) | Track volumes. |
| Master fader (CC 14) | Master volume. |
| Track select (64–68) | Track selection. |
| Clip stop (48–52) | Per-track stop. |
| Shift (98) | Stutter modifier and layout overrides. |
| Device knobs (CC 16–23) | Free — ideal for MIDI Learn and macros. |
MIDI Learn
There are 35 learnable targets, covering every control in the app: transport, quantize cycling, all grain parameters, master and track volumes, BPM, set-list advance, layout overrides. In ⚙ MIDI, choose a target, click Learn, move your hardware control. Learned mappings beat the active profile's layout, save immediately, and keep working if you later switch profiles.
MIDI out
- Note out on clip fire — enable in ⚙ MIDI, then set each track's channel and note via the track's MIDI button. Notes go out on the dedicated Note Out Port.
- Virtual port — by default notes emit on a virtual port named Kandecksky Notes that appears system-wide (macOS / Linux). On Windows, install loopMIDI and select it instead.
- MIDI Clock Out — Kandecksky as tempo master for a DAW or hardware (24 PPQN + START/STOP on a chosen port).
OSC & DAW integration
Receiving (DAW → Kandecksky)
With sync source DAW OSC, Kandecksky listens on UDP
(default port 9000) for tempo and play/stop from the DAW —
the sync badge reads OSC and the master clock
follows.
Sending (Kandecksky → host)
Enable OSC Send in ⚙ MIDI (default target
127.0.0.1:8000). On every clip launch and stop Kandecksky
fires:
/clip/play i i s— track, clip, name/clip/stop i i— track, clip
Use these to drive visuals, lighting, or DAW actions from your performance.
Getting audio into a DAW
See Audio output & routing — pick a virtual multichannel device and use per-track direct outs for stems.
Sets, set lists & persistence
- SAVE / LOAD — a set is the whole session: every cell's file reference and edits, Plantilpunkt state, mixer and FX settings. Saved as a JSON file wherever you choose.
- Set lists — queue several sets and step through them live (Performance tools).
- Preferences — MIDI connections, learned mappings,
macros, skin, UI zoom, OSC config, and the library root all persist
automatically in
prefs.json; no save needed.
Palettes & display
- PALETTE cycles the five looks: cobalt (default), vermillion, cadmium, canvas (light), and dada (randomized — Shift-click re-rolls it). Palettes only recolor the decoration: green/amber/red clip states always mean the same thing, and text stays readable in all five.
- UI zoom — Ctrl+= / Ctrl+− scale the whole interface 70–200% (crisp relayout, not stretching); Ctrl+0 resets to the 115% default. On macOS use ⌘.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Space | Start clock / play |
| Shift+Space | Stop all |
| T | Tap tempo |
| G | Toggle generative mode |
| F1 | Open this user guide |
| Ctrl+= / − / 0 | UI zoom in / out / reset (⌘ on macOS) |
| Double-click cell | Open waveform editor |
| Right-click cell | Clip menu |
| Hold cell/pad (200 ms) | Slip mode — play immediately |
| Shift+hold playing pad | Stutter (⅛-note repeat) |
| Double-click track header | Rename track |
Troubleshooting
No sound
- Open OUTPUT and confirm the right device is connected — Kandecksky plays through its own stream, not the system default the browser would use.
- Check the cell is actually playing (green), the track fader and MAIN are up, and the clock is running for quantized launches.
- If the engine failed to start, the status line in OUTPUT reads Not connected — pick a device and click Connect.
Recording captures silence (macOS)
macOS gates audio input behind the microphone permission. If you denied the prompt, recording proceeds but captures silence. Grant access in System Settings → Privacy & Security → Microphone, then relaunch.
"App can't be opened" (macOS)
Development builds are unsigned, so Gatekeeper blocks a plain double-click. Right-click the app → Open → Open. One time only.
Controller not responding
- Re-select its ports in ⚙ MIDI — if it was unplugged, rescan by reopening the modal.
- Check the Controller Profile: if pads do nothing on a non-APC20 device, try Generic pad controller, or None plus MIDI Learn for the controls you need.
- Make sure no other app has claimed the controller exclusively.
- Pads light but don't match state? Select the correct MIDI output — LEDs are driven over the output port.
No virtual MIDI port (Windows)
Windows has no native virtual MIDI ports. Install loopMIDI and choose it as the Note Out Port.
Clicks when changing BPM
Tempo-synced clips restart from their loop start with a new stretch when the BPM changes; a brief click at that boundary is expected behavior.