LED Key Zones or What Happens When You Are Bored

One of the things I have missed from “the program that shall not be mentioned”, is the keyboard split and layer indication. Some of the music I play has some complex splits and layers going on, it would be nice if I could get a reminder of where they are, especially when the songs are recently learnt.

I did like the look of the NI Kontakt Komplete Kontrol as it has LEDs that can indicate the zones, but more keyboards, the wife would leave me. I am happy with the boards I have, for live use and at home, so an idea popped into my head. Off to AliExpress……

I bought a bundle of 10, RPi Pico boards (small but capable development boards) for 15 quid, then a string of Neopixels, again about 15 quid. The neopixels were 144 pixels per metre, which was pretty close to twice what I needed. When they turned up it was 72 pixels per 0.5m with a joint in the middle. To be fair the blurb did say there was a joint but it does remove the linearity every 500mm.

So the plan is to build a prototype on my ageing Kurzweil K2500, of a LED strip that I can use to see the zones. I am not planning to integrate it into the K2500, but it must fit to any board. Secondly it must work with Gig Performer and not destroy any of my rig functionality if the Led strips are not fitted. At this point I will say that the K2500 and my Korg Triton both have GP patches that simply make them simple controllers, I do not rely on splits/zones or sounds from the keyboards, all zone control is from within GP.

A bit of programming later ……

I now have the first prototype fitted to the K2500 (ignore the spare wires). Using every other LED was almost spot on, but when it came to the join then it ran off the key alignment. I decided to break the join and remake it to get the alignment back, this involved lighting the two adjacent LEDs across the new joint, so the note to LED mapping was now slightly complicated.

After a couple of tries I ended up with the 88 notes covered in three sections of LED’s but the nature of the neopixels is, they all just work as a linear array regardless of where the joints are. The software on the RPi Pico can deal with the complication. Some basic testing looked good so I ploughed on.

On the Korg Triton the keys are fractionally narrower and a slightly different approach was needed to hold the alignment, this time the neopixels were cut into octave lengths (23 pixels) with each odd position used, this limits the runoff and the difference is adjusted at the join every octave, so helping to keep the alignment.

The octave splitting/joining technique will work for any size board and provides a consistent (although not linear) note to LED mapping regardless of size. The LED strips have a fairly low tack self adhesive strip on the back and can easily be removed with no damage. So, I will redo the K2500 at some point, using the same scheme, but for now the RPi Pico can deal with the differences.

So with both my keyboards retro-fitted with “KeyZone”, it was time to delve into GP and get it working. It turned out to be very simple and does not require any scripting. The following shows the various zones being selected as I move through the song parts. A short video is here,

I decided to organise the colours, based on type of sound or source, White Piano, Orange Mellotrons, Yellow Sequencers and Arps, Green Pads, Purple Organs, Red hard leads, Less Red soft leads, and Blue Percussive and Chimes. I was pretty pleased with the results.

Global Rackspace

The RPi Pico is powered by USB and has a USB-MIDI interface that can be seen as a MIDI device within Gig Performer. The first thing was to get note on and note off to go to the Led strips, regardless of patch and zone and very importantly transpose. This would be optional if you didn’t want to see any key press indication.

In the global rackspace I added this straightforward wiring. This simply routes everything from the Rig Manager keyboard alias’s MIDI In to the MIDI Out, one per keyboard.

The settings on the MIDI In blocks are identical for both units. They just filter out everything except note on and note off messages. The “Ignore global transpose” must be selected.

There is one more piece to be completed in the MIDI Out blocks. SysEx messages are added and the “Reset on deactivation” option must be selected. Rechannalising does not matter as the LED strip responds in omni mode. The information in the SysEx message is slightly different in each block depending on the keyboard it is fitted to. This is used to initialise the units when loading a gig file and to turn off the units when closing a gig file.

Local Rackspace

The implementation here was even more straightforward than the global rackspace. Two MIDI out blocks are added, one for each keyboard. No wiring is needed to these blocks.

Each output block is set up with “Reset on deactivation” selected and a SysEx message added. The SysEx message is sent when the rackspace is selected. Each SysEx message is slightly different and is used to define the zones used on that keyboard.

No alterations were made to my existing Rackspace wiring.

Rackspace Variations

In order to turn on and turn off the zones a number of CC messages can be sent to the RPi Pico, this allows various zone combinations to be selected as the rackspace variations are changed. A single widget one per keyboard is added to the panel and mapped to the CC message that enables or disables the zones. Optionally a widget per zone could be added to give a simpler user interface, but it is far more complex graphically but this is achieved without scripting. One interface per keyboard is required.

Cool Features

When a key is pressed, the LED for that key brightens, so what……

The note on brightness can be selected, this means that the note could be dimmed or set to go off, when pressed, or by setting the note on brightness to the same as the note off brightness the note indication is effectively disabled.

Keys held under the hand, when a variation or song part changes, stay at their current colour and brightness until released.

Layers can be used (multiple zones on the same note). When a zone is layered on an existing zone it can be placed on top or underneath the current zone. When layered, the zone on top note off colour and brightness is displayed. When keys are pressed, the colour and brightness of the lower zone note on is displayed.

The last display is always turned off when switching away from a rackspace or song, so that any rackspaces or songs that have no “KeyZone” information are not not left with confusing or misleading displays. The displays will blank when quitting Gig Performer.

Parts Required

  • Raspberry Pi Pico or clone one per keybed. I used a full sized board with the debug port, but for final use I am going to buy the small form factor type.

  • Neopixel strips 144 LEDs per Meter. 500mm is sufficient for a single 37 note key bed. A 49 note and an 88 note keybed can be constructed with 2 meters of neopixels. I used the IP67 with a silicon cover, but they are harder to work with. (DC5V / WS2812B / Black / 1M 144 IP30)

  • USB cable to connect suitable for the RPi Pico.


Tidy up the wiring and 3D print a case,

If anyone wants to have a go at building one or more of these, I am happy to provide more information. The RPi Pico software binary is available FoC with the usual caveats.


Looks like great fun with colourful showing results :wink:

1 Like

Nice project! Had something similar in mind, but time, time, time…


Fantastic application of tech, love it!

1 Like

I love this more than you can imagine. This is way beyond my tech level and i tried to do something similar but withing gig performer

But would love to do this…

Wow…nice project!

1 Like

Glad you like it. Happy to walk you through how to get it up and running. The first port of call is to look at the keyboards you want fit it on. All the ones I have have will allow the LEDs to fit easily behind the keys without interfering with operation of the keys.

Measure one octave of keys ideally from a white/white split point to a white/white split. E/F or B/C will work. I will keep a list of keyboards and sizes just for information. Once we have the key sizes, the next thing is to check that a 144L/M will work without too much run out over one octave. The pitch of the LEDs on the strip is 6.94mm, by actual measurement I get 6.9mm or 13.8mm every other LED centre.

One octave measurements of the keybeds I had to hand
Kurzweil K2500 = 165mm / Pitch = 13.75mm / Run out from octave centre +0.3mm
Korg Triton = 161mm / Pitch = 13.42mm / Run out from octave centre +2.28mm
Moog Voyager = 163mm / Pitch 13.58 / Run out from octave centre +1.32mm
Fatar TP9 keybed = 165mm / Pitch 13.75mm / Run out from octave centre +0.3mm

Although I have realised that, the run out is not as important as you may think when it is just being used for zones and not as a teaching aid.

I will put something together on the construction detail.


Nice! I have a Native Instruments Keyboard, and they have builtin LEDs for each key, maybe GigPerformer could be used to display configured zones in a similar way, without an RPi? As I’m not using zones often, I’ll not go into these details, though…

I don’t know, as the NI board was too rich for me to justify. If the LED’s can be controlled from an external device, I’m sure it would be straight forward.

I had a quick look through the NI Kontakt Komplete Kontrol manual and could not find any reference to allow control of the LEDs externally. It would appear that only the zones set in the keyboard will work with the lights. But is does beg the question could you set up the zones on the keyboard externally (via sysex??), and do this from GP?

I was in contact with NI and there is no chance to set that dynamically via SysEx.
Maybe with Apple Script or Similar on Windows you can remote control the Komplete Software Part wich defines the Zones.

But I never missed lights which show me the zones, I know what and where to play.

Construction - Pt. 1


First separate the LED strip factory join at 500mm using a soldering iron or SMT hot air tool. Remove the cables from the start and end of the strip, noting the positions and colours of the wires. The strips I use have an arrow and the LEDs are numbered from 1-72. The LED strips can be fitted to the keyboard with either the cable connection at the left or at the right depending on the available space on the keyboard. Use the table below to identify the segments required.

   Keybed   |  Cable  |  LED Segments (Arrow left to right)  |  Total required LEDs  |
C-C Keybeds |  Left   |   23, (23 segments to fit) , 23, 1   | 72, 96, 120, 144
37,49,61,73 |  Right  |   1, 23, (23 segments to fit), 23    | 
E-G Keybeds |  Left   |   15, 23, 23, 23, 23, 23, 15         | 145
76          |  Right  |                                      |
A-C Keybeds |  Left   |   5, 23, 23, 23, 23, 23, 23, 23, 1   | 167
88          |  Right  |   1, 23, 23, 23, 23, 23, 23, 23, 5   |

Cutting for ALL note C-C keybeds

Assuming the LEDs are numbered 1-72, to minimise the waste LEDs cut at the following points:

  1. Between LED 1&2, very close to LED 1
  2. Very close on both sides of LED 25 and discard LED 25
  3. Very close on both sides of LED 49 and discard LED 49

This provides 3 x 23 LED segments and 1 x 1 LED segment. This is enough for a 37 note keyboard from a single 500mm length and it maximised the copper for soldering at the joints. Repeat for the second 500mm length if fitting to 49, 61 or 73 note boards.

Cutting for E-G 76 note keybeds

Assuming the LEDs are numbered 1-72, to minimise the waste LEDs cut at the following points:

  1. Very close on both sides of LED 24 and discard LED 24
  2. Very close on both sides of LED 48 and discard LED 48
  3. Between LED 71&72, very close to LED 72 and discard LED 72

Repeat for the second 500mm length. On a new 500mm length

  1. Very close on both sides of LED 16 and discard LED 16
  2. Between LED 31&32, very close to LED 31

This provides 6 x 23 LED segments (one not used) and 2 x 15 LED segments…

Cutting for A-C 88 note keybeds

Assuming the LEDs are numbered 1-72, to minimise the waste LEDs cut at the following points:

  1. Between LED 1&2, very close to LED 1
  2. Very close on both sides of LED 25 and discard LED 25
  3. Very close on both sides of LED 49 and discard LED 49

Repeat for the second 500mm length. On a new 500mm length

  1. Between LED 5&6, very close to LED 5
  2. Very close on both sides of LED 29 and discard LED 29

This provides 7 x 23 LED segments, 2 x 1 LED segment (one not used) and 1 x 5 LED segment…


Measure three octaves of keys ideally from a white/white split point to a white/white split. E/F or B/C will work. Then divide this measurement by 3 to get the size of one octave. This is done to improve the measurement accuracy of a single octave.

Joining the Segments

On a flat and solid surface (ideally longer than the keybed) mark a line. Mark the centre of the line. Then mark either side of the centre at intervals corresponding to the octave measurements made for the keybed it is to be fitted to.

Start by placing one of the 23 LED segments on the line, with the middle LED placed centrally about the centre mark. Fix this section in place with tape, ensuring the arrows are pointing left to right. The LED numbers are not significant. At either end of the placed LED strip, add another LED strip, with the middle LED placed centrally around the next corresponding octave mark, ensure the arrows are all pointing left to right and fix with masking tape.

If the surface is large enough, repeat for each section. Where the strips meet, if there is an overlap, trim the overlap so the ends of the sections lay flat. If there is a slight gap this can usually be bridged when soldering or a short length of wire can be added.

For the short sections add the same space between LED centres as at the join used between the 23 LED segments.

Check that all the arrows point in the same direction

1 Like

@pianopaul ,

This is possible given the effort of building a vst that could be hosted inside in GP that uses the NI Komplete Kontrol SDK to set the zones, etc… I contacted NI regarding this a couple of years ago and did get the SDK, but time has not been on my side for that project.