How to Configure GMK87 Keyboard Lighting and RGB Colors
Control underglow effects, brightness, speed, custom RGB colors, LED modes, and display settings on your Zuoya GMK87 keyboard.
Before you start
- Connect your GMK87 keyboard via USB
- Install the GMK87 Configurator (app, CLI, or npm package)
- On Linux, ensure your user has HID device permissions (udev rules)
Underglow Effects
The GMK87 supports 19 underglow effects. Each effect is identified by a number you can pass via CLI or API.
| # | Effect Name | CLI Name |
|---|---|---|
| 0 | Off | off |
| 1 | Static | horizontal-dimming-wave |
| 2 | Breathing | horizontal-pulse-wave |
| 3 | Wave | waterfall |
| 4 | Fade | full-cycling-colors |
| 5 | Marquee | breathing |
| 6 | Fire | full-one-color |
| 7 | Rainbow Wave | glow-pressed-key |
| 8 | Rainbow Spiral | glow-spreading |
| 9 | Rain | glow-row |
| 10 | Aurora | random-pattern |
| 11 | Rainbow Cycle | rainbow-cycle |
| 12 | Ripple | rainbow-waterfall |
| 13 | Firework | wave-from-center |
| 14 | Reactive | circling-jk |
| 15 | Gradient Wave | raining |
| 16 | Bloom | wave-left-right |
| 17 | Spotlight | slow-saturation-cycle |
| 18 | Snake | slow-rainbow-from-center |
You can use either the number or the CLI name when configuring via command line.
Brightness and Speed
Brightness
Controls underglow intensity. Range: 0 (off) to 9 (maximum).
Speed
Controls animation speed. Range: 0 (fastest) to 9 (slowest).
Custom RGB Colors
Set a custom underglow color by specifying red, green, and blue values (each 0–255). To use your custom color instead of the default rainbow cycle, set --rainbow false.
Common colors: 255,0,0 = red, 0,255,0 = green, 0,0,255 = blue, 255,165,0 = orange, 128,0,255 = purple.
LED Modes and Colors
The big LED (screen area indicator) has its own separate mode and color settings.
LED Modes (0–4)
| # | Mode |
|---|---|
| 0 | Blinking (one color) |
| 1 | Pulse Rainbow |
| 2 | Blinking (one color, alt) |
| 3 | Fixed Color |
| 4 | Fixed Color (alt) |
LED Color Presets (0–8)
Display Mode
The GMK87 screen can show a clock or one of two uploaded image slots.
| Value | Display |
|---|---|
| 0 | Clock / Time |
| 1 | Image Slot 0 |
| 2 | Image Slot 1 |
Configure Using the App
The GMK87 Configurator desktop app provides a visual interface for all lighting settings.
- Open the app and connect your keyboard. The app detects it automatically.
- Navigate to the Lighting tab.
- Pick an underglow effect from the dropdown menu. The effect previews immediately on the keyboard.
- Use the color picker to choose a custom RGB color, or enable Rainbow Mode to cycle through colors automatically.
- Adjust the Brightness and Speed sliders.
- Under LED Settings, choose the LED mode and color preset for the screen indicator.
- Click Apply to save the configuration to the keyboard.
Configure Using the CLI
Run the configureLights.js script with flags to set any combination of lighting options.
Basic usage
node src/configureLights.js --effect rainbow-cycle --brightness 5 --speed 3
Set a custom color (solid purple)
node src/configureLights.js --effect 6 --red 128 --green 0 --blue 255 --rainbow false
Set breathing effect at max brightness
node src/configureLights.js --effect breathing --brightness 9 --speed 5
Set LED indicator to fixed blue
node src/configureLights.js --led-mode 3 --led-color blue
Switch display to clock mode
node src/configureLights.js --show-image 0
Turn off all lighting
node src/configureLights.js --effect 0 --brightness 0 --led-color off
All CLI flags
| Flag | Range | Description |
|---|---|---|
| --effect | 0–18 or name | Underglow effect |
| --brightness | 0–9 | Underglow brightness |
| --speed | 0–9 | Animation speed (0=fast) |
| --orientation | 0 or 1 | Effect direction |
| --rainbow | true/false | Rainbow mode toggle |
| --red | 0–255 | Custom red value |
| --green | 0–255 | Custom green value |
| --blue | 0–255 | Custom blue value |
| --led-mode | 0–4 | LED indicator mode |
| --led-saturation | 0–9 | LED saturation |
| --led-rainbow | true/false | LED rainbow toggle |
| --led-color | 0–8 or name | LED color preset |
| --show-image | 0–2 | Display mode |
| --winlock | true/false | Lock Windows key |
Configure Using the API
Import the configureLights function from the package and pass a configuration object. Any omitted properties use sensible defaults.
Set a rainbow cycle effect
import { configureLights } from "./src/configureLights.js";
await configureLights({
underglow: {
effect: 11, // rainbow-cycle
brightness: 7,
speed: 4,
}
});
Set a static custom color
await configureLights({
underglow: {
effect: 6, // full-one-color (static)
brightness: 5,
rainbow: 0, // disable rainbow to use custom color
hue: {
red: 255,
green: 100,
blue: 0, // warm orange
}
}
});
Full configuration example
await configureLights({
underglow: {
effect: 5, // breathing
brightness: 6,
speed: 3,
orientation: 0, // left-to-right
rainbow: 0,
hue: { red: 0, green: 200, blue: 255 }
},
led: {
mode: 3, // fixed color
color: 5, // blue
saturation: 7,
rainbow: 0,
},
showImage: 0, // show clock
});
Tips
-
•
When using a custom color, always set
rainbow: 0(or--rainbow falsein CLI). Otherwise the keyboard ignores your RGB values and cycles through its built-in rainbow palette. - • You only need to pass the settings you want to change. Everything else keeps its default or current value.
-
•
The
--orientationflag flips the direction of directional effects (0 = left-to-right, 1 = right-to-left). -
•
Use
DEBUG=1before any command to see the raw HID protocol packets for troubleshooting.