Skip to content

v0.9.0 — Electra One MK2 first-class integration

Choose a tag to compare

@roomi-fields roomi-fields released this 14 Apr 11:42

Hardware-verified reconfigurable controller support. The Electra One MK2 is now a fully-tested driver (firmware 4.1.4, end-to-end on 2026-04-14) and the showcase for a significantly expanded Lua scripting subsystem.

Highlights

  • Dynamic CC↔OSC routing — every preset upload rebuilds the bridge's routing table from scratch, zero restart. Clients never hardcode slugification or protocol details; they query /electra1/routes/list and route on the addresses the bridge returns.
  • Scripting promoted from escape-hatch to full driver substrate: persistent state (ob.state), native JSON codec, execution profiles, dynamic route registration, multi-block SysEx emission, outbound OSC emission, reply scripts with matched bindings.
  • Self-describing devices via /bridge/docs — companion <name>.md auto-loaded from the device directory and served over OSC. LLM-driven integrators have everything they need without any code-side knowledge.
  • Hardware-verified count bumped 1 → 2: MiniLab 3 + Electra One MK2.

What's new

  • src/routing.rs: DynamicRoutes with page-aware CC↔OSC lookup
  • src/scripting.rs: ob.state, ob.json_*, ob.emit_sysex, ob.emit_osc, ob.register_cc_route, ob.list_routes, ob.set_current_page, log_warn/log_error, Profile::PresetIngest
  • Device schema: custom_commands, auto-loaded companion .md
  • Runtime: try_dynamic_cc_in/try_dynamic_osc_out, reply.script wired with ctx.bindings, /bridge/docs endpoint
  • Electra One MK2 driver: /preset/upload, /routes/list, /preset/current, /page/current, /page/switched reply script
  • CLI: osc-send --from-file for large JSON payloads
  • 100 tests total, 0 failures

See the CHANGELOG for the full list.

Caveats (all documented in the companion guide served over /bridge/docs)

  • inputs: [{potId, valueId}] mandatory on every Electra control
  • Colors must be hex 6-char ("F49500", not "orange")
  • Upload targets the currently-selected slot — pair with arm_upload
  • Envelope segments cycle via touch-and-hold, not multi-pot binding
  • Midir/Windows truncates incoming SysEx at 1024 bytes