{
 "id": "teenage-engineering-op-1-field",
 "short": "op1field",
 "name": "OP-1 field",
 "maker": "teenage engineering",
 "kind": "device",
 "channel": 1,
 "match": {
  "ports": [
   "\\bop-?1\\b"
  ],
  "prefer": [],
  "avoid": []
 },
 "sources": [
  {
   "title": "OP-1 field user guide, fw 1.7 (teenage engineering)",
   "url": "https://assets.teenage.engineering/_img/69f248938d433104c4dd1846_original.pdf",
   "note": "CTRL mode (shift + COM → T2) turns the unit into a controller; control MIDI channel settable 1–16; encoders send relative or absolute (unit setting); MIDI over USB and Bluetooth LE; the field's encoders are blue, ochre, gray and orange"
  },
  {
   "title": "Support for Teenage Engineering OP-1 — Zynthian forum (non-official)",
   "url": "https://discourse.zynthian.org/t/support-for-teenage-engineering-op-1/12201",
   "note": "community report for the original OP-1: encoders = CC 1–4 (blue, green, white, orange on the original — blue, ochre, gray, orange on the field — in the MIDI log's column order), relative 1 = right, 127 = left; encoder push = CC 64–67, 127 press / 0 release. On the tested OP-1 field the encoders matched (CC 1–4); its pushes send CC 66–69 instead"
  }
 ],
 "notes": "Before anything is sent: COM → T1 sys → midi, set NOTES and OTHER to OUT (both were OFF on the unit this was tested on, and CTRL mode sent nothing until they were set). Then CTRL mode: shift + COM → T2. Tested over USB on an OP-1 field. Its MIDI port is named just \"OP-1\" (macOS, USB 2367:8102), so the port match cannot tell it from the original OP-1. Control channel 1 (settable 1–16 on the CTRL page; use the element's channel attribute if yours differs). Every control was pressed once on the tested unit: encoders CC 1–4 (absolute as tested; the CTRL page can switch them to relative), encoder pushes CC 66–69, T1–T4 CC 11–14, help 5, metronome 6, synth/drum/tape/mixer 7–10, lift/drop/scissors 15–17, keys 1–3 CC 50–52, keys 4–8 CC 21–25, sequencer 26, record/play/stop 38–40, input 48, COM 49, ← → 41–42 (with OCTAVE off) — all 127 press / 0 release. Hold shift on the CTRL page for its settings: MIDI CH, KNOBS (abs/rel) and OCTAVE. With OCTAVE on, the ← → arrows shift the keyboard an octave and send nothing; turn it off to use them as CC 41/42. Shift and the volume knob send nothing (both tested): they are drawn, not mapped. On screen, tap a knob's centre to press it and drag its ring to turn it. The faceplate follows the top view in TE's user guide. No LED feedback.",
 "face": {
  "w": 100,
  "h": 36,
  "body": "#161719",
  "deco": [
   {
    "type": "buttons",
    "x": 1.54,
    "y": 1.88,
    "w": 10.55,
    "h": 10.55,
    "items": [
     ""
    ]
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 2.23,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 3.12,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 4.02,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 4.92,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 5.81,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 6.71,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 7.6,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 8.5,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 2.12,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 11.07,
    "y": 9.39,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.01,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 10.18,
    "y": 10.29,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 3.91,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 4.81,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 5.7,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 6.6,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 7.49,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 8.38,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "label",
    "x": 9.28,
    "y": 11.18,
    "w": 0.7,
    "h": 0.9,
    "text": "·"
   },
   {
    "type": "buttons",
    "x": 12.44,
    "y": 1.88,
    "w": 5.1,
    "h": 5.1,
    "items": [
     "vol"
    ]
   },
   {
    "type": "buttons",
    "x": 17.89,
    "y": 1.88,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "screen",
    "x": 23.16,
    "y": 1.7,
    "w": 21.8,
    "h": 10.9,
    "text": "OP-1 field"
   },
   {
    "type": "label",
    "x": 93.2,
    "y": 24.6,
    "w": 7.8,
    "h": 2.8,
    "rotate": -90,
    "size": 1.7,
    "text": "OP–1"
   },
   {
    "type": "buttons",
    "x": 95.6,
    "y": 30.75,
    "w": 3.2,
    "h": 1.4,
    "outline": true,
    "items": [
     "field"
    ]
   },
   {
    "type": "buttons",
    "x": 12.44,
    "y": 7.33,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 17.89,
    "y": 7.33,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 88.73,
    "y": 1.88,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 88.73,
    "y": 7.33,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 1.54,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 6.99,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 12.44,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 17.89,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 23.34,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 28.79,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 34.23,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 39.68,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 45.13,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 50.59,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 56.03,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 61.48,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 66.94,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 72.39,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 77.83,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 83.28,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 88.73,
    "y": 12.78,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 1.54,
    "y": 18.23,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 6.99,
    "y": 18.23,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 12.44,
    "y": 18.23,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 1.54,
    "y": 23.68,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 6.99,
    "y": 23.68,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 12.44,
    "y": 23.68,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 1.54,
    "y": 29.13,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 6.99,
    "y": 29.13,
    "w": 5.1,
    "h": 5.1,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 12.44,
    "y": 29.13,
    "w": 5.1,
    "h": 5.1,
    "items": [
     "shift"
    ]
   },
   {
    "type": "buttons",
    "x": 45.13,
    "y": 1.88,
    "w": 10.55,
    "h": 10.55,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 56.03,
    "y": 1.88,
    "w": 10.55,
    "h": 10.55,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 66.94,
    "y": 1.88,
    "w": 10.55,
    "h": 10.55,
    "items": [
     ""
    ]
   },
   {
    "type": "buttons",
    "x": 77.83,
    "y": 1.88,
    "w": 10.55,
    "h": 10.55,
    "items": [
     ""
    ]
   }
  ]
 },
 "sections": [
  {
   "id": "enc1",
   "label": "",
   "x": 47.21,
   "y": 3.95,
   "w": 6.4,
   "h": 6.4,
   "cols": 1,
   "rows": 1,
   "controls": [
    "enc1"
   ]
  },
  {
   "id": "enc2",
   "label": "",
   "x": 58.11,
   "y": 3.95,
   "w": 6.4,
   "h": 6.4,
   "cols": 1,
   "rows": 1,
   "controls": [
    "enc2"
   ]
  },
  {
   "id": "enc3",
   "label": "",
   "x": 69.01,
   "y": 3.95,
   "w": 6.4,
   "h": 6.4,
   "cols": 1,
   "rows": 1,
   "controls": [
    "enc3"
   ]
  },
  {
   "id": "enc4",
   "label": "",
   "x": 79.91,
   "y": 3.95,
   "w": 6.4,
   "h": 6.4,
   "cols": 1,
   "rows": 1,
   "controls": [
    "enc4"
   ]
  },
  {
   "id": "push1",
   "label": "",
   "x": 48.56,
   "y": 5.2,
   "w": 3.7,
   "h": 3.7,
   "cols": 1,
   "rows": 1,
   "controls": [
    "push1"
   ]
  },
  {
   "id": "push2",
   "label": "",
   "x": 59.46,
   "y": 5.2,
   "w": 3.7,
   "h": 3.7,
   "cols": 1,
   "rows": 1,
   "controls": [
    "push2"
   ]
  },
  {
   "id": "push3",
   "label": "",
   "x": 70.36,
   "y": 5.2,
   "w": 3.7,
   "h": 3.7,
   "cols": 1,
   "rows": 1,
   "controls": [
    "push3"
   ]
  },
  {
   "id": "push4",
   "label": "",
   "x": 81.26,
   "y": 5.2,
   "w": 3.7,
   "h": 3.7,
   "cols": 1,
   "rows": 1,
   "controls": [
    "push4"
   ]
  },
  {
   "id": "help",
   "label": "",
   "x": 13.26,
   "y": 8.15,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "help"
   ]
  },
  {
   "id": "metronome",
   "label": "",
   "x": 18.71,
   "y": 8.15,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "metronome"
   ]
  },
  {
   "id": "input",
   "label": "",
   "x": 89.56,
   "y": 2.7,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "input"
   ]
  },
  {
   "id": "com",
   "label": "",
   "x": 89.56,
   "y": 8.15,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "com"
   ]
  },
  {
   "id": "synth",
   "label": "",
   "x": 2.36,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "synth"
   ]
  },
  {
   "id": "drum",
   "label": "",
   "x": 7.81,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "drum"
   ]
  },
  {
   "id": "tape",
   "label": "",
   "x": 13.26,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "tape"
   ]
  },
  {
   "id": "mixer",
   "label": "",
   "x": 18.71,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "mixer"
   ]
  },
  {
   "id": "t1",
   "label": "",
   "x": 24.16,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "t1"
   ]
  },
  {
   "id": "t2",
   "label": "",
   "x": 29.61,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "t2"
   ]
  },
  {
   "id": "t3",
   "label": "",
   "x": 35.06,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "t3"
   ]
  },
  {
   "id": "t4",
   "label": "",
   "x": 40.51,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "t4"
   ]
  },
  {
   "id": "k1",
   "label": "",
   "x": 45.96,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k1"
   ]
  },
  {
   "id": "k2",
   "label": "",
   "x": 51.41,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k2"
   ]
  },
  {
   "id": "k3",
   "label": "",
   "x": 56.86,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k3"
   ]
  },
  {
   "id": "k4",
   "label": "",
   "x": 62.31,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k4"
   ]
  },
  {
   "id": "k5",
   "label": "",
   "x": 67.76,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k5"
   ]
  },
  {
   "id": "k6",
   "label": "",
   "x": 73.21,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k6"
   ]
  },
  {
   "id": "k7",
   "label": "",
   "x": 78.66,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k7"
   ]
  },
  {
   "id": "k8",
   "label": "",
   "x": 84.11,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "k8"
   ]
  },
  {
   "id": "seq",
   "label": "",
   "x": 89.56,
   "y": 13.6,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "seq"
   ]
  },
  {
   "id": "lift",
   "label": "",
   "x": 2.36,
   "y": 19.05,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "lift"
   ]
  },
  {
   "id": "drop",
   "label": "",
   "x": 7.81,
   "y": 19.05,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "drop"
   ]
  },
  {
   "id": "split",
   "label": "",
   "x": 13.26,
   "y": 19.05,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "split"
   ]
  },
  {
   "id": "rec",
   "label": "",
   "x": 2.36,
   "y": 24.5,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "rec"
   ]
  },
  {
   "id": "play",
   "label": "",
   "x": 7.81,
   "y": 24.5,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "play"
   ]
  },
  {
   "id": "stop",
   "label": "",
   "x": 13.26,
   "y": 24.5,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "stop"
   ]
  },
  {
   "id": "left",
   "label": "",
   "x": 2.36,
   "y": 29.95,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "left"
   ]
  },
  {
   "id": "right",
   "label": "",
   "x": 7.81,
   "y": 29.95,
   "w": 3.45,
   "h": 3.45,
   "cols": 1,
   "rows": 1,
   "controls": [
    "right"
   ]
  },
  {
   "id": "keys",
   "label": "",
   "x": 17.71,
   "y": 18.05,
   "w": 76.3,
   "h": 16.35,
   "cols": 1,
   "rows": 1,
   "controls": [
    "keys"
   ]
  }
 ],
 "portrait": [
  {
   "id": "encoders",
   "cols": 4,
   "rows": 1,
   "weight": 1.6,
   "controls": [
    "enc1",
    "enc2",
    "enc3",
    "enc4"
   ]
  },
  {
   "id": "pushes",
   "cols": 4,
   "rows": 1,
   "weight": 0.8,
   "controls": [
    "push1",
    "push2",
    "push3",
    "push4"
   ]
  },
  {
   "id": "tracks",
   "cols": 4,
   "rows": 2,
   "weight": 1.4,
   "controls": [
    "synth",
    "drum",
    "tape",
    "mixer",
    "t1",
    "t2",
    "t3",
    "t4"
   ]
  },
  {
   "id": "numbers",
   "cols": 4,
   "rows": 2,
   "weight": 1.4,
   "controls": [
    "k1",
    "k2",
    "k3",
    "k4",
    "k5",
    "k6",
    "k7",
    "k8"
   ]
  },
  {
   "id": "transport",
   "cols": 4,
   "rows": 2,
   "weight": 1.4,
   "controls": [
    "rec",
    "play",
    "stop",
    "split",
    "lift",
    "drop",
    "left",
    "right"
   ]
  },
  {
   "id": "system",
   "cols": 5,
   "rows": 1,
   "weight": 0.8,
   "controls": [
    "help",
    "metronome",
    "seq",
    "input",
    "com"
   ]
  },
  {
   "id": "keys",
   "cols": 1,
   "rows": 1,
   "weight": 4,
   "controls": [
    "keys"
   ]
  }
 ],
 "controls": [
  {
   "id": "enc1",
   "type": "encoder",
   "label": "",
   "msg": "cc",
   "cc": 1,
   "relative": false,
   "group": "encoder",
   "tint": "#c9ccd3",
   "cap": "#141518",
   "note": "CC 1, tested on hardware: absolute 0–127 (the unit's CTRL page has encoders set to absolute). Set to relative, the original OP-1 is reported to send 1 per step right and 127 per step left: change relative to \"twos\"."
  },
  {
   "id": "enc2",
   "type": "encoder",
   "label": "",
   "msg": "cc",
   "cc": 2,
   "relative": false,
   "group": "encoder",
   "tint": "#d4a03a",
   "cap": "#b08d5e",
   "note": "CC 2, tested on hardware: absolute 0–127 (the unit's CTRL page has encoders set to absolute). Set to relative, the original OP-1 is reported to send 1 per step right and 127 per step left: change relative to \"twos\"."
  },
  {
   "id": "enc3",
   "type": "encoder",
   "label": "",
   "msg": "cc",
   "cc": 3,
   "relative": false,
   "group": "encoder",
   "tint": "#b4b8c0",
   "cap": "#8f9196",
   "note": "CC 3, tested on hardware: absolute 0–127 (the unit's CTRL page has encoders set to absolute). Set to relative, the original OP-1 is reported to send 1 per step right and 127 per step left: change relative to \"twos\"."
  },
  {
   "id": "enc4",
   "type": "encoder",
   "label": "",
   "msg": "cc",
   "cc": 4,
   "relative": false,
   "group": "encoder",
   "tint": "#ff7a1a",
   "cap": "#ee5a2c",
   "note": "CC 4, tested on hardware: absolute 0–127 (the unit's CTRL page has encoders set to absolute). Set to relative, the original OP-1 is reported to send 1 per step right and 127 per step left: change relative to \"twos\"."
  },
  {
   "id": "push1",
   "type": "button",
   "label": "",
   "msg": "cc",
   "cc": 66,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "tint": "#c9ccd3",
   "cap": "#141518",
   "note": "Pressing the blue encoder, tested on hardware: CC 66, 127 while held, 0 on release. On release the unit also sends a one-off CC 59 127/0 pulse, not modelled."
  },
  {
   "id": "push2",
   "type": "button",
   "label": "",
   "msg": "cc",
   "cc": 67,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "tint": "#d4a03a",
   "cap": "#b08d5e",
   "note": "Pressing the ochre encoder, tested on hardware: CC 67, 127 while held, 0 on release. On release the unit also sends a one-off CC 60 127/0 pulse, not modelled."
  },
  {
   "id": "push3",
   "type": "button",
   "label": "",
   "msg": "cc",
   "cc": 68,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "tint": "#b4b8c0",
   "cap": "#8f9196",
   "note": "Pressing the gray encoder, tested on hardware: CC 68, 127 while held, 0 on release. On release the unit also sends a one-off CC 61 127/0 pulse, not modelled."
  },
  {
   "id": "push4",
   "type": "button",
   "label": "",
   "msg": "cc",
   "cc": 69,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "tint": "#ff7a1a",
   "cap": "#ee5a2c",
   "note": "Pressing the orange encoder, tested on hardware: CC 69, 127 while held, 0 on release. On release the unit also sends a one-off CC 62 127/0 pulse, not modelled."
  },
  {
   "id": "help",
   "type": "button",
   "label": "?",
   "msg": "cc",
   "cc": 5,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "metronome",
   "type": "button",
   "label": "♩",
   "msg": "cc",
   "cc": 6,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "input",
   "type": "button",
   "label": "↗",
   "msg": "cc",
   "cc": 48,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ee5a2c",
   "ink": "#ee5a2c"
  },
  {
   "id": "com",
   "type": "button",
   "label": "com",
   "msg": "cc",
   "cc": 49,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "synth",
   "type": "button",
   "label": "∿∿",
   "msg": "cc",
   "cc": 7,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "drum",
   "type": "button",
   "label": "◉",
   "msg": "cc",
   "cc": 8,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "tape",
   "type": "button",
   "label": "ꝏ",
   "msg": "cc",
   "cc": 9,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "mixer",
   "type": "button",
   "label": "ılı",
   "msg": "cc",
   "cc": 10,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "t1",
   "type": "button",
   "label": "1",
   "msg": "cc",
   "cc": 11,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "t2",
   "type": "button",
   "label": "2",
   "msg": "cc",
   "cc": 12,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "t3",
   "type": "button",
   "label": "3",
   "msg": "cc",
   "cc": 13,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "t4",
   "type": "button",
   "label": "4",
   "msg": "cc",
   "cc": 14,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k1",
   "type": "button",
   "label": "1 in",
   "msg": "cc",
   "cc": 50,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k2",
   "type": "button",
   "label": "2 out",
   "msg": "cc",
   "cc": 51,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k3",
   "type": "button",
   "label": "3 ↺",
   "msg": "cc",
   "cc": 52,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k4",
   "type": "button",
   "label": "4 ꝏ",
   "msg": "cc",
   "cc": 21,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k5",
   "type": "button",
   "label": "5 я",
   "msg": "cc",
   "cc": 22,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k6",
   "type": "button",
   "label": "6 ⋯",
   "msg": "cc",
   "cc": 23,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k7",
   "type": "button",
   "label": "7 m1",
   "msg": "cc",
   "cc": 24,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "k8",
   "type": "button",
   "label": "8 m2",
   "msg": "cc",
   "cc": 25,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "seq",
   "type": "button",
   "label": "⋰",
   "msg": "cc",
   "cc": 26,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "lift",
   "type": "button",
   "label": "⤒",
   "msg": "cc",
   "cc": 15,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "drop",
   "type": "button",
   "label": "⤓",
   "msg": "cc",
   "cc": 16,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "split",
   "type": "button",
   "label": "✂",
   "msg": "cc",
   "cc": 17,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "rec",
   "type": "button",
   "label": "●",
   "msg": "cc",
   "cc": 38,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ee5a2c",
   "ink": "#ee5a2c"
  },
  {
   "id": "play",
   "type": "button",
   "label": "▶",
   "msg": "cc",
   "cc": 39,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "stop",
   "type": "button",
   "label": "■",
   "msg": "cc",
   "cc": 40,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "left",
   "type": "button",
   "label": "←",
   "msg": "cc",
   "cc": 41,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "right",
   "type": "button",
   "label": "→",
   "msg": "cc",
   "cc": 42,
   "mode": "momentary",
   "shape": "round",
   "group": "button",
   "cap": "#3a3d46",
   "tint": "#ff8a3d"
  },
  {
   "id": "keys",
   "type": "keys",
   "label": "Keys",
   "msg": "note",
   "from": 53,
   "to": 76,
   "group": "note",
   "note": "Tested on hardware: the 24 keys run F3 (53) to E5 (76) at the default octave, velocity was 127 on every press in the test. Keys follow any note on the channel, so octave shifts just scroll the on-screen keys."
  }
 ]
}
