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>
companion-module-digico-s31
Bitfocus Companion (5.0+) connection module for DiGiCo S-Series consoles (S21 / S31). It discovers the console over the iPad extension's OSC interface (names, busses, matrix, control groups, graphic EQs, snapshots), builds dropdowns, variables and presets from the live names, and controls faders, mutes, solos, pans, aux sends, group assigns, matrix sends, per-channel switches and snapshots, with feedbacks, rotary-encoder presets and input meters. It also relays the DiGiCo iPad app: the console accepts exactly one iPad, Companion takes that slot, and any number of iPad apps connect through it.
User documentation (console and iPad setup, actions, feedbacks, variables, presets, meters and the protocol table) is in companion/HELP.md; Companion shows it on the connection's help button.
Repository: http://chronicles-ab.waterschurch.org:3000/Waters-Church/companion-module-digico-s31
Layout
| Path | Purpose |
|---|---|
src/main.js |
the InstanceBase subclass: config, lifecycle, load/keepalive/reconnect, paced query queue, actions' operations, meters, debug learn log, upgrade script |
src/state.js |
everything known about the console, dropdown choice builders, load plans |
src/protocol.js |
the iPad-extension OSC tree: address builders, message parser, value formatting |
src/image.js |
tiny RGBA drawing helpers for the bar feedbacks |
src/definitions/ |
actions.js, feedbacks.js, variables.js, presets.js |
src/console-link.js |
one UDP socket to the console (fixed local port) |
src/relay.js |
iPad relay: tracks clients, forwards verbatim, fans out |
src/osc.js |
tolerant OSC codec |
tools/ |
mock-s31.js (console emulator), fake-ipad.js, the probe and the console's address catalog, see tools/README.md |
test/selftest.js |
end-to-end check: the real module against the mock console and a fake iPad |
docs/ |
design notes |
Develop
npm install # @companion-module/base ~2.1.3 (2.2.x is rejected by Companion 5.0.x)
npm test # runs test/selftest.js against the mock console on 127.0.0.1 (ports 18000-19001)
The module only uses node:dgram and node:events, so it runs under Companion's --permission
sandbox on its bundled Node 22 (no file writes, no child processes). No other dependencies.
To try it without a console, run the mock and point a connection at it:
node tools/mock-s31.js --dialect sd --listen 8000 --reply-to 127.0.0.1:9000
Install as a developer module
- Copy this folder, including
node_modules, to the Companion computer, e.g.~/companion-dev-modules/companion-module-digico-s31/. - In the Companion launcher, open Developer, enable developer modules and set the path to the
parent folder (
~/companion-dev-modules); the launcher restarts Companion with--extra-module-path. Alternatively setdev_modules_pathin Companion'sconfig.jsonand relaunch. - Connections, Add, "DiGiCo: S21; S31" (version Dev). Later file changes hot-reload the connection.
On the console, Extensions > iPad must point at the Companion computer's IP address, with the console's Send port set to the connection's Local receive port (default 9000) and its Receive port set to the connection's Console receive port (default 8000).
Upgrading from 0.1
The connection settings are kept: an upgrade script maps the v1 config to the new eight settings
(verboseLog becomes Debug logging, the old 180 s iPad idle timeout becomes the new 3600 s default,
everything else is dropped). The v1 actions and feedbacks whose ids v2 reuses with different options
(send_on, send_level, send_nudge, send_pan, group_assign, snapshot_fire, buss_mute, buss_fader,
mute, fader, muted, send_on / group_assigned feedbacks) and the single-buss mon_* ones (using the old
single-buss number and type, auto read as aux) are rewritten to their v2 form; anything without an equivalent is
left as it was.