Skip to main content
Version: 0.5.0

Bitfocus Companion

ShowRevue Companion preferences

Preferences → Control → Companion: variable polling, feedback, and the variable library.

ShowRevue has three independent Companion integrations:

FeatureDirectionWhat it does
Companion ModuleCompanion → ShowRevueControl transport, navigation, messaging from a Stream Deck or surface
Variable FeedbackCompanion → ShowRevuePull live variable values from Companion and display them in overlay text
State FeedbackShowRevue → CompanionPublish ShowRevue's live state (record, cue, timecode…) so Companion buttons show real feedback

All Companion settings live in their own Preferences → Companion tab (new in 0.4 — previously under OSC Input).


Use native connections when they exist

ShowRevue has direct, purpose-built integrations for GrandMA3, GrandMA2, ETC Eos, and QLab. Use those for lighting cues and media cues — they are lower-latency and require no Companion in the chain.

Variable Feedback is the right tool when ShowRevue doesn't yet have a native integration for a piece of gear — for example, an ATEM switcher program input, a Disguise show variable, an MA3 custom attribute, or any other data your Companion setup already knows about. If ShowRevue adds a native integration for something you are currently piping through Companion, switch to the native path.


Ports

Three independent ports are involved — keep them straight:

PortWho listensDirectionUsed for
8001ShowRevueCompanion → ShowRevueOSC Control — commands (record, cues, messaging). Enable in Preferences → OSC Control.
8002Companion (the module)ShowRevue → CompanionState feedback — ShowRevue publishes /showrevue/state/*.
8000CompanionShowRevue → CompanionVariable polling — ShowRevue reads Companion's HTTP API.
Same machine = different ports

If Companion and ShowRevue run on the same Mac, the OSC Control listen port (8001) and the module's feedback listen port (8002) must be different — two processes can't bind the same UDP port. They can share a number only across different machines.

Commands send but nothing happens?

The module's last_command variable updates when the module sends the OSC packet — it does not confirm ShowRevue received it. If a command "sends" but nothing happens, check that OSC Control is enabled in ShowRevue (Preferences → OSC Control) on the port the module targets (default 8001).

Companion Module

The Companion module lets you control ShowRevue from Stream Decks and other Companion-compatible surfaces.

Install

Download the .tgz from the Companion/ folder in the source repo and install it from Companion → Modules → Install from file.

Configure the module

  • Host — the Mac running ShowRevue
  • Port8001, which is the default ShowRevue remote-control port

Available preset groups

  • Transport — Record, Stop, Play, Pause
  • Navigation — Next or previous cue, next or previous timecode segment, ±5 seconds, next or previous frame
  • Loop — Set in or out, go to in or out, toggle, enable, disable, stop, clear
  • Messaging — Mask on, off, toggle, clear message, and configured message presets
  • NDI Output — Set source to Show Output or GUI Mirror (sends /showrevue/ndi/source, see NDI Output)

See the Companion project README for the full action and variable reference.


Variable Feedback

ShowRevue can poll Companion's HTTP API to read live variable values and display them in overlay text widgets.

How it works

ShowRevue polls http://<companion-host>:<port>/api/variable/<connection>/<name>/value on a configurable interval. When a variable changes, the new value is substituted wherever $(connection:variable) appears in a text field.

Variable IDs use Companion's native format:

FormatExampleEndpoint
connection:variableatem:pgm1_input/api/variable/atem/pgm1_input/value
custom:variablecustom:song_title/api/custom-variable/song_title/value

Setup

In ShowRevue:

  • Open Preferences → Companion.
  • Enable variable polling.
  • Set Host to the machine running Companion (use 127.0.0.1 if Companion is on the same Mac).
  • Set Port to Companion's HTTP API port — default is 8000.
  • Set Poll interval200 ms is a good default; lower values increase responsiveness at a small CPU cost.
  • Confirm the status indicator shows Connected.

In Companion:

  • Make sure HTTP API access is enabled (it is by default in Companion 3+).
  • No other configuration is needed — ShowRevue reads variables directly via HTTP.

Variable discovery

You never have to add a variable to use it — typing $(connection:variable) into any text field registers and polls it automatically (see the tip above). The Variable Library is simply a place to browse, preview live values, and confirm IDs.

On first connect, ShowRevue seeds the Library with Companion's built-in internal:* variables (time, date, page, uptime) so they show in autocomplete immediately. Your module variables (ATEM, Disguise, custom variables, etc.) won't appear in the Library list until they're referenced or added — to add one for previewing:

  1. Open the Companion web UI → go to Connections → [your module] → Variables and copy the variable name exactly as shown (e.g. atem:pgm1_input).
  2. Paste it into the add field in Preferences → Companion → Variable Library and click Add. Both formats work: atem:pgm1_input and $(atem:pgm1_input).

Either way, once a variable is referenced (in a widget) or added (to the Library) it starts polling immediately and shows its live value.

The table shows each variable's current value and when it last changed. The variable count shown in the header reflects how many variables ShowRevue is currently tracking.

Bulk import

Some Companion builds expose a /api/variable-definitions endpoint that ShowRevue uses to import all variables at once. If your Companion version supports it, all variables will appear automatically on first connect without any manual setup.

Use variables in text fields

Type $( in any ShowRevue text field to open the autocomplete list of known variable IDs. Select one to insert it.

$(atem:pgm1_input)
$(custom:show_title)
$(companion:selected_page_name)

The live value is substituted in:

  • Overlay custom text widgets — burned into the recorded video and visible on the live preview
  • Live message presets — text shown on operator displays

If a variable is unknown or Companion is unreachable, the placeholder resolves to an empty string.

Variable Library table

Preferences → Companion → Variable Library shows all tracked variables:

ColumnDescription
Variable IDThe connection:name identifier
ValueCurrent live value from Companion
Last ChangedHow long ago the value last changed

Use the search bar to filter by ID or value. Select one or more rows and click Remove Selected to stop tracking them.

Paste straight into a Custom Text widget

You don't have to add a variable to the Library first. Paste $(connection:variable) directly into any Custom Text overlay widget — ShowRevue registers it automatically and resolves it live (in both the operator overlay and the recorded video). The Library is just for discovery and previewing values.


State Feedback (ShowRevue → Companion)

New in 0.4: ShowRevue can publish its own live state back to Companion over OSC, so your Stream Deck buttons show real feedback — a red RECORDING button, the live cue number on a button, the running timecode, and so on.

Setup

In ShowRevue:

  • Open Preferences → Companion.
  • Under Send Feedback to Companion, enable Publish ShowRevue state.
  • Set Host to the machine running Companion (127.0.0.1 if it's the same Mac).
  • Set Port to the ShowRevue module's feedback listen port — default 8002.

In Companion, install ShowRevue module v0.2.0 or later, which adds the matching variables and a Recording boolean feedback (use it to colour a button red while recording).

How often it updates

State is pushed the instant a value changes — there's no manual "resend". Record state, cue, and show name update immediately; timecode and fps update once per second (they're sent as HH:MM:SS). Changing the host/port re-pushes the full current state automatically so Companion is never left stale.

Published values

Each value is sent as an OSC message /showrevue/state/<key>:

OSC addressModule variableValue
/showrevue/state/recordingrecording1 while recording, 0 when idle (drives the Recording feedback)
/showrevue/state/timecodetimecodeCurrent timecode HH:MM:SS (or --:--:-- when no LTC lock)
/showrevue/state/fpsfpsDetected frame rate, e.g. 25.00
/showrevue/state/ltc_statusltc_statusLTC lock state — Locked / Weak / No signal
/showrevue/state/cue_numbercue_numberCurrent lighting cue number
/showrevue/state/cue_labelcue_labelCurrent lighting cue label
/showrevue/state/time_since_cuetime_since_cueTime since the last cue fired
/showrevue/state/show_nameshow_nameThe current show name
/showrevue/state/session_namesession_nameSession name, e.g. Show 1
/showrevue/state/session_typesession_typeSession type — Show / Tech / Dress
/showrevue/state/show_phaseshow_phaseShow State phase — PRESHOW / ACT 1 / …
/showrevue/state/show_timershow_timerShow State timer — counts up during acts, counts down during intervals
/showrevue/state/curtain_countdowncurtain_countdownLive countdown to the next curtain during preshow (− H:MM:SS)
/showrevue/state/streamingstreaming1 while RTMP streaming
/showrevue/state/ndi_sendingndi_sending1 while NDI output is on
/showrevue/state/note_countnote_countNotes taken this session
/showrevue/state/next_curtainnext_curtainNext curtain time HH:MM
/showrevue/state/source_healthsource_healthCamera/source — ok / no signal / off
/showrevue/state/disk_freedisk_freeFree space on the recording volume, in GB

FeedbacksRecording (button red while recording) and Source problem (button amber when the source is no signal / off). The Status preset group has ready-made read-out buttons for source health, free disk, note count, and a recording lamp.

Troubleshooting

SymptomCheck
Status shows red / not connectedConfirm Companion is running and the host/port matches
Variable resolves to emptyConfirm the variable ID is spelled correctly — check Companion's variable list
Variable stopped working after Companion changeConnection was probably renamed in Companion. The variable ID prefix must match the connection label exactly. Remove the old ID from the Variable Library and re-add it with the new connection name.
Value is staleLower the poll interval; confirm the Mac and Companion machine are on the same network
Variables missing from autocompleteAdd them manually in the Variable Library, or reference $(connection:var) in a text field to trigger incremental discovery
Only internal:* variables appearYour module variables need to be added manually — find the IDs in Companion's web UI under Connections → [module] → Variables