A chord and progression machine. The whole idea fits in one sentence: you don't play the notes of a chord, you describe it — a root, a type, some tensions — and the machine takes it from there, all the way to your synths or your DAW.
The screen is laid out like a hardware front panel. Six zones, always in the same place:
The app header carries an FR / EN switch that flips the whole interface: labels, dropdowns, buttons, tooltips and messages. The language is detected at startup from your browser and stored in .json sessions. Musical vocabulary — chord names, types, tensions, performance modes — stays the same in both languages.
Three moves: pick a type, press a root, read the LCD. The chord sounds right away.
| Button | Chord | Intervals | Character |
|---|---|---|---|
| DIM | diminished | 1 · ♭3 · ♭5 | tense, passing |
| MIN | minor | 1 · ♭3 · 5 | dark, melancholic |
| MAJ | major | 1 · 3 · 5 | stable, bright |
| AUG | augmented | 1 · 3 · ♯5 | unsettled, strange |
| SUS2 | suspended 2nd | 1 · 2 · 5 | open, airy |
| SUS4 | suspended 4th | 1 · 4 · 5 | waiting to resolve |
| 5 | power chord | 1 · 5 | neutral, heavy |
| m♭6 | minor flat 6th | 1 · ♭3 · ♭6 | dramatic, cinematic |
The two lower rows stack freely on top of the type: several LEDs on at once. Tensions add notes; alterations change or remove notes that are already there.
| Combination | Result | Why |
|---|---|---|
| DIM + 6 | Cdim7 | a 6th on a diminished triad is the diminished 7th |
| DIM + m7 | Cø7 | the half-diminished, backbone of the minor ii–V |
| MAJ + m7 + ♯9 | C7(♯9) | the “Hendrix” chord |
| type + no3 | open chord | neither major nor minor — perfect for ambient |
| m7 + M7 | WTF? | the LCD warns you. You do you. |
The same chord can be tight, open, low or airy. Three independent tools stack up, in this order: rotation → drop → slash bass.
Each step rotates the chord: at +1 the lowest note jumps up an octave; at −1 the highest note drops down. Here is Cmaj7:
How to drive it: drag vertically on the knob, use the − 0 + buttons or the ←→ arrows, double-click to return to 0. The same chord at +3 and at −2 tells two different stories.
Applied after the rotation, these spread the voices the way an arranger would:
| Mode | Effect | Use |
|---|---|---|
| close | close position (no change) | default |
| drop 2 | 2nd voice from the top → −1 oct | the jazz standard |
| drop 3 | 3rd voice from the top → −1 oct | wide gaps, guitar-like |
| drop 2+4 | two voices dropped | very open, cinematic |
| spread | every other voice → +1 oct | wide pads, ambient |
The BASS button adds a held note (−1 or −2 octaves) on its own MIDI channel. The bass / selector picks which chord tone it plays: root, third, fifth or seventh — the LCD then reads C/E. Detection follows the chord: minor third on a minor chord, diminished fifth on a ♭5. If the chord has no seventh, asking for one falls back to the root.
Turn on KEY, choose a tonic and one of the eight scales. Every key then produces the diatonic chord for its degree — you cannot fall out of the key.
The 6 m7 M7 9 11 13 tensions stay active and are harmonised within the scale: the 7th on G in C major gives a real G7 (with a natural F). The asterisk in the name (G7*) marks that diatonic harmonisation.
Type and tensions. By default the quality comes from the degree (auto mode). You can pin a type button to force a quality on the played root, then click again to return to auto; the root always stays in key. All twelve tensions and alterations (including ♭9, ♯9, ♯11, ♭5, ♯5) work in both cases.
Play a chord, then hit ADD (or space): it becomes a slot in the sequence. Anatomy of a slot:
+B when the bass is on.| Method | Action | When |
|---|---|---|
| By hand | play + ADD | you know where you are going |
| Presets | pick a progression + load | instant starting point in your key (I–V–vi–IV, ii–V–I, circle of fifths…) |
| ✦ suggest | one click = one proposed chord | let the machine drift using functional harmony, take over when it gets interesting |
The same progression, voiced two ways:
VL AUTO (in the transport) applies this on every ADD; ⇄ voice-leading re-voices the whole existing progression in one go. Try it right after loading a preset — you hear the difference immediately.
PLAY runs the progression at the displayed BPM, LOOP repeats it. The perf selector changes how each chord is delivered — everywhere: auditioning, live MIDI and .mid export.
| Mode | Output |
|---|---|
| block | chord played as a block |
| strum ↑ / ↓ | notes rolled upwards / downwards, guitar style |
| harp | fast sweep (glissando) |
| arp ↑ / ↓ / ↕ / rnd | arpeggio at the speed set by rate (1/8 · 1/16 · 1/32) |
HUM humanises velocity (±10) and timing (±15 ms) — strums and arpeggios breathe.
Every chord you click, every slot you audition and the full playback go out over MIDI on two separate channels — chords and bass drive two different machines at once.
Getting going: ① plug the interface in before opening the page (or reload), ② allow the MIDI access the browser asks for, ③ select the device in the MIDI out (live) panel. The LCD reads MIDI ON.
file://, audio and export still work but live MIDI output does not — which is why the app is hosted at chordlab.ghostinthemachine.fr. Safari does not support Web MIDI: use Chrome, Edge or Firefox. Stuck note on a machine? STOP sends All Notes Off across all 16 channels.| Export option | Choice |
|---|---|
| tracks | chords + bass (2 tracks, each on its own channel) · or chords only |
| render perf | yes: strums and arpeggios are written note by note into the file · no: block chords (better if you plan to arpeggiate later in the DAW or tracker) |
Alongside the .mid, the ↓ tracker (.txt) button produces a text file for hand transcription onto a tracker (Polyend Tracker Mini and similar): a pattern grid where each note takes a track (T1..Tn low→high) plus a bass column, with OFF to stop and ... to hold, followed by a reference section giving the notes and their MIDI numbers. The tracker resol. selector (1/16, 1/8, 1/4) should match your machine's pattern resolution.
↓ save session writes a .json holding every setting and the full progression; ↑ load restores all of it. Nothing is kept in the browser: the file is the only persistence — version your sessions in Git like any other project file.
The letters follow a piano layout. A QWERTY / AZERTY switch sits under the on-screen keyboard: only two keys differ between the two layouts, but they are C and C sharp, so the right setting makes all the difference. The app picks a layout at startup based on your browser language — change it with one click if needed, and the choice is stored in .json sessions.
| Dawless (hardware session) | DAW / tracker (writing) |
|---|---|
| KEY ON → preset or ✦ suggest → ⇄ voice-leading → live MIDI (Pro-800 + TD-3) → LOOP while you shape the sounds and record to the mixer → save a .json session | KEY OFF, free exploration of colours (types + tensions + drops) → VL AUTO → export .mid with render perf: no → import into the DAW or Tracker Mini → arpeggiation and sound design in the target machine |