Use Companion's native Gauge element for level displays

Companion 5.1 marks image-buffer feedbacks as deprecated, and its layered
buttons have a Gauge element that follows a number directly. So:

- New numeric value feedbacks for gauges: fader/level position 0-100 for
  inputs, busses, matrix outputs, control groups, aux sends and matrix
  sends (one shared fader taper: 0 dB at 75 %, -inf at 0), raw pan 0..1
  for a symmetric gauge, GEQ band dB, and input meter position.
- Every knob and meter preset is now a layered preset: background box,
  channel name, live dB text and a Gauge bound to $(local:pos); on/off and
  mute tint the background. Meters use a vertical green/amber/red gauge.
  Text uses size 100 with shrink-to-fit (14 rendered tiny on 5.1) and the
  level gauge is white so it stays visible on a green background.
- The old image-bar feedbacks keep working and are labelled "(legacy
  image)"; HELP.md explains how to add a gauge to your own button.
- A sleeping iPad no longer logs a relay send error every few seconds:
  one warning per iPad per 10 minutes.

Checked on the booth Companion 5.1: the layered knob previews show live
names, levels and gauge fills. npm test: 392 checks pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 09:50:31 -04:00
co-authored by Claude Opus 5.5
parent 90dee14444
commit 9f64d20a24
6 changed files with 374 additions and 111 deletions
+39 -10
View File
@@ -109,7 +109,7 @@ snapshot's list position (0 = the first); verify it once on your console before
## Feedbacks
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,
(text for a button's local variable) and a numeric value for a gauge 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.
@@ -122,13 +122,40 @@ own value changes.
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).
* Numeric, for gauges (see **Gauges** below): the `*_pos` position feedbacks, `input_pan_num` / `send_pan_num` and
`geq_band_db`.
* Advanced image bars (**legacy image**, deprecated by Companion 5.1, kept so existing buttons keep working): input
fader, aux send level, buss / matrix output / control group fader, matrix send level (-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. Use a gauge on new buttons.
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.
## Gauges
Companion 5.x has a native **Gauge** element, and every knob and meter preset uses one. Each position feedback is a
number you feed to a gauge through a button local variable:
| Feedback | Range | Meaning |
| --- | --- | --- |
| `input_fader_pos`, `buss_fader_pos`, `matrix_fader_pos`, `cg_fader_pos`, `send_level_pos`, `matrix_send_level_pos` | 0-100 | fader / send position on a fader taper; unknown reads 0 |
| `input_pan_num`, `send_pan_num` | 0-1 | the console's pan, 0.5 = centre (unknown reads 0.5) |
| `geq_band_db` | -12 to +12 | graphic EQ band gain in dB (unknown reads 0) |
| `input_meter_pos` | 0-100 | input meter (0-127 scaled); has the *Meter* option level / gate / compressor reduction |
The fader taper maps +10 dB = 100, +5 = 87.5, 0 = 75, -5 = 65, -10 = 55, -20 = 40, -30 = 28, -40 = 18, -50 = 11 and
-60 = 6 (straight lines in between), falls to about 1 just above -90 dB, and reads 0 at or below -90 dB (off).
To add a gauge to your own button in Companion 5.1:
1. **Local Variables** tab: add a feedback variable, name it `pos`, and pick the position feedback (for example
`input_fader_pos` with its input).
2. **Style** tab: **+**, then **Gauge**. Set *Value* to the expression `$(local:pos)`, *Min* 0, *Max* 100
(fader and meter positions).
3. For pan use `input_pan_num` / `send_pan_num` with *Min* 0, *Max* 1, **Symmetric** on and *Origin* 0.5. For a graphic EQ
band use `geq_band_db` with *Min* -12, *Max* 12, symmetric, *Origin* 0.
## Variables
`input_N_name|fader|mute|pan`, `buss_N_name|mode|stereo|fader|mute`, `matrix_N_name|fader|mute`,
@@ -138,21 +165,23 @@ no matrix-output solo action, only its feedback.
## Presets
Presets are named with the live entity names and rebuilt when names load.
Presets are named with the live entity names and rebuilt when names load. The knob and meter presets are *layered*
(black background, name, dB text, gauge) and a muted / on state tints their background; the plain toggles are simple
buttons.
| Preset group | What the buttons do |
| --- | --- |
| Inputs: Mute | One button per input; red when muted |
| Inputs: Fader (knob) | Rotary: turn = fader -/+1 dB, press = mute; shows name and dB, with a level bar |
| Inputs: Fader (knob) | Rotary: turn = fader -/+1 dB, press = mute; shows name and dB with a gauge along the bottom |
| Inputs: Solo | One button per input |
| Busses | Master mute, and master fader knob (turn = fader, press = mute) per named buss |
| 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) |
| 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 gauge) |
| 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) |
| Matrix, Control groups | Mute and fader knob (with a gauge) 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 gauge) |
| 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 |
| Input meters | Level, gate gain reduction and compressor gain reduction buttons per input, each with a vertical gauge at the right edge (green below 70, amber 70-90, red above 90) |
| 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