KLANG
v1.1.0A node-graph editor for CDP8 sound processing, built as an Ableton Live extension and inspired by SoundThread
Unverified listing. This repo is new or has little community activity and the developer has not claimed it. Extensions run code inside Live — read the source, check the author, and only install things you trust.
KLANG
A node-graph editor for CDP8 (Composers Desktop Project) sound processing, built as an Ableton Live extension and inspired by SoundThread. Right-click an Arrangement clip or time selection, build a chain of CDP processes as a node graph, and send the result back into Live as a new audio clip.
The 232 CDP command-line binaries are bundled in resources/cdp-bin/ — no separate CDP install needed. See Licensing below.
Setup (building from source)
This repo does not include Ableton's Extensions SDK/CLI packages (vendor/, gitignored) — Ableton's SDK license forbids redistributing the SDK itself outside your own application, so every developer needs their own copy:
- Download the Extensions SDK beta from https://ableton.github.io/extensions-sdk/
- Copy
ableton-extensions-sdk-*.tgzandableton-extensions-cli-*.tgzfrom the download into avendor/folder at the repo root. - Copy
.env.exampleto.envand pointEXTENSION_HOST_PATHat your local Ableton Live install (see comments in the file). npm install, thennpm startto build and run in Live's Extension Host, ornpm run packageto produce a.ablx.
If you just want to use KLANG rather than build it, grab the prebuilt .ablx from this repo's Releases instead — the CDP binaries are already bundled in it, only the SDK/CLI build tooling is excluded from source control.
Usage
- In Live's Arrangement View, select a clip or a time range on an audio track.
- Right-click → Open in KLANG.
- A window opens with the selection's audio already loaded as a source node.
- Click + CDP Process to add a node, drag from an output port (right) to an input port (left) to connect nodes. Ports are colour-coded by format — blue for
.wav, purple for.ana(PVOC frequency-domain data) — and won't connect if the formats don't match. - Click a node to edit its parameters, then Run to process it (and everything upstream of it).
- Once you have a result you like, click Send to Live on that node — it's imported and placed right after your original clip/selection on the same track. The original is never overwritten.
- Save Thread / Load Thread persist a node graph (not the audio) for reuse.
- Close the window with ✕ Close Window — if Clean up on close is checked (default), all audio/analysis files generated during the session are deleted; the graph itself isn't affected.
KLANG only registers for the Arrangement View (a clip and a time-selection context menu action) — it does not appear in Session View / clip slots.
An Audio Input node can also load a file directly (Choose audio file…, or paste/drop a path), so you can use KLANG without an Arrangement selection.
Automating a parameter: parameters CDP can sweep over time show a ⟳ button. Turn it on and the value becomes a list of time/value points — 0:1 2.5:40 5:4 — which CDP interpolates between across the sound. The ✎ button draws that curve instead of typing it.
Supported input formats: uncompressed audio only — .wav, .aif, .aiff, .aifc, .amb. CDP's soundfile library cannot read MP3, FLAC, OGG or M4A; convert those first. Audio is normalised to 32-bit float before frequency-domain analysis (see the note in the changelog), so processed output comes back as 32-bit float WAV.
Where's the cache?
KLANG writes generated audio/analysis files to Ableton's per-extension temp directory, and saved threads + the process manifest to its per-extension storage directory:
- Temp (generated audio, cleared automatically):
$TMPDIR/Ableton Extensions/cipp0.klang/($TMPDIRis macOS's per-user temp folder, typically/var/folders/.../T/; runecho $TMPDIRin a terminal to see yours) - Storage (saved threads, manifest):
~/Library/Application Support/Ableton/Extensions Data/cipp0.klang/
With Clean up on close checked (the default), the temp folder is emptied every time you close the KLANG window, so it shouldn't grow unbounded. If you ever want to clear it by hand (e.g. after leaving the window open for a long session), it's safe to delete the contents of the temp path above — nothing there is needed once the window is closed. Never delete the storage path's threads/ folder unless you want to lose your saved graphs.
Building / running this extension
npm start # build + run in Live's Extension Host
npm run build # production bundle of src/extension.ts
npm run build:dev # dev bundle (sourcemaps, not minified)
npm run package # build for production + create a .ablx archive
The path to Live's Extension Host is stored in .env as EXTENSION_HOST_PATH.
Codesigning the bundled CDP binaries
The bundled binaries in resources/cdp-bin/ are unsigned. macOS Gatekeeper normally blocks unsigned binaries downloaded from the internet, so on first activation the extension runs a best-effort xattr -d com.apple.quarantine pass over resources/cdp-bin/* — this is usually enough for local/personal use, since files installed as part of a packaged extension rather than downloaded directly don't always carry the quarantine flag the same way a direct download does.
If you hit a Gatekeeper block anyway, or want to distribute this extension to other people, sign the binaries properly instead of relying on the quarantine-removal workaround:
# Ad-hoc signing (no Developer ID needed, fixes local Gatekeeper blocks):
find resources/cdp-bin -type f -perm +111 -exec codesign --force --sign - {} \;
# Proper signing for distribution (requires an Apple Developer ID certificate):
find resources/cdp-bin -type f -perm +111 -exec codesign --force --timestamp \
--options runtime --sign "Developer ID Application: Your Name (TEAMID)" {} \;
# Verify a binary is signed:
codesign -dv --verbose=4 resources/cdp-bin/pvoc
If you'd rather build CDP from source than use the bundled binaries (e.g. to get a signed build, or a newer CDP release), the source is at ComposersDesktop/CDP8; build per its own instructions and drop the resulting executables into resources/cdp-bin/, keeping the same filenames referenced in resources/manifest.json.
CDP tools used
53 CDP executables, invoked as separate processes (never linked into this extension), power the 156 processes in resources/manifest.json:
| Executable | Used for |
|---|---|
blur | Spectral blur, average, suppress, chorus, drunk walk, noise, random thinning |
bounce | Bouncing Ball — accelerating, decaying repeats |
cascade | Echoed/cascading repeats |
distort | Waveset reverse, pitch warp |
distortt | Waveset repeat |
distrep | Wavecycle repeat |
distshift | Half-wavecycle shift |
distwarp | Progressive sample warp |
extend | Zigzag, loop, drunk walk, repeat segments |
filter | Low/high-pass filter |
focus | Accumulate, stepped freeze, exaggerate, focus, fold |
gate | Noise gate |
grain | Time warp, reverse grains |
hilite | Highpass filter, trace (retain loudest partials) |
housekeep | Mono/stereo channel splitting (internal, for stereo support) |
hover | Zigzag read at a frequency |
interlx | Stereo interleave (internal, for stereo support) |
modify | Speed change, stack (layered transpositions) |
morph | Spectral morph between two sounds |
multiosc | FM synthesis (4-operator) |
newdelay | Pitched delay |
pitch | Pitch transpose, pitch shift, tune spectrum to a frequency |
pvoc | PVOC analysis / resynthesis (frequency domain in/out) |
quirk | Power-curve distortion |
reverb / rmverb | Reverb |
scramble | Waveset reorder |
spec | Freeze (magnify a window), trim (cut) |
specav | Spectral average |
specfnu | Formant operations: narrow, squeeze, invert, rotate, negative, move/shift, randomise partials, transpose under formants |
specnu | Spectral squeeze, randomise window order |
spike | Envelope-to-peak shaping |
spin | Stereo image rotation |
splinter | Shrinking waveset repeats |
strange | Frequency shift, glissandi (Shepard / inharmonic / self), waver, spectral invert |
stretch | Time stretch, spectral stretch above/below a split point |
subtract | Subtract one file from another |
synspline | Random-overtone synthesis |
synth | Basic waveform / noise synthesis |
tremenv / tremolo | Tremolo (envelope-following / fixed-rate) |
Changelog
See CHANGELOG.md for what's been added and fixed.
Licensing
Three different licenses apply to different parts of this project:
- This project's own code (
src/,resources/ui/,resources/manifest.json) — MIT, see LICENSE. - The bundled CDP binaries (
resources/cdp-bin/) — unmodified CDP Release 8 command-line tools, © the Composers Desktop Project (Trevor Wishart, Richard Dobson, et al.), licensed under LGPL 2.1. Seeresources/cdp-bin/LICENSE-LGPL-2.1.txtandresources/cdp-bin/NOTICE.md. They're invoked as separate OS processes (subprocess calls), not linked into this extension's code, and are redistributed here verbatim. Source: https://github.com/ComposersDesktop/CDP8 - Ableton's Extensions SDK/CLI (used to build this project, not included in this repo) — © Ableton AG, under Ableton's own Extensions SDK License, which explicitly forbids redistributing the SDK itself outside of an application built with it. That's why
vendor/*.tgzis gitignored rather than committed — see Setup for how to get your own copy. This restriction applies only to the SDK/CLI tooling, not to this project's own source code or to the CDP binaries above.
Built by cipp0_ — Francesco Casanova.
Rate this extension
One rating per account; you can change it any time.
Comments
No comments yet.