ablx.directory

Chord Progression

v1.0.0

Ableton Live 12 extension (Extensions SDK): generate diatonic chord progressions as MIDI clips from Live's current scale

Cesarmanifest author: Cesar MoraNo ratings yet
README · rendered from GitHubView source

Chord Progression

An Ableton Live 12 extension (built on the new Extensions SDK, 1.0.0-beta.0) that generates diatonic chord progressions as MIDI clips. Right‑click an empty Session slot, dial in the feel, preview it in the browser, and write it straight into Live.

The progression is built from Live's current scale — set the root and scale in Live and the chords follow automatically.

Panel

Beta software. The Extensions SDK is not published to npm and requires the Ableton Live 12 beta with Developer Mode enabled.


Features

  • Reads Live's scale. Root note, scale name, scale intervals and tempo come from the current Live Set (song.rootNote, song.scaleIntervals, …). No key picker to keep in sync.
  • Diatonic progressions with a one‑click Variation that cycles musical templates (the default i–VII–iv–v matches the reference design) and a random diatonic mode.
  • Articulation: Block, Strum, Stabs, Syncopated.
  • Arpeggiator (replaces articulation when on) with eight directions: Up, Down, Up‑Down, Down‑Up, Converge, Diverge, Pedal, Random.
  • Voicing: triad (Chord) or seventh (+Tensions), spread over 1–3 octaves.
  • Rhythm: resolution grid (1/4 … 1/32, including triplets), a Rhythmic Pattern groove (Full, Skipped, Gallop, Triplet/tresillo), Gate length, and Swing on off‑beats.
  • Ratchet / Rolls: Off, Soft, Medium, Intense — subdivides fired steps into rapid repeats.
  • Dynamics: Intensity (velocity) and a Humanize toggle that jitters timing and velocity (and sets velocityDeviation on each note).
  • In‑browser preview ("Listen") via the Web Audio API — audition before you commit, without touching Live's audio engine.
  • Generate in Live writes a MIDI clip into the right‑clicked slot, replacing any existing clip, and names it after the key + roman numerals.

Arpeggiator mode (Direction active, Articulation dimmed):

Arpeggiator mode


How it works

ClipSlot right‑click
        │  context menu action
        ▼
extension.ts ──reads──► song.rootNote / scaleIntervals / tempo
        │  injects a LiveContext snapshot into the dialog HTML
        ▼
interface.html (modal webview)
        │  builds chords, renders the panel, previews via Web Audio
        │  user clicks "Generate in Live"
        ▼  postMessage { notes, lengthBeats, clipName }
extension.ts ──► clipSlot.createMidiClip(length); clip.notes = notes
  • The host (src/extension.ts) registers the context‑menu command, snapshots Live's musical context, opens the modal with context.ui.showModalDialog(dataUrl, w, h), and writes the returned notes.
  • The UI (src/interface.html) is a self‑contained webview. All music logic (chord building, note generation, naming) lives here so the preview and the written clip are guaranteed to match. It receives Live's context through a single __LIVE_DATA__ token the host replaces before opening the dialog, and returns its result with the host bridge ({ method: "close_and_send", params: [json] }).

Note model

Generated notes are plain NoteDescription objects:

FieldDriven by
pitchscale degree + voicing + octaves
startTimeresolution grid + swing + humanize jitter
durationgate fraction of the step / bar
velocityintensity (± humanize)
velocityDeviationset when Humanize is on

One chord spans one 4/4 bar; a 4‑chord progression is a 16‑beat clip.


Project layout

chord-progression/
├── manifest.json        # extension metadata (name, entry, API version)
├── package.json         # scripts + SDK/CLI deps (from the local .tgz files)
├── build.ts             # esbuild bundle (inlines .html as text)
├── tsconfig.json
├── .env.example         # copy to .env and set EXTENSION_HOST_PATH
└── src/
    ├── extension.ts     # host side: context menu + clip writing
    ├── interface.html   # webview UI + music engine + Web Audio preview
    └── html.d.ts        # lets TS import the .html as a string

Development

Requirements

  • Node.js >= 24.14.1 (the Extension Host runtime). Build tooling runs on older Node, but match the host version to be safe.

  • Ableton Live 12 beta with Preferences → Extensions → Developer Mode enabled.

  • The SDK and CLI .tgz files from the Ableton Extensions distribution. They are not included in this repo — the Extensions SDK is Ableton beta software distributed via Centercode and is not redistributable. Obtain them from Ableton, then either place this repo next to the two files:

    • ../ableton-extensions-sdk-1.0.0-beta.0.tgz
    • ../ableton-extensions-cli-1.0.0-beta.0.tgz

    …or edit the file: paths in package.json to point at wherever you keep them.

Setup

npm install
cp .env.example .env        # then edit EXTENSION_HOST_PATH for your machine

EXTENSION_HOST_PATH points at Ableton Live (the .app on macOS, the .exe on Windows, an install root, or the ExtensionHostNodeModule.node file directly).

Run in Live

npm start                   # build:dev + extensions-cli run

With Developer Mode on, Live hands the Extension Host to the CLI. Right‑click an empty Session clip slot → Generate Chord Progression….

Other scripts

npm run build               # production bundle (minified)
npm run package             # build a distributable .ablx archive

Customising

  • Progression templates — edit PROGRESSIONS in src/interface.html (0‑based scale degrees). The first entry is the default; Variation cycles the list and ends on a random diatonic progression.
  • Feel constantsRES_BEATS, GATE_FRAC, VELOCITY, SWING_AMT, and SYNC_MASK in the same file tune the rhythmic and dynamic ranges.
  • Bar length / chord countBEATS_PER_CHORD and the template length.
  • Arpeggiator orderingsarpOrder() defines each Direction.

Possible next additions: chord tensions beyond the seventh (9/11/13), per‑step velocity accents, and custom time signatures.


License

This extension's source is released under the MIT License.

The Ableton Extensions SDK and CLI it depends on are not covered by this license and are not included in this repository — they are Ableton beta software with their own terms. Obtain them directly from Ableton.

Rate this extension

One rating per account; you can change it any time.

No ratings yet — be the first

Comments

Sign in to join the discussion.Sign in

No comments yet.