State and session directories

Where state lives

$XDG_STATE_HOME/openmixer          # or ~/.local/state/openmixer when XDG_STATE_HOME is unset
├── sessions/                      # whole-console saves
├── scenes/                        # named snapshots recalled during a show
├── patches/                       # saved routing patches
├── channel-configs/               # reusable per-channel processing presets
├── measurements/                  # measured plugin latency, host-local (local.json + work/)
├── stageboxes.json                # stagebox names, keyed by box identity
├── adapters.yaml                  # adapter definitions
├── network-settings.json          # persisted Setup → Network values
├── locale-settings.json           # persisted operator locale
├── clock-ownership.json           # which device the console claims as clock master
├── rme-totalmix.json              # RME TotalMix state the mixer drove
└── engine.pid                     # single-instance lock

Override the root with --state-dir or OPENMIXER_STATE_DIR. The five sub-directories are derived from it.

Everything is plain JSON (and YAML for the adapters file). You can read it, copy it and version it.

Sessions

A session is the whole console saved at once: levels, mutes, solos and sends, the buses, the matrix, DCA and mute-group membership, every plugin chain with its parameters, the routing and the surface layout. One file per session in sessions/.

Each session also records the hardware it expected at the time it was saved. A restore onto a rig that is missing a box can therefore tell the operator exactly what is absent instead of loading a console with silent channels.

The two reserved autosaves

Two session ids are reserved and overwritten rather than accumulated:

Id Written when Purpose
autosave-preload immediately before a session is loaded A restore point for "that was the wrong session"
autosave-live continuously, as the console changes What the server offers to restore after a restart

On start the server prefers the live autosave, then the most recent named session, then nothing. The reserved ids are excluded from the named-session fallback so an autosave is never mistaken for a show.

This is a convenience and occasionally a hazard: a console left in a bad state writes that bad state into the live autosave, and the next boot restores it. See a poisoned autosave session.

Scenes

Scenes are the many named snapshots an operator jumps between during a show. They live in scenes/, separately from sessions, because their lifecycle is different: a session is the rig, a scene is a moment in the set.

Channel configs

A channel config captures one channel's processing — its plugin chain and its EQ, gate and compressor — as a reusable named preset saved from one channel and applied to another. They live in channel-configs/ and travel between gigs.

Patches

Saved routing patches live in patches/. A patch is the routing alone, without the console state, which makes it the right thing to carry between rigs with the same physical I/O and different shows.

Ownership and permissions

Everything under the state directory belongs to the operator's user account and is written by the server process. It is not package-owned, no scriptlet ever touches it, and no upgrade rewrites it.

See also