The Problem
I wanted the Dual Infographic + GIF mode on my NZXT Kraken 2023 Elite in my Linux environment but nothing I tried worked. liquidctl lists this cooler as NZXT Kraken 2023 Elite (broken). CoolerControl, with the CoolerDash plugin, could drive the screen but could not stream a GIF and put that overlay on it. So I created a small service that does.
The Journey
The panel is 640×640. A full frame at 32 bits is 1.6 MB. The first prototype used liquidctl to send frames that size and managed about 2 fps. It was basically a slideshow!
In Windows, CAM already plays these GIFs smoothly, so I knew it must be possible. A friendly AI steered me towards capturing the USB data directly from NZXT’s CAM software. It knew the picture was Q565, but not which headers to send. That’s what the capture was for.
I installed Wireshark, ticked USBPcap in the installer. Through a bit of trial and error, watching which devices were receiving traffic when CAM was running then filtering the traffic to usb.device_address == <ADDRESS> && usb.endpoint_address.direction == OUT I captured enough information for an AI to understand the traffic and build a new prototype.
The first prototype was in Python, using liquidctl, but I moved it to Rust because it already had a crate for q565 encoding. No point reinventing the wheel. An AI agent wrote the code - it wouldn’t have been built otherwise - I’m an experienced software engineer so I like to think I kept it under control.
Once everything was working I noticed memory usage was high. Every frame is cropped to a square, scaled to 640×640, and kept as RGB. That is about 1.2 MB a frame. With nine GIFs loaded to test the slideshow, 581 frames in all, it was using about 650MB of RAM! It wasn’t a leak. Every frame of every GIF was decoded on startup. I changed it so the one on screen stays loaded, and the next one is decoded while that image is up.
Where to find it
It’s available on GitHub at github.com/behearn/kraken-gif-and-overlay . The README has the full list of switches. I’ve only tested it on the 2023 Elite. That’s the only Kraken I have.