{
  "format": "forge.graph/0",
  "name": "Silicon Fuzz",
  "author": "Chirp",
  "license": "CC-BY-4.0",
  "remixed_from": null,
  "description": "A two-transistor-style fuzz: a bass cut tightens the input, then a clipper you can push from gritty to a wall of sustain. Bias makes the clipping lopsided, the way a starved fuzz splutters.",
  "tags": ["fuzz", "drive"],
  "face": {
    "display": { "kind": "meter", "label": "Clip", "source": "hot", "range": [0, 1] },
    "knobs": [
      { "id": "fuzz", "label": "Fuzz", "default": 0.6,
        "controls": [ { "target": "drive.v", "from": 2, "to": 20, "curve": "exp" } ] },
      { "id": "tone", "label": "Tone", "default": 0.5,
        "controls": [ { "target": "tone.cutoff", "from": 800, "to": 8000, "curve": "exp" } ] },
      { "id": "level", "label": "Level", "default": 0.45,
        "controls": [ { "target": "level.amount", "from": 0, "to": 0.6 } ] },
      { "id": "bias", "label": "Bias", "default": 0.2,
        "controls": [ { "target": "bias.v", "from": 0, "to": 0.8 } ] },
      { "id": "blend", "label": "Blend", "default": 1,
        "controls": [ { "target": "mixer.mix", "from": 0, "to": 1 } ] }
    ]
  },
  "nodes": {
    "tight": { "block": "onepole", "set": { "cutoff": 120 }, "in": { "x": "in" } },
    "drive": { "block": "value", "mono": true },
    "bias": { "block": "value", "mono": true },
    "clip": { "block": "formula", "set": { "expr": "tanh(a * b + c) - tanh(c)" },
              "in": { "a": "tight:hp", "b": "drive", "c": "bias" } },
    "hot": { "block": "formula", "mono": true, "set": { "expr": "max(0, 1 - 1 / max(abs(a * b + c), 1))" }, "in": { "a": "tight:hp", "b": "drive", "c": "bias" } },
    "tone": { "block": "onepole", "in": { "x": "clip" } },
    "level": { "block": "gain", "in": { "x": "tone" } },
    "mixer": { "block": "blend", "in": { "dry": "in", "wet": "level" } }
  },
  "out": "mixer"
}
