openmixer — generated API reference
    Preparing search index...

    Interface OutputSnapshotJson

    An output: physical/loudspeaker-management routing + its own insert chain.

    interface OutputSnapshotJson {
        chain?: readonly PluginSlotJson[];
        fader?: FaderLevelJson;
        id: ChannelRefJson;
        locked?: boolean;
        name?: string;
        routeTo?: OutputRoute;
        unpatched?: "by-operator";
    }
    Index
    chain?: readonly PluginSlotJson[]

    Output insert chain (loudspeaker-management / crossover / limiter inserts).

    locked?: boolean

    The operator's LOCK on this output's destination (ruling 2026-09-01) — true when the destination may not be moved or taken away through a live gesture, absent at the ordinary unlocked default.

    PERSISTED, and that is the whole point of it being here: a gig protection that did not survive a restart would be gone at the exact moment it was most needed. It rides the OUTPUT, not the route, because it is an instruction about this mix's plumbing that stands whether or not the mix is currently patched — locking an unrouted output is a standing "when this is patched, it does not move".

    name?: string
    routeTo?: OutputRoute

    The routing target (persistence-by-name; never numeric ids) — the ONE destination this output feeds, or ABSENT when it is routed nowhere, which is an ordinary state a session must be able to state. An OutputRouteJson: the role-keyed sink endpoint ({L} / {R} / {L, R}) plus an optional per-destination trimDb / mute and a PER-SIDE delayMsL/delayMsR/delayMsC (#845) — the output-gain floor, so this destination's level is always controllable independently of the bus master. A stereo bus's L and R legs can address SEPARATE ports (#142). A file predating this leg-keyed shape (a positional port array) drops its output routes on load (greenfield clean break).

    unpatched?: "by-operator"

    The OPERATOR'S OWN unpatch (spec 2026-09-15 §2) — 'by-operator' when this output holds no destination because a client explicitly released it, absent for every other absence.

    PERSISTED, and that is the whole point: the console heals a dead or missing route on every graph change ("never leave MAIN unpatched"), and the ONE absence it must leave alone is the one the operator chose. A decision that did not survive a restart would be overruled by the first Node event after it. Absent on a routed output, where it would say nothing.