Meeting Controls for Webex

A Stream Deck plugin for controlling Webex meetings on macOS. Keys show the current state of the meeting and dim when no meeting is in progress.

Action What it does
Mute Toggle Mutes or unmutes your microphone
Video Toggle Starts or stops your video
Share Toggle Starts or stops sharing content
Raise Hand Toggle Raises or lowers your hand
Record Toggle Starts or stops recording
Leave Meeting Leaves or ends the current meeting

The toggles work in multi-actions, where you choose the state to end up in.

A few things follow from how Webex itself behaves:

How it works

Webex has no scripting API, so the plugin uses macOS accessibility (System Events) to read the controls in Webex’s meeting windows about once a second, and presses them to act. Each control has a stable identifier, and its state is read from its text (“Mute” / “Unmute”) or from an indicator Webex shows, which is how the keys stay in sync even when you use Webex’s own buttons. Webex does not need to be the frontmost app.

Requirements

Development

npm install
npm run build     # bundle to com.timetraveltoaster.webex.sdPlugin/bin
npx streamdeck dev  # enable developer mode (once); without it, restarts are silently ignored
npm run link      # install the plugin into Stream Deck (once)
npm run watch     # rebuild and restart the plugin on change
npm run pack      # produce a .streamDeckPlugin in dist/

Icons are generated by npm run icons from scripts/make-icons.mjs. The Marketplace listing text is in marketplace/description.md, and npm run marketplace regenerates the listing images next to it.

If a key stays dimmed or shows the wrong state

Run npm run dump-controls during a meeting to print the buttons the plugin can see, with the title and help text it reads. The identifiers and the patterns used to detect state are in src/webex/controls.ts. Plugin logs are in com.timetraveltoaster.webex.sdPlugin/logs.

Support

For help or to report a problem, email support@timetraveltoaster.com.