WS...
Stream-- FPS
Slots0/6
AudioRX
--:--:--
// Fleet Slots
0 active / 6 slots
AVAILABLE
TouchDesigner
+Click to Connect
AVAILABLE
TouchDesigner
+Click to Connect
AVAILABLE
Scope + TD
+Click to Connect
AVAILABLE
Max/MSP
+Click to Connect
AVAILABLE
Browser
+Click to Connect
AVAILABLE
TouchDesigner
+Click to Connect
No Nodes Connected
Click “Join Maestra” in the header to connect your first TouchDesigner, browser, or Max/MSP node to the fleet.
// Scenes
Send to
Audio Analysis
Sub
65
Bass
82
Mid
45
High
73
RMS
0.76
BPM
128
DMX Lighting
Idle
CueSequenceStepProgress
Audio → Lighting
Bass threshold0.75
Trigger Cue
Controls
Color Palette
// Audio Reactive Modulation
Temporal Intensity
Source
Amount
0
Speed
Source
Amount
25
Velocity
Source
Amount
0
Gloss
Source
Amount
12
Emboss
Source
Amount
0
Halo
Source
Amount
0
Shimmer
Source
Amount
0
Depth of Field
Source
Amount
20
Opacity
Source
Amount
0
Bump
Source
Amount
35
Photorealism
Source
Amount
0

Select a slot

Transcription
Enable transcription to capture speech
No nouns extracted yet
// Live Entity Bus
Waiting for signals…
// Event Log
No events yet
// WebSocket Log
Maestra Live Ops Dashboard is a monitoring and control interface for distributed installations built on Jordan Snyder's Maestra framework. Each connected node appears as a slot with real-time status, video output, audio levels, and prompt state. Operators can speak directly into the shared prompt space, blending their input with visitor speech.

Maestra is the underlying coordination layer, developed during Jordan Snyder's time as VP of Platform at Meow Wolf, where it ran across all three permanent installations. Imagine four projectors, two audio zones, and three sensor stations across a venue connected through the Maestra network. Devices register themselves, sync shared state, advertise streams (NDI, Syphon, Spout), and receive commands via REST, WebSocket, or MQTT. Each device runs a lightweight client — TouchDesigner, Max/MSP, Arduino, or a browser — that talks to the Maestra server.

The TouchDesigner TOX and Maestra Live Ops Dashboard are released under AGPL-3.0, with dual licensing available for commercial deployments.

Artist / Technical: kristabluedoor@gmail.com ·  Curatorial / Institutional: chaoscontemporarycraft@gmail.com
// How You'd Use This
Multi-Screen VJ Set
Each screen runs its own TD + Scope instance doing real-time AI generation. Maestra syncs scene changes, prompt updates, and color palettes across every machine. One state push switches the whole venue.
Gallery Installation
Register each station as an entity. Sync brightness based on time of day, coordinate color transitions, advertise NDI streams so curators can monitor every feed from a single dashboard.
Festival Projection Mapping
Multiple building facades with different TD machines. Maestra manages scene changes across the fleet — one API call switches every projector to the next act. Heartbeats alert you if any machine drops.
# In TouchDesigner after dropping the Maestra TOX into your project:

maestra = op('maestra').ext.MaestraExt

# Register this machine with the fleet
maestra.Connect()  # uses Entity ID + Server URL from custom pars

# Push state every connected client sees the update
maestra.UpdateState({'brightness': 75, 'scene': 2, 'color': [0.8, 0.2, 1.0]})

# Advertise your NDI output so other machines can discover it
maestra.AdvertiseStream(name='Stage Visuals', stream_type='ndi', protocol='ndi')

# From another machine discover what's available
streams = maestra.ListStreams(stream_type='ndi')
// Cloud Nodes — Scope / Daydream API
If you're using Scope or the Daydream API for your project, use this tab to test and select your connection before show day. Decentralized GPU routing can vary — this lets you audition nodes day-of and bring the best ones into the main dashboard.
// GPU Node Selector
Preview each node — select the best one to lock in as your active source
With decentralized GPU, once you commit to a node you're locked to that instance. Preview all available nodes here before committing — check stream quality, latency, and FPS. Hit Set Active to route that node's output to your main Krista1 slot.

Press Preview

Press Preview

Press Preview

Enter URL below

Enter URL below

Enter URL below

How Scope Fits In
Scope runs on a single machine — it takes a video source and transforms it in real-time using AI diffusion models. Maestra runs across machines — it coordinates state and streams between devices. They solve different problems, and together they let you run coordinated AI-generated visuals across an entire venue.
                       MAESTRA SERVER
        state sync  stream registry  heartbeat monitor
             REST API    NATS    MQTT    WebSocket

 MACHINE A              MACHINE B              MACHINE C

  Scope                  Scope                  TouchDesigner
  (AI diffusion)         (AI diffusion)         (generative)
      NDI out                    NDI out                    NDI out

  TouchDesigner         TouchDesigner         projector out
  + Maestra TOX         + Maestra TOX         + Maestra TOX
  projector out          projector out
01
Scope Generates Locally
Each machine runs Scope with its own GPU. Camera or media in, AI-transformed video out. Scope outputs via NDI — TouchDesigner picks it up with an NDI In TOP. Scope doesn't know about other machines.
02
Maestra Coordinates the Fleet
The TOX in each TD instance registers with the Maestra server. When you push a state change — scene: 3, color: [0.8, 0.2, 1.0] — every connected machine receives it.
03
Streams Stay Discoverable
Each machine advertises its NDI output through Maestra's stream registry. A monitor station can discover all streams on the network — no manual IP hunting. Heartbeats tell you instantly if a machine drops.
# Example: Maestra state change triggers Scope prompt update via OSC

def onValueChange(par, prev):
    if par.name == 'Scene':
        scene = par.eval()
        prompts = {0: 'ethereal crystal cave, bioluminescent', 1: 'baroque gold cathedral, dramatic lighting'}
        op('scope_osc_out').sendOSC('/scope/prompt', prompts.get(scene, ''))
Custom Parameters
Connection
Entity ID
Server URL
API Key
Auto Connect
Connect / Disconnect
Status (read-only)
Heartbeat Interval
State
Brightness (0–100)
Opacity (0–1)
Color (RGB)
Speed (0–10)
Scene (int)
Custom State JSON
Push / Pull State
Streams
Stream Name
Stream Type
NDI / Syphon / Spout / RTMP / SRT / WebRTC
Protocol
Address / Port
Advertise / List Streams
Active Stream ID
Gateways
OSC In / Out Port
OSC Prefix
WebSocket Enable / Port
MQTT Enable / Broker / Port
Internal Operators
MaestraExt
Python extension with Connect(), Disconnect(), UpdateState(), PushCurrentState(), PullState(), AdvertiseStream(), ListStreams(), StreamHeartbeat(). Auto-connects on start if enabled. State params auto-push on value change with debounce.
Infrastructure
heartbeat_timer — Timer CHOP, auto-heartbeat every N seconds
par_exec — Parameter Execute DAT
log — Table DAT, rolling activity log
streams_table — Table DAT, discovered streams
info — Info CHOP, component monitoring
Auto-Connect Defaults
Connection Parameters
Auto Connect: true (ON by default)
Auto Discover: true (ON by default)
Server URL: http://192.168.128.115:8080
Entity ID: Auto-generated from slot name
Stream Path: /ws
TOX Custom Parameters
Serverurl — Gallery Maestra server address
Entityid — Unique identifier for this node
Autoconnect — Toggle automatic connection on load
Autodiscover — Toggle mDNS/broadcast discovery
Connection Flow
1. Attempt auto-discovery (mDNS probe)
2. Fallback to http://192.168.128.115:8080
3. Generate entity ID if not provided
4. Register entity via REST API
5. Start heartbeat loop (5s interval)
6. Advertise streams if available
Artists can drop the TOX into TouchDesigner and it will connect automatically to the gallery Maestra instance — no server URLs or entity IDs needed.
# Quick start — auto-connects to gallery Maestra:
maestra = op('maestra').ext.MaestraExt
# Auto-connect is ON by default, no config needed!
# Override if needed:
maestra.SetServerUrl('http://192.168.128.115:8080')
maestra.SetEntityId('my_custom_node')

# Normal operations:
maestra.UpdateState({'brightness': 50, 'scene': 2})
maestra.AdvertiseStream(name='My NDI', stream_type='ndi')
streams = maestra.ListStreams()