Vendor helgoboss/helgobox (ReaLearn) as basis for custom UI fork

Stripped upstream git history; starting point for replacing the native
SWELL/Win32 mapping UI with something more suited to bulk editing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-15 17:38:29 -04:00
parent 583ed77a67
commit e58f06d9fa
2232 changed files with 685575 additions and 1 deletions
@@ -0,0 +1,729 @@
--!strict
local realearn = require("realearn")
local module = {}
export type McuPresetConfig = {
companion_data: any,
support_x_touch_colors: boolean,
}
function module.create_compartment(config: McuPresetConfig): realearn.Compartment
local channel_count = 8;
-- Replace with "XTouchMackieLcd" in order to be able to benefit from colors when using X-Touch.
local lcd_kind = "MackieLcd";
local binary_eight = {
[0] = "000",
[1] = "001",
[2] = "010",
[3] = "011",
[4] = "100",
[5] = "101",
[6] = "110",
[7] = "111",
}
local groups: { realearn.Group } = {
{
id = "fader",
name = "Fader",
},
{
id = "v-pot",
name = "V-Pot",
},
{
id = "v-select",
name = "V-Select",
},
{
id = "fader-touch",
name = "Fader Touch",
},
{
id = "select",
name = "Select",
},
{
id = "mute",
name = "Mute",
},
{
id = "solo",
name = "Solo",
},
{
id = "record-ready",
name = "Record-ready",
},
{
id = "v-pot-leds",
name = "V-Pot LEDs",
},
{
id = "lcd",
name = "LCD",
},
{
id = "meter",
name = "Meter",
},
}
local mappings: { realearn.Mapping } = {
{
id = "main/fader",
group = "fader",
source = realearn.Source.MidiPitchBendChangeValue {
channel = 8,
},
target = realearn.Target.Virtual {
id = "main/fader",
},
},
{
id = "jog",
feedback_enabled = false,
source = realearn.Source.MidiControlChangeValue {
channel = 0,
controller_number = 60,
character = "Relative1",
fourteen_bit = false,
},
target = realearn.Target.Virtual {
id = "jog",
},
},
{
id = "main/fader/touch",
group = "fader-touch",
feedback_enabled = false,
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 112,
},
target = realearn.Target.Virtual {
id = "main/fader/touch",
character = "Button",
learnable = false,
},
},
{
id = "marker",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 84,
},
target = realearn.Target.Virtual {
id = "marker",
character = "Button",
},
},
{
id = "read",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 74,
},
target = realearn.Target.Virtual {
id = "read",
character = "Button",
},
},
{
id = "write",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 75,
},
target = realearn.Target.Virtual {
id = "write",
character = "Button",
},
},
{
id = "ch-left",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 48,
},
target = realearn.Target.Virtual {
id = "ch-left",
character = "Button",
},
},
{
id = "ch-right",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 49,
},
target = realearn.Target.Virtual {
id = "ch-right",
character = "Button",
},
},
{
id = "bank-left",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 46,
},
target = realearn.Target.Virtual {
id = "bank-left",
character = "Button",
},
},
{
id = "bank-right",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 47,
},
target = realearn.Target.Virtual {
id = "bank-right",
character = "Button",
},
},
{
id = "rewind",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 91,
},
target = realearn.Target.Virtual {
id = "rewind",
character = "Button",
},
},
{
id = "fast-fwd",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 92,
},
target = realearn.Target.Virtual {
id = "fast-fwd",
character = "Button",
},
},
{
id = "play",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 94,
},
target = realearn.Target.Virtual {
id = "play",
character = "Button",
},
},
{
id = "stop",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 93,
},
target = realearn.Target.Virtual {
id = "stop",
character = "Button",
},
},
{
id = "record",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 95,
},
target = realearn.Target.Virtual {
id = "record",
character = "Button",
},
},
{
id = "cycle",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 86,
},
target = realearn.Target.Virtual {
id = "cycle",
character = "Button",
},
},
{
id = "zoom",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 100,
},
target = realearn.Target.Virtual {
id = "zoom",
character = "Button",
},
},
{
id = "scrub",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 101,
},
target = realearn.Target.Virtual {
id = "scrub",
character = "Button",
},
},
{
id = "cursor-left",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 98,
},
target = realearn.Target.Virtual {
id = "cursor-left",
character = "Button",
},
},
{
id = "cursor-right",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 99,
},
target = realearn.Target.Virtual {
id = "cursor-right",
character = "Button",
},
},
{
id = "cursor-up",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 96,
},
target = realearn.Target.Virtual {
id = "cursor-up",
character = "Button",
},
},
{
id = "cursor-down",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 97,
},
target = realearn.Target.Virtual {
id = "cursor-down",
character = "Button",
},
},
{
id = "nudge",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 85,
},
target = realearn.Target.Virtual {
id = "nudge",
character = "Button",
},
},
{
id = "drop",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 87,
},
target = realearn.Target.Virtual {
id = "drop",
character = "Button",
},
},
{
id = "replace",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 88,
},
target = realearn.Target.Virtual {
id = "replace",
character = "Button",
},
},
{
id = "click",
source = {
kind = "MidiNoteVelocity",
channel = 0,
key_number = 89,
},
target = realearn.Target.Virtual {
id = "click",
character = "Button",
},
},
{
id = "solo",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 90,
},
target = realearn.Target.Virtual {
id = "solo",
character = "Button",
},
},
{
id = "f1",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 54,
},
target = realearn.Target.Virtual {
id = "f1",
character = "Button",
},
},
{
id = "f2",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 55,
},
target = realearn.Target.Virtual {
id = "f2",
character = "Button",
},
},
{
id = "f3",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 56,
},
target = realearn.Target.Virtual {
id = "f3",
character = "Button",
},
},
{
id = "f4",
source = {
kind = "MidiNoteVelocity",
channel = 0,
key_number = 57,
},
target = realearn.Target.Virtual {
id = "f4",
character = "Button",
},
},
{
id = "f5",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 58,
},
target = realearn.Target.Virtual {
id = "f5",
character = "Button",
},
},
{
id = "f6",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 59,
},
target = realearn.Target.Virtual {
id = "f6",
character = "Button",
},
},
{
id = "smpte-beats",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 53,
},
target = realearn.Target.Virtual {
id = "smpte-beats",
character = "Button",
},
},
{
id = "lcd/assignment",
group = "lcd",
control_enabled = false,
source = realearn.Source.MackieSevenSegmentDisplay {
},
target = realearn.Target.Virtual {
id = "lcd/assignment",
},
},
{
id = "lcd/timecode",
group = "lcd",
control_enabled = false,
source = realearn.Source.MackieSevenSegmentDisplay {
scope = "Tc",
},
target = realearn.Target.Virtual {
id = "lcd/timecode",
},
},
}
-- For each channel
for ch = 0, channel_count - 1 do
local human_ch = ch + 1
local prefix = "ch"..human_ch.."/"
local v_select = realearn.Mapping {
id = prefix.."v-select",
group = "v-select",
feedback_enabled = false,
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 32 + ch,
},
target = realearn.Target.Virtual {
id = prefix.."v-select",
character = "Button",
},
}
local fader_touch = realearn.Mapping {
id = prefix.."fader/touch",
group = "fader-touch",
feedback_enabled = false,
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 104 + ch,
},
target = realearn.Target.Virtual {
id = prefix.."fader/touch",
character = "Button",
learnable = false,
},
}
local select = realearn.Mapping {
id = prefix.."select",
group = "select",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 24 + ch,
},
target = realearn.Target.Virtual {
id = prefix.."select",
character = "Button",
},
}
local fader = realearn.Mapping {
id = prefix.."fader",
group = "fader",
source = realearn.Source.MidiPitchBendChangeValue {
channel = ch,
},
target = realearn.Target.Virtual {
id = prefix.."fader",
},
}
local v_pot_control = realearn.Mapping {
id = prefix.."v-pot/control",
group = "v-pot",
feedback_enabled = false,
source = realearn.Source.MidiControlChangeValue {
channel = 0,
controller_number = 16 + ch,
character = "Relative3",
fourteen_bit = false,
},
glue = {
step_factor_interval = {1, 100},
},
target = realearn.Target.Virtual {
id = prefix.."v-pot",
},
}
local v_pot_feedback_default = realearn.Mapping {
id = prefix.."v-pot/feedback",
group = "v-pot-leds",
control_enabled = false,
source = realearn.Source.MidiRaw {
pattern = "B0 3"..ch.." [0000 dcba]",
},
glue = {
source_interval = {0, 0.75},
},
target = realearn.Target.Virtual {
id = prefix.."v-pot",
},
}
local v_pot_feedback_wrap = realearn.Mapping {
id = prefix.."v-pot/wrap",
group = "v-pot-leds",
control_enabled = false,
source = realearn.Source.MidiRaw {
pattern = "B0 3"..ch.." [0010 dcba]",
},
glue = {
source_interval = {0, 0.75},
},
target = realearn.Target.Virtual {
id = prefix.."v-pot/wrap",
},
}
local v_pot_feedback_boost_cut = realearn.Mapping {
id = prefix.."v-pot/boost-cut",
group = "v-pot-leds",
control_enabled = false,
source = realearn.Source.MidiRaw {
pattern = "B0 3"..ch.." [0001 dcba]",
},
glue = {
source_interval = {0.05, 0.75},
},
target = realearn.Target.Virtual {
id = prefix.."v-pot/boost-cut",
},
}
local v_pot_feedback_single = realearn.Mapping {
id = prefix.."v-pot/single",
group = "v-pot-leds",
control_enabled = false,
source = realearn.Source.MidiRaw {
pattern = "B0 3"..ch.." [0000 dcba]",
},
glue = {
source_interval = {0, 0.75},
},
target = realearn.Target.Virtual {
id = prefix.."v-pot/single",
},
}
local v_pot_feedback_spread = realearn.Mapping {
id = prefix.."v-pot/spread",
group = "v-pot-leds",
control_enabled = false,
source = realearn.Source.MidiRaw {
pattern = "B0 3"..ch.." [0011 dcba]",
},
glue = {
source_interval = {0, 0.4},
},
target = realearn.Target.Virtual {
id = prefix.."v-pot/spread",
},
}
local mute = realearn.Mapping {
id = prefix.."mute",
group = "mute",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 16 + ch,
},
target = {
kind = "Virtual",
id = prefix.."mute",
character = "Button",
},
}
local solo = realearn.Mapping {
id = prefix.."solo",
group = "solo",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 8 + ch,
},
target = realearn.Target.Virtual {
id = prefix.."solo",
character = "Button",
},
}
local record_ready = realearn.Mapping {
id = prefix.."record-ready",
group = "record-ready",
source = realearn.Source.MidiNoteVelocity {
channel = 0,
key_number = 0 + ch,
},
target = realearn.Target.Virtual {
id = prefix.."record-ready",
character = "Button",
},
}
local normal_lcd_line_1 = realearn.Source.MackieLcd {
channel = ch,
line = 0,
}
local x_touch_lcd_line_1 = realearn.Source.XTouchMackieLcd {
channel = ch,
line = 0,
}
local lcd_line1 = realearn.Mapping {
id = prefix.."lcd/line1",
group = "lcd",
control_enabled = false,
source = if config.support_x_touch_colors then x_touch_lcd_line_1 else normal_lcd_line_1,
target = realearn.Target.Virtual {
id = prefix.."lcd/line1",
},
}
local normal_lcd_line_2 = realearn.Source.MackieLcd {
channel = ch,
line = 1,
}
local x_touch_lcd_line_2 = realearn.Source.XTouchMackieLcd {
channel = ch,
line = 1,
}
local lcd_line2 = realearn.Mapping {
id = prefix.."lcd/line2",
group = "lcd",
control_enabled = false,
source = if config.support_x_touch_colors then x_touch_lcd_line_2 else normal_lcd_line_2,
target = realearn.Target.Virtual {
id = prefix.."lcd/line2",
},
}
local meter = realearn.Mapping {
id = prefix.."meter/peak",
group = "meter",
control_enabled = false,
source = realearn.Source.MidiRaw {
pattern = "D0 [0"..binary_eight[ch].." dcba]",
},
target = realearn.Target.Virtual {
id = prefix.."meter/peak",
},
}
table.insert(mappings, v_select)
table.insert(mappings, fader_touch)
table.insert(mappings, select)
table.insert(mappings, fader)
table.insert(mappings, v_pot_control)
table.insert(mappings, v_pot_feedback_default)
table.insert(mappings, v_pot_feedback_wrap)
table.insert(mappings, v_pot_feedback_boost_cut)
table.insert(mappings, v_pot_feedback_single)
table.insert(mappings, v_pot_feedback_spread)
table.insert(mappings, mute)
table.insert(mappings, solo)
table.insert(mappings, record_ready)
table.insert(mappings, lcd_line1)
table.insert(mappings, lcd_line2)
table.insert(mappings, meter)
end
return realearn.Compartment {
groups = groups,
mappings = mappings,
custom_data = {
companion = config.companion_data,
},
}
end
return module