music — live-coding to composition
Atlantis
A webapp called Calypso that spans live-coding, generative music and composition. Incorporates a customisable rules-based generative system for seeding compositional choices from Tarot cards. Works with a backend that runs on the BEAM, where each voice is given its own process and changes to a voice result in recompilation and live loading of just that voice. The system as a whole is integrated with Ableton Link thru a Rust daemon and with modular thru two other daemons - one that directly outputs v/oct CV thru the Expert Sleepers ES9 and another which controls presets and configuration on the FH2. There is also a system of virtual modules (Balistes, Odonus etc) which can be deployed to either the FH2 or ES9.
Sub-projects
-
atlantis-site active
Single-page Halogen site explaining Andrew's code-based music workbench — the umbrella over the live-coding constellation (purerl-tidal, Calypso, Deepstar), the FH-2/ES-9 daemons, tarot-music, modular recipes, and samples. PureScript + Halogen + Inter; static deploy target Cloudflare Pages. Eight-section descent on the homepage covering workbench facets, tools, architecture, rig, libraries, collaborators, and colophon, with hero copy in place. Information architecture lives at music/atlantis-site-planning/ia.md (peer directory). Near-term: graphic touches, screenshots or SVG system diagrams; settle the engine name (Reef / Atoll / TBD).
-
Calypso active
**Live-coding webapp for purerl-tidal.** PureScript Halogen frontend (`:3061`) + HTTPurple Node API (`:3060`), both lazy-spawned via SDI. The composition pane is a real PureScript module (`Calypso.Generated.Session`); the rig is *described* in Studio.purs. **The IDE half of an emerging IDE-for-music** (purerl-tidal #90 is the runtime half). **Two source panes — Composition and Studio — each compile + reload their target file** through near-identical pipelines (POST /session-source for the session, POST /studio-source for the rig declaration). Each runs purs compile, purs-backend-erl --filter, erlc, then `reload-baseline` over WS. ~700ms warm-toolchain. **Diagnostic surface (2026-05-18):** all three error paths now *observable from the UI* rather than from CLI grovelling. - Composition and Studio panes both render raw purs stderr in their error blocks when compile fails — the full JSON envelope (file:line, errorCode, suggestion text) lands in an HH.pre block, not just a generic "purs compile failed" headline. - A buffer-vs-disk divergence logger warns to calypso-api stderr when an incoming fire-typeful is about to clobber on-disk content that the browser was never shown — catches the stale-buffer footgun immediately (with a diff snippet) instead of at-discovery-via-git. - An erlc post-check installed in both pipelines fails loud (rather than silently shipping a stale .beam) if the toolchain reports success without actually updating the output. Tripwire-style: silent under normal operation, named-and-visible when it fires. **Seven side-by-side panes**, each toggled by Cmd-1..Cmd-7. Composition holds the typeful Session source. Voice Cells (Cmd-8) is the primary editing surface — cards auto-project from `name :: PitchedPart`/`DrumPart` declarations, grouped by mvoice. Replies / Vocabulary / Mini-notation are reference panes; Config inspects the StateBus snapshot; Studio (Cmd-7) edits the rig declaration with the same low-latency pipeline as Composition; Hylograph remains a placeholder. Topbar BPM widget routes through link-spike's `/link/set-tempo`. **Cross-cutting:** purerl-tidal (#90), DeepStar (#191), link-spike (#186), cv-router (#185), fh2-config daemon (#189), SDI (#184). **Near-term direction:** addressing the buffer/disk synchronisation question more thoroughly (currently mitigated via the divergence logger, but the underlying multi-source-of-truth structure remains — see project_calypso_state_sync_review_pending memory), the PureScript CodeMirror mode, and the controller-driven-mini-language testbed work (the René clone is the planned vehicle — project_rene_clone_vmod).
-
Modular rig control surface 5 active
Umbrella for the modular live-coding rig as a controllable system. Houses canonical docs (printable connection map, routing matrix, bring-up, troubleshooting) and the system-probe utility (rig-doctor). Coordinates the four already-tracked rig utilities — cv-router, link-spike, es9-config, fh2-config — plus rig-doctor. The rig itself: ES-9 + ES-5 + ESX-8CV (CV/Gate I/O), FH-2 + FHX-8GT (8 envelopes/gates per voice), AUDIO4c+ (MIDI hub), Rample/QD/Plaits/etc (sound modules), iPad, Ableton, Link/ML2. Driver-agnostic in principle (today: purerl-tidal), but modeled as its own thing because rig topology and routing are independent of the editor.
-
tarot-music active
Tarot-driven generative music, now realized as a TAROT PANE IN CALYPSO (#192) rather than a separate app. A BOTANICA: Full Bloom draw runs a combinatorial generator into a Calypso session module, which Calypso builds + hot-loads and plays live; the generated voices appear as editable cells in the Voice Cells pane. Sibling of purerl-tidal (#90) and es9-daemon (#185). The generator (Generate.Session) is combinatorial, not 1:1: the whole draw feeds a shared pool of musical dimensions (scale/tempo/density/entropy/register) that is phenotyped into N PitchedParts on bass1-4 plus a stacked Section — no card owns a voice. It models the real 111-card Full Bloom deck (22 Major, 56 Minor with Coins not Pentacles, 33 Oracle in three relationship suits: Pollinators/Nectar Robbers/Seed Carriers). It lives as a Tarot pane in the Calypso frontend (Deal / per-card Redraw / Lock+Redraw-unlocked / Hush + a dims line) driving Calypso's pen-gated build (/session-source) + play-piece; each Deal/Redraw also populates the Voice Cells pane with editable generated cells. Confirmed end-to-end live sound over MIDI (ch 1-4). Shipped on the calypso repo (branch dsl-naming-slab-a); tarot-music is now a local-only git repo holding the canonical generator + DESIGN.md. Near-term: make the generation RULES themselves programmable — experiment with generation strategies, likely as an eDSL. Also: edit-a-cell→hear (cell→composition writeback), per-card dimension hints, styling, optional drums (an iac ch10 MIDI kit), and honoring the card's tonic (needs engine scale-registry root coverage).