Remote control & Stream Deck

The most ergonomic way to drive a running Composer show from a hardware control surface is via Bitfocus Companion, free and open-source software that maps Stream Deck buttons to HTTP requests. Composer's Connectors make ideal Companion targets because each Connector is a single named HTTP endpoint that triggers a defined sequence of actions inside Composer.

You can drive Composer from:

  • A physical Stream Deck (any model — XL, MK.2, Mini).
  • The Stream Deck Emulator in any web browser, including phones and tablets, useful when you don't have hardware on hand.

Stream Deck Emulator running in a browser

Setup overview

Three things have to be in place:

  1. Companion — the bridge between hardware buttons and HTTP requests.
  2. Composer Web API — receiving the HTTP requests.
  3. Connectors — the named endpoints Companion will call.

1. Download and install Companion

Get Companion from bitfocus.io/companion. Its official documentation covers installation and basic usage in detail.

2. Configure Composer for remote control

Open Edit → Settings → Web API in Composer and enable Web API. Confirm the port (default 44433):

Web API settings tab in Composer

If you're using API keys (recommended for any non-LAN-isolated setup), you'll also need to pass the key with each Companion request.

Hello World walkthrough

A simple end-to-end example — a Stream Deck button that toggles a "Hello World" text element on/off.

Add a text input to the scene

Add a Text Input showing "Hello World":

Hello World text input on the scene

Add the connectors

In the Connectors tab, click Add Connector twice to create two Connectors:

Add Connector button on the Connectors tab

Rename them to MyConnectorHide and MyConnectorShow:

Two renamed Connectors

For each, add an API Command that targets the Hello World layer's IsVisible property — false for MyConnectorHide, true for MyConnectorShow:

API Command targeting IsVisible

Configure Companion

Launch Companion and open its GUI:

Companion launcher with Launch GUI button

Open the Connections tab and add a new connection of type Generic HTTP Requests:

Companion Connections tab with Generic HTTP Requests

Set the connection's Base URL to your Composer's Web API endpoint:

http://<COMPOSER_HOST>:44433/api/connector/trigger?

…replacing <COMPOSER_HOST> with Composer's IP (e.g. 192.168.0.57):

Edit Connection form with Base URL set

Save:

Save connection

The connection appears in the list with a green active status:

Connection active in the Connections list

Bind commands to buttons

Open the Buttons tab:

Companion Buttons tab

Click an empty button cell to start creating a button:

Create button option

Set the button text to Hide:

Button with Hide text

In Press actions, choose your MyComposerConnection connection and the POST method:

Press actions with connection and POST method

Set the URL to name=MyConnectorHide:

URL bound to MyConnectorHide

Repeat for a second button bound to name=MyConnectorShow with the text Show.

Try it out

Test the button using the Test action in the Companion GUI, with Shift + Click, or via the mobile emulator at:

http://<COMPANION_HOST>:8000/tablet

…where <COMPANION_HOST> is the host running Companion:

Test button in the Companion GUI

The text element on the Composer scene toggles visibility on each button press.

Other types of integrations

Companion is the most ergonomic Stream Deck path, but the same /api/connector/trigger endpoint is callable from anything that speaks HTTP — backend services, mobile apps, Twitch chat bots, MIDI-to-HTTP bridges. Anything that can make a POST request can drive a Composer show.

Where to learn more

  • Connectors — the full Connectors reference, including Connector naming, parameter passing, and Script Engine integration.
  • Bitfocus Companion documentation — Companion's own docs.
  • Integration guide — when to use Connectors vs HTTP API vs Script Engine for the rest of your integration needs.