PresonusFatChannelSelection — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited PresonusFatChannelSelection (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Purpose: Advise AI agents on selecting the right compressor and EQ model for a given channel or mix target on the StudioLive 32SC Fat Channel.
Related files:
classID_Mapping.md — exact __classid GUIDs for scene file encodingsources.md — PreSonus reference PDFsWhen an agent needs to recommend or set a Fat Channel compressor or EQ:
classID_Mapping.md for use in scene files#### STANDARD — Live Index 0 · {870D04F7-212E-4F9C-ADBB-39A97216433F}
#### TUBE — Live Index 1 · {7F8A4262-D377-48E3-9D48-15D82C400A71}
#### FET — Live Index 2 · {1F831EC1-B8AC-4EE9-AD53-54227AF53D58}
#### BRIT_COMP — Live Index 3 · {FEF33155-7A9E-4F4E-B209-CFE86DDAFC8E}
#### CLASSIC_COMPRESSOR — Live Index 4 · {C38F9E1A-0127-4BB8-9377-40C545A50328}
#### COMP_160 — Live Index 5 · {F0BD22BB-5FE8-4279-8B05-D089B4D7B0BB}
#### EVEREST_C100A — Live Index 6 · {23F9C088-08BE-4259-9DCE-38720AE5DE73}
#### FC_670 — Live Index 7 · {85DD5632-A536-49FF-894A-9329FC1124E4}
#### RC_500_COMPRESSOR — Live Index 8 · {6A372968-AFA7-4A3F-805D-A09A4AE15777}
RC_500_EQ for a matched "RC 500 Channel Strip" workflow#### TUBE_CB — Live Index 9 · {C3C32BBC-42E2-41A7-99B5-EA1D62F897B5}
#### VT_1_COMPRESSOR — Live Index 10 · {AF35E448-40EC-4C5A-A05C-B40A5AC0A42F}
| Source | Recommended | Why |
|---|---|---|
| Kick drum | FET, COMP_160 | Fast attack, punch, transient control |
| Snare top | FET, BRIT_COMP | Crack and bite |
| Snare bottom | COMP_160, STANDARD | Clean, transparent |
| Hi-hat / overhead | RC_500_COMPRESSOR, STANDARD | Natural control |
| Room mics | FET, FC_670 | Aggressive OR vintage depth |
| Drum bus | BRIT_COMP, FC_670 | Glue and punch |
| Bass guitar DI | FET, COMP_160, TUBE_CB | Punch or warmth |
| Bass amp | TUBE_CB, CLASSIC_COMPRESSOR | Warm, smooth |
| Electric guitar | RC_500_COMPRESSOR, BRIT_COMP | Controlled, musical |
| Acoustic guitar | TUBE, TUBE_CB | Warm, natural |
| Lead vocals | TUBE, TUBE_CB, VT_1_COMPRESSOR | Smooth, warm |
| Backing vocals | CLASSIC_COMPRESSOR, STANDARD | Even, consistent |
| Keys / synth | CLASSIC_COMPRESSOR, STANDARD | Clean leveling |
| Mix bus | FC_670, VT_1_COMPRESSOR, BRIT_COMP | Glue, warmth, cohesion |
| Speech / broadcast | STANDARD, CLASSIC_COMPRESSOR | Transparent |
#### STANDARD EQ — Live Index 0 · {A0A8A068-14F0-4B04-BB6F-AF8329D0E8EE}
#### PASSIVE EQ — Live Index 1 · {C0730CBB-5135-4558-9222-C40BDBA036ED}
#### VINTAGE EQ — Live Index 2 · {E1C5E024-C5CD-473C-B08A-6EC177812E01}
#### ALPINE_EQ_550 — Live Index 3 · {CBDD0DD3-C5EF-495A-B4C7-92EC5E8FE146}
#### BAXANDALL_EQ — Live Index 4 · {B4D3497E-4B1C-4CFA-B859-A918C17CDA03}
#### RC_500_EQ — Live Index 5 · {63ADDF9B-0EC7-430A-AEBE-62B4CB5FBBD6}
RC_500_COMPRESSOR for a matched channel strip workflow#### SOLAR_69_EQ — Live Index 6 · {03819C3F-DC16-4B7B-B521-14B4042192F2}
#### TUBE_EQ — Live Index 7 · {09B38119-3945-40D1-BA33-2FA19620DAB0}
#### VINTAGE_3_BAND_EQ — Live Index 8 · {4635DE88-C3D2-4645-BC4D-8DFD116D6914}
#### VT_1_EQ — Live Index 9 · {A0FAF452-D664-4BA2-90FC-6BD4AC469B29}
VT_1_COMPRESSOR for a matched tube channel strip#### BUS_EQ — Line index N/A (bus/aux/sub only) · {4B92A91C-C6FB-4F0F-AE51-841378E4F9CF}
| Source / Goal | Recommended | Why |
|---|---|---|
| Surgical notch / feedback cut | STANDARD | Precise, narrow, transparent |
| Gentle tonal warmth / air | PASSIVE, BAXANDALL_EQ | Broad musical curves |
| Rock/metal drums | ALPINE_EQ_550, SOLAR_69_EQ | Punch and presence |
| Vintage / classic vibe | VINTAGE, SOLAR_69_EQ, TUBE_EQ | Character EQ |
| British warmth (Neve style) | SOLAR_69_EQ | Classic British console sound |
| American punch (API style) | ALPINE_EQ_550 | Fast, open, punchy |
| Bass drum low-end | PASSIVE | Pultec trick for bottom |
| Vocals — warmth and air | TUBE_EQ, VT_1_EQ, SOLAR_69_EQ | Tube character or British warmth |
| Speech / broadcast | BAXANDALL_EQ, STANDARD | Transparent or broad |
| IEM/monitor comfort | BAXANDALL_EQ, VINTAGE_3_BAND_EQ | Gentle, fast adjustments |
| Full channel strip (RC-500) | RC_500_EQ + RC_500_COMPRESSOR | Matched pair |
| Full tube strip (VT-1) | VT_1_EQ + VT_1_COMPRESSOR | Matched pair |
| Mix bus shaping | VT_1_EQ, FC_670 + BAXANDALL_EQ | Vintage warmth and glue |
| Fast live adjustment | VINTAGE_3_BAND_EQ | Simple 3-band, fast |
When choosing models, apply this decision hierarchy:
1. Does the channel need correction (remove problems)?
→ STANDARD EQ + STANDARD or CLASSIC compressor
2. Does the source need punch and transient control?
→ Compressor: FET, COMP_160, BRIT_COMP
→ EQ: ALPINE_EQ_550, SOLAR_69_EQ
3. Does the source need warmth and musical character?
→ Compressor: TUBE, TUBE_CB, VT_1_COMPRESSOR, FC_670, EVEREST_C100A
→ EQ: PASSIVE, TUBE_EQ, VT_1_EQ, SOLAR_69_EQ, VINTAGE
4. Is this a bus / group / mix?
→ Compressor: BRIT_COMP, FC_670, VT_1_COMPRESSOR
→ EQ: VT_1_EQ, BAXANDALL_EQ, VINTAGE_3_BAND_EQ
→ Bus channels: BUS_EQ
5. Is this a matched channel strip?
→ RC_500_COMPRESSOR + RC_500_EQ (punchy, modern)
→ VT_1_COMPRESSOR + VT_1_EQ (warm, tube)The MCP server is read-only by default (ADR-005, REQ-NF-002). Fat Channel data is exposed exclusively through resources. No write tools for setting compressor or EQ models exist in the current version.
MCP Tools: 3 (none touch Fat Channel directly)
MCP Resources: 5 (2 expose Fat Channel data)
Write tools: 0 (intentionally absent — see Write Capability below)#### discover_mixers
Discovers StudioLive III mixers on the local network.
// Input schema (all fields optional)
{
timeoutMs?: number // positive integer, ms; default: 5000
}
// Returns: JSON array of mixer identity objects
[
{
deviceId: string, // e.g. "StudioLive32SC-SD7E21010066"
serial: string, // e.g. "SD7E21010066"
model: string, // e.g. "StudioLive 32SC"
firmware: string, // e.g. "3.3.0.109659"
role: "FOH" | "STAGEBOX" | "MONITOR" | "UNKNOWN",
ipAddress: string,
port: number
}
]Fat Channel relevance: None — use this first to obtain a deviceId for subsequent resource reads.
#### refresh_mixer_state
Reconnects to a mixer and rebuilds its state cache, including Fat Channel model decoding.
// Input schema (all fields required)
{
deviceId: string // from discover_mixers — e.g. "StudioLive32SC-SD7E21010066"
}
// Returns: JSON object
{
success: boolean,
channelCount: number, // number of channels in refreshed snapshot
capturedAt: string // ISO 8601 timestamp of snapshot
}Fat Channel relevance: After calling this tool, the channels resource will reflect the latest compModelName and eqModelName for every LINE channel. Call this before reading Fat Channel state if the mixer state may be stale.
#### validate_mixer_identity
Validates that a connected mixer matches an expected serial number and role.
// Input schema
{
deviceId: string, // required
expectedSerial: string?, // optional
expectedRole: "FOH" | "STAGEBOX" | "MONITOR" | "UNKNOWN"? // optional
}
// Returns: JSON object
{
valid: boolean,
reasons: string[] // empty when valid; describes mismatches when not valid
}Fat Channel relevance: None — use for pre-flight safety checks before any channel operation.
Resources are read by URI. Fat Channel data appears in two resources.
#### presonus://mixer/{deviceId}/channels ← Primary Fat Channel resource
Returns all normalized channels for a connected mixer. This is the main resource for Fat Channel state.
URI pattern: presonus://mixer/StudioLive32SC-SD7E21010066/channels
Response schema — array of MixerChannel objects:
MixerChannel {
id: string, // "line.ch1", "aux.ch3", "sub.ch1", etc.
selector: {
type: "LINE" | "RETURN" | "FXRETURN" | "TALKBACK" | "AUX" | "FX" | "SUB" | "MAIN",
channel: number, // 1-based channel number
mixType?: "AUX" | "FX", // present for send-context channels
mixNumber?: number
},
name?: string, // channel label from mixer (e.g. "Kick In")
mute?: boolean,
solo?: boolean,
fader?: {
db?: number | null, // dBFS level; null if unknown
linear?: number | null, // 0.0–1.0 linear value; null if unknown
raw?: unknown // raw mixer value for diagnostics
},
pan?: number, // 0.0 = full left, 0.5 = center, 1.0 = full right
linked?: boolean, // true = stereo-linked with adjacent channel
color?: string, // RGBA hex, e.g. "ffff0000" = red
// ── Fat Channel fields ──────────────────────────────────────────────────
compModelName?: string, // e.g. "FET", "COMP_160", "BRIT_COMP", "UNKNOWN"
eqModelName?: string, // e.g. "STANDARD", "ALPINE_EQ_550", "PASSIVE"
rawExtra?: Record<string, unknown> // unmapped raw fields
}Key Fat Channel fields:
| Field | Source raw key | Decoding |
|---|---|---|
compModelName | line.chN.opt.compmodel.value | Math.round(value × 10) → index 0–10 → model name |
eqModelName | line.chN.opt.eqmodel.value | Math.round(value × 9) → index 0–9 → model name |
NOTE:compModelNameandeqModelNameare read-only decoded strings — they tell you which model is active. They do not expose the compressor or EQ parameter values (threshold, ratio, attack, etc.). For those, read fromraw/state(see below).
#### presonus://mixer/{deviceId}/raw/state ← Diagnostic / parameter access
Full raw state dump. Use for reading actual compressor/EQ parameter values. Not intended for agent reasoning logic — always prefer the normalized channels resource for model identification.
URI pattern: presonus://mixer/StudioLive32SC-SD7E21010066/raw/state
Relevant raw key paths for Fat Channel:
line.chN.opt.compmodel { value: float, strings: int } ← compressor model selector
line.chN.opt.eqmodel { value: float, strings: int } ← EQ model selector
line.chN.opt.swapcompeq 0 | 1 ← signal chain order
line.chN.comp.on 0 | 1 ← compressor enabled
line.chN.comp.input float (dB threshold)
line.chN.comp.output float (dB makeup gain)
line.chN.comp.attack float (seconds)
line.chN.comp.release float (seconds)
line.chN.comp.ratio float or int (model-dependent)
line.chN.comp.keyfilter float (Hz)
line.chN.comp.keylisten 0 | 1
line.chN.eq.eqallon 0 | 1 ← EQ enabled
line.chN.eq.eqgain1-4 float (dB)
line.chN.eq.eqfreq1-4 float (Hz)
line.chN.eq.eqq1-4 float (Q factor)
line.chN.eq.eqbandon1-4 0 | 1 (per-band enable)
line.chN.eq.eqbandop1-4 0 | 1 (bell/shelf type)
line.chN.gate.on 0 | 1
line.chN.gate.threshold float (dB)
line.chN.gate.attack float (seconds)
line.chN.gate.release float (seconds)
line.chN.gate.range float (dB)
line.chN.gate.expander 0 | 1 (gate vs. expander mode)
line.chN.limit.limiteron 0 | 1
line.chN.limit.threshold float (dB)
line.chN.limit.release float (seconds)
line.chN.filter.hpf float (Hz cutoff frequency)Replace N with the 1-based channel number (e.g. line.ch1.comp.input). For aux/sub channels substitute aux.chN, sub.chN, etc.
#### Other Resources (Fat Channel not directly relevant)
| Resource URI | Contents |
|---|---|
presonus://mixers | All connected mixer identities |
presonus://mixer/{deviceId}/meters/summary | Channel meter classification (silent/active/hot/clipping) |
presonus://mixer/{deviceId}/scene/current | Current project and scene names |
These are the schema-validated fields accepted by FatCompressorStateSchema in the domain model (used when the adapter decodes raw state into structured objects).
#### STANDARD, TUBE, FET — Base compressor schema
{
model: "STANDARD" | "TUBE" | "FET", // required discriminator
enabled?: boolean,
thresholdDb?: number, // dB threshold
ratio?: number, // compression ratio (e.g. 4.0 = 4:1)
attackMs?: number, // attack time in milliseconds
releaseSec?: number, // release time in seconds
makeupDb?: number // makeup gain in dB
}#### BRIT_COMP — Adds sidechain fields
{
model: "BRIT_COMP", // required
enabled?: boolean,
thresholdDb?: number,
ratio?: number,
attackMs?: number,
releaseSec?: number,
makeupDb?: number,
// Additional fields:
keyFilterHz?: number, // sidechain high-pass frequency (Hz)
keyEnabled?: boolean, // sidechain filter active
sidechain?: string // sidechain source channel id
}#### COMP_160 — Different parameter names (no manual attack/release)
{
model: "COMP_160", // required
enabled?: boolean,
thresholdDb?: number,
// NOTE: no ratio/attackMs/releaseSec — program-dependent in hardware
compression?: number, // compression amount (equivalent to ratio)
outputGainDb?: number, // output/makeup gain in dB
keyListen?: boolean, // monitor the sidechain signal
keyFilterHz?: number, // sidechain HP filter frequency
sidechain?: string // sidechain source channel id
}#### Other compressor models → UNKNOWN passthrough
Models EVEREST_C100A, FC_670, RC_500_COMPRESSOR, TUBE_CB, VT_1_COMPRESSOR, and CLASSIC_COMPRESSOR are not yet fully schema-defined. When decoded from live state they return:
{
model: "UNKNOWN",
rawModelId: string | number, // the raw opt.compmodel.value float
rawParams: Record<string, unknown> // all raw comp.* fields from state tree
}Read parameter values directly from raw/state for these models until their schemas are added.
#### STANDARD EQ — Full parametric schema
{
model: "STANDARD", // required
enabled?: boolean,
highGainDb?: number, // high shelf gain (dB)
highMidGainDb?: number, // high-mid peak gain (dB)
lowMidGainDb?: number, // low-mid peak gain (dB)
lowGainDb?: number // low shelf gain (dB)
}NOTE: Frequency and Q values are not yet in the normalized schema — read them fromline.chN.eq.eqfreq1-4andline.chN.eq.eqq1-4in raw/state.
#### Other EQ models → UNKNOWN passthrough
Models PASSIVE, VINTAGE, ALPINE_EQ_550, BAXANDALL_EQ, RC_500_EQ, SOLAR_69_EQ, TUBE_EQ, VINTAGE_3_BAND_EQ, VT_1_EQ are not yet fully schema-defined. When decoded they return:
{
model: "UNKNOWN",
rawModelId: string | number,
rawParams: Record<string, unknown>,
bands?: Array<{
frequencyHz?: number,
gainDb?: number,
qFactor?: number,
enabled?: boolean
}>
}Read EQ parameters from line.chN.eq.* in raw/state for these models.
No write tools exist. Fat Channel model selection and parameter adjustment via MCP is not yet implemented.
This is intentional — ADR-005 (read-only-first policy) and REQ-NF-002 require that write tools only be added after a ProposedChangeSet + audit log + confirmation flow is implemented.
What exists in code: An empty if (config.writeEnabled) stub in tools.ts with a warning log. No set_fader, set_mute, set_fat_channel, or any other write tool is registered.
What would be needed to implement Fat Channel writes:
set_fat_channel_model tool: { deviceId, channelId, compModel?, eqModel? } — sets opt.compmodel and/or opt.eqmodel via the featherbear clientset_fat_channel_params tool for threshold/ratio/attack/release etc.ProposedChangeSet + audit log + optional confirmation flow per ADR-005Agent workflow for Fat Channel today:
discover_mixers → get deviceIdrefresh_mixer_state({ deviceId }) → ensure state is freshpresonus://mixer/{deviceId}/channels → check compModelName and eqModelName per channelpresonus://mixer/{deviceId}/raw/state → inspect parameter values{
"STANDARD": "{870D04F7-212E-4F9C-ADBB-39A97216433F}",
"TUBE": "{7F8A4262-D377-48E3-9D48-15D82C400A71}",
"FET": "{1F831EC1-B8AC-4EE9-AD53-54227AF53D58}",
"BRIT_COMP": "{FEF33155-7A9E-4F4E-B209-CFE86DDAFC8E}",
"CLASSIC_COMPRESSOR": "{C38F9E1A-0127-4BB8-9377-40C545A50328}",
"COMP_160": "{F0BD22BB-5FE8-4279-8B05-D089B4D7B0BB}",
"EVEREST_C100A": "{23F9C088-08BE-4259-9DCE-38720AE5DE73}",
"FC_670": "{85DD5632-A536-49FF-894A-9329FC1124E4}",
"RC_500_COMPRESSOR": "{6A372968-AFA7-4A3F-805D-A09A4AE15777}",
"TUBE_CB": "{C3C32BBC-42E2-41A7-99B5-EA1D62F897B5}",
"VT_1_COMPRESSOR": "{AF35E448-40EC-4C5A-A05C-B40A5AC0A42F}"
}{
"STANDARD": "{A0A8A068-14F0-4B04-BB6F-AF8329D0E8EE}",
"PASSIVE": "{C0730CBB-5135-4558-9222-C40BDBA036ED}",
"VINTAGE": "{E1C5E024-C5CD-473C-B08A-6EC177812E01}",
"ALPINE_EQ_550": "{CBDD0DD3-C5EF-495A-B4C7-92EC5E8FE146}",
"BAXANDALL_EQ": "{B4D3497E-4B1C-4CFA-B859-A918C17CDA03}",
"RC_500_EQ": "{63ADDF9B-0EC7-430A-AEBE-62B4CB5FBBD6}",
"SOLAR_69_EQ": "{03819C3F-DC16-4B7B-B521-14B4042192F2}",
"TUBE_EQ": "{09B38119-3945-40D1-BA33-2FA19620DAB0}",
"VINTAGE_3_BAND_EQ": "{4635DE88-C3D2-4645-BC4D-8DFD116D6914}",
"VT_1_EQ": "{A0FAF452-D664-4BA2-90FC-6BD4AC469B29}"
}{
"BUS_EQ": "{4B92A91C-C6FB-4F0F-AE51-841378E4F9CF}"
}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.