Cue page: expose "cue record" as bindable actions so a full launch/record/stop workflow can run from a MIDI controller

I'm using the Cue page for live performance with an Akai MPK Mini MK3, on Ardour 9.7.0 [Arch Linux]. The goal is a loop-and-layer workflow: record a clip into a slot, launch it, layer the next one, stop things — all without touching the mouse or keyboard, because during a performance my hands are on the keys and the pads.

Launching and stopping are already fully covered, and work well:

  • Cues/trigger-slot-C-R, Cues/trigger-cue-N, Cues/stop-cues-C-now/soon, Cues/stop-all-cues-now/soon in a Generic MIDI binding map
  • per-slot MIDI learn via right-click → MIDI Learn with a device set as Default trigger input

Recording into a slot is the one part that can't leave the mouse. As far as I can tell from the source, two things stand in the way:

  1. The per-track record toggle in the Cue page track header — tooltip "Switch controls from cue launching to cue recording" — is a direct button handler calling TriggerBox::set_record_enabled(). It isn't registered in the Cues action group, there's no matching Generic MIDI control address alongside /route/recenable, and TriggerBox isn't exposed in the Lua bindings, so there's no way to reach it from a control surface or a script.
  2. Arming an individual slot only happens through a click in the grid. A slot banged from MIDI goes through Session::bang_trigger_at()TriggerBox::bang_trigger_at(), where an empty slot is treated as a stop by convention, so a pad hit can't start a capture even when the track is already in record mode.

What would make the workflow complete, roughly in order of usefulness to me:

  • An action to toggle cue record-enable per track, e.g. Cues/toggle-rec-enable-C, following the existing stop-cues-C-* naming, so it can go in a binding map. On a small controller this is the single blocking piece: the MPK Mini has two banks of 8 pads, so bank A would launch eight slots and bank B would flip the same eight tracks into cue record.
  • Either an explicit Cues/arm-slot-C-R action, or having a bang on an empty slot arm it when that track's triggerbox is record-enabled (possibly behind a preference, since it changes the current "empty slot = stop" behaviour).
  • Optionally, MIDI feedback for slot/arm state. My own pads can't be driven from the host, so this wouldn't help me directly, but it's what makes the workflow usable on grid controllers when you can't look at the laptop.

For reference, this is the map I'm using today, which covers everything except recording (bank A pads, notes 36–43 on channel 1 in my program):

<Binding channel="1" note="36" action="Cues/trigger-slot-0-0"/>
<Binding channel="1" note="37" action="Cues/trigger-slot-1-0"/>
<Binding channel="1" note="38" action="Cues/trigger-slot-2-0"/>
<Binding channel="1" note="39" action="Cues/trigger-slot-3-0"/>
<Binding channel="1" note="44" action="Cues/stop-cues-0-soon"/>
<Binding channel="1" note="45" action="Cues/stop-all-cues-soon"/>

I'm aware the properly supported path for grid controllers is a dedicated surface module rather than a Generic MIDI map, and that the MPK Mini isn't a grid controller at all. These actions would help the surface modules too, though, and they'd let people on small or unsupported controllers get a working performance setup in the meantime. Happy to test patches or provide more detail on my setup.

1 Like