NZXT Kraken coolers are awesome for CPUs or GPUs. Their CAM software on the other hand is slow, bloated and possibly stealing your data. Thankfully, there are open source alternatives available.
The option that I will walk you through using is a command line tool that doesn’t need to be constantly running in the background, and doesn’t require any internet connection to work.
APRIL 2019 UPDATE: liquidctl now has the best support all around and automated windows builds! Use this and forget about everything below!UPDATE: I have created a standalone executable for Windows for those that do not want to bother with the steps below. It is available on github. (For x61 and other second gen users, you will still need to update the driver as part of step five below.)
There are a few different libraries to control third generation coolers ( Kraken x62, x72, x52 and x42 ). The only one that supports fan control for second generation ( Kraken x61, x41 and x31 ) as well as third on Windows that I have found is liquidctl (as of 2/6/2019 still in an experimental dev branch, can check on the issue directly for updates ).
Please note: none of this is my own software, and this is only a guide based on my own experience. This is fully “as-is”, no warranty or guarantee it won’t harm your hardware or other software.
I am going to get a little more detailed for these steps than usual, as I want to make this easy for anyone’s skill level. For power users, here are the abbreviated steps:
- Download and install Python 3.7+ x86 version
- Create Python virtual env
- run command
python -m venv venv
- Activate it
venv/Scripts/activate.bat
- run command
- Downloaded libusb
- extracted the files from
MS32/dll
into thevenv/Scripts
folder - You may need an extractor program like 7zip
- extracted the files from
- Downloaded liquidctl
- Make sure you are in the activated venv
pip install liquidctl
- Kraken x61 / gen two users only – Downloaded zadig and install
libusbK
driver for the Kraken device- WARNING – CAM will no longer be able to use this device unless you uninstall this new driver
- Select Options > List all Devices
- Find the device “690LC” in the dropdown list, should have USB ID of 2433 B200
- Run liquidctl to change your fan speed!
liquidctl set fan speed 60
As of time of writing their software does not by default include the code for changing the logo color for the second generation Krakens (x61, etc..), but I’ll show you how to add it easily. Checkout the liquidctl repo, that now has great support for older devices, as well as some EVGA and Corsair support!
Download Python
For those of you who do not already have it, we will need to make sure there is a version of Python 3 on your system. Go to the official download page from the Python Software Foundation at https://www.python.org/downloads/windows/. Click on the top link for “Latest Python 3 Release” (version may be newer than shown below.)
Scroll down to the bottom of the next page, and select the “Windows x86 Executable Installer”. Yes, install the x86 version, aka 32-bit , even if you have 64-bit Windows. If you do happen to download and install the x86_64 version instead, you just will have to use a different libusb dll (thankfully included in same download bundle).
After the exe is downloaded, double click on it, and lets make a few changes during the installation to make your life easier. First make sure to add Python to PATH. This will make it possible to run python
from the command line without specifying the full path to it’s executable. Then click on “Customize installation”.
Next page we don’t need to touch anything. If you are only going to use python for only this, you can remove Documentation
and Python test suite
and it will still work fine and reduce bloat.
Final page we just want to make sure it’s installed the program files directory instead of the obscure user app dir that it uses by default. Then hit install.
You should now be able to open python easily in the command prompt. You can open it by hitting the Windows key on your keyboard (or manually opening start menu), typing “Command” and then click on “Command Prompt”.
C:\Users\me>python --version
Python 3.7.2
Create a virtual environment
By creating a virtual environment you isolate the new libraries you are going to install from the system version of Python, eliminating possible future headaches if you need to install conflicting packages.
Thankfully it is super simple to do, open a command prompt, navigate to the directory you want a new folder with the virtual environment in, and type:
python -m venv venv
This is simply saying “Run python
, using module venv -m venv
to create a virtual env at the venv
directory. Then you want to “activate” it so that your command prompt will instead use that new isolated version of Python and Python tools (like pip).
venv\Scripts\activate.bat
This will cause your command prompt to give a nice little notification that you are now using that venv:
C:\Users\me> venv\Scripts\activate.bat
(venv) C:\Users\me>
Remember the path you installed the virtual env too, we will use it later!
Install libusb DLLs
Just because life has to be a little extra difficult, libusb only pushes their releases in 7z
and tar.bz2
archives. Which means, if you don’t already have a tool that can open these type of files, head over to https://www.7-zip.org/download.html and download either the exe or msi for your version of Windows (if you are unsure, just get the 32-bit exe one).
Installing it should be fine with the defaults, feel free to change as you want. When done, go over and download libusb. The developers of
liquidctl suggest you use 1.0.21 at time of writing so we are linking directly to that version https://github.com/libusb/libusb/releases/tag/v1.0.21.
After download, extract those files with 7zip.
Then you will want to go into the new directory, and find the proper DLLs for your installed version of Python. If you followed this guide so far, that will be the MS32 folder.
You are going to copy those into your virtual environment directory Scripts
directory, as that is by default added to the PATH when you activate the virtual env. So if I was in the C:\Users\me
directory when I ran python -m venv venv
I would copy those three files into C:\Users\me\venv\Scripts
.
They look a little out of place, but meh, it works.
Change the Kraken drivers (x61, x41, x31 Only)
Sadly (or not so sadly) we can’t use the default second gen Kraken drivers installed by CAM. Which also mean that when we switch these, CAM will no longer be able to interface with the Kraken unless this new driver is removed via the Driver Manager.
ONLY FOR KRAKEN x61, x41 and x31! Skip ahead to the next section for anything else.
Go to https://zadig.akeo.ie/ and download their awesome driver switcher tool.
Run it as an administrator, then go to Options and select “List all Devices”.
Chose 690LC from the drop down list. It’s USB ID should be 2433 B200. Select either the libusb-win32
or libusbK
driver from the right hand tiny select buttons. (I had trouble the first time timing out on the libusb
drivers so I switched to libusbK
, your mileage may vary.) Then hit ‘Replace Driver’.
This will probably take a while. Hopefully it pops up a success window in a few seconds or minutes. If not, I suggest waiting a full ten minutes, then switching to the other driver type (aka select libusbK
if you first tried libusb-win32
) and trying again before running to their github for help.
Install liquidctl
We’re almost there!
Switch back to the command prompt and make sure you are in the active virtual env. If you don’t see (venv) at the start of the line, go back and take a look at the “Create a virtual environment” section.
If you are using this for a newer third generation device, like the Kraken x62, you can use the regular module.
pip install liquidctl
However, if you do need second generation support for the Kraken x61, x41 or x31, you will need to grab the experimental branch. Please be aware that this may be at an unstable state at time of your download. You can follow current issues directly in the pull request.
pip install git+https://github.com/jonasmalacofilho/liquidctl.git@add-second-gen-krakens
This will install the command in the active virtual environment as liquidctl
! Keep in mind, you will need to activate this virtual environment to use this command.
Using liquidctl
You can find the full list of what you can do via --help
or from their github. But to start you want to list out devices detected on the system, initialize them, and view their status.
(venv) C:\>liquidctl list
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
(venv) C:\>liquidctl initialize
report: failed to (pre) open (control: open), ignoring
(venv) C:\>liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature 31.2 °C
Fan speed 1320 rpm
Pump speed 3600 rpm
Firmware version 0.7.0.0
For the Kraken x61 and gen-two devices, the only thing you can do* is set the fan speed. (* As of time of writing, could have come a long way by whenever ‘now’ is. Also, you can used my “hack” below to change the logo color.)
(venv) C:\> liquidctl set fan speed 100
If you are using third gen devices, you can have fun with pump speeds or colors as well!
liquidctl set ring color fading 350017 ff2608
liquidctl set logo color spectrum-wave --speed slowest
liquidctl set pump speed 90
Multiple Devices
If you happen to have multiple supported devices on your system, you will have to select which one you want to use. First figure out which device is numbered as which.
(venv) C:\> liquidctl list
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
Device 1, NZXT Kraken X (X42, X52, X62 or X72
Then just append --device <num>
to any follow up commands.
liquidctl --device 1 set ring color spectrum-wave
liquidctl --device 0 set fan speed 100
You can see more detailed options including color modes for Kraken devices here.
Getting color working for the Kraken x61
If you don’t code and are never going to use this virtual environment for anything other than this tool, don’t fret. It’s a copy paste operation! (For others that don’t want to modify their site-packages file and know what that means, you can do a local develop mode install via setup.py
and play to your heart’s content.)
Okay, so all we need to do is simply add a new section of code to one of the files. You’ll have to navigate a few layers deep into the virtual environment you created: venv\Lib\site-packages\liquidctl\driver
there is a file called asetek.py
that you need to open. If you installed the full Python suite, you should be able to easily right click and edit in IDLE.
Scroll to the bottom of the file, and paste the following block of code:
def set_color(self, channel, mode, colors, speed):
"""Set the color of the logo."""
modes = ('fixed', 'alternating', 'blinking', 'off')
speeds = {
'fastest': 1,
'faster': 2,
'normal': 3,
'slower': 4,
'slowest': 5
}
try:
speed = int(speed)
except ValueError:
if speed not in speeds:
LOGGER.warning('Speed must be a value between 1 and 255, setting to 1')
speed = 1
else:
speed = speeds[speed]
else:
if speed < 1 or speed > 255:
speed = 1
LOGGER.warning('Speed must be a value between 1 and 255, setting to 1')
if channel != 'logo':
LOGGER.warning('Only "logo" channel supported for this device, falling back to that')
if mode not in modes:
raise NotImplementedError('Modes available are: {}'.format(",".join(modes)))
if mode == 'off':
color1, color2 = [0x00, 0x00, 0x00], [0x00, 0x00, 0x00]
else:
color1, *color2 = colors
if len(color2) > 1:
LOGGER.warning('Only maximum of 2 colors supported, ignoring further colors')
color2 = color2[0] if color2 else [0x00, 0x00, 0x00]
self._begin_transaction()
data = ([0x10] +
color1 +
color2 +
[0xff, 0x00, 0x00, 0x37,
speed,
speed,
0x00 if mode == 'off' else 0x01,
0x01 if mode == 'alternating' else 0x00,
0x01 if mode == 'blinking' else 0x00,
0x01, 0x00, 0x01])
data.to_yaml(filename=self.data_file)
self._write(data)
self._end_transaction_and_read()
Because Python is spacing specific, make sure the def set_color
lines up with the def _write
above it. It should look something like this (code may change vs what is in the image):
Then, make sure to save the file, by either hitting Ctrl+s
or go to File > Save. The options for colors are quite limited for second gen devices versus third gen, but at least you can use them!
Mode | Colors to supply |
off | 0 |
fixed | 1 |
alternating | 2 |
blinking | 1 |
liquidctl --device 0 set logo color blinking ffffff --speed 2
Now you can issue a command to set the colors like normal. Provide --speed
to set number of seconds between alternating colors or blinking.
If you have any issues with the colors command, please let me know. If you have issues with the program itself, please open an issue directly on liquidctl
github page.
Windows Auto-start
Alright, I’ve played around and have everything set perfectly. But wait, I rebooted and it’s all gone! NOOOO!
Thankfully, it’s rather simple to have your configuration auto load on startup. We simply have to put the commands into a script, and put it into the windows auto start directory.
Open your run menu by hitting the Windows Key plus r
at the same time (or typing in run
to windows search). When the little box pops up, type in shell:startup
and hit OK
. It will take you to a deep dark folder like C:\Users\me\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Open your favorite text editor (or if you know what you’re doing, just right click in the folder, create a new text file, then rename it with a .bat
extension.) Keep that window open, so we can copy it’s path.
Now to create the small script. This script’s first command is to go into the venv\Scripts
directory, so make sure to change to the full path of where that is in your version. Then, simply modify the liquidctl
commands to the ones you want to issue.
cd C:\YOUR_OWN_FULL_PATH_HERE_MAKE_SURE_TO_CHANGE\venv\Scripts
call activate.bat
liquidctl --device 0 set logo color fixed ffffff
liquidctl --device 0 set fan speed 30 25 40 50 50 100
liquidctl --device 1 set logo color fixed ffffff
liquidctl --device 1 set ring color fixed ffffff
liquidctl --device 1 set pump speed 30 50 40 75 50 100
liquidctl --device 1 set fan speed 30 25 50 50 60 75 70 100
Now when you go to save this new file, copy that long path from the open shell:startup
directory into the save bar so it is saved into that directory. Then save the file as a name you will remember, like kraken_control.bat
just make sure it ends in .bat
. In notepad, you may have to change the dropdown from Save as type
to All files
.
You should now see that file in the startup directory. Go ahead and double click on it to make sure it works. Easiest way to test is first manually change your Kraken colors to something different and make sure running the script changes them back.
If it doesn’t work, most likely a command is miss typed. Copy line for line into a cmd
prompt and make sure it works for you there. (Or just run the .bat
file from an open cmd
prompt if you know how so you don’t have to copy-paste.)
That’s all for this tutorial. I hope you found it useful and stress free! If there is something that needs improved please let me know in the comments below.
Many thanks … I now uninstaled CAM and your project si simple and very usedful. Build 1.2.0.dev1 work fine for me.
Please is there any option how set my pump to 40%? I know minimum in CAM is 60%.
I am not sure the min for x61 gen, but third gen x62s and others minimum is 50% https://github.com/jonasmalacofilho/liquidctl/blob/master/docs/nzxt-kraken-x-3rd-generation.md#fan-and-pump-speeds
HI,
is there any option on my own risk set pump speed to 40%? I have x62 3th gen. 60% is in my case 1920 rpm.
Thank you
Very much trial by fire, as I don’t know if the firmware will even accept lower than 50% (based in their docs and their hard-coded minimum.) The only way to try at your own peril is to download the liquidctl code from git (either git clone or download as a zip from github) and change the hard-coded minimum https://github.com/jonasmalacofilho/liquidctl/blob/master/liquidctl/driver/kraken_two.py#L52 then do “python setup.py install” in place of the “pip install” listed above.
Thanks a ton my dude. Easy to follow. Works great for contolling the RGBs on the ‘Smart’ device. Anything is better than CAM.
Thanks a lot for this! I followed a guide and I’ve set a fixed pump speed and a 4 interval curve for the fan. I’m seeing quite a bit of variation, though. The pump speed, as reported by HWInfo 6.04, is 2060 rpm one moment and 2180 rpm the next (min. 2052, max. 2348 over about 10 minutes) . The fan speed varies less, but for a fixed fan speed a variation between 720-785 (min. 722, max. 778 over the same period). For comparison, over the same period the fans of the other AIO in my system have varied by a single rpm and the pump has a range of 8 rpm.
If you have a github account, I would suggest reaching out to the software’s author and see if they have any suggestions: https://github.com/jonasmalacofilho/liquidctl/issues