Skip to main content

One control contract for all actors

Human, AI, scripted, and replay actors receive a permitted state view and events, then submit DjCommand intents. Actor callbacks run outside the audio thread and may be asynchronous. An AI model's inference latency does not stall transport.

Session modeExample assignment
Human vs AIHuman decks 1–2; AI decks 3–4
AI vs AISeparate versioned actors and owned resources
Cooperative B2BExplicit deck handoff between human and AI
Replay vs AIRecorded human inputs against a new AI run
ShadowAI can propose; no adapter dispatch permission

Ownership rules

Ownership applies to deck transport, channel controls, and shared resources such as crossfader or master FX. Deck ownership alone does not grant mixer ownership. Resources have one controlling actor and a monotonically increasing ownership generation.

An authorized human takeover increments that generation, revokes the previous actor, and invalidates queued commands under the old generation. Recheck generation when a command executes. A lost browser connection leaves playback running; ownership expires according to the declared session policy and returns to an unowned state. Explicit actor disable revokes pending work without stopping existing audio.

Physical gestures may originate outside the API. Where reliably observable, emit an external human-control event and transfer ownership according to policy. Hardware controls that cannot be observed cannot offer guaranteed automatic takeover; the UI must expose that limitation.

For the first slice use one local human actor. Add two competing scripted actors before model integration to validate arbitration and predictable handoffs.

See RFC 0001 for remaining decisions.