Skip to content

Gaux0/companion-module-mumble-intercom

Repository files navigation

companion-module-mumble-intercom

A Bitfocus Companion module to control a Mumble VoIP server as a broadcast intercom system using Elgato Stream Deck.

graph LR
    subgraph SD["🎛️ Stream Deck XL"]
        B1["CAM 1<br/>MUTED"]
        B2["CAM 2<br/>TALKING"]
        B3["CAM 3<br/>WANTS TALK"]
        B4["MUTE ALL"]
        B5["STATUS<br/>8on 3opn"]
    end

    subgraph CP["⚙️ Companion + Module"]
        MOD["mumble-intercom<br/>─────────────<br/>✓ Voice Detection<br/>✓ Server Mute<br/>✓ User Tracking"]
    end

    subgraph MS["🖥️ Mumble Server"]
        U1["🎤 Camera 1"]
        U2["🔇 Camera 2"]
        U3["🎤 Audio Op"]
    end

    subgraph CREW["📱 Crew · 4G/WiFi"]
        C1["Camera Op 1"]
        C2["Camera Op 2"]
        C3["Audio Op"]
    end

    SD -- "Actions" --> CP
    CP -- "TLS + Protobuf" --> MS
    MS -. "Voice Packets" .-> CP
    MS <-. "4G / WiFi" .-> CREW

    style SD fill:#1c2530,stroke:#3a4a5a,color:#e8edf3
    style CP fill:#1c2530,stroke:#4a9eff,color:#e8edf3
    style MS fill:#1c2530,stroke:#44aa44,color:#e8edf3
    style CREW fill:#1c2530,stroke:#3a4a5a,color:#e8edf3
Loading

Designed for live production directors who need to manage crew communications from a physical control surface — mute/unmute camera operators, see who's talking, and manage the intercom bus in real time.

Why Mumble? Free, open-source, low-latency, runs on everything (phones, laptops, desktops), works over 4G/WiFi, and now you can control it from your Stream Deck.

Features

  • 🎙️ Server-side mute/unmute — Mute and unmute users directly on the Mumble server
  • 🟢 Real-time voice activity detection — See who's talking with color-coded buttons
  • 🎛️ Up to 16 user slots — Map each button to a camera operator or crew member
  • Instant feedback — Sub-second visual response to voice activity
  • 🔌 Zero native dependencies — Pure JavaScript implementation, works on Windows/macOS/Linux without build tools
  • 📦 Drag-and-drop presets — Pre-configured buttons ready to use

Button Color Scheme

Color State Meaning
⬛ Dark Grey OFFLINE User not connected to Mumble
🔘 Grey MUTED User online, muted by director
🟡 Yellow WANTS TALK User is speaking but muted — wants attention
🔴 Red OPEN User is unmuted (mic open), not speaking
🟢 Green TALKING User is unmuted and actively speaking

Requirements

  • Bitfocus Companion v4.x
  • A running Murmur (Mumble server)
  • The bot user must have admin permissions on the Mumble server to mute/unmute other users

Installation

As a Developer Module

  1. Download or clone this repository
  2. Install dependencies and build:
cd companion-module-mumble-intercom
npm install
npx tsc -p tsconfig.json
  1. Open the Companion Launcher → ⚙ Settings:
    • Enable "Developer Modules"
    • Set the developer modules path to the parent folder containing this module
  2. Restart Companion
  3. The module appears in Connections as "Mumble: Mumble Server"

Configuration

Connection Settings

Setting Description
Server Host Hostname or IP address of your Murmur server
Port Mumble server port (default: 64738)
Bot Username Unique name for the bot (e.g. Director_Bot)
Server Password Server password, if required

User Slots

Configure up to 16 slots, each mapped to a Mumble username. The username must match exactly (case-sensitive).

Setting Example
Slot 1 - Mumble Username Camera1
Slot 2 - Mumble Username Camera2
Slot 3 - Mumble Username Audio_Op
... ...

Granting Bot Admin Permissions

The bot needs admin rights to mute/unmute users on the server:

  1. Connect to Mumble as a user with admin privileges (or as SuperUser)
  2. Right-click the Root channel → Edit...
  3. Go to the Groups tab
  4. Select the admin group
  5. Add the bot username (e.g. Director_Bot) to the Members list
  6. Click OK

If you need to set the SuperUser password on your Murmur server:

murmurd -supw <your-password>

Actions

Action Description
Toggle Slot Mute Toggle server mute/unmute for a user slot
Mute Slot Server mute a specific user slot
Unmute Slot (Open) Server unmute a specific user slot
Open All Slots Unmute all configured user slots
Mute All Slots Mute all configured user slots

Feedbacks

Feedback Type Description
User Slot Status Advanced Changes button color based on user state
User Is Talking Boolean True when user is actively speaking

Variables

All variables use your connection label as prefix (default: mumble).

Variable Description
$(mumble:slot_N_status) Status text: OFFLINE / MUTED / WANTS TALK / OPEN / TALKING
$(mumble:slot_N_name) Configured username for slot N
$(mumble:slot_N_online) Whether user is connected (Yes/No)
$(mumble:slot_N_talking) Whether user is speaking (Yes/No)
$(mumble:slot_N_muted) Whether user is muted (Yes/No)
$(mumble:users_online) Count of online users
$(mumble:users_open) Count of unmuted users
$(mumble:connected) Whether module is connected (Yes/No)

Typical Setup: Multi-Camera Broadcast

Stream Deck XL Layout (example):
┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Camera1  │ Camera2  │ Camera3  │ Camera4  │ Camera5  │ Camera6  │ Camera7  │ Camera8  │
│ MUTED    │ TALKING  │ OFFLINE  │ OPEN     │ MUTED    │ MUTED    │ OFFLINE  │ MUTED    │
├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Audio_Op │ Graphics │ Replay   │ Floor    │ STATUS   │         │ MUTE ALL │ OPEN ALL │
│ OPEN     │ MUTED    │ OFFLINE  │ TALKING  │ 8on 3opn │         │          │          │
└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

The director can:

  • See at a glance who's online, talking, or trying to talk
  • Tap once to toggle any crew member's mic
  • Mute/Open All for scene transitions
  • Spot the yellow — someone muted wants to speak!
  • Status button — Always see a live count of online and open users

Presets (Drag & Drop)

The module includes ready-to-use button presets. Go to the Presets tab in Companion and drag them onto your Stream Deck.

Preset Category Description
Slot 1–16 Camera Slots Toggle mute button per user, with status text and color feedback
Open All Control Unmute all configured slots (green)
Mute All Control Mute all configured slots (red)
Status Info Displays live count of online users and open (unmuted) users

The Status button shows Online: X / Open: Y and updates in real time — useful to keep at a glance how many crew members are connected and active.

Technical Details

This module implements the Mumble protocol directly using:

  • Node.js tls module for encrypted connection to Murmur
  • protobufjs for Mumble protocol message encoding/decoding
  • UDPTunnel over TCP for voice activity detection (audio packets are tunneled through the TLS connection)

No native dependencies — no node-gyp, no C++ compilation needed.

Mumble Protocol Messages Used

Message Type ID Purpose
Version 0 Protocol handshake
UDPTunnel 1 Voice data (activity detection)
Authenticate 2 Login with username/password
Ping 3 Keep connection alive
Reject 4 Authentication rejection
ServerSync 7 Connection established
UserState 9 User join/leave/mute state
UserRemove 11 User disconnected
CryptSetup 15 Encryption setup for voice tunnel

Contributing

Contributions are welcome! This module was created for the broadcast community.

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

License

MIT License — see LICENSE for details.

About

Bitfocus Companion module to control Mumble VoIP as a broadcast intercom system — server-side mute/unmute, real-time voice activity detection, and color-coded Stream Deck buttons for live production directors.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors