Optional ReadonlyatThe TAP POINT this node is attached to — the authored fact the arrangement is made of.
Persisting the array order alone would persist the DERIVATION and lose the declaration:
on load the placements would be re-guessed from node ids, and the operator's own move —
the compressor pulled in front of the EQ — would come back undone while the file looked
complete. The array stays in derived order for a human reading the file, but it is at
and sort that the console rebuilds from.
Optional Readonlyenabledfalse = bypassed. Absent reads as enabled.
ReadonlyidStable node id (survives reorder).
ReadonlykindThe processor role.
Optional ReadonlylabelHuman label; for insert slots the slot name (A/B/post).
Optional ReadonlyparamsThe node's controls — the source of truth (already JSON-serialisable).
Optional ReadonlysortSort among the nodes at the same at, ascending.
Optional ReadonlyuriHosted LV2 plugin URI (stages + inserts); absent = built-in/empty.
One Processor node serialised for a snapshot — the recursive-snapshot leaf of the chain-on-strip model. It IS a
Processoron disk (id/kind/label/uri/enabled + the generic ProcessorParam controls, which are already plain JSON), so a strip's processing ARRANGEMENT — which nodes it carries, in what order, each enabled or bypassed — persists as one orderedprocessors: ProcessorSnapshotJson[]. openmixer is greenfield: this is the clean shape, with no legacy mirror and no synthesise-from-old load path.IT IS
processors, NOTchain.ChannelSnapshotJson.chainis the LV2 plugin insert list (PluginSlotJson), a different and smaller thing that the mod-host controller owns; reusing the name for the arrangement would put two stores behind one key. The two ride together until the insert list is genuinely subsumed intoinsertprocessors, which is its own change with its own controller work.