{
 "version": 2,
 "name": "ModularMB",
 "categories": [
  {
   "id": "vco",
   "label": "VCO",
   "kind": "vco",
   "defaultCvRange": {
    "min": -5,
    "max": 5,
    "bipolar": true
   }
  },
  {
   "id": "vcf",
   "label": "VCF",
   "kind": "vcf",
   "defaultCvRange": {
    "min": -5,
    "max": 5,
    "bipolar": true
   }
  },
  {
   "id": "vca",
   "label": "VCA",
   "kind": "vca",
   "defaultCvRange": {
    "min": 0,
    "max": 10,
    "bipolar": false
   }
  },
  {
   "id": "mixer",
   "label": "Mixer",
   "kind": "mixer"
  },
  {
   "id": "breakout",
   "label": "Breakout",
   "kind": "breakout"
  },
  {
   "id": "envelope",
   "label": "Envelope",
   "kind": "envelope",
   "defaultCvRange": {
    "min": 0,
    "max": 10,
    "bipolar": false
   }
  },
  {
   "id": "lfo",
   "label": "LFO",
   "kind": "lfo",
   "defaultCvRange": {
    "min": -5,
    "max": 5,
    "bipolar": true
   }
  },
  {
   "id": "sequencer",
   "label": "Sequencer",
   "kind": "sequencer"
  },
  {
   "id": "drum",
   "label": "Drum",
   "kind": "drum"
  },
  {
   "id": "effect",
   "label": "Effect",
   "kind": "effect"
  },
  {
   "id": "noise",
   "label": "Noise/Rand",
   "kind": "noise"
  },
  {
   "id": "utility",
   "label": "Utility",
   "kind": "utility"
  }
 ],
 "moduleTypes": [
  {
   "id": "tp_mmb_ahdsr",
   "categoryId": "envelope",
   "variant": "AHDSR (vertical-sliders)",
   "ports": [
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "trig",
     "name": "Trig",
     "signalType": "trigger",
     "direction": "in"
    },
    {
     "id": "cv_out",
     "name": "Env",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "eoc",
     "name": "EOC",
     "signalType": "trigger",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "slider",
     "id": "attack",
     "label": "A",
     "min": 0,
     "max": 2000,
     "defaultValue": 10,
     "orientation": "v",
     "lengthMm": 56,
     "unit": "ms",
     "style": "mini-fader"
    },
    {
     "kind": "slider",
     "id": "hold",
     "label": "H",
     "min": 0,
     "max": 5000,
     "defaultValue": 0,
     "orientation": "v",
     "lengthMm": 56,
     "unit": "ms",
     "style": "mini-fader"
    },
    {
     "kind": "slider",
     "id": "decay",
     "label": "D",
     "min": 0,
     "max": 5000,
     "defaultValue": 200,
     "orientation": "v",
     "lengthMm": 56,
     "unit": "ms",
     "style": "mini-fader"
    },
    {
     "kind": "slider",
     "id": "sustain",
     "label": "S",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "orientation": "v",
     "lengthMm": 56,
     "style": "mini-fader"
    },
    {
     "kind": "slider",
     "id": "release",
     "label": "R",
     "min": 0,
     "max": 8000,
     "defaultValue": 300,
     "orientation": "v",
     "lengthMm": 56,
     "unit": "ms",
     "style": "mini-fader"
    },
    {
     "kind": "toggle",
     "id": "loop",
     "label": "Loop",
     "defaultValue": false
    },
    {
     "kind": "toggle",
     "id": "retrig",
     "label": "Reset",
     "defaultValue": false
    },
    {
     "kind": "switch",
     "id": "curve",
     "label": "Curve",
     "positions": [
      "Lin",
      "Exp",
      "Log"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Interne MMB envelope. Loop=on maakt er een quasi-LFO van; curve schakelt tussen lineair/exp/log per fase. Reset=on hertriggert elke noot vanaf 0 (consistente filter-wah); Reset=off vervolgt klikvrij vanaf de huidige waarde (goed voor amp-env).",
   "internal": true
  },
  {
   "id": "tp_mmb_lfo",
   "categoryId": "lfo",
   "variant": "LFO (rate+wave+depth)",
   "ports": [
    {
     "id": "rate_cv",
     "name": "Rate",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Rst",
     "signalType": "trigger",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_inv",
     "name": "Inv",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.01,
     "max": 50,
     "defaultValue": 1,
     "taper": "log",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Saw",
      "Sqr",
      "S&H"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "depth",
     "label": "Depth",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "toggle",
     "id": "bipolar",
     "label": "Bip",
     "defaultValue": true
    },
    {
     "kind": "switch",
     "id": "run",
     "label": "Run",
     "positions": [
      "Always",
      "Gated",
      "OneShot"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "rate_cv_amt",
     "label": "Rate CV",
     "min": -1,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Interne MMB LFO; bipolar=on geeft ±depth, off geeft 0..depth.",
   "internal": true
  },
  {
   "id": "tp_mmb_sh",
   "categoryId": "utility",
   "variant": "S&H + Slew",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "trig",
     "name": "Trig",
     "signalType": "trigger",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "slew",
     "label": "Slew",
     "min": 0,
     "max": 5000,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "S&H",
      "T&H",
      "Slew"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Sample-and-hold met slew-limiter. In Slew-mode wordt de trigger-input genegeerd.",
   "internal": true
  },
  {
   "id": "tp_mmb_vco",
   "categoryId": "vco",
   "variant": "VCO (wave + coarse/fine)",
   "ports": [
    {
     "id": "voct",
     "name": "1V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "tune",
     "name": "Tune",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fm",
     "name": "FM",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "sync",
     "name": "Sync",
     "signalType": "trigger",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Saw",
      "Sqr"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "fm_amt",
     "label": "FM",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Interne MMB VCO. 'wave' kiest sine/triangle/sawtooth/square; coarse+fine zijn semitonen+cent offsets t.o.v. de inkomende V/Oct. 'tune' is een aparte V/Oct-ingang die bij de hoofdpitch wordt opgeteld (voor pitch-bend/detune zonder de noot-V/Oct te overschrijven).",
   "internal": true
  },
  {
   "id": "tp_mmb_quad_vco_shared",
   "categoryId": "vco",
   "variant": "Quad VCO (shared controls)",
   "ports": [
    {
     "id": "voct_1",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_2",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_3",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_4",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "out_1",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_2",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_3",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_4",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Saw",
      "Sqr"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Multi-module met 4 identieke oscillator-cellen die ALLE dezelfde control-set delen (wave/coarse/fine/level). Eén v/oct-in en één audio-out per cel. Canonisch voorbeeld van een shared-controls multi-module (CellGroup met controlIds: []). Hardware bestaat nog niet — eerst alleen in simulator gebruiken.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "osc",
     "label": "Oscillator",
     "count": 4,
     "portIds": [
      "voct",
      "out"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_vcf",
   "categoryId": "vcf",
   "variant": "VCF (lp/hp/bp)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "cv",
     "name": "F CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "q_cv",
     "name": "Q CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 20,
     "max": 18000,
     "defaultValue": 2000,
     "taper": "log",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "q",
     "label": "Q",
     "min": 0.7,
     "max": 5,
     "defaultValue": 0.7,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cv_amt",
     "label": "CV amt",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "q_cv_amt",
     "label": "Q CV amt",
     "min": 0,
     "max": 4.3,
     "defaultValue": 2,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type",
     "label": "Type",
     "positions": [
      "LP",
      "HP",
      "BP"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Interne MMB filter (state-variable). Cutoff-knop is de basis; F CV moduleert via cv_amt (1V/oct-achtig). Q CV telt op bij de Q-knop met q_cv_amt als diepte (in Q-eenheden, control-rate — prima voor LFO/envelope-sweeps). Q stabiel tussen 0.7 en 5.0.",
   "internal": true
  },
  {
   "id": "tp_mmb_vca",
   "categoryId": "vca",
   "variant": "VCA (linear)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "cv",
     "name": "CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "gain",
     "label": "Gain",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "taper": "exp",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "resp",
     "label": "Resp",
     "positions": [
      "Lin",
      "Exp"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Lineaire VCA. Bij gain=0 is de basisweg dicht; een CV-input voegt erbovenop (typisch envelope → CV).",
   "internal": true
  },
  {
   "id": "tp_mmb_out",
   "categoryId": "utility",
   "variant": "Audio output",
   "ports": [
    {
     "id": "l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Stuurt aangesloten audio naar de master out. Mono-bron op L of R werkt ook.",
   "internal": true
  },
  {
   "id": "tp_mmb_midiin",
   "categoryId": "utility",
   "variant": "MIDI-to-CV breakout",
   "ports": [
    {
     "id": "pitch",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "out",
     "eventKind": "voice"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "eventKind": "voice"
    },
    {
     "id": "vel",
     "name": "Vel",
     "signalType": "cv",
     "direction": "out",
     "eventKind": "voice"
    },
    {
     "id": "press",
     "name": "Press",
     "signalType": "cv",
     "direction": "out",
     "eventKind": "voice"
    },
    {
     "id": "rel",
     "name": "Rel",
     "signalType": "cv",
     "direction": "out",
     "eventKind": "voice"
    },
    {
     "id": "cv_mod",
     "name": "Mod",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "cv_bend",
     "name": "Bend",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "cv_cc1",
     "name": "CC1",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "cv_cc2",
     "name": "CC2",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "channel",
     "label": "Ch",
     "min": 0,
     "max": 16,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "0=all",
     "step": 1
    },
    {
     "kind": "display",
     "id": "chDisp",
     "digits": 3,
     "style": "led",
     "bindTo": "channel",
     "format": "int"
    },
    {
     "kind": "led",
     "id": "act",
     "label": "Act",
     "color": "#22c55e",
     "size": "medium"
    },
    {
     "kind": "display",
     "id": "voicesDisp",
     "digits": 2,
     "style": "led",
     "bindTo": "voiceCount",
     "format": "int"
    },
    {
     "kind": "switch",
     "id": "priority",
     "label": "Prio",
     "positions": [
      "last",
      "low",
      "high"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "steal",
     "label": "Steal",
     "positions": [
      "old",
      "low",
      "hi"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "legato",
     "label": "Leg",
     "positions": [
      "off",
      "on"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "bendRange",
     "label": "Bend",
     "min": 1,
     "max": 24,
     "defaultValue": 2,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "glide",
     "label": "Glide",
     "min": 0,
     "max": 2000,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms/oct",
     "step": 10
    },
    {
     "kind": "switch",
     "id": "unison",
     "label": "Uni",
     "positions": [
      "off",
      "on"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Sprd",
     "min": 0,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct",
     "step": 1
    },
    {
     "kind": "switch",
     "id": "bendPitch",
     "label": "B→P",
     "positions": [
      "off",
      "on"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "cc1Num",
     "label": "CC1#",
     "min": 0,
     "max": 127,
     "defaultValue": 74,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "display",
     "id": "cc1Disp",
     "digits": 3,
     "style": "led",
     "bindTo": "cc1Num",
     "format": "int"
    },
    {
     "kind": "knob",
     "id": "cc2Num",
     "label": "CC2#",
     "min": 0,
     "max": 127,
     "defaultValue": 71,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "display",
     "id": "cc2Disp",
     "digits": 3,
     "style": "led",
     "bindTo": "cc2Num",
     "format": "int"
    }
   ],
   "notes": "Zet inkomende MIDI om in CV. NOTE-uitgangen (per stem): pitch (V/Oct), gate, velocity, Press (aftertouch: channel pressure zet alle stemmen, poly pressure alleen de stem met die toets; 0..1) en Rel (release-velocity van de laatste note-off op die stem, 0..1, blijft staan — een keyboard dat hem niet meldt geeft 0,5). MOD-uitgangen (globaal): Mod (mod-wheel CC1), Bend (pitch-bend, V/Oct, bereik = Bend-knop in halve tonen; B→P aan = de bend zit ook al in pitch/pitchK, handig zonder aparte bend-kabel), CC1/CC2 (vrij kiesbare CC-nummers via CC1#/CC2#; het gekozen nummer staat op het LED-display naast elke knop). De MIDI-bron kies je in het Simulatie-paneel. Mono/poly volgt automatisch uit het aantal stemmen (voiceCount). PRIO = mono note-priority (last/low/high). STEAL = poly voice-stealing → firmware StealStrategy. LEG = legato (firmware-gedrag = FW-1, nog te bouwen). GLIDE = portamento (ms per octaaf, 0 = uit). UNI = unison (één toets → alle stemmen, last-note); SPRD = unison-detune in centen. Géén MIDI-jack op de front; alles loopt via de brain.",
   "internal": true,
   "role": "event-source"
  },
  {
   "id": "tp_mmb_cvmath",
   "categoryId": "utility",
   "variant": "CV Math (sum/mult)",
   "ports": [
    {
     "id": "a",
     "name": "A",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "b",
     "name": "B",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "c",
     "name": "C",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Sum",
      "Mult"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "gain_a",
     "label": "Gain A",
     "min": -2,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "gain_b",
     "label": "Gain B",
     "min": -2,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "gain_c",
     "label": "Gain C",
     "min": -2,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "offset",
     "label": "Offset",
     "min": -5,
     "max": 5,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Sum-mode: out = a×gain_a + b×gain_b + c×gain_c + offset. Mult-mode: out = (a×gain_a) × (b×gain_b) — ring-mod stijl, bijv. envelope × velocity; let op: gain 0 maakt het product 0 (stilte). Gain-waarden kunnen negatief zijn voor inversie.",
   "internal": true
  },
  {
   "id": "tp_mmb_mixer",
   "categoryId": "utility",
   "variant": "Stereo mixer (4-in)",
   "ports": [
    {
     "id": "in1",
     "name": "1",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in2",
     "name": "2",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in3",
     "name": "3",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in4",
     "name": "4",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "vol1",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan1",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol2",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan2",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol3",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan3",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol4",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan4",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Stereo 4-kanaals mixer. Per kanaal: Vol (0..1) + Pan (-1 links .. +1 rechts, equal-power). Elke ingang wordt naar de L- en R-bus gemengd; out_l/out_r vormen het stereo-paar. Basis voor polyfone stem-sommatie.",
   "internal": true
  },
  {
   "id": "tp_mmb_seq8",
   "categoryId": "sequencer",
   "variant": "16-step CV/Gate sequencer",
   "ports": [
    {
     "id": "clock",
     "name": "Clk",
     "signalType": "trigger",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Rst",
     "signalType": "trigger",
     "direction": "in"
    },
    {
     "id": "voct_in",
     "name": "V+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "run_in",
     "name": "Run+",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "cv",
     "name": "CV",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "gate_out",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "trig",
     "name": "Trig",
     "signalType": "trigger",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "s1",
     "label": "1",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s2",
     "label": "2",
     "min": -24,
     "max": 24,
     "defaultValue": 4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s3",
     "label": "3",
     "min": -24,
     "max": 24,
     "defaultValue": 7,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s4",
     "label": "4",
     "min": -24,
     "max": 24,
     "defaultValue": 12,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s5",
     "label": "5",
     "min": -24,
     "max": 24,
     "defaultValue": 7,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s6",
     "label": "6",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s7",
     "label": "7",
     "min": -24,
     "max": 24,
     "defaultValue": 5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s8",
     "label": "8",
     "min": -24,
     "max": 24,
     "defaultValue": 3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s9",
     "label": "9",
     "min": -24,
     "max": 24,
     "defaultValue": 12,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s10",
     "label": "10",
     "min": -24,
     "max": 24,
     "defaultValue": 9,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s11",
     "label": "11",
     "min": -24,
     "max": 24,
     "defaultValue": 7,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s12",
     "label": "12",
     "min": -24,
     "max": 24,
     "defaultValue": 5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s13",
     "label": "13",
     "min": -24,
     "max": 24,
     "defaultValue": 4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s14",
     "label": "14",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s15",
     "label": "15",
     "min": -24,
     "max": 24,
     "defaultValue": -5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "knob",
     "id": "s16",
     "label": "16",
     "min": -24,
     "max": 24,
     "defaultValue": -12,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "st"
    },
    {
     "kind": "led",
     "id": "led_s1",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 1
    },
    {
     "kind": "led",
     "id": "led_s2",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 2
    },
    {
     "kind": "led",
     "id": "led_s3",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 3
    },
    {
     "kind": "led",
     "id": "led_s4",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 4
    },
    {
     "kind": "led",
     "id": "led_s5",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 5
    },
    {
     "kind": "led",
     "id": "led_s6",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 6
    },
    {
     "kind": "led",
     "id": "led_s7",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 7
    },
    {
     "kind": "led",
     "id": "led_s8",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 8
    },
    {
     "kind": "led",
     "id": "led_s9",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 9
    },
    {
     "kind": "led",
     "id": "led_s10",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 10
    },
    {
     "kind": "led",
     "id": "led_s11",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 11
    },
    {
     "kind": "led",
     "id": "led_s12",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 12
    },
    {
     "kind": "led",
     "id": "led_s13",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 13
    },
    {
     "kind": "led",
     "id": "led_s14",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 14
    },
    {
     "kind": "led",
     "id": "led_s15",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 15
    },
    {
     "kind": "led",
     "id": "led_s16",
     "color": "#fbbf24",
     "size": "small",
     "bindTo": "__currentStep",
     "bindMatch": 16
    },
    {
     "kind": "knob",
     "id": "root",
     "label": "Root",
     "min": 24,
     "max": 96,
     "defaultValue": 60,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "midi"
    },
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.5,
     "max": 16,
     "defaultValue": 4,
     "taper": "log",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "gate",
     "label": "Gate",
     "min": 0.05,
     "max": 0.95,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "length",
     "label": "Length",
     "min": 2,
     "max": 16,
     "defaultValue": 8,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       6,
       8,
       12,
       16
      ]
     }
    },
    {
     "kind": "switch",
     "id": "run",
     "label": "Run",
     "positions": [
      "Free",
      "Off",
      "Gate"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "led",
     "id": "runLed",
     "color": "#22c55e",
     "size": "small",
     "bindTo": "__runActive"
    },
    {
     "kind": "display",
     "id": "stepDisp",
     "label": "Step",
     "digits": 2,
     "style": "led",
     "bindTo": "__currentStep",
     "format": "int",
     "size": "large"
    },
    {
     "kind": "display",
     "id": "rateBpm",
     "label": "BPM",
     "digits": 3,
     "style": "led",
     "bindTo": "__rateBpm",
     "format": "int",
     "size": "small"
    },
    {
     "kind": "display",
     "id": "lenVal",
     "label": "len",
     "digits": 2,
     "style": "led",
     "bindTo": "length",
     "format": "int",
     "size": "small"
    }
   ],
   "notes": "16-step sequencer met semitone-per-step. Run-schakelaar: Free = sequencer loopt vrij, Off = doorlus (V+ → CV-out, Run+ → Gate-out — sequencer als kabeltje), Gate = wacht op Run+ rising edge en gebruikt V+ als root. CV-out is een proxy voor V/Oct. V+ override-t de root (toetsenbord bepaalt grondtoon). Trig vuurt een korte puls per step (handig voor drum-envelopes). Step-LED licht op bij de huidige positie.",
   "internal": true
  },
  {
   "id": "tp_mmb_noise",
   "categoryId": "noise",
   "variant": "Noise generator",
   "ports": [
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "color",
     "label": "Color",
     "positions": [
      "white",
      "pink",
      "brown"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Witte / roze / bruine ruis. Mooi voor S&H-bronnen, drum-shells of hi-hat-percussie.",
   "internal": true
  },
  {
   "id": "tp_mmb_echo",
   "categoryId": "effect",
   "variant": "Feedback delay",
   "ports": [
    {
     "id": "time_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fbk_cv",
     "name": "F+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "time",
     "label": "Time",
     "min": 0.01,
     "max": 0.5,
     "defaultValue": 0.3,
     "taper": "log",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 0.95,
     "defaultValue": 0.45,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.35,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "toggle",
     "id": "tempo_sync",
     "label": "Sync",
     "defaultValue": false
    }
   ],
   "notes": "Feedback-delay met CV op tijd (sec), feedback en mix. Op de Teensy een AudioEffectDelay-feedbacklus (max 500 ms). Sync-toggle haakt later in op de master-clock.",
   "internal": true
  },
  {
   "id": "tp_mmb_phaser",
   "categoryId": "effect",
   "variant": "Phaser",
   "ports": [
    {
     "id": "rate_cv",
     "name": "R+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "depth_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.1,
     "max": 8,
     "defaultValue": 0.5,
     "taper": "log",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "depth",
     "label": "Depth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 0.95,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "6-traps all-pass phaser (custom AudioStream op de Teensy). CV op rate en depth. Klassieke sweep-modulatie; mooi achter een VCF of als send.",
   "internal": true
  },
  {
   "id": "tp_mmb_octa_vco",
   "categoryId": "vco",
   "variant": "Octa VCO (shared controls)",
   "ports": [
    {
     "id": "voct_1",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_2",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_3",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_4",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_5",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_6",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_7",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "voct_8",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "osc"
    },
    {
     "id": "out_1",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_2",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_3",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_4",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_5",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_6",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_7",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "out_8",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "osc"
    },
    {
     "id": "tune",
     "name": "Tune",
     "signalType": "cv",
     "direction": "in"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Saw",
      "Sqr"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "detune",
     "label": "Detune",
     "min": 0,
     "max": 50,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Multi-module met 8 identieke oscillator-cellen die ALLE dezelfde control-set delen (wave/coarse/fine/level). 'detune' spreidt de 8 cellen symmetrisch in cents voor een dikke supersaw/unison. Eén v/oct-in en één audio-out per cel; 'tune' is een gedeelde V/Oct-offset. Firmware: tp_mmb_octa_vco (FW-PM-1).",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "osc",
     "label": "Oscillator",
     "count": 8,
     "portIds": [
      "voct",
      "out"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_octa_vcf",
   "categoryId": "vcf",
   "variant": "Octa VCF (shared controls)",
   "ports": [
    {
     "id": "cv",
     "name": "CV (all)",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_1",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_2",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_3",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_4",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_5",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_6",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_7",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "in_8",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_1",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_2",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_3",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_4",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_5",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_6",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_7",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "cv_8",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "flt"
    },
    {
     "id": "out_1",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_2",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_3",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_4",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_5",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_6",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_7",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    },
    {
     "id": "out_8",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "flt"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 20,
     "max": 18000,
     "defaultValue": 800,
     "taper": "log",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "q",
     "label": "Res",
     "min": 0.7,
     "max": 5,
     "defaultValue": 0.9,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cv_amt",
     "label": "CV amt",
     "min": 0,
     "max": 7,
     "defaultValue": 2,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "oct"
    },
    {
     "kind": "switch",
     "id": "type",
     "label": "Type",
     "positions": [
      "LP",
      "BP",
      "HP"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Multi-module met 8 identieke state-variable-filtercellen die één control-set delen (cutoff/res/CV-diepte/type) — de vorm van de latere hardware-module met één set fysieke knoppen. Per cel een eigen audio-in, cutoff-CV (±1 = ±CV-amt octaven, bovenop de gedeelde CV-ingang) en audio-uit. Type kiest LP/BP/HP voor alle cellen (her-push nodig). Firmware: tp_mmb_octa_vcf (FW-PM-2).",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "flt",
     "label": "Filter",
     "count": 8,
     "portIds": [
      "in",
      "cv",
      "out"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_octa_vca",
   "categoryId": "vca",
   "variant": "Octa VCA (shared level)",
   "ports": [
    {
     "id": "in_1",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_2",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_3",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_4",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_5",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_6",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_7",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "in_8",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_1",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_2",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_3",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_4",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_5",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_6",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_7",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "cv_8",
     "name": "CV",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "vca"
    },
    {
     "id": "out_1",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_2",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_3",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_4",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_5",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_6",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_7",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    },
    {
     "id": "out_8",
     "name": "Out",
     "signalType": "audio",
     "direction": "out",
     "cellGroupId": "vca"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "taper": "exp",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Multi-module met 8 identieke VCA-cellen (multiply): per cel audio-in, gain-CV (typisch een envelope) en audio-uit. De gedeelde Level-knop schaalt alle cellen. Samen met de Octa-VCO en Octa-VCF maakt dit een complete 8-stemmige poly van drie modules. Firmware: tp_mmb_octa_vca (FW-PM-3).",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "vca",
     "label": "VCA",
     "count": 8,
     "portIds": [
      "in",
      "cv",
      "out"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_quad_mixer_shared",
   "categoryId": "utility",
   "variant": "Quad Mixer (per-cell pan, shared volume)",
   "ports": [
    {
     "id": "in_1",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "chan"
    },
    {
     "id": "in_2",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "chan"
    },
    {
     "id": "in_3",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "chan"
    },
    {
     "id": "in_4",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "chan"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "pan_1",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan_2",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan_3",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan_4",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "volume",
     "label": "Volume",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Multi-module met 4 mix-cellen. Elke cel heeft een eigen audio-in en een eigen PAN-knop (per-cel control), maar deelt één globale VOLUME-knop (shared control). Mengt naar één stereo-out. Voorbeeld van het per-cel-controls-geval van CellGroups (controlIds: ['pan']) — vergelijk met de quad-VCO die juist ALLE controls deelt (controlIds: []). Hardware bestaat nog niet — eerst alleen in simulator gebruiken.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "chan",
     "label": "Channel",
     "count": 4,
     "portIds": [
      "in"
     ],
     "controlIds": [
      "pan"
     ]
    }
   ]
  },
  {
   "id": "tp_mmb_ladder",
   "categoryId": "vcf",
   "variant": "Ladder VCF (Moog-stijl, 24 dB LP)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "cv",
     "name": "F CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "q_cv",
     "name": "Res CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "drive_cv",
     "name": "Drv CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 20,
     "max": 18000,
     "defaultValue": 2000,
     "taper": "log",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "q",
     "label": "Res (Q)",
     "min": 0,
     "max": 1.8,
     "defaultValue": 0.7,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0,
     "max": 4,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cv_amt",
     "label": "F CV amt",
     "min": 0,
     "max": 7,
     "defaultValue": 2,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "oct"
    },
    {
     "kind": "knob",
     "id": "q_cv_amt",
     "label": "Res CV amt",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive_cv_amt",
     "label": "Drv CV amt",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Moog-stijl 4-pole lowpass ladder (Huovilainen-model, firmware tp_mmb_ladder). Res = Q: de Res-knop is de basiswaarde, Res CV moduleert erbovenop (diepte via Res CV amt, 0–1 res-eenheden). F CV en Res CV zijn audio-rate op de Teensy; F CV in octaven (F CV amt 0–7 oct). Drv CV moduleert de drive exponentieel: ±1 CV bij amt 1 is ×4…÷4. Res boven ~1.1 gaat zelf-oscilleren; Drive >1 stuurt de tanh-clipping aan. Alleen lowpass 24 dB/oct — HP/BP doe je met de MMB VCF.",
   "internal": true
  },
  {
   "id": "tp_mmb_ms20",
   "categoryId": "vcf",
   "variant": "MS-20 filter (Korg35 Sallen-Key, LP/HP)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "cv",
     "name": "F CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "q_cv",
     "name": "Res CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "drive_cv",
     "name": "Drv CV",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 20,
     "max": 18000,
     "defaultValue": 2000,
     "taper": "log",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "q",
     "label": "Res (Q)",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0.1,
     "max": 10,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cv_amt",
     "label": "F CV amt",
     "min": 0,
     "max": 7,
     "defaultValue": 2,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "oct"
    },
    {
     "kind": "knob",
     "id": "q_cv_amt",
     "label": "Res CV amt",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive_cv_amt",
     "label": "Drv CV amt",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type",
     "label": "Mode",
     "positions": [
      "LP",
      "HP"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Korg35/MS-20 Sallen-Key filter (zero-delay-feedback naar Pirkle, firmware tp_mmb_ms20) met tanh-diodeclipping in de resonantielus en 2x oversampling — de MS-20 \"scream\". Res = Q: de Res-knop is de basiswaarde, Res CV moduleert erbovenop (diepte via Res CV amt). Drv CV moduleert de drive exponentieel (±1 CV bij amt 1 = ×4…÷4). Res = 1 gaat zelf-oscilleren; Drive bepaalt hoe hard de lus satureert. LP is 12 dB/oct, HP is (Korg35-typisch) 6 dB/oct; de mode-switch schakelt live, zonder rebuild. Alle CV control-rate met per-block smoothing; F CV in octaven.",
   "internal": true
  },
  {
   "id": "tp_mmb_mixer8",
   "categoryId": "utility",
   "variant": "Stereo mixer (8-in)",
   "ports": [
    {
     "id": "in1",
     "name": "1",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in2",
     "name": "2",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in3",
     "name": "3",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in4",
     "name": "4",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in5",
     "name": "5",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in6",
     "name": "6",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in7",
     "name": "7",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in8",
     "name": "8",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "vol1",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan1",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol2",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan2",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol3",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan3",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol4",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan4",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol5",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan5",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol6",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan6",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol7",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan7",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol8",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan8",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Stereo 8-kanaals mixer (twee kolommen van 4). Per kanaal: Vol (0..1) + Pan (-1 links .. +1 rechts, equal-power). De firmware sommeert via twee AudioMixer4-banken in een sub-mix. Sommatie-node voor racks tot 8 stemmen.",
   "internal": true
  },
  {
   "id": "tp_mmb_mixer16",
   "categoryId": "utility",
   "variant": "Stereo mixer (16-in)",
   "ports": [
    {
     "id": "in1",
     "name": "1",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in2",
     "name": "2",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in3",
     "name": "3",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in4",
     "name": "4",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in5",
     "name": "5",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in6",
     "name": "6",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in7",
     "name": "7",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in8",
     "name": "8",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in9",
     "name": "9",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in10",
     "name": "10",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in11",
     "name": "11",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in12",
     "name": "12",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in13",
     "name": "13",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in14",
     "name": "14",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in15",
     "name": "15",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in16",
     "name": "16",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "vol1",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan1",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol2",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan2",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol3",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan3",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol4",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan4",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol5",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan5",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol6",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan6",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol7",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan7",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol8",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan8",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol9",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan9",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol10",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan10",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol11",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan11",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol12",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan12",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol13",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan13",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol14",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan14",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol15",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan15",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vol16",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan16",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Stereo 16-kanaals mixer (vier kolommen van 4). Per kanaal: Vol (0..1) + Pan (-1 links .. +1 rechts, equal-power). De firmware sommeert via vier AudioMixer4-banken in een sub-mix. Sommatie-node voor racks tot 16 stemmen.",
   "internal": true
  },
  {
   "id": "tp_mmb_string",
   "categoryId": "vco",
   "variant": "Karplus-Strong string",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "pluck_cv",
     "name": "P+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "level_cv",
     "name": "L+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "pluck",
     "label": "Pluck",
     "min": 0.01,
     "max": 1,
     "defaultValue": 0.8,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Karplus-Strong physical-modeling snaar (firmware tp_mmb_string, FW-AU-8). Een Gate rising-edge tokkelt de snaar op de toonhoogte uit V/Oct. 'pluck' bepaalt de helderheid/ruisinhoud van de aanslag (0.01 dof … 1.0 helder); pluck en level zijn ook als CV bestuurbaar.",
   "internal": true
  },
  {
   "id": "tp_mmb_elements",
   "categoryId": "vco",
   "variant": "Elements (MI)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "strength",
     "name": "Str",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "envelope",
     "label": "Contour",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "bow",
     "label": "Bow",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "blow",
     "label": "Blow",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "strike",
     "label": "Strike",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "size": "small",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "blow_meta",
     "label": "Flow",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "strike_meta",
     "label": "Mallet",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "fm",
     "label": "FM",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "geometry",
     "label": "Geometry",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "brightness",
     "label": "Bright",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "bow_timbre",
     "label": "Bow Tim",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "blow_timbre",
     "label": "Blow Tim",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "strike_timbre",
     "label": "Strike Tim",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "damping",
     "label": "Damping",
     "min": 0,
     "max": 1,
     "defaultValue": 0.25,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "position",
     "label": "Position",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "space",
     "label": "Space",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "signature",
     "label": "Signat",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mod_freq",
     "label": "ModFrq",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mod_offset",
     "label": "ModOff",
     "min": 0,
     "max": 1,
     "defaultValue": 0.1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Elements modal / physical-modelling voice (firmware tp_mmb_elements, FW-AU-9). V/Oct + Gate in, stereo uit (L/R). Exciters: Bow/Blow/Strike zijn continue levels (mengbaar, zoals de hardware); Flow/Mallet zijn de meta-morphs, Contour de exciter-envelope. FM: 0.5 = neutraal (±24 st bereik). Coarse/fine verschuiven de pitch t.o.v. V/Oct. Monofone voice; voor polyfonie plaats meerdere instanties in een PolyGroup.",
   "internal": true
  },
  {
   "id": "tp_mmb_rings",
   "categoryId": "vco",
   "variant": "Rings (MI resonator)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Strum",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "Odd",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "Even",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "structure_cv",
     "name": "S+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "brightness_cv",
     "name": "B+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "damping_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "position_cv",
     "name": "P+",
     "signalType": "cv",
     "direction": "in"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "structure",
     "label": "Structure",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "brightness",
     "label": "Bright",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "damping",
     "label": "Damping",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "position",
     "label": "Position",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "model",
     "label": "Model",
     "positions": [
      "Modal",
      "Sympath",
      "String",
      "FM",
      "Quant",
      "Str+Rev"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "polyphony",
     "label": "Poly",
     "positions": [
      "1",
      "2",
      "4"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Rings resonator (firmware tp_mmb_rings, FW-AU-11). Elke stijgende flank op Strum plukt de resonator op de huidige V/Oct-toonhoogte; Poly 2/4 laat strums over stemmen roteren (odd op L, even op R). Modellen: modal (klokken/marimba), sympathetic strings, string (Karplus-achtig), plus de FM/quantized/string+reverb bonus-modellen. Structure = inharmoniciteit/snaarkoppeling, Position = excitatiepunt.",
   "internal": true
  },
  {
   "id": "tp_mmb_plaits",
   "categoryId": "vco",
   "variant": "Plaits (MI macro-osc)",
   "ports": [
    {
     "id": "harmonics_cv",
     "name": "H+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "timbre_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "morph_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Trig",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "aux",
     "name": "Aux",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "engine",
     "label": "Engine",
     "min": 0,
     "max": 23,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "display",
     "id": "engDisp",
     "digits": 2,
     "style": "led",
     "bindTo": "engine",
     "format": "int"
    },
    {
     "kind": "knob",
     "id": "harmonics",
     "label": "Harmonics",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "timbre",
     "label": "Timbre",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "morph",
     "label": "Morph",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "decay",
     "label": "Decay",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "lpg",
     "label": "LPG",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    }
   ],
   "notes": "Mutable Instruments Plaits macro-oscillator (firmware tp_mmb_plaits, FW-AU-12). Eén knop kiest uit 24 engines (Plaits 1.2): 0 VA+VCF · 1 Phase distortion · 2/3/4 6-op FM A/B/C · 5 Wave terrain · 6 String machine · 7 Chiptune · 8 VA · 9 Waveshape · 10 FM · 11 Grain · 12 Additive · 13 Wavetable · 14 Chord · 15 Speech · 16 Swarm · 17 Noise · 18 Particle · 19 String · 20 Modal · 21 BassDrum · 22 Snare · 23 HiHat. Speech (15): Trig moet gepatcht zijn; Harmonics kiest het model (0–0,33 klinkers formant→SAM→LPC, 0,33–0,45 LPC-fonemen, daarboven vijf woordbanken), Morph de klinker of het woord, Timbre de formantverschuiving. Harmonics/Timbre/Morph zijn de drie macro-parameters (per engine anders). De interne low-pass-gate (Decay/LPG) vuurt per Trig; Aux draagt de engine-variant. CV-ingangen: harmonics_cv/timbre_cv/morph_cv/level_cv (alias zonder _cv werkt ook).",
   "internal": true
  },
  {
   "id": "tp_mmb_clouds",
   "categoryId": "effect",
   "variant": "Clouds (MI granular)",
   "ports": [
    {
     "id": "in_l",
     "name": "In L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "In R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "freeze",
     "name": "Frz",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "trig",
     "name": "Trig",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "size_cv",
     "name": "S+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "Out L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "Out R",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "position_cv",
     "name": "P+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "density_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "texture_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "position",
     "label": "Position",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "size",
     "label": "Size",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pitch",
     "label": "Pitch",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "density",
     "label": "Density",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "texture",
     "label": "Texture",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Feedbk",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "reverb",
     "label": "Reverb",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Gran",
      "Strch",
      "Loop",
      "Spect"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "toggle",
     "id": "freeze",
     "label": "Freeze",
     "defaultValue": false
    }
   ],
   "notes": "Mutable Instruments Clouds granular processor (firmware tp_mmb_clouds, FW-FX-4). Stereo in → korrelwolk → stereo uit; mono-bron op In L werkt ook. Freeze bevriest de audiobuffer (jack of toggle), Trig vuurt één korrel. Modes: granular / pitch-stretch / looping delay / spectral. CV-ingangen: position/density/texture (ook size_cv/pitch_cv/mix_cv via kabel). Let op: één instantie kost ~26% CPU en ~180 KB heap.",
   "internal": true
  },
  {
   "id": "tp_mmb_tides",
   "categoryId": "lfo",
   "variant": "Tides (MI slopes)",
   "ports": [
    {
     "id": "shape_cv",
     "name": "Sh+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "slope_cv",
     "name": "Sl+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "smooth_cv",
     "name": "Sm+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "shift_cv",
     "name": "Sf+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "rate_cv",
     "name": "R+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out1",
     "name": "1",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out2",
     "name": "2",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out3",
     "name": "3",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out4",
     "name": "4",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.01,
     "max": 100,
     "defaultValue": 2,
     "taper": "log",
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "AD",
      "Loop",
      "AR"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "output",
     "label": "Out",
     "positions": [
      "Gates",
      "Ampl",
      "Phase",
      "Freq"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "knob",
     "id": "shape",
     "label": "Shape",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "slope",
     "label": "Slope",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "smooth",
     "label": "Smooth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "shift",
     "label": "Shift",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Tides (tides2) slope-generator (firmware tp_mmb_tides, FW-CV-1). CV-domein op de 1 kHz-tick: LFO/envelope tot ~100 Hz. Mode: AD = trigger-envelope, Loop = LFO, AR = gate-envelope. Out-mode bepaalt de 4 uitgangen: Gates (slope+EOA+EOR), Ampl (4 niveaus via Shift), Phase (4 fasen — quadratuur-LFO!), Freq (4 gerelateerde snelheden). Rate-CV is exponentieel (±1 = ±1 octaaf). Uitgangen genormaliseerd (fullscale ≈ 1.0). Let op (upstream-gedrag): in Ampl-mode kiest Shift het actieve kanaal — op precies 0.5 zijn alle vier de uitgangen 0.",
   "internal": true
  },
  {
   "id": "tp_mmb_marbles",
   "categoryId": "sequencer",
   "variant": "Marbles (MI random)",
   "ports": [
    {
     "id": "clock",
     "name": "Clk",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "rate_cv",
     "name": "R+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "dejavu_cv",
     "name": "DV+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "spread_cv",
     "name": "Sp+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "t1",
     "name": "t1",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "t2",
     "name": "t2",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "tclk",
     "name": "tK",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "x1",
     "name": "X1",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "x2",
     "name": "X2",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "x3",
     "name": "X3",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "y",
     "name": "Y",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "tempo",
     "label": "Tempo",
     "min": 10,
     "max": 480,
     "defaultValue": 120,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "bpm"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "bias",
     "label": "Bias",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "jitter",
     "label": "Jitter",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "xbias",
     "label": "Bias X",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "steps",
     "label": "Steps",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "dejavu",
     "label": "Déjà vu",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "length",
     "label": "Loop",
     "min": 1,
     "max": 16,
     "defaultValue": 8,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "switch",
     "id": "model",
     "label": "Model",
     "positions": [
      "Coin",
      "Clus",
      "Drum"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "scale",
     "label": "Scale",
     "positions": [
      "Maj",
      "Min",
      "Pent",
      "Pelog",
      "Bhai",
      "Shri"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "range",
     "label": "Range",
     "positions": [
      "+2V",
      "+5V",
      "±5V"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "toggle",
     "id": "extclock",
     "label": "ExtClk",
     "defaultValue": false
    }
   ],
   "notes": "Mutable Instruments Marbles (firmware tp_mmb_marbles, FW-CV-2): generatieve random-sequencer in het CV-domein (1 kHz-tick). t1/t2 zijn random gates rond de interne klok (Tempo, of ExtClk + Clk-jack); tK is de master-klok. X1..X3 zijn gekwantiseerde random-CV's in volts — patch X1 direct op een V/Oct-ingang en kies een Scale. Déjà vu rond 0.5 bevriest de loop (Loop = lengte); Steps maakt gladde CV's trapsgewijs; Spread/Bias X sturen de spreiding. Y is een trage random-CV (klok ÷16). Range: octaafbereik van X (±5V = ±5 octaven rond C4).",
   "internal": true
  },
  {
   "id": "tp_mmb_dx7",
   "categoryId": "vco",
   "variant": "DX7 (msfa 6-op FM)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "vel",
     "name": "Vel",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "bank",
     "label": "Bank",
     "min": 0,
     "max": 8,
     "defaultValue": 0,
     "size": "small",
     "color": "#a5b4fc",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       8
      ]
     }
    },
    {
     "kind": "display",
     "id": "bnkDisp",
     "digits": 2,
     "style": "led",
     "bindTo": "bank",
     "format": "int"
    },
    {
     "kind": "knob",
     "id": "program",
     "label": "Program",
     "min": 0,
     "max": 31,
     "defaultValue": 0,
     "size": "medium",
     "color": "#a5b4fc",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "display",
     "id": "prgDisp",
     "digits": 2,
     "style": "led",
     "bindTo": "program",
     "format": "int"
    },
    {
     "kind": "display",
     "id": "voiceName",
     "digits": 10,
     "style": "led-green",
     "bindTo": "program",
     "bindTo2": "bank",
     "lookup": [
      [
       "BRASS   1",
       "BRASS   2",
       "BRASS   3",
       "STRINGS 1",
       "STRINGS 2",
       "STRINGS 3",
       "ORCHESTRA",
       "PIANO   1",
       "PIANO   2",
       "PIANO   3",
       "E.PIANO 1",
       "GUITAR  1",
       "GUITAR  2",
       "SYN-LEAD 1",
       "BASS    1",
       "BASS    2",
       "E.ORGAN 1",
       "PIPES   1",
       "HARPSICH 1",
       "CLAV    1",
       "VIBE    1",
       "MARIMBA",
       "KOTO",
       "FLUTE   1",
       "ORCH-CHIME",
       "TUB BELLS",
       "STEEL DRUM",
       "TIMPANI",
       "REFS WHISL",
       "VOICE   1",
       "TRAIN",
       "TAKE OFF"
      ],
      [
       "PIANO   4",
       "PIANO   5",
       "E.PIANO 2",
       "E.PIANO 3",
       "E.PIANO 4",
       "PIANO 5THS",
       "CELESTE",
       "TOY PIANO",
       "HARPSICH 2",
       "HARPSICH 3",
       "CLAV    2",
       "CLAV    3",
       "E.ORGAN 2",
       "E.ORGAN 3",
       "E.ORGAN 4",
       "E.ORGAN 5",
       "PIPES   2",
       "PIPES   3",
       "PIPES   4",
       "CALIOPE",
       "ACCORDION",
       "SITAR",
       "GUITAR  3",
       "GUITAR  4",
       "GUITAR  5",
       "GUITAR  6",
       "LUTE",
       "BANJO",
       "HARP    1",
       "HARP    2",
       "BASS    3",
       "BASS    4"
      ],
      [
       "PICCOLO",
       "FLUTE   2",
       "OBOE",
       "CLARINET",
       "SAX BC",
       "BASSOON",
       "STRINGS 4",
       "STRINGS 5",
       "STRINGS 6",
       "STRINGS 7",
       "STRINGS 8",
       "BRASS   4",
       "BRASS   5",
       "BRASS 6 BC",
       "BRASS   7",
       "BRASS   8",
       "RECORDER",
       "HARMONICA1",
       "HRMNCA2 BC",
       "VOICE   2",
       "VOICE   3",
       "GLOKENSPL",
       "VIBE    2",
       "XYLOPHONE",
       "CHIMES",
       "GONG    1",
       "GONG    2",
       "BELLS",
       "COW BELL",
       "BLOCK",
       "FLEXATONE",
       "LOG DRUM"
      ],
      [
       "SYN-LEAD 2",
       "SYN-LEAD 3",
       "SYN-LEAD 4",
       "SYN-LEAD 5",
       "SYN-CLAV 1",
       "SYN-CLAV 2",
       "SYN-CLAV 3",
       "SYN-PIANO",
       "SYNBRASS 1",
       "SYNBRASS 2",
       "SYNORGAN 1",
       "SYNORGAN 2",
       "SYN-VOX",
       "SYN-ORCH",
       "SYN-BASS 1",
       "SYN-BASS 2",
       "HARP-FLUTE",
       "BELL-FLUTE",
       "E.P-BRS BC",
       "T.BL-EXPA",
       "CHIME-STRG",
       "B.DRM-SNAR",
       "SHIMMER",
       "EVOLUTION",
       "WATER GDN",
       "WASP STING",
       "LASER GUN",
       "DESCENT",
       "OCTAVE WAR",
       "GRAND PRIX",
       "ST.HELENS",
       "EXPLOSION"
      ],
      [
       "FLUTE   1",
       "HARPSICH 1",
       "STRG ENS 1",
       "BRIGHT BOW",
       "BRASSHORNS",
       "BR TRUMPET",
       "MARIMBA",
       "E.PIANO 1",
       "PIANO   1",
       "PIPES   1",
       "E.ORGAN 1",
       "E.BASS  1",
       "CLAV    1",
       "HARMONICA1",
       "JAZZ GUIT1",
       "PRC SYNTH1",
       "SAX BC",
       "FRETLESS 1",
       "HARP    1",
       "TIMPANI",
       "HEAVYMETAL",
       "STEEL DRUM",
       "SYN-LEAD 1",
       "VOICES BC",
       "CLAV ENS",
       "LASERSWEEP",
       "TUB ERUPT",
       "GRAND PRIX",
       "REFS WHISL",
       "TRAIN",
       "BRASS S H",
       "TAKE OFF"
      ],
      [
       "PIANO   2",
       "E.GRAND 1",
       "E.GRAND 2",
       "HONKY TONK",
       "E.PIANO 2",
       "E.PIANO 3",
       "E.PIANO 4",
       "CELESTE",
       "FUNK CLAV",
       "CLAV ENS 2",
       "PERC CLAV",
       "HARPSICH 2",
       "E.ORGAN 2",
       "E.ORGAN 3",
       "60-S ORGAN",
       "PIPES   2",
       "PIPES   3",
       "CALIOPE",
       "ACCORDION",
       "TOY PIANO",
       "SITAR",
       "KOTO",
       "JAZZ GUIT2",
       "SPANISHGTR",
       "FOLK GUIT",
       "LUTE",
       "BANJO",
       "CLAS.GUIT",
       "HARP    2",
       "E.BASS  2",
       "FRETLESS 2",
       "PLUCK BASS"
      ],
      [
       "PICCOLO",
       "FLUTE   2",
       "OBOE",
       "CLARINET",
       "BASSOON",
       "PAN FLUTE",
       "LEAD BRASS",
       "HORNS",
       "SOLO TBONE",
       "BRASS BC",
       "BRASS 5THS",
       "SYNTHBRASS",
       "STRG QRT 1",
       "STRG ENS 2",
       "VIOLA SECN",
       "STRGS LOW",
       "HIGH STRGS",
       "PIZZ STGS",
       "STG CRSNDO",
       "STGS 5THS",
       "BELLS",
       "TUB BELLS",
       "RECORDERS",
       "CHIMES",
       "VOICES",
       "XYLOPHONE",
       "COWBELL",
       "WOOD BLOCK",
       "FLEXATONE",
       "LOG DRUM",
       "GLOKENSPL",
       "VIBE"
      ],
      [
       "CLAV-E.PNO",
       "PERC BRASS",
       "PRC SYNTH2",
       "HARPSI-STG",
       "CHIME-STRG",
       "HARP-FLUTE",
       "BELL-FLUTE",
       "STRG-CHIME",
       "STRG-MARIM",
       "STRG-PIZZT",
       "ORCHESTRA",
       "LEAD GUITR",
       "PIANO-BRS",
       "BRS-CHIME",
       "B.DRM-SNAR",
       "E.P-BRS BC",
       "ORG-BRS BC",
       "CLV-BRS BC",
       "WHISTLES",
       "FILTER SWP",
       "FUNKY RISE",
       "WILD BOAR",
       "SHIMMER",
       "EVOLUTION",
       "WATER GDN",
       "WASP STING",
       "MULTI NOTE",
       "DESCENT",
       "OCTAVE WAR",
       "..GOTCHA..",
       "ST.HELENS",
       "EXPLOSION"
      ],
      [
       "USER 0",
       "USER 1",
       "USER 2",
       "USER 3",
       "USER 4",
       "USER 5",
       "USER 6",
       "USER 7",
       "USER 8",
       "USER 9",
       "USER 10",
       "USER 11",
       "USER 12",
       "USER 13",
       "USER 14",
       "USER 15",
       "USER 16",
       "USER 17",
       "USER 18",
       "USER 19",
       "USER 20",
       "USER 21",
       "USER 22",
       "USER 23",
       "USER 24",
       "USER 25",
       "USER 26",
       "USER 27",
       "USER 28",
       "USER 29",
       "USER 30",
       "USER 31"
      ]
     ],
     "text": "----------",
     "size": "medium"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Yamaha DX7-stem op de msfa-engine (Apache-2.0, dezelfde kern als Dexed/MicroDexed; firmware tp_mmb_dx7, FW-AU-13). Eén stem per instantie — polyfoon via de Poly-seeds. De 8 Yamaha factory-ROMs (1A..4B) zitten ingebouwd in de firmware-flash; Bank kiest de ROM en Program de voice 0–31 (namen: zie dx7BankNames.ts — de firmware logt de naam bij elke wissel). Bank USR = eigen 32-voice .syx, geladen via de Teensy-modal (🎹 DX7-bank); zonder upload klinkt USR als E.PIANO 1. Velocity stuurt de FM-envelopes zoals op het origineel; pitch is fractioneel (V/Oct + Coarse/Fine via de interne pitch-mod).",
   "internal": true
  },
  {
   "id": "tp_mmb_warps",
   "categoryId": "effect",
   "variant": "Warps (MI meta-modulator)",
   "ports": [
    {
     "id": "in1",
     "name": "In 1",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in2",
     "name": "In 2",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "algo_cv",
     "name": "A+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "timbre_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "aux",
     "name": "Aux",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "algo",
     "label": "Algorithm",
     "min": 0,
     "max": 8,
     "defaultValue": 2,
     "size": "large",
     "color": "#22c55e",
     "style": "generic"
    },
    {
     "kind": "display",
     "id": "algDisp",
     "digits": 1,
     "style": "led",
     "bindTo": "algo",
     "format": "int"
    },
    {
     "kind": "knob",
     "id": "timbre",
     "label": "Timbre",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "shape",
     "label": "Carrier",
     "positions": [
      "Ext",
      "Sin",
      "Tri",
      "Saw",
      "Pls",
      "Nz"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "drive1",
     "label": "Drv 1",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive2",
     "label": "Drv 2",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Warps meta-modulator (firmware tp_mmb_warps, FW-FX-5). Vouwt In 1 (carrier) en In 2 (modulator) door elkaar; de Algorithm-knop morpht door: 0 xfade · 1 wavefolder · 2 ringmod (analoog model) · 3 ringmod (digitaal) · 4 XOR · 5 comparator · 6 spectraal · 7 morph · 8 vocoder. Timbre kleurt het gekozen algoritme. Carrier ≠ Ext vervangt In 1 door de interne oscillator (V/Oct + Coarse bespeelbaar) — zet 8 (vocoder) en spreek/speel via In 2. Aux draagt de spiegelvariant. Draait native op 44.1 kHz.",
   "internal": true
  },
  {
   "id": "tp_mmb_morph_wt",
   "categoryId": "vco",
   "variant": "Morph-WT (morphing wavetable)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "morph_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "morph",
     "label": "Morph",
     "min": 0,
     "max": 7,
     "defaultValue": 0,
     "size": "large",
     "color": "#22c55e",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "bank",
     "label": "Bank",
     "positions": [
      "Ana",
      "Voc",
      "Hrm",
      "Dig",
      "Usr"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "wslot",
     "label": "W-slot",
     "min": 0,
     "max": 7,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    }
   ],
   "notes": "Morphing-wavetable-VCO (firmware tp_mmb_morph_wt, FW-AU-14): 8 frames per bank, per sample geïnterpoleerd én tussen aangrenzende frames gecrossfaded — draai Morph (of stuur M+ met een LFO) voor vloeiende spectrale beweging. Banken: Analog (sin→tri→saw→puls), Vocal (schuivende formants), Harmonics (drawbar-opbouw), Digital (gaten/fase-flips), USER. USER-frames vul je met de wavetable-push van de Draw-VCO-teken-UI: W-slot kiest het doelframe. v2 is per-octaaf gebandlimit (3 mip-levels), dus ook hoog schoon.",
   "internal": true
  },
  {
   "id": "tp_mmb_stages",
   "categoryId": "envelope",
   "variant": "Stages (MI segment-gen)",
   "ports": [
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "eoc",
     "name": "EOC",
     "signalType": "gate",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "t1",
     "label": "T1",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "s1",
     "label": "S1",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type1",
     "label": "",
     "positions": [
      "R",
      "H",
      "S",
      "A"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "t2",
     "label": "T2",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "s2",
     "label": "S2",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type2",
     "label": "",
     "positions": [
      "R",
      "H",
      "S",
      "A"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "t3",
     "label": "T3",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "s3",
     "label": "S3",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type3",
     "label": "",
     "positions": [
      "R",
      "H",
      "S",
      "A"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "t4",
     "label": "T4",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "s4",
     "label": "S4",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type4",
     "label": "",
     "positions": [
      "R",
      "H",
      "S",
      "A"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "t5",
     "label": "T5",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "s5",
     "label": "S5",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type5",
     "label": "",
     "positions": [
      "R",
      "H",
      "S",
      "A"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "t6",
     "label": "T6",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "s6",
     "label": "S6",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "type6",
     "label": "",
     "positions": [
      "R",
      "H",
      "S",
      "A"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "segments",
     "label": "Active",
     "min": 1,
     "max": 6,
     "defaultValue": 3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "toggle",
     "id": "loop",
     "label": "Loop",
     "defaultValue": false
    },
    {
     "kind": "knob",
     "id": "loop_start",
     "label": "L-start",
     "min": 0,
     "max": 5,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "loop_end",
     "label": "L-end",
     "min": 0,
     "max": 5,
     "defaultValue": 2,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.05,
     "max": 20,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Stages (firmware tp_mmb_stages, FW-CV-3): 6 ketenbare segmenten in het CV-domein (1 kHz-tick). Elk segment heeft een type — R(amp) / H(old) / S(tep) / A(lt) — en twee knoppen (T = primary, S = secondary; betekenis per type: ramp = tijd+vorm, hold = niveau+tijd, step = niveau+portamento). Active kiest hoeveel segmenten meedoen; Loop + L-start/L-end laat een deel herhalen → een multi-stage-LFO. Gate triggert/gatet de keten; EOC pulseert bij de cyclusstart. Zonder loop is het een complexe multi-breakpoint-envelope.",
   "internal": true
  },
  {
   "id": "tp_mmb_peaks",
   "categoryId": "drum",
   "variant": "Peaks (MI drums)",
   "ports": [
    {
     "id": "gate",
     "name": "Trig",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "drum",
     "label": "Drum",
     "positions": [
      "Kick",
      "Snare",
      "Hat",
      "FM"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "decay",
     "label": "Decay",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "snap",
     "label": "Snap",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Peaks drums (firmware tp_mmb_peaks, FW-AU-15): 808-achtige analoge-model-drums. Drum kiest Kick / Snare / Hat / FM; elke stijgende flank op Trig slaat de drum. Tone en Decay zijn de macro-knoppen; Snap = punch (kick) / snappy (snare) / FM-amount (fm). V/Oct + Coarse stemmen de kick/snare/fm. Eén drum per module — plaats er meerdere en klok ze met Marbles t1/t2 of een sequencer. Rendert op 48 kHz, geresampled naar 44.1.",
   "internal": true
  },
  {
   "id": "tp_mmb_resonator",
   "categoryId": "effect",
   "variant": "Resonator (sympathetic)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "struct_cv",
     "name": "St+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "mix",
     "name": "Mix",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "root",
     "label": "Root",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "switch",
     "id": "scale",
     "label": "Scale",
     "positions": [
      "Chrom",
      "Maj",
      "Min",
      "5th",
      "Harm"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "structure",
     "label": "Struct",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "decay",
     "label": "Decay",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "damping",
     "label": "Damp",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Sympathetic-resonator-bank (firmware tp_mmb_resonator, FW-FX-6). Twaalf Karplus-achtige comb-resonatoren gestemd op een schaal rond Root (semitonen rond C2, V/Oct verschuift mee). Audio op In excite't alle snaren tegelijk: harmonisch verwante snaren klinken mee (sitar/piano-klankkast), ook zonder direct te zijn aangeslagen. Struct spreidt de stemming (koor-detune), Decay = resonantietijd, Damp = helderheid (laag = donker). Out en Mix dragen hetzelfde signaal (dry/wet volgens de Mix-knob) — patch op Out. ~75 KB heap, enkele % CPU.",
   "internal": true
  },
  {
   "id": "tp_mmb_cr78",
   "categoryId": "drum",
   "variant": "CR-78 drum (berekend)",
   "ports": [
    {
     "id": "gate",
     "name": "Trig",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "accent_cv",
     "name": "Acc",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "drum",
     "label": "Drum",
     "positions": [
      "Kick",
      "Snare",
      "Rim",
      "Claves",
      "Cowbell",
      "HiHat",
      "Cymbal",
      "Maracas",
      "Guiro",
      "Bongo",
      "Conga",
      "Tamb"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "decay",
     "label": "Decay",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#fbe8c8",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "bend",
     "label": "Bend",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#fbe8c8",
     "style": "generic"
    }
   ],
   "notes": "Roland CR-78 drumstem, berekend i.p.v. gesampeld (firmware tp_mmb_cr78, FW-AU-16). Drum kiest een van 12 stemmen: Kick/Bongo/Conga zijn bridged-T gedempte sinussen met aanslag-pitchbuiging, Snare mengt vel + hiss, Rim/Claves korte hoge sinussen, Cowbell twee onharmonische sinussen door een soft-clip, HiHat/Cymbal/Maracas/Tamb gefilterde ruis met envelope-VCA, Guiro een pulstrein-geratel. Accent-CV maakt de slag luider én buigt de pitch harder (het accent-circuit — dat mist een sample). Tone = kleur/pitch per stem, Bend = buigdiepte, V/Oct stemt de vellen. Eén drum per module, zoals Peaks.",
   "internal": true
  },
  {
   "id": "tp_mmb_quant",
   "categoryId": "utility",
   "variant": "Quantizer (schaal)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "trig",
     "name": "Trig",
     "signalType": "gate",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "scale",
     "label": "Scale",
     "positions": [
      "Chrom",
      "Maj",
      "Min",
      "PentM",
      "Pentm",
      "Dor",
      "5th",
      "Whole"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "root",
     "label": "Root",
     "min": 0,
     "max": 11,
     "defaultValue": 0,
     "size": "medium",
     "color": "#e11d48",
     "style": "generic",
     "unit": "semi",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "glide",
     "label": "Glide",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#0891b2",
     "style": "generic"
    }
   ],
   "notes": "V/Oct-quantizer (firmware tp_mmb_quant, FW-CV-4): klikt de CV op In vast op de dichtstbijzijnde noot van de gekozen schaal. Root verschuift de grondtoon (semitonen), Glide is een one-pole portamento (0–500 ms) tussen de noten. Trig vuurt een 10 ms-puls bij elke nootwissel — trigger er een envelope of pluk mee. Klassiek achter Marbles X-uitgangen, een S&H of een trage LFO.",
   "internal": true
  },
  {
   "id": "tp_mmb_chord",
   "categoryId": "utility",
   "variant": "Chord (4 stemmen)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out1",
     "name": "1",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out2",
     "name": "2",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out3",
     "name": "3",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out4",
     "name": "4",
     "signalType": "cv",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "chord",
     "label": "Chord",
     "positions": [
      "Maj",
      "Min",
      "Maj7",
      "Min7",
      "Dom7",
      "Sus2",
      "Sus4",
      "Dim7",
      "Aug",
      "5th"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "inv",
     "label": "Inv",
     "min": 0,
     "max": 3,
     "defaultValue": 0,
     "size": "medium",
     "color": "#e11d48",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#0891b2",
     "style": "generic"
    }
   ],
   "notes": "Chord-generator (firmware tp_mmb_chord, FW-CV-5): zet vier akkoordstemmen rond de V/Oct-ingang. Inv is de klassieke inversie (laagste stemmen een octaaf omhoog), Spread opent de voicing trapsgewijs in octaven (blijft dus akkoordeigen). Stuur out1..4 naar vier VCO-cellen (Octa-VCO), vier DX7's of de resonator-bank. Achter de quantizer (tp_mmb_quant) blijft de grondtoon in de toonsoort.",
   "internal": true
  },
  {
   "id": "tp_mmb_elements_reverb",
   "categoryId": "effect",
   "variant": "Reverb (Dattorro)",
   "ports": [
    {
     "id": "in_l",
     "name": "In L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "In R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "Out L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "Out R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "amount",
     "label": "Amount",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "time",
     "label": "Time",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "diffusion",
     "label": "Diff",
     "min": 0,
     "max": 1,
     "defaultValue": 0.625,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "lp",
     "label": "Damp",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "small",
     "color": "#0891b2",
     "style": "generic"
    }
   ],
   "notes": "Mutable Instruments Elements' Dattorro-plate-reverb als losse stereo-module (firmware tp_mmb_elements_reverb, FW-FX-3). Amount = dry/wet, Time = staartlengte, Diff = diffusie (echodichtheid), Damp = lowpass in de staart (laag = donkerder). Mono-bron: alleen In L aansluiten werkt (de plate spreidt naar stereo). 64 KB delaybuffer op de heap; draait native op 44.1 kHz.",
   "internal": true
  },
  {
   "id": "tp_mmb_grids",
   "categoryId": "sequencer",
   "variant": "Grids (drum-kaart)",
   "ports": [
    {
     "id": "clock",
     "name": "Clk",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Rst",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "x_cv",
     "name": "X+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "y_cv",
     "name": "Y+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "bd",
     "name": "BD",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "sd",
     "name": "SD",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "hh",
     "name": "HH",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "acc",
     "name": "Acc",
     "signalType": "gate",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "x",
     "label": "X",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "y",
     "label": "Y",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#0891b2",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "bd",
     "label": "BD",
     "min": 0,
     "max": 1,
     "defaultValue": 0.75,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "sd",
     "label": "SD",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "hh",
     "label": "HH",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "chaos",
     "label": "Chaos",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tempo",
     "label": "Tempo",
     "min": 20,
     "max": 300,
     "defaultValue": 120,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "bpm"
    },
    {
     "kind": "toggle",
     "id": "extclock",
     "label": "ExtClk",
     "defaultValue": false
    }
   ],
   "notes": "Topologische drum-sequencer (firmware tp_mmb_grids, FW-SQ-2), geïnspireerd op MI Grids maar met eigen patroondata (upstream is GPL-3.0). X morpht basis→druk, Y mengt syncopatie erin; elke plek op de kaart heeft eigen karakter (value-noise op een 5×5-rooster). BD/SD/HH zijn density-drempels per stem; hits met hoge prioriteit krijgen Acc (accent) — stuur die naar de accent-CV van de CR-78. Chaos randomiseert per patroonronde. 32 stappen (2 maten zestienden), interne klok (Tempo) of ExtClk + Clk-jack. Reset springt naar stap 0.",
   "internal": true
  },
  {
   "id": "tp_mmb_comp",
   "categoryId": "effect",
   "variant": "Compressor + overdrive",
   "ports": [
    {
     "id": "thr_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "drive_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "threshold",
     "label": "Thr",
     "min": -48,
     "max": 0,
     "defaultValue": -18,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "ratio",
     "label": "Ratio",
     "min": 1,
     "max": 20,
     "defaultValue": 4,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": ":1"
    },
    {
     "kind": "knob",
     "id": "attack",
     "label": "Atk",
     "min": 0.1,
     "max": 100,
     "defaultValue": 10,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "release",
     "label": "Rel",
     "min": 5,
     "max": 1000,
     "defaultValue": 120,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "makeup",
     "label": "Gain",
     "min": 0,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Feed-forward peak-compressor met makeup-gain en een tanh soft-clip overdrive (firmware tp_mmb_comp, FW-FX-2). De Teensy Audio-lib heeft geen kant-en-klare compressor; dit is een custom AudioStream. 'drive' voegt na de compressie warme saturatie toe; threshold en drive zijn ook als CV bestuurbaar.",
   "internal": true
  },
  {
   "id": "tp_mmb_tape_echo",
   "categoryId": "effect",
   "variant": "Tape echo",
   "ports": [
    {
     "id": "time_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fbk_cv",
     "name": "F+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "time",
     "label": "Time",
     "min": 0.02,
     "max": 1,
     "defaultValue": 0.35,
     "taper": "log",
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 1.1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "wow",
     "label": "Wow",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "flutter",
     "label": "Flutter",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "Bandecho: de band is een int16-buffer (max 1 s), de leeskop staat op tijd + wow + flutter achter de schrijfkop en de tijd wordt traag geslewd — draaien aan Time zwiept de toonhoogte zoals een bandmotor. Feedback door een verzadiger (Drive) en een toon-lowpass (Tone): elke omloop doffer. Firmware tp_mmb_tape_echo (mmb_dsp::TapeEcho); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_sampler",
   "categoryId": "vco",
   "variant": "Multisampler",
   "ports": [
    {
     "id": "bend",
     "name": "Bend",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_3",
     "name": "3",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_4",
     "name": "4",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "env_1",
     "name": "1",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_2",
     "name": "2",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_3",
     "name": "3",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_4",
     "name": "4",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_5",
     "name": "5",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_6",
     "name": "6",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_7",
     "name": "7",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "env_8",
     "name": "8",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_1",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_2",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_3",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_4",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_5",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_6",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_7",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_8",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "bank",
     "label": "Bank",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       15
      ]
     }
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "start",
     "label": "Start",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "attack",
     "label": "Att",
     "min": 0.2,
     "max": 500,
     "defaultValue": 1.5,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "env_rel",
     "label": "Env rel",
     "min": 10,
     "max": 2000,
     "defaultValue": 120,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "switch",
     "id": "filter",
     "label": "Filter",
     "positions": [
      "Uit",
      "SVF",
      "MS-20"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 20,
     "max": 18000,
     "defaultValue": 2000,
     "taper": "log",
     "size": "medium",
     "color": "#38bdf8",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "q",
     "label": "Res",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "fmode",
     "label": "Mode",
     "positions": [
      "LP",
      "HP",
      "BP"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0.1,
     "max": 10,
     "defaultValue": 1,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cv_amt",
     "label": "CV amt",
     "min": 0,
     "max": 8,
     "defaultValue": 4,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic",
     "unit": "oct"
    },
    {
     "kind": "knob",
     "id": "env_sens",
     "label": "Sens",
     "min": -12,
     "max": 36,
     "defaultValue": 12,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "limit",
     "label": "Limit",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    }
   ],
   "notes": "Multisample-speler als multi-module: acht stem-cellen (voct_k/gate_k/vel_k) die één keymap-bank delen, elk met een filter in de stem (Filter: uit/SVF/MS-20 — dezelfde kernels als de losse VCF en MS-20) dat via cutoff_k gestuurd wordt, en een envelope-follower per stem op env_k (Sens tilt die met decibels op; zonder lift haalt een sample amper 0,2 en blijft de wah een kiertje). Auto-wah = env_k → cutoff_k. Een keymap met key- én velocity-zones kiest per noot en aanslag het juiste sample; V/Oct transponeert vanaf de root-noot van die zone; Bend (gedeelde CV-ingang, V/Oct) komt daar bij alle cellen bovenop — MidiIn.Bend → Bend en de pitch-wheel buigt alle stemmen mee (of een LFO voor vibrato). 1–4 kanalen (mono komt op L+R, stereo op L/R, quad op alle vier), gemengd over alle cellen. Limit (standaard aan): limiter + zachte begrenzing op die som, zodat een zingende MS-20 op een paar stemmen niet digitaal clipt; Uit = hard afknippen op ±1 (het gruis). Loop-modes: geen, one-shot, continu, of tot note-off. Polyfoon spelen = een PolyGroup over de cellen (Poly ▾ → Sampler ×8): MIDI-in verdeelt de noten, de sampler doet niets slims. Banken maak je met de 🎹 Multisample-import; die schrijft een .mmbs die je naar /mmb/banks/NN.mmbs op de SD kopieert — Bank kiest NN. In de simulator draait dezelfde kern (mmb_dsp::SamplePlayer) als wasm. Firmware tp_mmb_sampler.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "voice",
     "label": "Stem",
     "count": 8,
     "portIds": [
      "voct",
      "gate",
      "vel",
      "cutoff",
      "env"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_stereo_vca",
   "categoryId": "effect",
   "variant": "Stereo VCA / panner",
   "ports": [
    {
     "id": "vol_cv",
     "name": "V+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "pan_cv",
     "name": "P+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "vol",
     "label": "Vol",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "pan",
     "label": "Pan",
     "min": -1,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Stereo-VCA/panner: één audio-in waaiert naar L+R. 'vol' regelt het totale niveau, 'pan' de balans (equal-power). Pan-CV: 0 = midden, −1 = hard links, +1 = hard rechts. Firmware tp_mmb_stereo_vca (FW-AU-1).",
   "internal": true
  },
  {
   "id": "tp_mmb_fm_vco",
   "categoryId": "vco",
   "variant": "FM VCO (2-op)",
   "ports": [
    {
     "id": "voct",
     "name": "1V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "tune",
     "name": "Tune",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fm",
     "name": "FM",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Saw",
      "Sqr"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "fm_amt",
     "label": "FM",
     "min": 0,
     "max": 4,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "oct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Twee-operator FM-oscillator (AudioSynthWaveformModulated). De audio-FM-ingang moduleert de carrier-frequentie; 'fm_amt' is de FM-diepte in octaven. Voed FM met een tweede VCO (de modulator) voor klassieke DX-achtige timbres. Firmware tp_mmb_fm_vco (FW-AU-4).",
   "internal": true
  },
  {
   "id": "tp_mmb_comb",
   "categoryId": "effect",
   "variant": "Comb / resonator",
   "ports": [
    {
     "id": "freq_cv",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fbk_cv",
     "name": "F+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Tune",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 0.99,
     "defaultValue": 0.9,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Comb-filter / resonator: een getunede feedback-delay (0.2–50 ms). De V/Oct-ingang stemt de toonhoogte (0V = C4); 'coarse' is een semitone-offset. Bij hoge feedback wordt het een gestemde resonator — voed het met ruis of een puls voor plucked/blown timbres. Firmware tp_mmb_comb (FW-AU-3).",
   "internal": true
  },
  {
   "id": "tp_mmb_wt_vco",
   "categoryId": "vco",
   "variant": "Wavetable VCO",
   "ports": [
    {
     "id": "voct",
     "name": "1V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "tune",
     "name": "Tune",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "bank",
     "label": "Bank",
     "positions": [
      "Saw",
      "Sqr",
      "Tri",
      "Organ",
      "Pulse",
      "Vocal"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Wavetable-oscillator met 6 banks (saw, square, triangle, orgel, 25%-pulse, vocaal/formant) — additief opgebouwd op de Teensy via arbitraryWaveform. 'bank' kiest de golfvorm; coarse/fine zijn pitch-offsets t.o.v. V/Oct. Firmware tp_mmb_wt_vco (FW-AU-5).",
   "internal": true
  },
  {
   "id": "tp_mmb_draw_vco",
   "categoryId": "vco",
   "variant": "Draw-waveshape VCO",
   "ports": [
    {
     "id": "voct",
     "name": "1V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "tune",
     "name": "Tune",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Teken-golfvorm-oscillator: de editor stuurt een single-cycle tabel via het 'wavetable'-serieframe (FW-LIVE-1) en de firmware resamplet naar 256 punten. De zwarte balk is de teken-zone (UI volgt). coarse/fine zijn pitch-offsets t.o.v. V/Oct. Firmware tp_mmb_draw_vco (FW-AU-6).",
   "internal": true
  },
  {
   "id": "tp_mmb_stk_sound",
   "categoryId": "vco",
   "variant": "STK Sound (multi)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "strength",
     "name": "Str+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "timbre",
     "name": "Tim+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "modulation",
     "name": "Mod+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "sound",
     "label": "Sound",
     "positions": [
      "Plucked",
      "Clarinet",
      "Bowed",
      "Flute",
      "Brass",
      "Saxophony",
      "BlowHole",
      "BandedWG",
      "Mandolin"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "timbre",
     "label": "Timbre",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "modulation",
     "label": "Mod",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "strength",
     "label": "Str",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Multi-sound physical-modelling voice (firmware tp_mmb_stk_sound, FW-AU-10). De sound-selector kiest welk STK-algoritme actief is: Plucked (getokkelde snaar, Karplus-Strong), Clarinet (riet), Bowed (gestreken snaar), Flute (fluit), Brass (koper), Saxophony (saxofoon), BlowHole (enkelriet+klankgat), BandedWG (modale/waveguide) of Mandolin (commuted synthesis, geëmbedde body-samples). Alle CV-ingangen tellen op bij de knopwaarde. Monofone voice; polyfonie via PolyGroup.",
   "internal": true
  },
  {
   "id": "tp_mmb_env_follower",
   "categoryId": "envelope",
   "variant": "Envelope follower (8 cellen)",
   "ports": [
    {
     "id": "in_1",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_2",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_3",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_4",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_5",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_6",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_7",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "in_8",
     "name": "In",
     "signalType": "audio",
     "direction": "in",
     "cellGroupId": "follow"
    },
    {
     "id": "env_1",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_2",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_3",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_4",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_5",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_6",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_7",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "env_8",
     "name": "Env",
     "signalType": "cv",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_1",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_2",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_3",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_4",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_5",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_6",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_7",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    },
    {
     "id": "gate_8",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out",
     "cellGroupId": "follow"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "attack",
     "label": "Attack",
     "min": 0.1,
     "max": 100,
     "defaultValue": 5,
     "taper": "log",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "release",
     "label": "Release",
     "min": 5,
     "max": 1000,
     "defaultValue": 150,
     "taper": "log",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "sens",
     "label": "Sens",
     "min": -12,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#0891b2",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "thresh",
     "label": "Thresh",
     "min": 0,
     "max": 1,
     "defaultValue": 0.1,
     "size": "medium",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Peak",
      "RMS"
     ],
     "defaultIndex": 1
    }
   ],
   "notes": "Multi-module met 8 identieke envelope-follower-cellen: per cel een audio-in, de gevolgde envelope als CV (0..1) en een gate zodra die boven Thresh komt. Attack/Release zijn tijdconstanten van de detector; Sens is de gevoeligheid in dB; Mode kiest tussen piek (scherp, reageert op transiënten) en RMS (rustiger, volgt het gemiddelde vermogen). De gate heeft 25 % hysterese zodat een uitstervende staart niet klappert. Typisch: sampler → in_1, env_1 → cutoff-CV van een VCF. Detectie loopt op audiotempo, niet op de CV-tick, zodat een aanslag van 2 ms niet wordt gemist. Firmware: tp_mmb_env_follower (FW-CV-6), gedeelde DSP mmb_dsp::EnvFollower — in de simulator draait dezelfde code als wasm.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "follow",
     "label": "Follower",
     "count": 8,
     "portIds": [
      "in",
      "env",
      "gate"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_env_follower_mono",
   "categoryId": "envelope",
   "variant": "Envelope follower (enkel)",
   "ports": [
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "env",
     "name": "Env",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "attack",
     "label": "Att",
     "min": 0.1,
     "max": 100,
     "defaultValue": 5,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "release",
     "label": "Rel",
     "min": 5,
     "max": 1000,
     "defaultValue": 150,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "sens",
     "label": "Sens",
     "min": -12,
     "max": 36,
     "defaultValue": 0,
     "size": "small",
     "color": "#0891b2",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "thresh",
     "label": "Thr",
     "min": 0,
     "max": 1,
     "defaultValue": 0.1,
     "size": "small",
     "color": "#e11d48",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Peak",
      "RMS"
     ],
     "defaultIndex": 1
    }
   ],
   "notes": "Enkelvoudige envelope follower: audio erin, de gevolgde envelope als CV (0..1) eruit, plus een gate zodra die boven Thresh komt. Attack/Release zijn tijdconstanten van de detector; Sens is de gevoeligheid in dB; Mode kiest tussen piek (scherp, reageert op transiënten) en RMS (rustiger, volgt het gemiddelde vermogen). De gate heeft 25 % hysterese zodat een uitstervende staart niet klappert. Typisch: sampler → In, Env → cutoff-CV van een VCF. Firmware: tp_mmb_env_follower_mono (FW-CV-6), dezelfde romp en dezelfde DSP als de 8-cel versie — alleen één cel. In de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_fet_comp",
   "categoryId": "effect",
   "variant": "FET compressor",
   "ports": [
    {
     "id": "gr",
     "name": "GR",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "input",
     "label": "Input",
     "min": -12,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "output",
     "label": "Output",
     "min": -24,
     "max": 12,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "attack",
     "label": "Attack",
     "min": 1,
     "max": 7,
     "defaultValue": 4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       1,
       7
      ]
     }
    },
    {
     "kind": "knob",
     "id": "release",
     "label": "Release",
     "min": 1,
     "max": 7,
     "defaultValue": 4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       1,
       7
      ]
     }
    },
    {
     "kind": "switch",
     "id": "ratio",
     "label": "Ratio",
     "positions": [
      "4:1",
      "8:1",
      "12:1",
      "20:1",
      "All"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "color",
     "label": "Color",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "FET-compressor die knipoogt naar de UREI/UA 1176. Geen threshold-knop: de drempel ligt vast en Input stuurt hem aan (meer Input = meer compressie), Output haalt het niveau terug. Attack en Release 1–7, 7 = snelst (800 → 20 µs en 1100 → 50 ms); op de snelste standen vervormt de bas, net als bij het echte apparaat. Ratio 4/8/12/20, en All = alle knoppen tegelijk ingedrukt: drempel lager, harder dan 20:1, de transiënt knalt erdoor en veel meer vervorming. De FET-vervorming groeit met het ingrijpen. Color regelt hoeveel FET-vervorming erbij komt (0 schoon, 1 zoals gemeten aan het apparaat, 2 dik; dubbel bemonsterd zodat het warm blijft). Mix = parallelle compressie, Bypass laat het signaal ongemoeid door (met/zonder vergelijken; zet dan Output zo dat beide kanten even luid zijn). GR = gain reduction als CV (1 = 20 dB). Stereo gekoppeld; alleen L aangesloten = mono op beide uitgangen. Firmware tp_mmb_fet_comp (mmb_dsp::FetComp); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_opto_comp",
   "categoryId": "effect",
   "variant": "Opto compressor",
   "ports": [
    {
     "id": "gr",
     "name": "GR",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "peak",
     "label": "Peak red.",
     "min": 0,
     "max": 100,
     "defaultValue": 40,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "gain",
     "label": "Gain",
     "min": -20,
     "max": 20,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Comp",
      "Limit"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "color",
     "label": "Color",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Opto-compressor die knipoogt naar de Teletronix LA-2A. Twee knoppen, zoals het apparaat: Peak Reduction zakt de drempel (0 tot −45 dBFS) en Gain is de uitgangsversterking; attack en release liggen vast. Het karakter zit in de lichtcel: de eerste helft van het ingrijpen is in ~60 ms weg, de rest sijpelt er in seconden uit, en hoe langer en harder hij heeft gewerkt hoe trager dat gaat (~0,8 tot 12 s). Daardoor ademt hij mee in plaats van te pompen. Mode: Comp (~3:1 met brede knie) of Limit. Color regelt de buisverzadiging (0 schoon, 1 zoals het apparaat, 2 dik; dubbel bemonsterd), Mix is parallelle compressie, Bypass laat het signaal ongemoeid door. GR = gain reduction als CV (1 = 20 dB). Stereo gekoppeld; alleen L aangesloten = mono op beide uitgangen. Firmware tp_mmb_opto_comp (mmb_dsp::OptoComp); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_bus_comp",
   "categoryId": "effect",
   "variant": "VCA bus compressor",
   "ports": [
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "gr",
     "name": "GR",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "threshold",
     "label": "Threshold",
     "min": -60,
     "max": 0,
     "defaultValue": -18,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "makeup",
     "label": "Makeup",
     "min": 0,
     "max": 20,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "ratio",
     "label": "Ratio",
     "positions": [
      "2:1",
      "4:1",
      "10:1"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "attack",
     "label": "Attack",
     "positions": [
      "0.1",
      "0.3",
      "1",
      "3",
      "10",
      "30"
     ],
     "defaultIndex": 5
    },
    {
     "kind": "switch",
     "id": "release",
     "label": "Release",
     "positions": [
      "0.1",
      "0.3",
      "0.6",
      "1.2",
      "Auto"
     ],
     "defaultIndex": 4
    },
    {
     "kind": "switch",
     "id": "sc_hpf",
     "label": "SC HPF",
     "positions": [
      "Uit",
      "60",
      "100",
      "150"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "VCA-buscompressor die knipoogt naar de SSL G-bus: strak en schoon, de lijm op een mix. Vaste standen zoals het apparaat: Attack 0,1 tot 30 ms, Release 0,1 tot 1,2 s en Auto, Ratio 2/4/10. De klassieke busstand: attack 30, release Auto, ratio 2 of 4 — de aanslag komt erdoor en de mix pompt mee met de maat. Auto = een snelle envelope (100 ms) voor losse pieken en een trage (1,2 s) die alleen bij aanhoudend luid materiaal groeit; de grootste wint. SC HPF (niet op het origineel) haalt laag uit de detector zodat de bas hem minder laat pompen. Makeup, Mix (parallel), Bypass, GR als CV. Stereo gekoppeld. Firmware tp_mmb_bus_comp (mmb_dsp::BusComp); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_varimu_comp",
   "categoryId": "effect",
   "variant": "Vari-mu compressor",
   "ports": [
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "gr",
     "name": "GR",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "input",
     "label": "Input",
     "min": -12,
     "max": 24,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "threshold",
     "label": "Threshold",
     "min": -40,
     "max": 0,
     "defaultValue": -18,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "output",
     "label": "Output",
     "min": -24,
     "max": 12,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "time",
     "label": "Time",
     "positions": [
      "1",
      "2",
      "3",
      "4",
      "5",
      "6"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "LR",
      "M/S"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "color",
     "label": "Color",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Variable-mu buizencompressor die knipoogt naar de Fairchild 660/670: dik, warm, lijm. Er is geen vaste ratio: een paar dB boven de drempel rond 2:1, 20 dB erboven ~12:1 — zacht in, stevig aan de top. Time 1–6 zoals het apparaat (attack 0,2–0,8 ms, release 0,3 / 0,8 / 2 / 5 s); 5 en 6 passen zich aan het programma aan (een trage envelope die alleen bij aanhoudend materiaal groeit, loslaten in 10 of 25 s). Mode LR regelt links en rechts samen, M/S (lateral/vertical, zoals de 670) midden en zijkant apart: het midden stevig zonder de ruimte in te klemmen. Color = buisvervorming die meegroeit met het ingrijpen (dubbel bemonsterd). Input, Threshold, Output, Mix, Bypass, GR als CV. Firmware tp_mmb_varimu_comp (mmb_dsp::VariMuComp); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_program_eq",
   "categoryId": "effect",
   "variant": "Program EQ",
   "ports": [
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "low_freq",
     "label": "Low Hz",
     "positions": [
      "20",
      "30",
      "60",
      "100"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "knob",
     "id": "low_boost",
     "label": "Boost",
     "min": 0,
     "max": 10,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       10
      ]
     }
    },
    {
     "kind": "knob",
     "id": "low_atten",
     "label": "Atten",
     "min": 0,
     "max": 10,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       10
      ]
     }
    },
    {
     "kind": "knob",
     "id": "output",
     "label": "Output",
     "min": -12,
     "max": 12,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "high_freq",
     "label": "High kHz",
     "positions": [
      "3",
      "4",
      "5",
      "8",
      "10",
      "12",
      "16"
     ],
     "defaultIndex": 4
    },
    {
     "kind": "knob",
     "id": "high_boost",
     "label": "Boost",
     "min": 0,
     "max": 10,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       10
      ]
     }
    },
    {
     "kind": "knob",
     "id": "bandwidth",
     "label": "Bandwidth",
     "min": 0,
     "max": 10,
     "defaultValue": 5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       10
      ]
     }
    },
    {
     "kind": "knob",
     "id": "color",
     "label": "Color",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "atten_freq",
     "label": "Atten kHz",
     "positions": [
      "5",
      "10",
      "20"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "high_atten",
     "label": "Atten",
     "min": 0,
     "max": 10,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       10
      ]
     }
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Passieve program-EQ die knipoogt naar de Pultec EQP-1A. Laag (20/30/60/100 Hz): Boost tot +13,5 dB (een shelf met een lichte bult rond de frequentie) en een aparte Atten tot −10 dB die hoger begint (~3×) en zachter is. Draai je beide open, dan krijg je de beroemde Pultec-truc: een stevige boost onderin en een dip net erboven — vol maar niet modderig (op 60 Hz, beide op 10: +4,6 dB op 30 Hz, −6,8 dB rond 120 Hz). Hoog: een Boost-bell op 3–16 kHz (tot +16 dB) met Bandwidth van scherp naar breed, en een aparte Atten (shelf op 5/10/20 kHz, tot −16 dB). Buistrap met Color (0 = schoon), Output om het niveau gelijk te trekken bij een A/B met Bypass. Knoppen 0–10 zoals het apparaat; draaien glijdt in ~5 ms zodat het niet ritst. Stereo. Firmware tp_mmb_program_eq (mmb_dsp::ProgramEq); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_diode_comp",
   "categoryId": "effect",
   "variant": "Diode bridge compressor",
   "ports": [
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "gr",
     "name": "GR",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "threshold",
     "label": "Threshold",
     "min": -50,
     "max": 0,
     "defaultValue": -20,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "makeup",
     "label": "Makeup",
     "min": 0,
     "max": 20,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "ratio",
     "label": "Ratio",
     "positions": [
      "1.5",
      "2",
      "3",
      "4",
      "6"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "attack",
     "label": "Attack",
     "positions": [
      "Fast",
      "Slow"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "release",
     "label": "Release",
     "positions": [
      "0.1",
      "0.4",
      "0.8",
      "1.5",
      "A1",
      "A2"
     ],
     "defaultIndex": 4
    },
    {
     "kind": "knob",
     "id": "color",
     "label": "Color",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Diodebrug-compressor die knipoogt naar de Neve 33609 / 2254: dik en gekleurd. Diodes zijn symmetrisch, dus vooral oneven harmonischen (3e, 5e) — anders dan de buis (even) en de FET (gemengd) — en die groeien hard mee met het ingrijpen: rustig is bijna schoon, flink ingrijpen wordt dik en Brits. Ratio 1,5 / 2 / 3 / 4 / 6 met een zachte knie, Attack Fast (2 ms) of Slow (10 ms), Release 0,1 / 0,4 / 0,8 / 1,5 s en A1/A2 (programma-afhankelijk: een snelle envelope van 40 of 150 ms naast een trage die alleen bij aanhoudend materiaal groeit en in 5 s loslaat). Color schaalt de diodevervorming (dubbel bemonsterd, alleen het vervormingsdeel), Threshold, Makeup, Mix, Bypass, GR als CV. Stereo gekoppeld. Firmware tp_mmb_diode_comp (mmb_dsp::DiodeComp); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_console_eq",
   "categoryId": "effect",
   "variant": "Console EQ",
   "ports": [
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "hpf",
     "label": "HPF",
     "positions": [
      "Uit",
      "50",
      "80",
      "160",
      "300"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "high_gain",
     "label": "High 12k",
     "min": -16,
     "max": 16,
     "defaultValue": 0,
     "size": "medium",
     "color": "#38bdf8",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "output",
     "label": "Output",
     "min": -12,
     "max": 12,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "mid_freq",
     "label": "Mid Hz",
     "positions": [
      "360",
      "700",
      "1.6k",
      "3.2k",
      "4.8k",
      "7.2k"
     ],
     "defaultIndex": 2
    },
    {
     "kind": "knob",
     "id": "mid_gain",
     "label": "Mid",
     "min": -18,
     "max": 18,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "color",
     "label": "Color",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "low_freq",
     "label": "Low Hz",
     "positions": [
      "35",
      "60",
      "110",
      "220"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "low_gain",
     "label": "Low",
     "min": -16,
     "max": 16,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f97316",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Console-EQ die knipoogt naar de Britse klasse-A kanaal-EQ (Neve 1073). Vaste keuzefrequenties, zoals het apparaat: HPF uit/50/80/160/300 Hz met 18 dB/oct; Low shelf op 35/60/110/220 Hz (±16 dB) met een lichte bult bij de knik — de inductor — waardoor +6 dB laag stevig klinkt en niet wollig; Mid bell op 360 Hz–7,2 kHz (±18 dB) met een matige Q die licht meeloopt met de gain (kleine ingrepen breed, grote gerichter); High shelf op 12 kHz (±16 dB). Color = klasse-A/transformatorkleur (asymmetrische verzadiging rond −12 dBFS, dubbel bemonsterd; 0 schoon, 2 dik). Output om het niveau gelijk te trekken bij een A/B met Bypass. Draaien glijdt in ~5 ms. Stereo. Firmware tp_mmb_console_eq (mmb_dsp::ConsoleEq); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_para_eq",
   "categoryId": "effect",
   "variant": "Parametric EQ",
   "ports": [
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "lf_freq",
     "label": "Freq",
     "min": 30,
     "max": 450,
     "defaultValue": 100,
     "taper": "log",
     "size": "small",
     "color": "#f97316",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "lf_gain",
     "label": "Gain",
     "min": -15,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "lf_shelf",
     "label": "Shape",
     "positions": [
      "Bell",
      "Shelf"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "lmf_freq",
     "label": "Freq",
     "min": 200,
     "max": 2000,
     "defaultValue": 600,
     "taper": "log",
     "size": "small",
     "color": "#f5a623",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "lmf_gain",
     "label": "Gain",
     "min": -15,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "lmf_q",
     "label": "Q",
     "min": 0.4,
     "max": 4,
     "defaultValue": 1,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "hmf_freq",
     "label": "Freq",
     "min": 600,
     "max": 7000,
     "defaultValue": 2500,
     "taper": "log",
     "size": "small",
     "color": "#f5a623",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "hmf_gain",
     "label": "Gain",
     "min": -15,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "knob",
     "id": "hmf_q",
     "label": "Q",
     "min": 0.4,
     "max": 4,
     "defaultValue": 1,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "hf_freq",
     "label": "Freq",
     "min": 1500,
     "max": 16000,
     "defaultValue": 8000,
     "taper": "log",
     "size": "small",
     "color": "#38bdf8",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "hf_gain",
     "label": "Gain",
     "min": -15,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#f5a623",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "hf_shelf",
     "label": "Shape",
     "positions": [
      "Bell",
      "Shelf"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "hpf",
     "label": "HPF",
     "min": 16,
     "max": 400,
     "defaultValue": 16,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "lpf",
     "label": "LPF",
     "min": 3000,
     "max": 20000,
     "defaultValue": 20000,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "switch",
     "id": "prop_q",
     "label": "Prop.Q",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "output",
     "label": "Output",
     "min": -12,
     "max": 12,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "dB"
    },
    {
     "kind": "switch",
     "id": "bypass",
     "label": "Bypass",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    }
   ],
   "notes": "Vierbands parametrische EQ die knipoogt naar de Britse mixer-EQ (SSL E/G): strak, schoon, het werkpaard. LF (30–450 Hz) en HF (1,5–16 kHz) schakelbaar bell of shelf; LMF (200 Hz–2 kHz) en HMF (600 Hz–7 kHz) met eigen Q (0,4–4); alle ±15 dB. HPF 12 dB/oct (helemaal links = uit) en LPF (helemaal rechts = uit). Prop.Q is de Amerikaanse stand (API 550): de Q loopt mee met de gain — een kleine ingreep is breed, een grote gericht. Geen verzadiging; Output om het niveau gelijk te trekken bij een A/B met Bypass. Alle knoppen glijden in ~5 ms. Stereo. Firmware tp_mmb_para_eq (mmb_dsp::ParamEq); dezelfde kern als wasm in de simulator.",
   "internal": true
  },
  {
   "id": "tp_mmb_stereo_tape_echo",
   "categoryId": "effect",
   "variant": "Stereo tape echo",
   "ports": [
    {
     "id": "time_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fbk_cv",
     "name": "F+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "cross_cv",
     "name": "X+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "time",
     "label": "Time",
     "min": 0.02,
     "max": 1,
     "defaultValue": 0.35,
     "taper": "log",
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "ratio",
     "label": "Ratio",
     "min": 0.5,
     "max": 2,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "unit": "×R",
     "ticks": {
      "every": 0.25,
      "highlight": [
       0.5,
       0.75,
       1,
       1.5,
       2
      ]
     }
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 1.1,
     "defaultValue": 0.4,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cross",
     "label": "Cross",
     "min": 0,
     "max": 1.1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#38bdf8",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "wow",
     "label": "Wow",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "flutter",
     "label": "Flutter",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "Stereo bandecho: twee bandsporen (dezelfde TapeEcho-kern als het mono-echo: verzadiging, toon-laagdoorlaat, wow en flutter) met Ratio = tijd van het rechterspoor als factor van links (0,75 of 1,5 = gepunteerde patronen) en Cross = hoeveel van het natte signaal van het ene spoor de schrijfkop van het andere in gaat. Cross 1 met Fbk 0 = ping-pong; Cross én Fbk samen = een wolk die van links naar rechts kruipt (de verzadiger houdt de lus in toom, ook boven 1). De wow/flutter van rechts loopt een kwartslag achter, dus de sporen zweven niet in de maat: breedte. Zonder R-kabel krijgt rechts hetzelfde als links (mono in, stereo uit). Firmware tp_mmb_stereo_tape_echo, mmb_dsp::StereoTapeEcho — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_digital_echo",
   "categoryId": "effect",
   "variant": "Vintage digital echo",
   "ports": [
    {
     "id": "time_cv",
     "name": "T+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "fbk_cv",
     "name": "F+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mod_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "time",
     "label": "Time",
     "min": 0.005,
     "max": 1,
     "defaultValue": 0.3,
     "taper": "log",
     "size": "medium",
     "color": "#a3e635",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "ratio",
     "label": "Ratio",
     "min": 0.5,
     "max": 2,
     "defaultValue": 1,
     "size": "medium",
     "color": "#a3e635",
     "style": "generic",
     "unit": "×R",
     "ticks": {
      "every": 0.25,
      "highlight": [
       0.5,
       0.75,
       1,
       1.5,
       2
      ]
     }
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 1.1,
     "defaultValue": 0.4,
     "size": "medium",
     "color": "#a3e635",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cross",
     "label": "Cross",
     "min": 0,
     "max": 1.1,
     "defaultValue": 0,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mod_rate",
     "label": "Rate",
     "min": 0.05,
     "max": 10,
     "defaultValue": 0.8,
     "taper": "log",
     "size": "small",
     "color": "#38bdf8",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "mod_depth",
     "label": "Depth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "bits",
     "label": "Bits",
     "min": 6,
     "max": 16,
     "defaultValue": 12,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "band",
     "label": "Band",
     "min": 1000,
     "max": 16000,
     "defaultValue": 8000,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Vintage digitale echo, naar de rack-delays van begin jaren tachtig: companderende converters van Bits breed (12 = de klassieke kasten; 8 wordt krakerig), een bandbreedte Band met de aliasing van toen (de interne samplefrequentie is 2 × Band — het gruis op de herhalingen), en een sinus-modulatie op de leeskop (Rate/Depth) voor chorus op de echo. Twee sporen met Ratio (R-tijd als factor van L) en Cross-feedback zoals het stereo bandecho. Zonder R-kabel krijgt rechts hetzelfde als links. Firmware tp_mmb_digital_echo, mmb_dsp::DigitalEcho — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_bbd_chorus",
   "categoryId": "effect",
   "variant": "BBD chorus / flanger",
   "ports": [
    {
     "id": "rate_cv",
     "name": "R+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "depth_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.02,
     "max": 12,
     "defaultValue": 0.6,
     "taper": "log",
     "size": "medium",
     "color": "#4ade80",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "depth",
     "label": "Depth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#4ade80",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "delay",
     "label": "Delay",
     "min": 0.5,
     "max": 40,
     "defaultValue": 8,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": -0.95,
     "max": 0.95,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "age",
     "label": "Age",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "BBD-chorus (emmertjesgeheugen, CE-1/Dimension-familie): een korte vertraging (Delay, 2–6 ms = flanger, 8–20 = chorus, 20+ = doubling) die door een driehoek-LFO (Rate/Depth) heen en weer wordt getrokken. Het karakter zit in de keten: laagdoorlaat aan in- en uitgang (Tone = bandbreedte van de emmertjes), een zachte compander en klokruis (Age). Twee sporen met Spread = LFO-fasehoek (0 = mono, 1 = tegenfase: het brede Dimension-beeld); Fbk negatief of positief voor de flanger-kant. Mono in geeft stereo uit; met een R-kabel blijft het echt stereo. Firmware tp_mmb_bbd_chorus, mmb_dsp::BbdChorus — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_ringmod",
   "categoryId": "effect",
   "variant": "Ring modulator",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "carrier",
     "name": "Car",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "freq",
     "label": "Freq",
     "min": 1,
     "max": 5000,
     "defaultValue": 440,
     "taper": "log",
     "size": "large",
     "color": "#e879f9",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Sqr"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Clean",
      "Diode"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "bias",
     "label": "Bias",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Ringmodulator: ingang × draaggolf. De draaggolf komt van de eigen oscillator (Freq × 2^V/Oct — stem hem met een MIDI-pitch voor harmonische klokken, of laat hem los voor metaal) of van de Car-ingang als daar een kabel in zit (dan is het een echte vierkwadrantvermenigvuldiger van twee signalen). Clean = het zuivere product: alleen som- en verschiltonen, de grondtonen verdwijnen. Diode = de vier-diodenring: Bias is de drempel van de dioden; de draaggolf en de ingang lekken door en er komen oneven harmonischen bij — het gemene van een echte ringmod. Firmware tp_mmb_ringmod, mmb_dsp::RingMod — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_octaver",
   "categoryId": "effect",
   "variant": "Analog octaver",
   "ports": [
    {
     "id": "oct1_cv",
     "name": "1+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "oct2_cv",
     "name": "2+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "up_cv",
     "name": "U+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "oct1",
     "label": "−1 oct",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "medium",
     "color": "#34d399",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "oct2",
     "label": "−2 oct",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#34d399",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "up",
     "label": "Up",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#34d399",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "dry",
     "label": "Dry",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "Analoge octaver naar de klassieke octaafpedalen (OC-2-familie): geen pitch-shifter maar een flip-flop. De ingang gaat door een tracking-laagdoorlaat, een comparator maakt er een blokgolf van en twee delers geven f/2 (−1 oct) en f/4 (−2 oct); die blokgolven ademen mee met de envelope van de ingang en worden afgerond door Tone (laag = bijna sinus, hoog = hoekig). Up is de Octavia-truc: dubbelfasig gelijkrichten voor een octaaf omhoog (rauw, fuzzy). De drie niveaus zijn moduleerbaar via de CV-ingangen (een kabel vervangt de knop): envelope of LFO op −1 oct geeft een ademende sub. Werkt het best op één noot tegelijk (bas, lead); op akkoorden gaat het net zo mooi mis als het origineel. Firmware tp_mmb_octaver, mmb_dsp::Octaver — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_harmonizer",
   "categoryId": "effect",
   "variant": "Pitch shifter / harmonizer",
   "ports": [
    {
     "id": "voct_a",
     "name": "A V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "voct_b",
     "name": "B V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "semi_a",
     "label": "Semi",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "medium",
     "color": "#c084fc",
     "style": "generic",
     "unit": "st",
     "step": 1,
     "ticks": {
      "every": 12,
      "highlight": [
       -12,
       0,
       12
      ]
     }
    },
    {
     "kind": "knob",
     "id": "cent_a",
     "label": "Cent",
     "min": -50,
     "max": 50,
     "defaultValue": 0,
     "size": "small",
     "color": "#c084fc",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "semi_b",
     "label": "Semi",
     "min": -24,
     "max": 24,
     "defaultValue": 7,
     "size": "medium",
     "color": "#c084fc",
     "style": "generic",
     "unit": "st",
     "step": 1,
     "ticks": {
      "every": 12,
      "highlight": [
       -12,
       0,
       12
      ]
     }
    },
    {
     "kind": "knob",
     "id": "cent_b",
     "label": "Cent",
     "min": -50,
     "max": 50,
     "defaultValue": 0,
     "size": "small",
     "color": "#c084fc",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "lvl_a",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "lvl_b",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "window",
     "label": "Window",
     "min": 8,
     "max": 120,
     "defaultValue": 40,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 0.9,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "algo",
     "label": "Algo",
     "positions": [
      "Heads",
      "Grains"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "jitter",
     "label": "Jitter",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Pitch-shifter/harmonizer in de stijl van de rack-harmonizers: twee stemmen (A, B) die elk een vertragingslijn met twee kruisgefadete leeskoppen uitlezen — de koppen lopen met 2^(semi/12) door het geheugen. Semi in halve tonen (±24), Cent fijn, en A V/Oct / B V/Oct tellen erbij op (1 V = 12 st: een sequencer of de MIDI-pitch als interval). Window = korrel: klein (10–20 ms) volgt strak maar klinkt ietsje metaalachtig, groot (60–100) is zachter maar smeert aanslagen. Fbk stuurt het natte signaal terug de shifter in: +12 met feedback = shimmer, +7 = getrapte kwinten. Spread zet A links en B rechts. Algo kiest de methode: Heads = twee koppen met een pitch-synchroon venster (strak op één noot: lead, bas, zang; op akkoorden het vintage gewiebel), Grains = korrels van Window ms met een Hann-venster, vier tegelijk over elkaar (gladder op akkoorden en pads); Jitter maakt plek, lengte en moment van de korrels willekeurig, van glad naar een wolkje. Mono in, stereo uit. Firmware tp_mmb_harmonizer, mmb_dsp::Harmonizer — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_reverb",
   "categoryId": "effect",
   "variant": "Plate / spring reverb",
   "ports": [
    {
     "id": "size_cv",
     "name": "S+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "size",
     "label": "Size",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "large",
     "color": "#7dd3fc",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Plate",
      "Spring"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "damp",
     "label": "Damp",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "predelay",
     "label": "Pre",
     "min": 0,
     "max": 120,
     "defaultValue": 10,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "mod",
     "label": "Mod",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Twee galmen in één. Plate = de Dattorro-tank (input-diffusie, twee gemoduleerde all-passes, vier vertragingen in een acht, demping in de lus, zeven taps per kant): de gladde studioplaat; Size = decay, Damp = hoe snel het hoog wegsterft, Mod = de lichte zweving die de tank van metaal naar lucht brengt. Spring = twee veren (L/R iets anders): een vertragingslijn in feedback met acht dispersieve all-passes in de lus — laag komt later dan hoog, dat is de \"boing\" — een ingangs-bandpass en gerommel via Mod; Size = hoe lang de veer natrilt. Pre = predelay. Zonder R-kabel krijgt rechts hetzelfde als links. Firmware tp_mmb_reverb, mmb_dsp::Reverb — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_tremolo",
   "categoryId": "effect",
   "variant": "Tremolo pedal",
   "ports": [
    {
     "id": "rate_cv",
     "name": "R+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "depth_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.05,
     "max": 20,
     "defaultValue": 4.5,
     "taper": "log",
     "size": "medium",
     "color": "#fbbf24",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "depth",
     "label": "Depth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "medium",
     "color": "#fbbf24",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Amp",
      "Opto",
      "Harm",
      "Pan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "wave",
     "label": "Wave",
     "positions": [
      "Sin",
      "Tri",
      "Sqr"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "shape",
     "label": "Shape",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Tremolo-pedaal in vier smaken. Amp = bias-tremolo van een buizenversterker (de dip is dieper dan de piek hoog is). Opto = fotocel-tremolo (blackface): de cel volgt de lamp snel omhoog en traag terug — het scheve, schokkerige golfje. Harm = brownface harmonic tremolo: laag en hoog (split bij 800 Hz) in tegenfase — half tremolo, half phaser. Pan = L en R in tegenfase: auto-panner. Wave sin/tri/sqr, Shape drukt de golf naar een blok toe, Level tot ×2 om het gemiddelde verlies te compenseren. Rate en Depth met CV (een LFO op Rate = ritmische versnelling). Mono in geeft stereo uit. Firmware tp_mmb_tremolo, mmb_dsp::Tremolo — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_stereo_phaser",
   "categoryId": "effect",
   "variant": "Stereo phaser",
   "ports": [
    {
     "id": "rate_cv",
     "name": "R+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "depth_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "rate",
     "label": "Rate",
     "min": 0.02,
     "max": 8,
     "defaultValue": 0.4,
     "taper": "log",
     "size": "medium",
     "color": "#2dd4bf",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "depth",
     "label": "Depth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "medium",
     "color": "#2dd4bf",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "feedback",
     "label": "Fbk",
     "min": 0,
     "max": 0.95,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Stereo phaser: twee keer de zes-traps all-pass-cascade van de mono phaser, met de LFO van rechts een Spread-deel verschoven — 0 = mono, 0,5 = een kwartslag (draaiend, breed), 1 = tegenfase (de notches van links zitten waar rechts open is). Fbk laat de notches resoneren. Mono in geeft stereo uit; met een R-kabel blijft het echt stereo. Firmware tp_mmb_stereo_phaser, mmb_dsp::StereoPhaser — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_vibe",
   "categoryId": "effect",
   "variant": "Vibe (univibe-style)",
   "ports": [
    {
     "id": "speed_cv",
     "name": "S+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "intensity_cv",
     "name": "I+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "speed",
     "label": "Speed",
     "min": 0.1,
     "max": 12,
     "defaultValue": 2,
     "taper": "log",
     "size": "medium",
     "color": "#fb923c",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "intensity",
     "label": "Intensity",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "medium",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Chorus",
      "Vibrato",
      "Light"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "lamp_age",
     "label": "Lamp age",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "volume",
     "label": "Volume",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "De univibe-familie (en moderne klonen als de Mojo Vibe): geen gewone phaser maar vier fasedraai-trappen met elk een andere condensator, zodat de notches wijd verspreid liggen, en vier lichtgevoelige weerstanden (LDR) rond één lampje dat door een LFO wordt aangestuurd. Het lampje reageert niet-lineair en de LDR’s worden snel laag-ohmig bij licht maar herstellen traag in het donker: de sweep is scheef en kloppend, hij ademt. Mode Chorus = droog + nat (het klassieke geluid, tussen chorus en phaser in); Vibrato = alleen nat (de fasedraaiing trekt aan de toonhoogte); Light = een zuivere vibrato met een vertragingslijn, zonder lampkarakter. Lamp age regelt hoeveel van dat oude-lamp-karakter erin zit (0 = nette sinus, 1 = een oud exemplaar). Speed en Intensity met CV — een expressiepedaal of envelope op Speed doet wat de voetpedaal-versie deed. Mono in geeft stereo uit. Firmware tp_mmb_vibe, mmb_dsp::Vibe — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_rotary",
   "categoryId": "effect",
   "variant": "Rotary speaker",
   "ports": [
    {
     "id": "fast",
     "name": "Fast",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "drive_cv",
     "name": "D+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "speed",
     "label": "Speed",
     "positions": [
      "Slow",
      "Fast",
      "Brake"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "slow_rate",
     "label": "Slow",
     "min": 0.1,
     "max": 3,
     "defaultValue": 0.8,
     "taper": "log",
     "size": "medium",
     "color": "#f59e0b",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "fast_rate",
     "label": "Fast",
     "min": 2,
     "max": 10,
     "defaultValue": 6.7,
     "taper": "log",
     "size": "medium",
     "color": "#f59e0b",
     "style": "generic",
     "unit": "Hz"
    },
    {
     "kind": "knob",
     "id": "inertia",
     "label": "Inertia",
     "min": 0.25,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "drive",
     "label": "Drive",
     "min": 0,
     "max": 1,
     "defaultValue": 0.2,
     "size": "small",
     "color": "#ef4444",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "balance",
     "label": "Horn/Drum",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "noise",
     "label": "Noise",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Draaiende luidspreker in Leslie-stijl: een hoorn voor het hoog en een trommel voor het laag (scheiding bij 800 Hz), elk met een eigen motor en eigen traagheid. De hoorn versnelt in ongeveer een seconde, de zware trommel in een seconde of vier, en vertragen duurt langer dan versnellen — tijdens het omschakelen lopen ze uit elkaar, en dat opwinden hoor je. Slow en Fast zijn allebei instelbaar (zoals op een ELKA); de standaard 0,8 en 6,7 Hz zijn die van een klassiek exemplaar, en de trommel draait altijd iets langzamer dan de hoorn. Brake laat beide uitlopen tot stilstand. Inertia schaalt de traagheid (0,25 = vlug, 2 = extra zwaar). Wat je hoort: Doppler (de toonhoogte schommelt), richting (van voren luid en helder, van achteren zacht en dof), een reflectie van de kastwand, en de bijgeluiden — de hoorn suist hoorbaar als hij snel draait, de motor bromt, de trommel rommelt en het relais tikt bij het omschakelen (Noise). Drive is de buizenvoorversterker. Spread = hoek tussen de twee microfoons (0 = mono). De Fast-gate schakelt op de flank: omhoog = snel, omlaag = langzaam — hang er het mod-wiel of een voetschakelaar via MIDI aan; de schakelaar op het paneel werkt ernaast. Mono in (L+R), stereo uit. Firmware tp_mmb_rotary, mmb_dsp::Leslie — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_shimmer",
   "categoryId": "effect",
   "variant": "Shimmer reverb",
   "ports": [
    {
     "id": "shimmer_cv",
     "name": "Sh+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "size_cv",
     "name": "S+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "mix_cv",
     "name": "M+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_l",
     "name": "L",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "in_r",
     "name": "R",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "shimmer",
     "label": "Shimmer",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "large",
     "color": "#a5b4fc",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "interval",
     "label": "Interval",
     "positions": [
      "+12",
      "+7",
      "+19",
      "+24",
      "−12"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "size",
     "label": "Size",
     "min": 0,
     "max": 1,
     "defaultValue": 0.75,
     "size": "small",
     "color": "#7dd3fc",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "damp",
     "label": "Damp",
     "min": 0,
     "max": 1,
     "defaultValue": 0.35,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "predelay",
     "label": "Pre",
     "min": 0,
     "max": 120,
     "defaultValue": 20,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "mod",
     "label": "Mod",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "mix",
     "label": "Mix",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Shimmer reverb: de plaatgalm (dezelfde Dattorro-tank als REVERB) met in de lus een korrel-pitch-shifter. De natte galm wordt een Interval omhoog geschoven (+12 = een octaaf, het bekende geluid; +7 een kwint, +19 octaaf plus kwint, −12 een octaaf omlaag) en gaat terug de galm in. Elke ronde komt er zo een laagje een interval hoger bij: een glinsterende wolk boven wat je speelt. Shimmer = hoeveel er terug gaat (0 = gewone plaat), Tone = hoe helder de lus is (lager = warmer, minder gefluit), Size/Damp/Pre/Mod zoals bij de plaat. Een zachte begrenzer in de lus voorkomt dat hij wegloopt. Zonder R-kabel krijgt rechts hetzelfde als links. Firmware tp_mmb_shimmer, mmb_dsp::Shimmer — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_sid",
   "categoryId": "vco",
   "variant": "SID 6581/8580 (emulatie)",
   "ports": [
    {
     "id": "voct_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_9",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_10",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_11",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_12",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_1",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_2",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_3",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_4",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_5",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_6",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_7",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_8",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_9",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_10",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_11",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_12",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "cutoff_cv",
     "name": "Cut+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "ext_in",
     "name": "Ext 1",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "ext_2",
     "name": "2",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "ext_3",
     "name": "3",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "ext_4",
     "name": "4",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "sid_1",
     "name": "S1",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "sid_2",
     "name": "S2",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "sid_3",
     "name": "S3",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "sid_4",
     "name": "S4",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "bend",
     "name": "Bend",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "pw_cv",
     "name": "PW+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out",
     "name": "Mono",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "tri",
     "label": "Tri",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "saw",
     "label": "Saw",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "pulse",
     "label": "Pulse",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "noise",
     "label": "Noise",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "pw",
     "label": "PW",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "combo",
     "label": "Combo",
     "min": 0,
     "max": 10,
     "defaultValue": 7,
     "size": "medium",
     "color": "#c4b5fd",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       4,
       7
      ],
      "labels": {
       "4": "8580",
       "7": "6581"
      }
     }
    },
    {
     "kind": "switch",
     "id": "ring",
     "label": "Ring",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "sync",
     "label": "Sync",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "attack",
     "label": "A",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "decay",
     "label": "D",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "sustain",
     "label": "S",
     "min": 0,
     "max": 15,
     "defaultValue": 10,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "release",
     "label": "R",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "knob",
     "id": "volume",
     "label": "Vol",
     "min": 0,
     "max": 15,
     "defaultValue": 15,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "filt",
     "label": "Filt",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "model",
     "label": "Chip",
     "positions": [
      "6581",
      "8580"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 0,
     "max": 2047,
     "defaultValue": 1024,
     "size": "medium",
     "color": "#38bdf8",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "res",
     "label": "Res",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "curve",
     "label": "Curve",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "lp",
     "label": "LP",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "bp",
     "label": "BP",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "hp",
     "label": "HP",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "chips",
     "label": "SIDs",
     "min": 1,
     "max": 4,
     "defaultValue": 1,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       1,
       2,
       3,
       4
      ]
     }
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "De geluidschip van de Commodore 64 (MOS 6581/8580), als eigen emulatie op registerniveau — geen reSID-code. Drie stemmen, elk met een 24-bit oscillator en vier golfvormen: Tri, Saw, Pulse (breedte met PW, ook via PW+) en Noise (een 23-bit schuifregister). Zet je er meer dan één aan, dan krijg je een combined waveform: de golfvormen hangen dan aan dezelfde lijnen naar de DAC en een 0 trekt harder dan een 1, dus het lijkt op een AND, maar zwakker. Combo regelt hoe sterk: 0 = zuivere AND, 8580 en 6581 zijn gemarkeerd (op de 6581 wordt tri+saw dun en zacht), 10 gaat nog verder. Een eigen model, op het oor afgesteld, niet gemeten aan een chip. Noise in een combinatie sterft uit, zoals op de chip: de uitgang schrijft terug in het schuifregister. Wissel je daarna van golfvorm, dan zet de module het schuifregister terug met de test-bit (zoals C64-spelers dat deden). Ring en Sync koppelen elke stem aan de vorige (3 → 1 → 2 → 3): Ring vervangt de driehoek door een ringmodulatie met die stem, Sync zet de oscillator terug bij elke periode van die stem. De ADSR staat in registerwaarden 0..15 zoals op de chip (attack 2 ms tot 8 s, decay en release 6 ms tot 24 s, sustain in 16 stappen) en heeft de beroemde ADSR-bug: wissel je naar een snellere rate terwijl de interne teller al verder staat, dan wacht de envelope tot die rond is (tot ~33 ms). Vol is het 4-bit mastervolume van de chip. Multi-module: stem-cellen (voct_k/gate_k) die MIDI-in over de chips verdeelt — polyfoon spelen = een PolyGroup over de cellen (Poly ▾ → SID). SIDs (1–4) zet hoeveel chips meedoen: cel 1–3 = chip 1, 4–6 = chip 2, enzovoort, elk met een eigen filter (zoals een dual- of triple-SID); een stille chip kost vrijwel niets. Uitgangen: Mono (de som, met een limiter), L/R (de chips over het stereobeeld verdeeld met Spread, zoals de stereo-SID-tunes) en S1–S4 (elke chip apart, om zelf te mengen en te pannen). EXT IN per chip: Ext 1–4 gaan elk door het filter van hun eigen chip — een stereobron op Ext 1 en 2 (met SIDs = 2) of quad op 1–4, en met Spread komt die ook weer over het stereobeeld uit. Filter (8580-model): een 2-polig state-variable filter (12 dB/oct) met LP, BP en HP als losse schakelaars — combineerbaar zoals op de chip, LP+HP geeft een notch; zonder mode is wat door het filter gaat stil. Cutoff is het 11-bit register (0..2047, bij de 8580 vrijwel lineair van ~30 Hz tot ~12 kHz), Res het 4-bit register (8580 tot Q ≈ 4, 6581 tot ≈ 2, geen zelfoscillatie); beide op het oor, niet gemeten. Filt stuurt de drie stemmen door het filter. Cut+ telt op bij de cutoff (0..1 = het hele bereik, een envelope geeft de klassieke SID-bas). Ext is EXT IN: elk ander signaal gaat altijd door het SID-filter. Chip kiest het model van filter en uitgang. 8580: het nette filter hierboven. 6581 (standaard): de cutoff loopt als een S-curve (onderaan blijft hij rond ~220 Hz hangen, in het midden stijgt hij steil tot ~16 kHz) — Curve schuift dat midden, want geen twee 6581-exemplaren zijn gelijk (0 = helder exemplaar, 1 = donker) — de resonantie is zwakker en gromt in plaats van te piepen, een hard signaal vervormt, en elke stem geeft bij het aanslaan en loslaten een doffe tik (de DAC staat niet rond nul); ook een volumewijziging tikt, de truc waarmee C64-spellen samples speelden. Alles op het oor, niet gemeten. Firmware tp_mmb_sid, mmb_dsp::SidSynth — in de simulator draait dezelfde code als wasm.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "voice",
     "label": "Stem",
     "count": 12,
     "portIds": [
      "voct",
      "gate"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_sid3",
   "categoryId": "vco",
   "variant": "SID 3-osc (emulatie, per stem)",
   "ports": [
    {
     "id": "voct_1",
     "name": "V/Oct 1",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "voct_2",
     "name": "2",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "voct_3",
     "name": "3",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate_1",
     "name": "Gate 1",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "gate_2",
     "name": "2",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "gate_3",
     "name": "3",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "bend",
     "name": "Bend",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "pw_cv",
     "name": "PW+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "cutoff_cv",
     "name": "Cut+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "ext_in",
     "name": "Ext",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "switch",
     "id": "tri_1",
     "label": "Tri",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "saw_1",
     "label": "Saw",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "pulse_1",
     "label": "Pulse",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "noise_1",
     "label": "Noise",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "pw_1",
     "label": "PW",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "ring_1",
     "label": "Ring",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "sync_1",
     "label": "Sync",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "attack_1",
     "label": "A",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "decay_1",
     "label": "D",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "sustain_1",
     "label": "S",
     "min": 0,
     "max": 15,
     "defaultValue": 10,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "release_1",
     "label": "R",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "coarse_1",
     "label": "Coarse",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "fine_1",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "switch",
     "id": "filt_1",
     "label": "Filt",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "tri_2",
     "label": "Tri",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "saw_2",
     "label": "Saw",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "pulse_2",
     "label": "Pulse",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "noise_2",
     "label": "Noise",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "pw_2",
     "label": "PW",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "ring_2",
     "label": "Ring",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "sync_2",
     "label": "Sync",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "attack_2",
     "label": "A",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "decay_2",
     "label": "D",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "sustain_2",
     "label": "S",
     "min": 0,
     "max": 15,
     "defaultValue": 10,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "release_2",
     "label": "R",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "coarse_2",
     "label": "Coarse",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "fine_2",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 8,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "switch",
     "id": "filt_2",
     "label": "Filt",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "tri_3",
     "label": "Tri",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "saw_3",
     "label": "Saw",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "pulse_3",
     "label": "Pulse",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "noise_3",
     "label": "Noise",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "pw_3",
     "label": "PW",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "ring_3",
     "label": "Ring",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "sync_3",
     "label": "Sync",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "attack_3",
     "label": "A",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "decay_3",
     "label": "D",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "sustain_3",
     "label": "S",
     "min": 0,
     "max": 15,
     "defaultValue": 10,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "release_3",
     "label": "R",
     "min": 0,
     "max": 15,
     "defaultValue": 9,
     "size": "small",
     "color": "#c4b5fd",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "coarse_3",
     "label": "Coarse",
     "min": -24,
     "max": 24,
     "defaultValue": -12,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "fine_3",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    },
    {
     "kind": "switch",
     "id": "filt_3",
     "label": "Filt",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "stack",
     "label": "Stack",
     "positions": [
      "Split",
      "Stack"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "combo",
     "label": "Combo",
     "min": 0,
     "max": 10,
     "defaultValue": 7,
     "size": "medium",
     "color": "#c4b5fd",
     "style": "generic",
     "ticks": {
      "every": 1,
      "highlight": [
       4,
       7
      ],
      "labels": {
       "4": "8580",
       "7": "6581"
      }
     }
    },
    {
     "kind": "knob",
     "id": "volume",
     "label": "Vol",
     "min": 0,
     "max": 15,
     "defaultValue": 15,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "cutoff",
     "label": "Cutoff",
     "min": 0,
     "max": 2047,
     "defaultValue": 1024,
     "size": "medium",
     "color": "#38bdf8",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "res",
     "label": "Res",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "small",
     "color": "#38bdf8",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "switch",
     "id": "lp",
     "label": "LP",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "switch",
     "id": "bp",
     "label": "BP",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "hp",
     "label": "HP",
     "positions": [
      "Uit",
      "Aan"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "switch",
     "id": "model",
     "label": "Chip",
     "positions": [
      "6581",
      "8580"
     ],
     "defaultIndex": 0
    },
    {
     "kind": "knob",
     "id": "curve",
     "label": "Curve",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "De SID van de Commodore 64 met instellingen per stem — dezelfde eigen emulatie als de SID-module, een ander paneel. Elke rij is één stem: golfvormen (Tri, Saw, Pulse, Noise; samen = combined waveform), PW, Ring en Sync (gekoppeld aan de vorige stem: 3 → 1 → 2 → 3), een ADSR in registerwaarden 0..15, Coarse en Fine, en Filt (deze stem door het filter). Stack (standaard): V/Oct 1 en Gate 1 sturen alle drie de stemmen, elk verstemd met zijn eigen Coarse/Fine — drie oscillatoren op één noot, zoals veel C64-leads en -bassen gemaakt zijn; ring en sync hebben dan een vast interval (probeer stem 2 met Sync aan en Coarse +7, of Ring op een driehoek). Split: elke stem een eigen V/Oct en Gate, zoals in een C64-tune (bas, melodie en drum op één chip). Gedeeld: Combo (0 = AND, 8580 en 6581 gemarkeerd), Vol (4-bit), Level, en het filter (Cutoff 0..2047, Res 0..15, LP/BP/HP combineerbaar, Chip 6581/8580, Curve voor de spreiding van de 6581), met Cut+ (0..1 = het hele bereik), PW+ (bij alle stemmen) en Ext (EXT IN door het filter). Polyfoon spelen: zet meerdere SID 3-osc's in een PolyGroup (Poly ▾ → SID 3-osc ×4): elke noot krijgt een eigen chip met eigen filter, zoals een stapel SID's. Standaardstemmen: pulse; saw 8 cent hoger; driehoek een octaaf lager. Firmware tp_mmb_sid3, mmb_dsp::SidSynth — in de simulator draait dezelfde code als wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_audioin",
   "categoryId": "utility",
   "variant": "Audio input",
   "ports": [
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 2,
     "defaultValue": 1,
     "size": "large",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "mono",
     "label": "Mono",
     "positions": [
      "stereo",
      "mono"
     ],
     "defaultIndex": 1
    }
   ],
   "notes": "Audio-ingang. In de simulator: de microfoon van de browser (de standaard-ingang van je systeem; de browser vraagt toestemming). Op de Teensy: wat de pc naar het afspeelapparaat \"Teensy MIDI/Audio\" stuurt — zet in Windows bij je headset-microfoon \"Listen to this device\" aan met de Teensy als afspeelapparaat. Mono sommeert L+R naar beide uitgangen (een microfoon is mono). Gebruik een koptelefoon, anders gaat het rondzingen.",
   "internal": true
  },
  {
   "id": "tp_mmb_zang",
   "categoryId": "vco",
   "variant": "Zingende stemmen",
   "ports": [
    {
     "id": "syl_cv",
     "name": "Syl",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "next",
     "name": "Next",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "formant_cv",
     "name": "Frm",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "bend",
     "name": "Bend",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "syl_out",
     "name": "Syl",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "voct_1",
     "name": "1",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_2",
     "name": "2",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_3",
     "name": "3",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_4",
     "name": "4",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_5",
     "name": "5",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_6",
     "name": "6",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_7",
     "name": "7",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_8",
     "name": "8",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_1",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_2",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_3",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_4",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_5",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_6",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_7",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_8",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "bank",
     "label": "Bank",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       15
      ]
     }
    },
    {
     "kind": "knob",
     "id": "syl",
     "label": "Start",
     "min": 0,
     "max": 255,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "display",
     "id": "sylDisp",
     "digits": 3,
     "style": "led",
     "bindTo": "__currentSyl",
     "format": "int"
    },
    {
     "kind": "switch",
     "id": "mode",
     "label": "Mode",
     "positions": [
      "Vast",
      "Door",
      "Door+terug"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "speed",
     "label": "Speed",
     "min": 0.25,
     "max": 4,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "formant",
     "label": "Formant",
     "min": -12,
     "max": 12,
     "defaultValue": 0,
     "size": "medium",
     "color": "#e879f9",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "attack",
     "label": "Att",
     "min": 0,
     "max": 500,
     "defaultValue": 5,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "release",
     "label": "Rel",
     "min": 5,
     "max": 3000,
     "defaultValue": 250,
     "taper": "log",
     "size": "small",
     "color": "#9ca3af",
     "style": "generic",
     "unit": "ms"
    },
    {
     "kind": "knob",
     "id": "coarse",
     "label": "Coarse",
     "min": -24,
     "max": 24,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "fine",
     "label": "Fine",
     "min": -100,
     "max": 100,
     "defaultValue": 0,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "ct"
    }
   ],
   "notes": "Zingende stemmen. Een lyricbank bevat ingesproken lettergrepen; ZANG zingt ze op de noot die je speelt, met de klinkerkleur van de opname (PSOLA: korte stukjes van twee stemperioden, opnieuw aan elkaar geplakt op de gevraagde toonhoogte). Zolang de gate open is blijft de klinker klinken; bij loslaten speelt de slotmedeklinker uit. Start = de lettergreep waar het liedje begint (0 = de eerste). Mode: Vast = altijd die ene lettergreep (de knop kiest welke); Door = elke aanslag de volgende, rond naar het begin (een akkoord deelt er één); Door+terug = idem, maar na 2 s stilte begint het liedje opnieuw bij Start. Het display toont de lettergreep die aan de beurt is. Bank kiest de lyricbank: in de simulator het nummer waaronder 🎤 Zang hem zette, op de Teensy /mmb/lyrics/NN.mmbl. Next en Reset doen hetzelfde met een gate, Syl (CV 0..1) kiest rechtstreeks. Formant schuift de klinkerkleur los van de toonhoogte: omhoog = kinderstem, omlaag = reus. Speed rekt de medeklinkers en overgangen. Bereik: ruwweg een octaaf rond de gesproken toonhoogte klinkt natuurlijk. De bank maak je met 🎤 Zang (opnemen of wav, lettergrepen intypen); op de Teensy staat hij in /mmb/lyrics/NN.mmbl en kiest Bank het nummer. Acht stem-cellen als de sampler: polyfoon = een PolyGroup over de cellen (Poly ▾ → Zingende stem). Firmware tp_mmb_zang.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "voice",
     "label": "Stem",
     "count": 8,
     "portIds": [
      "voct",
      "gate",
      "vel"
     ],
     "controlIds": []
    }
   ]
  },
  {
   "id": "tp_mmb_fof",
   "categoryId": "vco",
   "variant": "FOF zingende formantstem",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "next",
     "name": "Next",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "syl_cv",
     "name": "Syl+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "vowel",
     "name": "Vow+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "breath",
     "name": "Air+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "vibrato",
     "name": "Vib+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "voice",
     "name": "Voi+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "vel",
     "name": "Vel",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "pressure",
     "name": "Press",
     "signalType": "cv",
     "direction": "in"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "vowel",
     "label": "Vowel",
     "min": 0,
     "max": 1,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "tone",
     "label": "Tone",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "breath",
     "label": "Breath",
     "min": 0,
     "max": 1,
     "defaultValue": 0.08,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vibrato",
     "label": "Vibrato",
     "min": 0,
     "max": 1,
     "defaultValue": 0.12,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "voice",
     "label": "Voice",
     "min": 0,
     "max": 1,
     "defaultValue": 0.35,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "syl",
     "label": "Syl",
     "min": 0,
     "max": 45,
     "defaultValue": 0,
     "size": "medium",
     "color": "#fbbf24",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "display",
     "id": "sylDisp",
     "digits": 6,
     "style": "oled",
     "bindTo": "syl",
     "lookup": [
      [
       "Vowel",
       "doo",
       "da",
       "va",
       "der",
       "ja",
       "cob",
       "slaapt",
       "gij",
       "nog",
       "al",
       "le",
       "klo",
       "ken",
       "lui",
       "den",
       "bim",
       "bam",
       "bom",
       "de",
       "na",
       "hee",
       "djoed",
       "o",
       "li",
       "fant",
       "je",
       "in",
       "het",
       "bos",
       "laat",
       "ma",
       "toch",
       "niet",
       "los",
       "an",
       "ders",
       "raak",
       "weg",
       "kwijt",
       "en",
       "dan",
       "heb",
       "la",
       "ter",
       "spijt"
      ]
     ],
     "text": "Vowel",
     "size": "small"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "syl_amt",
     "label": "Syl",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vowel_amt",
     "label": "Vow",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "breath_amt",
     "label": "Air",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vibrato_amt",
     "label": "Vib",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "voice_amt",
     "label": "Voi",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "vel_amt",
     "label": "Vel",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "press_amt",
     "label": "Prs",
     "min": 0,
     "max": 1,
     "defaultValue": 1,
     "size": "small",
     "color": "#9ca3af",
     "style": "generic"
    }
   ],
   "notes": "FOF/CHANT-geinspireerde zangoscillator met asymmetrische glottale bron. Vowel morft door A-E-I-O-U; formanten blijven staan bij pitchverandering. Voice loopt van korte, heldere sluiting naar langer, zachter open/sluitgedrag. Vel (0-1) regelt volume en verzacht de sluiting bij zachte aanslagen; zonder kabel volle sterkte. Press (0-1) is de doorlopende expressie tijdens de noot (MidiIn Press/aftertouch, breath controller of CV): lager = iets zachter (vloer 0,5), duidelijk ademiger (als Breath open staat) en een langere, zachtere sluiting; zonder kabel volle druk, ~20 ms gladgestreken. Vow+/Air+/Vib+/Voi+ tellen op bij de knop; de kleine knop boven elke CV-jack is de attenuator (1 = vol, 0 = kabel doet niets; bij Vel en Press = gevoeligheid). Syl kiest een lettergreep uit een tabel van 46 (0 = de Vowel-knop; dan doo, da, va, der, ja, cob, slaapt, gij, nog, al, le, klo, ken, lui, den, bim, bam, bom, de, na, hee, djoed, en 23-45 Olifantje in het bos: o, li, fant, je, in, het, bos, laat, ma, toch, niet, los, an, ders, raak, weg, kwijt, en, dan, heb, la, ter, spijt): synthetische medeklinkers (plosieven met sluiting/burst/glijbaan, nasalen, fricatieven, l/r/j/w met de Nederlandse schraap-r en -g) en tweeklanken, en een slotmedeklinker die speelt als de gate valt; het display toont de knopstand. Syl+ (0-1 over de tabel, zoals syl_cv bij ZANG) telt op bij de knop: CC-waarde = index × 127 / 45. Next (gate-flank) stapt naar de volgende lettergreep, Reset gaat terug naar de knop: een sustainpedaal via MIDI-IN CC2# = 64 werkt als stappedaal. De lettergreep wordt bij de gate-flank gelezen: kies hem vóór de noot (linkerhand pads, rechterhand melodie). Tone bepaalt de resonantiebreedte, Breath voegt pulsgebonden aspiratie toe en Vibrato geeft maximaal een halve toon (100 cent) bij 5,3 Hz. Geen exacte LF-bron, spraaksynthese of volledige CHANT-reconstructie. Mono; polyfonie via PolyGroup.",
   "internal": true
  },
  {
   "id": "tp_mmb_material_bridge",
   "categoryId": "vco",
   "variant": "Material Bridge (gekoppelde resonatoren)",
   "ports": [
    {
     "id": "coupling_cv",
     "name": "Cpl+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "pickup_cv",
     "name": "Pick+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Hit A",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "gate_b",
     "name": "Hit B",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "vel",
     "name": "Vel",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "stress",
     "name": "Stress",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "pitch",
     "label": "Pitch",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "spread",
     "label": "Spread",
     "min": 0,
     "max": 1,
     "defaultValue": 0.35,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "coupling",
     "label": "Couple",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#6ee7b7",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "decay",
     "label": "Decay",
     "min": 0.05,
     "max": 8,
     "defaultValue": 2,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "memory",
     "label": "Memory",
     "min": 0,
     "max": 1,
     "defaultValue": 0.7,
     "size": "small",
     "color": "#fb7185",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "fatigue",
     "label": "Fatigue",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#fb7185",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "recovery",
     "label": "Recover",
     "min": 0.1,
     "max": 10,
     "defaultValue": 2,
     "taper": "log",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "pickup",
     "label": "Pickup",
     "min": 0,
     "max": 1,
     "defaultValue": 0.25,
     "size": "small",
     "color": "#6ee7b7",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Experimentele state-graph voice: vier resonatoren delen energie via drie passieve koppelingen. Hit A/B slaan de uiteinden aan; audio exciteert A. Een harde aanslag (velocity boven ~0,85) drijft Stress over de breekdrempel; pas onder de hersteldrempel sluit het contact weer (hysterese). Memory laat dat gebroken contact de middelste brug verzwakken: energie blijft dan aan de aangeslagen kant en de pickupbalans verandert, zonder extra demping. Fatigue voegt stressafhankelijke demping toe (kortere uitklank onder belasting). Recover bepaalt het herstel; Stress geeft de toestand als CV. Pickup verplaatst twee passieve stereo-pickups. Reset wist energie en geheugen. V/Oct rond C4 transponeert het hele spectrum; de koppeling schaalt mee, zodat de modusverhoudingen vast liggen. Couple spreidt de modi (bij 0,65 ligt de sterkste modus ~36 cent boven de grondtoon). Dezelfde C++-kern op Teensy en in wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_scanned",
   "categoryId": "vco",
   "variant": "Scanned (levende golftabel)",
   "ports": [
    {
     "id": "pos_cv",
     "name": "Pos+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "press",
     "name": "Press",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in",
     "name": "In",
     "signalType": "audio",
     "direction": "in"
    },
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Hit",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "vel",
     "name": "Vel",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "energy",
     "name": "Energy",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "pitch",
     "label": "Pitch",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "tension",
     "label": "Tension",
     "min": 0,
     "max": 1,
     "defaultValue": 0.6,
     "size": "medium",
     "color": "#c084fc",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "damping",
     "label": "Damping",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "restore",
     "label": "Return",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#c084fc",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "speed",
     "label": "Speed",
     "min": 0.02,
     "max": 1,
     "defaultValue": 0.15,
     "size": "medium",
     "color": "#c084fc",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "width",
     "label": "Width",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "position",
     "label": "Position",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Scanned synthesis (Verplank/Mathews/Shaw): een gesloten ring van 64 massa's met veren naar de buren (Tension) en een terugveer naar rust (Return) beweegt traag; Speed vertraagt of versnelt het materiaal (fysica op ~5,5 kHz, met Speed verder omlaag). De vorm van de ring wordt op de toonhoogte van V/Oct en Pitch als golftabel uitgelezen, dus de golfvorm leeft en trilt na. Hit slaat de ring aan rond Position met Vel als kracht; Press (0..1) drukt een vinger in de ring en geeft een stilstaande vorm die bij loslaten terugveert; In duwt met audio. Width is de breedte van de vinger. Energy (CV 0..1) is de uitwijking van de ring. Reset wist posities en snelheden. Mono; dezelfde C++-kern op Teensy en in wasm.",
   "internal": true
  },
  {
   "id": "tp_mmb_reservoir",
   "categoryId": "utility",
   "variant": "Reservoir (gedeelde bron)",
   "ports": [
    {
     "id": "in_a",
     "name": "A",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_b",
     "name": "B",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_c",
     "name": "C",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "in_d",
     "name": "D",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "out_a",
     "name": "A",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_b",
     "name": "B",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_c",
     "name": "C",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_d",
     "name": "D",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "refill",
     "name": "Refill",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "level",
     "name": "Level",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "starve",
     "name": "Starve",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "empty",
     "name": "Empty",
     "signalType": "gate",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "drain",
     "label": "Drain",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#60a5fa",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "recover",
     "label": "Recover",
     "min": 0.1,
     "max": 20,
     "defaultValue": 2,
     "taper": "log",
     "size": "medium",
     "color": "#60a5fa",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "floor",
     "label": "Floor",
     "min": 0,
     "max": 1,
     "defaultValue": 0.1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "curve",
     "label": "Curve",
     "min": 0.25,
     "max": 4,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "thresh",
     "label": "Empty@",
     "min": 0,
     "max": 1,
     "defaultValue": 0.15,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Resource-coupled synthesis: een eindige bron (lucht, snaarspanning, voeding) waar tot vier stemmen tegelijk uit putten. Zet envelopes of gates (0..1) op In A..D; iedere belasting trekt de bron leeg (Drain 1 = een volle stem leegt hem in 1 s), de bron vult exponentieel bij met tijdconstante Recover. Out A..D is de eigen belasting maal het aanbod: stuur die naar de VCA-CV in plaats van de envelope zelf, dan laat een harde noot tijdelijk minder over voor de volgende stem en is het herstel hoorbaar. Aanbod = Floor + (1-Floor) * Level^Curve. Level is de bron (0..1), Starve het tekort (patch op cutoff of V/Oct met een attenuator), Empty een gate zodra de bron onder Empty@ zakt (hysterese 0,1) - laat het instrument stotteren. Refill vult extra bij, Reset maakt de bron direct vol. Onderzoeksmodule: toetst of gedeelde toestand anders speelt dan onafhankelijke stemmen.",
   "internal": true
  },
  {
   "id": "tp_mmb_gendyn",
   "categoryId": "vco",
   "variant": "GENDYN (stochastisch)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Hit",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "chaos_cv",
     "name": "Amp+",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "cycle",
     "name": "Cycle",
     "signalType": "gate",
     "direction": "out"
    },
    {
     "id": "out",
     "name": "Out",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "pitch",
     "label": "Pitch",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "points",
     "label": "Points",
     "min": 3,
     "max": 24,
     "defaultValue": 12,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "amp_step",
     "label": "Amp",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "dur_step",
     "label": "Dur",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "medium",
     "color": "#fb923c",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "dist",
     "label": "Dist",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "smooth",
     "label": "Smooth",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "settle",
     "label": "Settle",
     "min": 0,
     "max": 1,
     "defaultValue": 0.1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "seed",
     "label": "Seed",
     "min": 0,
     "max": 99,
     "defaultValue": 1,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "GENDYN (Xenakis, dynamische stochastische synthese): een cyclus bestaat uit Points breekpunten; na iedere cyclus zet elk breekpunt een random stap in amplitude (Amp, spiegelend binnen -1..1) en in duur (Dur, symmetrisch rond de nominale periode, zodat de gemiddelde toonhoogte V/Oct volgt). Dist mengt uniforme stappen (0) met een zwaarstaartige verdeling (1: veel kleine, af en toe een grote). Smooth loopt van rechte lijnstukken (ruw, veel boventonen) naar cosinusbogen. Settle trekt amplitudes per cyclus iets naar nul, zodat de golf niet aan de grenzen blijft hangen. Hit zaait de ruis opnieuw met Seed en herstelt de beginvorm: iedere noot begint hetzelfde en wandelt daarna weg; zonder Hit loopt de wandeling vrij door. Amp+ moduleert de stapgrootte (bijv. met een envelope: stabiel begin, chaotische staart). Cycle is hoog tijdens het eerste segment van elke cyclus. Niet bandbegrensd; dat is de aard van de techniek.",
   "internal": true
  },
  {
   "id": "tp_mmb_excitable",
   "categoryId": "vco",
   "variant": "Excitable (prikkelbaar medium)",
   "ports": [
    {
     "id": "voct",
     "name": "V/Oct",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate",
     "name": "Gate A",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "voct_b",
     "name": "V/Oct B",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "gate_b",
     "name": "Gate B",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "reset",
     "name": "Reset",
     "signalType": "gate",
     "direction": "in"
    },
    {
     "id": "activity",
     "name": "Activity",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "pitch",
     "label": "Pitch",
     "min": -36,
     "max": 36,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi"
    },
    {
     "kind": "knob",
     "id": "detune",
     "label": "Detune B",
     "min": -24,
     "max": 24,
     "defaultValue": 7,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "unit": "semi",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "refract",
     "label": "Refract",
     "min": 2,
     "max": 60,
     "defaultValue": 12,
     "size": "medium",
     "color": "#4ade80",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "excite",
     "label": "Excite",
     "min": 1,
     "max": 8,
     "defaultValue": 3,
     "size": "medium",
     "color": "#4ade80",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "thresh",
     "label": "Thresh",
     "min": 1,
     "max": 3,
     "defaultValue": 1,
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic",
     "step": 1
    },
    {
     "kind": "knob",
     "id": "pickup",
     "label": "Pickup",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "medium",
     "color": "#4ade80",
     "style": "generic"
    },
    {
     "kind": "switch",
     "id": "speed",
     "label": "Speed",
     "positions": [
      "1",
      "2",
      "4"
     ],
     "defaultIndex": 1
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Excitable-media synthesis: een begrensd raster van 16x16 prikkelbare cellen (rust, actief gedurende Excite stappen, refractair gedurende Refract stappen). Een rustende cel wordt actief zodra Thresh van zijn vier buren actief is. Pacemaker A (links) en B (rechts) prikkelen hun cel op de toonhoogte van V/Oct (B met Detune en V/Oct B erbij) zolang hun gate hoog is; de golffronten lopen een cel per stap, doven aan de rand en vernietigen elkaar waar ze botsen. Speed is het aantal audiosamples per mediumstap (1 = fijnst, zwaar op de Teensy). Pickup verplaatst beide pickups van de bronnen (0) naar het midden (1) waar de fronten botsen. Is de periode korter dan Excite + Refract, dan negeert de cel elke tweede of derde prikkel: subharmonieken ontstaan causaal uit het medium (bij Pitch +24 en Refract 60 klinkt weer ongeveer de grondtoon). Activity (CV 0..1) is het aandeel actieve en refractaire cellen. Pulsvormig geluid; de toonhoogte heeft stapjitter van een mediumstap. Onderzoeksmodule.",
   "internal": true
  },
  {
   "id": "tp_mmb_tapestrip",
   "categoryId": "vco",
   "variant": "Tape strip (Mellotron-mechanica)",
   "ports": [
    {
     "id": "press",
     "name": "Press",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "bend",
     "name": "Bend",
     "signalType": "cv",
     "direction": "in"
    },
    {
     "id": "tape",
     "name": "Tape",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "load",
     "name": "Load",
     "signalType": "cv",
     "direction": "out"
    },
    {
     "id": "out_l",
     "name": "L",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "out_r",
     "name": "R",
     "signalType": "audio",
     "direction": "out"
    },
    {
     "id": "voct_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "voct_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_1",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_2",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_3",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_4",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_5",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_6",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_7",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "gate_8",
     "name": "",
     "signalType": "gate",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_1",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_2",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_3",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_4",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_5",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_6",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_7",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    },
    {
     "id": "vel_8",
     "name": "",
     "signalType": "cv",
     "direction": "in",
     "cellGroupId": "voice"
    }
   ],
   "controls": [
    {
     "kind": "knob",
     "id": "bank",
     "label": "Bank",
     "min": 0,
     "max": 15,
     "defaultValue": 0,
     "size": "medium",
     "color": "#f5a623",
     "style": "generic",
     "step": 1,
     "ticks": {
      "every": 1,
      "highlight": [
       0,
       15
      ]
     }
    },
    {
     "kind": "knob",
     "id": "length",
     "label": "Length",
     "min": 1,
     "max": 8,
     "defaultValue": 8,
     "taper": "log",
     "size": "medium",
     "color": "#fbbf24",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "return",
     "label": "Return",
     "min": 0.1,
     "max": 4,
     "defaultValue": 1,
     "taper": "log",
     "size": "medium",
     "color": "#fbbf24",
     "style": "generic",
     "unit": "s"
    },
    {
     "kind": "knob",
     "id": "contact",
     "label": "Contact",
     "min": 0,
     "max": 1,
     "defaultValue": 0.5,
     "size": "medium",
     "color": "#fbbf24",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "level",
     "label": "Level",
     "min": 0,
     "max": 1,
     "defaultValue": 0.8,
     "taper": "exp",
     "size": "medium",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "motor",
     "label": "Motor",
     "min": 0,
     "max": 1,
     "defaultValue": 0.4,
     "size": "small",
     "color": "#fbbf24",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "wow",
     "label": "Wow",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "flutter",
     "label": "Flutter",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    },
    {
     "kind": "knob",
     "id": "wear",
     "label": "Wear",
     "min": 0,
     "max": 1,
     "defaultValue": 0.3,
     "size": "small",
     "color": "#f9fafb",
     "style": "generic"
    }
   ],
   "notes": "Mellotron-mechanica om een gewone samplebank: de goede opname komt uit de bank (dezelfde .mmbs-bank en Bank-knop als de SAMPLER; in de simulator krijgt deze module automatisch de bank van de sampler), de onvolmaaktheid komt hiervandaan. Per toets een bandje van Length seconden: na Length stopt de klank abrupt, hoe lang je de toets ook houdt. Loslaten laat het bandje met een veer terugspoelen (Return = terugloop van een volle strip); druk je de toets opnieuw in terwijl het bandje nog onderweg is, dan speelt hij vanaf de plek waar het bandje dan staat, zodat snelle herhalingen anders klinken dan de eerste aanslag. Contact is het drukkussen dat de band tegen de kop duwt: opkomst, hoogafval en een kleine pitch-dip bij het indrukken. Motor laat de capstan zakken onder belasting (meer toetsen = iets trager, met traagheid); Press (channel pressure) vertraagt licht. Wow en Flutter moduleren de snelheid; Wear voegt bandruis, bandbreedteverlies en zachte verzadiging toe. Tape (CV) is de positie van het laatst aangeslagen bandje, Load de motorbelasting. Acht stem-cellen; polyfoon via een PolyGroup (Poly ▾ → Tape strip ×8). Firmware tp_mmb_tapestrip op dezelfde SampleBank als de sampler.",
   "internal": true,
   "role": "multi",
   "cellGroups": [
    {
     "id": "voice",
     "label": "Stem",
     "count": 8,
     "portIds": [
      "voct",
      "gate",
      "vel"
     ],
     "controlIds": []
    }
   ]
  }
 ],
 "modules": [
  {
   "id": "mod_xhtwwll",
   "typeId": "tp_mmb_ahdsr",
   "internal": true,
   "name": "MMB AHDSR",
   "brand": "MMB",
   "modelNumber": "AHDSR",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "AHDSR",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "envelope",
      "fontSize": 1.4,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "decorations": [
     {
      "kind": "rect",
      "x": 1,
      "y": 20,
      "w": 38.64,
      "h": 68,
      "color": "#0b1220"
     }
    ],
    "controlPlacements": {
     "attack": {
      "x": 4.8768,
      "y": 50
     },
     "hold": {
      "x": 12.192,
      "y": 50
     },
     "decay": {
      "x": 20.32,
      "y": 50
     },
     "sustain": {
      "x": 28.447999999999997,
      "y": 50
     },
     "release": {
      "x": 35.7632,
      "y": 50
     },
     "loop": {
      "x": 8.128,
      "y": 96
     },
     "retrig": {
      "x": 18.288,
      "y": 96
     },
     "curve": {
      "x": 30.0736,
      "y": 96
     }
    },
    "portPlacements": {
     "gate": {
      "x": 8.128,
      "y": 112,
      "labelPos": "below"
     },
     "trig": {
      "x": 20.32,
      "y": 112,
      "labelPos": "below"
     },
     "cv_out": {
      "x": 32.512,
      "y": 112,
      "labelPos": "below"
     },
     "eoc": {
      "x": 20.32,
      "y": 122,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ywrhog4",
   "typeId": "tp_mmb_lfo",
   "internal": true,
   "name": "MMB LFO",
   "brand": "MMB",
   "modelNumber": "LFO",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "LFO",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "rate": {
      "x": 15.24,
      "y": 24
     },
     "wave": {
      "x": 15.24,
      "y": 47
     },
     "depth": {
      "x": 15.24,
      "y": 63
     },
     "bipolar": {
      "x": 7.62,
      "y": 79
     },
     "run": {
      "x": 22.86,
      "y": 79
     },
     "rate_cv_amt": {
      "x": 7.62,
      "y": 93
     }
    },
    "portPlacements": {
     "rate_cv": {
      "x": 7.62,
      "y": 106,
      "labelPos": "below"
     },
     "reset": {
      "x": 22.86,
      "y": 106,
      "labelPos": "below"
     },
     "out": {
      "x": 7.62,
      "y": 118,
      "labelPos": "below"
     },
     "out_inv": {
      "x": 22.86,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_5o4332g",
   "typeId": "tp_mmb_sh",
   "internal": true,
   "name": "MMB S&H",
   "brand": "MMB",
   "modelNumber": "S&H",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "S&H",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "slew": {
      "x": 10.16,
      "y": 30
     },
     "mode": {
      "x": 10.16,
      "y": 60
     }
    },
    "portPlacements": {
     "in": {
      "x": 6.096,
      "y": 92,
      "labelPos": "below"
     },
     "trig": {
      "x": 14.223999999999998,
      "y": 92,
      "labelPos": "below"
     },
     "out": {
      "x": 10.16,
      "y": 114,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cabhze5",
   "typeId": "tp_mmb_vco",
   "internal": true,
   "name": "MMB VCO",
   "brand": "MMB",
   "modelNumber": "VCO",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "VCO",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "wave": {
      "x": 20.32,
      "y": 22
     },
     "coarse": {
      "x": 12.192,
      "y": 50
     },
     "fine": {
      "x": 28.447999999999997,
      "y": 50
     },
     "fm_amt": {
      "x": 12.192,
      "y": 78
     },
     "level": {
      "x": 28.447999999999997,
      "y": 78
     }
    },
    "portPlacements": {
     "voct": {
      "x": 7.3152,
      "y": 104,
      "labelPos": "below"
     },
     "tune": {
      "x": 16.256,
      "y": 104,
      "labelPos": "below"
     },
     "fm": {
      "x": 25.1968,
      "y": 104,
      "labelPos": "below"
     },
     "sync": {
      "x": 34.1376,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_lag4f4j",
   "typeId": "tp_mmb_quad_vco_shared",
   "internal": true,
   "name": "MMB QUAD-VCO-S",
   "brand": "MMB",
   "modelNumber": "QUAD-VCO-S",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "QUAD-VCO-S",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 14,
      "text": "shared controls · 4 cells",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 78,
      "text": "1",
      "fontSize": 1.6,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 78,
      "text": "2",
      "fontSize": 1.6,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 78,
      "text": "3",
      "fontSize": 1.6,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 71.12,
      "y": 78,
      "text": "4",
      "fontSize": 1.6,
      "color": "#9ca3af",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "wave": {
      "x": 16.256,
      "y": 28
     },
     "coarse": {
      "x": 36.576,
      "y": 32
     },
     "fine": {
      "x": 52.832,
      "y": 32
     },
     "level": {
      "x": 69.088,
      "y": 32
     }
    },
    "portPlacements": {
     "voct_1": {
      "x": 10.16,
      "y": 92,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 30.48,
      "y": 92,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 50.8,
      "y": 92,
      "labelPos": "below"
     },
     "voct_4": {
      "x": 71.12,
      "y": 92,
      "labelPos": "below"
     },
     "out_1": {
      "x": 10.16,
      "y": 116,
      "labelPos": "below"
     },
     "out_2": {
      "x": 30.48,
      "y": 116,
      "labelPos": "below"
     },
     "out_3": {
      "x": 50.8,
      "y": 116,
      "labelPos": "below"
     },
     "out_4": {
      "x": 71.12,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_tpwmmlg",
   "typeId": "tp_mmb_vcf",
   "internal": true,
   "name": "MMB VCF",
   "brand": "MMB",
   "modelNumber": "VCF",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "VCF",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "cutoff": {
      "x": 15.24,
      "y": 22
     },
     "q": {
      "x": 9.144,
      "y": 48
     },
     "cv_amt": {
      "x": 21.336,
      "y": 48
     },
     "q_cv_amt": {
      "x": 9.144,
      "y": 70
     },
     "type": {
      "x": 21.336,
      "y": 72
     }
    },
    "portPlacements": {
     "in": {
      "x": 7.62,
      "y": 98,
      "labelPos": "below"
     },
     "cv": {
      "x": 22.86,
      "y": 98,
      "labelPos": "below"
     },
     "q_cv": {
      "x": 7.62,
      "y": 112,
      "labelPos": "below"
     },
     "out": {
      "x": 22.86,
      "y": 112,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ikudeth",
   "typeId": "tp_mmb_vca",
   "internal": true,
   "name": "MMB VCA",
   "brand": "MMB",
   "modelNumber": "VCA",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "VCA",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "gain": {
      "x": 10.16,
      "y": 24
     },
     "resp": {
      "x": 10.16,
      "y": 60
     }
    },
    "portPlacements": {
     "in": {
      "x": 5.08,
      "y": 92,
      "labelPos": "below"
     },
     "cv": {
      "x": 15.24,
      "y": 92,
      "labelPos": "below"
     },
     "out": {
      "x": 10.16,
      "y": 114,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_88dxq9x",
   "typeId": "tp_mmb_out",
   "internal": true,
   "name": "MMB OUT",
   "brand": "MMB",
   "modelNumber": "OUT",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "OUT",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "level": {
      "x": 10.16,
      "y": 30
     }
    },
    "portPlacements": {
     "l": {
      "x": 6.096,
      "y": 92,
      "labelPos": "below"
     },
     "r": {
      "x": 14.223999999999998,
      "y": 92,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_qokdads",
   "typeId": "tp_mmb_midiin",
   "internal": true,
   "name": "MMB MIDI-IN",
   "brand": "MMB",
   "modelNumber": "MIDI-IN",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "MIDI-IN",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 14,
      "text": "voicing · steal · modulatie",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 42.672000000000004,
      "y": 26,
      "text": "Voices",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 19.2024,
      "y": 100,
      "text": "NOTE",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 54.76240000000001,
      "y": 100,
      "text": "MOD",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "channel": {
      "x": 8.5344,
      "y": 30
     },
     "chDisp": {
      "x": 18.491200000000003,
      "y": 30
     },
     "act": {
      "x": 64.00800000000001,
      "y": 28
     },
     "voicesDisp": {
      "x": 42.672000000000004,
      "y": 32
     },
     "priority": {
      "x": 8.5344,
      "y": 52
     },
     "steal": {
      "x": 24.180800000000005,
      "y": 52
     },
     "legato": {
      "x": 39.827200000000005,
      "y": 52
     },
     "bendRange": {
      "x": 56.89600000000001,
      "y": 52
     },
     "glide": {
      "x": 9.956800000000001,
      "y": 66
     },
     "unison": {
      "x": 28.448000000000004,
      "y": 66
     },
     "spread": {
      "x": 46.93920000000001,
      "y": 66
     },
     "bendPitch": {
      "x": 62.58560000000001,
      "y": 66
     },
     "cc1Num": {
      "x": 11.3792,
      "y": 80
     },
     "cc1Disp": {
      "x": 24.180800000000005,
      "y": 80
     },
     "cc2Num": {
      "x": 41.2496,
      "y": 80
     },
     "cc2Disp": {
      "x": 54.0512,
      "y": 80
     }
    },
    "portPlacements": {
     "pitch": {
      "x": 4.978400000000001,
      "y": 112,
      "labelPos": "below"
     },
     "gate": {
      "x": 12.090400000000002,
      "y": 112,
      "labelPos": "below"
     },
     "vel": {
      "x": 19.2024,
      "y": 112,
      "labelPos": "below"
     },
     "press": {
      "x": 26.314400000000003,
      "y": 112,
      "labelPos": "below"
     },
     "rel": {
      "x": 33.4264,
      "y": 112,
      "labelPos": "below"
     },
     "cv_mod": {
      "x": 43.3832,
      "y": 112,
      "labelPos": "below"
     },
     "cv_bend": {
      "x": 51.2064,
      "y": 112,
      "labelPos": "below"
     },
     "cv_cc1": {
      "x": 59.0296,
      "y": 112,
      "labelPos": "below"
     },
     "cv_cc2": {
      "x": 66.8528,
      "y": 112,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_rtfe62h",
   "typeId": "tp_mmb_cvmath",
   "internal": true,
   "name": "MMB CV-MATH",
   "brand": "MMB",
   "modelNumber": "CV-MATH",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "CV-MATH",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "mode": {
      "x": 10.16,
      "y": 22
     },
     "gain_a": {
      "x": 6.096,
      "y": 46
     },
     "gain_b": {
      "x": 14.223999999999998,
      "y": 46
     },
     "gain_c": {
      "x": 6.096,
      "y": 68
     },
     "offset": {
      "x": 14.223999999999998,
      "y": 68
     }
    },
    "portPlacements": {
     "a": {
      "x": 4.064,
      "y": 92,
      "labelPos": "below"
     },
     "b": {
      "x": 10.16,
      "y": 92,
      "labelPos": "below"
     },
     "c": {
      "x": 16.256,
      "y": 92,
      "labelPos": "below"
     },
     "out": {
      "x": 10.16,
      "y": 114,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_q5a25pr",
   "typeId": "tp_mmb_mixer",
   "internal": true,
   "name": "MMB MIXER",
   "brand": "MMB",
   "modelNumber": "MIXER",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "MIXER",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "vol1": {
      "x": 18.288,
      "y": 26
     },
     "pan1": {
      "x": 31.6992,
      "y": 26
     },
     "vol2": {
      "x": 18.288,
      "y": 48
     },
     "pan2": {
      "x": 31.6992,
      "y": 48
     },
     "vol3": {
      "x": 18.288,
      "y": 70
     },
     "pan3": {
      "x": 31.6992,
      "y": 70
     },
     "vol4": {
      "x": 18.288,
      "y": 92
     },
     "pan4": {
      "x": 31.6992,
      "y": 92
     }
    },
    "portPlacements": {
     "in1": {
      "x": 4.8768,
      "y": 26,
      "labelPos": "below"
     },
     "in2": {
      "x": 4.8768,
      "y": 48,
      "labelPos": "below"
     },
     "in3": {
      "x": 4.8768,
      "y": 70,
      "labelPos": "below"
     },
     "in4": {
      "x": 4.8768,
      "y": 92,
      "labelPos": "below"
     },
     "out_l": {
      "x": 15.443200000000001,
      "y": 116,
      "labelPos": "below"
     },
     "out_r": {
      "x": 25.1968,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_kqn3vnm",
   "typeId": "tp_mmb_seq8",
   "internal": true,
   "name": "MMB SEQ-16",
   "brand": "MMB",
   "modelNumber": "SEQ-16",
   "visual": {
    "hpWidth": 20,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 50.8,
      "y": 8,
      "text": "SEQ-16",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 14,
      "text": "16-step sequencer",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "decorations": [
     {
      "kind": "rect",
      "x": 2,
      "y": 30,
      "w": 97.6,
      "h": 44,
      "color": "#0b1220"
     }
    ],
    "controlPlacements": {
     "s1": {
      "x": 7.112,
      "y": 38
     },
     "s2": {
      "x": 18.796,
      "y": 38
     },
     "s3": {
      "x": 30.480000000000004,
      "y": 38
     },
     "s4": {
      "x": 42.164,
      "y": 38
     },
     "s5": {
      "x": 53.848,
      "y": 38
     },
     "s6": {
      "x": 65.532,
      "y": 38
     },
     "s7": {
      "x": 77.216,
      "y": 38
     },
     "s8": {
      "x": 88.89999999999999,
      "y": 38
     },
     "s9": {
      "x": 7.112,
      "y": 62
     },
     "s10": {
      "x": 18.796,
      "y": 62
     },
     "s11": {
      "x": 30.480000000000004,
      "y": 62
     },
     "s12": {
      "x": 42.164,
      "y": 62
     },
     "s13": {
      "x": 53.848,
      "y": 62
     },
     "s14": {
      "x": 65.532,
      "y": 62
     },
     "s15": {
      "x": 77.216,
      "y": 62
     },
     "s16": {
      "x": 88.89999999999999,
      "y": 62
     },
     "led_s1": {
      "x": 7.112,
      "y": 47
     },
     "led_s2": {
      "x": 18.796,
      "y": 47
     },
     "led_s3": {
      "x": 30.480000000000004,
      "y": 47
     },
     "led_s4": {
      "x": 42.164,
      "y": 47
     },
     "led_s5": {
      "x": 53.848,
      "y": 47
     },
     "led_s6": {
      "x": 65.532,
      "y": 47
     },
     "led_s7": {
      "x": 77.216,
      "y": 47
     },
     "led_s8": {
      "x": 88.89999999999999,
      "y": 47
     },
     "led_s9": {
      "x": 7.112,
      "y": 71
     },
     "led_s10": {
      "x": 18.796,
      "y": 71
     },
     "led_s11": {
      "x": 30.480000000000004,
      "y": 71
     },
     "led_s12": {
      "x": 42.164,
      "y": 71
     },
     "led_s13": {
      "x": 53.848,
      "y": 71
     },
     "led_s14": {
      "x": 65.532,
      "y": 71
     },
     "led_s15": {
      "x": 77.216,
      "y": 71
     },
     "led_s16": {
      "x": 88.89999999999999,
      "y": 71
     },
     "root": {
      "x": 18.287999999999997,
      "y": 92
     },
     "rate": {
      "x": 36.57599999999999,
      "y": 92
     },
     "gate": {
      "x": 54.864,
      "y": 92
     },
     "length": {
      "x": 71.11999999999999,
      "y": 92
     },
     "run": {
      "x": 8.128,
      "y": 92
     },
     "runLed": {
      "x": 8.128,
      "y": 104
     },
     "stepDisp": {
      "x": 89.408,
      "y": 92
     },
     "rateBpm": {
      "x": 36.57599999999999,
      "y": 104
     },
     "lenVal": {
      "x": 71.11999999999999,
      "y": 104
     }
    },
    "portPlacements": {
     "clock": {
      "x": 10.16,
      "y": 114,
      "labelPos": "below"
     },
     "reset": {
      "x": 22.352,
      "y": 114,
      "labelPos": "below"
     },
     "voct_in": {
      "x": 34.544000000000004,
      "y": 114,
      "labelPos": "below"
     },
     "run_in": {
      "x": 46.736,
      "y": 114,
      "labelPos": "below"
     },
     "cv": {
      "x": 62.992,
      "y": 114,
      "labelPos": "below"
     },
     "gate_out": {
      "x": 77.216,
      "y": 114,
      "labelPos": "below"
     },
     "trig": {
      "x": 91.44,
      "y": 114,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cs9xwe4",
   "typeId": "tp_mmb_noise",
   "internal": true,
   "name": "MMB NOISE",
   "brand": "MMB",
   "modelNumber": "NOISE",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "NOISE",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "color": {
      "x": 10.16,
      "y": 30
     },
     "level": {
      "x": 10.16,
      "y": 60
     }
    },
    "portPlacements": {
     "out": {
      "x": 10.16,
      "y": 100,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_e0xecfu",
   "typeId": "tp_mmb_echo",
   "internal": true,
   "name": "MMB ECHO",
   "brand": "MMB",
   "modelNumber": "ECHO",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "ECHO",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 14,
      "text": "feedback delay",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "time": {
      "x": 9.144,
      "y": 30
     },
     "feedback": {
      "x": 21.336,
      "y": 30
     },
     "mix": {
      "x": 9.144,
      "y": 70
     },
     "tempo_sync": {
      "x": 21.336,
      "y": 70
     }
    },
    "portPlacements": {
     "time_cv": {
      "x": 5.4864,
      "y": 100,
      "labelPos": "below"
     },
     "fbk_cv": {
      "x": 11.5824,
      "y": 100,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 17.6784,
      "y": 100,
      "labelPos": "below"
     },
     "in": {
      "x": 9.144,
      "y": 116,
      "labelPos": "below"
     },
     "out": {
      "x": 21.336,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_eg4cx9f",
   "typeId": "tp_mmb_phaser",
   "internal": true,
   "name": "MMB PHASER",
   "brand": "MMB",
   "modelNumber": "PHASER",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "PHASER",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "rate": {
      "x": 9.144,
      "y": 30
     },
     "depth": {
      "x": 21.336,
      "y": 30
     },
     "feedback": {
      "x": 9.144,
      "y": 70
     },
     "mix": {
      "x": 21.336,
      "y": 70
     }
    },
    "portPlacements": {
     "rate_cv": {
      "x": 5.4864,
      "y": 100,
      "labelPos": "below"
     },
     "depth_cv": {
      "x": 12.8016,
      "y": 100,
      "labelPos": "below"
     },
     "in": {
      "x": 9.144,
      "y": 116,
      "labelPos": "below"
     },
     "out": {
      "x": 21.336,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_oo507nd",
   "typeId": "tp_mmb_octa_vco",
   "internal": true,
   "name": "MMB OCTA-VCO-S",
   "brand": "MMB",
   "modelNumber": "OCTA-VCO-S",
   "visual": {
    "hpWidth": 20,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 50.8,
      "y": 8,
      "text": "OCTA-VCO-S",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 14,
      "text": "shared controls · 8 cells",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "wave": {
      "x": 16.256,
      "y": 30
     },
     "coarse": {
      "x": 36.57599999999999,
      "y": 34
     },
     "fine": {
      "x": 54.864,
      "y": 34
     },
     "detune": {
      "x": 71.11999999999999,
      "y": 34
     },
     "level": {
      "x": 87.37599999999999,
      "y": 34
     }
    },
    "portPlacements": {
     "voct_1": {
      "x": 8.128,
      "y": 92,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 20.2184,
      "y": 92,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 32.3088,
      "y": 92,
      "labelPos": "below"
     },
     "voct_4": {
      "x": 44.3992,
      "y": 92,
      "labelPos": "below"
     },
     "voct_5": {
      "x": 56.48959999999999,
      "y": 92,
      "labelPos": "below"
     },
     "voct_6": {
      "x": 68.57999999999998,
      "y": 92,
      "labelPos": "below"
     },
     "voct_7": {
      "x": 80.67039999999999,
      "y": 92,
      "labelPos": "below"
     },
     "voct_8": {
      "x": 92.76079999999999,
      "y": 92,
      "labelPos": "below"
     },
     "out_1": {
      "x": 8.128,
      "y": 116,
      "labelPos": "below"
     },
     "out_2": {
      "x": 20.2184,
      "y": 116,
      "labelPos": "below"
     },
     "out_3": {
      "x": 32.3088,
      "y": 116,
      "labelPos": "below"
     },
     "out_4": {
      "x": 44.3992,
      "y": 116,
      "labelPos": "below"
     },
     "out_5": {
      "x": 56.48959999999999,
      "y": 116,
      "labelPos": "below"
     },
     "out_6": {
      "x": 68.57999999999998,
      "y": 116,
      "labelPos": "below"
     },
     "out_7": {
      "x": 80.67039999999999,
      "y": 116,
      "labelPos": "below"
     },
     "out_8": {
      "x": 92.76079999999999,
      "y": 116,
      "labelPos": "below"
     },
     "tune": {
      "x": 50.8,
      "y": 78,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_gavsnqg",
   "typeId": "tp_mmb_octa_vcf",
   "internal": true,
   "name": "MMB OCTA-VCF-S",
   "brand": "MMB",
   "modelNumber": "OCTA-VCF-S",
   "visual": {
    "hpWidth": 20,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 50.8,
      "y": 8,
      "text": "OCTA-VCF-S",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 14,
      "text": "shared controls · 8 cells",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "cutoff": {
      "x": 25.4,
      "y": 34
     },
     "q": {
      "x": 47.751999999999995,
      "y": 34
     },
     "cv_amt": {
      "x": 67.056,
      "y": 34
     },
     "type": {
      "x": 87.37599999999999,
      "y": 30
     }
    },
    "portPlacements": {
     "cv": {
      "x": 50.8,
      "y": 64,
      "labelPos": "below"
     },
     "in_1": {
      "x": 8.128,
      "y": 84,
      "labelPos": "below"
     },
     "in_2": {
      "x": 20.2184,
      "y": 84,
      "labelPos": "below"
     },
     "in_3": {
      "x": 32.3088,
      "y": 84,
      "labelPos": "below"
     },
     "in_4": {
      "x": 44.3992,
      "y": 84,
      "labelPos": "below"
     },
     "in_5": {
      "x": 56.48959999999999,
      "y": 84,
      "labelPos": "below"
     },
     "in_6": {
      "x": 68.57999999999998,
      "y": 84,
      "labelPos": "below"
     },
     "in_7": {
      "x": 80.67039999999999,
      "y": 84,
      "labelPos": "below"
     },
     "in_8": {
      "x": 92.76079999999999,
      "y": 84,
      "labelPos": "below"
     },
     "cv_1": {
      "x": 8.128,
      "y": 101,
      "labelPos": "below"
     },
     "cv_2": {
      "x": 20.2184,
      "y": 101,
      "labelPos": "below"
     },
     "cv_3": {
      "x": 32.3088,
      "y": 101,
      "labelPos": "below"
     },
     "cv_4": {
      "x": 44.3992,
      "y": 101,
      "labelPos": "below"
     },
     "cv_5": {
      "x": 56.48959999999999,
      "y": 101,
      "labelPos": "below"
     },
     "cv_6": {
      "x": 68.57999999999998,
      "y": 101,
      "labelPos": "below"
     },
     "cv_7": {
      "x": 80.67039999999999,
      "y": 101,
      "labelPos": "below"
     },
     "cv_8": {
      "x": 92.76079999999999,
      "y": 101,
      "labelPos": "below"
     },
     "out_1": {
      "x": 8.128,
      "y": 118,
      "labelPos": "below"
     },
     "out_2": {
      "x": 20.2184,
      "y": 118,
      "labelPos": "below"
     },
     "out_3": {
      "x": 32.3088,
      "y": 118,
      "labelPos": "below"
     },
     "out_4": {
      "x": 44.3992,
      "y": 118,
      "labelPos": "below"
     },
     "out_5": {
      "x": 56.48959999999999,
      "y": 118,
      "labelPos": "below"
     },
     "out_6": {
      "x": 68.57999999999998,
      "y": 118,
      "labelPos": "below"
     },
     "out_7": {
      "x": 80.67039999999999,
      "y": 118,
      "labelPos": "below"
     },
     "out_8": {
      "x": 92.76079999999999,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_qencvh8",
   "typeId": "tp_mmb_octa_vca",
   "internal": true,
   "name": "MMB OCTA-VCA-S",
   "brand": "MMB",
   "modelNumber": "OCTA-VCA-S",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "OCTA-VCA-S",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 14,
      "text": "shared level · 8 cells",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "level": {
      "x": 40.64,
      "y": 34
     }
    },
    "portPlacements": {
     "in_1": {
      "x": 6.502400000000001,
      "y": 84,
      "labelPos": "below"
     },
     "in_2": {
      "x": 16.17472,
      "y": 84,
      "labelPos": "below"
     },
     "in_3": {
      "x": 25.84704,
      "y": 84,
      "labelPos": "below"
     },
     "in_4": {
      "x": 35.51936,
      "y": 84,
      "labelPos": "below"
     },
     "in_5": {
      "x": 45.19168,
      "y": 84,
      "labelPos": "below"
     },
     "in_6": {
      "x": 54.864,
      "y": 84,
      "labelPos": "below"
     },
     "in_7": {
      "x": 64.53631999999999,
      "y": 84,
      "labelPos": "below"
     },
     "in_8": {
      "x": 74.20863999999999,
      "y": 84,
      "labelPos": "below"
     },
     "cv_1": {
      "x": 6.502400000000001,
      "y": 101,
      "labelPos": "below"
     },
     "cv_2": {
      "x": 16.17472,
      "y": 101,
      "labelPos": "below"
     },
     "cv_3": {
      "x": 25.84704,
      "y": 101,
      "labelPos": "below"
     },
     "cv_4": {
      "x": 35.51936,
      "y": 101,
      "labelPos": "below"
     },
     "cv_5": {
      "x": 45.19168,
      "y": 101,
      "labelPos": "below"
     },
     "cv_6": {
      "x": 54.864,
      "y": 101,
      "labelPos": "below"
     },
     "cv_7": {
      "x": 64.53631999999999,
      "y": 101,
      "labelPos": "below"
     },
     "cv_8": {
      "x": 74.20863999999999,
      "y": 101,
      "labelPos": "below"
     },
     "out_1": {
      "x": 6.502400000000001,
      "y": 118,
      "labelPos": "below"
     },
     "out_2": {
      "x": 16.17472,
      "y": 118,
      "labelPos": "below"
     },
     "out_3": {
      "x": 25.84704,
      "y": 118,
      "labelPos": "below"
     },
     "out_4": {
      "x": 35.51936,
      "y": 118,
      "labelPos": "below"
     },
     "out_5": {
      "x": 45.19168,
      "y": 118,
      "labelPos": "below"
     },
     "out_6": {
      "x": 54.864,
      "y": 118,
      "labelPos": "below"
     },
     "out_7": {
      "x": 64.53631999999999,
      "y": 118,
      "labelPos": "below"
     },
     "out_8": {
      "x": 74.20863999999999,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_9sxmtkh",
   "typeId": "tp_mmb_quad_mixer_shared",
   "internal": true,
   "name": "MMB QUAD-MIX-S",
   "brand": "MMB",
   "modelNumber": "QUAD-MIX-S",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "QUAD-MIX-S",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 14,
      "text": "per-cel pan · gedeelde volume",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "pan_1": {
      "x": 9.7536,
      "y": 52
     },
     "pan_2": {
      "x": 23.1648,
      "y": 52
     },
     "pan_3": {
      "x": 36.576,
      "y": 52
     },
     "pan_4": {
      "x": 49.9872,
      "y": 52
     },
     "volume": {
      "x": 30.48,
      "y": 82
     }
    },
    "portPlacements": {
     "in_1": {
      "x": 9.7536,
      "y": 30,
      "labelPos": "below"
     },
     "in_2": {
      "x": 23.1648,
      "y": 30,
      "labelPos": "below"
     },
     "in_3": {
      "x": 36.576,
      "y": 30,
      "labelPos": "below"
     },
     "in_4": {
      "x": 49.9872,
      "y": 30,
      "labelPos": "below"
     },
     "out_l": {
      "x": 23.1648,
      "y": 110,
      "labelPos": "below"
     },
     "out_r": {
      "x": 37.7952,
      "y": 110,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_gjqelec",
   "typeId": "tp_mmb_ladder",
   "internal": true,
   "name": "MMB LADDER",
   "brand": "MMB",
   "modelNumber": "LADDER",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "LADDER",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "cutoff": {
      "x": 20.32,
      "y": 22
     },
     "q": {
      "x": 11.3792,
      "y": 48
     },
     "drive": {
      "x": 29.2608,
      "y": 48
     },
     "cv_amt": {
      "x": 8.128,
      "y": 70
     },
     "q_cv_amt": {
      "x": 20.32,
      "y": 70
     },
     "drive_cv_amt": {
      "x": 32.512,
      "y": 70
     }
    },
    "portPlacements": {
     "in": {
      "x": 8.128,
      "y": 98,
      "labelPos": "below"
     },
     "cv": {
      "x": 20.32,
      "y": 98,
      "labelPos": "below"
     },
     "q_cv": {
      "x": 32.512,
      "y": 98,
      "labelPos": "below"
     },
     "drive_cv": {
      "x": 8.128,
      "y": 112,
      "labelPos": "below"
     },
     "out": {
      "x": 32.512,
      "y": 112,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_yzo0f79",
   "typeId": "tp_mmb_ms20",
   "internal": true,
   "name": "MMB MS-20",
   "brand": "MMB",
   "modelNumber": "MS-20",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "MS-20",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "cutoff": {
      "x": 20.32,
      "y": 22
     },
     "q": {
      "x": 11.3792,
      "y": 48
     },
     "drive": {
      "x": 29.2608,
      "y": 48
     },
     "cv_amt": {
      "x": 8.128,
      "y": 70
     },
     "q_cv_amt": {
      "x": 20.32,
      "y": 70
     },
     "drive_cv_amt": {
      "x": 32.512,
      "y": 70
     },
     "type": {
      "x": 20.32,
      "y": 86
     }
    },
    "portPlacements": {
     "in": {
      "x": 8.128,
      "y": 100,
      "labelPos": "below"
     },
     "cv": {
      "x": 20.32,
      "y": 100,
      "labelPos": "below"
     },
     "q_cv": {
      "x": 32.512,
      "y": 100,
      "labelPos": "below"
     },
     "drive_cv": {
      "x": 8.128,
      "y": 113,
      "labelPos": "below"
     },
     "out": {
      "x": 32.512,
      "y": 113,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_681owpw",
   "typeId": "tp_mmb_mixer8",
   "internal": true,
   "name": "MMB MIX8",
   "brand": "MMB",
   "modelNumber": "MIX8",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "MIXER-8",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "vol1": {
      "x": 12.192,
      "y": 28
     },
     "pan1": {
      "x": 20.7264,
      "y": 28
     },
     "vol2": {
      "x": 12.192,
      "y": 50
     },
     "pan2": {
      "x": 20.7264,
      "y": 50
     },
     "vol3": {
      "x": 12.192,
      "y": 72
     },
     "pan3": {
      "x": 20.7264,
      "y": 72
     },
     "vol4": {
      "x": 12.192,
      "y": 94
     },
     "pan4": {
      "x": 20.7264,
      "y": 94
     },
     "vol5": {
      "x": 42.672,
      "y": 28
     },
     "pan5": {
      "x": 51.2064,
      "y": 28
     },
     "vol6": {
      "x": 42.672,
      "y": 50
     },
     "pan6": {
      "x": 51.2064,
      "y": 50
     },
     "vol7": {
      "x": 42.672,
      "y": 72
     },
     "pan7": {
      "x": 51.2064,
      "y": 72
     },
     "vol8": {
      "x": 42.672,
      "y": 94
     },
     "pan8": {
      "x": 51.2064,
      "y": 94
     }
    },
    "portPlacements": {
     "in1": {
      "x": 3.6576,
      "y": 28,
      "labelPos": "below"
     },
     "in2": {
      "x": 3.6576,
      "y": 50,
      "labelPos": "below"
     },
     "in3": {
      "x": 3.6576,
      "y": 72,
      "labelPos": "below"
     },
     "in4": {
      "x": 3.6576,
      "y": 94,
      "labelPos": "below"
     },
     "in5": {
      "x": 34.137600000000006,
      "y": 28,
      "labelPos": "below"
     },
     "in6": {
      "x": 34.137600000000006,
      "y": 50,
      "labelPos": "below"
     },
     "in7": {
      "x": 34.137600000000006,
      "y": 72,
      "labelPos": "below"
     },
     "in8": {
      "x": 34.137600000000006,
      "y": 94,
      "labelPos": "below"
     },
     "out_l": {
      "x": 24.384,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 36.576,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_8pdrvo0",
   "typeId": "tp_mmb_mixer16",
   "internal": true,
   "name": "MMB MIX16",
   "brand": "MMB",
   "modelNumber": "MIX16",
   "visual": {
    "hpWidth": 24,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 60.96,
      "y": 8,
      "text": "MIXER-16",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 60.96,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "vol1": {
      "x": 14.6304,
      "y": 28
     },
     "pan1": {
      "x": 25.6032,
      "y": 28
     },
     "vol2": {
      "x": 14.6304,
      "y": 50
     },
     "pan2": {
      "x": 25.6032,
      "y": 50
     },
     "vol3": {
      "x": 14.6304,
      "y": 72
     },
     "pan3": {
      "x": 25.6032,
      "y": 72
     },
     "vol4": {
      "x": 14.6304,
      "y": 94
     },
     "pan4": {
      "x": 25.6032,
      "y": 94
     },
     "vol5": {
      "x": 45.1104,
      "y": 28
     },
     "pan5": {
      "x": 56.083200000000005,
      "y": 28
     },
     "vol6": {
      "x": 45.1104,
      "y": 50
     },
     "pan6": {
      "x": 56.083200000000005,
      "y": 50
     },
     "vol7": {
      "x": 45.1104,
      "y": 72
     },
     "pan7": {
      "x": 56.083200000000005,
      "y": 72
     },
     "vol8": {
      "x": 45.1104,
      "y": 94
     },
     "pan8": {
      "x": 56.083200000000005,
      "y": 94
     },
     "vol9": {
      "x": 75.5904,
      "y": 28
     },
     "pan9": {
      "x": 86.5632,
      "y": 28
     },
     "vol10": {
      "x": 75.5904,
      "y": 50
     },
     "pan10": {
      "x": 86.5632,
      "y": 50
     },
     "vol11": {
      "x": 75.5904,
      "y": 72
     },
     "pan11": {
      "x": 86.5632,
      "y": 72
     },
     "vol12": {
      "x": 75.5904,
      "y": 94
     },
     "pan12": {
      "x": 86.5632,
      "y": 94
     },
     "vol13": {
      "x": 106.0704,
      "y": 28
     },
     "pan13": {
      "x": 117.0432,
      "y": 28
     },
     "vol14": {
      "x": 106.0704,
      "y": 50
     },
     "pan14": {
      "x": 117.0432,
      "y": 50
     },
     "vol15": {
      "x": 106.0704,
      "y": 72
     },
     "pan15": {
      "x": 117.0432,
      "y": 72
     },
     "vol16": {
      "x": 106.0704,
      "y": 94
     },
     "pan16": {
      "x": 117.0432,
      "y": 94
     }
    },
    "portPlacements": {
     "in1": {
      "x": 6.096,
      "y": 28,
      "labelPos": "below"
     },
     "in2": {
      "x": 6.096,
      "y": 50,
      "labelPos": "below"
     },
     "in3": {
      "x": 6.096,
      "y": 72,
      "labelPos": "below"
     },
     "in4": {
      "x": 6.096,
      "y": 94,
      "labelPos": "below"
     },
     "in5": {
      "x": 36.576,
      "y": 28,
      "labelPos": "below"
     },
     "in6": {
      "x": 36.576,
      "y": 50,
      "labelPos": "below"
     },
     "in7": {
      "x": 36.576,
      "y": 72,
      "labelPos": "below"
     },
     "in8": {
      "x": 36.576,
      "y": 94,
      "labelPos": "below"
     },
     "in9": {
      "x": 67.05600000000001,
      "y": 28,
      "labelPos": "below"
     },
     "in10": {
      "x": 67.05600000000001,
      "y": 50,
      "labelPos": "below"
     },
     "in11": {
      "x": 67.05600000000001,
      "y": 72,
      "labelPos": "below"
     },
     "in12": {
      "x": 67.05600000000001,
      "y": 94,
      "labelPos": "below"
     },
     "in13": {
      "x": 97.536,
      "y": 28,
      "labelPos": "below"
     },
     "in14": {
      "x": 97.536,
      "y": 50,
      "labelPos": "below"
     },
     "in15": {
      "x": 97.536,
      "y": 72,
      "labelPos": "below"
     },
     "in16": {
      "x": 97.536,
      "y": 94,
      "labelPos": "below"
     },
     "out_l": {
      "x": 48.768,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 73.152,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_98lcwee",
   "typeId": "tp_mmb_string",
   "internal": true,
   "name": "MMB STRING",
   "brand": "MMB",
   "modelNumber": "STRING",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "STRING",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 14,
      "text": "Karplus-Strong",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "pluck": {
      "x": 9.144,
      "y": 36
     },
     "level": {
      "x": 21.336,
      "y": 36
     }
    },
    "portPlacements": {
     "voct": {
      "x": 6.096,
      "y": 92,
      "labelPos": "below"
     },
     "gate": {
      "x": 15.24,
      "y": 92,
      "labelPos": "below"
     },
     "pluck_cv": {
      "x": 24.384,
      "y": 92,
      "labelPos": "below"
     },
     "level_cv": {
      "x": 6.096,
      "y": 110,
      "labelPos": "below"
     },
     "out": {
      "x": 19.812,
      "y": 110,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_1vu8rmy",
   "typeId": "tp_mmb_elements",
   "internal": true,
   "name": "MI ELEMENTS",
   "brand": "MI",
   "modelNumber": "ELEMENTS",
   "visual": {
    "hpWidth": 20,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 50.8,
      "y": 8,
      "text": "ELEMENTS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 13,
      "text": "modal / physical modelling",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "envelope": {
      "x": 9.143999999999998,
      "y": 24
     },
     "bow": {
      "x": 25.8064,
      "y": 24
     },
     "blow": {
      "x": 42.4688,
      "y": 24
     },
     "strike": {
      "x": 59.13119999999999,
      "y": 24
     },
     "coarse": {
      "x": 75.7936,
      "y": 24
     },
     "fine": {
      "x": 92.456,
      "y": 24
     },
     "blow_meta": {
      "x": 25.8064,
      "y": 46
     },
     "strike_meta": {
      "x": 42.4688,
      "y": 46
     },
     "fm": {
      "x": 59.13119999999999,
      "y": 46
     },
     "geometry": {
      "x": 75.7936,
      "y": 46
     },
     "brightness": {
      "x": 92.456,
      "y": 46
     },
     "bow_timbre": {
      "x": 9.143999999999998,
      "y": 70
     },
     "blow_timbre": {
      "x": 25.8064,
      "y": 70
     },
     "strike_timbre": {
      "x": 42.4688,
      "y": 70
     },
     "damping": {
      "x": 59.13119999999999,
      "y": 70
     },
     "position": {
      "x": 75.7936,
      "y": 70
     },
     "space": {
      "x": 92.456,
      "y": 70
     },
     "signature": {
      "x": 9.143999999999998,
      "y": 90
     },
     "mod_freq": {
      "x": 25.8064,
      "y": 90
     },
     "mod_offset": {
      "x": 42.4688,
      "y": 90
     },
     "level": {
      "x": 92.456,
      "y": 90
     }
    },
    "portPlacements": {
     "voct": {
      "x": 9.143999999999998,
      "y": 108,
      "labelPos": "below"
     },
     "gate": {
      "x": 25.8064,
      "y": 108,
      "labelPos": "below"
     },
     "strength": {
      "x": 42.4688,
      "y": 108,
      "labelPos": "below"
     },
     "out_l": {
      "x": 75.7936,
      "y": 108,
      "labelPos": "below"
     },
     "out_r": {
      "x": 92.456,
      "y": 108,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_h4j6hws",
   "typeId": "tp_mmb_rings",
   "internal": true,
   "name": "MI RINGS",
   "brand": "MI",
   "modelNumber": "RINGS",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "RINGS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 13,
      "text": "resonator · strum",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "structure": {
      "x": 9.956800000000001,
      "y": 30
     },
     "brightness": {
      "x": 27.0256,
      "y": 30
     },
     "damping": {
      "x": 44.0944,
      "y": 30
     },
     "position": {
      "x": 61.1632,
      "y": 30
     },
     "model": {
      "x": 21.336000000000002,
      "y": 62
     },
     "polyphony": {
      "x": 51.2064,
      "y": 62
     },
     "coarse": {
      "x": 9.956800000000001,
      "y": 88
     },
     "fine": {
      "x": 27.0256,
      "y": 88
     },
     "level": {
      "x": 61.1632,
      "y": 88
     }
    },
    "portPlacements": {
     "voct": {
      "x": 9.956800000000001,
      "y": 108,
      "labelPos": "below"
     },
     "gate": {
      "x": 27.0256,
      "y": 108,
      "labelPos": "below"
     },
     "out_l": {
      "x": 44.0944,
      "y": 108,
      "labelPos": "below"
     },
     "out_r": {
      "x": 61.1632,
      "y": 108,
      "labelPos": "below"
     },
     "structure_cv": {
      "x": 9.956800000000001,
      "y": 120,
      "labelPos": "below"
     },
     "brightness_cv": {
      "x": 27.0256,
      "y": 120,
      "labelPos": "below"
     },
     "damping_cv": {
      "x": 44.0944,
      "y": 120,
      "labelPos": "below"
     },
     "position_cv": {
      "x": 61.1632,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ckf8ktz",
   "typeId": "tp_mmb_plaits",
   "internal": true,
   "name": "MI PLAITS",
   "brand": "MI",
   "modelNumber": "PLAITS",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "PLAITS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 13,
      "text": "24 engines · macro-osc",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "engine": {
      "x": 17.068800000000003,
      "y": 26
     },
     "engDisp": {
      "x": 40.2336,
      "y": 26
     },
     "harmonics": {
      "x": 9.7536,
      "y": 52
     },
     "timbre": {
      "x": 30.48,
      "y": 52
     },
     "morph": {
      "x": 51.2064,
      "y": 52
     },
     "decay": {
      "x": 9.7536,
      "y": 80
     },
     "lpg": {
      "x": 30.48,
      "y": 80
     },
     "level": {
      "x": 51.2064,
      "y": 80
     },
     "coarse": {
      "x": 9.7536,
      "y": 96
     },
     "fine": {
      "x": 30.48,
      "y": 96
     }
    },
    "portPlacements": {
     "harmonics_cv": {
      "x": 8.534400000000002,
      "y": 106,
      "labelPos": "below"
     },
     "timbre_cv": {
      "x": 30.48,
      "y": 106,
      "labelPos": "below"
     },
     "morph_cv": {
      "x": 52.4256,
      "y": 106,
      "labelPos": "below"
     },
     "voct": {
      "x": 8.534400000000002,
      "y": 118,
      "labelPos": "below"
     },
     "gate": {
      "x": 23.1648,
      "y": 118,
      "labelPos": "below"
     },
     "out": {
      "x": 37.7952,
      "y": 118,
      "labelPos": "below"
     },
     "aux": {
      "x": 52.4256,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cd98qb7",
   "typeId": "tp_mmb_clouds",
   "internal": true,
   "name": "MI CLOUDS",
   "brand": "MI",
   "modelNumber": "CLOUDS",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "CLOUDS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 13,
      "text": "granular · texture",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "position": {
      "x": 8.5344,
      "y": 28
     },
     "size": {
      "x": 22.0472,
      "y": 28
     },
     "pitch": {
      "x": 35.56,
      "y": 28
     },
     "density": {
      "x": 49.07280000000001,
      "y": 28
     },
     "texture": {
      "x": 62.58560000000001,
      "y": 28
     },
     "mix": {
      "x": 8.5344,
      "y": 56
     },
     "spread": {
      "x": 22.0472,
      "y": 56
     },
     "feedback": {
      "x": 35.56,
      "y": 56
     },
     "reverb": {
      "x": 49.07280000000001,
      "y": 56
     },
     "level": {
      "x": 62.58560000000001,
      "y": 56
     },
     "mode": {
      "x": 19.913600000000002,
      "y": 80
     },
     "freeze": {
      "x": 51.2064,
      "y": 80
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 8.5344,
      "y": 102,
      "labelPos": "below"
     },
     "in_r": {
      "x": 22.0472,
      "y": 102,
      "labelPos": "below"
     },
     "freeze": {
      "x": 35.56,
      "y": 102,
      "labelPos": "below"
     },
     "trig": {
      "x": 49.07280000000001,
      "y": 102,
      "labelPos": "below"
     },
     "size_cv": {
      "x": 62.58560000000001,
      "y": 102,
      "labelPos": "below"
     },
     "out_l": {
      "x": 35.56,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 49.07280000000001,
      "y": 118,
      "labelPos": "below"
     },
     "position_cv": {
      "x": 8.5344,
      "y": 118,
      "labelPos": "below"
     },
     "density_cv": {
      "x": 22.0472,
      "y": 118,
      "labelPos": "below"
     },
     "texture_cv": {
      "x": 62.58560000000001,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_e1350iz",
   "typeId": "tp_mmb_tides",
   "internal": true,
   "name": "MI TIDES",
   "brand": "MI",
   "modelNumber": "TIDES",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "TIDES",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "slopes · 4 uitgangen",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "rate": {
      "x": 25.4,
      "y": 26
     },
     "mode": {
      "x": 14.224,
      "y": 50
     },
     "output": {
      "x": 36.57599999999999,
      "y": 50
     },
     "shape": {
      "x": 7.112,
      "y": 72
     },
     "slope": {
      "x": 19.304,
      "y": 72
     },
     "smooth": {
      "x": 31.496,
      "y": 72
     },
     "shift": {
      "x": 43.687999999999995,
      "y": 72
     }
    },
    "portPlacements": {
     "shape_cv": {
      "x": 7.112,
      "y": 84,
      "labelPos": "below"
     },
     "slope_cv": {
      "x": 19.304,
      "y": 84,
      "labelPos": "below"
     },
     "smooth_cv": {
      "x": 31.496,
      "y": 84,
      "labelPos": "below"
     },
     "shift_cv": {
      "x": 43.687999999999995,
      "y": 84,
      "labelPos": "below"
     },
     "gate": {
      "x": 15.239999999999998,
      "y": 102,
      "labelPos": "below"
     },
     "rate_cv": {
      "x": 35.559999999999995,
      "y": 102,
      "labelPos": "below"
     },
     "out1": {
      "x": 7.112,
      "y": 118,
      "labelPos": "below"
     },
     "out2": {
      "x": 19.304,
      "y": 118,
      "labelPos": "below"
     },
     "out3": {
      "x": 31.496,
      "y": 118,
      "labelPos": "below"
     },
     "out4": {
      "x": 43.687999999999995,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_hjcb57s",
   "typeId": "tp_mmb_marbles",
   "internal": true,
   "name": "MI MARBLES",
   "brand": "MI",
   "modelNumber": "MARBLES",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "MARBLES",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 13,
      "text": "random · déjà vu",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 17.78,
      "y": 20,
      "text": "— t —",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 53.34,
      "y": 20,
      "text": "— X —",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "tempo": {
      "x": 17.78,
      "y": 32
     },
     "spread": {
      "x": 53.34,
      "y": 32
     },
     "bias": {
      "x": 8.5344,
      "y": 56
     },
     "jitter": {
      "x": 26.314400000000003,
      "y": 56
     },
     "xbias": {
      "x": 44.0944,
      "y": 56
     },
     "steps": {
      "x": 61.8744,
      "y": 56
     },
     "dejavu": {
      "x": 17.78,
      "y": 76
     },
     "length": {
      "x": 39.11600000000001,
      "y": 76
     },
     "model": {
      "x": 60.452000000000005,
      "y": 76
     },
     "scale": {
      "x": 12.8016,
      "y": 93
     },
     "range": {
      "x": 35.56,
      "y": 93
     },
     "extclock": {
      "x": 58.3184,
      "y": 93
     }
    },
    "portPlacements": {
     "clock": {
      "x": 7.112000000000001,
      "y": 106,
      "labelPos": "below"
     },
     "rate_cv": {
      "x": 26.314400000000003,
      "y": 106,
      "labelPos": "below"
     },
     "dejavu_cv": {
      "x": 45.5168,
      "y": 106,
      "labelPos": "below"
     },
     "spread_cv": {
      "x": 64.7192,
      "y": 106,
      "labelPos": "below"
     },
     "t1": {
      "x": 7.112000000000001,
      "y": 119,
      "labelPos": "below"
     },
     "t2": {
      "x": 16.7132,
      "y": 119,
      "labelPos": "below"
     },
     "tclk": {
      "x": 26.314400000000003,
      "y": 119,
      "labelPos": "below"
     },
     "x1": {
      "x": 35.915600000000005,
      "y": 119,
      "labelPos": "below"
     },
     "x2": {
      "x": 45.5168,
      "y": 119,
      "labelPos": "below"
     },
     "x3": {
      "x": 55.118,
      "y": 119,
      "labelPos": "below"
     },
     "y": {
      "x": 64.7192,
      "y": 119,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_j0rucpe",
   "typeId": "tp_mmb_dx7",
   "internal": true,
   "name": "MMB DX7",
   "brand": "MMB",
   "modelNumber": "DX7",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1e1b4b",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "DX7",
      "fontSize": 2.6,
      "color": "#a5b4fc",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "6-op FM · msfa",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "bank": {
      "x": 13.004800000000001,
      "y": 24
     },
     "bnkDisp": {
      "x": 29.2608,
      "y": 24
     },
     "program": {
      "x": 13.004800000000001,
      "y": 44
     },
     "prgDisp": {
      "x": 29.2608,
      "y": 44
     },
     "voiceName": {
      "x": 20.32,
      "y": 60
     },
     "coarse": {
      "x": 10.16,
      "y": 76
     },
     "fine": {
      "x": 30.48,
      "y": 76
     },
     "level": {
      "x": 20.32,
      "y": 90
     }
    },
    "portPlacements": {
     "voct": {
      "x": 8.128,
      "y": 102,
      "labelPos": "below"
     },
     "gate": {
      "x": 20.32,
      "y": 102,
      "labelPos": "below"
     },
     "vel": {
      "x": 32.512,
      "y": 102,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ib8bgva",
   "typeId": "tp_mmb_warps",
   "internal": true,
   "name": "MI WARPS",
   "brand": "MI",
   "modelNumber": "WARPS",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "WARPS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "xmod · vocoder",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "algo": {
      "x": 17.779999999999998,
      "y": 30
     },
     "algDisp": {
      "x": 39.624,
      "y": 30
     },
     "timbre": {
      "x": 25.4,
      "y": 58
     },
     "shape": {
      "x": 10.16,
      "y": 80
     },
     "drive1": {
      "x": 27.94,
      "y": 80
     },
     "drive2": {
      "x": 43.18,
      "y": 80
     },
     "coarse": {
      "x": 27.94,
      "y": 96
     },
     "level": {
      "x": 43.18,
      "y": 96
     }
    },
    "portPlacements": {
     "in1": {
      "x": 7.112,
      "y": 108,
      "labelPos": "below"
     },
     "in2": {
      "x": 19.304,
      "y": 108,
      "labelPos": "below"
     },
     "voct": {
      "x": 31.496,
      "y": 108,
      "labelPos": "below"
     },
     "algo_cv": {
      "x": 43.687999999999995,
      "y": 108,
      "labelPos": "below"
     },
     "timbre_cv": {
      "x": 7.112,
      "y": 120,
      "labelPos": "below"
     },
     "out": {
      "x": 27.94,
      "y": 120,
      "labelPos": "below"
     },
     "aux": {
      "x": 43.18,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_zbfu4rg",
   "typeId": "tp_mmb_morph_wt",
   "internal": true,
   "name": "MMB MORPH-WT",
   "brand": "MMB",
   "modelNumber": "MORPH-WT",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "MORPH-WT",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "8 frames · vloeiend",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "morph": {
      "x": 25.4,
      "y": 32
     },
     "bank": {
      "x": 11.176,
      "y": 60
     },
     "wslot": {
      "x": 31.496,
      "y": 60
     },
     "level": {
      "x": 44.704,
      "y": 60
     },
     "coarse": {
      "x": 15.239999999999998,
      "y": 88
     },
     "fine": {
      "x": 35.559999999999995,
      "y": 88
     }
    },
    "portPlacements": {
     "voct": {
      "x": 9.143999999999998,
      "y": 110,
      "labelPos": "below"
     },
     "morph_cv": {
      "x": 25.4,
      "y": 110,
      "labelPos": "below"
     },
     "out": {
      "x": 41.65599999999999,
      "y": 110,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_7xe4vju",
   "typeId": "tp_mmb_stages",
   "internal": true,
   "name": "MI STAGES",
   "brand": "MI",
   "modelNumber": "STAGES",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "STAGES",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 13,
      "text": "6 segmenten · env/LFO/seq",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "t1": {
      "x": 8.128,
      "y": 34
     },
     "s1": {
      "x": 8.128,
      "y": 54
     },
     "type1": {
      "x": 8.128,
      "y": 72
     },
     "t2": {
      "x": 20.48256,
      "y": 34
     },
     "s2": {
      "x": 20.48256,
      "y": 54
     },
     "type2": {
      "x": 20.48256,
      "y": 72
     },
     "t3": {
      "x": 32.837120000000006,
      "y": 34
     },
     "s3": {
      "x": 32.837120000000006,
      "y": 54
     },
     "type3": {
      "x": 32.837120000000006,
      "y": 72
     },
     "t4": {
      "x": 45.19168,
      "y": 34
     },
     "s4": {
      "x": 45.19168,
      "y": 54
     },
     "type4": {
      "x": 45.19168,
      "y": 72
     },
     "t5": {
      "x": 57.54624,
      "y": 34
     },
     "s5": {
      "x": 57.54624,
      "y": 54
     },
     "type5": {
      "x": 57.54624,
      "y": 72
     },
     "t6": {
      "x": 69.9008,
      "y": 34
     },
     "s6": {
      "x": 69.9008,
      "y": 54
     },
     "type6": {
      "x": 69.9008,
      "y": 72
     },
     "segments": {
      "x": 13.004800000000001,
      "y": 96
     },
     "loop": {
      "x": 29.2608,
      "y": 96
     },
     "loop_start": {
      "x": 43.891200000000005,
      "y": 96
     },
     "loop_end": {
      "x": 58.5216,
      "y": 96
     },
     "rate": {
      "x": 71.5264,
      "y": 96
     }
    },
    "portPlacements": {
     "gate": {
      "x": 16.256,
      "y": 114,
      "labelPos": "below"
     },
     "out": {
      "x": 44.70400000000001,
      "y": 114,
      "labelPos": "below"
     },
     "eoc": {
      "x": 66.64959999999999,
      "y": 114,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_0hauj7s",
   "typeId": "tp_mmb_peaks",
   "internal": true,
   "name": "MI PEAKS",
   "brand": "MI",
   "modelNumber": "PEAKS",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "PEAKS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "808 drums",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drum": {
      "x": 20.32,
      "y": 26
     },
     "tone": {
      "x": 11.3792,
      "y": 50
     },
     "decay": {
      "x": 29.2608,
      "y": 50
     },
     "snap": {
      "x": 11.3792,
      "y": 74
     },
     "coarse": {
      "x": 29.2608,
      "y": 74
     },
     "level": {
      "x": 20.32,
      "y": 92
     }
    },
    "portPlacements": {
     "gate": {
      "x": 8.128,
      "y": 110,
      "labelPos": "below"
     },
     "voct": {
      "x": 20.32,
      "y": 110,
      "labelPos": "below"
     },
     "out": {
      "x": 32.512,
      "y": 110,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cehhg4d",
   "typeId": "tp_mmb_resonator",
   "internal": true,
   "name": "MMB RESONATOR",
   "brand": "MMB",
   "modelNumber": "RESONATOR",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "RESONATOR",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "12 sympathetic strings",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "root": {
      "x": 15.239999999999998,
      "y": 30
     },
     "scale": {
      "x": 36.57599999999999,
      "y": 30
     },
     "structure": {
      "x": 12.7,
      "y": 60
     },
     "decay": {
      "x": 38.099999999999994,
      "y": 60
     },
     "damping": {
      "x": 10.16,
      "y": 86
     },
     "mix": {
      "x": 25.4,
      "y": 86
     },
     "level": {
      "x": 40.64,
      "y": 86
     }
    },
    "portPlacements": {
     "in": {
      "x": 9.143999999999998,
      "y": 104,
      "labelPos": "below"
     },
     "voct": {
      "x": 25.4,
      "y": 104,
      "labelPos": "below"
     },
     "struct_cv": {
      "x": 41.65599999999999,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 16.256,
      "y": 118,
      "labelPos": "below"
     },
     "mix": {
      "x": 34.544000000000004,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_1ogpsuc",
   "typeId": "tp_mmb_cr78",
   "internal": true,
   "name": "MMB CR-78",
   "brand": "MMB",
   "modelNumber": "CR-78",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3b2413",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "CR-78",
      "fontSize": 2.4,
      "color": "#fbe8c8",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "CompuRhythm · berekend",
      "fontSize": 1,
      "color": "#c8a878",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#fbe8c8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drum": {
      "x": 20.32,
      "y": 26
     },
     "tone": {
      "x": 11.3792,
      "y": 54
     },
     "decay": {
      "x": 29.2608,
      "y": 54
     },
     "bend": {
      "x": 11.3792,
      "y": 80
     },
     "level": {
      "x": 29.2608,
      "y": 80
     }
    },
    "portPlacements": {
     "gate": {
      "x": 6.502400000000001,
      "y": 104,
      "labelPos": "below"
     },
     "voct": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "accent_cv": {
      "x": 34.1376,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_h8z1cw2",
   "typeId": "tp_mmb_quant",
   "internal": true,
   "name": "MMB QUANT",
   "brand": "MMB",
   "modelNumber": "QUANT",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "QUANT",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 13,
      "text": "CV → schaal",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "scale": {
      "x": 15.24,
      "y": 26
     },
     "root": {
      "x": 9.144,
      "y": 58
     },
     "glide": {
      "x": 21.336,
      "y": 58
     }
    },
    "portPlacements": {
     "in": {
      "x": 7.62,
      "y": 100,
      "labelPos": "below"
     },
     "out": {
      "x": 22.86,
      "y": 100,
      "labelPos": "below"
     },
     "trig": {
      "x": 22.86,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_9xuv4o3",
   "typeId": "tp_mmb_chord",
   "internal": true,
   "name": "MMB CHORD",
   "brand": "MMB",
   "modelNumber": "CHORD",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "CHORD",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 13,
      "text": "1 in · 4 stemmen",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "chord": {
      "x": 15.24,
      "y": 26
     },
     "inv": {
      "x": 9.144,
      "y": 58
     },
     "spread": {
      "x": 21.336,
      "y": 58
     }
    },
    "portPlacements": {
     "voct": {
      "x": 15.24,
      "y": 92,
      "labelPos": "below"
     },
     "out1": {
      "x": 6.096,
      "y": 112,
      "labelPos": "below"
     },
     "out2": {
      "x": 12.192,
      "y": 112,
      "labelPos": "below"
     },
     "out3": {
      "x": 18.288,
      "y": 112,
      "labelPos": "below"
     },
     "out4": {
      "x": 24.384,
      "y": 112,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_nayq82i",
   "typeId": "tp_mmb_elements_reverb",
   "internal": true,
   "name": "MI REVERB",
   "brand": "MI",
   "modelNumber": "REVERB",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "REVERB",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "Dattorro · stereo",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MI",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "amount": {
      "x": 11.3792,
      "y": 34
     },
     "time": {
      "x": 29.2608,
      "y": 34
     },
     "diffusion": {
      "x": 11.3792,
      "y": 66
     },
     "lp": {
      "x": 29.2608,
      "y": 66
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 10.16,
      "y": 96,
      "labelPos": "below"
     },
     "in_r": {
      "x": 30.48,
      "y": 96,
      "labelPos": "below"
     },
     "out_l": {
      "x": 10.16,
      "y": 114,
      "labelPos": "below"
     },
     "out_r": {
      "x": 30.48,
      "y": 114,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_lgbh90x",
   "typeId": "tp_mmb_grids",
   "internal": true,
   "name": "MMB GRIDS",
   "brand": "MMB",
   "modelNumber": "GRIDS",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "GRIDS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "drum-kaart · X/Y",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "x": {
      "x": 14.224,
      "y": 30
     },
     "y": {
      "x": 36.57599999999999,
      "y": 30
     },
     "bd": {
      "x": 9.143999999999998,
      "y": 60
     },
     "sd": {
      "x": 21.336,
      "y": 60
     },
     "hh": {
      "x": 33.528,
      "y": 60
     },
     "chaos": {
      "x": 44.704,
      "y": 60
     },
     "tempo": {
      "x": 15.239999999999998,
      "y": 84
     },
     "extclock": {
      "x": 38.099999999999994,
      "y": 84
     }
    },
    "portPlacements": {
     "clock": {
      "x": 7.112,
      "y": 102,
      "labelPos": "below"
     },
     "reset": {
      "x": 19.304,
      "y": 102,
      "labelPos": "below"
     },
     "x_cv": {
      "x": 31.496,
      "y": 102,
      "labelPos": "below"
     },
     "y_cv": {
      "x": 43.687999999999995,
      "y": 102,
      "labelPos": "below"
     },
     "bd": {
      "x": 7.112,
      "y": 118,
      "labelPos": "below"
     },
     "sd": {
      "x": 19.304,
      "y": 118,
      "labelPos": "below"
     },
     "hh": {
      "x": 31.496,
      "y": 118,
      "labelPos": "below"
     },
     "acc": {
      "x": 43.687999999999995,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_915liq6",
   "typeId": "tp_mmb_comp",
   "internal": true,
   "name": "MMB COMP",
   "brand": "MMB",
   "modelNumber": "COMP",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "COMP",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 14,
      "text": "comp + drive",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "threshold": {
      "x": 8.534400000000002,
      "y": 30
     },
     "ratio": {
      "x": 21.9456,
      "y": 30
     },
     "attack": {
      "x": 8.534400000000002,
      "y": 60
     },
     "release": {
      "x": 21.9456,
      "y": 60
     },
     "makeup": {
      "x": 8.534400000000002,
      "y": 86
     },
     "drive": {
      "x": 21.9456,
      "y": 86
     }
    },
    "portPlacements": {
     "thr_cv": {
      "x": 4.8768,
      "y": 104,
      "labelPos": "below"
     },
     "drive_cv": {
      "x": 12.192,
      "y": 104,
      "labelPos": "below"
     },
     "in": {
      "x": 9.144,
      "y": 118,
      "labelPos": "below"
     },
     "out": {
      "x": 21.336,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_zxjf9u7",
   "typeId": "tp_mmb_tape_echo",
   "internal": true,
   "name": "MMB TAPE",
   "brand": "MMB",
   "modelNumber": "TAPE",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1f1a14",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "TAPE ECHO",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "sat · tone · wow/flutter",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "time": {
      "x": 10.16,
      "y": 30
     },
     "feedback": {
      "x": 30.48,
      "y": 30
     },
     "mix": {
      "x": 10.16,
      "y": 58
     },
     "tone": {
      "x": 30.48,
      "y": 58
     },
     "wow": {
      "x": 8.128,
      "y": 82
     },
     "flutter": {
      "x": 20.32,
      "y": 82
     },
     "drive": {
      "x": 32.512,
      "y": 82
     }
    },
    "portPlacements": {
     "time_cv": {
      "x": 6.096,
      "y": 102,
      "labelPos": "below"
     },
     "fbk_cv": {
      "x": 15.443200000000001,
      "y": 102,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 24.790399999999998,
      "y": 102,
      "labelPos": "below"
     },
     "in": {
      "x": 12.192,
      "y": 118,
      "labelPos": "below"
     },
     "out": {
      "x": 28.447999999999997,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_iyj7tu0",
   "typeId": "tp_mmb_sampler",
   "internal": true,
   "name": "MMB SAMPLER",
   "brand": "MMB",
   "modelNumber": "SAMPLER",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#14261f",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "SAMPLER",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 14,
      "text": "keymap · 8 stemmen · filter per stem",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 3,
      "y": 73,
      "text": "Env",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 85,
      "text": "Cut",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 97,
      "text": "V/Oct",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 109,
      "text": "Gate",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 121,
      "text": "Vel",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     }
    ],
    "controlPlacements": {
     "bank": {
      "x": 8.128,
      "y": 28
     },
     "level": {
      "x": 20.32,
      "y": 28
     },
     "coarse": {
      "x": 32.512,
      "y": 28
     },
     "fine": {
      "x": 42.2656,
      "y": 28
     },
     "start": {
      "x": 52.019200000000005,
      "y": 28
     },
     "attack": {
      "x": 61.772800000000004,
      "y": 28
     },
     "env_rel": {
      "x": 73.152,
      "y": 28
     },
     "filter": {
      "x": 6.502400000000001,
      "y": 50
     },
     "cutoff": {
      "x": 19.5072,
      "y": 50
     },
     "q": {
      "x": 30.886400000000002,
      "y": 50
     },
     "fmode": {
      "x": 40.64,
      "y": 50
     },
     "drive": {
      "x": 50.3936,
      "y": 50
     },
     "cv_amt": {
      "x": 60.1472,
      "y": 50
     },
     "env_sens": {
      "x": 60.1472,
      "y": 60
     },
     "limit": {
      "x": 6.502400000000001,
      "y": 62
     }
    },
    "portPlacements": {
     "bend": {
      "x": 24.384,
      "y": 62,
      "labelPos": "below"
     },
     "out_l": {
      "x": 69.9008,
      "y": 50,
      "labelPos": "below"
     },
     "out_r": {
      "x": 75.5904,
      "y": 50,
      "labelPos": "below"
     },
     "out_3": {
      "x": 69.9008,
      "y": 62,
      "labelPos": "below"
     },
     "out_4": {
      "x": 75.5904,
      "y": 62,
      "labelPos": "below"
     },
     "env_1": {
      "x": 5.08,
      "y": 72,
      "labelPos": "below"
     },
     "env_2": {
      "x": 15.24,
      "y": 72,
      "labelPos": "below"
     },
     "env_3": {
      "x": 25.4,
      "y": 72,
      "labelPos": "below"
     },
     "env_4": {
      "x": 35.56,
      "y": 72,
      "labelPos": "below"
     },
     "env_5": {
      "x": 45.72,
      "y": 72,
      "labelPos": "below"
     },
     "env_6": {
      "x": 55.88,
      "y": 72,
      "labelPos": "below"
     },
     "env_7": {
      "x": 66.04,
      "y": 72,
      "labelPos": "below"
     },
     "env_8": {
      "x": 76.2,
      "y": 72,
      "labelPos": "below"
     },
     "cutoff_1": {
      "x": 5.08,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_2": {
      "x": 15.24,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_3": {
      "x": 25.4,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_4": {
      "x": 35.56,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_5": {
      "x": 45.72,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_6": {
      "x": 55.88,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_7": {
      "x": 66.04,
      "y": 84,
      "labelPos": "below"
     },
     "cutoff_8": {
      "x": 76.2,
      "y": 84,
      "labelPos": "below"
     },
     "voct_1": {
      "x": 5.08,
      "y": 96,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 15.24,
      "y": 96,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 25.4,
      "y": 96,
      "labelPos": "below"
     },
     "voct_4": {
      "x": 35.56,
      "y": 96,
      "labelPos": "below"
     },
     "voct_5": {
      "x": 45.72,
      "y": 96,
      "labelPos": "below"
     },
     "voct_6": {
      "x": 55.88,
      "y": 96,
      "labelPos": "below"
     },
     "voct_7": {
      "x": 66.04,
      "y": 96,
      "labelPos": "below"
     },
     "voct_8": {
      "x": 76.2,
      "y": 96,
      "labelPos": "below"
     },
     "gate_1": {
      "x": 5.08,
      "y": 108,
      "labelPos": "below"
     },
     "gate_2": {
      "x": 15.24,
      "y": 108,
      "labelPos": "below"
     },
     "gate_3": {
      "x": 25.4,
      "y": 108,
      "labelPos": "below"
     },
     "gate_4": {
      "x": 35.56,
      "y": 108,
      "labelPos": "below"
     },
     "gate_5": {
      "x": 45.72,
      "y": 108,
      "labelPos": "below"
     },
     "gate_6": {
      "x": 55.88,
      "y": 108,
      "labelPos": "below"
     },
     "gate_7": {
      "x": 66.04,
      "y": 108,
      "labelPos": "below"
     },
     "gate_8": {
      "x": 76.2,
      "y": 108,
      "labelPos": "below"
     },
     "vel_1": {
      "x": 5.08,
      "y": 120,
      "labelPos": "below"
     },
     "vel_2": {
      "x": 15.24,
      "y": 120,
      "labelPos": "below"
     },
     "vel_3": {
      "x": 25.4,
      "y": 120,
      "labelPos": "below"
     },
     "vel_4": {
      "x": 35.56,
      "y": 120,
      "labelPos": "below"
     },
     "vel_5": {
      "x": 45.72,
      "y": 120,
      "labelPos": "below"
     },
     "vel_6": {
      "x": 55.88,
      "y": 120,
      "labelPos": "below"
     },
     "vel_7": {
      "x": 66.04,
      "y": 120,
      "labelPos": "below"
     },
     "vel_8": {
      "x": 76.2,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_v1t603e",
   "typeId": "tp_mmb_stereo_vca",
   "internal": true,
   "name": "MMB ST-VCA",
   "brand": "MMB",
   "modelNumber": "ST-VCA",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "ST-VCA",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 14,
      "text": "vol + pan",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "vol": {
      "x": 9.144,
      "y": 36
     },
     "pan": {
      "x": 21.336,
      "y": 36
     }
    },
    "portPlacements": {
     "vol_cv": {
      "x": 6.096,
      "y": 86,
      "labelPos": "below"
     },
     "pan_cv": {
      "x": 15.24,
      "y": 86,
      "labelPos": "below"
     },
     "in": {
      "x": 24.384,
      "y": 86,
      "labelPos": "below"
     },
     "l": {
      "x": 9.7536,
      "y": 112,
      "labelPos": "below"
     },
     "r": {
      "x": 20.7264,
      "y": 112,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_8kl5b63",
   "typeId": "tp_mmb_fm_vco",
   "internal": true,
   "name": "MMB FM-VCO",
   "brand": "MMB",
   "modelNumber": "FM-VCO",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "FM-VCO",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "wave": {
      "x": 20.32,
      "y": 22
     },
     "coarse": {
      "x": 12.192,
      "y": 50
     },
     "fine": {
      "x": 28.447999999999997,
      "y": 50
     },
     "fm_amt": {
      "x": 12.192,
      "y": 78
     },
     "level": {
      "x": 28.447999999999997,
      "y": 78
     }
    },
    "portPlacements": {
     "voct": {
      "x": 7.3152,
      "y": 104,
      "labelPos": "below"
     },
     "tune": {
      "x": 16.256,
      "y": 104,
      "labelPos": "below"
     },
     "fm": {
      "x": 25.1968,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 34.9504,
      "y": 104,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_2neid5l",
   "typeId": "tp_mmb_comb",
   "internal": true,
   "name": "MMB COMB",
   "brand": "MMB",
   "modelNumber": "COMB",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "COMB",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 14,
      "text": "tuned resonator",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "coarse": {
      "x": 9.144,
      "y": 30
     },
     "feedback": {
      "x": 21.336,
      "y": 30
     },
     "mix": {
      "x": 9.144,
      "y": 70
     }
    },
    "portPlacements": {
     "freq_cv": {
      "x": 5.4864,
      "y": 100,
      "labelPos": "below"
     },
     "fbk_cv": {
      "x": 12.8016,
      "y": 100,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 20.1168,
      "y": 100,
      "labelPos": "below"
     },
     "in": {
      "x": 9.144,
      "y": 116,
      "labelPos": "below"
     },
     "out": {
      "x": 21.336,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_jbbtfo5",
   "typeId": "tp_mmb_wt_vco",
   "internal": true,
   "name": "MMB WT-VCO",
   "brand": "MMB",
   "modelNumber": "WT-VCO",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "WT-VCO",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "bank": {
      "x": 20.32,
      "y": 22
     },
     "coarse": {
      "x": 12.192,
      "y": 58
     },
     "fine": {
      "x": 28.447999999999997,
      "y": 58
     },
     "level": {
      "x": 20.32,
      "y": 84
     }
    },
    "portPlacements": {
     "voct": {
      "x": 10.16,
      "y": 104,
      "labelPos": "below"
     },
     "tune": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 31.6992,
      "y": 104,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_wdb2bo4",
   "typeId": "tp_mmb_draw_vco",
   "internal": true,
   "name": "MMB DRAW-VCO",
   "brand": "MMB",
   "modelNumber": "DRAW-VCO",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "DRAW-VCO",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "decorations": [
     {
      "kind": "rect",
      "x": 4.8768,
      "y": 22,
      "w": 30.886400000000002,
      "h": 30,
      "color": "#0b1220"
     }
    ],
    "controlPlacements": {
     "coarse": {
      "x": 12.192,
      "y": 70
     },
     "fine": {
      "x": 28.447999999999997,
      "y": 70
     },
     "level": {
      "x": 20.32,
      "y": 92
     }
    },
    "portPlacements": {
     "voct": {
      "x": 10.16,
      "y": 110,
      "labelPos": "below"
     },
     "tune": {
      "x": 20.32,
      "y": 110,
      "labelPos": "below"
     },
     "out": {
      "x": 31.6992,
      "y": 110,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_4yjhoyq",
   "typeId": "tp_mmb_stk_sound",
   "internal": true,
   "name": "MMB STK-SOUND",
   "brand": "MMB",
   "modelNumber": "STK-SOUND",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "STK-SOUND",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "physical modelling",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "sound": {
      "x": 20.32,
      "y": 22
     },
     "level": {
      "x": 12.192,
      "y": 54
     },
     "timbre": {
      "x": 28.447999999999997,
      "y": 54
     },
     "modulation": {
      "x": 12.192,
      "y": 84
     },
     "strength": {
      "x": 28.447999999999997,
      "y": 84
     }
    },
    "portPlacements": {
     "voct": {
      "x": 8.128,
      "y": 108,
      "labelPos": "below"
     },
     "gate": {
      "x": 18.288,
      "y": 108,
      "labelPos": "below"
     },
     "strength": {
      "x": 8.128,
      "y": 120,
      "labelPos": "below"
     },
     "timbre": {
      "x": 18.288,
      "y": 120,
      "labelPos": "below"
     },
     "modulation": {
      "x": 28.447999999999997,
      "y": 108,
      "labelPos": "below"
     },
     "out": {
      "x": 30.48,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_xu2a6k2",
   "typeId": "tp_mmb_env_follower",
   "internal": true,
   "name": "MMB ENV-FOLLOW-8",
   "brand": "MMB",
   "modelNumber": "ENV-FOLLOW-8",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "ENV-FOLLOW-8",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 14,
      "text": "audio → cv · 8 cellen",
      "fontSize": 1.2,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "attack": {
      "x": 16.256,
      "y": 34
     },
     "release": {
      "x": 34.1376,
      "y": 34
     },
     "sens": {
      "x": 52.019200000000005,
      "y": 34
     },
     "thresh": {
      "x": 69.9008,
      "y": 34
     },
     "mode": {
      "x": 40.64,
      "y": 60
     }
    },
    "portPlacements": {
     "in_1": {
      "x": 6.502400000000001,
      "y": 84,
      "labelPos": "below"
     },
     "in_2": {
      "x": 16.17472,
      "y": 84,
      "labelPos": "below"
     },
     "in_3": {
      "x": 25.84704,
      "y": 84,
      "labelPos": "below"
     },
     "in_4": {
      "x": 35.51936,
      "y": 84,
      "labelPos": "below"
     },
     "in_5": {
      "x": 45.19168,
      "y": 84,
      "labelPos": "below"
     },
     "in_6": {
      "x": 54.864,
      "y": 84,
      "labelPos": "below"
     },
     "in_7": {
      "x": 64.53631999999999,
      "y": 84,
      "labelPos": "below"
     },
     "in_8": {
      "x": 74.20863999999999,
      "y": 84,
      "labelPos": "below"
     },
     "env_1": {
      "x": 6.502400000000001,
      "y": 101,
      "labelPos": "below"
     },
     "env_2": {
      "x": 16.17472,
      "y": 101,
      "labelPos": "below"
     },
     "env_3": {
      "x": 25.84704,
      "y": 101,
      "labelPos": "below"
     },
     "env_4": {
      "x": 35.51936,
      "y": 101,
      "labelPos": "below"
     },
     "env_5": {
      "x": 45.19168,
      "y": 101,
      "labelPos": "below"
     },
     "env_6": {
      "x": 54.864,
      "y": 101,
      "labelPos": "below"
     },
     "env_7": {
      "x": 64.53631999999999,
      "y": 101,
      "labelPos": "below"
     },
     "env_8": {
      "x": 74.20863999999999,
      "y": 101,
      "labelPos": "below"
     },
     "gate_1": {
      "x": 6.502400000000001,
      "y": 118,
      "labelPos": "below"
     },
     "gate_2": {
      "x": 16.17472,
      "y": 118,
      "labelPos": "below"
     },
     "gate_3": {
      "x": 25.84704,
      "y": 118,
      "labelPos": "below"
     },
     "gate_4": {
      "x": 35.51936,
      "y": 118,
      "labelPos": "below"
     },
     "gate_5": {
      "x": 45.19168,
      "y": 118,
      "labelPos": "below"
     },
     "gate_6": {
      "x": 54.864,
      "y": 118,
      "labelPos": "below"
     },
     "gate_7": {
      "x": 64.53631999999999,
      "y": 118,
      "labelPos": "below"
     },
     "gate_8": {
      "x": 74.20863999999999,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cn1sc9w",
   "typeId": "tp_mmb_env_follower_mono",
   "internal": true,
   "name": "MMB ENV-FOLLOW",
   "brand": "MMB",
   "modelNumber": "ENV-FOLLOW",
   "visual": {
    "hpWidth": 6,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 15.24,
      "y": 8,
      "text": "ENV",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 13,
      "text": "FOLLOW",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 18,
      "text": "audio → cv",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 124,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "attack": {
      "x": 8.534400000000002,
      "y": 30
     },
     "release": {
      "x": 21.9456,
      "y": 30
     },
     "sens": {
      "x": 8.534400000000002,
      "y": 52
     },
     "thresh": {
      "x": 21.9456,
      "y": 52
     },
     "mode": {
      "x": 15.24,
      "y": 72
     }
    },
    "portPlacements": {
     "in": {
      "x": 15.24,
      "y": 92,
      "labelPos": "below"
     },
     "env": {
      "x": 8.534400000000002,
      "y": 112,
      "labelPos": "below"
     },
     "gate": {
      "x": 21.9456,
      "y": 112,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_it1mywp",
   "typeId": "tp_mmb_fet_comp",
   "internal": true,
   "name": "MMB FET",
   "brand": "MMB",
   "modelNumber": "FET",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#16181c",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "FET COMP",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "limiting amplifier",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "input": {
      "x": 10.972800000000001,
      "y": 30
     },
     "output": {
      "x": 29.6672,
      "y": 30
     },
     "attack": {
      "x": 10.972800000000001,
      "y": 56
     },
     "release": {
      "x": 29.6672,
      "y": 56
     },
     "ratio": {
      "x": 8.9408,
      "y": 80
     },
     "mix": {
      "x": 29.2608,
      "y": 68
     },
     "color": {
      "x": 29.2608,
      "y": 82
     },
     "bypass": {
      "x": 20.32,
      "y": 92
     }
    },
    "portPlacements": {
     "gr": {
      "x": 20.32,
      "y": 106,
      "labelPos": "below"
     },
     "in_l": {
      "x": 6.096,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 13.004800000000001,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 27.6352,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 34.544,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_yqd284h",
   "typeId": "tp_mmb_opto_comp",
   "internal": true,
   "name": "MMB OPTO",
   "brand": "MMB",
   "modelNumber": "OPTO",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1b1714",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "OPTO COMP",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "leveling amplifier",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "peak": {
      "x": 10.972800000000001,
      "y": 32
     },
     "gain": {
      "x": 29.6672,
      "y": 32
     },
     "mode": {
      "x": 8.9408,
      "y": 62
     },
     "color": {
      "x": 29.2608,
      "y": 60
     },
     "mix": {
      "x": 29.2608,
      "y": 78
     },
     "bypass": {
      "x": 8.9408,
      "y": 86
     }
    },
    "portPlacements": {
     "gr": {
      "x": 20.32,
      "y": 106,
      "labelPos": "below"
     },
     "in_l": {
      "x": 6.096,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 13.004800000000001,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 27.6352,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 34.544,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_euhlall",
   "typeId": "tp_mmb_bus_comp",
   "internal": true,
   "name": "MMB VCA-BUS",
   "brand": "MMB",
   "modelNumber": "VCA-BUS",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1a1d22",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "VCA-BUS",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "bus compressor",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "threshold": {
      "x": 13.716,
      "y": 30
     },
     "makeup": {
      "x": 37.083999999999996,
      "y": 30
     },
     "ratio": {
      "x": 5.08,
      "y": 54
     },
     "attack": {
      "x": 20.32,
      "y": 60
     },
     "release": {
      "x": 35.559999999999995,
      "y": 59
     },
     "sc_hpf": {
      "x": 5.08,
      "y": 82
     },
     "mix": {
      "x": 24.383999999999997,
      "y": 84
     },
     "bypass": {
      "x": 39.624,
      "y": 84
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 6.095999999999999,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 14.224,
      "y": 106,
      "labelPos": "below"
     },
     "gr": {
      "x": 25.4,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 36.57599999999999,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_x9gpplo",
   "typeId": "tp_mmb_varimu_comp",
   "internal": true,
   "name": "MMB VARI-MU",
   "brand": "MMB",
   "modelNumber": "VARI-MU",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#201a14",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "VARI-MU",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "tube limiter",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "input": {
      "x": 10.16,
      "y": 30
     },
     "threshold": {
      "x": 25.4,
      "y": 30
     },
     "output": {
      "x": 40.64,
      "y": 30
     },
     "time": {
      "x": 6.095999999999999,
      "y": 62
     },
     "mode": {
      "x": 21.336,
      "y": 56
     },
     "color": {
      "x": 38.608,
      "y": 54
     },
     "mix": {
      "x": 38.608,
      "y": 74
     },
     "bypass": {
      "x": 21.336,
      "y": 78
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 6.095999999999999,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 14.224,
      "y": 106,
      "labelPos": "below"
     },
     "gr": {
      "x": 25.4,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 36.57599999999999,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cikccp5",
   "typeId": "tp_mmb_program_eq",
   "internal": true,
   "name": "MMB PROGRAM EQ",
   "brand": "MMB",
   "modelNumber": "PROGRAM EQ",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1c2230",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "PROGRAM EQ",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 14,
      "text": "passive program equalizer",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "low_freq": {
      "x": 4.267200000000001,
      "y": 30
     },
     "low_boost": {
      "x": 20.7264,
      "y": 30
     },
     "low_atten": {
      "x": 35.3568,
      "y": 30
     },
     "output": {
      "x": 51.2064,
      "y": 30
     },
     "high_freq": {
      "x": 4.267200000000001,
      "y": 60
     },
     "high_boost": {
      "x": 20.7264,
      "y": 58
     },
     "bandwidth": {
      "x": 35.3568,
      "y": 58
     },
     "color": {
      "x": 51.2064,
      "y": 58
     },
     "atten_freq": {
      "x": 4.267200000000001,
      "y": 86
     },
     "high_atten": {
      "x": 20.7264,
      "y": 86
     },
     "bypass": {
      "x": 40.2336,
      "y": 86
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 9.144,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 19.5072,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 41.4528,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 51.816,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_4vbbq36",
   "typeId": "tp_mmb_diode_comp",
   "internal": true,
   "name": "MMB DIODE",
   "brand": "MMB",
   "modelNumber": "DIODE",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#232a24",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "DIODE COMP",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "diode bridge compressor",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "threshold": {
      "x": 13.716,
      "y": 30
     },
     "makeup": {
      "x": 37.083999999999996,
      "y": 30
     },
     "ratio": {
      "x": 5.08,
      "y": 58
     },
     "attack": {
      "x": 20.32,
      "y": 54
     },
     "release": {
      "x": 33.528,
      "y": 60
     },
     "color": {
      "x": 20.32,
      "y": 76
     },
     "mix": {
      "x": 7.112,
      "y": 84
     },
     "bypass": {
      "x": 35.559999999999995,
      "y": 86
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 6.095999999999999,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 14.224,
      "y": 106,
      "labelPos": "below"
     },
     "gr": {
      "x": 25.4,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 36.57599999999999,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_eeypsxw",
   "typeId": "tp_mmb_console_eq",
   "internal": true,
   "name": "MMB CONSOLE EQ",
   "brand": "MMB",
   "modelNumber": "CONSOLE EQ",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#2a2320",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "CONSOLE EQ",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "class-A channel equalizer",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "hpf": {
      "x": 5.08,
      "y": 32
     },
     "high_gain": {
      "x": 22.86,
      "y": 30
     },
     "output": {
      "x": 40.64,
      "y": 30
     },
     "mid_freq": {
      "x": 5.08,
      "y": 62
     },
     "mid_gain": {
      "x": 22.86,
      "y": 58
     },
     "color": {
      "x": 40.64,
      "y": 58
     },
     "low_freq": {
      "x": 5.08,
      "y": 88
     },
     "low_gain": {
      "x": 22.86,
      "y": 86
     },
     "bypass": {
      "x": 39.624,
      "y": 88
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 7.619999999999999,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 16.256,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 34.544000000000004,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 43.18,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_cjjg888",
   "typeId": "tp_mmb_para_eq",
   "internal": true,
   "name": "MMB PARA EQ",
   "brand": "MMB",
   "modelNumber": "PARA EQ",
   "visual": {
    "hpWidth": 14,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1e232b",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "PARA EQ",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 14,
      "text": "4-band parametric equalizer",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 9.245600000000001,
      "y": 22,
      "text": "LF",
      "fontSize": 1.4,
      "color": "#f97316",
      "align": "middle"
     },
     {
      "x": 27.0256,
      "y": 22,
      "text": "LMF",
      "fontSize": 1.4,
      "color": "#f5a623",
      "align": "middle"
     },
     {
      "x": 44.805600000000005,
      "y": 22,
      "text": "HMF",
      "fontSize": 1.4,
      "color": "#f5a623",
      "align": "middle"
     },
     {
      "x": 62.58560000000001,
      "y": 22,
      "text": "HF",
      "fontSize": 1.4,
      "color": "#38bdf8",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "lf_freq": {
      "x": 9.245600000000001,
      "y": 32
     },
     "lf_gain": {
      "x": 9.245600000000001,
      "y": 50
     },
     "lf_shelf": {
      "x": 7.112000000000001,
      "y": 68
     },
     "lmf_freq": {
      "x": 27.0256,
      "y": 32
     },
     "lmf_gain": {
      "x": 27.0256,
      "y": 50
     },
     "lmf_q": {
      "x": 27.0256,
      "y": 68
     },
     "hmf_freq": {
      "x": 44.805600000000005,
      "y": 32
     },
     "hmf_gain": {
      "x": 44.805600000000005,
      "y": 50
     },
     "hmf_q": {
      "x": 44.805600000000005,
      "y": 68
     },
     "hf_freq": {
      "x": 62.58560000000001,
      "y": 32
     },
     "hf_gain": {
      "x": 62.58560000000001,
      "y": 50
     },
     "hf_shelf": {
      "x": 60.452000000000005,
      "y": 68
     },
     "hpf": {
      "x": 9.245600000000001,
      "y": 88
     },
     "lpf": {
      "x": 62.58560000000001,
      "y": 88
     },
     "prop_q": {
      "x": 24.892,
      "y": 90
     },
     "output": {
      "x": 44.805600000000005,
      "y": 88
     },
     "bypass": {
      "x": 35.56,
      "y": 108
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 7.112000000000001,
      "y": 108,
      "labelPos": "below"
     },
     "in_r": {
      "x": 17.0688,
      "y": 108,
      "labelPos": "below"
     },
     "out_l": {
      "x": 54.0512,
      "y": 108,
      "labelPos": "below"
     },
     "out_r": {
      "x": 64.00800000000001,
      "y": 108,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_q697ctt",
   "typeId": "tp_mmb_stereo_tape_echo",
   "internal": true,
   "name": "MMB TAPE-ST",
   "brand": "MMB",
   "modelNumber": "TAPE-ST",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1f1a14",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "STEREO TAPE",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 14,
      "text": "twee sporen · cross-feedback",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "time": {
      "x": 10.9728,
      "y": 30
     },
     "ratio": {
      "x": 30.48,
      "y": 30
     },
     "feedback": {
      "x": 49.987199999999994,
      "y": 30
     },
     "cross": {
      "x": 10.9728,
      "y": 58
     },
     "mix": {
      "x": 30.48,
      "y": 58
     },
     "tone": {
      "x": 49.987199999999994,
      "y": 58
     },
     "wow": {
      "x": 10.9728,
      "y": 82
     },
     "flutter": {
      "x": 30.48,
      "y": 82
     },
     "drive": {
      "x": 49.987199999999994,
      "y": 82
     }
    },
    "portPlacements": {
     "time_cv": {
      "x": 6.096,
      "y": 102,
      "labelPos": "below"
     },
     "fbk_cv": {
      "x": 18.288,
      "y": 102,
      "labelPos": "below"
     },
     "cross_cv": {
      "x": 30.48,
      "y": 102,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 42.672,
      "y": 102,
      "labelPos": "below"
     },
     "in_l": {
      "x": 7.3152,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 18.288,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 42.672,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 53.644800000000004,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_4s4leoi",
   "typeId": "tp_mmb_digital_echo",
   "internal": true,
   "name": "MMB DDL-12",
   "brand": "MMB",
   "modelNumber": "DDL-12",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#14181f",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "DIGITAL ECHO",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 14,
      "text": "12-bit · modulatie · stereo",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "time": {
      "x": 10.9728,
      "y": 30
     },
     "ratio": {
      "x": 30.48,
      "y": 30
     },
     "feedback": {
      "x": 49.987199999999994,
      "y": 30
     },
     "cross": {
      "x": 10.9728,
      "y": 58
     },
     "mod_rate": {
      "x": 30.48,
      "y": 58
     },
     "mod_depth": {
      "x": 49.987199999999994,
      "y": 58
     },
     "bits": {
      "x": 10.9728,
      "y": 82
     },
     "band": {
      "x": 30.48,
      "y": 82
     },
     "mix": {
      "x": 49.987199999999994,
      "y": 82
     }
    },
    "portPlacements": {
     "time_cv": {
      "x": 6.096,
      "y": 102,
      "labelPos": "below"
     },
     "fbk_cv": {
      "x": 18.288,
      "y": 102,
      "labelPos": "below"
     },
     "mod_cv": {
      "x": 30.48,
      "y": 102,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 42.672,
      "y": 102,
      "labelPos": "below"
     },
     "in_l": {
      "x": 7.3152,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 18.288,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 42.672,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 53.644800000000004,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_g9yvtyq",
   "typeId": "tp_mmb_bbd_chorus",
   "internal": true,
   "name": "MMB BBD",
   "brand": "MMB",
   "modelNumber": "BBD",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1a1f1a",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "BBD CHORUS",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "emmertjes · stereo",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "rate": {
      "x": 12.7,
      "y": 30
     },
     "depth": {
      "x": 38.099999999999994,
      "y": 30
     },
     "delay": {
      "x": 12.7,
      "y": 58
     },
     "feedback": {
      "x": 38.099999999999994,
      "y": 58
     },
     "mix": {
      "x": 10.16,
      "y": 82
     },
     "spread": {
      "x": 25.4,
      "y": 82
     },
     "age": {
      "x": 40.64,
      "y": 82
     },
     "tone": {
      "x": 25.4,
      "y": 58
     }
    },
    "portPlacements": {
     "rate_cv": {
      "x": 7.619999999999999,
      "y": 102,
      "labelPos": "below"
     },
     "depth_cv": {
      "x": 20.32,
      "y": 102,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 33.019999999999996,
      "y": 102,
      "labelPos": "below"
     },
     "in_l": {
      "x": 6.095999999999999,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 16.256,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 34.544000000000004,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_c6tntiw",
   "typeId": "tp_mmb_ringmod",
   "internal": true,
   "name": "MMB RING",
   "brand": "MMB",
   "modelNumber": "RING",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1f1420",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "RING MOD",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "clean · diode",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "freq": {
      "x": 20.32,
      "y": 32
     },
     "wave": {
      "x": 8.9408,
      "y": 62
     },
     "mode": {
      "x": 29.2608,
      "y": 62
     },
     "bias": {
      "x": 11.3792,
      "y": 86
     },
     "mix": {
      "x": 29.2608,
      "y": 86
     }
    },
    "portPlacements": {
     "voct": {
      "x": 8.128,
      "y": 104,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "carrier": {
      "x": 32.512,
      "y": 104,
      "labelPos": "below"
     },
     "in": {
      "x": 12.192,
      "y": 118,
      "labelPos": "below"
     },
     "out": {
      "x": 28.447999999999997,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_etmkt19",
   "typeId": "tp_mmb_octaver",
   "internal": true,
   "name": "MMB OCTAVE",
   "brand": "MMB",
   "modelNumber": "OCTAVE",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#14201a",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "OCTAVER",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "−1 · −2 · up",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "oct1": {
      "x": 11.3792,
      "y": 32
     },
     "oct2": {
      "x": 29.2608,
      "y": 32
     },
     "up": {
      "x": 11.3792,
      "y": 62
     },
     "dry": {
      "x": 29.2608,
      "y": 62
     },
     "tone": {
      "x": 20.32,
      "y": 86
     }
    },
    "portPlacements": {
     "oct1_cv": {
      "x": 8.128,
      "y": 104,
      "labelPos": "below"
     },
     "oct2_cv": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "up_cv": {
      "x": 32.512,
      "y": 104,
      "labelPos": "below"
     },
     "in": {
      "x": 12.192,
      "y": 118,
      "labelPos": "below"
     },
     "out": {
      "x": 28.447999999999997,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_zi0x9gs",
   "typeId": "tp_mmb_harmonizer",
   "internal": true,
   "name": "MMB HARMONY",
   "brand": "MMB",
   "modelNumber": "HARMONY",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1a1424",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "HARMONIZER",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 14,
      "text": "twee stemmen · shimmer",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 15.24,
      "y": 22,
      "text": "A",
      "fontSize": 1.2,
      "color": "#c084fc",
      "align": "middle"
     },
     {
      "x": 45.72,
      "y": 22,
      "text": "B",
      "fontSize": 1.2,
      "color": "#c084fc",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "semi_a": {
      "x": 8.534400000000002,
      "y": 34
     },
     "cent_a": {
      "x": 21.9456,
      "y": 34
     },
     "semi_b": {
      "x": 39.0144,
      "y": 34
     },
     "cent_b": {
      "x": 52.4256,
      "y": 34
     },
     "lvl_a": {
      "x": 8.534400000000002,
      "y": 60
     },
     "lvl_b": {
      "x": 52.4256,
      "y": 60
     },
     "window": {
      "x": 23.1648,
      "y": 62
     },
     "feedback": {
      "x": 37.7952,
      "y": 62
     },
     "spread": {
      "x": 8.534400000000002,
      "y": 86
     },
     "algo": {
      "x": 23.1648,
      "y": 86
     },
     "jitter": {
      "x": 37.7952,
      "y": 86
     },
     "mix": {
      "x": 52.4256,
      "y": 86
     }
    },
    "portPlacements": {
     "voct_a": {
      "x": 8.534400000000002,
      "y": 104,
      "labelPos": "below"
     },
     "voct_b": {
      "x": 24.384,
      "y": 104,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 40.2336,
      "y": 104,
      "labelPos": "below"
     },
     "in": {
      "x": 12.192,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 40.2336,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 52.4256,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_jglrsjs",
   "typeId": "tp_mmb_reverb",
   "internal": true,
   "name": "MMB PLATE·SPRING",
   "brand": "MMB",
   "modelNumber": "PLATE·SPRING",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#141c24",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "REVERB",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "plaat · veer",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "size": {
      "x": 14.224,
      "y": 32
     },
     "mode": {
      "x": 38.608,
      "y": 30
     },
     "damp": {
      "x": 11.176,
      "y": 62
     },
     "predelay": {
      "x": 25.4,
      "y": 62
     },
     "mod": {
      "x": 39.624,
      "y": 62
     },
     "mix": {
      "x": 25.4,
      "y": 86
     }
    },
    "portPlacements": {
     "size_cv": {
      "x": 12.7,
      "y": 104,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 38.099999999999994,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 6.095999999999999,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 16.256,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 34.544000000000004,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ux3azod",
   "typeId": "tp_mmb_tremolo",
   "internal": true,
   "name": "MMB TREM",
   "brand": "MMB",
   "modelNumber": "TREM",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1f1a10",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "TREMOLO",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "amp · opto · harm · pan",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "rate": {
      "x": 11.3792,
      "y": 32
     },
     "depth": {
      "x": 29.2608,
      "y": 32
     },
     "mode": {
      "x": 8.9408,
      "y": 60
     },
     "wave": {
      "x": 29.2608,
      "y": 60
     },
     "shape": {
      "x": 11.3792,
      "y": 88
     },
     "level": {
      "x": 29.2608,
      "y": 88
     }
    },
    "portPlacements": {
     "rate_cv": {
      "x": 10.16,
      "y": 104,
      "labelPos": "below"
     },
     "depth_cv": {
      "x": 30.48,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 4.8768,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 13.004800000000001,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 27.6352,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 35.7632,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_tlrd7ed",
   "typeId": "tp_mmb_stereo_phaser",
   "internal": true,
   "name": "MMB PHASE-ST",
   "brand": "MMB",
   "modelNumber": "PHASE-ST",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#10201c",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "STEREO PHASER",
      "fontSize": 1.8,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "2 × 6 stages",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "rate": {
      "x": 11.3792,
      "y": 32
     },
     "depth": {
      "x": 29.2608,
      "y": 32
     },
     "feedback": {
      "x": 11.3792,
      "y": 62
     },
     "spread": {
      "x": 29.2608,
      "y": 62
     },
     "mix": {
      "x": 20.32,
      "y": 88
     }
    },
    "portPlacements": {
     "rate_cv": {
      "x": 10.16,
      "y": 104,
      "labelPos": "below"
     },
     "depth_cv": {
      "x": 30.48,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 4.8768,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 13.004800000000001,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 27.6352,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 35.7632,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_88vdsh3",
   "typeId": "tp_mmb_vibe",
   "internal": true,
   "name": "MMB VIBE",
   "brand": "MMB",
   "modelNumber": "VIBE",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#241a12",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "VIBE",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 14,
      "text": "lamp · 4 × LDR",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "speed": {
      "x": 11.3792,
      "y": 32
     },
     "intensity": {
      "x": 29.2608,
      "y": 32
     },
     "mode": {
      "x": 9.7536,
      "y": 60
     },
     "lamp_age": {
      "x": 29.2608,
      "y": 62
     },
     "volume": {
      "x": 20.32,
      "y": 88
     }
    },
    "portPlacements": {
     "speed_cv": {
      "x": 10.16,
      "y": 104,
      "labelPos": "below"
     },
     "intensity_cv": {
      "x": 30.48,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 4.8768,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 13.004800000000001,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 27.6352,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 35.7632,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ycxaync",
   "typeId": "tp_mmb_rotary",
   "internal": true,
   "name": "MMB ROTARY",
   "brand": "MMB",
   "modelNumber": "ROTARY",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#2a1d14",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "ROTARY",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 14,
      "text": "hoorn · trommel · traagheid",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "speed": {
      "x": 9.7536,
      "y": 30
     },
     "slow_rate": {
      "x": 26.822400000000002,
      "y": 30
     },
     "fast_rate": {
      "x": 46.3296,
      "y": 30
     },
     "inertia": {
      "x": 9.7536,
      "y": 60
     },
     "drive": {
      "x": 24.384,
      "y": 60
     },
     "balance": {
      "x": 39.0144,
      "y": 60
     },
     "spread": {
      "x": 52.4256,
      "y": 60
     },
     "noise": {
      "x": 18.288,
      "y": 86
     },
     "level": {
      "x": 42.672,
      "y": 86
     }
    },
    "portPlacements": {
     "fast": {
      "x": 15.24,
      "y": 104,
      "labelPos": "below"
     },
     "drive_cv": {
      "x": 33.528000000000006,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 7.3152,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 18.288,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 42.672,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 53.644800000000004,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_uyu85cs",
   "typeId": "tp_mmb_shimmer",
   "internal": true,
   "name": "MMB SHIMMER",
   "brand": "MMB",
   "modelNumber": "SHIMMER",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#161a2a",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "SHIMMER",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "galm · octaaf in de lus",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "shimmer": {
      "x": 14.224,
      "y": 32
     },
     "interval": {
      "x": 39.624,
      "y": 30
     },
     "size": {
      "x": 10.16,
      "y": 62
     },
     "damp": {
      "x": 22.352,
      "y": 62
     },
     "tone": {
      "x": 34.544000000000004,
      "y": 62
     },
     "predelay": {
      "x": 10.16,
      "y": 86
     },
     "mod": {
      "x": 22.352,
      "y": 86
     },
     "mix": {
      "x": 36.57599999999999,
      "y": 86
     }
    },
    "portPlacements": {
     "shimmer_cv": {
      "x": 10.16,
      "y": 104,
      "labelPos": "below"
     },
     "size_cv": {
      "x": 25.4,
      "y": 104,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 40.64,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 6.095999999999999,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 16.256,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 34.544000000000004,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_o6493h9",
   "typeId": "tp_mmb_sid",
   "internal": true,
   "name": "MMB SID",
   "brand": "MMB",
   "modelNumber": "SID",
   "visual": {
    "hpWidth": 20,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#2a2440",
    "texts": [
     {
      "x": 50.8,
      "y": 8,
      "text": "SID",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 14,
      "text": "1–4 chips · 3–12 stemmen · 6581/8580 · C64",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 50.8,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 3,
      "y": 85,
      "text": "V/Oct · Gate — stemmen 1–6 (chip 1–2)",
      "fontSize": 0.9,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 105,
      "text": "stemmen 7–12 (chip 3–4)",
      "fontSize": 0.9,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 91.44,
      "y": 19,
      "text": "CHIPS · UIT",
      "fontSize": 1,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 71.12,
      "y": 19,
      "text": "FILTER",
      "fontSize": 1.1,
      "color": "#38bdf8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "tri": {
      "x": 8.534400000000002,
      "y": 26
     },
     "saw": {
      "x": 23.1648,
      "y": 26
     },
     "pulse": {
      "x": 37.7952,
      "y": 26
     },
     "noise": {
      "x": 52.4256,
      "y": 26
     },
     "pw": {
      "x": 9.7536,
      "y": 44
     },
     "combo": {
      "x": 26.822400000000002,
      "y": 44
     },
     "ring": {
      "x": 42.672,
      "y": 42
     },
     "sync": {
      "x": 54.864000000000004,
      "y": 42
     },
     "attack": {
      "x": 8.534400000000002,
      "y": 60
     },
     "decay": {
      "x": 23.1648,
      "y": 60
     },
     "sustain": {
      "x": 37.7952,
      "y": 60
     },
     "release": {
      "x": 52.4256,
      "y": 60
     },
     "coarse": {
      "x": 8.534400000000002,
      "y": 78
     },
     "fine": {
      "x": 23.1648,
      "y": 78
     },
     "volume": {
      "x": 37.7952,
      "y": 78
     },
     "level": {
      "x": 52.4256,
      "y": 78
     },
     "filt": {
      "x": 66.62,
      "y": 27
     },
     "model": {
      "x": 75.62,
      "y": 27
     },
     "cutoff": {
      "x": 71.12,
      "y": 44
     },
     "res": {
      "x": 66.62,
      "y": 60
     },
     "curve": {
      "x": 75.62,
      "y": 60
     },
     "lp": {
      "x": 64.92,
      "y": 76
     },
     "bp": {
      "x": 71.12,
      "y": 76
     },
     "hp": {
      "x": 77.32000000000001,
      "y": 76
     },
     "chips": {
      "x": 91.44,
      "y": 29
     },
     "spread": {
      "x": 91.44,
      "y": 46
     }
    },
    "portPlacements": {
     "voct_1": {
      "x": 7,
      "y": 90,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 16.6,
      "y": 90,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 26.2,
      "y": 90,
      "labelPos": "below"
     },
     "voct_4": {
      "x": 35.8,
      "y": 90,
      "labelPos": "below"
     },
     "voct_5": {
      "x": 45.4,
      "y": 90,
      "labelPos": "below"
     },
     "voct_6": {
      "x": 55,
      "y": 90,
      "labelPos": "below"
     },
     "voct_7": {
      "x": 7,
      "y": 110,
      "labelPos": "below"
     },
     "voct_8": {
      "x": 16.6,
      "y": 110,
      "labelPos": "below"
     },
     "voct_9": {
      "x": 26.2,
      "y": 110,
      "labelPos": "below"
     },
     "voct_10": {
      "x": 35.8,
      "y": 110,
      "labelPos": "below"
     },
     "voct_11": {
      "x": 45.4,
      "y": 110,
      "labelPos": "below"
     },
     "voct_12": {
      "x": 55,
      "y": 110,
      "labelPos": "below"
     },
     "gate_1": {
      "x": 7,
      "y": 99,
      "labelPos": "below"
     },
     "gate_2": {
      "x": 16.6,
      "y": 99,
      "labelPos": "below"
     },
     "gate_3": {
      "x": 26.2,
      "y": 99,
      "labelPos": "below"
     },
     "gate_4": {
      "x": 35.8,
      "y": 99,
      "labelPos": "below"
     },
     "gate_5": {
      "x": 45.4,
      "y": 99,
      "labelPos": "below"
     },
     "gate_6": {
      "x": 55,
      "y": 99,
      "labelPos": "below"
     },
     "gate_7": {
      "x": 7,
      "y": 119,
      "labelPos": "below"
     },
     "gate_8": {
      "x": 16.6,
      "y": 119,
      "labelPos": "below"
     },
     "gate_9": {
      "x": 26.2,
      "y": 119,
      "labelPos": "below"
     },
     "gate_10": {
      "x": 35.8,
      "y": 119,
      "labelPos": "below"
     },
     "gate_11": {
      "x": 45.4,
      "y": 119,
      "labelPos": "below"
     },
     "gate_12": {
      "x": 55,
      "y": 119,
      "labelPos": "below"
     },
     "cutoff_cv": {
      "x": 71.12,
      "y": 96,
      "labelPos": "below"
     },
     "ext_in": {
      "x": 66.12,
      "y": 108,
      "labelPos": "below"
     },
     "ext_2": {
      "x": 76.12,
      "y": 108,
      "labelPos": "below"
     },
     "ext_3": {
      "x": 66.12,
      "y": 120,
      "labelPos": "below"
     },
     "ext_4": {
      "x": 76.12,
      "y": 120,
      "labelPos": "below"
     },
     "sid_1": {
      "x": 86.44,
      "y": 62,
      "labelPos": "below"
     },
     "sid_2": {
      "x": 96.44,
      "y": 62,
      "labelPos": "below"
     },
     "sid_3": {
      "x": 86.44,
      "y": 74,
      "labelPos": "below"
     },
     "sid_4": {
      "x": 96.44,
      "y": 74,
      "labelPos": "below"
     },
     "bend": {
      "x": 86.44,
      "y": 90,
      "labelPos": "below"
     },
     "pw_cv": {
      "x": 96.44,
      "y": 90,
      "labelPos": "below"
     },
     "out_l": {
      "x": 86.44,
      "y": 104,
      "labelPos": "below"
     },
     "out_r": {
      "x": 96.44,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 91.44,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_4ur7tre",
   "typeId": "tp_mmb_sid3",
   "internal": true,
   "name": "MMB SID 3-OSC",
   "brand": "MMB",
   "modelNumber": "SID 3-OSC",
   "visual": {
    "hpWidth": 28,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#2a2440",
    "texts": [
     {
      "x": 71.12,
      "y": 8,
      "text": "SID 3-OSC",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 71.12,
      "y": 14,
      "text": "drie stemmen, elk eigen instellingen · Stack / Split · 6581/8580",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 71.12,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 4,
      "y": 25,
      "text": "1",
      "fontSize": 2,
      "color": "#c4b5fd",
      "align": "middle"
     },
     {
      "x": 4,
      "y": 45,
      "text": "2",
      "fontSize": 2,
      "color": "#c4b5fd",
      "align": "middle"
     },
     {
      "x": 4,
      "y": 65,
      "text": "3",
      "fontSize": 2,
      "color": "#c4b5fd",
      "align": "middle"
     },
     {
      "x": 105,
      "y": 79,
      "text": "FILTER",
      "fontSize": 1,
      "color": "#38bdf8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "tri_1": {
      "x": 12,
      "y": 24
     },
     "saw_1": {
      "x": 21,
      "y": 24
     },
     "pulse_1": {
      "x": 30,
      "y": 24
     },
     "noise_1": {
      "x": 39,
      "y": 24
     },
     "pw_1": {
      "x": 49,
      "y": 26
     },
     "ring_1": {
      "x": 59,
      "y": 24
     },
     "sync_1": {
      "x": 68,
      "y": 24
     },
     "attack_1": {
      "x": 78,
      "y": 26
     },
     "decay_1": {
      "x": 87,
      "y": 26
     },
     "sustain_1": {
      "x": 96,
      "y": 26
     },
     "release_1": {
      "x": 105,
      "y": 26
     },
     "coarse_1": {
      "x": 115,
      "y": 26
     },
     "fine_1": {
      "x": 124,
      "y": 26
     },
     "filt_1": {
      "x": 134,
      "y": 24
     },
     "tri_2": {
      "x": 12,
      "y": 44
     },
     "saw_2": {
      "x": 21,
      "y": 44
     },
     "pulse_2": {
      "x": 30,
      "y": 44
     },
     "noise_2": {
      "x": 39,
      "y": 44
     },
     "pw_2": {
      "x": 49,
      "y": 46
     },
     "ring_2": {
      "x": 59,
      "y": 44
     },
     "sync_2": {
      "x": 68,
      "y": 44
     },
     "attack_2": {
      "x": 78,
      "y": 46
     },
     "decay_2": {
      "x": 87,
      "y": 46
     },
     "sustain_2": {
      "x": 96,
      "y": 46
     },
     "release_2": {
      "x": 105,
      "y": 46
     },
     "coarse_2": {
      "x": 115,
      "y": 46
     },
     "fine_2": {
      "x": 124,
      "y": 46
     },
     "filt_2": {
      "x": 134,
      "y": 44
     },
     "tri_3": {
      "x": 12,
      "y": 64
     },
     "saw_3": {
      "x": 21,
      "y": 64
     },
     "pulse_3": {
      "x": 30,
      "y": 64
     },
     "noise_3": {
      "x": 39,
      "y": 64
     },
     "pw_3": {
      "x": 49,
      "y": 66
     },
     "ring_3": {
      "x": 59,
      "y": 64
     },
     "sync_3": {
      "x": 68,
      "y": 64
     },
     "attack_3": {
      "x": 78,
      "y": 66
     },
     "decay_3": {
      "x": 87,
      "y": 66
     },
     "sustain_3": {
      "x": 96,
      "y": 66
     },
     "release_3": {
      "x": 105,
      "y": 66
     },
     "coarse_3": {
      "x": 115,
      "y": 66
     },
     "fine_3": {
      "x": 124,
      "y": 66
     },
     "filt_3": {
      "x": 134,
      "y": 64
     },
     "stack": {
      "x": 12,
      "y": 86
     },
     "combo": {
      "x": 27,
      "y": 88
     },
     "volume": {
      "x": 43,
      "y": 88
     },
     "level": {
      "x": 53,
      "y": 88
     },
     "cutoff": {
      "x": 68,
      "y": 88
     },
     "res": {
      "x": 81,
      "y": 88
     },
     "lp": {
      "x": 91,
      "y": 86
     },
     "bp": {
      "x": 99,
      "y": 86
     },
     "hp": {
      "x": 107,
      "y": 86
     },
     "model": {
      "x": 118,
      "y": 86
     },
     "curve": {
      "x": 130,
      "y": 88
     }
    },
    "portPlacements": {
     "voct_1": {
      "x": 12,
      "y": 108,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 22,
      "y": 108,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 32,
      "y": 108,
      "labelPos": "below"
     },
     "gate_1": {
      "x": 44,
      "y": 108,
      "labelPos": "below"
     },
     "gate_2": {
      "x": 54,
      "y": 108,
      "labelPos": "below"
     },
     "gate_3": {
      "x": 64,
      "y": 108,
      "labelPos": "below"
     },
     "bend": {
      "x": 78,
      "y": 108,
      "labelPos": "below"
     },
     "pw_cv": {
      "x": 88,
      "y": 108,
      "labelPos": "below"
     },
     "cutoff_cv": {
      "x": 98,
      "y": 108,
      "labelPos": "below"
     },
     "ext_in": {
      "x": 110,
      "y": 108,
      "labelPos": "below"
     },
     "out": {
      "x": 130,
      "y": 108,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_si8sptq",
   "typeId": "tp_mmb_audioin",
   "internal": true,
   "name": "MMB AUDIO IN",
   "brand": "MMB",
   "modelNumber": "AUDIO IN",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "IN",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 13,
      "text": "mic · usb",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "level": {
      "x": 10.16,
      "y": 30
     },
     "mono": {
      "x": 10.16,
      "y": 62
     }
    },
    "portPlacements": {
     "out_l": {
      "x": 6.096,
      "y": 100,
      "labelPos": "below"
     },
     "out_r": {
      "x": 14.223999999999998,
      "y": 100,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_q707w8t",
   "typeId": "tp_mmb_zang",
   "internal": true,
   "name": "MMB ZANG",
   "brand": "MMB",
   "modelNumber": "ZANG",
   "visual": {
    "hpWidth": 14,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#2a1a2e",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "ZANG",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 12,
      "text": "woorden · 8 stemmen · PSOLA",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 3,
      "y": 97,
      "text": "V/Oct",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 109,
      "text": "Gate",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 121,
      "text": "Vel",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     }
    ],
    "controlPlacements": {
     "bank": {
      "x": 8.5344,
      "y": 28
     },
     "syl": {
      "x": 22.7584,
      "y": 28
     },
     "sylDisp": {
      "x": 35.56,
      "y": 28
     },
     "mode": {
      "x": 48.36160000000001,
      "y": 28
     },
     "level": {
      "x": 62.58560000000001,
      "y": 28
     },
     "speed": {
      "x": 8.5344,
      "y": 52
     },
     "formant": {
      "x": 19.913600000000002,
      "y": 52
     },
     "attack": {
      "x": 31.292800000000003,
      "y": 52
     },
     "release": {
      "x": 41.2496,
      "y": 52
     },
     "coarse": {
      "x": 51.2064,
      "y": 52
     },
     "fine": {
      "x": 61.1632,
      "y": 52
     }
    },
    "portPlacements": {
     "syl_cv": {
      "x": 5.6896,
      "y": 74,
      "labelPos": "below"
     },
     "next": {
      "x": 15.646400000000002,
      "y": 74,
      "labelPos": "below"
     },
     "reset": {
      "x": 25.6032,
      "y": 74,
      "labelPos": "below"
     },
     "formant_cv": {
      "x": 35.56,
      "y": 74,
      "labelPos": "below"
     },
     "bend": {
      "x": 45.5168,
      "y": 74,
      "labelPos": "below"
     },
     "syl_out": {
      "x": 55.473600000000005,
      "y": 74,
      "labelPos": "below"
     },
     "out_l": {
      "x": 61.1632,
      "y": 84,
      "labelPos": "below"
     },
     "out_r": {
      "x": 66.8528,
      "y": 84,
      "labelPos": "below"
     },
     "voct_1": {
      "x": 4.445,
      "y": 96,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 13.335,
      "y": 96,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 22.225,
      "y": 96,
      "labelPos": "below"
     },
     "voct_4": {
      "x": 31.115000000000002,
      "y": 96,
      "labelPos": "below"
     },
     "voct_5": {
      "x": 40.005,
      "y": 96,
      "labelPos": "below"
     },
     "voct_6": {
      "x": 48.895,
      "y": 96,
      "labelPos": "below"
     },
     "voct_7": {
      "x": 57.785000000000004,
      "y": 96,
      "labelPos": "below"
     },
     "voct_8": {
      "x": 66.67500000000001,
      "y": 96,
      "labelPos": "below"
     },
     "gate_1": {
      "x": 4.445,
      "y": 108,
      "labelPos": "below"
     },
     "gate_2": {
      "x": 13.335,
      "y": 108,
      "labelPos": "below"
     },
     "gate_3": {
      "x": 22.225,
      "y": 108,
      "labelPos": "below"
     },
     "gate_4": {
      "x": 31.115000000000002,
      "y": 108,
      "labelPos": "below"
     },
     "gate_5": {
      "x": 40.005,
      "y": 108,
      "labelPos": "below"
     },
     "gate_6": {
      "x": 48.895,
      "y": 108,
      "labelPos": "below"
     },
     "gate_7": {
      "x": 57.785000000000004,
      "y": 108,
      "labelPos": "below"
     },
     "gate_8": {
      "x": 66.67500000000001,
      "y": 108,
      "labelPos": "below"
     },
     "vel_1": {
      "x": 4.445,
      "y": 120,
      "labelPos": "below"
     },
     "vel_2": {
      "x": 13.335,
      "y": 120,
      "labelPos": "below"
     },
     "vel_3": {
      "x": 22.225,
      "y": 120,
      "labelPos": "below"
     },
     "vel_4": {
      "x": 31.115000000000002,
      "y": 120,
      "labelPos": "below"
     },
     "vel_5": {
      "x": 40.005,
      "y": 120,
      "labelPos": "below"
     },
     "vel_6": {
      "x": 48.895,
      "y": 120,
      "labelPos": "below"
     },
     "vel_7": {
      "x": 57.785000000000004,
      "y": 120,
      "labelPos": "below"
     },
     "vel_8": {
      "x": 66.67500000000001,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_5zfsvxq",
   "typeId": "tp_mmb_fof",
   "internal": true,
   "name": "MMB FOF-VOICE",
   "brand": "MMB",
   "modelNumber": "FOF-VOICE",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "FOF-VOICE",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 14,
      "text": "A · E · I · O · U",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "vowel": {
      "x": 20.32,
      "y": 28
     },
     "tone": {
      "x": 60.96,
      "y": 28
     },
     "breath": {
      "x": 16.256,
      "y": 52
     },
     "vibrato": {
      "x": 40.64,
      "y": 52
     },
     "voice": {
      "x": 65.024,
      "y": 52
     },
     "syl": {
      "x": 13.004800000000001,
      "y": 72
     },
     "sylDisp": {
      "x": 40.64,
      "y": 72
     },
     "level": {
      "x": 68.2752,
      "y": 72
     },
     "syl_amt": {
      "x": 6.502400000000001,
      "y": 104
     },
     "vowel_amt": {
      "x": 17.8816,
      "y": 104
     },
     "breath_amt": {
      "x": 29.2608,
      "y": 104
     },
     "vibrato_amt": {
      "x": 40.64,
      "y": 104
     },
     "voice_amt": {
      "x": 52.019200000000005,
      "y": 104
     },
     "vel_amt": {
      "x": 63.3984,
      "y": 104
     },
     "press_amt": {
      "x": 74.7776,
      "y": 104
     }
    },
    "portPlacements": {
     "voct": {
      "x": 9.7536,
      "y": 88,
      "labelPos": "below"
     },
     "gate": {
      "x": 24.384,
      "y": 88,
      "labelPos": "below"
     },
     "next": {
      "x": 40.64,
      "y": 88,
      "labelPos": "below"
     },
     "reset": {
      "x": 55.2704,
      "y": 88,
      "labelPos": "below"
     },
     "out": {
      "x": 71.5264,
      "y": 88,
      "labelPos": "below"
     },
     "syl_cv": {
      "x": 6.502400000000001,
      "y": 120,
      "labelPos": "below"
     },
     "vowel": {
      "x": 17.8816,
      "y": 120,
      "labelPos": "below"
     },
     "breath": {
      "x": 29.2608,
      "y": 120,
      "labelPos": "below"
     },
     "vibrato": {
      "x": 40.64,
      "y": 120,
      "labelPos": "below"
     },
     "voice": {
      "x": 52.019200000000005,
      "y": 120,
      "labelPos": "below"
     },
     "vel": {
      "x": 63.3984,
      "y": 120,
      "labelPos": "below"
     },
     "pressure": {
      "x": 74.7776,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_o187fk5",
   "typeId": "tp_mmb_material_bridge",
   "internal": true,
   "name": "MMB MATERIAL BRIDGE",
   "brand": "MMB",
   "modelNumber": "MATERIAL BRIDGE",
   "visual": {
    "hpWidth": 14,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#163c39",
    "texts": [
     {
      "x": 35.56,
      "y": 8,
      "text": "MATERIAL BRIDGE",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 35.56,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "pitch": {
      "x": 12.8016,
      "y": 27
     },
     "spread": {
      "x": 35.56,
      "y": 27
     },
     "coupling": {
      "x": 58.3184,
      "y": 27
     },
     "decay": {
      "x": 9.956800000000001,
      "y": 53
     },
     "memory": {
      "x": 27.0256,
      "y": 53
     },
     "fatigue": {
      "x": 44.0944,
      "y": 53
     },
     "recovery": {
      "x": 61.1632,
      "y": 53
     },
     "pickup": {
      "x": 25.6032,
      "y": 78
     },
     "level": {
      "x": 45.5168,
      "y": 78
     }
    },
    "portPlacements": {
     "coupling_cv": {
      "x": 8.5344,
      "y": 78,
      "labelPos": "below"
     },
     "pickup_cv": {
      "x": 62.58560000000001,
      "y": 78,
      "labelPos": "below"
     },
     "in": {
      "x": 7.112000000000001,
      "y": 100,
      "labelPos": "below"
     },
     "voct": {
      "x": 21.336000000000002,
      "y": 100,
      "labelPos": "below"
     },
     "gate": {
      "x": 35.56,
      "y": 100,
      "labelPos": "below"
     },
     "gate_b": {
      "x": 49.784,
      "y": 100,
      "labelPos": "below"
     },
     "vel": {
      "x": 64.00800000000001,
      "y": 100,
      "labelPos": "below"
     },
     "reset": {
      "x": 12.8016,
      "y": 117,
      "labelPos": "below"
     },
     "stress": {
      "x": 28.448000000000004,
      "y": 117,
      "labelPos": "below"
     },
     "out_l": {
      "x": 45.5168,
      "y": 117,
      "labelPos": "below"
     },
     "out_r": {
      "x": 59.7408,
      "y": 117,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_lpva8gc",
   "typeId": "tp_mmb_scanned",
   "internal": true,
   "name": "MMB SCANNED",
   "brand": "MMB",
   "modelNumber": "SCANNED",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#2a1f3d",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "SCANNED",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 13,
      "text": "massa-veerring als golftabel",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "pitch": {
      "x": 10.9728,
      "y": 29
     },
     "tension": {
      "x": 30.48,
      "y": 29
     },
     "damping": {
      "x": 49.987199999999994,
      "y": 29
     },
     "restore": {
      "x": 10.9728,
      "y": 55
     },
     "speed": {
      "x": 30.48,
      "y": 55
     },
     "width": {
      "x": 49.987199999999994,
      "y": 55
     },
     "position": {
      "x": 10.9728,
      "y": 79
     },
     "level": {
      "x": 52.4256,
      "y": 79
     }
    },
    "portPlacements": {
     "pos_cv": {
      "x": 25.6032,
      "y": 79,
      "labelPos": "below"
     },
     "press": {
      "x": 39.0144,
      "y": 79,
      "labelPos": "below"
     },
     "in": {
      "x": 7.3152,
      "y": 100,
      "labelPos": "below"
     },
     "voct": {
      "x": 18.8976,
      "y": 100,
      "labelPos": "below"
     },
     "gate": {
      "x": 30.48,
      "y": 100,
      "labelPos": "below"
     },
     "vel": {
      "x": 42.0624,
      "y": 100,
      "labelPos": "below"
     },
     "reset": {
      "x": 53.644800000000004,
      "y": 100,
      "labelPos": "below"
     },
     "energy": {
      "x": 18.288,
      "y": 117,
      "labelPos": "below"
     },
     "out": {
      "x": 42.672,
      "y": 117,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_e3wn2pm",
   "typeId": "tp_mmb_reservoir",
   "internal": true,
   "name": "MMB RESERVOIR",
   "brand": "MMB",
   "modelNumber": "RESERVOIR",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1f2a3d",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "RESERVOIR",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "gedeelde herstellende bron",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drain": {
      "x": 11.3792,
      "y": 29
     },
     "recover": {
      "x": 29.2608,
      "y": 29
     },
     "floor": {
      "x": 8.128,
      "y": 55
     },
     "curve": {
      "x": 20.32,
      "y": 55
     },
     "thresh": {
      "x": 32.512,
      "y": 55
     }
    },
    "portPlacements": {
     "in_a": {
      "x": 5.6896,
      "y": 76,
      "labelPos": "below"
     },
     "in_b": {
      "x": 15.443200000000001,
      "y": 76,
      "labelPos": "below"
     },
     "in_c": {
      "x": 25.1968,
      "y": 76,
      "labelPos": "below"
     },
     "in_d": {
      "x": 34.9504,
      "y": 76,
      "labelPos": "below"
     },
     "out_a": {
      "x": 5.6896,
      "y": 92,
      "labelPos": "below"
     },
     "out_b": {
      "x": 15.443200000000001,
      "y": 92,
      "labelPos": "below"
     },
     "out_c": {
      "x": 25.1968,
      "y": 92,
      "labelPos": "below"
     },
     "out_d": {
      "x": 34.9504,
      "y": 92,
      "labelPos": "below"
     },
     "refill": {
      "x": 10.16,
      "y": 108,
      "labelPos": "below"
     },
     "reset": {
      "x": 30.48,
      "y": 108,
      "labelPos": "below"
     },
     "level": {
      "x": 7.3152,
      "y": 120,
      "labelPos": "below"
     },
     "starve": {
      "x": 20.32,
      "y": 120,
      "labelPos": "below"
     },
     "empty": {
      "x": 33.324799999999996,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_3s17mr8",
   "typeId": "tp_mmb_gendyn",
   "internal": true,
   "name": "MMB GENDYN",
   "brand": "MMB",
   "modelNumber": "GENDYN",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3d1f1f",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "GENDYN",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "dynamische stochastische synthese",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "pitch": {
      "x": 11.176,
      "y": 29
     },
     "points": {
      "x": 39.624,
      "y": 29
     },
     "amp_step": {
      "x": 11.176,
      "y": 55
     },
     "dur_step": {
      "x": 39.624,
      "y": 55
     },
     "dist": {
      "x": 8.128,
      "y": 79
     },
     "smooth": {
      "x": 19.812,
      "y": 79
     },
     "settle": {
      "x": 30.987999999999996,
      "y": 79
     },
     "seed": {
      "x": 42.672,
      "y": 79
     },
     "level": {
      "x": 25.4,
      "y": 100
     }
    },
    "portPlacements": {
     "voct": {
      "x": 7.112,
      "y": 100,
      "labelPos": "below"
     },
     "gate": {
      "x": 16.256,
      "y": 100,
      "labelPos": "below"
     },
     "chaos_cv": {
      "x": 34.544000000000004,
      "y": 100,
      "labelPos": "below"
     },
     "reset": {
      "x": 43.687999999999995,
      "y": 100,
      "labelPos": "below"
     },
     "cycle": {
      "x": 15.239999999999998,
      "y": 117,
      "labelPos": "below"
     },
     "out": {
      "x": 35.559999999999995,
      "y": 117,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_45uzedf",
   "typeId": "tp_mmb_excitable",
   "internal": true,
   "name": "MMB EXCITABLE",
   "brand": "MMB",
   "modelNumber": "EXCITABLE",
   "visual": {
    "hpWidth": 12,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#1f3d2a",
    "texts": [
     {
      "x": 30.48,
      "y": 8,
      "text": "EXCITABLE",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 13,
      "text": "prikkelbaar celraster, 2 pacemakers",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 30.48,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "pitch": {
      "x": 10.9728,
      "y": 29
     },
     "detune": {
      "x": 30.48,
      "y": 29
     },
     "refract": {
      "x": 49.987199999999994,
      "y": 29
     },
     "excite": {
      "x": 10.9728,
      "y": 55
     },
     "thresh": {
      "x": 30.48,
      "y": 55
     },
     "pickup": {
      "x": 49.987199999999994,
      "y": 55
     },
     "speed": {
      "x": 18.288,
      "y": 79
     },
     "level": {
      "x": 45.72,
      "y": 79
     }
    },
    "portPlacements": {
     "voct": {
      "x": 7.3152,
      "y": 100,
      "labelPos": "below"
     },
     "gate": {
      "x": 18.8976,
      "y": 100,
      "labelPos": "below"
     },
     "voct_b": {
      "x": 30.48,
      "y": 100,
      "labelPos": "below"
     },
     "gate_b": {
      "x": 42.0624,
      "y": 100,
      "labelPos": "below"
     },
     "reset": {
      "x": 53.644800000000004,
      "y": 100,
      "labelPos": "below"
     },
     "activity": {
      "x": 13.411200000000001,
      "y": 117,
      "labelPos": "below"
     },
     "out_l": {
      "x": 35.3568,
      "y": 117,
      "labelPos": "below"
     },
     "out_r": {
      "x": 49.987199999999994,
      "y": 117,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_yln4yng",
   "typeId": "tp_mmb_tapestrip",
   "internal": true,
   "name": "MMB TAPE STRIP",
   "brand": "MMB",
   "modelNumber": "TAPE STRIP",
   "visual": {
    "hpWidth": 16,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3b2a1a",
    "texts": [
     {
      "x": 40.64,
      "y": 8,
      "text": "TAPE STRIP",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 14,
      "text": "bank van de sampler · 8 bandjes",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 40.64,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 3,
      "y": 97,
      "text": "V/Oct",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 109,
      "text": "Gate",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     },
     {
      "x": 3,
      "y": 121,
      "text": "Vel",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "start"
     }
    ],
    "controlPlacements": {
     "bank": {
      "x": 8.128,
      "y": 30
     },
     "length": {
      "x": 21.945600000000002,
      "y": 30
     },
     "return": {
      "x": 35.7632,
      "y": 30
     },
     "contact": {
      "x": 49.580799999999996,
      "y": 30
     },
     "level": {
      "x": 65.024,
      "y": 30
     },
     "motor": {
      "x": 8.128,
      "y": 56
     },
     "wow": {
      "x": 21.1328,
      "y": 56
     },
     "flutter": {
      "x": 34.1376,
      "y": 56
     },
     "wear": {
      "x": 47.142399999999995,
      "y": 56
     }
    },
    "portPlacements": {
     "press": {
      "x": 60.1472,
      "y": 56,
      "labelPos": "below"
     },
     "bend": {
      "x": 71.5264,
      "y": 56,
      "labelPos": "below"
     },
     "tape": {
      "x": 8.128,
      "y": 76,
      "labelPos": "below"
     },
     "load": {
      "x": 21.1328,
      "y": 76,
      "labelPos": "below"
     },
     "out_l": {
      "x": 60.1472,
      "y": 76,
      "labelPos": "below"
     },
     "out_r": {
      "x": 71.5264,
      "y": 76,
      "labelPos": "below"
     },
     "voct_1": {
      "x": 5.08,
      "y": 96,
      "labelPos": "below"
     },
     "voct_2": {
      "x": 15.24,
      "y": 96,
      "labelPos": "below"
     },
     "voct_3": {
      "x": 25.4,
      "y": 96,
      "labelPos": "below"
     },
     "voct_4": {
      "x": 35.56,
      "y": 96,
      "labelPos": "below"
     },
     "voct_5": {
      "x": 45.72,
      "y": 96,
      "labelPos": "below"
     },
     "voct_6": {
      "x": 55.88,
      "y": 96,
      "labelPos": "below"
     },
     "voct_7": {
      "x": 66.04,
      "y": 96,
      "labelPos": "below"
     },
     "voct_8": {
      "x": 76.2,
      "y": 96,
      "labelPos": "below"
     },
     "gate_1": {
      "x": 5.08,
      "y": 108,
      "labelPos": "below"
     },
     "gate_2": {
      "x": 15.24,
      "y": 108,
      "labelPos": "below"
     },
     "gate_3": {
      "x": 25.4,
      "y": 108,
      "labelPos": "below"
     },
     "gate_4": {
      "x": 35.56,
      "y": 108,
      "labelPos": "below"
     },
     "gate_5": {
      "x": 45.72,
      "y": 108,
      "labelPos": "below"
     },
     "gate_6": {
      "x": 55.88,
      "y": 108,
      "labelPos": "below"
     },
     "gate_7": {
      "x": 66.04,
      "y": 108,
      "labelPos": "below"
     },
     "gate_8": {
      "x": 76.2,
      "y": 108,
      "labelPos": "below"
     },
     "vel_1": {
      "x": 5.08,
      "y": 120,
      "labelPos": "below"
     },
     "vel_2": {
      "x": 15.24,
      "y": 120,
      "labelPos": "below"
     },
     "vel_3": {
      "x": 25.4,
      "y": 120,
      "labelPos": "below"
     },
     "vel_4": {
      "x": 35.56,
      "y": 120,
      "labelPos": "below"
     },
     "vel_5": {
      "x": 45.72,
      "y": 120,
      "labelPos": "below"
     },
     "vel_6": {
      "x": 55.88,
      "y": 120,
      "labelPos": "below"
     },
     "vel_7": {
      "x": 66.04,
      "y": 120,
      "labelPos": "below"
     },
     "vel_8": {
      "x": 76.2,
      "y": 120,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_9n76by9",
   "typeId": "tp_mmb_grids",
   "internal": false,
   "name": "MMB GRIDS",
   "brand": "MMB",
   "modelNumber": "GRIDS",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "GRIDS",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 13,
      "text": "drum-kaart · X/Y",
      "fontSize": 1.1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "x": {
      "x": 14.224,
      "y": 30
     },
     "y": {
      "x": 36.57599999999999,
      "y": 30
     },
     "bd": {
      "x": 9.143999999999998,
      "y": 60
     },
     "sd": {
      "x": 21.336,
      "y": 60
     },
     "hh": {
      "x": 33.528,
      "y": 60
     },
     "chaos": {
      "x": 44.704,
      "y": 60
     },
     "tempo": {
      "x": 15.239999999999998,
      "y": 84
     },
     "extclock": {
      "x": 38.099999999999994,
      "y": 84
     }
    },
    "portPlacements": {
     "clock": {
      "x": 7.112,
      "y": 102,
      "labelPos": "below"
     },
     "reset": {
      "x": 19.304,
      "y": 102,
      "labelPos": "below"
     },
     "x_cv": {
      "x": 31.496,
      "y": 102,
      "labelPos": "below"
     },
     "y_cv": {
      "x": 43.687999999999995,
      "y": 102,
      "labelPos": "below"
     },
     "bd": {
      "x": 7.112,
      "y": 118,
      "labelPos": "below"
     },
     "sd": {
      "x": 19.304,
      "y": 118,
      "labelPos": "below"
     },
     "hh": {
      "x": 31.496,
      "y": 118,
      "labelPos": "below"
     },
     "acc": {
      "x": 43.687999999999995,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_dol93qg",
   "typeId": "tp_mmb_cr78",
   "internal": false,
   "name": "MMB CR-78",
   "brand": "MMB",
   "modelNumber": "CR-78",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3b2413",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "CR-78",
      "fontSize": 2.4,
      "color": "#fbe8c8",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "CompuRhythm · berekend",
      "fontSize": 1,
      "color": "#c8a878",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#fbe8c8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drum": {
      "x": 20.32,
      "y": 26
     },
     "tone": {
      "x": 11.3792,
      "y": 54
     },
     "decay": {
      "x": 29.2608,
      "y": 54
     },
     "bend": {
      "x": 11.3792,
      "y": 80
     },
     "level": {
      "x": 29.2608,
      "y": 80
     }
    },
    "portPlacements": {
     "gate": {
      "x": 6.502400000000001,
      "y": 104,
      "labelPos": "below"
     },
     "voct": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "accent_cv": {
      "x": 34.1376,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_rdgl6tz",
   "typeId": "tp_mmb_cr78",
   "internal": false,
   "name": "MMB CR-78",
   "brand": "MMB",
   "modelNumber": "CR-78",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3b2413",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "CR-78",
      "fontSize": 2.4,
      "color": "#fbe8c8",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "CompuRhythm · berekend",
      "fontSize": 1,
      "color": "#c8a878",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#fbe8c8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drum": {
      "x": 20.32,
      "y": 26
     },
     "tone": {
      "x": 11.3792,
      "y": 54
     },
     "decay": {
      "x": 29.2608,
      "y": 54
     },
     "bend": {
      "x": 11.3792,
      "y": 80
     },
     "level": {
      "x": 29.2608,
      "y": 80
     }
    },
    "portPlacements": {
     "gate": {
      "x": 6.502400000000001,
      "y": 104,
      "labelPos": "below"
     },
     "voct": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "accent_cv": {
      "x": 34.1376,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_63h4zsq",
   "typeId": "tp_mmb_cr78",
   "internal": false,
   "name": "MMB CR-78",
   "brand": "MMB",
   "modelNumber": "CR-78",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3b2413",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "CR-78",
      "fontSize": 2.4,
      "color": "#fbe8c8",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "CompuRhythm · berekend",
      "fontSize": 1,
      "color": "#c8a878",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#fbe8c8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drum": {
      "x": 20.32,
      "y": 26
     },
     "tone": {
      "x": 11.3792,
      "y": 54
     },
     "decay": {
      "x": 29.2608,
      "y": 54
     },
     "bend": {
      "x": 11.3792,
      "y": 80
     },
     "level": {
      "x": 29.2608,
      "y": 80
     }
    },
    "portPlacements": {
     "gate": {
      "x": 6.502400000000001,
      "y": 104,
      "labelPos": "below"
     },
     "voct": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "accent_cv": {
      "x": 34.1376,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_2nip1so",
   "typeId": "tp_mmb_cr78",
   "internal": false,
   "name": "MMB CR-78",
   "brand": "MMB",
   "modelNumber": "CR-78",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#3b2413",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "CR-78",
      "fontSize": 2.4,
      "color": "#fbe8c8",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 13,
      "text": "CompuRhythm · berekend",
      "fontSize": 1,
      "color": "#c8a878",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#fbe8c8",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "drum": {
      "x": 20.32,
      "y": 26
     },
     "tone": {
      "x": 11.3792,
      "y": 54
     },
     "decay": {
      "x": 29.2608,
      "y": 54
     },
     "bend": {
      "x": 11.3792,
      "y": 80
     },
     "level": {
      "x": 29.2608,
      "y": 80
     }
    },
    "portPlacements": {
     "gate": {
      "x": 6.502400000000001,
      "y": 104,
      "labelPos": "below"
     },
     "voct": {
      "x": 20.32,
      "y": 104,
      "labelPos": "below"
     },
     "accent_cv": {
      "x": 34.1376,
      "y": 104,
      "labelPos": "below"
     },
     "out": {
      "x": 20.32,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_w6qf1y7",
   "typeId": "tp_mmb_mixer",
   "internal": false,
   "name": "MMB MIXER",
   "brand": "MMB",
   "modelNumber": "MIXER",
   "visual": {
    "hpWidth": 8,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 20.32,
      "y": 8,
      "text": "MIXER",
      "fontSize": 2.2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 20.32,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "vol1": {
      "x": 18.288,
      "y": 26
     },
     "pan1": {
      "x": 31.6992,
      "y": 26
     },
     "vol2": {
      "x": 18.288,
      "y": 48
     },
     "pan2": {
      "x": 31.6992,
      "y": 48
     },
     "vol3": {
      "x": 18.288,
      "y": 70
     },
     "pan3": {
      "x": 31.6992,
      "y": 70
     },
     "vol4": {
      "x": 18.288,
      "y": 92
     },
     "pan4": {
      "x": 31.6992,
      "y": 92
     }
    },
    "portPlacements": {
     "in1": {
      "x": 4.8768,
      "y": 26,
      "labelPos": "below"
     },
     "in2": {
      "x": 4.8768,
      "y": 48,
      "labelPos": "below"
     },
     "in3": {
      "x": 4.8768,
      "y": 70,
      "labelPos": "below"
     },
     "in4": {
      "x": 4.8768,
      "y": 92,
      "labelPos": "below"
     },
     "out_l": {
      "x": 15.443200000000001,
      "y": 116,
      "labelPos": "below"
     },
     "out_r": {
      "x": 25.1968,
      "y": 116,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_s5u68go",
   "typeId": "tp_mmb_out",
   "internal": false,
   "name": "MMB OUT",
   "brand": "MMB",
   "modelNumber": "OUT",
   "visual": {
    "hpWidth": 4,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#111827",
    "texts": [
     {
      "x": 10.16,
      "y": 8,
      "text": "OUT",
      "fontSize": 2.4,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 10.16,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "level": {
      "x": 10.16,
      "y": 30
     }
    },
    "portPlacements": {
     "l": {
      "x": 6.096,
      "y": 92,
      "labelPos": "below"
     },
     "r": {
      "x": 14.223999999999998,
      "y": 92,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_vckhe6s",
   "typeId": "tp_mmb_diode_comp",
   "internal": false,
   "name": "MMB DIODE",
   "brand": "MMB",
   "modelNumber": "DIODE",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#232a24",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "DIODE COMP",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "diode bridge compressor",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "threshold": {
      "x": 13.716,
      "y": 30
     },
     "makeup": {
      "x": 37.083999999999996,
      "y": 30
     },
     "ratio": {
      "x": 5.08,
      "y": 58
     },
     "attack": {
      "x": 20.32,
      "y": 54
     },
     "release": {
      "x": 33.528,
      "y": 60
     },
     "color": {
      "x": 20.32,
      "y": 76
     },
     "mix": {
      "x": 7.112,
      "y": 84
     },
     "bypass": {
      "x": 35.559999999999995,
      "y": 86
     }
    },
    "portPlacements": {
     "in_l": {
      "x": 6.095999999999999,
      "y": 106,
      "labelPos": "below"
     },
     "in_r": {
      "x": 14.224,
      "y": 106,
      "labelPos": "below"
     },
     "gr": {
      "x": 25.4,
      "y": 106,
      "labelPos": "below"
     },
     "out_l": {
      "x": 36.57599999999999,
      "y": 106,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 106,
      "labelPos": "below"
     }
    }
   }
  },
  {
   "id": "mod_ubsofts",
   "typeId": "tp_mmb_reverb",
   "internal": false,
   "name": "MMB PLATE·SPRING",
   "brand": "MMB",
   "modelNumber": "PLATE·SPRING",
   "visual": {
    "hpWidth": 10,
    "heightMm": 128.5,
    "texture": "pcb-black",
    "baseColor": "#141c24",
    "texts": [
     {
      "x": 25.4,
      "y": 8,
      "text": "REVERB",
      "fontSize": 2,
      "color": "#f9fafb",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 14,
      "text": "plaat · veer",
      "fontSize": 1,
      "color": "#9ca3af",
      "align": "middle"
     },
     {
      "x": 25.4,
      "y": 126,
      "text": "MMB",
      "fontSize": 1.6,
      "color": "#f9fafb",
      "align": "middle"
     }
    ],
    "controlPlacements": {
     "size": {
      "x": 14.224,
      "y": 32
     },
     "mode": {
      "x": 38.608,
      "y": 30
     },
     "damp": {
      "x": 11.176,
      "y": 62
     },
     "predelay": {
      "x": 25.4,
      "y": 62
     },
     "mod": {
      "x": 39.624,
      "y": 62
     },
     "mix": {
      "x": 25.4,
      "y": 86
     }
    },
    "portPlacements": {
     "size_cv": {
      "x": 12.7,
      "y": 104,
      "labelPos": "below"
     },
     "mix_cv": {
      "x": 38.099999999999994,
      "y": 104,
      "labelPos": "below"
     },
     "in_l": {
      "x": 6.095999999999999,
      "y": 118,
      "labelPos": "below"
     },
     "in_r": {
      "x": 16.256,
      "y": 118,
      "labelPos": "below"
     },
     "out_l": {
      "x": 34.544000000000004,
      "y": 118,
      "labelPos": "below"
     },
     "out_r": {
      "x": 44.704,
      "y": 118,
      "labelPos": "below"
     }
    }
   }
  }
 ],
 "racks": [
  {
   "id": "rack_gf760rq",
   "name": "CR-78-groove (Grids, zelfspelend) rack",
   "description": "Showcase CR-78 en Grids: de Roland CompuRhythm van In the Air Tonight, Heart of Glass en Vienna, berekend in plaats van gesampeld. Grids klokt kick, snare, hi-hat en maracas; zijn accent-uitgang gaat naar de accent-ingang van kick en snare (luider én een hardere pitch-buiging, zoals het echte circuit). Zelfspelend op 96 bpm. Loop met X en Y over de drumkaart, of draai BD/SD/HH voor drukker en kaler. Diode-compressor en een korte plaat op de bus.",
   "rows": 1,
   "hpPerRow": 76,
   "slots": [
    {
     "id": "slot_hzz4b9d",
     "moduleId": "mod_9n76by9",
     "row": 0,
     "hpOffset": 0
    },
    {
     "id": "slot_72f0q2a",
     "moduleId": "mod_dol93qg",
     "row": 0,
     "hpOffset": 10
    },
    {
     "id": "slot_26v0vgu",
     "moduleId": "mod_rdgl6tz",
     "row": 0,
     "hpOffset": 18
    },
    {
     "id": "slot_nb0jpbt",
     "moduleId": "mod_63h4zsq",
     "row": 0,
     "hpOffset": 26
    },
    {
     "id": "slot_gmj31f9",
     "moduleId": "mod_2nip1so",
     "row": 0,
     "hpOffset": 34
    },
    {
     "id": "slot_acnjw27",
     "moduleId": "mod_w6qf1y7",
     "row": 0,
     "hpOffset": 42
    },
    {
     "id": "slot_iai6yit",
     "moduleId": "mod_s5u68go",
     "row": 0,
     "hpOffset": 50
    },
    {
     "id": "slot_opfr1jv",
     "moduleId": "mod_vckhe6s",
     "row": 0,
     "hpOffset": 54
    },
    {
     "id": "slot_x20rkle",
     "moduleId": "mod_ubsofts",
     "row": 0,
     "hpOffset": 64
    }
   ],
   "kind": "physical",
   "polyGroups": []
  }
 ],
 "patches": [
  {
   "id": "patch_kfvhf3y",
   "name": "CR-78-groove (Grids, zelfspelend)",
   "description": "Showcase CR-78 en Grids: de Roland CompuRhythm van In the Air Tonight, Heart of Glass en Vienna, berekend in plaats van gesampeld. Grids klokt kick, snare, hi-hat en maracas; zijn accent-uitgang gaat naar de accent-ingang van kick en snare (luider én een hardere pitch-buiging, zoals het echte circuit). Zelfspelend op 96 bpm. Loop met X en Y over de drumkaart, of draai BD/SD/HH voor drukker en kaler. Diode-compressor en een korte plaat op de bus.",
   "folder": "Drums",
   "voiceCount": 1,
   "rackIds": [
    "rack_gf760rq"
   ],
   "connections": [
    {
     "id": "conn_wid7km6",
     "from": {
      "moduleId": "mod_9n76by9",
      "portId": "bd"
     },
     "to": {
      "moduleId": "mod_dol93qg",
      "portId": "gate"
     }
    },
    {
     "id": "conn_hsr46xr",
     "from": {
      "moduleId": "mod_9n76by9",
      "portId": "sd"
     },
     "to": {
      "moduleId": "mod_rdgl6tz",
      "portId": "gate"
     }
    },
    {
     "id": "conn_78702f1",
     "from": {
      "moduleId": "mod_9n76by9",
      "portId": "hh"
     },
     "to": {
      "moduleId": "mod_63h4zsq",
      "portId": "gate"
     }
    },
    {
     "id": "conn_j5r5dyj",
     "from": {
      "moduleId": "mod_9n76by9",
      "portId": "hh"
     },
     "to": {
      "moduleId": "mod_2nip1so",
      "portId": "gate"
     }
    },
    {
     "id": "conn_9q0b7sg",
     "from": {
      "moduleId": "mod_9n76by9",
      "portId": "acc"
     },
     "to": {
      "moduleId": "mod_dol93qg",
      "portId": "accent_cv"
     }
    },
    {
     "id": "conn_6n7l1d3",
     "from": {
      "moduleId": "mod_9n76by9",
      "portId": "acc"
     },
     "to": {
      "moduleId": "mod_rdgl6tz",
      "portId": "accent_cv"
     }
    },
    {
     "id": "conn_g4x1kae",
     "from": {
      "moduleId": "mod_dol93qg",
      "portId": "out"
     },
     "to": {
      "moduleId": "mod_w6qf1y7",
      "portId": "in1"
     }
    },
    {
     "id": "conn_uburi3q",
     "from": {
      "moduleId": "mod_rdgl6tz",
      "portId": "out"
     },
     "to": {
      "moduleId": "mod_w6qf1y7",
      "portId": "in2"
     }
    },
    {
     "id": "conn_f4t2x7g",
     "from": {
      "moduleId": "mod_63h4zsq",
      "portId": "out"
     },
     "to": {
      "moduleId": "mod_w6qf1y7",
      "portId": "in3"
     }
    },
    {
     "id": "conn_433zd0t",
     "from": {
      "moduleId": "mod_2nip1so",
      "portId": "out"
     },
     "to": {
      "moduleId": "mod_w6qf1y7",
      "portId": "in4"
     }
    },
    {
     "id": "conn_i2dn9kn",
     "from": {
      "moduleId": "mod_w6qf1y7",
      "portId": "out_l"
     },
     "to": {
      "moduleId": "mod_vckhe6s",
      "portId": "in_l"
     }
    },
    {
     "id": "conn_hw0l8ng",
     "from": {
      "moduleId": "mod_w6qf1y7",
      "portId": "out_r"
     },
     "to": {
      "moduleId": "mod_vckhe6s",
      "portId": "in_r"
     }
    },
    {
     "id": "conn_ft0pt95",
     "from": {
      "moduleId": "mod_vckhe6s",
      "portId": "out_l"
     },
     "to": {
      "moduleId": "mod_ubsofts",
      "portId": "in_l"
     }
    },
    {
     "id": "conn_hgfrdwd",
     "from": {
      "moduleId": "mod_vckhe6s",
      "portId": "out_r"
     },
     "to": {
      "moduleId": "mod_ubsofts",
      "portId": "in_r"
     }
    },
    {
     "id": "conn_5x8vjdw",
     "from": {
      "moduleId": "mod_ubsofts",
      "portId": "out_l"
     },
     "to": {
      "moduleId": "mod_s5u68go",
      "portId": "l"
     }
    },
    {
     "id": "conn_p3elb7t",
     "from": {
      "moduleId": "mod_ubsofts",
      "portId": "out_r"
     },
     "to": {
      "moduleId": "mod_s5u68go",
      "portId": "r"
     }
    }
   ],
   "controlState": {
    "mod_9n76by9": {
     "x": 0.3,
     "y": 0.35,
     "bd": 0.7,
     "sd": 0.55,
     "hh": 0.75,
     "chaos": 0.05,
     "tempo": 96,
     "extclock": false
    },
    "mod_dol93qg": {
     "drum": 0,
     "tone": 0.4,
     "decay": 0.55,
     "bend": 0.5,
     "level": 0.9
    },
    "mod_rdgl6tz": {
     "drum": 1,
     "tone": 0.55,
     "decay": 0.45,
     "bend": 0.5,
     "level": 0.8
    },
    "mod_63h4zsq": {
     "drum": 5,
     "tone": 0.6,
     "decay": 0.3,
     "bend": 0.5,
     "level": 0.6
    },
    "mod_2nip1so": {
     "drum": 7,
     "tone": 0.5,
     "decay": 0.3,
     "bend": 0.5,
     "level": 0.5
    },
    "mod_w6qf1y7": {
     "vol1": 0.9,
     "pan1": 0,
     "vol2": 0.75,
     "pan2": -0.15,
     "vol3": 0.5,
     "pan3": 0.3,
     "vol4": 0.4,
     "pan4": -0.4
    },
    "mod_s5u68go": {
     "level": 0.8
    },
    "mod_vckhe6s": {
     "threshold": -18,
     "makeup": 4,
     "ratio": 2,
     "attack": 1,
     "release": 4,
     "color": 1.2,
     "mix": 1,
     "bypass": 0
    },
    "mod_ubsofts": {
     "size": 0.4,
     "mode": 0,
     "damp": 0.55,
     "predelay": 10,
     "mod": 0.2,
     "mix": 0.15
    }
   },
   "envelopes": [],
   "lfos": []
  }
 ],
 "activeRackId": "rack_gf760rq",
 "activePatchId": "patch_kfvhf3y",
 "compareSet": []
}