openmixer — generated API reference
    Preparing search index...

    Interface ConsoleSnapshot

    The full console body — every addressable element of state.

    interface ConsoleSnapshot {
        allocation?: ConsoleAllocation;
        bpm?: number;
        buses: readonly BusSnapshotJson[];
        channels: readonly ChannelSnapshotJson[];
        cue?: CueSnapshotJson;
        dcas: readonly DcaSnapshotJson[];
        expectedHardware?: HardwareManifest;
        headAmps?: readonly HeadAmpPortJson[];
        matrix: readonly MatrixSnapshotJson[];
        muteGroups: readonly MuteGroupSnapshotJson[];
        outputs: readonly OutputSnapshotJson[];
        pages?: readonly SurfacePageJson[];
        pendingAllocation?: ConsoleAllocation;
        preferences?: SurfacePreferencesJson;
        reacSegments?: readonly ReacSegmentConfigJson[];
        safety?: SafetySnapshot;
        speakerAlign?: {
            mic?: ChannelRefJson;
            reference?: ChannelRefJson;
            referenceSide?: ChannelRole;
        };
        stripOrder?: readonly ChannelRefJson[];
        surfaces: readonly SurfaceMapJson[];
        talkback?: { micRoute?: ChannelRefJson };
    }
    Index
    allocation?: ConsoleAllocation

    The console the show was mixed on — the DECLARATION the desk was built from, not a derivation of it (ruling 2026-08-14: "a session must store its allocation, otherwise how do we restore it?").

    The channel lists above say which strips existed; only this says how big the console they lived on WAS. That distinction is load-bearing because the native summing lanes are sized at allocation time: restoring a 24-input show onto an 8-input desk by growing the strip list alone is refused by MAIN itself (bus main/1 is full (16 input slots)), so the size has to be re-declared through StructuralDsp.applyAllocation — the one doorway that builds strips and sizes their bus lanes together — before any value lands.

    Absent on sessions saved before this field: the console keeps the size it booted with and restores what fits, which is the behaviour those sessions were saved under.

    bpm?: number

    Console-wide tempo (BPM) for tempo-synced FX. Optional + additive: absent → the default.

    buses: readonly BusSnapshotJson[]
    channels: readonly ChannelSnapshotJson[]

    The cue bus + console-wide cue state (mode, monitor-output designation) — the cue/solo-to-monitor spec. Optional + additive: absent on sessions saved before the feature, which restore to the PFL default with no monitor output.

    dcas: readonly DcaSnapshotJson[]
    expectedHardware?: HardwareManifest

    The expected hardware at save time (issue #154) — stageboxes, soundcards, control surfaces. On restore the server diffs it against what is present and surfaces a missing-hardware summary. Optional + additive: absent on sessions saved before this field.

    headAmps?: readonly HeadAmpPortJson[]

    The desk's DESIRED analog head-amp — phantom / pad / gain — keyed by PHYSICAL INPUT, not by channel (the one-physical-input and head-amp-by-port laws; input-patchbay.ts, spec §6c: "the kept value has one store, and it is the session file"). A channel's own phantom / pad / headAmpGainDb fields already round-trip the values for a port CURRENTLY sourced by that channel; this block is what survives a re-patch or a restart for a port that is not — a channel repatched away from a preamp still owes it the phantom it turned on, and before this block that fact lived only in the running process's memory.

    Absence is a fact, exactly like stripOrder: a session with no headAmps block restores nothing and asserts no default onto any preamp — the house floor (/console/defaults) is a never-seen port's answer, never this block's.

    matrix: readonly MatrixSnapshotJson[]
    muteGroups: readonly MuteGroupSnapshotJson[]

    Mute groups (membership + live active flag), captured/restored like dcas.

    outputs: readonly OutputSnapshotJson[]
    pages?: readonly SurfacePageJson[]

    The operator's USER pages (SurfacePageJson) — show content, beside the look above. Absent restores the EMPTY set (never the previous session's pages): a show that built no page has none, and a page is never invented.

    pendingAllocation?: ConsoleAllocation

    The shape the console will be built at on its NEXT BOOT — an accepted reshape waiting for a restart (2026-09-14-console-allocation.md §4(d)). Absent when none is scheduled.

    It lives HERE, beside allocation, and not in a store of its own: the session is the one place a console's definition is recorded, and "the shape it is" and "the shape it will be" are two facts about the same thing. A second store for the next shape is the second ledger the house forbids — two answers to "how big is this desk", neither announcing the other.

    Nothing applies it live. The boot seed reads it AHEAD of allocation and builds at it, grow or shrink alike, because a fresh build has no mid-show ratchet to satisfy; on that boot it becomes the declared shape and this field goes away.

    The operator's view preferences — the desk's LOOK (see SurfacePreferencesJson). Absent means the console never had any set, which seeds DEFAULT_SURFACE_PREFERENCES; absence is a fact, not a migration.

    reacSegments?: readonly ReacSegmentConfigJson[]

    The REAC segments' DESIRED config (ReacSegmentConfigJson), keyed by the segment's own /reac/segment/{name} address. Absent restores NOTHING ASSERTED — the daemon's best-drivable default stands — never a hardcoded rate and never the previous show's.

    Gig-safety pre-loads (spares, mute groups, panic targets). Optional and additive — a session written before this field is read back with no safety config (see emptySafety), so the schema version is unchanged.

    speakerAlign?: {
        mic?: ChannelRefJson;
        reference?: ChannelRefJson;
        referenceSide?: ChannelRole;
    }

    The loudspeaker-alignment SETUP — which channel carries the measurement microphone and which output is the reference (/console/speakerAlign, spec 2026-08-31-smart-alignment.md §9b, amended 2026-09-08 — issue #838: a console restart answered {mic:null,reference:null} and every loudspeaker row read no-mic). A show fact like talkback's mic route, not a view choice: "the mic is on input 9" describes how THIS alignment session was set up, for whoever stands at the desk next. Absent restores UNPICKED, never the previous show's picks.

    Type Declaration

    • Optional Readonlymic?: ChannelRefJson
    • Optional Readonlyreference?: ChannelRefJson
    • Optional ReadonlyreferenceSide?: ChannelRole

      WHICH SIDE of the reference output is the reference BOX (#845) — absent reads as 'L', which is what a stereo desk has always meant by "aligned to MAIN".

    stripOrder?: readonly ChannelRefJson[]

    The DESK's strip order — the operator's reordering of the /channel roster, one order for every client (ruling 2026-08-11). The stored fact is the OVERRIDE only: absent means the operator never reordered, which reads as the allocation's natural order — the derivation is never stored. Strips the loaded console does not hold are dropped on read, and ones the override does not name append in natural order; the override itself is never rewritten.

    surfaces: readonly SurfaceMapJson[]
    talkback?: { micRoute?: ChannelRefJson }

    The talkback MIC route — a show fact (operator ruling 2026-08-19), unlike the generator routes, which are instrument state the assignment row re-declares at runtime and which a session therefore never carries. Optional + additive: absent restores an unrouted mic.