{
 "firmware": "Felucca",
 "slug": "felucca",
 "author": "Leo Kuroshita (@kurogedelic), Hügelton Instruments",
 "repo": "https://github.com/hugelton/Felucca",
 "licence": "GPL-3.0-only (bundled fonts, icons, DSP and SDK parts under their own licences, see LICENSES/)",
 "closed_source": false,
 "mapped_release": "v1.6.1",
 "mapped_commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
 "release_date": "2026-10-14",
 "date_mapped": "2026-10-16",
 "turns_it_into": "A four-track multi-engine synth: 13 engines (FM6, analog, phase, lo-fi, sample, slice, drums and more), 8 shared voices, a 64-step sequencer with locks, conditions and ratchets, songs, and USB audio.",
 "docs": [
  {
   "title": "Wiki: Controls",
   "url": "https://github.com/hugelton/Felucca/wiki/Controls/953dae931dbd17e2bce43518221786c853ad198e",
   "words": 321,
   "read_at": "2026-10-16, supplied wiki snapshot 953dae931dbd17e2bce43518221786c853ad198e"
  },
  {
   "title": "Wiki: Features",
   "url": "https://github.com/hugelton/Felucca/wiki/Features/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
   "words": 1636,
   "read_at": "2026-10-16, supplied wiki snapshot 92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
  },
  {
   "title": "Wiki: Menu",
   "url": "https://github.com/hugelton/Felucca/wiki/Menu/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
   "words": 1348,
   "read_at": "2026-10-16, supplied wiki snapshot 92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
  },
  {
   "title": "Wiki: Release notes",
   "url": "https://github.com/hugelton/Felucca/wiki/Release-Notes/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
   "words": 4453,
   "read_at": "2026-10-16, supplied wiki snapshot 92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
  },
  {
   "title": "Wiki: Scale keyboard",
   "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e",
   "words": 241,
   "read_at": "2026-10-16, supplied wiki snapshot 953dae931dbd17e2bce43518221786c853ad198e"
  },
  {
   "title": "Controls picture docs/controls.jpg (GPL-3.0-only; looked at, not reused)",
   "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/docs/controls.jpg",
   "words": null,
   "read_at": "2026-10-16, v1.6.1"
  },
  {
   "title": "README: Felucca v1.6.1 (including release changes)",
   "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/README.md",
   "words": 566,
   "read_at": "2026-10-16, v1.6.1"
  }
 ],
 "install": {
  "hub": "https://thefirmwarehub.com/",
  "official": "https://github.com/hugelton/Felucca/releases/tag/v1.6.1",
  "official_installer": "https://hugelton.github.io/Felucca/",
  "try_in_browser": "https://hugelton.github.io/Felucca/webapp/try/",
  "editor": "https://hugelton.github.io/Felucca/webapp/editor/"
 },
 "part_id_notes": "The button printed SEL (between FX and ENV) is called SCL everywhere in Felucca's code, screens and docs; it is button_sel here. ALGORITHM selects the track and PRESETS the sound, whatever their printed names. Felucca learns which matrix button carries which label by HARDWARE CALIBRATION, with a default table that is a best guess except PLAY and REC, which the code marks as measured on hardware. Reconciled to the drawing's part ids (output/tutorials/_panels/m-vave-fm1, branch fm1/panel 4027d71) on 2026-10-13 by the lead session: the drawing has no separate button lamps, so what a button's light shows moved from led_<button> to lights.button_<button> (led_play_stop_green to lights.button_play_stop with light='green'); led_key_<note> became lights.led_<note>; led_keys_all became lights.key_lights, with groups.key_lights listing the 27 key-light parts; jack_usb_c became jack_usb. Originals: _before-reconcile/.",
 "part_id_notes_source": [
  {
   "kind": "source",
   "repo": "hugelton/Felucca",
   "ref": "v1.6.1",
   "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
   "path": "firmware/src/panel.c",
   "lines": "9-11",
   "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L9-L11"
  },
  {
   "kind": "source",
   "repo": "hugelton/Felucca",
   "ref": "v1.6.1",
   "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
   "path": "firmware/src/panel.c",
   "lines": "12-15",
   "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L12-L15"
  },
  {
   "kind": "source",
   "repo": "hugelton/Felucca",
   "ref": "v1.6.1",
   "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
   "path": "firmware/src/panel.c",
   "lines": "26-31",
   "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L26-L31"
  }
 ],
 "modes": [
  {
   "id": "home",
   "name": "HOME",
   "how_to_get_there": "Press HOME from any page (the FM-1 also starts here).",
   "what_it_is": "The four tracks' home screen: four value cards for the selected track's sound over an oscilloscope, or the tracks view (MENU > HOME).",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "800-811",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "786-795",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L786-L795"
    }
   ]
  },
  {
   "id": "mixer",
   "name": "MIXER",
   "how_to_get_there": "Press HOME while on HOME.",
   "what_it_is": "Level, pan, reverb send and mute of the selected track; the four tracks shown.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "800-811",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "498",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L498"
    }
   ]
  },
  {
   "id": "clock",
   "name": "CLOCK",
   "how_to_get_there": "Press HOME while on MIXER (once more returns to HOME).",
   "what_it_is": "Tempo, swing and clock source.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "800-811",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "499",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L499"
    }
   ]
  },
  {
   "id": "env",
   "name": "ENV",
   "how_to_get_there": "Press ENV; press it again to step through its pages in order.",
   "what_it_is": "Attack, decay, sustain, release of the selected track.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "446",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L446"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "env_dest",
   "name": "ENV DEST",
   "how_to_get_there": "Press ENV; press it again to step through its pages in order.",
   "what_it_is": "Where the envelope goes: filter, pitch, shape amounts, and envelope times synced to tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "447",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L447"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "lfo",
   "name": "LFO",
   "how_to_get_there": "Press LFO; press it again to step through its pages in order.",
   "what_it_is": "LFO rate, wave, phase, fade-in.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "449",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L449"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "lfo2",
   "name": "LFO 2",
   "how_to_get_there": "Press LFO; press it again to step through its pages in order.",
   "what_it_is": "LFO tempo sync, retrigger, polarity.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "450",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L450"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "lfo_dest",
   "name": "LFO DEST",
   "how_to_get_there": "Press LFO; press it again to step through its pages in order.",
   "what_it_is": "LFO amounts to pitch, filter, shape, volume.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "451",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L451"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "mod",
   "name": "MOD",
   "how_to_get_there": "Press LFO; press it again to step through its pages in order.",
   "what_it_is": "Modulation matrix: four slots of source, destination, amount.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "452",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L452"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "fx",
   "name": "FX",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The track's distortion and its chorus, delay and reverb sends.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "453",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L453"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "slicer",
   "name": "SLICER",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The track's rhythmic slicer.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "454",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L454"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "insert",
   "name": "INSERT",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The track's insert effect (drives, crush, phaser, flanger, chorus).",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "455",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L455"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "insert2",
   "name": "INSERT 2",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The insert's dry/wet mix.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "456",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L456"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "dly",
   "name": "DLY",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The shared delay.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "457",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L457"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "reverb",
   "name": "REVERB",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The shared reverb (HALL, ROOM, SPRING).",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "458",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L458"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "chorus",
   "name": "CHORUS",
   "how_to_get_there": "Press FX; press it again to step through its pages in order.",
   "what_it_is": "The shared chorus.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "459",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L459"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "scl",
   "name": "SCL",
   "how_to_get_there": "Press SEL (Felucca calls it SCL); press it again to step through its pages in order.",
   "what_it_is": "The track's key, scale, how the keys follow it, transpose.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "460",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L460"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "chord",
   "name": "CHORD",
   "how_to_get_there": "Press SEL (Felucca calls it SCL); press it again to step through its pages in order.",
   "what_it_is": "One-finger chords: which chord and its voicing.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "461",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L461"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "edit1",
   "name": "EDIT 1",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "The engine's first four values (names change with the engine).",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "462",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L462"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "edit2",
   "name": "EDIT 2",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "The engine's next four values.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "463",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L463"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "filter",
   "name": "FILTER",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "ANALOG engine only: filter type, cutoff, resonance, key tracking.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "464",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L464"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "lanes",
   "name": "LANES",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "DRUM engine only: levels of kick, snare, clap, closed hat.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "465",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L465"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "lanes2",
   "name": "LANES 2",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "DRUM engine only: levels of open hat, tom, rim, bell.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "466",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L466"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "slices",
   "name": "SLICES",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "SLICE engine only: place, split and join slices by hand.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "467",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L467"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "operator",
   "name": "OPERATOR",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "FM6 engine only: one operator's coarse, fine, level.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "468",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L468"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "op_env",
   "name": "OP ENV",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "FM6 engine only: one operator's envelope stage, rate, level.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "469",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L469"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "operator2",
   "name": "OPERATOR 2",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "FM6 engine only: one operator's mode, detune, velocity.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "470",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L470"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "voice",
   "name": "VOICE",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "Poly/mono/legato/unison, glide, glide mode, note priority.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "476",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L476"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "voice2",
   "name": "VOICE 2",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "Voice allocation, detune, pan, mute.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "477",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L477"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "voice3",
   "name": "VOICE 3",
   "how_to_get_there": "Press EDIT; press it again to step through its pages in order.",
   "what_it_is": "Stereo spread of the voices.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "478",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L478"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "arp",
   "name": "ARP",
   "how_to_get_there": "Press ARP; press it again to step through its pages in order.",
   "what_it_is": "Arpeggiator mode, rate, octaves, gate.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "489",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L489"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "arp2",
   "name": "ARP 2",
   "how_to_get_there": "Press ARP; press it again to step through its pages in order.",
   "what_it_is": "Arpeggiator swing, probability, latch, note order.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "490",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L490"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "song",
   "name": "SONG",
   "how_to_get_there": "Press GLO; press it again to step through its pages in order.",
   "what_it_is": "A song of up to 16 sections; in each, every track plays one of the project slots A-D (or rests), repeated as often as you set.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "480",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L480"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "user",
   "name": "USER",
   "how_to_get_there": "Press SAVE; press it again to step through its pages in order.",
   "what_it_is": "The 32 user preset slots: load, erase, save the track's sound.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "483",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L483"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "presets",
   "name": "PRESETS",
   "how_to_get_there": "Press SAVE; press it again to step through its pages in order.",
   "what_it_is": "Browse factory and user sounds by engine, favourites and category.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "484",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L484"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "phrases",
   "name": "PHRASES",
   "how_to_get_there": "Press SAVE; press it again to step through its pages in order.",
   "what_it_is": "Load a ready-made pattern into the track.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "485",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L485"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "project",
   "name": "PROJECT",
   "how_to_get_there": "Press SAVE; press it again to step through its pages in order.",
   "what_it_is": "The four project slots A-D: erase, load, save.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "487",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L487"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "tools",
   "name": "TOOLS",
   "how_to_get_there": "Press SAVE; press it again to step through its pages in order.",
   "what_it_is": "Clear the sequence, init the sound, delete a song section, clear the song.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "488",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L488"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "detail",
   "name": "DETAIL",
   "how_to_get_there": "Press SEQ; press it again to step through its pages in order.",
   "what_it_is": "The cursor step's chance or condition, ratchet, nudge, velocity.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "492",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L492"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "automation",
   "name": "AUTOMATION",
   "how_to_get_there": "Press SEQ; press it again to step through its pages in order.",
   "what_it_is": "Everything recorded on the track's steps as one editable list.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "494",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L494"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "763-784",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
    }
   ]
  },
  {
   "id": "step_roll",
   "name": "STEP (piano roll)",
   "how_to_get_there": "Press SEQ on a track whose engine is not DRUM.",
   "what_it_is": "The track's steps as a piano roll; the step cursor; step recording when the track is armed and stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "491",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L491"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "529-532",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L529-L532"
    }
   ]
  },
  {
   "id": "step_grid",
   "name": "STEP (drum grid)",
   "how_to_get_there": "Press SEQ on a DRUM track.",
   "what_it_is": "A step grid: white keys are 16 steps of the shown page, black keys pick the drum lane.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/params.c",
     "lines": "491",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L491"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "593",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L593"
    }
   ]
  },
  {
   "id": "menu",
   "name": "MENU",
   "how_to_get_there": "Hold HOME (about 0.7 s). Hold HOME again, or press it, to close.",
   "what_it_is": "Settings in five tabs: DISPLAY, CONTROL, AUDIO, MIDI, SYSTEM; SYSTEM offers 2ND CORE OFF or ON (BETA), applied after restarting. After a failed start within 30 s, the next boot silently skips the second core even with ON selected. New settings default to OFF; beta OFF becomes ON (BETA), while beta AUTO becomes OFF.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1575-1586",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1575-L1586"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1298-1313",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1298-L1313"
    },
    {
     "kind": "doc",
     "repo": "hugelton/Felucca (wiki)",
     "path": "wiki/Menu.md",
     "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
     "lines": "3-6",
     "read_at": "2026-10-13",
     "url": "https://github.com/hugelton/Felucca/wiki/Menu/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/menu_items.c",
     "lines": "75-79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L75-L79"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/menu_items.c",
     "lines": "120-125",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "84-88",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L84-L88"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "188-198",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "189-197",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L189-L197"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "226-228",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L226-L228"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "337-348",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L337-L348"
    }
   ]
  },
  {
   "id": "name",
   "name": "NAME",
   "how_to_get_there": "Opens when you save a user preset or a project (or press EDIT on USER/PROJECT to rename).",
   "what_it_is": "Type a name of up to 12 characters with the keys.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_name.c",
     "lines": "3-27",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L3-L27"
    }
   ]
  },
  {
   "id": "dialog",
   "name": "Confirm dialog",
   "how_to_get_there": "Comes up before: erasing a user preset or a project, saving over a used slot, INIT or CLEAN INIT, SAVE > TOOLS' CLEAR SEQUENCE, DELETE section and CLEAR SONG, clearing a track's automation (AUTOMATION's PLAY row), and loading a phrase over steps you've written.",
   "what_it_is": "A question: OCT+ does it, OCT- cancels, nothing else reacts. These never ask: project LOAD (no undo), the REC layer's CLEAR, every SEQ TOOLS action, EDIT clearing a step on STEP (no undo), EDIT deleting an AUTOMATION row, and MENU > MIDI > LEARN CLEAR, which forgets every learned CC (no undo).",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1612-1666",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1612-L1666"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1066-1073",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1066-L1073"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1084",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1084"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1096-1120",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1096-L1120"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1128-1138",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1128-L1138"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "655-666",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_events.c",
     "lines": "445",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L445"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1125-1127",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1125-L1127"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "426-450",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L426-L450"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_tools.c",
     "lines": "9-11",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L9-L11"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "1348-1364",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1348-L1364"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_menu.c",
     "lines": "548-550",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L548-L550"
    }
   ]
  },
  {
   "id": "layer_fx",
   "name": "FX layer",
   "how_to_get_there": "Hold FX (0.4 s by default; MENU > HOLD sets 0.3-0.6 s), or press a key or knob while holding it. Double-tap FX to keep it open without holding; tap FX again to close.",
   "what_it_is": "Performance effects on the white keys, track mutes on black keys 1-4, four macros on the knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "6-10",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L6-L10"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "34-39",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-53",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
    }
   ]
  },
  {
   "id": "layer_glo",
   "name": "GLO layer",
   "how_to_get_there": "Hold GLO (0.4 s by default; MENU > HOLD sets 0.3-0.6 s), or press a key or knob while holding it. Double-tap GLO to keep it open without holding; tap GLO again to close.",
   "what_it_is": "Mutes, solos, unmute all, MIDI LEARN, FILL, tap tempo; KNOB 1-4 are the four track levels.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "10-15",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10-L15"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "34-39",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-53",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
    }
   ]
  },
  {
   "id": "layer_scl",
   "name": "SEL layer",
   "how_to_get_there": "Hold SEL (0.4 s by default; MENU > HOLD sets 0.3-0.6 s), or press a key or knob while holding it. Double-tap SEL to keep it open without holding; tap SEL again to close.",
   "what_it_is": "A key sets the root; KNOB 1-4 are root, scale, chord, voicing.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "15-17",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L15-L17"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "34-39",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-53",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
    }
   ]
  },
  {
   "id": "layer_edit",
   "name": "EDIT layer",
   "how_to_get_there": "Hold EDIT (0.4 s by default; MENU > HOLD sets 0.3-0.6 s), or press a key or knob while holding it. Double-tap EDIT to keep it open without holding; tap EDIT again to close.",
   "what_it_is": "White keys pick the engine (then INIT and CLEAN INIT); KNOB 1-3 engine, sound, favourite.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "17-22",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L17-L22"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "34-39",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-53",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
    }
   ]
  },
  {
   "id": "layer_seq",
   "name": "SEQ TOOLS layer",
   "how_to_get_there": "Hold SEQ (0.4 s by default; MENU > HOLD sets 0.3-0.6 s), or press a key or knob while holding it. Double-tap SEQ to keep it open without holding; tap SEQ again to close.",
   "what_it_is": "Sequence tools on the white keys; KNOB 1-4 length, division, swing, gate.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "23-28",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L23-L28"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "34-39",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-53",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
    }
   ]
  },
  {
   "id": "layer_rec",
   "name": "REC layer",
   "how_to_get_there": "Hold REC (0.4 s by default; MENU > HOLD sets 0.3-0.6 s), or press a key or knob while holding it. Double-tap REC to keep it open without holding; tap REC again to close.",
   "what_it_is": "Clear the track, click, count-in, click level.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "28-33",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "34-39",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-53",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
    }
   ]
  },
  {
   "id": "layer_seq_euclid",
   "name": "SEQ TOOLS > EUCLID",
   "how_to_get_there": "In the SEQ TOOLS layer, press F4.",
   "what_it_is": "A Euclidean rhythm on the track: KNOB 1 hits, KNOB 2 steps, KNOB 3 rotation; OCT+ keeps it, OCT- cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_tools.c",
     "lines": "6",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L6"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "772-777",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L772-L777"
    }
   ]
  },
  {
   "id": "midi_learn",
   "name": "MIDI LEARN",
   "how_to_get_there": "In the GLO layer, press D4.",
   "what_it_is": "Turn a knob, then move a control on your MIDI controller to link them.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "649",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L649"
    },
    {
     "kind": "doc",
     "repo": "hugelton/Felucca (wiki)",
     "path": "wiki/Features.md",
     "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
     "lines": "85-86",
     "read_at": "2026-10-13",
     "url": "https://github.com/hugelton/Felucca/wiki/Features/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
    }
   ]
  },
  {
   "id": "momentary",
   "name": "MOMENTARY",
   "how_to_get_there": "Hold LFO and turn a knob on HOME or a sound or effect page.",
   "what_it_is": "The value changes only while LFO is held, then snaps back.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_input.c",
     "lines": "50-68",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L50-L68"
    }
   ]
  },
  {
   "id": "power_on",
   "name": "Power-on",
   "how_to_get_there": "Hold buttons while switching the FM-1 on.",
   "what_it_is": "Start-up gestures.",
   "source": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "209-212",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L209-L212"
    }
   ]
  }
 ],
 "controls": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens FX: effects, slicer, insert, delay, reverb, chorus pages; each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "EFFECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the FX performance layer while held.",
    "short_label": "PERFORM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "59-67",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "6-10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L6-L10"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Keeps the FX layer open without holding; press FX again to close.",
    "short_label": "LOCK FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens SCL page, then CHORD; each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the SEL layer: a key sets the root, knobs set root, scale, chord, voicing.",
    "short_label": "SET KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "59-67",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "15-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L15-L17"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Keeps the SEL layer open without holding; press SEL again to close.",
    "short_label": "LOCK SEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens ENV, then ENV DEST; each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens LFO, LFO 2, LFO DEST, MOD; each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "No layer: hold LFO and turn a knob for a temporary change (MOMENTARY).",
    "short_label": "MOMENTARY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "50-68",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L50-L68"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the engine pages (EDIT 1, EDIT 2, the engine's own pages, VOICE 1-3); each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the EDIT layer: white keys pick the engine, black keys the engine's quick actions.",
    "short_label": "PICK ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "59-67",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "17-22",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L17-L22"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Keeps the EDIT layer open without holding; press EDIT again to close.",
    "short_label": "LOCK EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "Clears the step under the cursor and moves on, with no question and no undo. With a step being entered (keys held), clears only that step's locks (hold SAVE undoes that).",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1348-1360",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1348-L1360"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "772-785",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L772-L785"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "With grid steps held, clears their parameter locks.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1348-1360",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1348-L1360"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "708-709",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L708-L709"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "Sets the cursor step back to 100% chance, one hit, no nudge and the default velocity. One undo (hold SAVE).",
    "short_label": "RESET STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1341-1347",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1341-L1347"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "869-888",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L869-L888"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "press",
    "action": "Deletes the selected record (or resets a step's chance, ratchet, nudge or velocity).",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1361-1364",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1361-L1364"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "press",
    "action": "Renames the selected slot (opens the NAME screen).",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1365-1368",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1365-L1368"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Renames the selected slot (opens the NAME screen).",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1365-1368",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1365-L1368"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "action": "With a white effect key held, puts that key's default effect back.",
    "short_label": "DEFAULT FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1552-1553",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1552-L1553"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens SONG (its only page); each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the GLO layer: mutes, solos, track levels, tap tempo, MIDI LEARN, FILL.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "59-67",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "10-15",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10-L15"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Keeps the GLO layer open without holding; press GLO again to close.",
    "short_label": "LOCK GLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens ARP, then ARP 2; each further press goes to the next page of the group. Acts when you let go.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "445-501",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L445-L501"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens STEP (the piano roll, or the drum grid on a DRUM track); further presses go to DETAIL and AUTOMATION.",
    "short_label": "SEQUENCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1673-1718",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1673-L1718"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "491",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L491"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS on any page: sequence tools on the white keys, length/division/swing/gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "59-67",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "23-28",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L23-L28"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Keeps SEQ TOOLS open without holding; press SEQ again to close.",
    "short_label": "LOCK TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Goes to HOME. On HOME, goes to MIXER; on MIXER, to CLOCK; on CLOCK, back to HOME. Acts when you let go.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "800-811",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1670-1671",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1670-L1671"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held about 0.7 s: opens the MENU (or closes it).",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1575-1586",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1575-L1586"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1298-1313",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1298-L1313"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Closes the menu.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1572-1575",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1572-L1575"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "action": "Ignored while a layer's button is held (no menu, no HOME).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1543-1544",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1543-L1544"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens USER, ready to save the track's sound: OCT+ names it, OCT+ again writes it (on a used slot OCT+ asks OVERWRITE? first). On a SAVE page, goes to the next: USER, PRESETS, PHRASES, PROJECT, TOOLS. Acts when you let go.",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1610-1611",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1610-L1611"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-785",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L785"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "538",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L538"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1096-1109",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1096-L1109"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1617-1620",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1617-L1620"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held about 0.7 s: undoes the last sound load or edit (one step; again to redo).",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1606-1609",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1606-L1609"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1298-1313",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1298-L1313"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1076-1079",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1076-L1079"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "action": "Ignored while a layer's button is held (no undo, no page).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1541-1544",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1541-L1544"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Starts or stops all four tracks. Stops a count-in.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1678-1688",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1678-L1688"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Plays the song from its first section, whichever section is selected. If anything is playing or counting in, the press stops it instead. With no sections it says ADD A SECTION; a section on an empty project slot says PATTERN A EMPTY (or B, C, D).",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1678-1684",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1678-L1684"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "483-495",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L483-L495"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1194-1240",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1194-L1240"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "1308-1316",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L1308-L1316"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "821-825",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L821-L825"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/song_chain.c",
      "lines": "136-153",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/song_chain.c#L136-L153"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "action": "With GLO held: restarts from the top without stopping.",
    "short_label": "RESTART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "741-751",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L741-L751"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Stops playback started meanwhile, so the name can be saved; never starts it.",
    "short_label": "STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1599-1601",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1599-L1601"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Arms or disarms recording on the selected track. Arming while stopped also starts playback (live recording).",
    "short_label": "REC ARM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "582-607",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L582-L607"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "Arms step recording: playback stays stopped and the keys write the cursor step.",
    "short_label": "STEP REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "595-599",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L595-L599"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Does not arm; tells you to go to SEQ to record.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "589-592",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L589-L592"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the REC layer: clear, click, count-in, click level.",
    "short_label": "REC SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "59-67",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "28-33",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Keeps the REC layer open without holding; press REC again to close.",
    "short_label": "LOCK REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shifts the keys down an octave (to -3).",
    "short_label": "OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1697-1708",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1697-L1708"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "Both together: octave back to 0.",
    "short_label": "OCT RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1697-1708",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1697-L1708"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "Held together for 5 s: enters update (boot) mode for installing firmware; a countdown shows from 2 s, letting go cancels.",
    "short_label": "UPDATE 5S",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "247-275",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L247-L275"
     }
    ]
   },
   {
    "mode": "power_on",
    "gesture": "power_on_holding:button_oct_up",
    "action": "Hold both while switching on: HARDWARE CALIBRATION, which asks you to press each labelled button and turn each knob.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "209-212",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L209-L212"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "5-9",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L5-L9"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "action": "Drops the picked action, or goes back to HOME when none is picked (cancels a dialog). Acts when you let go.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1660-1662",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1660-L1662"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Previous value of the selected row; in INFO or ABOUT: back; on SYSTEM > 2ND CORE chooses OFF, which needs a restart after playback is stopped and MENU closed to save it.",
    "short_label": "PREV/BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "522-562",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L522-L562"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "308-326",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L308-L326"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "496-502",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "188-198",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Cancels: nothing is written.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "6",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L6"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "action": "Puts back everything the layer changed since it opened (mutes/levels/tempo, scale, sound, sequence, recording settings). No octave shift.",
    "short_label": "UNDO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "766-830",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L766-L830"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "release",
    "action": "Puts back everything the layer changed since it opened (mutes/levels/tempo, scale, sound, sequence, recording settings). No octave shift.",
    "short_label": "UNDO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "766-830",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L766-L830"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "release",
    "action": "Puts back everything the layer changed since it opened (mutes/levels/tempo, scale, sound, sequence, recording settings). No octave shift.",
    "short_label": "UNDO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "766-830",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L766-L830"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "release",
    "action": "Puts back everything the layer changed since it opened (mutes/levels/tempo, scale, sound, sequence, recording settings). No octave shift.",
    "short_label": "UNDO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "766-830",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L766-L830"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "release",
    "action": "Puts back everything the layer changed since it opened (mutes/levels/tempo, scale, sound, sequence, recording settings). No octave shift.",
    "short_label": "UNDO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "766-830",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L766-L830"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "action": "With MENU > FX LATCH on: turns every latched effect and macro off.",
    "short_label": "FX ALL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "779-783",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L779-L783"
     }
    ]
   },
   {
    "mode": "layer_seq_euclid",
    "gesture": "press",
    "action": "Cancels the Euclidean rhythm.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "772-777",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L772-L777"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "press",
    "action": "Clears the CC picked for the selected knob, except on the action pages (AUTOMATION, TOOLS, SONG, PHRASES, USER, PROJECT, and SLICES with a SLICE track selected): there OCT- drops the picked action or goes back to HOME instead, and the CC stays.",
    "short_label": "CLEAR CC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1726-1727",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1726-L1727"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1721-1725",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1721-L1725"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shifts the keys up an octave (to +3).",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1697-1708",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1697-L1708"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "action": "Both together: octave back to 0.",
    "short_label": "OCT RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1697-1708",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1697-L1708"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "action": "Held together for 5 s: enters update (boot) mode for installing firmware; a countdown shows from 2 s, letting go cancels.",
    "short_label": "UPDATE 5S",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "247-275",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L247-L275"
     }
    ]
   },
   {
    "mode": "power_on",
    "gesture": "power_on_holding:button_oct_down",
    "action": "Hold both while switching on: HARDWARE CALIBRATION, which asks you to press each labelled button and turn each knob.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "209-212",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L209-L212"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "5-9",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L5-L9"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Does the picked action. ERASE and SAVE over a used slot ask first; LOAD replaces the music at once with no question and no undo. Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1720",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1720"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1125-1127",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1125-L1127"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1133-1143",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1133-L1143"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1106",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1106"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1110-1120",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1110-L1120"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1128-1135",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1128-L1135"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Plays the song from its first section, whichever section is selected, when you let go; if anything is playing or counting in, it stops it instead. With no sections it says ADD A SECTION; a section on an empty project slot says PATTERN A EMPTY (or B, C, D).",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1150-1166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1150-L1166"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1516",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1516"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1775-1776",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1775-L1776"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1795",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1795"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1720",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1720"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1076-1079",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1076-L1079"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "483-495",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L483-L495"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1194-1240",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1194-L1240"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "1308-1316",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L1308-L1316"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "821-825",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L821-L825"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/song_chain.c",
      "lines": "136-153",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/song_chain.c#L136-L153"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "action": "Does the picked action (or confirms the dialog). Acts when you let go.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1729",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1729"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1057-1146",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1057-L1146"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Next value of the selected row; on CALIBRATION, INFO, ABOUT: opens it; on SYSTEM > 2ND CORE chooses ON (BETA), which needs a restart after playback is stopped and MENU closed to save it.",
    "short_label": "NEXT/OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "522-562",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L522-L562"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "308-326",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L308-L326"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "496-502",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "188-198",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Writes the name (saves).",
    "short_label": "WRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "6",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L6"
     }
    ]
   },
   {
    "mode": "layer_seq_euclid",
    "gesture": "press",
    "action": "Keeps the Euclidean rhythm.",
    "short_label": "APPLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "772-777",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L772-L777"
     }
    ]
   },
   {
    "mode": "momentary",
    "gesture": "press_while_holding:button_lfo",
    "action": "Keeps the temporary changes made while LFO was held.",
    "short_label": "KEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1503-1507",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1503-L1507"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "press",
    "action": "Ends MIDI LEARN, except on the action pages (AUTOMATION, TOOLS, SONG, PHRASES, USER, PROJECT, and SLICES with a SLICE track selected): there OCT+ does the page's picked action instead (SONG plays or stops the song; PROJECT with LOAD picked loads at once, replacing the music in memory), or nothing when none is picked, and MIDI LEARN stays on.",
    "short_label": "DONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1726-1727",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1726-L1727"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1719-1728",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1719-L1728"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/midi_learn.c",
      "lines": "92-103",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/midi_learn.c#L92-L103"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1121-1127",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1121-L1127"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1793-1798",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1793-L1798"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1059-1061",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1059-L1061"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Selects the track (1-4) on every page. The ALGORITHM name is the stock firmware's; Felucca makes it the track knob.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1756-1757",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1756-L1757"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves between the menu's five tabs.",
    "short_label": "MENU TAB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "537-538",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L537-L538"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Changes the selected track's sound (one list over every engine, then your user presets). Your steps stay; hold SAVE to undo.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1260-1267",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1260-L1267"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Moves the step cursor (as KNOB 1).",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Moves the step cursor (as KNOB 1).",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Moves to another row (as KNOB 1).",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks the slot (as KNOB 1).",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "turn",
    "action": "Picks the pattern (as KNOB 1).",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks the slot (as KNOB 1).",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Picks the section (as KNOB 1).",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1268-1293",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Does nothing here.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1290-1291",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1290-L1291"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "action": "Does nothing here.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1290-1291",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1290-L1291"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "With a step held (its key on the grid, or the notes of the step being entered): nudges it earlier or later.",
    "short_label": "NUDGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1280-1283",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1280-L1283"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:key_f3",
    "action": "With a white key held in the FX layer: assigns that key the next effect (or none). F3 is an example; any white key works.",
    "short_label": "ASSIGN FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1551",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1548-L1551"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves through the rows of the menu tab.",
    "short_label": "MENU ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "535-536",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L535-L536"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Sets the tempo (BPM 40-240) by default. MENU > CONTROL > SELECT can make it step pages (PAGE), play the mod wheel (MODW) or set key velocity (VEL); MENU > BPM LOCK stops it changing tempo.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1758-1779",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1758-L1779"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Sets the tempo, even with BPM LOCK or another SELECT mode.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1555-1556",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1555-L1556"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1758-1768",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1758-L1768"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Edits the selected sound's first main value (depends on the engine); with MENU > HOME LEVELS, track 1's level.",
    "short_label": "MAIN 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1734-1739",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1734-L1739"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "500-526",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L500-L526"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "clock",
    "gesture": "turn",
    "action": "Sets bpm.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L499"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "187-189",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L187-L189"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets attack.",
    "short_label": "ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "446",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L446"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets env>filter.",
    "short_label": "ENV>FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "447",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L447"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "449",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L449"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Sets sync.",
    "short_label": "SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "450",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L450"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets lfo>pitch.",
    "short_label": "LFO>PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Chooses which of the 4 matrix slots the other knobs edit.",
    "short_label": "MOD SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L452"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1040-1043",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1040-L1043"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets distortion.",
    "short_label": "DISTORTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "453",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L453"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets slicer type.",
    "short_label": "SLICER TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "454",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L454"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "action": "Sets insert type.",
    "short_label": "INSERT TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "455",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L455"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "173-177",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L173-L177"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert2",
    "gesture": "turn",
    "action": "Sets dry/wet.",
    "short_label": "DRY/WET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "456",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L456"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets time.",
    "short_label": "TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L457"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Sets type.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "458",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L458"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Sets rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "459",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L459"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets root.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "460",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L460"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Sets chord.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "461",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L461"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets engine value 1 (name depends on the engine).",
    "short_label": "ENGINE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "462",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L462"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets engine value 5 (name depends on the engine).",
    "short_label": "ENGINE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "463",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L463"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets filter type.",
    "short_label": "FILTER TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "464",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L464"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "action": "Sets kick level.",
    "short_label": "KICK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "465",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L465"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes2",
    "gesture": "turn",
    "action": "Sets o.hat level.",
    "short_label": "O.HAT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "466",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L466"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "action": "Sets marker.",
    "short_label": "MARKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1004-1008",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1004-L1008"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Sets operator.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "468",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L468"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Sets operator.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "469",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L469"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets operator.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "470",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L470"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets poly/mono.",
    "short_label": "POLY/MONO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Sets allocation.",
    "short_label": "ALLOCATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "477",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L477"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice3",
    "gesture": "turn",
    "action": "Sets spread.",
    "short_label": "SPREAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "478",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L478"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets arp mode.",
    "short_label": "ARP MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "489",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L489"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets swing.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "490",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L490"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Sets section.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "951-976",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L951-L976"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Sets slot.",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1026-1029",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1026-L1029"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1025",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1021-L1025"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Sets sound.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "986-1005",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L986-L1005"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "turn",
    "action": "Sets pattern.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1031-1034",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1031-L1034"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Sets the project slot.",
    "short_label": "SLOT A-D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "487",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L487"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1025",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1021-L1025"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks CLEAR SEQUENCE (OCT+ asks first).",
    "short_label": "CLEAR SEQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1806",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1806"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1020",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1010-L1020"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1072-1073",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1072-L1073"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "889-939",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L889-L939"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "649-659",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L649-L659"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "turn",
    "action": "Sets chance 0-100%, then past 100% the conditions 1:2 ... 4:4, FILL, !FILL.",
    "short_label": "CHANCE/COND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "504",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L504"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "840-867",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L840-L867"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Sets row.",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "22-31",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L22-L31"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards on screen).",
    "short_label": "VALUE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while step recording (track armed with REC, playback stopped): hold the keys of the note you are entering and turn the knob to lock that value to the cursor step. The value is the one this knob edits on the sound page you used last. Not armed, the keys just play and the knob edits the whole sound.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "711-721",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L711-L721"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "With one or more grid steps held: locks the matching value to those steps (parameter lock).",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "704-710",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L704-L710"
     }
    ]
   },
   {
    "mode": "momentary",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Temporary change: the value jumps back when LFO is let go (OCT+ keeps it). Not recorded.",
    "short_label": "TEMP TWEAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "69-108",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L69-L108"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1791-1795",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1791-L1795"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the selected menu value; on SYSTEM > 2ND CORE choose OFF or ON (BETA) for the next restart, then stop playback and close MENU to save the choice before restarting.",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "539-546",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L539-L546"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "496-502",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "188-198",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "FILTER macro: sweeps a low-pass (one way) or high-pass (the other).",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "702-708",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L702-L708"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Track 1 level (recorded as on MIXER).",
    "short_label": "T1 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "709-715",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L709-L715"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Root note.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "70",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L70"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Steps to the next or previous engine.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "715-722",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L715-L722"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Pattern length (1-64 steps).",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "72",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L72"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "113-116",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L113-L116"
     }
    ]
   },
   {
    "mode": "layer_seq_euclid",
    "gesture": "turn_while_holding:button_seq",
    "action": "Number of hits.",
    "short_label": "HITS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "725-726",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L725-L726"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Click: OFF, while recording, or always.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "722-724",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L722-L724"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L452"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Moves the text cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "19",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L19"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Edits the sound's second main value; with HOME LEVELS, track 2's level.",
    "short_label": "MAIN 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1734-1739",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1734-L1739"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets pan.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "500-526",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L500-L526"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "clock",
    "gesture": "turn",
    "action": "Sets swing.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L499"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "187-189",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L187-L189"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets decay.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "446",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L446"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets env>pitch.",
    "short_label": "ENV>PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "447",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L447"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets wave.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "449",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L449"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Sets trig.",
    "short_label": "TRIG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "450",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L450"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets lfo>filter.",
    "short_label": "LFO>FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Sets source.",
    "short_label": "SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L452"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1040-1043",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1040-L1043"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets chorus send.",
    "short_label": "CHORUS SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "453",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L453"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets pattern.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "454",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L454"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "action": "Sets insert a.",
    "short_label": "INSERT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "455",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L455"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "173-177",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L173-L177"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "456",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L456"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets feedback.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L457"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Sets size.",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "458",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L458"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Sets depth.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "459",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L459"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets scale.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "460",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L460"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Sets voicing.",
    "short_label": "VOICING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "461",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L461"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets engine 2.",
    "short_label": "ENGINE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "462",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L462"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets engine 6.",
    "short_label": "ENGINE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "463",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L463"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets cutoff.",
    "short_label": "CUTOFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "464",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L464"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "action": "Sets snare level.",
    "short_label": "SNARE LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "465",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L465"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes2",
    "gesture": "turn",
    "action": "Sets tom level.",
    "short_label": "TOM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "466",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L466"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "action": "Sets move marker.",
    "short_label": "MOVE MARKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1004-1008",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1004-L1008"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Sets coarse.",
    "short_label": "COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "468",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L468"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Sets env stage.",
    "short_label": "ENV STAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "469",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L469"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets op mode.",
    "short_label": "OP MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "470",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L470"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets glide.",
    "short_label": "GLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Sets detune.",
    "short_label": "DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "477",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L477"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "478",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L478"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets arp rate.",
    "short_label": "ARP RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "489",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L489"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets probability.",
    "short_label": "PROBABILITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "490",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L490"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Sets track.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "951-976",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L951-L976"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks LOAD (OCT+ does it).",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1026-1029",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1026-L1029"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1025",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1021-L1025"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Sets engine.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "986-1005",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L986-L1005"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "turn",
    "action": "Picks LOAD (OCT+ does it).",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1031-1034",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1031-L1034"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks ERASE (OCT+ asks first).",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1110-1120",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1110-L1120"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1623-1624",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1623-L1624"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks INIT; one more click right picks CLEAN INIT.",
    "short_label": "INIT/CLEAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1806",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1806"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1020",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1010-L1020"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1072-1073",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1072-L1073"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Transposes the cursor step (an empty step gets the last note).",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "889-939",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L889-L939"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Sets drum lane.",
    "short_label": "DRUM LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "649-659",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L649-L659"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "turn",
    "action": "Sets ratchet.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "504",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L504"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "840-867",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L840-L867"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Sets step.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "22-31",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L22-L31"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards on screen).",
    "short_label": "VALUE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while step recording (track armed with REC, playback stopped): hold the keys of the note you are entering and turn the knob to lock that value to the cursor step. The value is the one this knob edits on the sound page you used last. Not armed, the keys just play and the knob edits the whole sound.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "711-721",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L711-L721"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "With one or more grid steps held: locks the matching value to those steps (parameter lock).",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "704-710",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L704-L710"
     }
    ]
   },
   {
    "mode": "momentary",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Temporary change: the value jumps back when LFO is let go (OCT+ keeps it). Not recorded.",
    "short_label": "TEMP TWEAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "69-108",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L69-L108"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1791-1795",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1791-L1795"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the selected menu value; on SYSTEM > 2ND CORE choose OFF or ON (BETA) for the next restart, then stop playback and close MENU to save the choice before restarting.",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "539-546",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L539-L546"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "496-502",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "188-198",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "CRUSH macro.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L38-L39"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Track 2 level (recorded as on MIXER).",
    "short_label": "T2 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "709-715",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L709-L715"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Scale.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "70",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L70"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Steps through the engine's sounds.",
    "short_label": "SOUND No.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "715-722",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L715-L722"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Step division (4 bars to 1/32).",
    "short_label": "DIVISION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "72",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L72"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "113-116",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L113-L116"
     }
    ]
   },
   {
    "mode": "layer_seq_euclid",
    "gesture": "turn_while_holding:button_seq",
    "action": "Length of the rhythm's cycle.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "725-726",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L725-L726"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Count-in: OFF, 1 bar, 2 bars.",
    "short_label": "COUNT-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "722-724",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L722-L724"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L452"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Changes the character at the cursor.",
    "short_label": "CHARACTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "19",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L19"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Edits the sound's third main value; with HOME LEVELS, track 3's level.",
    "short_label": "MAIN 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1734-1739",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1734-L1739"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "500-526",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L500-L526"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "clock",
    "gesture": "turn",
    "action": "Sets clock src.",
    "short_label": "CLOCK SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L499"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "187-189",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L187-L189"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets sustain.",
    "short_label": "SUSTAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "446",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L446"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets env>shape.",
    "short_label": "ENV>SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "447",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L447"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets phase.",
    "short_label": "PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "449",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L449"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Sets polarity.",
    "short_label": "POLARITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "450",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L450"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets lfo>shape.",
    "short_label": "LFO>SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Sets destination.",
    "short_label": "DESTINATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L452"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1040-1043",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1040-L1043"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets delay send.",
    "short_label": "DELAY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "453",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L453"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "454",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L454"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "action": "Sets insert b.",
    "short_label": "INSERT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "455",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L455"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "173-177",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L173-L177"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "456",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L456"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets colour.",
    "short_label": "COLOUR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L457"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Sets damp.",
    "short_label": "DAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "458",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L458"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "459",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L459"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets how the keys follow the scale: OFF, SNAP, WHITE (white keys play the scale), SEQ, SEQ+T.",
    "short_label": "KEY MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "460",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L460"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "461",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L461"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets engine 3.",
    "short_label": "ENGINE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "462",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L462"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets engine 7.",
    "short_label": "ENGINE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "463",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L463"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets resonance.",
    "short_label": "RESONANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "464",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L464"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "action": "Sets clap level.",
    "short_label": "CLAP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "465",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L465"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes2",
    "gesture": "turn",
    "action": "Sets rim level.",
    "short_label": "RIM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "466",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L466"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "action": "Picks SPLIT (OCT+ does it).",
    "short_label": "SPLIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1004-1008",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1004-L1008"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Sets fine.",
    "short_label": "FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "468",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L468"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Sets stage rate.",
    "short_label": "STAGE RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "469",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L469"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets detune.",
    "short_label": "DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "470",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L470"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets glide mode.",
    "short_label": "GLIDE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Sets pan.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "477",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L477"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "478",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L478"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets arp octaves.",
    "short_label": "ARP OCTAVES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "489",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L489"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets latch.",
    "short_label": "LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "490",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L490"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Sets the project slot.",
    "short_label": "SLOT A-D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "951-976",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L951-L976"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks ERASE (OCT+ asks first).",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1096-1101",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1096-L1101"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1621-1622",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1621-L1622"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Marks or unmarks the sound as a favourite.",
    "short_label": "FAVOURITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "986-1005",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L986-L1005"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1031-1034",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1031-L1034"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks LOAD; OCT+ then loads the project at once, even while playing, with no question. The music in memory is replaced, unsaved work is lost, and hold SAVE can't bring it back (loading drops the undo copy).",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1125-1127",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1125-L1127"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1133-1143",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1133-L1143"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1106",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1106"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks DELETE of the selected song section.",
    "short_label": "DEL SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1806",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1806"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1020",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1010-L1020"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1072-1073",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1072-L1073"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Sets the note's length in steps (on an empty step: note, tie, rest).",
    "short_label": "LENGTH/TIE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "889-939",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L889-L939"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Adds or removes the selected lane's hit on the cursor step.",
    "short_label": "HIT ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "649-659",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L649-L659"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "turn",
    "action": "Sets nudge.",
    "short_label": "NUDGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "504",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L504"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "840-867",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L840-L867"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Sets the record's parameter.",
    "short_label": "PARAMETER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "22-31",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L22-L31"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards on screen).",
    "short_label": "VALUE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while step recording (track armed with REC, playback stopped): hold the keys of the note you are entering and turn the knob to lock that value to the cursor step. The value is the one this knob edits on the sound page you used last. Not armed, the keys just play and the knob edits the whole sound.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "711-721",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L711-L721"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "With one or more grid steps held: locks the matching value to those steps (parameter lock).",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "704-710",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L704-L710"
     }
    ]
   },
   {
    "mode": "momentary",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Temporary change: the value jumps back when LFO is let go (OCT+ keeps it). Not recorded.",
    "short_label": "TEMP TWEAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "69-108",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L69-L108"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1791-1795",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1791-L1795"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the selected menu value; on SYSTEM > 2ND CORE choose OFF or ON (BETA) for the next restart, then stop playback and close MENU to save the choice before restarting.",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "539-546",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L539-L546"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "496-502",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "188-198",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "THROW macro: sends the dry mix into delay and reverb.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L38-L39"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Track 3 level (recorded as on MIXER).",
    "short_label": "T3 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "709-715",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L709-L715"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Chord type of the one-finger chord keys.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "70",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L70"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Marks or unmarks the sound as a favourite.",
    "short_label": "FAVOURITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "715-722",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L715-L722"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Swing.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "72",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L72"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "113-116",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L113-L116"
     }
    ]
   },
   {
    "mode": "layer_seq_euclid",
    "gesture": "turn_while_holding:button_seq",
    "action": "Rotation.",
    "short_label": "ROTATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "725-726",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L725-L726"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Click level: low, mid, high.",
    "short_label": "CLICK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "722-724",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L722-L724"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L452"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "User preset: its category. Project: a new random name each click.",
    "short_label": "CATEGORY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "20-25",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L20-L25"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Edits the sound's fourth main value; with HOME LEVELS, track 4's level.",
    "short_label": "MAIN 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1734-1739",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1734-L1739"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets mute.",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "500-526",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L500-L526"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "clock",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L499"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "187-189",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L187-L189"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets release.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "446",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L446"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets env sync.",
    "short_label": "ENV SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "447",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L447"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets fade.",
    "short_label": "FADE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "449",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L449"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "450",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L450"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets lfo>amp.",
    "short_label": "LFO>AMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Sets amount.",
    "short_label": "AMOUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L452"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1040-1043",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1040-L1043"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "453",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L453"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets depth.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "454",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L454"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "action": "Sets insert c.",
    "short_label": "INSERT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "455",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L455"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "173-177",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L173-L177"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "insert2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "456",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L456"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets mix.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L457"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "458",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L458"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "459",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L459"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets transpose.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "460",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L460"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "461",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L461"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets engine 4.",
    "short_label": "ENGINE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "462",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L462"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets engine 8.",
    "short_label": "ENGINE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "463",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L463"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets key track.",
    "short_label": "KEY TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "464",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L464"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "action": "Sets c.hat level.",
    "short_label": "C.HAT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "465",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L465"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "lanes2",
    "gesture": "turn",
    "action": "Sets bell level.",
    "short_label": "BELL LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "466",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L466"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "action": "Picks JOIN (OCT+ does it).",
    "short_label": "JOIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1004-1008",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1004-L1008"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Sets op level.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "468",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L468"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Sets stage level.",
    "short_label": "STAGE LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "469",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L469"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets velocity.",
    "short_label": "VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "470",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L470"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1036-1039",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1036-L1039"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets priority.",
    "short_label": "PRIORITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Sets mute.",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "477",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L477"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "voice3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "478",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L478"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets arp gate.",
    "short_label": "ARP GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "489",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L489"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets note order.",
    "short_label": "NOTE ORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "490",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L490"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Sets how many times the section plays (1-16).",
    "short_label": "REPEATS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "951-976",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L951-L976"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks SAVE: OCT+ asks OVERWRITE? on a used slot, then opens NAME; OCT+ writes.",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1096-1109",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1096-L1109"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1617-1620",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1617-L1620"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Shows ALL, favourites or one category.",
    "short_label": "LIST FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "986-1005",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L986-L1005"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1031-1034",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1031-L1034"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks SAVE: OCT+ asks OVERWRITE? on a used slot, then opens NAME; OCT+ writes. Only while stopped.",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1128-1135",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1128-L1135"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1615-1616",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1615-L1616"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks CLEAR SONG.",
    "short_label": "CLEAR SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1767-1790",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1767-L1790"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1806",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1806"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1020",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1010-L1020"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1072-1073",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1072-L1073"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Sets accent, slide, both or none.",
    "short_label": "ACC/SLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "889-939",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L889-L939"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Sets accent.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "649-659",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L649-L659"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "turn",
    "action": "Sets velocity.",
    "short_label": "VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "504",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L504"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "840-867",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L840-L867"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Sets the record's value.",
    "short_label": "VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "22-31",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L22-L31"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards on screen).",
    "short_label": "VALUE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1777-1813",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1777-L1813"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "941-1053",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L941-L1053"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while step recording (track armed with REC, playback stopped): hold the keys of the note you are entering and turn the knob to lock that value to the cursor step. The value is the one this knob edits on the sound page you used last. Not armed, the keys just play and the knob edits the whole sound.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "711-721",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L711-L721"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "With one or more grid steps held: locks the matching value to those steps (parameter lock).",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1785-1789",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1785-L1789"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "704-710",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L704-L710"
     }
    ]
   },
   {
    "mode": "momentary",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Temporary change: the value jumps back when LFO is let go (OCT+ keeps it). Not recorded.",
    "short_label": "TEMP TWEAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "69-108",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L69-L108"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1791-1795",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1791-L1795"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the selected menu value; on SYSTEM > 2ND CORE choose OFF or ON (BETA) for the next restart, then stop playback and close MENU to save the choice before restarting.",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "539-546",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L539-L546"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "496-502",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "188-198",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "DEPTH macro: how loud the held repeat, reverse, tape, freeze, flanger and phaser effects are; while the OCT UP or OCT DOWN harmoniser key (G4, A4) is held, it sets their shimmer instead.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "23",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L23"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Track 4 level (recorded as on MIXER).",
    "short_label": "T4 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "709-715",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L709-L715"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Chord voicing.",
    "short_label": "VOICING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "70",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L70"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Nothing.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "715-722",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L715-L722"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Gate length.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "72",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L72"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "113-116",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L113-L116"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Master volume (speaker and headphones; USB audio too unless MENU > USB LEVEL is FIXED; also the click).",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/master.c",
      "lines": "3-6",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/master.c#L3-L6"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Menu.md",
      "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
      "lines": "62-63",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Menu/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 1 of the shown page (steps 1, 17, 33, 49 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the repeat 1/8 effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "RPT 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 1 while held.",
    "short_label": "SOLO T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to F.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the ANALOG engine (its first sound; your steps stay).",
    "short_label": "ANALOG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Clears the whole sequence. One undo (hold SAVE).",
    "short_label": "CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Clears the track's steps and automation at once (one undo, no dialog).",
    "short_label": "CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "466-476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L466-L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "28-33",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types AB phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE AB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 1 (KICK) and plays it.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 1 while held (not saved).",
    "short_label": "MUTE T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "9-10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L9-L10"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 1 (stays).",
    "short_label": "MUTE T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to F#.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 1 (KICK). Other engines: nothing yet (dark).",
    "short_label": "MUTE KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 1 (KICK) for the lane tools.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor left.",
    "short_label": "CURSOR <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 2 of the shown page (steps 2, 18, 34, 50 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the repeat 1/16 effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "RPT 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 2 while held.",
    "short_label": "SOLO T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to G.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the FM6 engine (its first sound; your steps stay).",
    "short_label": "FM6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Reverses the sequence. One undo (hold SAVE).",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Click: next value (OFF, while recording, always).",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "466-476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L466-L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "28-33",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types CD phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE CD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 2 (SNARE) and plays it.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 2 while held (not saved).",
    "short_label": "MUTE T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "9-10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L9-L10"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 2 (stays).",
    "short_label": "MUTE T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to G#.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 2 (SNARE). Other engines: nothing yet (dark).",
    "short_label": "MUTE SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 2 (SNARE) for the lane tools.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types a space.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 3 of the shown page (steps 3, 19, 35, 51 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected section's track to play project slot A (on + ADD it adds a section first). Silent here.",
    "short_label": "SLOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "547-565",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L547-L565"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "101-105",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L101-L105"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the repeat 1/32 effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "RPT 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 3 while held.",
    "short_label": "SOLO T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to A.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the PHASE engine (its first sound; your steps stay).",
    "short_label": "PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Shifts the sequence one step left. One undo (hold SAVE).",
    "short_label": "SHIFT <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Count-in: next value (OFF, 1 bar, 2 bars).",
    "short_label": "COUNT-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "466-476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L466-L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "28-33",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types EF phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE EF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 3 (CLAP) and plays it.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 3 while held (not saved).",
    "short_label": "MUTE T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "9-10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L9-L10"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 3 (stays).",
    "short_label": "MUTE T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to A#.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 3 (CLAP). Other engines: nothing yet (dark).",
    "short_label": "MUTE CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 3 (CLAP) for the lane tools.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor right.",
    "short_label": "CURSOR >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 4 of the shown page (steps 4, 20, 36, 52 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected section's track to play project slot B (on + ADD it adds a section first). Silent here.",
    "short_label": "SLOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "547-565",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L547-L565"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "101-105",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L101-L105"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the reverse effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 4 while held.",
    "short_label": "SOLO T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to B.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the LOFI engine (its first sound; your steps stay).",
    "short_label": "LOFI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Shifts the sequence one step right. One undo (hold SAVE).",
    "short_label": "SHIFT >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Click level: next value (low, mid, high).",
    "short_label": "CLICK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "466-476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L466-L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "28-33",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types GH phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE GH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 5 of the shown page (steps 5, 21, 37, 53 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected section's track to play project slot C (on + ADD it adds a section first). Silent here.",
    "short_label": "SLOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "547-565",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L547-L565"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "101-105",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L101-L105"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the low-pass effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "LPF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Unmutes all tracks.",
    "short_label": "UNMUTE ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to C.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the SAMPLE engine (its first sound; your steps stay).",
    "short_label": "SAMPLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Random: a fresh drum pattern on a DRUM track; on other tracks, the rhythm stays and the notes are re-picked from the scale. One undo (hold SAVE).",
    "short_label": "RANDOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "578-589",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L578-L589"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "253-308",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L253-L308"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types IJK phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE IJK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 4 (C.HAT) and plays it.",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 4 while held (not saved).",
    "short_label": "MUTE T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "9-10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L9-L10"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 4 (stays).",
    "short_label": "MUTE T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to C#.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 4 (C.HAT). Other engines: nothing yet (dark).",
    "short_label": "MUTE C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 4 (C.HAT) for the lane tools.",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Deletes the character before the cursor (held: repeats).",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 6 of the shown page (steps 6, 22, 38, 54 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected section's track to play project slot D (on + ADD it adds a section first). Silent here.",
    "short_label": "SLOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "547-565",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L547-L565"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "101-105",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L101-L105"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the high-pass effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "HPF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Turns MIDI LEARN on or off.",
    "short_label": "MIDI LEARN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to D.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the VOICE engine (its first sound; your steps stay).",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Changes the pattern a little each press. One undo (hold SAVE).",
    "short_label": "COOK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types LM phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE LM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 5 (O.HAT) and plays it.",
    "short_label": "O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to D#.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 5 (O.HAT). Other engines: nothing yet (dark).",
    "short_label": "MUTE O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 5 (O.HAT) for the lane tools.",
    "short_label": "O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Switches letters and numbers.",
    "short_label": "ABC/123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 7 of the shown page (steps 7, 23, 39, 55 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the tape stop effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "TAPE STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "FILL while held: steps marked FILL play, steps marked !FILL rest.",
    "short_label": "FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Release-Notes.md",
      "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
      "lines": "18",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Release-Notes/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to E.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the TRIO engine (its first sound; your steps stay).",
    "short_label": "TRIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM tracks: replaces the steps with one fixed basic beat (kick every 4th step, snare on 5 and 13, closed hat every 2nd). One undo (hold SAVE).",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "603-611",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L603-L611"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types NO phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE NO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 8 of the shown page (steps 8, 24, 40, 56 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the freeze effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Tap tempo: from the third tap, the tempo follows your taps (internal clock only).",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "637-653",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L637-L653"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "362-383",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L362-L383"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to F.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the WHEEL engine (its first sound; your steps stay).",
    "short_label": "WHEEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Opens EUCLID (a Euclidean rhythm; knobs set it, OCT+ keeps it). One undo (hold SAVE).",
    "short_label": "EUCLID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types PQ phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE PQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 6 (TOM) and plays it.",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to F#.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 6 (TOM). Other engines: nothing yet (dark).",
    "short_label": "MUTE TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 6 (TOM) for the lane tools.",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor left.",
    "short_label": "CURSOR <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 9 of the shown page (steps 9, 25, 41, 57 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the oct up effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "OCT UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to G.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the GRAIN engine (its first sound; your steps stay).",
    "short_label": "GRAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: clears the selected lane. One undo (hold SAVE).",
    "short_label": "LANE CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types RS phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 7 (RIM) and plays it.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to G#.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 7 (RIM). Other engines: nothing yet (dark).",
    "short_label": "MUTE RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 7 (RIM) for the lane tools.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types a space.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 10 of the shown page (steps 10, 26, 42, 58 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the oct down effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "OCT DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to A.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the PHYS engine (its first sound; your steps stay).",
    "short_label": "PHYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: reverses the selected lane. One undo (hold SAVE).",
    "short_label": "LANE REV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types TU phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE TU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 8 (BELL) and plays it.",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "94-97",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L94-L97"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "151-152",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L151-L152"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to A#.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes lane 8 (BELL). Other engines: nothing yet (dark).",
    "short_label": "MUTE BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "566-570",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L566-L570"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: selects lane 8 (BELL) for the lane tools.",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "675",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor right.",
    "short_label": "CURSOR >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 11 of the shown page (steps 11, 27, 43, 59 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the flanger effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "FLANGER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to B.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the NOISE engine (its first sound; your steps stay).",
    "short_label": "NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: fills the selected lane; each press steps through every step, every 2nd, every 4th, then empty. One undo (hold SAVE).",
    "short_label": "LANE FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "223-238",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L223-L238"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types VW phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE VW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 12 of the shown page (steps 12, 28, 44, 60 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the phaser effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "PHASER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to C.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the SLICE engine (its first sound; your steps stay).",
    "short_label": "SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: randomises the selected lane. One undo (hold SAVE).",
    "short_label": "LANE RANDOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types XYZ phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE XYZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "hold",
    "action": "ACC: while held, the white step keys set or clear accents instead of hits.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "90",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L90"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "682",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L682"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to C#.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Deletes the character before the cursor (held: repeats).",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 13 of the shown page (steps 13, 29, 45, 61 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the rev throw effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "VERB THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to D.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Switches the track to the DRUM engine (its first sound; your steps stay).",
    "short_label": "DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Doubles the pattern (length x2, up to 64). One undo (hold SAVE).",
    "short_label": "DOUBLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 123 phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE 123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Previous page of 16 steps.",
    "short_label": "PAGE <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "90",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L90"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "698",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L698"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to D#.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Switches letters and numbers.",
    "short_label": "ABC/123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 14 of the shown page (steps 14, 30, 46, 62 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the echo throw effect on the master while the key is held (default map; any white key can be reassigned). With MENU > FX LATCH: toggles it.",
    "short_label": "ECHO THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to E.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "INIT: the engine's first sound (asks first).",
    "short_label": "INIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Halves the pattern (keeps the first half). One undo (hold SAVE).",
    "short_label": "HALF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "15-16",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L15-L16"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "386-424",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L386-L424"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 456 phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE 456",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 15 of the shown page (steps 15, 31, 47, 63 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "No effect by default; hold it and turn PRESETS to give it one.",
    "short_label": "(EMPTY)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to F.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "CLEAN INIT: the engine's plain basic sound, nothing added (asks first).",
    "short_label": "CLEAN INIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/engines.c",
      "lines": "114-126",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/engines.c#L114-L126"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "BUILDING.md",
      "lines": "78-80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/BUILDING.md#L78-L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 789 phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE 789",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: silent. With SNAP, SEQ or SEQ+T: plays, rounded down into the scale.",
    "short_label": "SILENT(WHT)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Next page of 16 steps.",
    "short_label": "PAGE >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "90",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L90"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "698",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L698"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to F#.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor left.",
    "short_label": "CURSOR <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "72-82",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L72-L82"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "17-18",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L17-L18"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays a note on the selected track (velocity 100 unless MENU > SELECT VEL sets it; sent as MIDI on the track's channel).",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "110-113",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L110-L113"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_input.h",
      "lines": "166",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_input.h#L166"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With the SCL page's QNT (key mode) at WHITE: plays a scale note; C4 is the root and each white key is the next note of the scale. Applies on every page once set.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/seq.c",
      "lines": "132-163",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/seq.c#L132-L163"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Scale-Keyboard.md",
      "commit": "953dae931dbd17e2bce43518221786c853ad198e",
      "lines": "3-7",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Scale-Keyboard/953dae931dbd17e2bce43518221786c853ad198e"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "With the track armed and stopped: writes this note into the cursor step (keys held together make a chord; letting go moves on). With MENU > CHORD ENTRY ADD each key adds or removes its note. Armed and playing: records live.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1213-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1213-L1258"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 16 of the shown page (steps 16, 32, 48, 64 on pages 1-4): adds or removes the selected lane's hit there and moves the cursor to it. Hold it and turn a knob for a parameter lock.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "663-701",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L663-L701"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "press",
    "action": "On a DRUM track: picks that step for DETAIL's knobs (no hit is toggled).",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "675-678",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L675-L678"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "No effect by default; hold it and turn PRESETS to give it one.",
    "short_label": "(EMPTY)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "82-83",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L82-L83"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/perform.c",
      "lines": "7-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L7-L11"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the root to G.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "654",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L654"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 0-. phone-style (tap again within 0.8 s for the next character); in 123 mode one digit or symbol.",
    "short_label": "TYPE 0-.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "13-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L13-L17"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "home",
    "gesture": "shows",
    "action": "The four tracks' home screen: four value cards for the selected track's sound over an oscilloscope, or the tracks view (MENU > HOME).",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "800-811",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "786-795",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L786-L795"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "shows",
    "action": "Level, pan, reverb send and mute of the selected track; the four tracks shown.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "800-811",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L498"
     }
    ]
   },
   {
    "mode": "clock",
    "gesture": "shows",
    "action": "Tempo, swing and clock source.",
    "short_label": "CLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "800-811",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L800-L811"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L499"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "shows",
    "action": "Attack, decay, sustain, release of the selected track.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "446",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L446"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "shows",
    "action": "Where the envelope goes: filter, pitch, shape amounts, and envelope times synced to tempo.",
    "short_label": "ENV DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "447",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L447"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "shows",
    "action": "LFO rate, wave, phase, fade-in.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "449",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L449"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "shows",
    "action": "LFO tempo sync, retrigger, polarity.",
    "short_label": "LFO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "450",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L450"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "shows",
    "action": "LFO amounts to pitch, filter, shape, volume.",
    "short_label": "LFO DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "shows",
    "action": "Modulation matrix: four slots of source, destination, amount.",
    "short_label": "MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "452",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L452"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "shows",
    "action": "The track's distortion and its chorus, delay and reverb sends.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "453",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L453"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "shows",
    "action": "The track's rhythmic slicer.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "454",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L454"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "shows",
    "action": "The track's insert effect (drives, crush, phaser, flanger, chorus).",
    "short_label": "INSERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "455",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L455"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "insert2",
    "gesture": "shows",
    "action": "The insert's dry/wet mix.",
    "short_label": "INSERT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "456",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L456"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "shows",
    "action": "The shared delay.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L457"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "shows",
    "action": "The shared reverb (HALL, ROOM, SPRING).",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "458",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L458"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "shows",
    "action": "The shared chorus.",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "459",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L459"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "shows",
    "action": "The track's key, scale, how the keys follow it, transpose.",
    "short_label": "SCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "460",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L460"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "shows",
    "action": "One-finger chords: which chord and its voicing.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "461",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L461"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "shows",
    "action": "The engine's first four values (names change with the engine).",
    "short_label": "EDIT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "462",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L462"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "shows",
    "action": "The engine's next four values.",
    "short_label": "EDIT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "463",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L463"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "shows",
    "action": "ANALOG engine only: filter type, cutoff, resonance, key tracking.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "464",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L464"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "shows",
    "action": "DRUM engine only: levels of kick, snare, clap, closed hat.",
    "short_label": "LANES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "465",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L465"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "lanes2",
    "gesture": "shows",
    "action": "DRUM engine only: levels of open hat, tom, rim, bell.",
    "short_label": "LANES 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "466",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L466"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "shows",
    "action": "SLICE engine only: place, split and join slices by hand.",
    "short_label": "SLICES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "467",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L467"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "shows",
    "action": "FM6 engine only: one operator's coarse, fine, level.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "468",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L468"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "shows",
    "action": "FM6 engine only: one operator's envelope stage, rate, level.",
    "short_label": "OP ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "469",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L469"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "shows",
    "action": "FM6 engine only: one operator's mode, detune, velocity.",
    "short_label": "OPERATOR 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "470",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L470"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "shows",
    "action": "Poly/mono/legato/unison, glide, glide mode, note priority.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "476",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L476"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "shows",
    "action": "Voice allocation, detune, pan, mute.",
    "short_label": "VOICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "477",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L477"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "voice3",
    "gesture": "shows",
    "action": "Stereo spread of the voices.",
    "short_label": "VOICE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "478",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L478"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "shows",
    "action": "Arpeggiator mode, rate, octaves, gate.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "489",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L489"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "shows",
    "action": "Arpeggiator swing, probability, latch, note order.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "490",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L490"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "shows",
    "action": "A song of up to 16 sections; in each, every track plays one of the project slots A-D (or rests), repeated as often as you set.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "480",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L480"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "shows",
    "action": "The 32 user preset slots: load, erase, save the track's sound.",
    "short_label": "USER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "483",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L483"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "shows",
    "action": "Browse factory and user sounds by engine, favourites and category.",
    "short_label": "PRESETS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "484",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L484"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "phrases",
    "gesture": "shows",
    "action": "Load a ready-made pattern into the track.",
    "short_label": "PHRASES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "485",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L485"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "action": "The four project slots A-D: erase, load, save.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "487",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L487"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "shows",
    "action": "Clear the sequence, init the sound, delete a song section, clear the song.",
    "short_label": "TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "488",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L488"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "detail",
    "gesture": "shows",
    "action": "The cursor step's chance or condition, ratchet, nudge, velocity.",
    "short_label": "DETAIL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "492",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L492"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "shows",
    "action": "Everything recorded on the track's steps as one editable list.",
    "short_label": "AUTOMATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "494",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L494"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "763-784",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L763-L784"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "shows",
    "action": "The track's steps as a piano roll; the step cursor; step recording when the track is armed and stopped.",
    "short_label": "PIANO ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "491",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L491"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "529-532",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L529-L532"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "shows",
    "action": "A step grid: white keys are 16 steps of the shown page, black keys pick the drum lane.",
    "short_label": "DRUM GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/params.c",
      "lines": "491",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L491"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "593",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L593"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "Five settings tabs; SYSTEM > 2ND CORE offers OFF or ON (BETA), with a restart reminder for either choice. A failed start within 30 s makes the next boot silently use one core despite ON. New settings default to OFF; beta OFF reads as ON (BETA), and beta AUTO as OFF; builds with FELUCCA_CPU2=0 omit the row.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1575-1586",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1575-L1586"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1298-1313",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1298-L1313"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Menu.md",
      "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
      "lines": "3-6",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Menu/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "75-79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L75-L79"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "120-125",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/menu_items.c",
      "lines": "257-274",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "84-88",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L84-L88"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/felucca.c",
      "lines": "34-40",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/felucca.c#L34-L40"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "332-337",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L332-L337"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "189-197",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L189-L197"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "226-228",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L226-L228"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "337-348",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L337-L348"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "shows",
    "action": "Type a name of up to 12 characters with the keys.",
    "short_label": "NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "3-27",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L3-L27"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "shows",
    "action": "A question: OCT+ does it, OCT- cancels, nothing else reacts. These never ask: project LOAD (no undo), the REC layer's CLEAR, every SEQ TOOLS action, EDIT clearing a step on STEP (no undo), EDIT deleting an AUTOMATION row, and MENU > MIDI > LEARN CLEAR, which forgets every learned CC (no undo).",
    "short_label": "QUESTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1612-1666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1612-L1666"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1066-1073",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1066-L1073"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1084",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1084"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1096-1120",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1096-L1120"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1128-1138",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1128-L1138"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "655-666",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L655-L666"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_events.c",
      "lines": "445",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_events.c#L445"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1125-1127",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1125-L1127"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "426-450",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "9-11",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L9-L11"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "1348-1364",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1348-L1364"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_menu.c",
      "lines": "548-550",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L548-L550"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "shows",
    "action": "Performance effects on the white keys, track mutes on black keys 1-4, four macros on the knobs.",
    "short_label": "FX layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "6-10",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L6-L10"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "34-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "shows",
    "action": "Mutes, solos, unmute all, MIDI LEARN, FILL, tap tempo; KNOB 1-4 are the four track levels.",
    "short_label": "GLO layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "10-15",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L10-L15"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "34-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "shows",
    "action": "A key sets the root; KNOB 1-4 are root, scale, chord, voicing.",
    "short_label": "SEL layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "15-17",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L15-L17"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "34-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "shows",
    "action": "White keys pick the engine (then INIT and CLEAN INIT); KNOB 1-3 engine, sound, favourite.",
    "short_label": "EDIT layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "17-22",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L17-L22"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "34-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "shows",
    "action": "Sequence tools on the white keys; KNOB 1-4 length, division, swing, gate.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "23-28",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L23-L28"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "34-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "shows",
    "action": "Clear the track, click, count-in, click level.",
    "short_label": "REC layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "28-33",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L28-L33"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "34-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L34-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "43-53",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L53"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L79"
     }
    ]
   },
   {
    "mode": "layer_seq_euclid",
    "gesture": "shows",
    "action": "A Euclidean rhythm on the track: KNOB 1 hits, KNOB 2 steps, KNOB 3 rotation; OCT+ keeps it, OCT- cancels.",
    "short_label": "EUCLID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_tools.c",
      "lines": "6",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_tools.c#L6"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "772-777",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L772-L777"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "shows",
    "action": "Turn a knob, then move a control on your MIDI controller to link them.",
    "short_label": "MIDI LEARN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "649",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L649"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Features.md",
      "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
      "lines": "85-86",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Features/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Header on every page: selected track, its pattern's project slot (with * once edited), play state, tempo.",
    "short_label": "HEADER",
    "evidence": "vendor-doc",
    "source": [
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Features.md",
      "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
      "lines": "67-68",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Features/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "While OCT- and OCT+ are held together (at any time while on): a countdown from 2 s, then update mode (UBOOT) at 5 s. Letting go cancels. Held while switching on, they start HARDWARE CALIBRATION instead.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "247-275",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L247-L275"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "209-212",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L209-L212"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "With MENU > DISPLAY > LARGE on, tall knob cards choose a text size that fits the whole value range, so turning that knob keeps its value text the same size.",
    "short_label": "LARGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "372-389",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L372-L389"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_draw.c",
      "lines": "518-546",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_draw.c#L518-L546"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_draw.c",
      "lines": "611-621",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_draw.c#L611-L621"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_draw.c",
      "lines": "964-972",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_draw.c#L964-L972"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_draw.c",
      "lines": "1167-1189",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_draw.c#L1167-L1189"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_draw.c",
      "lines": "1314-1323",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_draw.c#L1314-L1323"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "2ND CORE MISREAD: OFF means a bad render job or a render timeout stopped the second core; sound continues on one core and OFF is queued for a settings save, while a missing startup reply only uses one core for that boot.",
    "short_label": "CORE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_cpu1.h",
      "lines": "138-143",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_cpu1.h#L138-L143"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/hal/fm1_cpu1.h",
      "lines": "167-185",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_cpu1.h#L167-L185"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/fx.c",
      "lines": "1044-1054",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/fx.c#L1044-L1054"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "230-241",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L230-L241"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui.c",
      "lines": "1611-1624",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1611-L1624"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/project.c",
      "lines": "1242-1258",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
     }
    ]
   }
  ]
 },
 "switching_note": {
  "kept_on_unit": "Felucca keeps 4 projects, 32 user presets (with their FM6 patches), the FM6 voice bank, user samples, settings and an autosave of the last session in its own flash areas. Updating to a newer Felucca keeps them: newer versions open every older project. The 2ND CORE choice is kept with settings, apart from projects. From the flash atlas (generated): install (update loader): Writes the program area sector by sector (only sectors that differ), never the flash head (Every accepted install or update: flash.bin must be exactly 0x93000 bytes, its app must decrypt with this chip's key and its checks must pass; other sizes are rejected before erasing). install (update loader): After a successful write, erases every 4 KiB sector in these ranges whose last 256 bytes hold a valid update record. In practice: 0xE4000 (Felucca-family staging record at 0xE4F00) and, on a first install from stock, 0xE8000 (stock's record at 0xE8F00; Felucca's own comment calls that sector the stock OTA's VM backup). 0x97000-0xDFFFF is never scanned (only sectors whose tail is a valid update record (signature 0x5441 at +6 and CRC16)). every start-up: Erases the 5-sector update staging area if its first 4 bytes or the record at 0xE4F00 are not blank (only if anything is there). update (leaving through an installer's upgrade command): Erases the five staging sectors, stages the incoming firmware's loader there and writes its update record at 0xE4F00. (Holding OCT- and OCT+ for 5 s enters the chip's own USB update mode, UBOOT, and stages nothing.) Rejects a flash.bin not exactly 0x93000 bytes before staging. Failures before the first staging erase leave flash untouched; failures from staging onward erase staging again, including a failed update-record write (Only when an installer starts an update from Felucca and the exact-size package and recognized loader pass validation; stock-loader packages also require the same flash head as this unit). every start-up: One-time FM6 bank migration (see felucca.fm6_user_patches): writes only for Felucca 1.0-1.0.2's own FM6B bank (no valid UPF6 object and a valid FM6B type-7 bank). every start-up: Restores a valid pending Felucca or GHOULBOX voice-bank upload from 0xE5000/0xE6000 to 0xE7000 when the saved bank there is missing or older. The matching type-32 format is shared. This can overwrite another firmware’s data at 0xE7000, including SLOOP’s USR4 header, Melodee’s shared U055–U072 copy A or JIANT’s voice bank (only if a compatible Felucca or GHOULBOX staged upload survives and the saved bank is missing or older). install (web installer, 'Back up and return to official V15'): Before writing stock V15 it saves a complete backup through Felucca's archive protocol (current and saved music, sound banks, samples, settings); refuses Felucca builds that cannot make one. The FM6 voice bank and SLICE manual slices are not in that backup: sample exports include only the header/audio length, excluding the free last sector that holds SLM1 (only when the unit runs a Felucca build with the archive feature). What Felucca writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over Felucca's is in when_you_leave.",
  "lost": "Stock V15 cannot open Felucca music. Going back to an older Felucca: 1.1.5.x and older can't open projects saved by 1.4 or later; 1.2-1.4.1 can't open 1.5 or later; 1.5 and 1.5.1 can't open 1.6 projects with conditional steps (the slot looks empty there; the data stays until something is saved over it). 1.6 projects that do open on 1.5/1.5.1 lose things silently, and keep losing them if you save there: per-track MIDI channels fall back to a channel block, MOD slots set to VEL or TIME turn into DEPTH, the DEEP, TIGHT and PERC kits become 77, QNT SEQ+T becomes SEQ, and FOLD is ignored. User presets saved by 1.5 load on 1.4.1 without their new values. The FM6 voice bank is not part of a full backup, so keep the .syx file you sent it from. Nothing is saved at power-off (see the autosave entry). v1.6.1 keeps v1.6's project and sound formats; v1.6 has no 2ND CORE control. JIANT 0.7.4 uses the same settings byte for MIDI OUT and resets values above 3. With 2ND CORE ON, this also clears SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE; JIANT writes the changes at a settings save, which can happen during its first startup. Returning to Felucca does not recover those choices. From the flash atlas (generated): Other firmwares reading Felucca's data: SLOOP reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3; X0X reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3; JIANT takes over Felucca's settings, button calibration, favourites, MIDI LEARN map; user presets 1-16; user presets 17-32, converting them (RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map); JIANT lists Felucca's FM6 patches of the FM6 user presets, but plays them differently (the link to each preset breaks: JIANT plays a factory patch or the init voice instead); ChoralRoot takes over Felucca's settings, button calibration, favourites, MIDI LEARN map, converting them (on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off); ChoralRoot lists Felucca's user presets 1-16; user presets 17-32, but plays them differently (legacy records may be copied, but retired/renumbered engines and foreign deep patches change their sound; confirmed Flash Data still erases the sources); GHOULBOX reads and uses Felucca's settings, button calibration, favourites, MIDI LEARN map; project slot A; project slot B; project slot C; project slot D; user presets 1-16; user presets 17-32; FM6 patches of the FM6 user presets; autosave (the music as you left it); FM6 voice bank B1-B32; user sample slot USR1; user sample slot USR2; user sample slot USR3 (shared settings have different preference meanings; saving or autosaving converts to np112, unreadable by current Felucca; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ); Hortator reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); Skiff reads and uses Felucca's user presets 1-16; user presets 17-32; FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3; Skiff imports part of Felucca’s settings and calibration, but can clear learned MIDI, custom colours and other preferences and save the changes without asking. What Felucca reads of other firmwares' data: Felucca reads and uses JIANT's settings, calibration, favourites, MENU options; user sounds U01-U16; user sounds U17-U32; FM6 patches of the FM6 user sounds (RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map); Felucca lists SLOOP's user sounds U01-U16; user sounds U17-U32; user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); user sample slot USR3 (header at 0xC8000), but plays them differently (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here); Felucca reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3; Felucca reads and uses GHOULBOX's settings and panel calibration; user sounds 1–16; user sounds 17–32; FM6 patches for user sounds; FM6 voice bank B1–B32; user sample slot USR1; user sample slot USR2; user sample slot USR3 (different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused; GURDY records show unused; shared bank writes retain their bytes until overwritten); Felucca takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); Felucca reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (sample loop and slice behaviour follow this reader’s engines); Felucca reads and uses Skiff's settings, calibration and favourites; user sounds’ own FM6 patches; user sample USR1; user sample USR2; user sample USR3 (Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings; each patch must still match its FM6 user record; sample loop and slice behaviour follow this reader’s engines); Felucca lists Skiff's user sound bank 1; user sound bank 2, but plays them differently (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "Felucca's installer has 'Back up and return to official V15': it saves the current music, saved projects, sound banks, samples and settings to a file before writing V15 (it refuses older Felucca that can't make a full backup). To restore, reinstall Felucca and use the web editor's restore, which replaces every project slot, both preset banks and the settings. The web editor also exports and imports single projects. Before installing Felucca over another firmware, back that one up with its own tool. The v1.6.1 updater and its loader refuse a package whose flash.bin has the wrong size before their first erase; this check does not back up music.",
  "source": [
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "web/index_pkg.html",
    "lines": "103-108",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/index_pkg.html#L103-L108"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/loader/ldr_core.c",
    "lines": "31-38",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/loader/ldr_core.c#L31-L38"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/loader/ldr_core.c",
    "lines": "174-181",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/loader/ldr_core.c#L174-L181"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/project.c",
    "lines": "8-73",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L8-L73"
   },
   {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Release-Notes.md",
    "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
    "lines": "53-59",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Release-Notes/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
   },
   {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Release-Notes.md",
    "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
    "lines": "150-153",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Release-Notes/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
   },
   {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Upgrading-from-1.1.5.md",
    "commit": "953dae931dbd17e2bce43518221786c853ad198e",
    "lines": "6-9",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Upgrading-from-1.1.5/953dae931dbd17e2bce43518221786c853ad198e"
   },
   {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Release-Notes.md",
    "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
    "lines": "71",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Release-Notes/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/editor_backup.c",
    "lines": "91-150",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/editor_backup.c#L91-L150"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ota.c",
    "lines": "25-32",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ota.c#L25-L32"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ota.c",
    "lines": "269-276",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ota.c#L269-L276"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ota.c",
    "lines": "350-361",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ota.c#L350-L361"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/loader/ldr_core.c",
    "lines": "115-121",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/loader/ldr_core.c#L115-L121"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/settings_persist.c",
    "lines": "8-13",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/settings_persist.c#L8-L13"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/menu_items.c",
    "lines": "120-125",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui.c",
    "lines": "68-93",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L68-L93"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/settings_persist.c",
    "lines": "69-79",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/settings_persist.c#L69-L79"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/settings_persist.c",
    "lines": "46-65",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/settings_persist.c#L46-L65"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui.c",
    "lines": "85-105",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L85-L105"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "1925-1953",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1925-L1953"
   }
  ],
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR4 (header at 0xE7000)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (header at 0xA0000) (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here)",
     "user sample slot USR2 (header at 0xB4000) (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here)",
     "user sample slot USR3 (header at 0xC8000) (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FM6 patch bank B1-B27; settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk by itself, under a condition: user sample slot USR4 (header at 0xE7000). At risk when you act: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); the music in progress (autosave); user sounds U01-U16 (converted when read, written back at your next save in that bank); user sounds U17-U32 (converted when read, written back at your next save in that bank). Carried over: user sample slot USR1 (header at 0xA0000) (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here); user sample slot USR2 (header at 0xB4000) (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here); user sample slot USR3 (header at 0xC8000) (new SLOOP LOOP / LOOP+TAIL samples play as ordinary loops here).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Carried over: break loops slot 1; break loops slot 2; break loops slot 3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       }
      ]
     },
     {
      "object": "the music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "some of it lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user sounds",
     "user sounds U01-U16",
     "user sounds U17-U32"
    ],
    "kept_unseen": [],
    "notes": [
     "After JIANT's default RESTORE LAST OFF, Felucca's autosave is ON and writes by itself as you use it; if JIANT's RESTORE LAST was ON, Felucca's autosave is OFF."
    ],
    "owner_text": "At risk by itself: settings, calibration, favourites, MENU options (changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map). At risk by itself, under a condition: the music in progress (RESTORE LAST); FM6 voice bank B1-B32. At risk when you act: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project); song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects) (some of it lost); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes. Carried over: FM6 patches of the FM6 user sounds; user sounds U01-U16; user sounds U17-U32. After JIANT's default RESTORE LAST OFF, Felucca's autosave is ON and writes by itself as you use it; if JIANT's RESTORE LAST was ON, Felucca's autosave is OFF.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared user presets U037-U054; settings, factory favourites, calibration, saved template. At risk by itself, under a condition: shared user presets U055-U072. At risk when you act: shared user presets U289-U378 (some of it lost); shared user presets U379-U384; shared user presets U109-U126; project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. At risk when you act: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last global-save session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: options, playing setup and panel calibration. At risk when you act: 32 imported DX7 voices; CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last global-save session; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches for user sounds",
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3",
     "FM6 voice bank B1–B32"
    ],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX’s default RESTORE LAST ON leaves Felucca’s autosave ON; a saved OFF choice leaves it OFF."
    ],
    "owner_text": "At risk by itself: settings and panel calibration (changed by itself: Normalizes GHOULBOX’s migration markers as CLICK preferences in RAM; the next settings save persists them, and a later return to GHOULBOX can turn RESTORE LAST OFF; CLICK REC can add an unselected CUSTOM colour choice; SCENE becomes SCREEN OFF and SCREEN OFF becomes the LED-invert level; also, different shared preference meanings; a settings round trip can turn GHOULBOX RESTORE LAST OFF; CLICK REC can add CUSTOM under COLOR without selecting it, and scene/screen settings are reused). At risk by itself, under a condition: music in progress (RESTORE LAST). At risk when you act: project A; project B; project C; project D; user sounds 1–16 (converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten); user sounds 17–32 (converted when read, written back at your next save in that bank; GURDY records show unused; shared bank writes retain their bytes until overwritten). Carried over: FM6 patches for user sounds; user sample slot USR1; user sample slot USR2; user sample slot USR3; FM6 voice bank B1–B32. GHOULBOX’s default RESTORE LAST ON leaves Felucca’s autosave ON; a saved OFF choice leaves it OFF.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls."
    ],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk when you act: older stored user bank, if present (Beta4 does not store new edits). A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D. Carried over: user samples USR1 (sample loop and slice behaviour follow this reader’s engines); user samples USR2 (sample loop and slice behaviour follow this reader’s engines); user samples USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you learn MIDI CCs (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you run hardware calibration (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send data from the web editor [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "With no readable older Felucca-family settings copy left, these records supply no Felucca preferences. RESTORE LAST starts ON and autosave writes by itself after edits and quiet."
    ],
    "owner_text": "At risk by itself: Optional QY70 style bank; Polly setup and channel sounds. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 4; Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Polly button and encoder calibration. With no readable older Felucca-family settings copy left, these records supply no Felucca preferences. RESTORE LAST starts ON and autosave writes by itself after edits and quiet.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "by itself, only if a render job fails or times out (Skiff’s settings marker turns Felucca’s beta 2ND CORE on at startup)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "some or all of it lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds’ own FM6 patches (each patch must still match its FM6 user record)",
     "user sample USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR3 (sample loop and slice behaviour follow this reader’s engines)",
     "user sound bank 1 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound)",
     "user sound bank 2 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "Skiff’s default RESTORE LAST ON leaves Felucca’s autosave ON; a saved Skiff OFF choice leaves it OFF.",
     "Skiff’s scene-freed marker enables Felucca’s beta 2ND CORE at startup unless boot-failure protection blocks the core; a later bad render or timeout can write these settings automatically. The owner need not turn it on."
    ],
    "owner_text": "At risk by itself: last session; settings, calibration and favourites (changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings). At risk by itself, under a condition: project A; project B; project C; project D; shared 64-pattern pool (some or all of it lost). Carried over: user sounds’ own FM6 patches (each patch must still match its FM6 user record); user sample USR1 (sample loop and slice behaviour follow this reader’s engines); user sample USR2 (sample loop and slice behaviour follow this reader’s engines); user sample USR3 (sample loop and slice behaviour follow this reader’s engines); user sound bank 1 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound); user sound bank 2 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound). Skiff’s default RESTORE LAST ON leaves Felucca’s autosave ON; a saved Skiff OFF choice leaves it OFF. Skiff’s scene-freed marker enables Felucca’s beta 2ND CORE at startup unless boot-failure protection blocks the core; a later bad render or timeout can write these settings automatically. The owner need not turn it on.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "overwrites_note": "Generated from the flash atlas (output/fm1/flash-atlas/). Each fact carries its evidence grade. Available firmware source was read at the mapped release; Open’s USER layout is read in its package and APP source; its native SDK/loader are closed. Stock V15’s layout is reported from V13 analysis; Baud Girl’s is inferred. Nothing was tested on a unit. Anything listed is at risk, whatever saved copy might survive.",
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "project slot A",
     "project slot B",
     "project slot C",
     "project slot D",
     "FM6 patches of the FM6 user presets",
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3",
     "user presets 1-16",
     "user presets 17-32",
     "the autosave (the music as you left it)",
     "FM6 voice bank B1-B32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32; the autosave (the music as you left it); FM6 voice bank B1-B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "project slot A",
     "project slot B",
     "project slot C",
     "project slot D",
     "FM6 patches of the FM6 user presets",
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3",
     "user presets 1-16",
     "user presets 17-32",
     "the autosave (the music as you left it)",
     "FM6 voice bank B1-B32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32; the autosave (the music as you left it); FM6 voice bank B1-B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start an update (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store drum kits from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3"
    ],
    "kept_unseen": [
     "user presets 1-16",
     "user presets 17-32"
    ],
    "notes": [],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user presets; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D; the autosave (the music as you left it); FM6 voice bank B1-B32. Carried over: user sample slot USR1; user sample slot USR2; user sample slot USR3. Kept but not shown: user presets 1-16; user presets 17-32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only after a retained second-core failure, if two cores were enabled",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project slot A; project slot B; project slot C; project slot D; user presets 17-32; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: user presets 1-16. Carried over: user sample slot USR1; user sample slot USR2; user sample slot USR3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank) [through its preset bank]",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank) [through its preset bank]",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank) [through its preset bank]",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca's RESTORE LAST OFF choice turns JIANT's autosave ON; Felucca's RESTORE LAST ON choice turns it OFF."
    ],
    "owner_text": "At risk by itself: user sample slot USR3; settings, button calibration, favourites, MIDI LEARN map (changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map). At risk by itself, under a condition: the autosave (the music as you left it); FM6 voice bank B1-B32. At risk when you act: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets (converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead); user sample slot USR1; user sample slot USR2; user presets 1-16 (converted when read, written back at your next save in that bank); user presets 17-32 (converted when read, written back at your next save in that bank). Felucca's RESTORE LAST OFF choice turns JIANT's autosave ON; Felucca's RESTORE LAST ON choice turns it OFF.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its preset bank]",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you change a setting (no question)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting in the menu (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore an older 28-object Melodee backup (clears U379-U384 first) (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user presets; user presets 1-16; user presets 17-32; settings, button calibration, favourites, MIDI LEARN map. At risk by itself, under a condition: project slot A; project slot B; project slot C; project slot D; user sample slot USR3; the autosave (the music as you left it); FM6 voice bank B1-B32. At risk when you act: user sample slot USR1; user sample slot USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map. At risk when you act: user presets 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map. At risk when you act: user presets 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a save or failed boot preparation leaves its next spare unprepared",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot favourites save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an older ChoralRoot session save survives and its next spare is not blank",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot sound-pool save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if no pool bank exists and at least one legacy UPB1/192 sound passes validation",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and accept with OCT+ or SAVE (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion/reset with OCT+ (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while switching on (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request Import 0.21 sounds from the device manager (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore favourites from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore pool banks 50..62, or accepted legacy sound objects that are redirected into pool slots 1..32 from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore settings, which also writes an empty session record from backup software (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording/editing/clearing this loop (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode with a nonempty current loop (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore loop id 40; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore loop id 41; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 42; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 43; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 44; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 45; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 46; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 47; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 48; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 49; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "by itself, only if core failure barred Dual Core while the stored setting was On",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you restore settings from backup software (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore FM6 bank id 8 from backup software (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank dump (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore CZ bank A (id 14) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank B (id 15) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank C (id 16) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank D (id 17) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank E (id 18) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank F (id 19) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank G (id 20) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank H (id 21) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user sample slot USR2; user sample slot USR3; settings, button calibration, favourites, MIDI LEARN map (converted: After ChoralRoot saves its newer settings format, returning to Felucca starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off). At risk when you act: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets; user sample slot USR1; user presets 1-16; user presets 17-32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings"
       },
       {
        "way": "when you restore a backup",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings"
       },
       {
        "way": "when you send settings from the editor",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ",
      "ways": [
       {
        "way": "when you erase a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you rename a user preset (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you restore a backup",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ",
      "ways": [
       {
        "way": "when you erase a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you rename a user preset (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you restore a backup",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user presets",
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3",
     "FM6 voice bank B1-B32"
    ],
    "kept_unseen": [],
    "notes": [
     "After Felucca with its default CLICK LEVEL, GHOULBOX turns RESTORE LAST ON during import and autosaves by itself after edits and quiet, regardless of the earlier RESTORE LAST choice. A saved LOW click level is the exception: other saved preferences can leave autosave OFF. Check RESTORE LAST after importing LOW-click-level settings."
    ],
    "owner_text": "At risk by itself: the autosave (the music as you left it); settings, button calibration, favourites, MIDI LEARN map (changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them; also, shared settings have different preference meanings). At risk when you act: project slot A; project slot B; project slot C; project slot D; user presets 1-16 (converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ); user presets 17-32 (converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ). Carried over: FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3; FM6 voice bank B1-B32. After Felucca with its default CLICK LEVEL, GHOULBOX turns RESTORE LAST ON during import and autosaves by itself after edits and quiet, regardless of the earlier RESTORE LAST choice. A saved LOW click level is the exception: other saved preferences can leave autosave OFF. Check RESTORE LAST after importing LOW-click-level settings.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets. At risk when you act: user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32; the autosave (the music as you left it); FM6 voice bank B1-B32; settings, button calibration, favourites, MIDI LEARN map. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (no question)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D. Carried over: user sample slot USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you complete power-on hardware calibration (no question) [through its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question) [through its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: user sample slot USR3; user presets 1-16; user presets 17-32; the autosave (the music as you left it); FM6 voice bank B1-B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if Skiff has not yet made its one-time settings changes",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if the old scene-byte area has not been freed yet",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user presets",
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3"
    ],
    "kept_unseen": [],
    "notes": [
     "Imports Felucca’s saved RESTORE LAST state (ON by default)."
    ],
    "owner_text": "At risk by itself: the autosave (the music as you left it); FM6 voice bank B1-B32; settings, button calibration, favourites, MIDI LEARN map (changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record). At risk by itself, under a condition: project slot A; project slot B; project slot C; project slot D. At risk when you act: user presets 1-16 (converted when read, written back at your next save in that bank); user presets 17-32 (converted when read, written back at your next save in that bank). Carried over: FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3. Imports Felucca’s saved RESTORE LAST state (ON by default).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "What holding SEQ does",
   "docs_say": "The controls picture (docs/controls.jpg, embedded at the top of the wiki Controls page) says holding SEQ is the song (chaining patterns).",
   "source_says": "Since 1.2, holding SEQ opens SEQ TOOLS on every page; the song moved to a press of GLO. The wiki's text table agrees with the code; only the picture is old.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "docs/controls.jpg",
    "lines": "image",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/docs/controls.jpg"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui_layer.c",
    "lines": "23-28",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L23-L28"
   }
  },
  {
   "topic": "What a press of GLO opens",
   "docs_say": "The controls picture says GLO is the mixer, global and system pages.",
   "source_says": "A press of GLO opens SONG, its only page. The mixer is HOME's second page, CLOCK its third, and system settings are in the MENU (hold HOME).",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "docs/controls.jpg",
    "lines": "image",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/docs/controls.jpg"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/params.c",
    "lines": "480",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/params.c#L480"
   }
  },
  {
   "topic": "Where PRESETS changes the sound",
   "docs_say": "The controls picture says PRESETS changes the sound on HOME and SAVE > PRESETS.",
   "source_says": "PRESETS changes the sound on HOME, PRESETS and the sound and effect pages. On STEP, AUTOMATION, USER, PHRASES, PROJECT and SONG it does what KNOB 1 does; on DETAIL it moves the cursor; on TOOLS and SLICES it does nothing.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "docs/controls.jpg",
    "lines": "image",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/docs/controls.jpg"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui_input.c",
    "lines": "1268-1293",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1268-L1293"
   }
  },
  {
   "topic": "Which layers exist",
   "docs_say": "The controls picture lists hold gestures for FX, GLO, SCL, EDIT, SAVE, HOME, SEQ (song) and GLO+SELECT, GLO+PLAY, and does not mention the REC layer, SEQ TOOLS, double-tap locking or the 5-second OCT-+OCT+ update gesture.",
   "source_says": "REC held opens the REC layer; SEQ held opens SEQ TOOLS; a double tap of a layer button keeps its layer open; OCT- and OCT+ held 5 s enter update mode.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "docs/controls.jpg",
    "lines": "image",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/docs/controls.jpg"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "59-67",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L59-L67"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_layer.c",
     "lines": "43-51",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L43-L51"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "247-275",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L247-L275"
    }
   ]
  },
  {
   "topic": "The SEL button's name",
   "docs_say": "Felucca's docs, screens and code call the button between FX and ENV 'SCL'.",
   "source_says": "The panel prints SEL there. Same button; Les uses the printed name.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Controls.md",
    "commit": "953dae931dbd17e2bce43518221786c853ad198e",
    "lines": "6",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Controls/953dae931dbd17e2bce43518221786c853ad198e"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/panel.c",
    "lines": "12-15",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/panel.c#L12-L15"
   }
  },
  {
   "topic": "SAVE > TOOLS knobs 3 and 4 (docs are silent)",
   "docs_say": "The wiki names a TOOLS page on SAVE but does not say what its knobs do.",
   "source_says": "KNOB 1 picks CLEAR SEQUENCE, KNOB 2 INIT (one more click: CLEAN INIT), KNOB 3 DELETE of the selected song section, KNOB 4 CLEAR SONG; OCT+ asks, OCT+ again does it.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Controls.md",
    "commit": "953dae931dbd17e2bce43518221786c853ad198e",
    "lines": "20",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Controls/953dae931dbd17e2bce43518221786c853ad198e"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui_input.c",
    "lines": "1072-1073",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1072-L1073"
   }
  },
  {
   "topic": "Saving to a used user slot takes an extra confirm",
   "docs_say": "Wiki Controls: save a sound with SAVE, KNOB 1 for the slot, then OCT+ and OCT+ again.",
   "source_says": "That is right for an empty slot. On a used slot the first OCT+ asks OVERWRITE?, so it is OCT+ three times (ask, name, write).",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Controls.md",
    "commit": "953dae931dbd17e2bce43518221786c853ad198e",
    "lines": "11",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Controls/953dae931dbd17e2bce43518221786c853ad198e"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui_input.c",
    "lines": "1096-1111",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L1096-L1111"
   }
  },
  {
   "topic": "The wiki's Menu page omits 2ND CORE",
   "docs_say": "The wiki's Menu page lists six SYSTEM rows and leaves out 2ND CORE.",
   "source_says": "v1.6.1 adds SYSTEM > 2ND CORE, OFF or ON (BETA); stop playback, close the menu to save, then restart. ON is skipped silently on the boot after a start failed within 30 s. New settings default to OFF; beta OFF becomes ON (BETA), while beta AUTO becomes OFF. A build with FELUCCA_CPU2=0 omits the row.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Menu.md",
    "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
    "lines": "3-9",
    "read_at": "2026-10-16, supplied snapshot",
    "url": "https://github.com/hugelton/Felucca/wiki/Menu/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/menu_items.c",
     "lines": "75-79",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L75-L79"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/menu_items.c",
     "lines": "120-125",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/menu_items.c",
     "lines": "257-274",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L257-L274"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui_menu.c",
     "lines": "496-502",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/project.c",
     "lines": "1242-1258",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "188-198",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L188-L198"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/felucca.c",
     "lines": "34-40",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/felucca.c#L34-L40"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "189-197",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L189-L197"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "226-228",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L226-L228"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/main.c",
     "lines": "337-348",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L337-L348"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/ui.c",
     "lines": "84-88",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L84-L88"
    }
   ]
  }
 ],
 "not_mapped": [
  "The names of EDIT 1/EDIT 2 values and HOME's four values for each of the 13 engines; mapped generically. Five engines now live in Felucca-Engines at c46e0086f69bdc26df1cd144dca9e683cc4531dd (firmware/engines/src/eng_*.c); their control tables are unchanged.",
  "MENU rows one by one, except the new SYSTEM > 2ND CORE behavior; the other rows remain covered by the general menu controls.",
  "FM6 operator page details beyond which knob does what (ui_fm6op.c).",
  "SLICES page key details beyond 'a key picks the slice it plays' (ui_slice.c).",
  "Developer-only paths: the USB serial console (including its new second-core diagnostics), SysEx update entry."
 ],
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to FX.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "413-414",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L413-L414"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "With MENU > FX LATCH: an effect or a macro is still on.",
    "short_label": "FX ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "412",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L412"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to SEL.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "413-414",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L413-L414"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to ENV.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to LFO.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to EDIT.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "413-414",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L413-L414"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to GLO.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "413-414",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L413-L414"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to HOME. HOME's LED is also lit on MIXER and CLOCK.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to SAVE.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to ARP.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "An arpeggiator is playing on some track: flashes on the beat, longer on the bar's first beat (on the ARP page the flash is dark).",
    "short_label": "ARP BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "209-215",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L209-L215"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "409-410",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L409-L410"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The page shown belongs to SEQ.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "407-408",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L407-L408"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a faint glow so the button can be found in the dark (MENU > LEDS: DIM HI default, DIM LO, OFF, INV, INV LO, INV HI).",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "437",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L437"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "413-414",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L413-L414"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "413-414",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L413-L414"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "A track is armed for recording.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "415",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L415"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Stopped: faint glow. Playing: dark (the green LED takes over).",
    "short_label": "STOPPED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "438-439",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L438-L439"
     }
    ]
   },
   {
    "light": "green",
    "mode": "any",
    "gesture": "lit",
    "action": "Playing.",
    "short_label": "PLAYING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "456-457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L456-L457"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "30",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L30"
     }
    ]
   },
   {
    "light": "green",
    "mode": "any",
    "gesture": "flash",
    "action": "Count-in: flashes on each beat.",
    "short_label": "COUNT-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "456-457",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L456-L457"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Keys shifted below octave 0. On action pages and in dialogs: OCT- is back.",
    "short_label": "OCT DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "133-150",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L133-L150"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "breathing",
    "action": "The selected menu value can step back.",
    "short_label": "PREV VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "133-150",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L133-L150"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "lit",
    "action": "In GLO, SEL, EDIT, SEQ or REC layers: OCT- puts back the layer's changes.",
    "short_label": "UNDO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "133-150",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L133-L150"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Keys shifted above octave 0.",
    "short_label": "OCT UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "133-150",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L133-L150"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "breathing",
    "action": "OCT+ would do something now: confirm a dialog or action, keep MOMENTARY changes, write a name, open a menu item, or next menu value.",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "133-150",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L133-L150"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Keys you hold, notes the sequencer and MIDI IN play; on STEP while stopped, the notes of the cursor step.",
    "short_label": "NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "360-372",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L360-L372"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "268-288",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L268-L288"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle keys glow faintly (MENU > LEDS). MENU > SCALE LEDS: the selected track's scale glows, the root brighter.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "374-393",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L374-L393"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "305-330",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L305-L330"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "lit",
    "action": "White keys: hits of the selected lane on the shown page (accents while ACC is held); the playing step shows as a moving light. Black keys: the selected lane, ACC while held, the page keys when the pattern is longer than 16.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "155-173",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L155-L173"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "dim",
    "action": "Steps 1, 5, 9, 13 of the page glow a little brighter so you can count beats.",
    "short_label": "BEATS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "180-193",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L180-L193"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Keys whose function is on right now (an effect held, a track sounding, the root, the current engine, the selected lane, a setting on).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "breathing",
    "action": "Keys that do something in this layer and can be pressed.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "lit",
    "action": "Keys whose function is on right now (an effect held, a track sounding, the root, the current engine, the selected lane, a setting on).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "breathing",
    "action": "Keys that do something in this layer and can be pressed.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "lit",
    "action": "Keys whose function is on right now (an effect held, a track sounding, the root, the current engine, the selected lane, a setting on).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "breathing",
    "action": "Keys that do something in this layer and can be pressed.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "lit",
    "action": "Keys whose function is on right now (an effect held, a track sounding, the root, the current engine, the selected lane, a setting on).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "breathing",
    "action": "Keys that do something in this layer and can be pressed.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "lit",
    "action": "Keys whose function is on right now (an effect held, a track sounding, the root, the current engine, the selected lane, a setting on).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "breathing",
    "action": "Keys that do something in this layer and can be pressed.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "lit",
    "action": "Keys whose function is on right now (an effect held, a track sounding, the root, the current engine, the selected lane, a setting on).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "breathing",
    "action": "Keys that do something in this layer and can be pressed.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_layer.c",
      "lines": "837-876",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_layer.c#L837-L876"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "lit",
    "action": "The key (A3, B3, C4 or D4) of the selected cell's project slot.",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "567-576",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L567-L576"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "lit",
    "action": "Every key that types or edits; the key being cycled blinks.",
    "short_label": "TYPING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_name.c",
      "lines": "25",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_name.c#L25"
     }
    ]
   },
   {
    "mode": "power_on",
    "gesture": "flash",
    "action": "The key LEDs brighten in a moving pattern during startup; MENU > ANIM IDLE also animates them while idle. A fault confined to the second core does not by itself prevent the startup animation; ANIM OFF and the other boot checks still can.",
    "short_label": "SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "130-131",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L130-L131"
     },
     {
      "kind": "doc",
      "repo": "hugelton/Felucca (wiki)",
      "path": "wiki/Features.md",
      "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
      "lines": "76",
      "read_at": "2026-10-13",
      "url": "https://github.com/hugelton/Felucca/wiki/Features/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/main.c",
      "lines": "140-151",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L140-L151"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "firmware/src/ui_input.c",
      "lines": "343-355",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_input.c#L343-L355"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_a3",
   "led_a4",
   "led_as3",
   "led_as4",
   "led_b3",
   "led_b4",
   "led_c4",
   "led_c5",
   "led_cs4",
   "led_cs5",
   "led_d4",
   "led_d5",
   "led_ds4",
   "led_ds5",
   "led_e4",
   "led_e5",
   "led_f3",
   "led_f4",
   "led_f5",
   "led_fs3",
   "led_fs4",
   "led_fs5",
   "led_g3",
   "led_g4",
   "led_g5",
   "led_gs3",
   "led_gs4"
  ]
 },
 "fixed_after_check": "2026-10-13",
 "saving_note": {
  "power_off": "Nothing is saved when you switch off. With MENU > SYSTEM > RESTORE LAST on (the default), the music is copied to an autosave only after it has changed, then stayed untouched for 10 s with playback stopped and nothing sounding, and at most once a minute. Switch off while playing, or within about 10 s of an edit, and those changes are gone. Save a project to keep it for sure.",
  "evidence": "read-in-source",
  "source": [
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/project.c",
    "lines": "1276-1290",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1276-L1290"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/project.c",
    "lines": "1352-1378",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1352-L1378"
   },
   {
    "kind": "doc",
    "repo": "hugelton/Felucca (wiki)",
    "path": "wiki/Menu.md",
    "commit": "92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a",
    "lines": "78-81",
    "read_at": "2026-10-13",
    "url": "https://github.com/hugelton/Felucca/wiki/Menu/92eaf3a3176db70e7933d7f8dfa58c5a52e26c4a"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/menu_items.c",
    "lines": "120-125",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/menu_items.c#L120-L125"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui_menu.c",
    "lines": "496-502",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui_menu.c#L496-L502"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/settings_persist.c",
    "lines": "8-13",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/settings_persist.c#L8-L13"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/main.c",
    "lines": "230-241",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L230-L241"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui.c",
    "lines": "1608-1624",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1608-L1624"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/project.c",
    "lines": "1242-1258",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/main.c",
    "lines": "140-151",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L140-L151"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/main.c",
    "lines": "209-213",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L209-L213"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/project.c",
    "lines": "1383-1397",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1383-L1397"
   }
  ],
  "settings": "2ND CORE is a device setting, saved with settings after the menu closes, when playback is stopped. A bad second-core render job or timeout clears ON without asking and schedules a settings save after a page or layer change, entering MENU, or 10 s without input; the flash write waits for the transport to stop.",
  "startup": "A fault confined to the second core alone does not block restoring a valid autosave at the next start; RESTORE LAST must be on and the other boot checks must pass."
 },
 "check_fixes": [
  {
   "error": "1 DATA LOSS (autosave)",
   "fixed": "added button_save entry 'NO AUTOSAVE' with the autosave conditions; felucca.md 'Switch off and on' row rewritten"
  },
  {
   "error": "2 DATA LOSS (project LOAD)",
   "fixed": "encoder_knob3[36] and button_oct_up[8] (project) now say LOAD asks nothing and has no undo; md updated"
  },
  {
   "error": "4 MISLEADING (dialog)",
   "fixed": "modes.dialog and its screen entry now list what asks and what never asks; CLEAR STEP says no undo (verified: no undo call in that branch, ui_input.c:1348-1360)"
  },
  {
   "error": "5 MISLEADING (roll lock)",
   "fixed": "all four encoder_knobN step_roll LOCK entries now state the step-recording condition"
  },
  {
   "error": "6 MISLEADING (screen[54])",
   "fixed": "UPDATE screen entry moved to mode any, calibration distinguished"
  },
  {
   "error": "8 MINOR (overwrite question)",
   "fixed": "button_save[0], encoder_knob4[33], encoder_knob4[36] mention OVERWRITE? on a used slot"
  },
  {
   "error": "9 MINOR (BEAT, LANE FILL)",
   "fixed": "key_e4 BEAT and key_b4 LANE FILL rewritten from ui_tools.c"
  },
  {
   "error": "10 MINOR (copied wording)",
   "fixed": "rewrote key_c4 RANDOM, button_edit[5], modes.song, screen[32] and the FM6 sentence in switching_note"
  },
  {
   "error": "11 MINOR (DEPTH)",
   "fixed": "names the harmoniser keys, not the OCT buttons"
  },
  {
   "error": "12 MINOR (disagreement 3)",
   "fixed": "source_says corrected for DETAIL, TOOLS, SLICES"
  },
  {
   "error": "14 MINOR (citations)",
   "fixed": "disagreement 4 source_ref now cites layer lock (ui_layer.c:43-51) and the update gesture (main.c:215-243)"
  },
  {
   "error": "13 MINOR (part_id_notes)",
   "fixed": "default table described as a best guess, PLAY and REC measured"
  },
  {
   "error": "14 MINOR (citations)",
   "fixed": "encoder_knob2[36], encoder_knob3[33], encoder_knob4[33], encoder_knob4[36], encoder_select[1] now cite the action code"
  },
  {
   "error": "15 MINOR (labels)",
   "fixed": "five cut-off screen labels renamed: PIANO ROLL, DRUM GRID, QUESTION, SEQ TOOLS, EUCLID"
  },
  {
   "error": "3 DATA LOSS (going back)",
   "fixed": "switching_note.lost lists the silent losses on 1.5/1.5.1 and the 1.4.1 preset gap"
  },
  {
   "error": "7 MINOR (stock sector)",
   "fixed": "kept_on_unit now says the loader erases stock's 0xE8000 sector on a first install from stock"
  },
  {
   "error": "cross-map (previous firmware's data)",
   "fixed": "switching_note.overwrites_previous lists each area, when Felucca writes it and what each earlier firmware loses"
  },
  {
   "error": "R2 error 5 (NO AUTOSAVE on SAVE's press)",
   "fixed": "the power-off/autosave fact moved from controls.button_save to a top-level saving_note; button_save now only holds SAVE's real gestures"
  },
  {
   "error": "R2 error 6 (dialog how_to_get_there)",
   "fixed": "modes.dialog how_to_get_there now lists exactly what asks (from every confirm_open call); 'clearing a track' removed (CF_CLEAR_TRK is never raised)"
  },
  {
   "error": "R2 error 9 (LEARN CLEAR)",
   "fixed": "MENU > MIDI > LEARN CLEAR added to the never-asks list (ui_menu.c:548-550)"
  }
 ],
 "refreshed_from": {
  "release": "v1.6",
  "commit": "1727537624390cc3f9c7dff2456b43b3a8edb005",
  "date": "2026-10-16"
 },
 "docs_note": "The wiki has its own history; its supplied snapshots are pinned to their wiki revisions and describe v1.6. The v1.6.1 README and source were read for the new release; no live wiki retrieval was made.",
 "overwrites_without_asking": {
  "action": "New in v1.6.1: with 2ND CORE enabled, a bad render job or timeout clears ON in memory and queues a write to the shared settings pair without a question; the existing settings save waits for playback to stop.",
  "evidence": "read-in-source",
  "source": [
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "167-185",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/hal/fm1_cpu1.h#L167-L185"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/main.c",
    "lines": "230-241",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/main.c#L230-L241"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui.c",
    "lines": "1611-1624",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L1611-L1624"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/project.c",
    "lines": "1242-1258",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L1242-L1258"
   }
  ]
 },
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 JIANT settings byte",
   "fixed": "Added the JIANT 0.7.4 round-trip warning: MIDI OUT replaces prefs2 and a settings write can lose the core choice and other options. Generated switching text untouched.",
   "at": "switching_note.lost"
  },
  {
   "round": 1,
   "error": "1 JIANT settings byte",
   "fixed": "Cited Felucca v1.6.1 flag meanings/import and JIANT 0.7.4 normalization, revision-triggered save and flash-write path.",
   "at": "switching_note.source"
  },
  {
   "round": 1,
   "error": "1 JIANT settings byte",
   "fixed": "Added an owner warning outside the generated block about preferences lost on a JIANT 0.7.4 round trip.",
   "at": "control-maps/felucca.md"
  },
  {
   "round": 1,
   "error": "1 JIANT settings byte",
   "fixed": "Corrected reads_foreign[3], the outgoing-reader summary and firmware_notes[15] claims, with a sourced report of JIANT normalization and its settings-write condition.",
   "at": "refresh/work/felucca.storage.json"
  },
  {
   "round": 1,
   "error": "2 Failed-boot condition",
   "fixed": "Stated that an early failed boot silently prevents the next boot from starting the second core despite ON, and cited the guard and 30-second threshold.",
   "at": "modes[42]"
  },
  {
   "round": 1,
   "error": "3 Beta preference inversion",
   "fixed": "Qualified the OFF default and stated that beta OFF maps to release ON (BETA), while beta AUTO maps to release OFF.",
   "at": "modes[42]"
  },
  {
   "round": 1,
   "error": "2 Failed-boot condition",
   "fixed": "Stated that an early failed boot silently prevents the next boot from starting the second core despite ON, and cited the guard and 30-second threshold.",
   "at": "controls.screen[42]"
  },
  {
   "round": 1,
   "error": "3 Beta preference inversion",
   "fixed": "Qualified the OFF default and stated that beta OFF maps to release ON (BETA), while beta AUTO maps to release OFF.",
   "at": "controls.screen[42]"
  },
  {
   "round": 1,
   "error": "2 Failed-boot condition",
   "fixed": "Added the silent one-core boot after a failure within 30 seconds to the 2ND CORE row.",
   "at": "control-maps/felucca.md"
  },
  {
   "round": 1,
   "error": "3 Beta preference inversion",
   "fixed": "Added both beta-to-release value mappings to the 2ND CORE row.",
   "at": "control-maps/felucca.md"
  },
  {
   "round": 1,
   "error": "3 Beta preference inversion",
   "fixed": "Applied the same default exception and startup condition to the repeated 2ND CORE explanation.",
   "at": "disagreements[7].source_says"
  },
  {
   "round": 1,
   "error": "3 Beta preference inversion",
   "fixed": "Qualified the settings default and recorded direct reuse of the inverted beta bit without a format migration.",
   "at": "refresh/work/felucca.storage.json.changes[0]"
  },
  {
   "round": 1,
   "error": "4 Wiki wording",
   "fixed": "Replaced snapshot/process wording with the wiki’s Menu page; kept its pinned evidence.",
   "at": "disagreements[7]"
  },
  {
   "round": 1,
   "error": "4 Wiki wording",
   "fixed": "Removed process wording from the disagreement and footer; refer to the wiki’s Menu page and the project’s wiki.",
   "at": "control-maps/felucca.md"
  },
  {
   "round": 1,
   "error": "5 Copied light wording",
   "fixed": "Rephrased the startup/idle light description in Les’s words and retained the contained-fault condition.",
   "at": "lights.key_lights[18]"
  },
  {
   "round": 1,
   "error": "5 Copied light wording",
   "fixed": "Rephrased the same inherited startup-light wording on the owner page.",
   "at": "control-maps/felucca.md"
  },
  {
   "round": 2,
   "error": "1 JIANT reset trigger too narrow",
   "fixed": "Broadened the owner-page warning to all flags that make prefs2 exceed 3: CHORD ENTRY ADD, HELP ON, SELECT other than BPM, SCREEN WAKE PANEL or 2ND CORE ON; reread JIANT settings_persist.c:52-53@de2a4cb and Felucca ui.c:77-84@a53ecf4.",
   "at": "control-maps/felucca.md:185"
  },
  {
   "round": "2diu.2.13",
   "error": "SONG PLAY said to start from the selected section",
   "fixed": "PLAY (and OCT+) on SONG start the song at its first section: chain_start sets chain.row = 0 and nothing on the start path reads ui.song_row; read in source at v1.6.1 (song_chain.c:136-153, seq.c:821-825, ui.c:483-495, ui_input.c:1076-1079,1678-1684). Found by the wave-3 Rainbow Mode checker.",
   "at": "controls.button_play_stop[1]; control-maps/felucca.md:134"
  },
  {
   "round": "2diu.2.13-r2",
   "error": "MAPCHECK-FELUCCA-SONG-r1 1-4 (MINOR)",
   "fixed": "PLAY on SONG stops any playback or count-in first and refuses an empty song or an empty slot (ui_input.c:1681-1682,1077; project.c:1199-1207; ui.c:486-494); OCT+ on SONG (button_oct_up[10]) now says it plays the song (ui.c:1775-1776,1795; ui_input.c:1076-1079,1719-1720), label PLAY SONG; citations gain project.c:1194-1240 and seq.c:1308-1316.",
   "at": "controls.button_play_stop[1]; controls.button_oct_up[10]; control-maps/felucca.md:134"
  },
  {
   "round": "2diu.2.13-r3",
   "error": "MAPCHECK-FELUCCA-SONG-r2 1-2 (MINOR) and its older MIDI LEARN finding",
   "fixed": "OCT+ on SONG gives PLAY's refusals (ui_input.c:1078; ui.c:486-494; project.c:1199-1207) and cites its on-release action (ui_input.c:1150-1166,1516); MIDI LEARN's OCT+ DONE says a page's own OCT+ job (SONG) runs first (ui_input.c:1719-1728; midi_learn.c:92-103).",
   "at": "controls.button_oct_up[10]; controls.button_oct_up[17]; control-maps/felucca.md:157"
  },
  {
   "round": "2diu.2.13-r4",
   "error": "MAPCHECK-FELUCCA-SONG-r3 1 (MISLEADING) and 2 (MINOR)",
   "fixed": "OCT+ and OCT- during MIDI LEARN: on the seven action pages (ui.c:1767-1790) they do that page's own job, or nothing when nothing is picked (ui_input.c:1719-1728,1721-1725,1121-1127).",
   "at": "controls.button_oct_up[17]; controls.button_oct_down[22]; control-maps/felucca.md:157"
  },
  {
   "round": "2diu.2.13-r5",
   "error": "MAPCHECK-FELUCCA-SONG-r4 1 (MINOR, citation)",
   "fixed": "Cited ui.c:1793-1798 and ui_input.c:1059-1061 for 'or nothing when none is picked'.",
   "at": "controls.button_oct_up[17]"
  }
 ]
}