stable-jam β Agent Harness
Jam Buddy β "you start playing, it joins in." An AI music companion for the Music Hackspace Montreal hackathon (Aug 22β23, 2026, Stability AI challenge). A Next.js web rack + a Python SA3 pipeline that listens to a MIDI or audio take and responds at your tempo in the instrument you pick.
Roles
- Web app β
apps/web/(Next.js + TS + Tailwind + Vitest). The hardware sampler rack: instrument pads, genre/mood/tempo knobs, MIDI/audio take input, JOIN IN + PLAY BOTH, status panel, andgenerations/output. - SA3 pipeline β
tools/jam_buddy.py(Python). Detects tempo + duration from a MIDI take (or runs audio-to-audio from a WAV), builds the SA3 prompt from the knobs, generates the response WAV via thestable-audio-3venv. - Prompt builder β
apps/web/lib/jambuddy/prompt.ts(pure, tested). - Player β
apps/web/lib/jambuddy/player.ts(Web Audio; play take + buddy together). Note: PLAY BOTH is banked / not fully debugged. - Legacy converters β
gp5_to_keyswitched_mid.py/midi_to_gp5.py/midjson_to_mid.py(GP5βMIDI tooling from the earlier iteration, still present).
Commands
# Web app (node_modules NOT committed β install first)
cd apps/web && pnpm install && npx vitest run # 31 tests
cd apps/web && npx tsc --noEmit # typecheck
pnpm dev # local Next.js server -> :3000
# Python pipeline (SA3 venv is in THIS repo)
./stable-audio-3/.venv/Scripts/python.exe tools/jam_buddy.py --midi take.mid --instrument bass --out out.wav
# Conversion CLIs (if needed)
python gp5_to_keyswitched_mid.py path/to/song.gp5
Test contract
- Web:
apps/web/__tests__/βprompt.test.ts(prompt builder),player.test.ts(midi parsing/player),engine.test.ts,conversation.test.ts. - Python:
tests/β GP5 conversion againsttests/expected/baseline.yaml.
Conventions
- TS for web, Python 3.10+ for audio/conversion.
- Accessibility-first (screenreader-native): axe-core, NVDA + VoiceOver checks.
- Conventional Commits,
feat/*/fix/*/docs/*/chore/*branches.
Not-in-git (deliberately)
stable-audio-3/+text2midi/(vendored models) live in the previous dir; referenced viaJAM_BUDDY_PYTHON. Don't copy them into this repo.node_modules/,.next/,generations/*.wavβ regenerable.
See docs/HANDOFF.md for the full resume guide and current product state.