atem_watch.js (run with Companion's node + its atem-connection) keeps one
connection to the switcher and compares, every second, every Fairlight
source's mix option and fader and every camera's settings with
atem-reference.xml (the 2026-10-07 14:59:55 restore file). ATEM shows
ATEM AUDIO WRONG / ATEM CAMERA WRONG; the hold and Sunday auto-fix send
back only what differs. ATEM SW MIDI ON is fixed by quitting ATEM Software
Control, switching midiEnabled off and reopening it. Live check: switcher
matches the file (0 differences, 1440 camera values).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
STUDIO-B-SOLO-MON, MON, TB and TB-MON map to ports 0/14-0/17 on the Netgear
M4250 Dante switch 10.66.1.102. netgear.py poe_cycle first checks the port's
MAC table and refuses if a different device is plugged in there, then runs
poe reset. Tested 2026-10-08 13:10 on SOLO-MON: dropped off Dante and was
back about 17 s later. install.sh now copies netgear.py too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
status_panel.py runs on NA Ingest as a LaunchAgent. Every second it reads
Companion's connection statuses and module variables, adds what Companion
cannot see (network MIDI peers, Bonjour sessions, pings, launchd services,
disk, Resi cloud, the Bible TV app), and writes one JSON custom variable that
page 19 renders. Buttons acknowledge alarms, mute them, and restart a stuck
Companion connection on a two second hold. If the watchdog stops, the page
turns purple instead of freezing on stale green.
make_page.py builds the page export from config.json; tests/ runs offline
against a fake Companion and a CoreMIDI loopback.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>