Terminal-first Ableton set planner & builder. Greenfield rewrite in v2/,
coexisting with v1 (which is used only as an import source / regression
fixture).
cd v2
go test ./... # full Go suite
node m4l/BlackSeamsBuilder/js/builder.test.js # M4L fake-LiveAPI suite
python3 -m pytest python/tests -q # optional sidecar suite
go run ./cmd/blackseams # launch the Bubble Tea TUI
# Noninteractive pipeline (CI dry run):
go run ./cmd/blackseams --noninteractive \
--import testdata/v1_artifacts \
--out /tmp/set.v2.json --plan /tmp/plan.json \
--emit-readback /tmp/rb.json --verify /tmp/rb.json --report /tmp/report.mdimport v1 → plan bounded source slices → resolve assets (rights-gated) →
recipes → compile one blackseams.set.v2 → M4L builds Session+Arrangement
clips from one clip contract → readback → verify + Markdown report.
One build path. No v1 build modes or write profiles. Source slices are clip identity. M4L is the standard executor; Remote Script / MCP is fallback only.
The cheapest, most reliable path to an actual .als is offline generation —
no Ableton, no Max for Live, no bridge:
# One command (needs a pinned DawVert checkout on $DAWVERT_PATH):
go run ./cmd/blackseams --compose compositions/black_seams.composition.v3.json \
--als-out black_seams.als
# Or zero-setup + reproducible (recommended), spins a clean container:
docker compose -f docker/compose.yml run --rm als
docker compose -f docker/compose.yml down -v--als-out first proves the composition (compose.Verify), then drives a
pinned DawVert (a maintained generator independently tested to produce
Live-openable sets) to emit a gzip Ableton Live 11 set: one audio track
per deck, every arrangement clip second-accurate (120 BPM ⇒ 1 s = 2 beats,
unwarped, SampleRef → processed WAV), one tempo-annotated locator per scene,
control scenes left as silent manual sections. We do not re-implement
Ableton's ~2500-line schema — driving a proven generator is the reliable
choice.
Every generated .als is validated three independent ways: it is gzip +
Live 11 XML; DawVert's own reverse-engineered Ableton-11 reader round-trips
it; and internal/als (Go, trusts nothing) re-derives every clip/locator
from the file and proves it exactly equals the composition. The Docker
harness runs all three on the real 38-scene set in a clean room.
See ROADMAP.md for status and tracked post-RC tasks.