Reusable browser JavaScript library for Logitech MX Creative Console devices (Keypad + Dialpad) over WebHID.
The repository includes:
js/mxCreativeConsole.js: reusable library API for app developersjs/app.js: demo integration used byindex.htmlexamples/: minimal integration examples
- Device discovery + role classification (keypad vs dialpad)
- Rollers : diversion mode + live rotation events
- Special keys : merged key state updates
- Brightness : read/set in percent
- Contextual display upload :
single,all,full
- Chrome 89+
- Edge 89+
- Opera 75+
WebHID is not available in Firefox or Safari.
npm install -g http-server
http-server -p 8000Open http://localhost:8000.
<script type="module">
import { MXCreativeConsoleClient } from './js/mxCreativeConsole.js';
const client = new MXCreativeConsoleClient({ debug: true });
client.on('status', ({ message, isError }) => {
console.log(isError ? 'ERROR:' : 'INFO:', message);
});
client.on('devicesChanged', (devices) => {
console.log('devices', devices);
});
await client.requestDeviceAccessAndScan();
</script>const devices = client.getAvailableDevices();
await client.connectAvailableDevice(devices[0].index);
client.on('keypadKeysChanged', ({ activeLabels }) => {
console.log('keypad keys:', activeLabels);
});
client.on('rollerEvent', ({ rollerId, delta }) => {
console.log('roller', rollerId, 'delta', delta);
});const client = new MXCreativeConsoleClient({ debug?: boolean });requestDeviceAccessAndScan()scanAuthorizedDevices()getAvailableDevices()connectAvailableDevice(index)disconnectRole('keypad' | 'dialpad')disconnectAll()getConnectionState()
setRollerDiverted(boolean)clearRollerEvents()
refreshBrightness()setBrightnessPercent(percent)
uploadContextualDisplayImage(file, { mode, keyNumber })mode:single|all|fullkeyNumber:1..9(used forsingle)
status{ message, isError }devicesChangeddevices[]roleConnected{ role, deviceEntry }roleDisconnected{ role }stateChangedconnectionStatekeypadKeysChanged{ source, activeControlIds, activeLabels }dialpadKeysChanged{ source, activeControlIds, activeLabels }rollerModeChanged{ mode, modeName, diverted }rollerEvent{ rollerId, delta, timestamp, eventCount, snapshot }rollerCleared{ eventCount }brightnessChanged{ raw, percent }imageUploadComplete{ mode, keyNumber? }
examples/basic-events.html- Scan, connect, and print key/roller events.
examples/brightness-and-image.html- Connect keypad, control brightness, and upload contextual images.
examples/keypad-demo.html- Visual keypad demo with connect flow, key press highlights, and per-key image updates.
examples/dialpad-demo.html- Visual dialpad demo with button press overlays and live roller indicators.
