Add a feedback for every controllable state, matrix send presets

A matrix-send knob looked dead on the booth Companion although the console
followed it (verified through Companion's rotate API: -90 -> -60 -> -59):
the module had matrix send actions but no matrix send feedbacks.

- Every action with a readable state now has a matching feedback: matrix
  send on/level text/level bar, matrix and control group solo and fader
  bars, graphic EQ in and band gain text/bar, aux send pan text, and value
  text for trim, gain and filter frequencies. A test checks the parity.
- New action: matrix output solo.
- Matrix sends use the console's -90 dB floor: adjusting down from -inf no
  longer writes -150 there.
- Presets: "Matrix sends to <output>" (on/off and knob per matrix input)
  and graphic EQ in/out. 2970 presets, 1.8 MB.

npm test: 368 checks pass on Node 25 and on Companion's Node 22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-19 15:44:43 -04:00
co-authored by Claude Opus 5.5
parent 57645be1e9
commit 90dee14444
9 changed files with 351 additions and 57 deletions
+27 -10
View File
@@ -75,8 +75,10 @@ fader, mute and solo are on the Aux_Outputs or Group_Outputs side that matches i
## Actions
Level actions take dB (`-inf` at the bottom of the number field). Every level has a **set** and a
relative **adjust** version for rotary encoders; adjusting from -inf lands at -60 dB on the first step up.
Toggles read the current state first when it is not known yet.
relative **adjust** version for rotary encoders. A relative step cannot start from -inf: from −∞ the first
step up jumps to −60 dB. A matrix send has its floor at **-90 dB** (the console reports off matrix sends as -90, and
the module never writes lower); faders and aux sends go down to -150 dB. Toggles read the current state first when it
is not known yet.
| Group | Actions |
| --- | --- |
@@ -106,14 +108,26 @@ snapshot's list position (0 = the first); verify it once on your console before
## Feedbacks
* Boolean (button colour): input muted / solo, aux send on, group assigned, buss muted /
solo, matrix muted, control group muted, snapshot is current, fader level above/below a threshold, send
level above/below, console link alive, relay has an iPad, every channel-strip switch above, and the meter
Every action that changes something the console reports has a feedback for it: a boolean for every switch, a value
(text for a button's local variable) and a bar for every level. The state a feedback needs (sends, matrix sends,
graphic EQ bands, channel-strip values) is loaded the first time one is shown, and each button re-checks only when its
own value changes.
* Boolean (button colour): input muted / solo; aux send on; group assigned; buss muted / solo; matrix output muted /
solo; control group muted / solo; **matrix send on**; **graphic EQ in**; snapshot is current; fader level above/below
a threshold; aux send level above/below; console link alive; relay has an iPad; every channel-strip switch
(phantom, phase, pad, EQ in, compressor in, gate in, high-pass in, low-pass in, delay in, insert A/B in); and the meter
feedbacks below.
* Value (use with a preset's local variable to put live numbers in button text): input fader, input pan,
send level, send On/Off, buss / matrix / control group fader, current snapshot name, input meter value.
* Advanced bars: input fader, aux send level and buss fader draw a horizontal bar along the bottom of the
button (-60 to +10 dB); the input meter draws a vertical bar at the right edge (green, amber, red).
* Value (put live numbers in button text with a preset's local variable): input fader and pan; aux send level, On/Off
and pan; buss / matrix / control group fader; **matrix send level**; **graphic EQ band gain**; trim, analog gain and
filter frequency per input and buss (trim also per matrix output); current snapshot name; input meter value. Levels
read `-inf` at or below -90 dB.
* Advanced bars: input fader, aux send level, buss / matrix output / control group fader, **matrix send level** (all
-60 to +10 dB) and **graphic EQ band gain** (-12 to +12 dB) draw a horizontal bar along the bottom of the button;
the input meter draws a vertical bar at the right edge (green, amber, red).
Not covered by a feedback: free-form *Send raw OSC*, and *Set name* (the name is the variable `input_N_name`). There is
no matrix-output solo action, only its feedback.
## Variables
@@ -135,12 +149,15 @@ Presets are named with the live entity names and rebuilt when names load.
| Sends to *aux name* | One section per named aux buss: per input an **On/off** button (green when on, shows the level) and a **Level (knob)** (turn = send level, press = on/off, with a bar) |
| Group *group name* | One section per named group buss: per input an **Assign** toggle, green when assigned |
| Matrix, Control groups | Mute and fader knob per output / group |
| Matrix sends to *output name* | One section per matrix output: per matrix input an **On/off** button (green when on; shows `Matrix In N` and the level) and a **Level (knob)** (turn = send level, press = on/off, with a bar) |
| Graphic EQs | One **In/out** toggle per graphic EQ, green when in |
| Snapshots | **Fire** per snapshot (green when current), next, previous, current (display) |
| Input meters | Level, gate gain reduction and compressor gain reduction buttons per input |
| Console | Reload, connection status, relay status |
Busses and control groups with no name are unused slots and get no presets. If the preset list would exceed
3000 entries or 4 MB, the per-input send level knobs are left out and a warning is logged.
3000 entries or 4 MB, the per-input gate / compressor reduction meter presets are left out first, then the
per-input aux send level knobs, and a warning is logged.
## Meters