Skip to content

Repository files navigation

Black Seams v2

Terminal-first Ableton set planner & builder. Greenfield rewrite in v2/, coexisting with v1 (which is used only as an import source / regression fixture).

Quick start

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.md

Flow

import 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.

Create an openable Ableton set (no Ableton, no M4L, no human)

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.

About

A highly opinionated Ableton automation transport

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages