Stream Deck Module 6 Keys
Release History
REVISION | DATE |
---|---|
1.0A | 02.04.2025 |
Introduction
The Elgato Stream Deck Module 6 is a USB 2.0–compliant input device engineered for efficient interaction with host systems through the USB HID (Human Interface Device) protocol. It consists of a grid of keys situated atop a single LCD screen, allowing for real-time display of dynamic content and the assignment of custom functions to each key. The device facilitates communication using a proprietary protocol, enabling the transmission of input events, state changes, and feedback to the LCD screen.
This documentation provides a comprehensive overview of the USB HID API for the Elgato Stream Deck 6-key module model, detailing the methods and data structures available for developers. It outlines how to utilize the device's features, including key event reporting, input handling, and control of the LCD for dynamic content display, to create robust applications and enhance interaction with the Stream Deck.
Devices Overview
Summary
Name | Model | VID | PID | Capabilities |
---|---|---|---|---|
Stream Deck Module 6 | 20GAI9901 | 0x0FD9 | 0x00B8 | 6 keys layout |
Capabilities & Physical Characteristics
6 Keys Layout
Entity | Property |
---|---|
LCD image | 320 × 240 px (low DPI) |
Key matrix | 3 x 2 |
Key image | 80 × 80 px |
Keypad keys Index Layout

Unit Pixel Layout
Data Format
Basic Data Types
Array: A sequence of typed elements.
typename[number-of-elements] for a fixed-length array of typename elements
typename[] for a variable-length array of typename elements
Type | Description |
---|---|
CHAR, INT8 | Signed 8-bit integer, ASCII |
BYTE, UINT8 | Unsigned 8-bit integer |
INT16 | Little-endian signed 16-bit integer |
UINT16 | Little-endian unsigned 16-bit integer |
INT32 | Little-endian signed 32-bit integer |
UINT32 | Little-endian unsigned 32-bit integer |
RGB Triplet
The RGB Color definition triplet
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Red color component |
+ 0x01 | UINT8 | Green color component |
+ 0x02 | UINT8 | Blue color component |
Input Report
Input reports are used to transmit “events” from the device to the host. Essentially, an “event” contains a key press state change. To obtain input reports, the host polls the device using a non-blocking HID READ command. The device returns a fixed 65-byte structure, as outlined below.
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Report ID |
+ 0x01 | BYTE[] | Payload |
Output Report
Output reports are used to transmit the bulk of data from the host to the device. They are used to upload images, firmware files, etc. To send an output report, the host uses the HID WRITE command. Each output report has a fixed size of 1024 bytes.
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Report ID |
+ 0x01 | UINT8 | Command |
+ 0x02 | BYTE[] | Payload |
Feature Report
Feature reports are used to set and retrieve arbitrary information from the device, or to trigger commands.
-
To send feature report the host uses HID SEND FEATURE REPORT command.
-
To send feature report and obtain the response the host uses HID GET FEATURE REPORT command.
The Host forms the structure with maximum size of 32 bytes. The remaining space should be zero-padded.
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Report ID |
+ 0x01 | UINT8 | Command |
+ 0x02 | BYTE[] | Payload |
Command Descriptions
Input Reports
To obtain input reports, the host polls unit with HID READ command. If the unit has no "event" pending. HID READ returns TIMEOUT
error, therefore the payload isn't defined in this case.
Key press state change
An event is created every time a key state changes. The payload contains an array of bytes, each representing the state of a corresponding key. Therefore the Input Report payload looks as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Input Report | Report ID: 0x01 . |
+ 0x01 | UINT8[64] | First 6 bytes used. Each byte is 0x00 (released) or 0x01 (pressed) |
Output Reports
Report ID
: 0x02
.
Used with HID WRITE. Multiple reports may be sent if data exceeds max payload.
Upload Data to Image Memory Bank
This command is used to upload an image file to the unit's temporary storage memory bank, either to display it immediately as a Key image or to enable subsequent commands to operate on it. Since it is not possible to upload the entire data bulk at once, the command supports a splitting mechanism.
Note: The maximum size of an output report is 1024 bytes. Therefore, the image file must be split into chunks defined by the payload size of the output report.
The structure of the Output Report report payload is as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Output Report | Report ID: 0x02 , Command: 0x01 |
+ 0x02 | UINT8 | Chunk Index |
+ 0x03 | UINT8 | Reserved: 0x00 |
+ 0x04 | UINT8 | Show Image flag |
+ 0x05 | UINT8 | key Index |
+ 0x06 | BYTE[10] | Reserved: fill with 0x00 |
+ 0x10 | BYTE[] | Chunk Data |
Feature Report - Setters
The Report ID
of the feature report for setters is defined with unique values. Below, you can find the description of possible Report IDs and commands.
To send a feature report, the host uses the HID SEND FEATURE REPORT command.
Show Logo
This command forcibly triggers the display of the boot logo. The Feature Report payload is structured as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: 0x0B , Command: 0x63 |
+ 0x02 | UINT8 | Show Boot Logo: 0x00 |
Set Backlight Brightness
This command sets the LCD backlight brightness. The Feature Report payload is structured as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: 0x05 , Command: 0x55 |
+ 0x02 | UINT8 | 0xAA |
+ 0x03 | UINT8 | 0xD1 |
+ 0x04 | UINT8 | 0x01 |
+ 0x05 | UINT8 | Brightness Value |
Set Idle Time Before Sleep Mode
This command sets the duration, in seconds, of idling before the unit enters Sleep Mode. The Feature Report payload is structured as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: 0x0B , Command: 0xA2 |
+ 0x02 | INT32 | Idle time before entering Sleep Mode in seconds |
Note: Set to zero seconds to disable sleep mode.
Update Boot Logo
This command stores a slice of the boot logo from the Image Memory Bank into persistent memory. Each slice corresponds to a key image; therefore, the Stream Deck 6-key module is unable to operate with a full LCD image.
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: 0x0B , Command: 0x63 |
+ 0x02 | UINT8 | Update Boot Logo: 0x02 |
+ 0x03 | UINT8 | Slice Index |
Feature Report - Getters
The Report ID
of the feature report for getters is assigned unique values. Below, you can find the description of the possible Report IDs. The Command field is usually ignored. To send a feature report and obtain a response, the host uses the HID GET FEATURE REPORT command.
Get Firmware Version
This command requests the firmware version string of the unit. The Feature Report payload is structured as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: see below |
The response should be as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Report ID: see below |
+ 0x01 | BYTE[4] | N/A |
+ 0x05 | UINT8[12] | Version String ASCII |
Report IDs by firmware type:
Report ID | Firmware | Note |
---|---|---|
0xA0 | LD | |
0xA1 | AP2 | Primary firmware |
0xA2 | AP1 | Backup firmware |
Get Unit Serial Number
This command requests the unit's serial number string. The Feature Report payload is structured as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: 0x03 |
The response should be as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Report ID: 0x03 |
+ 0x01 | BYTE[4] | N/A |
+ 0x05 | UINT8[DataLength] | Serial Number String ASCII |
Get Idle time before entering Sleep Mode
This command requests the duration, in seconds, of idling before the unit enters Sleep Mode.
Offset | Type | Note |
---|---|---|
+ 0x00 | Feature Report | Report ID: 0xA3 |
The response should be as follows:
Offset | Type | Note |
---|---|---|
+ 0x00 | UINT8 | Report ID: 0xA3 |
+ 0x01 | UINT8 | Data Length |
+ 0x02 | INT32 | Duration |
The size of a Feature Report is fixed to 32 bytes
Device Setup & Communication
Setup Connection
To bring the unit into operational mode, open it as a USB HID device. Once connected, the unit can provide input events, receive commands to update LCD feedback, and respond to internal configuration adjustments.
Polling Input Controllers
To detect controller state changes, use the Input Report. The host application should periodically poll the unit using a timed HID READ command. If no state change has occurred, the device will return a TIMEOUT error. If a change has occurred, the Input Report will contain the relevant controller data.
The recommended polling interval is 50 ms.
Uploading Images
Key Image
Steps to operate:
- Prepare a key image matching the device's specified dimensions
-
warning
The image must be rotated 90° clockwise
- Export the image as a BMP file.
- Use the Upload Data to Image Memory Bank command with the Show Image flag set to
0x01
, specifying the key index. This uploads the image to the unit for immediate display.
Full LCD Image
The Stream Deck 6-key module does not support uploading a full LCD image in one command.
Instead, use Upload key Image for each LCD slice underneath a key.
Boot Logo Image
The Stream Deck 6-key module does not support uploading a single Boot Logo for the entire LCD.
Instead:
-
Prepare a key image according to device specifications.
-
warning
Rotate the image 90° clockwise.
-
Export the image as a BMP file.
-
Use Upload Data to Image Memory Bank with the
Show Image flag
set to0x00
for the target slice. -
Use the Update Boot Logo command to store that slice in the unit's persistent memory.
Closing Connection
To disconnect, simply close the USB HID device connection.
It's recommended to trigger the Show Logo command before closing the connection. This clears active key images and resets the display cleanly.