# ParVagues v2 map for a Launch Control XL 3 Custom Mode

Generated from `tools/lcxl_grid.py` — the one authored table. Do not hand-edit;
regenerate. Enter these CC numbers in Novation Components, per control,
left to right. Channel 1 for everything (SuperCollider's MIDIFunc.cc binds
with no channel filter, so only the number matters).

| physical row | col | factory CC | **set CC to** | changed? |
|---|---|---|---|---|
| Encoder row 1 (top) | 1 | 13 | **13** |  |
| Encoder row 1 (top) | 2 | 14 | **14** |  |
| Encoder row 1 (top) | 3 | 15 | **15** |  |
| Encoder row 1 (top) | 4 | 16 | **16** |  |
| Encoder row 1 (top) | 5 | 17 | **17** |  |
| Encoder row 1 (top) | 6 | 18 | **18** |  |
| Encoder row 1 (top) | 7 | 19 | **19** |  |
| Encoder row 1 (top) | 8 | 20 | **20** |  |
| Encoder row 2 (middle) | 1 | 21 | **29** | **yes** |
| Encoder row 2 (middle) | 2 | 22 | **30** | **yes** |
| Encoder row 2 (middle) | 3 | 23 | **31** | **yes** |
| Encoder row 2 (middle) | 4 | 24 | **32** | **yes** |
| Encoder row 2 (middle) | 5 | 25 | **33** | **yes** |
| Encoder row 2 (middle) | 6 | 26 | **34** | **yes** |
| Encoder row 2 (middle) | 7 | 27 | **35** | **yes** |
| Encoder row 2 (middle) | 8 | 28 | **36** | **yes** |
| Encoder row 3 (bottom) | 1 | 29 | **49** | **yes** |
| Encoder row 3 (bottom) | 2 | 30 | **50** | **yes** |
| Encoder row 3 (bottom) | 3 | 31 | **51** | **yes** |
| Encoder row 3 (bottom) | 4 | 32 | **52** | **yes** |
| Encoder row 3 (bottom) | 5 | 33 | **53** | **yes** |
| Encoder row 3 (bottom) | 6 | 34 | **54** | **yes** |
| Encoder row 3 (bottom) | 7 | 35 | **55** | **yes** |
| Encoder row 3 (bottom) | 8 | 36 | **56** | **yes** |
| Faders | 1 | 5 | **77** | **yes** |
| Faders | 2 | 6 | **78** | **yes** |
| Faders | 3 | 7 | **79** | **yes** |
| Faders | 4 | 8 | **80** | **yes** |
| Faders | 5 | 9 | **81** | **yes** |
| Faders | 6 | 10 | **82** | **yes** |
| Faders | 7 | 11 | **83** | **yes** |
| Faders | 8 | 12 | **84** | **yes** |
| Button row E (upper) | 1 | 37 | **41** | **yes** |
| Button row E (upper) | 2 | 38 | **42** | **yes** |
| Button row E (upper) | 3 | 39 | **43** | **yes** |
| Button row E (upper) | 4 | 40 | **44** | **yes** |
| Button row E (upper) | 5 | 41 | **57** | **yes** |
| Button row E (upper) | 6 | 42 | **58** | **yes** |
| Button row E (upper) | 7 | 43 | **59** | **yes** |
| Button row E (upper) | 8 | 44 | **60** | **yes** |
| Button row F (lower) | 1 | 45 | **73** | **yes** |
| Button row F (lower) | 2 | 46 | **74** | **yes** |
| Button row F (lower) | 3 | 47 | **75** | **yes** |
| Button row F (lower) | 4 | 48 | **76** | **yes** |
| Button row F (lower) | 5 | 49 | **89** | **yes** |
| Button row F (lower) | 6 | 50 | **90** | **yes** |
| Button row F (lower) | 7 | 51 | **91** | **yes** |
| Button row F (lower) | 8 | 52 | **92** | **yes** |

40 of 48 controls need changing; 8 already match.

## Why bother, when the driver also works

Two different jobs. A custom mode plays the corpus with NOTHING running —
no process to die mid-set — but cannot paint: colour and the OLED exist only
in DAW mode (tested). The driver gets paint but is one more moving part.

Firmware 1.1 makes them complementary rather than exclusive: *"The Mode
button can now be held to function as a momentary button, allowing for faster
Custom Mode switching."* So the custom mode is the fallback you reach for when
the instrumented path fails, and it costs one Components session to have.
