Vista Cues 1.0.0: which Vista 3 cue lists are live, from the network MIDI that fires them
Vista 3 reports nothing about what it is playing — its OSC only takes commands — so a booth with no lighting operator can't see the lighting computer. ProPresenter, the tracks rig and Companion fire Vista's cue lists with notes over macOS network MIDI sessions, and a session sends every note to every participant, so the module joins those sessions as one more listener (RTP-MIDI in plain Node, no helper) and hears what Vista hears. The admin's cue sheet turns notes into Go / release / pause / back / flash on named lists. Sheets with no release notes use [groups]: a Go replaces its group's live list, and the first group is the headline — the main scene — which takes over the look and clears the FX below it. The tile shows the headline list large with how long ago and who fired it, the other live lists as tags, recent notes, and which senders are connected. The module invites each configured sender and keeps re-inviting, accepts invitations from anyone, and advertises itself over Bonjour on macOS. A busy port (a config save re-initing before the old sockets close) is retried rather than failing. Default session port is 5040/5041, clear of the 5009 session on NA Ingest. tools/vista-midi-mock.js is a stand-in sender for development; modules/vista-cues/vista.test.js covers the parser, packet decoding and real loopback sessions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"id": "vista-cues",
|
||||
"name": "Vista Cues",
|
||||
"version": "1.0.0",
|
||||
"proddash": ">=1.5.0",
|
||||
"description": "Which Vista 3 cue lists are live: hears the network MIDI that ProPresenter and Tracks send Vista",
|
||||
"permissions": [
|
||||
{
|
||||
"kind": "local-network",
|
||||
"reason": "Joining the network MIDI sessions that fire Vista's cue lists"
|
||||
}
|
||||
],
|
||||
"client": "client.js",
|
||||
"server": "server.js",
|
||||
"style": "style.css",
|
||||
"minSize": {
|
||||
"w": 2,
|
||||
"h": 1
|
||||
},
|
||||
"defaultSize": {
|
||||
"w": 5,
|
||||
"h": 4
|
||||
},
|
||||
"configSchema": {
|
||||
"source1Name": {
|
||||
"type": "string",
|
||||
"label": "Name",
|
||||
"default": "ProPresenter",
|
||||
"group": "First sender",
|
||||
"help": "What the tile calls notes from this machine."
|
||||
},
|
||||
"source1": {
|
||||
"type": "endpoint",
|
||||
"label": "Session",
|
||||
"default": {
|
||||
"host": "",
|
||||
"port": 5004
|
||||
},
|
||||
"group": "First sender",
|
||||
"help": "The Mac whose network MIDI session sends Vista its notes, and that session's port (Audio MIDI Setup → Window → Show MIDI Studio → Network; usually 5004)."
|
||||
},
|
||||
"source2Name": {
|
||||
"type": "string",
|
||||
"label": "Name",
|
||||
"default": "Tracks",
|
||||
"group": "Second sender"
|
||||
},
|
||||
"source2": {
|
||||
"type": "endpoint",
|
||||
"label": "Session",
|
||||
"default": {
|
||||
"host": "",
|
||||
"port": 5004
|
||||
},
|
||||
"group": "Second sender",
|
||||
"help": "Leave the host empty if this machine joins us from its own side instead."
|
||||
},
|
||||
"source3Name": {
|
||||
"type": "string",
|
||||
"label": "Name",
|
||||
"default": "Companion",
|
||||
"group": "Third sender"
|
||||
},
|
||||
"source3": {
|
||||
"type": "endpoint",
|
||||
"label": "Session",
|
||||
"default": {
|
||||
"host": "",
|
||||
"port": 5004
|
||||
},
|
||||
"group": "Third sender",
|
||||
"help": "Companion on this machine counts too: its network session's host and port (this Mac's own name works)."
|
||||
},
|
||||
"cueLists": {
|
||||
"type": "text",
|
||||
"label": "Cue lists",
|
||||
"default": "",
|
||||
"group": "Cue lists",
|
||||
"help": "One per line from the cue sheet: 60 = Walk-in · 61 release Walk-in · 127 release all · 30 flash Blinder 1 (momentary). A line like [Colors] starts a group: a Go in a group replaces that group's live list; the first group is the tile's headline. Also pause, back, note names, ch2:64, pc5, and \"quotes\" around a name starting with one of those words."
|
||||
},
|
||||
"middleC": {
|
||||
"type": "select",
|
||||
"label": "Middle C",
|
||||
"default": "C3",
|
||||
"options": [
|
||||
{
|
||||
"value": "C3",
|
||||
"label": "C3 (Ableton, Yamaha)"
|
||||
},
|
||||
{
|
||||
"value": "C4",
|
||||
"label": "C4 (Logic, scientific)"
|
||||
}
|
||||
],
|
||||
"group": "Cue lists",
|
||||
"help": "Only matters for note names in the sheet. Note 60 is middle C either way."
|
||||
},
|
||||
"headTakesOver": {
|
||||
"type": "switch",
|
||||
"label": "Main group takes over",
|
||||
"default": true,
|
||||
"group": "Cue lists",
|
||||
"help": "On: a Go in the sheet's first [group] (the main scene) clears every other live list, as a new scene takes over the look. FX fired after it layer on top again."
|
||||
},
|
||||
"exclusive": {
|
||||
"type": "switch",
|
||||
"label": "Go releases others",
|
||||
"default": false,
|
||||
"group": "Cue lists",
|
||||
"help": "On: a Go replaces every other live list, groups or not. Leave off when lists stack, and use groups instead."
|
||||
},
|
||||
"sessionName": {
|
||||
"type": "string",
|
||||
"label": "Session name",
|
||||
"default": "ProdDash Lighting",
|
||||
"group": "This machine",
|
||||
"help": "How ProdDash appears in other Macs' Audio MIDI Setup Directory."
|
||||
},
|
||||
"sessionPort": {
|
||||
"type": "number",
|
||||
"label": "Session port",
|
||||
"default": 5040,
|
||||
"min": 1024,
|
||||
"max": 65534,
|
||||
"group": "This machine",
|
||||
"help": "UDP; this one and the next are used. Anything not already taken by a MIDI session on this machine."
|
||||
},
|
||||
"advertise": {
|
||||
"type": "switch",
|
||||
"label": "Bonjour",
|
||||
"default": true,
|
||||
"group": "This machine",
|
||||
"help": "List this machine in Audio MIDI Setup's Directory on the network (macOS)."
|
||||
}
|
||||
},
|
||||
"configGroups": {
|
||||
"First sender": {
|
||||
"help": "ProdDash joins the senders' network MIDI sessions, like Vista does, so it hears every note Vista hears. On each sender, in Audio MIDI Setup → MIDI Network Setup, the session must be enabled and 'Who may connect to me' set to Anyone. Or skip the address and connect to \"ProdDash Lighting\" from that Mac's Directory instead."
|
||||
},
|
||||
"This machine": {
|
||||
"collapsed": true
|
||||
}
|
||||
},
|
||||
"instanceSchema": {
|
||||
"showActive": {
|
||||
"type": "switch",
|
||||
"label": "Other lists",
|
||||
"default": true
|
||||
},
|
||||
"showRecent": {
|
||||
"type": "switch",
|
||||
"label": "Recent",
|
||||
"default": true
|
||||
},
|
||||
"showSources": {
|
||||
"type": "switch",
|
||||
"label": "Senders",
|
||||
"default": true
|
||||
},
|
||||
"showUnmapped": {
|
||||
"type": "switch",
|
||||
"label": "Unmapped notes",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user