{
  "schemaVersion": 3,
  "name": "AudioWrench Chain Studio",
  "canonicalUrl": "https://audiowrench.com/tools/chain-studio",
  "processingLocation": "device",
  "uploadsSelectedAudio": false,
  "accountRequired": false,
  "price": 0,
  "input": [
    "browser-decodable audio"
  ],
  "output": [
    "WAV",
    "JSON processing receipt"
  ],
  "interaction": "live non-destructive patch graph with per-connection mixing",
  "capabilities": {
    "graph": {
      "model": "directed-acyclic-graph",
      "serialRouting": true,
      "parallelRouting": true,
      "fanOut": true,
      "fanIn": true,
      "feedbackCycles": false,
      "liveOfflineRouteParity": true
    },
    "edgeMixer": {
      "enabled": true,
      "gain": {
        "field": "gainDb",
        "min": -60,
        "max": 12,
        "default": 0,
        "unit": "dB"
      },
      "mute": {
        "field": "muted",
        "default": false
      },
      "polarity": {
        "field": "polarity",
        "values": [
          1,
          -1
        ],
        "default": 1,
        "meaning": "sample polarity inversion"
      },
      "parallelDryWetRouting": true,
      "perConnectionDryWetControl": false,
      "automaticTimeAlignment": false,
      "frequencyDependentPhaseCorrection": false
    },
    "accessibility": {
      "visualPatchCanvas": true,
      "routeList": {
        "exposed": true,
        "sectionLabel": "Patch routing",
        "rowNamePattern": "Source → Target",
        "statusChips": [
          "gain dB",
          "Muted",
          "Polarity inverted"
        ],
        "selectionKeys": [
          "Enter",
          "Space"
        ]
      },
      "canvasCableKeyboard": {
        "selectionKeys": [
          "Enter",
          "Space"
        ],
        "disconnectKeys": [
          "Delete",
          "Backspace"
        ]
      },
      "routeControlsExposeTextLabels": true
    },
    "comparison": {
      "sourceVersusGraph": true,
      "sharedPlayhead": true,
      "perStageBypass": true,
      "perStageSolo": true
    },
    "persistence": {
      "namedLocalPresets": true,
      "audioIncludedInPreset": false,
      "receiptIncludesConnectionMixerSettings": true
    }
  },
  "processors": [
    {
      "id": "gain",
      "name": "Gain",
      "group": "Utility",
      "summary": "Trim level before or inside the chain.",
      "multiple": true,
      "parameters": {
        "gainDb": {
          "type": "range",
          "min": -24,
          "max": 24,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "highpass",
      "name": "High Pass",
      "group": "EQ / Tone",
      "summary": "Remove low-frequency rumble with a resonant high-pass filter.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 20,
          "max": 500,
          "step": 1,
          "default": 80,
          "unit": "Hz"
        },
        "q": {
          "type": "range",
          "min": 0.1,
          "max": 4,
          "step": 0.1,
          "default": 0.7,
          "unit": "Q"
        }
      }
    },
    {
      "id": "lowpass",
      "name": "Low Pass",
      "group": "EQ / Tone",
      "summary": "Roll off high frequencies with a resonant low-pass filter.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 500,
          "max": 20000,
          "step": 10,
          "default": 12000,
          "unit": "Hz"
        },
        "q": {
          "type": "range",
          "min": 0.1,
          "max": 4,
          "step": 0.1,
          "default": 0.7,
          "unit": "Q"
        }
      }
    },
    {
      "id": "tilt-eq",
      "name": "Tilt EQ",
      "group": "EQ / Tone",
      "summary": "Darken or brighten around one pivot with linked low and high shelves.",
      "multiple": true,
      "parameters": {
        "pivot": {
          "type": "range",
          "min": 200,
          "max": 4000,
          "step": 10,
          "default": 900,
          "unit": "Hz"
        },
        "tiltDb": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "eq",
      "name": "Parametric EQ",
      "group": "EQ / Tone",
      "summary": "Shape one focused frequency band with gain and width controls.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 40,
          "max": 16000,
          "step": 1,
          "default": 3000,
          "unit": "Hz"
        },
        "gainDb": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 2,
          "unit": "dB"
        },
        "q": {
          "type": "range",
          "min": 0.2,
          "max": 8,
          "step": 0.1,
          "default": 1,
          "unit": "Q"
        }
      }
    },
    {
      "id": "low-shelf",
      "name": "Low Shelf",
      "group": "EQ / Tone",
      "summary": "Lift or trim the complete low-frequency region below one corner.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 30,
          "max": 1200,
          "step": 1,
          "default": 160,
          "unit": "Hz"
        },
        "gainDb": {
          "type": "range",
          "min": -18,
          "max": 18,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "high-shelf",
      "name": "High Shelf",
      "group": "EQ / Tone",
      "summary": "Lift or trim the complete high-frequency region above one corner.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 1000,
          "max": 18000,
          "step": 10,
          "default": 8000,
          "unit": "Hz"
        },
        "gainDb": {
          "type": "range",
          "min": -18,
          "max": 18,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "mid-side-eq",
      "name": "Mid / Side EQ",
      "group": "EQ / Tone",
      "summary": "Shape one centre band and one stereo-difference band independently, then decode back to stereo.",
      "multiple": true,
      "parameters": {
        "midFrequency": {
          "type": "range",
          "min": 40,
          "max": 16000,
          "step": 1,
          "default": 900,
          "unit": "Hz"
        },
        "midGain": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "sideFrequency": {
          "type": "range",
          "min": 80,
          "max": 18000,
          "step": 1,
          "default": 6000,
          "unit": "Hz"
        },
        "sideGain": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "q": {
          "type": "range",
          "min": 0.2,
          "max": 8,
          "step": 0.1,
          "default": 1,
          "unit": "Q"
        }
      }
    },
    {
      "id": "notch",
      "name": "Notch Filter",
      "group": "EQ / Tone",
      "summary": "Cut one narrow ringing frequency without changing the surrounding spectrum.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 20,
          "max": 20000,
          "step": 1,
          "default": 1000,
          "unit": "Hz"
        },
        "q": {
          "type": "range",
          "min": 0.5,
          "max": 30,
          "step": 0.1,
          "default": 8,
          "unit": "Q"
        }
      }
    },
    {
      "id": "bandpass",
      "name": "Band Pass",
      "group": "EQ / Tone",
      "summary": "Keep a focused frequency region and attenuate content outside it.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 20,
          "max": 20000,
          "step": 1,
          "default": 1200,
          "unit": "Hz"
        },
        "q": {
          "type": "range",
          "min": 0.1,
          "max": 20,
          "step": 0.1,
          "default": 1.2,
          "unit": "Q"
        }
      }
    },
    {
      "id": "allpass",
      "name": "All-Pass Phase",
      "group": "EQ / Tone",
      "summary": "Rotate phase around one frequency without deliberate level shaping.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 20,
          "max": 20000,
          "step": 1,
          "default": 1000,
          "unit": "Hz"
        },
        "q": {
          "type": "range",
          "min": 0.1,
          "max": 20,
          "step": 0.1,
          "default": 0.7,
          "unit": "Q"
        }
      }
    },
    {
      "id": "compressor",
      "name": "Compressor",
      "group": "Dynamics",
      "summary": "Control level with the browser dynamics processor.",
      "multiple": true,
      "parameters": {
        "threshold": {
          "type": "range",
          "min": -60,
          "max": 0,
          "step": 0.5,
          "default": -20,
          "unit": "dB"
        },
        "ratio": {
          "type": "range",
          "min": 1,
          "max": 20,
          "step": 0.1,
          "default": 3,
          "unit": ":1"
        },
        "attack": {
          "type": "range",
          "min": 0.001,
          "max": 0.2,
          "step": 0.001,
          "default": 0.012,
          "unit": "s"
        },
        "release": {
          "type": "range",
          "min": 0.03,
          "max": 1,
          "step": 0.01,
          "default": 0.22,
          "unit": "s"
        },
        "knee": {
          "type": "range",
          "min": 0,
          "max": 40,
          "step": 1,
          "default": 18,
          "unit": "dB"
        },
        "makeup": {
          "type": "range",
          "min": -6,
          "max": 12,
          "step": 0.1,
          "default": 1.5,
          "unit": "dB"
        }
      }
    },
    {
      "id": "noise-gate",
      "name": "Noise Gate",
      "group": "Dynamics",
      "summary": "Close a sample-domain gate below the selected level with bounded hold and release timing.",
      "multiple": true,
      "parameters": {
        "threshold": {
          "type": "range",
          "min": -80,
          "max": -6,
          "step": 0.5,
          "default": -48,
          "unit": "dB"
        },
        "rangeDb": {
          "type": "range",
          "min": 0,
          "max": 80,
          "step": 1,
          "default": 60,
          "unit": "dB"
        },
        "attack": {
          "type": "range",
          "min": 0.1,
          "max": 50,
          "step": 0.1,
          "default": 3,
          "unit": "ms"
        },
        "hold": {
          "type": "range",
          "min": 0,
          "max": 500,
          "step": 1,
          "default": 60,
          "unit": "ms"
        },
        "release": {
          "type": "range",
          "min": 10,
          "max": 1200,
          "step": 5,
          "default": 180,
          "unit": "ms"
        }
      }
    },
    {
      "id": "expander",
      "name": "Downward Expander",
      "group": "Dynamics",
      "summary": "Turn down signals below threshold progressively instead of closing them abruptly.",
      "multiple": true,
      "parameters": {
        "threshold": {
          "type": "range",
          "min": -80,
          "max": -6,
          "step": 0.5,
          "default": -42,
          "unit": "dB"
        },
        "ratio": {
          "type": "range",
          "min": 1,
          "max": 8,
          "step": 0.1,
          "default": 2,
          "unit": ":1"
        },
        "rangeDb": {
          "type": "range",
          "min": 0,
          "max": 60,
          "step": 1,
          "default": 24,
          "unit": "dB"
        },
        "attack": {
          "type": "range",
          "min": 0.1,
          "max": 100,
          "step": 0.1,
          "default": 8,
          "unit": "ms"
        },
        "release": {
          "type": "range",
          "min": 10,
          "max": 1500,
          "step": 5,
          "default": 240,
          "unit": "ms"
        }
      }
    },
    {
      "id": "transient-shaper",
      "name": "Transient Shaper",
      "group": "Dynamics",
      "summary": "Compare fast and slow envelopes to reshape attacks and sustained body without a threshold.",
      "multiple": true,
      "parameters": {
        "attackDb": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 3,
          "unit": "dB"
        },
        "sustainDb": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "sensitivity": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.55,
          "unit": "%"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 1,
          "unit": "%"
        },
        "outputDb": {
          "type": "range",
          "min": -12,
          "max": 6,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "parallel-compressor",
      "name": "Parallel Compressor",
      "group": "Dynamics",
      "summary": "Blend an aggressive compressed path with the uncompressed signal for controllable density.",
      "multiple": true,
      "parameters": {
        "threshold": {
          "type": "range",
          "min": -60,
          "max": 0,
          "step": 0.5,
          "default": -28,
          "unit": "dB"
        },
        "ratio": {
          "type": "range",
          "min": 1,
          "max": 20,
          "step": 0.1,
          "default": 8,
          "unit": ":1"
        },
        "attack": {
          "type": "range",
          "min": 0.001,
          "max": 0.2,
          "step": 0.001,
          "default": 0.008,
          "unit": "s"
        },
        "release": {
          "type": "range",
          "min": 0.03,
          "max": 1,
          "step": 0.01,
          "default": 0.16,
          "unit": "s"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.45,
          "unit": "%"
        },
        "makeup": {
          "type": "range",
          "min": -6,
          "max": 18,
          "step": 0.1,
          "default": 6,
          "unit": "dB"
        }
      }
    },
    {
      "id": "multiband-compressor",
      "name": "Three-Band Compressor",
      "group": "Dynamics",
      "summary": "Split audio into low, mid and high regions and compress each band with one restrained control set.",
      "multiple": true,
      "parameters": {
        "lowCrossover": {
          "type": "range",
          "min": 60,
          "max": 800,
          "step": 5,
          "default": 180,
          "unit": "Hz"
        },
        "highCrossover": {
          "type": "range",
          "min": 1200,
          "max": 12000,
          "step": 10,
          "default": 4200,
          "unit": "Hz"
        },
        "threshold": {
          "type": "range",
          "min": -60,
          "max": 0,
          "step": 0.5,
          "default": -24,
          "unit": "dB"
        },
        "ratio": {
          "type": "range",
          "min": 1,
          "max": 12,
          "step": 0.1,
          "default": 3,
          "unit": ":1"
        },
        "attack": {
          "type": "range",
          "min": 0.001,
          "max": 0.1,
          "step": 0.001,
          "default": 0.012,
          "unit": "s"
        },
        "release": {
          "type": "range",
          "min": 0.03,
          "max": 0.8,
          "step": 0.01,
          "default": 0.18,
          "unit": "s"
        },
        "lowGain": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "midGain": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "highGain": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "autotune",
      "name": "Pitch Correction",
      "group": "Pitch / Time",
      "summary": "Track one lead pitch and move voiced audio toward a bounded musical scale with the local AudioWorklet engine.",
      "multiple": true,
      "parameters": {
        "root": {
          "type": "range",
          "min": 0,
          "max": 11,
          "step": 1,
          "default": 0,
          "unit": "note"
        },
        "scale": {
          "type": "range",
          "min": 0,
          "max": 2,
          "step": 1,
          "default": 0,
          "unit": "scale"
        },
        "strength": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.9,
          "unit": "%"
        },
        "retune": {
          "type": "range",
          "min": 0,
          "max": 250,
          "step": 1,
          "default": 55,
          "unit": "ms"
        },
        "flex": {
          "type": "range",
          "min": 0,
          "max": 100,
          "step": 1,
          "default": 15,
          "unit": "¢"
        },
        "humanize": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.3,
          "unit": "%"
        },
        "confidence": {
          "type": "range",
          "min": 0.35,
          "max": 0.95,
          "step": 0.01,
          "default": 0.72,
          "unit": "confidence"
        },
        "maxShift": {
          "type": "range",
          "min": 1,
          "max": 12,
          "step": 0.5,
          "default": 4,
          "unit": "st"
        }
      }
    },
    {
      "id": "deesser",
      "name": "De-Esser",
      "group": "Dynamics",
      "summary": "Reduce fast high-band energy with either broadband gain reduction or a split-band subtraction path.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 3000,
          "max": 12000,
          "step": 10,
          "default": 6500,
          "unit": "Hz"
        },
        "threshold": {
          "type": "range",
          "min": -48,
          "max": -6,
          "step": 0.5,
          "default": -25,
          "unit": "dB"
        },
        "amount": {
          "type": "range",
          "min": 0,
          "max": 18,
          "step": 0.1,
          "default": 5,
          "unit": "dB"
        },
        "release": {
          "type": "range",
          "min": 0.01,
          "max": 0.3,
          "step": 0.005,
          "default": 0.08,
          "unit": "s"
        },
        "mode": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 1,
          "default": 0,
          "unit": "mode"
        }
      }
    },
    {
      "id": "soft-clipper",
      "name": "Soft Clipper",
      "group": "Dynamics",
      "summary": "Round fast peaks with an oversampled monotonic transfer curve and parallel mix.",
      "multiple": true,
      "parameters": {
        "driveDb": {
          "type": "range",
          "min": 0,
          "max": 24,
          "step": 0.1,
          "default": 4,
          "unit": "dB"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 1,
          "unit": "%"
        },
        "outputDb": {
          "type": "range",
          "min": -12,
          "max": 3,
          "step": 0.1,
          "default": -1,
          "unit": "dB"
        }
      }
    },
    {
      "id": "resonance-suppressor",
      "name": "Resonance Suppressor",
      "group": "Repair",
      "summary": "Adaptive log-spaced multiband suppression for moving whistles, ringing notes and harsh spectral peaks.",
      "multiple": true,
      "parameters": {
        "depth": {
          "type": "range",
          "min": 0,
          "max": 18,
          "step": 0.1,
          "default": 7,
          "unit": "dB"
        },
        "selectivity": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.58,
          "unit": "%"
        },
        "sharpness": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.62,
          "unit": "%"
        },
        "attack": {
          "type": "range",
          "min": 0.5,
          "max": 120,
          "step": 0.5,
          "default": 8,
          "unit": "ms"
        },
        "release": {
          "type": "range",
          "min": 20,
          "max": 800,
          "step": 5,
          "default": 140,
          "unit": "ms"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 1,
          "unit": "%"
        },
        "output": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "quality": {
          "type": "range",
          "min": 0,
          "max": 2,
          "step": 1,
          "default": 1,
          "unit": "quality"
        },
        "focusLow": {
          "type": "range",
          "min": 80,
          "max": 8000,
          "step": 10,
          "default": 90,
          "unit": "Hz"
        },
        "focusHigh": {
          "type": "range",
          "min": 250,
          "max": 20000,
          "step": 50,
          "default": 16000,
          "unit": "Hz"
        },
        "stereoMode": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 1,
          "default": 0,
          "unit": "mode"
        }
      }
    },
    {
      "id": "hum-remover",
      "name": "Hum Remover",
      "group": "Repair",
      "summary": "Notch 50 or 60 Hz mains hum and its first harmonics with a local filter bank.",
      "multiple": true,
      "parameters": {
        "mains": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 1,
          "default": 0,
          "unit": "mains"
        },
        "q": {
          "type": "range",
          "min": 8,
          "max": 45,
          "step": 1,
          "default": 24,
          "unit": "Q"
        },
        "harmonics": {
          "type": "range",
          "min": 1,
          "max": 5,
          "step": 1,
          "default": 3,
          "unit": "count"
        }
      }
    },
    {
      "id": "delay",
      "name": "Delay",
      "group": "Space",
      "summary": "Add a bounded echo with feedback, tone and wet mix.",
      "multiple": true,
      "parameters": {
        "time": {
          "type": "range",
          "min": 0.02,
          "max": 1.5,
          "step": 0.01,
          "default": 0.24,
          "unit": "s"
        },
        "feedback": {
          "type": "range",
          "min": 0,
          "max": 0.82,
          "step": 0.01,
          "default": 0.22,
          "unit": "%"
        },
        "tone": {
          "type": "range",
          "min": 800,
          "max": 16000,
          "step": 10,
          "default": 7200,
          "unit": "Hz"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.16,
          "unit": "%"
        }
      }
    },
    {
      "id": "ping-pong-delay",
      "name": "Ping-Pong Delay",
      "group": "Space",
      "summary": "Send each repeat across the stereo field through a bounded cross-feedback loop.",
      "multiple": true,
      "parameters": {
        "time": {
          "type": "range",
          "min": 0.03,
          "max": 1.5,
          "step": 0.01,
          "default": 0.32,
          "unit": "s"
        },
        "feedback": {
          "type": "range",
          "min": 0,
          "max": 0.82,
          "step": 0.01,
          "default": 0.34,
          "unit": "%"
        },
        "tone": {
          "type": "range",
          "min": 800,
          "max": 16000,
          "step": 10,
          "default": 6800,
          "unit": "Hz"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.24,
          "unit": "%"
        }
      }
    },
    {
      "id": "reverb",
      "name": "Reverb",
      "group": "Space",
      "summary": "Blend a deterministic synthetic room impulse with the source.",
      "multiple": true,
      "parameters": {
        "decay": {
          "type": "range",
          "min": 0.2,
          "max": 5,
          "step": 0.1,
          "default": 1.4,
          "unit": "s"
        },
        "damping": {
          "type": "range",
          "min": 1000,
          "max": 18000,
          "step": 10,
          "default": 7600,
          "unit": "Hz"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.14,
          "unit": "%"
        }
      }
    },
    {
      "id": "chorus",
      "name": "Chorus",
      "group": "Space",
      "summary": "Animate a short modulated delay for width and ensemble movement.",
      "multiple": true,
      "parameters": {
        "rate": {
          "type": "range",
          "min": 0.05,
          "max": 5,
          "step": 0.01,
          "default": 0.8,
          "unit": "Hz"
        },
        "depthMs": {
          "type": "range",
          "min": 0.2,
          "max": 12,
          "step": 0.1,
          "default": 4,
          "unit": "ms"
        },
        "delayMs": {
          "type": "range",
          "min": 4,
          "max": 28,
          "step": 0.1,
          "default": 14,
          "unit": "ms"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.28,
          "unit": "%"
        }
      }
    },
    {
      "id": "tremolo",
      "name": "Tremolo",
      "group": "Space",
      "summary": "Modulate amplitude with a continuous local oscillator.",
      "multiple": true,
      "parameters": {
        "rate": {
          "type": "range",
          "min": 0.1,
          "max": 16,
          "step": 0.1,
          "default": 4,
          "unit": "Hz"
        },
        "depth": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.35,
          "unit": "%"
        }
      }
    },
    {
      "id": "flanger",
      "name": "Flanger",
      "group": "Creative",
      "summary": "Sweep a very short modulated delay with bounded feedback and a parallel blend.",
      "multiple": true,
      "parameters": {
        "rate": {
          "type": "range",
          "min": 0.05,
          "max": 8,
          "step": 0.01,
          "default": 0.32,
          "unit": "Hz"
        },
        "depthMs": {
          "type": "range",
          "min": 0.1,
          "max": 6,
          "step": 0.1,
          "default": 2.4,
          "unit": "ms"
        },
        "delayMs": {
          "type": "range",
          "min": 0.2,
          "max": 12,
          "step": 0.1,
          "default": 3.2,
          "unit": "ms"
        },
        "feedback": {
          "type": "range",
          "min": -0.9,
          "max": 0.9,
          "step": 0.01,
          "default": 0.28,
          "unit": "%"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.45,
          "unit": "%"
        }
      }
    },
    {
      "id": "phaser",
      "name": "Phaser",
      "group": "Creative",
      "summary": "Move a cascade of all-pass filters for notched phase motion without a sampled impulse.",
      "multiple": true,
      "parameters": {
        "rate": {
          "type": "range",
          "min": 0.05,
          "max": 8,
          "step": 0.01,
          "default": 0.24,
          "unit": "Hz"
        },
        "center": {
          "type": "range",
          "min": 80,
          "max": 6000,
          "step": 1,
          "default": 900,
          "unit": "Hz"
        },
        "sweep": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.58,
          "unit": "%"
        },
        "stages": {
          "type": "range",
          "min": 2,
          "max": 8,
          "step": 1,
          "default": 4,
          "unit": "count"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.5,
          "unit": "%"
        }
      }
    },
    {
      "id": "vibrato",
      "name": "Vibrato",
      "group": "Creative",
      "summary": "Create continuous pitch movement with a short fully modulated delay.",
      "multiple": true,
      "parameters": {
        "rate": {
          "type": "range",
          "min": 0.1,
          "max": 12,
          "step": 0.01,
          "default": 4.5,
          "unit": "Hz"
        },
        "depthMs": {
          "type": "range",
          "min": 0.1,
          "max": 8,
          "step": 0.1,
          "default": 1.8,
          "unit": "ms"
        },
        "delayMs": {
          "type": "range",
          "min": 3,
          "max": 20,
          "step": 0.1,
          "default": 8,
          "unit": "ms"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 1,
          "unit": "%"
        }
      }
    },
    {
      "id": "auto-pan",
      "name": "Auto Pan",
      "group": "Creative",
      "summary": "Move a signal left and right with a continuous equal-power pan oscillator.",
      "multiple": true,
      "parameters": {
        "rate": {
          "type": "range",
          "min": 0.05,
          "max": 16,
          "step": 0.01,
          "default": 1.2,
          "unit": "Hz"
        },
        "depth": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.75,
          "unit": "%"
        }
      }
    },
    {
      "id": "ring-mod",
      "name": "Ring Modulator",
      "group": "Creative",
      "summary": "Multiply the signal by a bipolar oscillator for metallic sidebands and tremolo-rate motion.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 0.1,
          "max": 4000,
          "step": 0.1,
          "default": 90,
          "unit": "Hz"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.5,
          "unit": "%"
        },
        "outputDb": {
          "type": "range",
          "min": -18,
          "max": 6,
          "step": 0.1,
          "default": -3,
          "unit": "dB"
        }
      }
    },
    {
      "id": "bit-depth",
      "name": "Bit Depth Reducer",
      "group": "Creative",
      "summary": "Quantize amplitude to a lower signed bit depth for deterministic digital grit.",
      "multiple": true,
      "parameters": {
        "bits": {
          "type": "range",
          "min": 2,
          "max": 16,
          "step": 1,
          "default": 8,
          "unit": "bit"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.5,
          "unit": "%"
        },
        "outputDb": {
          "type": "range",
          "min": -12,
          "max": 6,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "tape-saturation",
      "name": "Tape Saturation",
      "group": "Creative",
      "summary": "Apply a smooth asymmetric transfer curve, high-frequency softening and parallel blend.",
      "multiple": true,
      "parameters": {
        "driveDb": {
          "type": "range",
          "min": 0,
          "max": 24,
          "step": 0.1,
          "default": 6,
          "unit": "dB"
        },
        "bias": {
          "type": "range",
          "min": -1,
          "max": 1,
          "step": 0.01,
          "default": 0.08,
          "unit": ""
        },
        "tone": {
          "type": "range",
          "min": 1000,
          "max": 18000,
          "step": 10,
          "default": 9000,
          "unit": "Hz"
        },
        "mix": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.65,
          "unit": "%"
        },
        "outputDb": {
          "type": "range",
          "min": -12,
          "max": 6,
          "step": 0.1,
          "default": -1,
          "unit": "dB"
        }
      }
    },
    {
      "id": "stereo-width",
      "name": "Stereo Width",
      "group": "Stereo",
      "summary": "Scale the mid/side difference while keeping the centre path stable.",
      "multiple": true,
      "parameters": {
        "width": {
          "type": "range",
          "min": 0,
          "max": 2,
          "step": 0.01,
          "default": 1,
          "unit": "%"
        },
        "outputDb": {
          "type": "range",
          "min": -6,
          "max": 3,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "stereo-balance",
      "name": "Stereo Balance",
      "group": "Stereo",
      "summary": "Trim left and right channels independently without folding or repanning the stereo image.",
      "multiple": true,
      "parameters": {
        "leftDb": {
          "type": "range",
          "min": -24,
          "max": 6,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        },
        "rightDb": {
          "type": "range",
          "min": -24,
          "max": 6,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "stereo-to-mono",
      "name": "Stereo to Mono",
      "group": "Stereo",
      "summary": "Average left and right channels into a centred mono signal with explicit output trim.",
      "multiple": true,
      "parameters": {
        "outputDb": {
          "type": "range",
          "min": -12,
          "max": 6,
          "step": 0.1,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "polarity-invert",
      "name": "Polarity Invert",
      "group": "Stereo",
      "summary": "Invert both channels, the left channel or the right channel for deliberate polarity checks.",
      "multiple": true,
      "parameters": {
        "channel": {
          "type": "range",
          "min": 0,
          "max": 2,
          "step": 1,
          "default": 0,
          "unit": "channel"
        }
      }
    },
    {
      "id": "stereo-pan",
      "name": "Stereo Pan",
      "group": "Stereo",
      "summary": "Place the complete signal left or right with equal-power panning.",
      "multiple": true,
      "parameters": {
        "pan": {
          "type": "range",
          "min": -1,
          "max": 1,
          "step": 0.01,
          "default": 0,
          "unit": ""
        }
      }
    },
    {
      "id": "mono-maker",
      "name": "Mono Maker",
      "group": "Stereo",
      "summary": "Blend the low band toward mono below a selected crossover while leaving highs stereo.",
      "multiple": true,
      "parameters": {
        "crossover": {
          "type": "range",
          "min": 20,
          "max": 500,
          "step": 1,
          "default": 120,
          "unit": "Hz"
        },
        "amount": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 1,
          "unit": "%"
        }
      }
    },
    {
      "id": "stereo-swap",
      "name": "Swap L / R",
      "group": "Stereo",
      "summary": "Exchange the left and right channels without changing their sample values.",
      "multiple": true,
      "parameters": {}
    },
    {
      "id": "dc-blocker",
      "name": "DC Blocker",
      "group": "Utility",
      "summary": "Remove DC and subsonic offset with a very-low high-pass filter.",
      "multiple": true,
      "parameters": {
        "frequency": {
          "type": "range",
          "min": 5,
          "max": 40,
          "step": 1,
          "default": 18,
          "unit": "Hz"
        }
      }
    },
    {
      "id": "limiter",
      "name": "Peak Guard",
      "group": "Dynamics",
      "summary": "A high-ratio sample-domain safety stage, not a true-peak limiter.",
      "multiple": true,
      "parameters": {
        "ceiling": {
          "type": "range",
          "min": -6,
          "max": -0.1,
          "step": 0.1,
          "default": -1,
          "unit": "dB"
        },
        "release": {
          "type": "range",
          "min": 0.02,
          "max": 0.5,
          "step": 0.01,
          "default": 0.08,
          "unit": "s"
        }
      }
    },
    {
      "id": "master-eq",
      "name": "Master EQ",
      "group": "Mastering",
      "summary": "Six broad mastering bands from the full Mastering Studio signal path.",
      "multiple": true,
      "parameters": {
        "sub": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        },
        "low": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        },
        "lowMid": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        },
        "highMid": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        },
        "high": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        },
        "air": {
          "type": "range",
          "min": -9,
          "max": 9,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        }
      }
    },
    {
      "id": "bass-control",
      "name": "Bass Control",
      "group": "Mastering",
      "summary": "Mono-safe low-band saturation, compression and level control from Mastering Studio.",
      "multiple": true,
      "parameters": {
        "crossover": {
          "type": "range",
          "min": 60,
          "max": 200,
          "step": 5,
          "default": 110,
          "unit": "Hz"
        },
        "drive": {
          "type": "range",
          "min": 0,
          "max": 10,
          "step": 0.5,
          "default": 2,
          "unit": "dB"
        },
        "punch": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.05,
          "default": 0.4,
          "unit": "%"
        },
        "level": {
          "type": "range",
          "min": -6,
          "max": 6,
          "step": 0.5,
          "default": 1,
          "unit": "dB"
        },
        "mono": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 1,
          "default": 1,
          "unit": "toggle"
        }
      }
    },
    {
      "id": "inflator",
      "name": "Inflator",
      "group": "Mastering",
      "summary": "Program-dependent density and perceived-loudness lift with a monotonic transfer curve.",
      "multiple": true,
      "parameters": {
        "input": {
          "type": "range",
          "min": -12,
          "max": 12,
          "step": 0.5,
          "default": 0,
          "unit": "dB"
        },
        "effect": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0.5,
          "unit": "%"
        },
        "curve": {
          "type": "range",
          "min": -50,
          "max": 50,
          "step": 1,
          "default": 0,
          "unit": ""
        },
        "clip": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 1,
          "default": 0,
          "unit": "toggle"
        }
      }
    },
    {
      "id": "exciter",
      "name": "Exciter",
      "group": "Mastering",
      "summary": "Phase-aligned parallel harmonic enhancement with warm, bright and tape characters.",
      "multiple": true,
      "parameters": {
        "character": {
          "type": "range",
          "min": 0,
          "max": 2,
          "step": 1,
          "default": 0,
          "unit": "mode"
        },
        "amount": {
          "type": "range",
          "min": 0,
          "max": 0.8,
          "step": 0.01,
          "default": 0.25,
          "unit": "%"
        }
      }
    },
    {
      "id": "glue",
      "name": "Glue Compressor",
      "group": "Mastering",
      "summary": "Gentle bus compression that helps a finished mix breathe as one piece.",
      "multiple": true,
      "parameters": {
        "threshold": {
          "type": "range",
          "min": -36,
          "max": 0,
          "step": 1,
          "default": -18,
          "unit": "dB"
        },
        "ratio": {
          "type": "range",
          "min": 1,
          "max": 6,
          "step": 0.1,
          "default": 2,
          "unit": ":1"
        },
        "attack": {
          "type": "range",
          "min": 0.003,
          "max": 0.1,
          "step": 0.001,
          "default": 0.03,
          "unit": "s"
        },
        "release": {
          "type": "range",
          "min": 0.05,
          "max": 0.6,
          "step": 0.01,
          "default": 0.25,
          "unit": "s"
        },
        "makeup": {
          "type": "range",
          "min": 0,
          "max": 6,
          "step": 0.5,
          "default": 1,
          "unit": "dB"
        }
      }
    },
    {
      "id": "maximizer",
      "name": "Maximizer",
      "group": "Mastering",
      "summary": "Final push, soft density and sample-domain ceiling control from Mastering Studio.",
      "multiple": true,
      "parameters": {
        "push": {
          "type": "range",
          "min": 0,
          "max": 12,
          "step": 0.5,
          "default": 4,
          "unit": "dB"
        },
        "density": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 0.01,
          "default": 0,
          "unit": "%"
        },
        "ceiling": {
          "type": "range",
          "min": -3,
          "max": -0.1,
          "step": 0.1,
          "default": -1,
          "unit": "dB"
        },
        "release": {
          "type": "range",
          "min": 0.02,
          "max": 0.3,
          "step": 0.01,
          "default": 0.08,
          "unit": "s"
        },
        "mode": {
          "type": "range",
          "min": 0,
          "max": 1,
          "step": 1,
          "default": 0,
          "unit": "mode"
        }
      }
    }
  ],
  "templates": [
    {
      "id": "tuned-vocal",
      "name": "Tuned Vocal Patcher",
      "description": "A local autotune stage followed by two parallel vocal routes. Both routes split after the shared pitch latency, then sum into one peak guard to avoid a delayed-tuned versus undelayed-dry comb path.",
      "processors": [
        {
          "processorId": "autotune",
          "params": {
            "root": 0,
            "scale": 0,
            "strength": 0.9,
            "retune": 55,
            "flex": 15,
            "humanize": 0.3,
            "confidence": 0.72,
            "maxShift": 4
          }
        },
        {
          "processorId": "highpass",
          "params": {
            "frequency": 82,
            "q": 0.7
          }
        },
        {
          "processorId": "compressor",
          "params": {
            "threshold": -22,
            "ratio": 3.2,
            "attack": 0.014,
            "release": 0.2,
            "knee": 18,
            "makeup": 1.2
          }
        },
        {
          "processorId": "deesser",
          "params": {
            "frequency": 6800,
            "threshold": -25,
            "amount": 5,
            "release": 0.08
          }
        },
        {
          "processorId": "eq",
          "params": {
            "frequency": 3900,
            "gainDb": 2.2,
            "q": 1
          }
        },
        {
          "processorId": "reverb",
          "params": {
            "decay": 0.72,
            "damping": 9200,
            "mix": 0.1
          }
        },
        {
          "processorId": "limiter",
          "params": {
            "ceiling": -1,
            "release": 0.08
          }
        }
      ]
    },
    {
      "id": "polished-vocal",
      "name": "Polished Vocal",
      "description": "A real local autotune stage feeding two parallel vocal routes. Both branches split after AutoTune so the shared detector latency cannot create a tuned-versus-dry comb path.",
      "processors": [
        {
          "processorId": "autotune",
          "params": {
            "root": 0,
            "scale": 0,
            "strength": 0.78,
            "retune": 80,
            "flex": 22,
            "humanize": 0.45,
            "confidence": 0.72,
            "maxShift": 4
          }
        },
        {
          "processorId": "highpass",
          "params": {
            "frequency": 80,
            "q": 0.7
          }
        },
        {
          "processorId": "eq",
          "params": {
            "frequency": 3200,
            "gainDb": 2.4,
            "q": 1.1
          }
        },
        {
          "processorId": "compressor",
          "params": {
            "threshold": -21,
            "ratio": 3.2,
            "attack": 0.012,
            "release": 0.2,
            "knee": 18,
            "makeup": 1.5
          }
        },
        {
          "processorId": "deesser",
          "params": {
            "frequency": 6800,
            "threshold": -25,
            "amount": 5.2,
            "release": 0.08
          }
        },
        {
          "processorId": "limiter",
          "params": {
            "ceiling": -1,
            "release": 0.08
          }
        }
      ]
    },
    {
      "id": "podcast-clarity",
      "name": "Podcast Clarity",
      "description": "Low-cut, presence and controlled dynamics for speech; no semantic editing or loudness guarantee.",
      "processors": [
        {
          "processorId": "highpass",
          "params": {
            "frequency": 72,
            "q": 0.7
          }
        },
        {
          "processorId": "eq",
          "params": {
            "frequency": 2800,
            "gainDb": 1.8,
            "q": 1
          }
        },
        {
          "processorId": "compressor",
          "params": {
            "threshold": -23,
            "ratio": 2.8,
            "attack": 0.018,
            "release": 0.26,
            "knee": 22,
            "makeup": 1
          }
        },
        {
          "processorId": "deesser",
          "params": {
            "frequency": 6400,
            "threshold": -27,
            "amount": 4,
            "release": 0.09
          }
        },
        {
          "processorId": "limiter",
          "params": {
            "ceiling": -1.2,
            "release": 0.1
          }
        }
      ]
    },
    {
      "id": "vocal-presence",
      "name": "Vocal Presence",
      "description": "Presence, controlled sibilance and short ambience for an exposed vocal; it still needs listening in the mix.",
      "processors": [
        {
          "processorId": "highpass",
          "params": {
            "frequency": 92,
            "q": 0.7
          }
        },
        {
          "processorId": "eq",
          "params": {
            "frequency": 4200,
            "gainDb": 2.6,
            "q": 1.2
          }
        },
        {
          "processorId": "compressor",
          "params": {
            "threshold": -22,
            "ratio": 3.5,
            "attack": 0.009,
            "release": 0.17,
            "knee": 16,
            "makeup": 1.8
          }
        },
        {
          "processorId": "deesser",
          "params": {
            "frequency": 7200,
            "threshold": -26,
            "amount": 5.5,
            "release": 0.07
          }
        },
        {
          "processorId": "reverb",
          "params": {
            "decay": 0.8,
            "damping": 9000,
            "mix": 0.08
          }
        },
        {
          "processorId": "limiter",
          "params": {
            "ceiling": -1,
            "release": 0.07
          }
        }
      ]
    },
    {
      "id": "mastering-draft",
      "name": "Mastering Draft",
      "description": "A restrained review chain, not certified mastering or true-peak delivery.",
      "processors": [
        {
          "processorId": "master-eq",
          "params": {
            "sub": -0.5,
            "low": -0.8,
            "lowMid": 0,
            "highMid": 0.5,
            "high": 0.8,
            "air": 0.5
          }
        },
        {
          "processorId": "glue",
          "params": {
            "threshold": -16,
            "ratio": 1.8,
            "attack": 0.04,
            "release": 0.3,
            "makeup": 0.8
          }
        },
        {
          "processorId": "stereo-width",
          "params": {
            "width": 1.08,
            "outputDb": -0.2
          }
        },
        {
          "processorId": "maximizer",
          "params": {
            "push": 2.5,
            "density": 0.08,
            "ceiling": -1,
            "release": 0.12
          }
        }
      ]
    },
    {
      "id": "mastering-suite",
      "name": "Full Mastering Suite",
      "description": "Every live Mastering Studio module in one editable local chain.",
      "processors": [
        {
          "processorId": "master-eq",
          "params": {
            "sub": 0,
            "low": 0,
            "lowMid": 0,
            "highMid": 0,
            "high": 0,
            "air": 0
          }
        },
        {
          "processorId": "bass-control",
          "params": {
            "crossover": 110,
            "drive": 2,
            "punch": 0.4,
            "level": 1
          }
        },
        {
          "processorId": "inflator",
          "params": {
            "input": 0,
            "effect": 0.35,
            "curve": 0
          }
        },
        {
          "processorId": "exciter",
          "params": {
            "character": 0,
            "amount": 0.18
          }
        },
        {
          "processorId": "stereo-width",
          "params": {
            "width": 1.12,
            "outputDb": -0.3
          }
        },
        {
          "processorId": "glue",
          "params": {
            "threshold": -18,
            "ratio": 2,
            "attack": 0.03,
            "release": 0.25,
            "makeup": 1
          }
        },
        {
          "processorId": "maximizer",
          "params": {
            "push": 3,
            "density": 0.05,
            "ceiling": -1,
            "release": 0.08
          }
        }
      ]
    },
    {
      "id": "lofi-echo",
      "name": "Lo-fi Echo",
      "description": "A deliberate narrow, echoing texture; it intentionally removes fidelity.",
      "processors": [
        {
          "processorId": "highpass",
          "params": {
            "frequency": 180,
            "q": 0.8
          }
        },
        {
          "processorId": "eq",
          "params": {
            "frequency": 4200,
            "gainDb": -6,
            "q": 0.55
          }
        },
        {
          "processorId": "delay",
          "params": {
            "time": 0.34,
            "feedback": 0.38,
            "tone": 4200,
            "mix": 0.27
          }
        },
        {
          "processorId": "limiter",
          "params": {
            "ceiling": -1.5,
            "release": 0.1
          }
        }
      ]
    },
    {
      "id": "wide-ambient",
      "name": "Wide Ambient",
      "description": "Space and stereo movement for pads or textures; mono compatibility still requires listening.",
      "processors": [
        {
          "processorId": "eq",
          "params": {
            "frequency": 260,
            "gainDb": -1.5,
            "q": 0.7
          }
        },
        {
          "processorId": "delay",
          "params": {
            "time": 0.42,
            "feedback": 0.27,
            "tone": 8200,
            "mix": 0.18
          }
        },
        {
          "processorId": "reverb",
          "params": {
            "decay": 2.8,
            "damping": 7800,
            "mix": 0.28
          }
        },
        {
          "processorId": "stereo-width",
          "params": {
            "width": 1.35,
            "outputDb": -0.5
          }
        },
        {
          "processorId": "limiter",
          "params": {
            "ceiling": -1.2,
            "release": 0.12
          }
        }
      ]
    }
  ],
  "limitations": [
    "Templates are starting points and do not understand artistic intent.",
    "Peak Guard is sample-domain dynamics control, not an oversampled true-peak limiter.",
    "The rack processes one source at a time and does not host external plugins.",
    "Per-route polarity inversion does not automatically time-align processors, rotate phase or correct phase across every frequency.",
    "The tool does not guarantee LUFS, true-peak or platform delivery compliance.",
    "Browser-native processing can vary slightly between browser engines."
  ],
  "verification": {
    "status": "source-reviewed",
    "evidenceUrl": null
  }
}
