Skip to content

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
0Offoff
1Statichorizontal-dimming-wave
2Breathinghorizontal-pulse-wave
3Wavewaterfall
4Fadefull-cycling-colors
5Marqueebreathing
6Firefull-one-color
7Rainbow Waveglow-pressed-key
8Rainbow Spiralglow-spreading
9Rainglow-row
10Aurorarandom-pattern
11Rainbow Cyclerainbow-cycle
12Ripplerainbow-waterfall
13Fireworkwave-from-center
14Reactivecircling-jk
15Gradient Waveraining
16Bloomwave-left-right
17Spotlightslow-saturation-cycle
18Snakeslow-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).

0
9

Speed

Controls animation speed. Range: 0 (fastest) to 9 (slowest).

Fast 0
9 Slow

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.

R
0 – 255
G
0 – 255
B
0 – 255

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
0Blinking (one color)
1Pulse Rainbow
2Blinking (one color, alt)
3Fixed Color
4Fixed Color (alt)

LED Color Presets (0–8)

0 – Red
1 – Orange
2 – Yellow
3 – Green
4 – Teal
5 – Blue
6 – Purple
7 – White
8 – Off

Display Mode

The GMK87 screen can show a clock or one of two uploaded image slots.

Value Display
0Clock / Time
1Image Slot 0
2Image Slot 1

Configure Using the App

The GMK87 Configurator desktop app provides a visual interface for all lighting settings.

  1. Open the app and connect your keyboard. The app detects it automatically.
  2. Navigate to the Lighting tab.
  3. Pick an underglow effect from the dropdown menu. The effect previews immediately on the keyboard.
  4. Use the color picker to choose a custom RGB color, or enable Rainbow Mode to cycle through colors automatically.
  5. Adjust the Brightness and Speed sliders.
  6. Under LED Settings, choose the LED mode and color preset for the screen indicator.
  7. 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
--effect0–18 or nameUnderglow effect
--brightness0–9Underglow brightness
--speed0–9Animation speed (0=fast)
--orientation0 or 1Effect direction
--rainbowtrue/falseRainbow mode toggle
--red0–255Custom red value
--green0–255Custom green value
--blue0–255Custom blue value
--led-mode0–4LED indicator mode
--led-saturation0–9LED saturation
--led-rainbowtrue/falseLED rainbow toggle
--led-color0–8 or nameLED color preset
--show-image0–2Display mode
--winlocktrue/falseLock 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 false in 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 --orientation flag flips the direction of directional effects (0 = left-to-right, 1 = right-to-left).
  • Use DEBUG=1 before any command to see the raw HID protocol packets for troubleshooting.

Related guides