Page 1 of 1
Posted: 04-04-18 8:00 pm
by ojacques

Following the great work from anykey who came up with a first version for Komplete Kontrol MK1, Jason Bret who figured out more details on KK mk2 USB protocol, and Nicholas's support for custom lighting schemes, I wrote Synthesia Kontrol to use Synthesia in conjunction with Native Instruments Komplete Kontrol keyboards and their light guides.
I did this is for my son who started to be interested in keyboard playing through Synthesia Youtube videos!

It supports:
- Guiding lights during playback and different learn modes
- Different colors for left / right hands
- Different color for thumb

There are still rough edges and bugs here and there, which I probably need to work on with Nicholas, but you can see work in progress and code here:

Preview video:

Hopefully this can be useful for some of you too and be the base for native support of Komplete Kontrol Keyboards in Synthesia!

Posted: 04-04-18 11:37 pm
by Nicholas
That looks really nice!

Posted: 04-10-18 7:01 pm
by ojacques
Thank you for the nice words @Nicholas.

There is a version (Windows only for now) one can download:

I'm looking for testers for Komplete Kontrol MK2 25 and 88 keys, as well as KK MK1. Just reach out in this thread.
I don't expect MK2 25 or 88 keys to work yet. Nor KK MK1: I need to work on that. This is why I'd need testers...

Posted: 07-27-18 8:38 am
by a1vv
I have a KK S88 mk1, and I've been looking for a way to have the lights on my keyboard only light up when I press on the corresponding keys - as in having all the keys black except the ones I'm pressing down. I've tried both yours and Anykey's Synthesia-Kontrol, although I haven't gotten them to work. When I run anykey's '' it simply returns "No komplete device found", even though the keyboard is plugged in and works. Even if I were to get it to work with my KK, both of these programs are built to work with synthesia, which I don't use. It seems to me like it would/should be possible to write something that allows for the keylights to be triggered by the MIDI notes sent out by the keyboard.

I would love to help test SynthesiaKontrol out on my kk mk1 though, if that would be helpful. I'll mess around a bit and see if I can get something to work for me, but I'm not that good at python so we'll so how that goes.

EDIT: I found the product key for my keyboard (1410) and changed the product ID in anykey's code to 0x1410. Now it recognizes my keyboard when I run

Posted: 08-12-18 6:42 am
by a1vv
I managed to get what I wanted to work, as I posted on the NI-forums: ... 806/page-2

I'll see if I can get your code to work for my keyboard, I think I'd only have to change the offset and the way it sends colors, but I'll give it a shot.

Also, I think I figured out how to calculate the note offset, (offset=108-numkeys+1). The offset for my S88 was 21, and the offset for a S61 was 48. 108-88+1=21, 108-61+1=48. Could be useful when making a program like this easier to use, instead of finding out the offset yourself you'd only have to input the number of keys on the keyboard.

Posted: 08-12-18 6:58 am
by a1vv
I got it to work! I modified your code and made a version that should work with all MK1 keyboards, as long as you change the product id and input the right number of keys.

Posted: 10-12-18 9:07 pm
by Nabume
Thank you so much for developing this! It is wonderful, omg!

I have the S88 Mk2, here's the HID addresses incase anyone else wanted them :, 0x1630)
and the offset :
offset = -21 # To change when keyboard is not 88 keys
Anyone else with an 88 keyboard will need to search the code and replace "61" with "88"

Additionally, I've been trying to learn & play claire de lune with this script. Its immensely helpful and frustating at the same time (because, debussy was a god among mortals)

The reason why it's frustrating is because the 'note-off' message from the MIDI Keyboard triggers the lights off on the keyboard -- even If the upcoming synthesia chord has the notes of the previous chord in it. In claire de lune, sometimes all 10 fingers are on the keyboard, but during a chord change, the releasing of some of the notes triggers the notes off, even though the upcoming chord has those notes? Does that make sense? Im wondering if you can help me come up with a solution! Otherwise, this script is amazing :)!

Posted: 03-24-19 6:52 pm
by ojacques
Thank you all for the very nice feedback and the willingness to help. a1v, nabume, your comments / your code helped me for a new release.

So, I have just released a new version which should support KK MK1 and MK2, 61 and 88 keys. It is only tested with KK MK2 88 keys, on Windows though.
* Code:
* Releases/download (for Windows):

Posted: 03-31-20 9:38 am
by Naycin
I really appreciate there is a solution to create lights for Synthesia on the Kontrol keyboard.

I'm looking for help to get this feature working. I've come to a problem i need to solve. Presently stuck at the "pip install hidapi" stage. Attached screenshot. Terminal response says -bash: pip: command not found
Can anyone help?


Posted: 03-31-20 10:04 am
by Naycin
I found success by adding 3 on the command line to make "pip3 install hidapi"

Posted: 01-13-23 10:12 pm
by tillt
Here is another project supporting the Komplete Kontrol S-series; Komplete Synthesia.

Komplete Synthesia works on macOS 11.0 and beyond.
SynthesiaRunning.png (43.85 KiB) Viewed 22813 times
Action.png (935.8 KiB) Viewed 22813 times
See for more.

Download the latest release from

Give it a try!

Posted: 02-04-23 5:26 pm
by tillt
Oh, now it additionally supports Synthesia application window mirroring onto the Komplete Kontrol LCD screens.

See it in action;


Posted: 02-09-23 2:41 pm
by Nicholas
Wow, I didn't realize they offered so much control (kontrol? :lol: ) over the device to do that sort of mirroring. Nice work on all of that!

Posted: 04-12-23 2:31 pm
by Fannon
Really impressed with the screen mirroring. Just curious - how did that work? For sure not via MIDI interface 8-)

Thanks for putting this script out there. I used to have a Komplete Kontrol Mk2 (sold it recently) and used this a bit. But now I've got a LinnStrument and took your project as inspiration to create something similar for it.

Posted: 09-22-23 1:07 pm
by tillt
Just curious - how did that work? For sure not via MIDI interface 8-)
Hehe - no, not via MIDI. The screen is captured image by image using the Core Graphics API macOS offers. Those images are then converted into something the Komplete Kontrol can display. The converted image data then is transferred via USB bulk transfer to the controller. KompleteSynthesia operates at 24 images per second while it could do a lot more, at least on my machine.

Posted: 11-29-23 6:15 pm
by tillt
Extreme Setup for the LoLz

Display: Philips BDL8470QU/00 - 84" / 213cm
Keyboard: Komplete Kontrol S88 MK2

Posted: 11-30-23 2:11 pm
by Nicholas
This is one of my favorite ways to use Synthesia.

84" is larger than I've ever attempted, but if you can find a way to mount it on some sort of arm or tilting stand, you can get the bottom lip of the screen just above the tops of the keys. Next, get everything aligned using the "Custom" keyboard size mode (in the magnifying glass popup menu). (That mode disables snapping to the nearest key so you can align things just right.) Finally, use the little square that pops out when you pause the song to hide the on-screen keyboard.

At that point the on-screen notes fall directly to the real, physical keys and it's kind of a magical experience.

Posted: 12-01-23 9:04 am
by yabix
Running SynthesiaKontrol.v1.4 + LoopBe1 v1.6 + Windows 11.

LoopBe detection fails:

Connecting to Komplete Kontrol Keyboard
Opening Keyboard device...
Turn off lights for all notes
Connected to Komplete Kontrol!
Turn off lights for all notes
Opening LoopBe input port
Error: can't find 'LoopBe' midi port. Please install LoopBe1 from (Windows) or name your IAC midi device 'LoopBe' (on Mac).
Traceback (most recent call last):
File "C:\Users\jacqu\AppData\Local\Programs\Python\Python310\Lib\site-packages\cx_Freeze\initscripts\", line 130, in run
File "C:\Users\jacqu\AppData\Local\Programs\Python\Python310\Lib\site-packages\cx_Freeze\initscripts\", line 16, in run
File "", line 245, in <module>
NameError: name 'exit' is not defined

Version 1.3 works as intended.

Is there a way to get developer support to intergrate it directly in Synthesia? Would be a very good investment.