metronome/pico-cp/programs.json
Me Here 2d243c9ef8 PM_K-1 0.0.8: built-in playlists (baked, read-only) vs user playlists (separate)
The standard editor defaults (Styles / Practice / Song) are baked into app.py as
BUILTIN_SETLISTS (ASCII-fied — emoji/accents would break the 7-bit push + the fonts),
so they update with firmware and the user can't change or delete them. User playlists
live separately in programs.json and are merged after the built-ins.

Device:
- Set-list model: self.setlists = built-ins + user lists (deduped by normalized title,
  so a baked built-in always wins). load()/goto() work within the current list.
- Navigation: a set-list "tab" (small, above the title) shows playlist + position,
  muted for built-in / cyan for user; TAP it to switch playlists. Joystick L/R = item.
- SysEx 0x10 (push) writes programs.json -> rebuild user lists; built-ins untouched.
- Shipped programs.json is now empty ({"setlists":[]}) — built-ins come from firmware.

Editor:
- "Save to device" now syncs only YOUR set lists (filters out the built-in seeds) in the
  new {setlists:[...]} format; warns if you have none. Load-from-device imports both the
  new multi-list and old flat formats.

Verified in the harness: 3 read-only built-ins, set-list switching, user-list merge +
dedup of a pushed "styles", and the ramp engine on a built-in track (80->84->88, +4/4 bars).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 12:29:09 -05:00

3 lines
21 B
JSON