Skip to main content

Bitfocus Companion Setup

Control MuteDeck from Bitfocus Companion: mute and unmute, toggle your camera, screen share and recording, leave a meeting, push-to-talk, and trigger MuteDeck custom actions with button feedback that shows your live meeting status on a Stream Deck, Loupedeck Live S, Companion Satellite, or any other surface Companion drives.

The module is listed in the Companion module store as MuteDeck: bitfocus.io/connections/mutedeck-mutedeck.

Stream Deck without Companion

If you use a Stream Deck with Elgato's own software, you want the Stream Deck plugin instead. This page is only for Bitfocus Companion.

Requirements

  • Bitfocus Companion 4.3 or newer
  • The MuteDeck desktop app installed and running on the machine you want to control
  • Companion able to reach MuteDeck's WebSocket API on port 3492 (on the same machine that is localhost:3492, no configuration needed)

Installing the module

Since Companion 4.0 modules are downloaded from the module store instead of shipping with Companion, so installing the module and adding a connection is one flow.

  1. Open the Companion web GUI (the launcher's Open GUI button, or http://localhost:8000).
  2. Go to the Connections tab and click Add connection.
  3. Search for MuteDeck and click it.
  4. In the dialog that appears, pick the module version - Companion offers to install the latest version from the store - and add the connection.
  5. The connection appears in the list. Click it to open its configuration in the right-hand panel.

If your Companion machine has no internet access, download the module package on another machine and use import module package (.tgz) on the Modules tab instead.

Configuration

FieldDescription
MuteDeck hostHostname or IP where MuteDeck is running. Usually localhost.
MuteDeck portMuteDeck's WebSocket port. Default 3492.

The defaults work out of the box when Companion and MuteDeck run on the same computer. Click Save after changing anything.

Running Companion on a different machine than MuteDeck (a Raspberry Pi, a Companion Satellite host, or a dedicated control PC) is supported: enter the IP address of the computer running MuteDeck, and make sure MuteDeck has network connections enabled so it accepts requests from outside localhost.

The Status column on the Connections page shows whether the module is connected. It reads OK while MuteDeck is reachable and Connecting while it is not — the module retries every few seconds, so starting MuteDeck later reconnects on its own.

screenshot: MuteDeck module configuration

Quick start: the presets

The fastest way to a working page is the presets: complete buttons with icons, actions and feedback already wired up.

  1. Open the Buttons tab and select the page you want to build.
  2. In the presets panel, open the MuteDeck connection and then the MuteDeck buttons folder.
  3. Drag the buttons you want onto the page.

That is the whole setup. The preset buttons use the MuteDeck icons and update live: red when you are muted or recording, green when your camera or screen share is on, and greyed out whenever MuteDeck is not running — so a glance at the deck tells you whether the connection is up.

PresetWhat it does
Microphone toggleMute/unmute, icon and colour follow your live mute state
Camera toggleCamera on/off
Screen share toggleStart/stop sharing
Recording toggleStart/stop recording
Leave meetingLeaves the call; dimmed while MuteDeck is offline
MuteDeck statusIndicator button showing Connected / Offline
Push-to-talk (hold to unmute)Unmutes while held, mutes again on release
Bring call app to frontBrings the conferencing app to the foreground
Custom actionTriggers a MuteDeck custom action (set the name in the button's action)

Building your own buttons

If you want your own layout instead of the presets, build a button from scratch:

  1. In the Buttons tab, click an empty button and choose Create button.
  2. Under Press actions, click + Add action, pick the MuteDeck connection and then, for example, Microphone: mute / unmute.
  3. Leave the action's Action option on Toggle (or set it to Mute / Unmute if you want a button that always does the same thing).
  4. Under Feedbacks, click + Add feedback and add Microphone: live icon. It needs no options: it draws the matching MuteDeck icon and colour for the current state and greys the button out when MuteDeck is offline.
  5. Press the button on your surface, or use the Test actions button in the editor, to check it.

Prefer your own icons and colours? Skip the live icon feedback and use the boolean feedbacks instead — those only apply a style you choose when a condition is true.

Actions

ActionOptionsDescription
Microphone: mute / unmuteToggle / Mute / UnmuteControls your microphone
Camera: start / stopToggle / Turn on / Turn offControls your camera
Screen share: start / stopToggle / Start sharing / Stop sharingControls screen sharing
Recording: start / stopToggle / Start recording / Stop recordingControls recording
Leave meetingLeaves the current meeting
Bring call app to frontBrings the active conferencing app to the foreground
Trigger custom actionCustom action nameRuns a custom action defined in MuteDeck
Refresh custom action listRe-fetches the list of custom actions from MuteDeck

Actions pressed while MuteDeck is not connected are ignored and logged as a warning in the connection's log.

Feedbacks

Feedbacks are what make a button show your status instead of just sending a command.

Live icon feedbacks: zero configuration, used by the presets. Each one fully styles the button from the current state: Microphone: live icon, Camera: live icon, Screen share: live icon, Recording: live icon. They also grey the button out while MuteDeck is not connected.

Boolean feedbacks: for your own styling. Each has a "When state is" dropdown and applies the style you configure while it matches:

FeedbackStates
Microphone stateMuted / Unmuted / No microphone
Camera stateOn / Off / Disabled
Screen share stateOn / Off / Disabled
Recording stateOn / Off / Disabled
Call stateIn a call / Not in a call / Disabled
MuteDeck connectionConnected (invert it to style the offline state)

"Disabled" means MuteDeck cannot control that function in the app you are currently in. For example, recording in a meeting where you have no recording rights.

Variables

Variables let you put live status into button text or into triggers. The prefix is the connection's label, mutedeck by default, so the microphone label is $(mutedeck:mute_label).

VariableValues
connectedtrue / false
connected_labelConnected / Offline
mute_statusactive (muted), inactive (unmuted), disabled (no mic)
video_statusactive, inactive, disabled
share_statusactive, inactive, disabled
record_statusactive, inactive, disabled
call_statusactive (in a call), inactive, disabled
control_statusactive, inactive, disabled — whether MuteDeck can control the current app
mute_labelMuted / Unmuted / No mic
video_labelOn / Off / Disabled
share_labelOn / Off / Disabled
record_labelOn / Off / Disabled
call_labelIn call / No call / Disabled

A button with the text Mic\n$(mutedeck:mute_label) shows "Mic / Muted" or "Mic / Unmuted" as you mute and unmute. Before the first status arrives, or while MuteDeck is offline, the _status variables are empty and the _label variables read Unknown.

Push-to-talk

The push-to-talk preset uses two action groups: Press actions sends Unmute, Release actions sends Mute. Hold the button to talk, let go to go back to muted. You can build the same thing on any button by adding the "Microphone: mute / unmute" action twice: once under press with Unmute, once under release with Mute.

Custom actions

Add the Trigger custom action action to a button and pick an action from the dropdown. The list is fetched live from MuteDeck, so your own custom actions show up there, along with the app they apply to. You can also type a name yourself if you prefer.

Created a new custom action in MuteDeck while Companion was running? Use the Refresh custom action list action, or disable and re-enable the connection, to pick it up.

Triggers

Because the module exposes variables and feedbacks, you can also use MuteDeck status in Companion's Triggers: for example, when $(mutedeck:call_status) becomes active, switch your Companion page to your meeting layout, turn on a light over an OSC connection, or set your stream scene. That is the main advantage of Companion over a plain Stream Deck plugin — MuteDeck's status can drive the rest of your rig.

Troubleshooting

Status stays on "Connecting": MuteDeck is not running or is not reachable. Start MuteDeck, and check the host and port in the connection configuration. On the same machine those should be localhost and 3492.

Buttons are grey and do nothing: that is the module telling you it has no connection to MuteDeck. Same fix as above.

Everything shows "Disabled": MuteDeck is connected but does not recognise a supported meeting app, so there is nothing to control. See Supported Apps and App Not Detecting.

Connecting over the network fails: make sure MuteDeck accepts network connections, that port 3492 is open in the firewall on the MuteDeck machine, and that you entered its IP address rather than localhost in the module configuration.

Need more detail: open the connection's popover menu on the Connections page and choose View logs to see what the module is doing, or Help for the module's built-in documentation. For MuteDeck-side logs see Finding MuteDeck Logs.