Skip to main content
Set-wide mixing: return tracks, bulk mix application, profile-driven placement advice, and the mixing-knowledge reference.

Command line

mix returns

List the set’s return tracks (the names —send accepts)

mix apply

Apply a whole mix at once, keyed by part type
Mix entry as part_type=dB, optionally with pan and sends: pad=-12:pan=-0.3:send=A-Reverb=-9. Repeatable.
Path to the .vibrai file (default: <current-directory-name>.vibrai in the working directory). Without one, binding falls back to track-name hints.

mix profiles

List the available mix profiles

mix suggest

Suggest level, pan, depth and corrective moves per part type
Also print the corrective EQ and compressor moves for each part.
Also print the profile’s technique blocks (compressor setup, serial vs parallel compression, harshness check, drum impact).
Mix profile to use (default: default). See vibrai mix profiles.
Part type to include, e.g. bass. Repeatable. Omit to use the loaded project’s parts, or the whole profile when there is none.
Path to the .vibrai file (default: <current-directory-name>.vibrai in the working directory).

mix apply-profile

Apply a mix profile’s level, pan and depth to the open set
Return-track name carrying the depth reverb, e.g. A-Reverb (see vibrai mix returns). Without it, level and pan are applied and depth is reported as a warning rather than written.
Report what would be written without writing it.
Mix profile to use (default: default). See vibrai mix profiles.
Part type to include, e.g. bass. Repeatable. Omit to use the loaded project’s parts, or the whole profile when there is none.
Path to the .vibrai file (default: <current-directory-name>.vibrai in the working directory).

mix advice

Look up mixing guidance: compression, reverb, low-end, tool choice, boxy
compression, reverb, low-end, tool-choice or boxy. Omit to list the topics.
Narrow the topic: a compression source (kick) or part type (bd), or a reference entry (pre-delay, phase-cancellation).

mix compress

Write a source’s compression starting points onto a compressor
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …).
required
Device ID, 1-based chain position, or a name substring — the compressor to write to.
Compression source: kick, snare, bass, vocal, guitar, piano — or a part type such as bd.
Report the writes without making them. The device is still read, so the skips are real.

mix fix

Write a diagnostic’s corrective moves onto the open set
required
The diagnostic to fix, e.g. boxy.
Print the writes without making them. Needs no confirmation.
Confirm the write (MCP confirm=true equivalent).

mix fault

Deliberately make the mix worse by introducing a diagnostic’s problem, so you can hear it before the fix
required
The diagnostic whose problem to introduce, e.g. boxy. Deliberately makes the mix worse.
Print the writes without making them. Needs no confirmation.
Confirm the write (MCP confirm=true equivalent).
Write the remedy’s corrective values instead of the fault’s. Reverses the fault; does not restore the pre-fault state — any inserted EQ Eight stays.

MCP tools

get_track_mixer

Read a track’s mixer state: volume (both dB and Live’s raw 0.0-1.0), pan, mute, solo, arm, and every send with its return-track name. Address the track by its liveset_id handle from list_tracks (e.g. trk_42).
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim; not a position number.

set_track_mixer

Set any subset of a track’s mixer state. Omitted fields are left untouched. Volume takes EITHER volume_db (preferred, e.g. -6) OR volume_raw (Live’s 0.0-1.0) — passing both is an error. A fader runs to +6 dB (unity at raw 0.85); a send runs to 0 dB. Sends are addressed by return-track name as “name=dB” pairs, e.g. [“A-Reverb=-12”]. Returns the post-write state, so the reported volume is what actually landed rather than what was requested.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim; not a position number.
Nullable`1
Volume in dB, e.g. -6.0. Maximum +6. Mutually exclusive with volume_raw.
Nullable`1
Volume as Live’s normalized 0.0-1.0 (0.85 is unity). Mutually exclusive with volume_db.
Nullable`1
Pan, -1.0 (hard left) to 1.0 (hard right).
Nullable`1
Mute the track.
Nullable`1
Solo the track. Solo is additive — Live does not clear other soloed tracks.
Nullable`1
Arm the track for recording. Group, return and master tracks cannot be armed.
String[]
Send levels as “return_name=dB” pairs, e.g. [“A-Reverb=-12”, “B-Delay=-18”]. Use list_returns to see the available names.

apply_mix

Apply a whole mix in one call, keyed by part type. Each entry is “part_type=dB” (e.g. “bass=-6”), optionally with pan and sends: “pad=-12:pan=-0.3:send=A-Reverb=-9”. Resolves part types to tracks via the loaded project when there is one (exact), or track-name hints when there isn’t (heuristic) — the result reports which path ran. Part types with no matching track come back as warnings, not errors.
String[]
required
Mix entries, e.g. [“bass=-6”, “lead=-3”, “pad=-12:send=A-Reverb=-9”].
String
Path to the .vibrai project to bind part types against (defaults to <current-directory-name>.vibrai in the working directory). When no project is found, binding falls back to track-name hints and says so.

list_returns

List the set’s return tracks with their index and name. These names are what set_track_mixer and apply_mix accept in their sends arguments.

list_mix_profiles

List the available mix profiles. A profile carries starting-point placement (level, pan, depth) per part type plus corrective EQ and dynamics advice. Drop a file at ~/.vibrai/mix-profiles/<name>.yaml to add or shadow one.

suggest_mix

Suggest a mix without changing anything. Returns, per part type: a starting level in dB, a pan position, a depth tier and the reverb send that expresses it, plus the corrective EQ moves and compressor settings that belong on that part — each with the reason attached. Also returns the profile’s global rules (headroom, the 2-5 kHz harsh band, return-track guidance) and its technique blocks (serial vs parallel compression, compressor setup, harshness check). Part types come from parts if given, else from the loaded project, else the whole profile. The EQ/compressor numbers are DISPLAY units and are advice, not a write: apply them with set_device_param and check the display_value it reports back. Use apply_mix_profile to apply the level/pan/send half for real.
String
Profile name (default: “default”). See list_mix_profiles.
String[]
Part types to advise on, e.g. [“bass”, “lead”, “hi_hat”]. Omit to use the loaded project’s parts, or the whole profile when there is none.
String
Path to the .vibrai project whose part types to advise on (defaults to <current-directory-name>.vibrai in the working directory).

apply_mix_profile

Apply a mix profile’s PLACEMENT to the open set: level and pan per part type, plus a reverb send when reverb_return names a return track. Part types resolve to tracks exactly as apply_mix does — through the loaded project when there is one, by track-name hint when there isn’t — and the result says which path ran. The profile’s EQ and compressor advice is NOT applied; suggest_mix reports it so you can apply it with set_device_param, where Live reports back the display_value that landed. Pass dry_run to see what would be written.
String
Profile name (default: “default”). See list_mix_profiles.
String[]
Part types to apply, e.g. [“bass”, “lead”]. Omit to use the loaded project’s parts, or the whole profile when there is none.
String
Return-track name that carries the depth reverb, e.g. “A-Reverb” (see list_returns). Without it, level and pan are applied and depth is reported as a warning rather than written.
String
Path to the .vibrai project to bind part types against (defaults to <current-directory-name>.vibrai in the working directory).
Boolean
Report what would be written without writing it.

get_mix_advice

Look up Vibrai’s mixing knowledge. Topics: “compression” (compressor starting points per source, plus the fast/slow attack continuum), “reverb” (what each parameter does to the tail), “low_end” (the five ways kick and bass fight, and the fix for each), “tool_choice” (whether a problem wants EQ, compression, dynamic EQ or automation), “boxy” (low-mid buildup at 200-500 Hz — the one topic with an apply path, via apply_mix_fix / inject_mix_fault). Call with no topic for the index. Narrow with subject — a compression source (“kick”) or part type (“bd”), or a reference entry (“pre_delay”, “phase_cancellation”). This is guidance with defaults, not measurement: ~/.vibrai/mix-advice/<topic>.yaml overrides any of it.
String
One of compression, reverb, low_end, tool_choice, boxy. Omit for the topic index.
String
Narrows the topic: a compression source (“kick”) or part type (“bd”), or a reference entry id (“pre_delay”).

apply_compression_preset

Write a source’s compression starting points — Attack, Release and Ratio — onto a compressor already loaded on a track. Source is a name (“kick”, “vocal”, “bass”, “snare”, “guitar”, “piano”) or a part type that maps to one (“bd”, “snare”, “bass”). Threshold is deliberately NOT written: it depends on the incoming level, which no table can know. A parameter the device does not expose, or whose units clearly differ (a Release choice list in seconds against a millisecond table), is skipped with a warning rather than clamped — the call fails only if nothing at all is writable. Pass dry_run to see the writes without making them. Use get_mix_advice for the ranges these starting points sit in.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim; not a position number.
String
required
Device ID, 1-based chain position, or a name substring — the compressor to write to.
String
required
Compression source: kick, snare, bass, vocal, guitar, piano — or a part type such as “bd”.
Boolean
Report the writes without making them. The device is still read, so the reported skips are real.

apply_mix_fix

Write a diagnostic’s corrective moves onto the open set. Vibrai does NOT detect the problem — it has no audio analysis and cannot hear anything. You name the symptom; this applies the prescribed fix. Topic is a diagnostic slug (“boxy”). Targets are chosen structurally from part type, never from sound. Destructive: writes device parameters — requires confirm=true (parity with the CLI’s mix fix --yes); refuses without writing anything otherwise. Pass dry_run to see every write first, which needs no confirmation. Values are absolute, so applying twice equals applying once. It REUSES an EQ Eight already on the track and OVERWRITES the band it targets — a shelf the producer put on that band is replaced, and nothing restores it — and inserts an EQ Eight on tracks that have none. Both are named in the result’s warnings, on the dry run as well as the write. The whole diagnostic is wrapped in one native Live undo step when the Python bridge is available; the result says so when it is not. Call get_skill first to load the Vibrai operational playbook.
String
required
The diagnostic slug, e.g. “boxy”. See get_mix_advice for the topic index.
Boolean
Confirm the write (CLI —yes equivalent). Must be true unless dry_run is true.
Boolean
Report the writes without making them. Needs no confirmation.

inject_mix_fault

DELIBERATELY introduce a diagnostic’s problem into the open set, so a producer can hear it before the fix. Vibrai does NOT detect the problem — it has no audio analysis and cannot hear anything; you name the symptom via topic (a diagnostic slug, e.g. “boxy”). This makes the mix WORSE on purpose — never call it unless the user explicitly asked to hear the problem. Destructive: writes device parameters — requires confirm=true (parity with the CLI’s mix fault --yes). Pass clear=true to write the remedy’s corrective values instead, which is how a fault is reversed; note that this is NOT a restore to the pre-fault state — any EQ Eight inserted stays inserted, and the remedy’s values are corrective, not neutral. It also REUSES an EQ Eight already on the track and OVERWRITES the band it targets, which the result’s warnings name. Values are absolute. The whole injection is wrapped in one native Live undo step when the Python bridge is available; the result says so when it is not. Call get_skill first to load the Vibrai operational playbook.
String
required
The diagnostic slug, e.g. “boxy”.
Boolean
Confirm the write (CLI —yes equivalent). Must be true unless dry_run is true.
Boolean
Write the remedy’s corrective values instead of the fault’s. Reverses the fault; does not restore the pre-fault state — any inserted EQ Eight stays.
Boolean
Report the writes without making them. Needs no confirmation.