goniszewski/OpenStreamHub

Independently maintained unofficial Cooler Master SDK, based on projectzero7/cooltek-sdk, with MasterHUB macOS support and OpenStreamHub.

Rust

1

351 commits

updated Oct 14, 2026

See the code

See what people are saying

README

OpenStreamHub logo

OpenStreamHub

Unofficial macOS support for Cooler Master MasterHUB.

Screenshots · Install · Quick start · Hardware support · Documentation · Development

License: MIT or Apache-2.0 Latest release Status: early release Platform: macOS

OpenStreamHub is a macOS desktop app, Rust SDK and set of diagnostic tools for Cooler Master MasterHUB. The goal is to provide the device controls, profiles, displays and actions available in the official Windows application, and extend them with more capabilities, supported apps and integrations.

Feature parity is incomplete. The comparison below uses the official MasterHUB 1.0.0.113 software as its reference, based on analysis recorded in this repository. Implementation and physical hardware validation are tracked separately.

[!NOTE] Supports MasterHUB only. This is an independent project, not affiliated with or endorsed by Cooler Master. Hardware results currently cover one rig; this is not yet a fully validated replacement for the Windows app.

Screenshots

Tap or click any screenshot to open it at full size. They follow your light or dark theme.

Workspace: your modules, live key and dial artwork, and the editor for the selected control.

More views: lighting, demos, compatibility and settings

Lighting

Lighting: colour, effect and brightness for the knob and fader modules, and the dial's screen.

Demos

Demos: small games and a display speed test that run on the modules.

Compatibility

Compatibility: what each module and action supports, and what has been tested on hardware.

Settings

Settings: display control, run mode, profile storage, OBS, startup, permissions and updates.

Feature parity

Feature in the official Windows appOpenStreamHub on macOS
Keypad, knob and dial inputImplemented and tested on hardware. See module support for limits.
Two-roller inputDecoder implemented. Windows input confirmed by capture; macOS receives no reports. Unresolved.
Five-fader inputImplemented and tested on hardware (all five faders, 0 at the bottom to 100 at the top). Jitter and the microphone-volume action are not yet checked.
Profiles, bindings and keypad foldersImplemented, including nested folders, Back navigation and profile switching. Folder redraws tested on hardware.
Key images and animationsPer-key static artwork and animation sequences implemented. Static artwork tested on hardware; animation playback still needs hardware acceptance.
Dial display and function switchingImage uploads, function labels, clocks and CPU display implemented and tested on hardware. Full display parity is incomplete.
Volume, mute, shortcuts, text, apps, URLs and media controlsImplemented; execution and macOS permission validation vary by action. See the action catalogue.
Multi-action and recorded key macrosMulti-action sequences and the key macro recorder implemented; the recorder still needs a hardware-session check.
Countdown timersImplemented with notification and sound; remaining time is not displayed on the key.
OBS Studio actionsPartial implementation, tested against a fake server. Real OBS validation and remaining actions are pending.
Twitch, Discord, Streamlabs and application-specific integrationsNot implemented as equivalent integrations. Some shortcuts can be assigned manually.
Official .mhz profile import/exportImport implemented with a compatibility report and review before execution; real export compatibility remains to be validated. .mhz export missing. Own-format JSON import/export implemented.
Lighting and brightnessLighting page for the base, knobs and faders, and screen backlight and colour for the dial, including while a profile runs. Per-profile screen brightness for the dial and the key screens (software dimming on keys) tested on hardware. Base, knob and fader lighting in the app still needs more hardware checks.
Firmware updatesNot supported.
Suspend/resume and reconnectSession handling implemented; dial dry-run reconnect tested. Sleep/wake and other lifecycle paths still need hardware validation.

OpenStreamHub also includes dry-run action previews, raw capture and offline replay, local diagnostic bundles, and optional focused-app profile rules. These are additional tools rather than Windows parity requirements.

See the detailed parity tracker for protocol references and outstanding work. Some entries there describe earlier implementation stages; the hardware results record subsequent device tests.

Install

Get the newest version from the latest release; its page has the release notes and the downloads. Download the .dmg for your Mac (aarch64 for Apple Silicon, x86_64 for Intel; check the SHA-256 in SHA256SUMS.txt), open it and drag OpenStreamHub to Applications. It needs macOS 12.3 or later.

OpenStreamHub is not signed or notarized: signing needs a paid Apple Developer account, and this is a free, independent project. macOS therefore warns about it on first launch. The app is open source, so you can read the code or build it yourself (Quick start).

To open it anyway:

  1. Open the app once. macOS says it cannot verify it and does not open it.
  2. Open System Settings → Privacy & Security, scroll to the message about OpenStreamHub and choose Open Anyway, then confirm.

On macOS 14 and earlier, right-clicking the app and choosing Open also works. If you prefer the terminal, xattr -dr com.apple.quarantine /Applications/OpenStreamHub.app removes the download flag.

macOS asks for permission the first time an action needs it. Allow OpenStreamHub in System Settings → Privacy & Security. Settings → Permissions in the app shows what is granted and opens the right pane:

PermissionNeeded for
AccessibilityKeyboard shortcuts, text, undo/redo and media keys sent to other apps.
AutomationControlling System Events and media players (Music, Spotify) from actions.
Input MonitoringReading the modules' input, and the key recorder.

Settings → Startup can start the app at login and check these permissions each time it opens, with a short prompt that takes you to the right pane. Profiles are stored locally on your Mac. The app does not update itself: use Settings → Updates to see whether a newer release exists, then install it over the old one. Because the app is unsigned, macOS may ask you to allow these permissions again after an update.

Quick start

Build from source on macOS 12.3 or later, with Node.js 22.12+, Rust 1.97+ and the Xcode command-line tools installed.

git clone [email protected]:goniszewski/OpenStreamHub.git
cd OpenStreamHub/apps/open-stream-hub
npm ci
npm run desktop

The desktop command builds the Rust service sidecar before starting the app.

  1. Connect your MasterHUB and select a module.
  2. Create or edit a profile and assign its controls.
  3. Start a Dry run to inspect input and planned actions.
  4. Select Execute and confirm when you are ready to run those actions.

With Settings → Let OpenStreamHub drive the display → App, running a keypad or dial profile enables software mode and drives its display. Stopping the session restores the built-in animation. Choose Built-in animation to leave those modules in their own mode; their input requires software mode.

To build a local debug app bundle:

npm run desktop:build

See the desktop guide for development details and the build guide for bundling and signing. Signing and notarization remain release work.

Hardware support

Support below describes the current macOS work. A decoder or editor alone does not establish hardware compatibility.

ModuleCurrent evidence
15-key IPS keypad · M4315Press/release input, key artwork, nested folder redraws and Back navigation tested on hardware. Physical key mapping checked at selected positions.
3-knob module · M003KRotation and press tested in default mode; physical mapping verified with the single knob on top.
IPS dial · M131ERotation, press, display faces, image upload, backlight and color tested. App dry-run reconnect tested.
2-roller scroll module · M032LEWindows capture confirms both rollers send input. macOS readers still receive no reports; investigation continues.
5-fader module · M005SDecoder and editor implemented; no physical module available for validation.
Base · M0064Discovered and recorded; observed reports are a constant heartbeat.

These results come from one rig. Sleep/wake recovery, some lifecycle paths and real OBS behavior still need validation. See hardware results for the exact tests and limits, and the parity tracker for gaps against the official Windows app.

Privacy and telemetry

OpenStreamHub has no telemetry, analytics, automatic crash reporting, account or cloud sync. Profiles, settings, artwork and diagnostic bundles are stored locally. Diagnostic bundles are created on demand and are yours to share; sensitive fields are redacted by default.

The optional OBS integration connects only to OBS on the same Mac and is off until enabled. Its password stays in memory and must be entered again after launching the app. Configured actions can open apps or web addresses when executed.

The app does not contact a remote service on its own. Settings → Updates has a Check for updates button that asks GitHub for the latest release (an anonymous request that sends nothing but the app's name and version); an optional daily check on launch is off by default. The app never downloads or installs anything itself. Building from source downloads dependencies from npm and crates.io. See the diagnostic bundle guide for what local diagnostics contain.

Documentation

Try the example profiles, including macOS controls, all modules, keypad folders and dial functions.

Development

The repository keeps the app, service and SDK together so protocol and profile changes can be developed together. The Rust crates retain their original cooltek-sdk names.

DirectoryContents
apps/open-stream-hub/Tauri desktop app and React interface
crates/Rust SDK, binding service and command-line tools
examples/Example programs and profiles
docs/User guides, protocol research and validation records

Build and check the Rust workspace from the repository root:

cargo build --workspace
cargo fmt --check
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings

Check the desktop frontend:

cd apps/open-stream-hub
npm run check
npm test
npm run build

The app's Rust backend is a separate workspace; see the desktop verification commands. Rebuild the sidecar with npm run sidecar after changing the SDK or service.

To use the SDK in another Rust project:

[dependencies]
cooltek-sdk = { git = "https://github.com/goniszewski/OpenStreamHub" }

Contributions are welcome. Keep changes focused, add relevant tests and documentation, and use Conventional Commits. For hardware changes, distinguish synthetic tests from observations on a real device.

Acknowledgements

OpenStreamHub builds on CoolTEK SDK by projectzero7. Thanks to the original author and contributors for the foundation. This independently maintained project preserves that history and licensing while developing its own MasterHUB app and macOS support.

Generative AI disclosure

Generative AI tools were used during reverse engineering, development and testing of this project. The maintainer reviews and tests every change. Hardware behaviour is claimed only where it was tested on a real device, as recorded in the hardware results.

License

Dual-licensed under MIT or Apache-2.0, at your option. Unless explicitly stated otherwise, contributions are provided under the same terms.

goniszewski/OpenStreamHub

Independently maintained unofficial Cooler Master SDK, based on projectzero7/cooltek-sdk, with MasterHUB macOS support and OpenStreamHub.

Rust

1

351 commits

updated Oct 14, 2026

See the code

See what people are saying

README

OpenStreamHub logo

OpenStreamHub

Unofficial macOS support for Cooler Master MasterHUB.

Screenshots · Install · Quick start · Hardware support · Documentation · Development

License: MIT or Apache-2.0 Latest release Status: early release Platform: macOS

OpenStreamHub is a macOS desktop app, Rust SDK and set of diagnostic tools for Cooler Master MasterHUB. The goal is to provide the device controls, profiles, displays and actions available in the official Windows application, and extend them with more capabilities, supported apps and integrations.

Feature parity is incomplete. The comparison below uses the official MasterHUB 1.0.0.113 software as its reference, based on analysis recorded in this repository. Implementation and physical hardware validation are tracked separately.

[!NOTE] Supports MasterHUB only. This is an independent project, not affiliated with or endorsed by Cooler Master. Hardware results currently cover one rig; this is not yet a fully validated replacement for the Windows app.

Screenshots

Tap or click any screenshot to open it at full size. They follow your light or dark theme.

Workspace: your modules, live key and dial artwork, and the editor for the selected control.

More views: lighting, demos, compatibility and settings

Lighting

Lighting: colour, effect and brightness for the knob and fader modules, and the dial's screen.

Demos

Demos: small games and a display speed test that run on the modules.

Compatibility

Compatibility: what each module and action supports, and what has been tested on hardware.

Settings

Settings: display control, run mode, profile storage, OBS, startup, permissions and updates.

Feature parity

Feature in the official Windows appOpenStreamHub on macOS
Keypad, knob and dial inputImplemented and tested on hardware. See module support for limits.
Two-roller inputDecoder implemented. Windows input confirmed by capture; macOS receives no reports. Unresolved.
Five-fader inputImplemented and tested on hardware (all five faders, 0 at the bottom to 100 at the top). Jitter and the microphone-volume action are not yet checked.
Profiles, bindings and keypad foldersImplemented, including nested folders, Back navigation and profile switching. Folder redraws tested on hardware.
Key images and animationsPer-key static artwork and animation sequences implemented. Static artwork tested on hardware; animation playback still needs hardware acceptance.
Dial display and function switchingImage uploads, function labels, clocks and CPU display implemented and tested on hardware. Full display parity is incomplete.
Volume, mute, shortcuts, text, apps, URLs and media controlsImplemented; execution and macOS permission validation vary by action. See the action catalogue.
Multi-action and recorded key macrosMulti-action sequences and the key macro recorder implemented; the recorder still needs a hardware-session check.
Countdown timersImplemented with notification and sound; remaining time is not displayed on the key.
OBS Studio actionsPartial implementation, tested against a fake server. Real OBS validation and remaining actions are pending.
Twitch, Discord, Streamlabs and application-specific integrationsNot implemented as equivalent integrations. Some shortcuts can be assigned manually.
Official .mhz profile import/exportImport implemented with a compatibility report and review before execution; real export compatibility remains to be validated. .mhz export missing. Own-format JSON import/export implemented.
Lighting and brightnessLighting page for the base, knobs and faders, and screen backlight and colour for the dial, including while a profile runs. Per-profile screen brightness for the dial and the key screens (software dimming on keys) tested on hardware. Base, knob and fader lighting in the app still needs more hardware checks.
Firmware updatesNot supported.
Suspend/resume and reconnectSession handling implemented; dial dry-run reconnect tested. Sleep/wake and other lifecycle paths still need hardware validation.

OpenStreamHub also includes dry-run action previews, raw capture and offline replay, local diagnostic bundles, and optional focused-app profile rules. These are additional tools rather than Windows parity requirements.

See the detailed parity tracker for protocol references and outstanding work. Some entries there describe earlier implementation stages; the hardware results record subsequent device tests.

Install

Get the newest version from the latest release; its page has the release notes and the downloads. Download the .dmg for your Mac (aarch64 for Apple Silicon, x86_64 for Intel; check the SHA-256 in SHA256SUMS.txt), open it and drag OpenStreamHub to Applications. It needs macOS 12.3 or later.

OpenStreamHub is not signed or notarized: signing needs a paid Apple Developer account, and this is a free, independent project. macOS therefore warns about it on first launch. The app is open source, so you can read the code or build it yourself (Quick start).

To open it anyway:

  1. Open the app once. macOS says it cannot verify it and does not open it.
  2. Open System Settings → Privacy & Security, scroll to the message about OpenStreamHub and choose Open Anyway, then confirm.

On macOS 14 and earlier, right-clicking the app and choosing Open also works. If you prefer the terminal, xattr -dr com.apple.quarantine /Applications/OpenStreamHub.app removes the download flag.

macOS asks for permission the first time an action needs it. Allow OpenStreamHub in System Settings → Privacy & Security. Settings → Permissions in the app shows what is granted and opens the right pane:

PermissionNeeded for
AccessibilityKeyboard shortcuts, text, undo/redo and media keys sent to other apps.
AutomationControlling System Events and media players (Music, Spotify) from actions.
Input MonitoringReading the modules' input, and the key recorder.

Settings → Startup can start the app at login and check these permissions each time it opens, with a short prompt that takes you to the right pane. Profiles are stored locally on your Mac. The app does not update itself: use Settings → Updates to see whether a newer release exists, then install it over the old one. Because the app is unsigned, macOS may ask you to allow these permissions again after an update.

Quick start

Build from source on macOS 12.3 or later, with Node.js 22.12+, Rust 1.97+ and the Xcode command-line tools installed.

git clone [email protected]:goniszewski/OpenStreamHub.git
cd OpenStreamHub/apps/open-stream-hub
npm ci
npm run desktop

The desktop command builds the Rust service sidecar before starting the app.

  1. Connect your MasterHUB and select a module.
  2. Create or edit a profile and assign its controls.
  3. Start a Dry run to inspect input and planned actions.
  4. Select Execute and confirm when you are ready to run those actions.

With Settings → Let OpenStreamHub drive the display → App, running a keypad or dial profile enables software mode and drives its display. Stopping the session restores the built-in animation. Choose Built-in animation to leave those modules in their own mode; their input requires software mode.

To build a local debug app bundle:

npm run desktop:build

See the desktop guide for development details and the build guide for bundling and signing. Signing and notarization remain release work.

Hardware support

Support below describes the current macOS work. A decoder or editor alone does not establish hardware compatibility.

ModuleCurrent evidence
15-key IPS keypad · M4315Press/release input, key artwork, nested folder redraws and Back navigation tested on hardware. Physical key mapping checked at selected positions.
3-knob module · M003KRotation and press tested in default mode; physical mapping verified with the single knob on top.
IPS dial · M131ERotation, press, display faces, image upload, backlight and color tested. App dry-run reconnect tested.
2-roller scroll module · M032LEWindows capture confirms both rollers send input. macOS readers still receive no reports; investigation continues.
5-fader module · M005SDecoder and editor implemented; no physical module available for validation.
Base · M0064Discovered and recorded; observed reports are a constant heartbeat.

These results come from one rig. Sleep/wake recovery, some lifecycle paths and real OBS behavior still need validation. See hardware results for the exact tests and limits, and the parity tracker for gaps against the official Windows app.

Privacy and telemetry

OpenStreamHub has no telemetry, analytics, automatic crash reporting, account or cloud sync. Profiles, settings, artwork and diagnostic bundles are stored locally. Diagnostic bundles are created on demand and are yours to share; sensitive fields are redacted by default.

The optional OBS integration connects only to OBS on the same Mac and is off until enabled. Its password stays in memory and must be entered again after launching the app. Configured actions can open apps or web addresses when executed.

The app does not contact a remote service on its own. Settings → Updates has a Check for updates button that asks GitHub for the latest release (an anonymous request that sends nothing but the app's name and version); an optional daily check on launch is off by default. The app never downloads or installs anything itself. Building from source downloads dependencies from npm and crates.io. See the diagnostic bundle guide for what local diagnostics contain.

Documentation

Try the example profiles, including macOS controls, all modules, keypad folders and dial functions.

Development

The repository keeps the app, service and SDK together so protocol and profile changes can be developed together. The Rust crates retain their original cooltek-sdk names.

DirectoryContents
apps/open-stream-hub/Tauri desktop app and React interface
crates/Rust SDK, binding service and command-line tools
examples/Example programs and profiles
docs/User guides, protocol research and validation records

Build and check the Rust workspace from the repository root:

cargo build --workspace
cargo fmt --check
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings

Check the desktop frontend:

cd apps/open-stream-hub
npm run check
npm test
npm run build

The app's Rust backend is a separate workspace; see the desktop verification commands. Rebuild the sidecar with npm run sidecar after changing the SDK or service.

To use the SDK in another Rust project:

[dependencies]
cooltek-sdk = { git = "https://github.com/goniszewski/OpenStreamHub" }

Contributions are welcome. Keep changes focused, add relevant tests and documentation, and use Conventional Commits. For hardware changes, distinguish synthetic tests from observations on a real device.

Acknowledgements

OpenStreamHub builds on CoolTEK SDK by projectzero7. Thanks to the original author and contributors for the foundation. This independently maintained project preserves that history and licensing while developing its own MasterHUB app and macOS support.

Generative AI disclosure

Generative AI tools were used during reverse engineering, development and testing of this project. The maintainer reviews and tests every change. Hardware behaviour is claimed only where it was tested on a real device, as recorded in the hardware results.

License

Dual-licensed under MIT or Apache-2.0, at your option. Unless explicitly stated otherwise, contributions are provided under the same terms.