Khorlo is a plucked-string synthesiser built around a standing cylinder. Eight strings stand on its surface, each at its own angle. Eight pluckers encircle it as fixed hoops, each at its own height. Nothing about the cylinder turns and you never spin anything by hand: each plucker has a contact point that travels around the cylinder at a rate you set, and every time that point crosses a string, it plucks it.
You play it from a keyboard. A held note sets the pitch and starts that note's own set of pluckers running; let go and they wind down. The rhythm isn't programmed — it falls out of eight rates running against eight string positions, so pluckers at different rates drift apart and meet again on their own cycle.
| Object | What it is |
|---|---|
| String | A real plucked string — a Karplus–Strong delay line with its own pitch, damping and physical character. Its Position is where it stands around the cylinder, which decides when in the loop it can be plucked. There are eight. |
| Plucker | A hoop at a fixed height with one contact point travelling around it. Its Rate is how fast that point goes. There are eight, each free to run at its own rate — which is where the polyrhythms come from. Nothing is programmed; the contact points simply run at different speeds. |
| Exciter | How the string gets grabbed at the moment of contact. Most of the character of a sound comes from here. |
| Voice | One held key. Each voice runs its own eight pluckers and owns its own eight strings, so a busy note can never cut off another note you're still holding. |
A plucker at 2 Hz against eight evenly spread strings gives you sixteen plucks a second. Move one string's Position and you've moved one note in the bar. Give a second plucker a different rate and the two patterns drift apart and come back together on their own cycle.
It isn't decoration. The strings really do move with what's inside the delay line, so you can mute the audio and still see what each one is doing. It only animates while a note is sounding, and it shows the loudest voice on each string. You can also edit straight on it:
P1 has no Offset and S1 has no Position, so those two aren't draggable in those directions — they're the references everything else is placed against. All four handles also accept MOD cables.
Left-hand column. Eight cards, shown four at a time — the P1–P4 / P5–P8 tabs switch banks. Click a card's numbered tab to switch that plucker on or off; Shift-click to solo it.
| Control | What it does |
|---|---|
| Rate | Revolutions per second — how fast the contact point travels, and so how often it plucks. The slider runs 0.05 Hz to 64 Hz. Modulation can drive it far past the top of the slider, well into the audio range. |
| Height | Where on the string contact is made, and it changes three things at once: the brightness of the excitation, where along the string it happens, and how heavily that string's highs are damped afterwards. High is bright and thin, low is dull and round. |
| Strength | How hard it grabs. This is force and level: it opens the exciter's filter, drives the string's saturator, sets the bow's target amplitude, and scales the amplitude of each pluck. |
| Offset | Where this plucker's contact point starts around the cylinder — its phase against the others. P1 doesn't have one; it's the reference. |
| Attack | Softens the leading edge of the excitation. In the expanded half. |
The icon on the Rate row is a toggle. In loop the contact point runs for as long as you hold the note. In once it travels exactly one revolution and parks — one pass over the strings per note, which turns a plucker into a one-shot arpeggio.
The small SNC tab beside each card cycles the rate mode. P1 toggles between two (free and tempo); P2–P8 cycle three (free, tempo, LNK).
Four shapes across the top of every plucker card. They make more difference to the character of a sound than anything else here:
| Shape | Character |
|---|---|
| Impulse | The sharpest possible contact. Bright, immediate, most harmonics. |
| Half-sine | Rounder and warmer — a soft mallet rather than a pick. |
| Exp | Fast attack with a tail that decays into the string. Plucky, slightly vocal. |
| Saw | Asymmetric and buzzy. The most aggressive of the four. |
The pad in the expanded half is an XY control: drag right for Contact Width — a wider contact rolls off the top end, like using a fatter pick — and up for Hardness. Right-drag anywhere in the pad for Noise, which adds grit to the contact without changing the string. The three slim sliders framing the pad are the same three values if you want to set them precisely.
Right-hand column, same layout mirrored, same tab and bank behaviour.
| Control | What it does |
|---|---|
| Pitch | Semitones, ±24, in whole steps. Every string is an offset from the key you played — including S1. There's no "base" string; the keyboard is the base, so the whole set transposes as you play. |
| Detune | A finer offset, ±1 semitone, added to Pitch. Small amounts across several strings are what turn a single note into an ensemble. |
| Pan | Stereo position. Every string starts centred, so spread them yourself when you want width. |
| Position | Where the string stands around the cylinder, and so when in the loop it can be plucked. This is the rhythm control. S1 is the reference and doesn't have one. |
| Decay | How long the string rings, up to about three seconds. It also sets how long the contact glows on the 3D view, so you can see the setting as well as hear it. |
| Stiffness | Real strings aren't perfectly flexible, so their overtones stretch sharp. A little gives you piano and metal. A lot gives you bell. |
| Brightness | How fast the top end dies away compared to the fundamental. Low sounds like felt or wool, high like steel. |
| Tension | Pushes the string into saturation, so hard contacts bloom and bite the way an overdriven string does. It also bends the pitch: the harder the string is driven, the shorter it runs, so at high settings a loud note sags sharp as it decays. |
| Coupling | Gives the string a second body — a duplicate delay line alongside the first, cross-fed at the bridge. At 0 you have one plain string; turn it up and you get a doubled, shimmering one. It roughly doubles that string's CPU cost. |
| Spread | How far that second body is detuned from the first, up to a semitone. It's what the two bodies beat against each other with — and it does nothing at all until Coupling is above zero. |
Every slider, knob and rail in Khorlo works the same way. Learn this once and it applies everywhere.
| Gesture | Result |
|---|---|
| Drag | Change the value. |
| Shift-drag on a P/S slider | Move that property on all eight pluckers or strings at once, keeping their relative offsets. |
| Shift-drag elsewhere | Fine adjust — on the AMP and FILTER knobs, the exciter pad, the 3D handles, and arrow-key nudges. |
| Alt-drag | Snap Position and Offset to eighths. |
| Double-click | Reset. Middle for most things; the exciter sliders go to their neutral value instead. |
| Right-click | Type an exact value. |
| Arrow keys | Nudge the last control you touched. Hold Shift for fine. |
| ⌘ / Ctrl-drag | On a modulated control, adjust the modulation depth instead of the value. |
| Mouse wheel | On a tempo-synced or linked Rate, step through the divisions or ratios. |
The sliders inside a card cover one property each. The tabs cover the thing as a whole, and they all answer to a right-click.
| Right-click | What you get |
|---|---|
| A numbered tab (P3, S5 …) | Turn on/off, Solo, Copy, Paste, Paste to all, Lock, Randomise, Reset — for that one plucker or string. |
| A bank tab (P1–P4, S5–S8) | The same ideas across the whole column: All on, All off, Only the first, Spread evenly, Randomise all, Unlock all, Reset all. |
| A MOD tab | Copy, Paste, Clear destinations, Reset — for that modulator. |
Locking a card to another keeps them matched from then on. Change either one and the other follows, so a locked pair behaves like one control with two handles. Right-click a numbered tab and choose Lock to…; a padlock appears on the tab, and hovering it tells you which card this one is following.
What doesn't travel is what makes each card its own:
A locked card can't be locked to, so links stay one level deep and there's no chain to untangle. Unlock is in the same menu, and Unlock all on the bank tab clears the column.
Eight modulators sit along the bottom. Six are shapes you draw. MOD7 is fed by the four macro rails down the sides of the window, and MOD8 by how you play — note, velocity, mod wheel, pitch wheel, aftertouch.
There's no destination list to search through. Press on a MOD tab and drag it onto the control you want it to move. Anything you can hit lights up as you drag; let go and the routing is made. It works on the P and S sliders, the exciter pad, the AMP and FILTER knobs, every effect knob, the master Release, and the four handles on the 3D view.
Each MOD holds up to six destinations, each with its own amount and polarity: + pushes up from where you set the control, − pulls down — the exact mirror — and ± swings both ways around it. To remove a routing, drag its amount to zero or clear the slot from the MOD's destination list.
The big display is the shape, and you draw it directly: drag a node to move it, drag between two nodes to bend that segment, double-click to add a node, Alt-click a curve to straighten it. The mode menu decides how the shape gets used:
| Trigger | Runs once per note, at the shape's own length. |
| Loop | Free-running LFO — cycles continuously, tempo-syncable. |
| Envelope | Holds at a node while the key is down, then plays the rest of the shape when you let go. Right-click a node to make it the sustain point. |
| One-shot | Plays through once and stops, ignoring key-up. |
The shape menu has the usual starting points — Ramp, Saw, Triangle, Sine, Square, Pulse, Exp, ADSR — and you can save your own, which then sit alongside them.
The four rails M1–M4 at the edges of the window are plain 0–1 controls that do nothing on their own. They feed MOD7, so a rail does whatever you route it to. One knob for a whole rig, if you want it.
Some destinations act on all eight at once rather than on one card: Plucker Spread and String Spread fan the whole set out from their current positions, and Plucker Random and String Random scatter them. Routing a MOD to one of those is the only way to modulate the rhythm as a shape rather than one note in it.
A MOD can also target another MOD's amounts or its rate — that's how you get an envelope that opens up an LFO, or one macro that deepens everything at once. The six numbered rings and the rate readout are drop targets like anything else.
Bottom right, two tabs.
| Direct / FX Out | A dry/wet split around the whole effects chain, not two output stages. Direct is the untouched signal tapped before the chain; FX Out is the chain's output. The defaults — Direct off, FX Out full — give you a plain insert. |
| Attack / Release | The master amplitude envelope for every voice. |
| Vel | How much key velocity scales the contact. At zero, playing hard changes nothing. |
| Glide | Portamento. It retunes the strings while they ring, so a legato slide is a real glissando rather than a new attack. |
| Build | Not an amp envelope — it sets how quickly a bowed string swells to full once it's being driven fast enough to bow. Instant at zero, a slow swell at one. It does nothing at ordinary plucking rates. |
| Voices | How many keys can sound at once, 1 to 8. Each voice owns its own set of strings. The mode menu is Poly, Retrig or Legato. |
The FILTER tab is one filter per voice, so each note is shaped on its own instead of the whole mix at once. Three models (Clean, DMF, Hybrid), three shapes (LP, HP, BP), 12 or 24 dB. Cutoff and Resonance take modulation. There's no dedicated filter envelope because any MOD can be one.
The EFFECTS tab is the output chain: Chorus, Compressor, Delay, Saturation, Equalizer, Filter, Flanger, Phaser and Reverb. Drag a strip to reorder it, click its dot to bypass, and every knob takes modulation.
The PRESETS tab browses by folder and tag, and the arrows in the top bar step through them without leaving the instrument. SAVE stores what you have now. INIT puts every panel back to its startup defaults, which is a clean place to build from. A preset carries the whole instrument, polyphony included, since a dense patch may need more voices than a sparse one.
| a w s e d … | Play notes (an octave from C) |
| Space | Hold / release a test note |
| 1 – 6 | Select plucker |
| Shift + 1 – 6 | Select string |
| [ ] | Previous / next MOD |
| Arrows | Nudge last control |
| Shift + arrows | Fine nudge |
| ⌘Z / ⌘⇧Z | Undo / redo |
| Esc | Close menu or clear selection |
| No sound at all | Nothing sounds unless a note is held — play one first. Then check that at least one plucker and one string are switched on, since a plucker with nothing to reach makes no sound. Then AMP › FX Out. |
| It won't stop ringing | You're in the bowed regime: the plucker is fast enough that the string is being sustained rather than plucked. Lower Rate, Strength or Brightness, or raise Build so it takes longer to swell. |
| A MOD does nothing | Its amount is probably still at zero, or it's in Envelope mode with no note held. The line in the destination's gutter shows you the reach. |
| Spread does nothing | It only acts on the second body, which doesn't exist until Coupling is above zero. |
| Pitch drifts when I play hard | That's Tension — it shortens the string as it's driven. Lower it if you want stable tuning. |
| Muddy on chords | Turn Coupling down, spread the Pan, or shorten Decay. Coupling doubles every string's delay lines, so it thickens quickly. |
| CPU too high | Lower the voice count in AMP, turn Coupling down, and turn on Performance mode in the ☰ menu, which freezes the animated background and lightens the shading. |