Among the off-the-shelf solutions there are controller boxes such as Razer Chroma, but it is quite big and has the proprietary protocol limitation.
Closest to what I needed is a small box with some peculiar use of a barrel jack connector, from this Aliexpress seller : https://www.aliexpress.com/item/1005003390054760.html. They use the barrel jack to output the data, corresponding to the wiring of the provided LED strip. The box uses Adalight protocol and is much smaller than those from the PC hardware vendors.
I ended up hacking a small circuit using an Arduino Nano, while the delivery was on its way. It works on the breadboard so far.
Tested the good working of both solutions using Prismatik (an Ambilight-style renderer for Linux), which was satisfactory. Windows users can use Hyperion.
Custom control from software
The following involve the understanding of communication protocols and a bit of programming knowledge. This is why I let the answer here, because it mixes coding (would fit on StackOverflow), electronics (perhaps better for EE Stack Exchange), it is a bit of a mixed bag.
I have not found any standalone library that implements the following so far. Likewise, documentation of the protocol is hard to come by without digging into the source code of Prismatik or similar. The information below is provided to compensate this.
My small experimental program opens the serial port device associated with the controller at 112500 bauds. COM1 or similar on Windows, /dev/TTYUSB0 or similar on Linux. On some Linux distributions like Ubuntu, make sure to add yourself to the dialout group so that you have the permissions to access the serial port, for instance.
First, the controller responds with the "Ada\n" string (4 characters in total), you need to read those from your code before anything else or the lights will not show. You can also confirm that your device is your actual controller with the appropriate firmware, and not something different.
Over the line, I send the following bytes to change the colors:
0 : character 'A'
1 : character 'd'
2 : character 'a'
3 : hi (Number of LEDs to send - most significant byte)
4 : lo (Number of LEDs to send - least significant byte)
5 : checksum
6 : LED 1 red
7 : LED 1 green
8 : LED 1 blue
9 : LED 2 red
10: LED 2 green
11: LED 2 blue
.... and so on, you need to send the exact number of values
for the number of LEDS you have passed at offsets 3 and 4.
Here is an example in C++ on how to calculate hi, lo, and checksum. The number of LEDs is a 16-bit value, that must be split over two bytes 'hi' and 'lo'. You can use a different language to implement this such as Python, maybe more convenient for tinkering and does not require to compile the program.
int num_leds = 16; // Adjust to your situation
int hi = ((num_leds - 1) >> 8) & 0xFF;
int lo = (num_leds - 1) & 0xFF;
int checksum = hi ^ lo ^ 0x55;
Details on the Arduino-based solution
Beware, the explanations deal a lot with electronics tinkering. You can use those and prototype this on a breadboard without soldering. Be really careful of not messing up polarity of components, or you can fry those! Use those instructions at your own risk.
I have flashed the Adalight firmware on the Nano available here:
https://github.com/hyperion-project/hyperion.ng/blob/master/assets/firmware/arduino/adalight/adalight.ino. Use Arduino IDE to flash the board.
Note : should be customized with the number of LEDs you have on your strip / line / whatever.
Then link the 5V / red wire to Arduino 5V, ground / white to GND, Data / green to D6 pin with a 470 ohm resistor in between.
If there are a lots of LEDs, there should be an external power supply attached between 5V and GND directly with a 1000µF capacitor in between.
I tested with a 16-led ring and the USB power was sufficient, even at full brightness, did not need to use the external power supply and the capacitor.
By using some standardized electronics headers, it is easy to reproduce the 3-pin connection found on motherboards. Otherwise, many daisy-chainable addressable LED modules use 3-pin JST SM connectors. A female pigtail wire of the sort can be used as the source of the LED installation.
SerialPortclass to talk to the Arduino over COM. Lots of good suggestions above if you want something "ready made" but this is extremely easy to DIY anyway. – Romen Jan 26 '24 at 22:13