Step 1 in progress: the settings page server, probes, teaching pages and UI (not deployed yet)

- settings/server.py: read-only routes (overview, keys, computers, gear, companion, logs, history,
  help facts, key guide / cheat sheet / where things are), the editing-code check with a lockout,
  LAN-only binding with a per-minute rebind
- settings/probes.py: fixed read-only probes per computer; whole lists fetched and matched locally
- settings/keyguide.py: the generated teaching pages
- settings/ui: the page, every screen read-only
- status_panel.py: snapshot.json every 5 s for the page; the Companion database lookup prefers the
  running build's folder and skips a database that will not open (a stale v5.1 folder was breaking it)
- config.json: every computer's record (what runs there, network ports, done-by-hand ticks), the
  editing code (kept in the repo, the user's choice), an empty gear list
- install.sh: the settings page as a second LaunchAgent; settings/ and schema.py deployed

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-13 16:23:59 -04:00
co-authored by Claude Fable 5.1
parent b05ff408d5
commit 2343a27529
11 changed files with 2266 additions and 19 deletions
+348 -8
View File
@@ -2,7 +2,8 @@
"site": {
"id": "na", "name": "North Attleboro", "ingest_name": "NA Ingest", "ingest_hostname": "na-ingest.local",
"ingest_ips": ["10.1.1.1", "10.6.3.222"],
"live_services": []
"live_services": [],
"editing_code": "stingo serried warp"
},
"companion": { "host": "127.0.0.1", "port": 8000 },
"page": 19,
@@ -38,15 +39,354 @@
"dante_switches": ["10.66.1.100", "10.66.1.102"],
"hosts": {
"prop": { "ssh": "napropresenter@10.1.14.225" },
"tracks": { "ssh": "waterschurchmedia@10.1.3.227" },
"translation": { "ssh": "studio@10.1.7.39" },
"bibletv": { "ssh": "media@10.6.7.13", "os": "windows" },
"lighting": { "ssh": "media@10.1.10.206", "os": "windows" },
"studiob": { "ssh": "studiob@10.1.13.175" },
"livestream": { "ssh": "media@10.1.9.126", "os": "windows", "mac": "6c:24:08:d7:fb:57", "wake_broadcast": "10.1.255.255" }
"ingest": {
"self": true,
"name": "NA Ingest",
"os": "mac",
"role": "the watchdog, Companion, the settings page, lobby captions, transcription",
"runs": [
{
"kind": "launchagent",
"label": "org.waterschurch.status-panel",
"name": "the watchdog"
},
{
"kind": "launchagent",
"label": "org.waterschurch.status-settings",
"name": "the settings page"
},
{
"kind": "app",
"process": "Companion",
"name": "Companion 5.0.7",
"http": "http://127.0.0.1:8000/api/connections"
},
{
"kind": "app",
"process": "Companion Satellite",
"name": "Companion Satellite",
"watched": false
},
{
"kind": "launchagent",
"label": "org.waterschurch.resi-propresenter",
"name": "the Resi bridge"
},
{
"kind": "launchagent",
"label": "org.waterschurch.lobby-captions",
"name": "lobby captions"
},
{
"kind": "launchagent",
"label": "org.waterschurch.lobby-captions-display",
"name": "the caption screen"
},
{
"kind": "app",
"process": "ProdCom",
"name": "ProdCom (transcription)",
"http": "http://127.0.0.1:24480/api/v1/ping"
},
{
"kind": "app",
"process": "ProdDash",
"name": "ProdDash",
"http": "http://127.0.0.1:24500/"
},
{
"kind": "app",
"process": "Spotify",
"name": "Spotify"
},
{
"kind": "app",
"process": "ATEM Software Control",
"name": "ATEM Software Control"
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "STUDIO-A-Ingest"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
},
{
"kind": "folder",
"path": "~/Library/CloudStorage/GoogleDrive-media@waterschurch.org/Shared drives/Waters Creative/Production Team/Backup/NA/ATEM",
"name": "Google Drive (the saved switcher files)"
},
{
"kind": "launchagent",
"label": "org.waterschurch.checklist-build-runner",
"name": "Gitea runner (not the panel)",
"watched": false
},
{
"kind": "launchagent",
"label": "org.waterschurch.checklist-drive-backup",
"name": "checklist backup (not the panel)",
"watched": false
},
{
"kind": "launchagent",
"label": "org.waterschurch.checklist-weekly-health",
"name": "checklist health (not the panel)",
"watched": false
},
{
"kind": "disabled",
"label": "org.waterschurch.translate",
"name": "Church Translate (must NOT run here)"
}
],
"networks": [
{
"iface": "en0",
"use": "LAN"
},
{
"iface": "en1",
"use": "LAN"
},
{
"iface": "en17",
"use": "Dante"
},
{
"iface": "en20",
"use": "Netgear management"
}
]
},
"prop": {
"ssh": "napropresenter@10.1.14.225",
"name": "ProPresenter Mac",
"os": "mac",
"role": "ProPresenter, its stage and Prop TV pages, Dante sound card",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "ProPresenter",
"name": "ProPresenter (newest installed)",
"http": "http://10.1.14.225:1025/"
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "NA-ProPresenter-Mac"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
},
{
"kind": "midi_session",
"name": "NA ProP"
}
]
},
"tracks": {
"ssh": "waterschurchmedia@10.1.3.227",
"name": "Tracks Mac",
"os": "mac",
"role": "Ableton (tracks and FX lighting cues), Dante sound card",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "Live",
"name": "Ableton Live 11 Suite"
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "NA-Tracks"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
},
{
"kind": "midi_session",
"name": "NA Tracks"
}
]
},
"translation": {
"ssh": "studio@10.1.7.39",
"name": "NA Translation",
"os": "mac",
"role": "Church Translate, Dante sound card",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "Church Translate",
"name": "Church Translate"
},
{
"kind": "launchagent",
"label": "org.waterschurch.translate.engine",
"name": "the translation engine",
"watched": false
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "NA-Translation"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
}
]
},
"studiob": {
"ssh": "studiob@10.1.13.175",
"name": "Studio B Mac Studio",
"os": "mac",
"role": "Pro Tools",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "Pro Tools",
"name": "Pro Tools"
},
{
"kind": "helper_solo",
"label": "org.waterschurch.status-panel.solo-mode",
"name": "the Pro Tools solo-mode helper"
},
{
"kind": "midi_session",
"name": "Studio B Mac Studio",
"peer_of": "NA Tracks"
}
]
},
"lighting": {
"ssh": "media@10.1.10.206",
"name": "Lighting PC",
"os": "windows",
"role": "Vista, Resolume Arena, rtpMIDI",
"pingable": false,
"notes": "Keep the network profile on Public: rtpMIDI's Bonjour rules only allow Public.",
"runs": [
{
"kind": "sshd"
},
{
"kind": "task",
"name": "Start Vista",
"exe": "Vista.exe"
},
{
"kind": "task",
"name": "Start Arena",
"exe": "Arena.exe"
},
{
"kind": "task",
"name": "Start rtpMIDI",
"exe": "rtpMIDI.exe"
},
{
"kind": "service",
"name": "rtpMIDIService"
},
{
"kind": "artnet",
"name": "Vista Art-Net",
"source": "10.1.10.206"
}
],
"manual_done": {
"public_profile": {
"by": "Chris",
"on": "2026-10-08"
},
"vista_autoload": {
"by": "Chris",
"on": "2026-10-08"
}
}
},
"livestream": {
"ssh": "media@10.1.9.126",
"os": "windows",
"mac": "6c:24:08:d7:fb:57",
"wake_broadcast": "10.1.255.255",
"name": "LiveStream PC",
"role": "OBS (YouTube)",
"runs": [
{
"kind": "sshd"
},
{
"kind": "task",
"name": "Start OBS",
"exe": "obs64.exe",
"elevated": true
}
],
"manual_done": {
"bios_wol": {
"by": "Chris",
"on": "2026-10-08"
}
}
},
"bibletv": {
"ssh": "media@10.6.7.13",
"os": "windows",
"name": "Bible TV PC",
"role": "the Bible app on the sanctuary TV",
"pingable": false,
"notes": "Wi-Fi only; Ethernet recommended. Wi-Fi power saving is off.",
"runs": [
{
"kind": "sshd"
},
{
"kind": "task",
"name": "Start BibleApp",
"exe": "Bible App.exe",
"at_logon": true
},
{
"kind": "web",
"url": "http://10.6.7.13:8080/",
"name": "the Bible app's web page"
}
],
"manual_done": {
"wifi_power": {
"by": "Chris",
"on": "2026-10-11"
}
}
}
},
"gear": {},
"fixes": {
"propresenter": { "host": "prop", "short": "PROPRES", "label": "restart ProPresenter (newest installed)",
"run": "APP=$(ls -d /Applications/ProPresenter*.app | sort -V | tail -1); if pgrep -xq ProPresenter; then pkill -TERM -x ProPresenter; for i in 1 2 3 4 5 6 7 8 9 10; do pgrep -xq ProPresenter || break; sleep 1; done; pkill -KILL -x ProPresenter; sleep 1; fi; open \"$APP\"" },