Common patterns

A few combinations recur across customer projects:

Pattern 1 — Batches only

A single backend, one command per visual change. The whole project is a flat layer set tagged with batch names; switching a camera = showlayersolo?batch=FrontCam. Cheapest mental load; works well for kiosk-style or fixed-show setups where the choreography is simple.

Pattern 2 — Connectors for combined actions

The backend calls a single Connector by name, and the Connector runs a hand-authored sequence (set property → animate → start playback → wait → end). All multi-step logic lives in Composer. Best when the "what to do" is stable and only the "when to do it" comes from outside.

Pattern 3 — Script Engine for conditional logic

The backend triggers a Connector, and the Connector calls a JavaScript function. Logic ("if this, then that") lives in JavaScript inside the project. Best when conditions depend on Composer-side state (current scene, layer values, audio levels).

Pattern 4 — Hybrid (Connectors + Script Engine)

Connectors for the standard sequences, Script Engine for the exceptions. The backend doesn't need to know which Connectors invoke scripts and which don't — Composer handles the dispatching internally. Best for complex projects where most actions are predictable but a handful need conditional behaviour.

Where should logic live?

There's a real choice between putting logic outside Composer (in the calling system) and inside (in Connectors + Script Engine). Both work; the trade-off:

  • Logic outside Composer — the Composer project is dumb / declarative; the calling system orchestrates everything. Fewer moving parts inside the project, easier to understand a project on its own; the calling system is more complicated.
  • Logic inside Composer — the project is self-contained; the calling system makes simple "trigger X" calls. Operators of the calling system don't need to understand Composer; the project is more complicated.

Most production deployments end up somewhere in the middle: simple action sequences as Connectors inside Composer, with the calling system holding only the show-running logic.