Stoatworks Labs

User guide

Companion — Mynah user guide

v1.1.2Updated 12 October 2026

This module drives an Analog Way LivePremier (Aquilon) with lighting-desk command syntax, from a Stream Deck or any other Bitfocus Companion surface. You can type a command, or build one out of key presses.

The README covers installing the module. This guide covers both ways in, and what the grammar will and won’t accept.

Before you rely on this: I’ve driven the module end to end in Companion 5.0.1. The socket it uses is the same Web RCS WebSocket that Analog Way’s own browser UI uses, and it’s unauthenticated, so keep it on a network you trust: anything that can reach it can put something on air.

This module was built with AI assistance, directed and reviewed by a human author.


Connecting

Device address and port. 80 for a switcher, 3000 for the LivePremier simulator. The module reconnects by itself if the link drops.


The Command action

Verb first, then what it acts on:

Command What happens
Recall Screen 1 Memory 5 Memory 5 into Screen 1’s preview
Recall Screen 1 Memory 5 Program Straight to program
Recall Screen 1 Thru 4 Memory 7 Four screens at once
Recall Master 12 A whole-desk memory
Recall Screen 3 Layer 1 Memory 8 A layer memory
Store Screen 1 Memory 5 Store program into memory 5
Store Master 12 If Screen 1 + 3 Category Source A masked store
Take Screen 1 Transition preview to program
Label Screen 1 Memory 5 "Wide Open" Name a memory
Delete Screen 1 Memory 5 Erase it

Ranges use Thru, + and -, so Screen 1 Thru 8 - 5 is every screen from 1 to 8 except 5.

You can shorten any keyword to a prefix, as long as it isn’t ambiguous, so R Sc 1 Th 4 Me 7 is the same command as the long form. That helps a lot when you’re typing into a button field rather than on a console.

The field takes Companion variables, so a command can be put together at the moment it’s pressed.


The two defaults that decide what reaches air

A Recall on its own goes to Preview. A Store on its own takes from Program. That’s the device’s own default, not something I made up.

So getting to air always takes an explicit Program or a Take. No command puts something on screen by accident because you left a word off.


Ranges

Bank Memories
Screen and Aux 1–1000
Master 1–500
Layer 1–50

Screens are 1–24, auxes 1–96, layers 1–128 plus Native.

Anything outside those is refused rather than clamped, and the refusal is logged. Type screen memory 5000 when you meant 500, one digit too many, and a clamp would recall memory 1000 instead.


Every command names its own scope

Unlike the Mynah web tool, a button has no sticky selection. Every command has to name its screen, and that’s why Select and Clear are refused.

It’s the right trade for a surface. A button whose meaning depends on which button was pressed before it will do the wrong thing the first time someone else wanders past the desk.


The command builder

Build a command out of key presses instead of typing one.

Drag the Command builder presets onto a page: the numbered slot keys in order, then Back, Home, More, Fire and Save. Then tell the connection how many slot keys you laid out. A Companion module never gets told how big a surface is, so it can’t work this out for itself.

Press a slot and the faces change to the next set of choices: the verbs, then what to act on, then a list of screens, with a 123… key that takes you to a keypad for anything longer or for a range.

The page never changes; the keys relabel themselves. A module can’t change Companion’s page, so the builder changes the faces instead. The upside is that your muscle memory for where Fire lives stays right all the way through.

Fire lights as soon as what you’ve built compiles, which is often before the last question’s been answered: Take Screen 1 is finished the moment the screen lands, and the offer of Preview or Program is only an offer.

The keypad has Thru, + and - wherever the grammar takes a range, and hides them where it doesn’t. Back is an undo, one press at a time.

Save parks the line on one of twenty-four macro slots. Macros live in the connection’s own config, so they survive a restart and go along with a Companion configuration export, and each macro key labels itself.

What the builder deliberately leaves out

Set and Label.

Label needs a quoted string, and a control surface has no way to type one. Set (live layer control) needs the device’s current buffer state, which this module doesn’t track, so the compiler would refuse every one the builder made. Offering either would mean offering a key that can’t work.

You can still use both from the typed Command action.


Feedbacks

  • Memory is loaded on a screen: the memory sits in one of that screen’s preset buffers. It doesn’t tell preview from program: the device reports buffers as A/B/C, and which one is preview differs between screens. Read it as “this memory is in play here”.
  • Connected to the device
  • Screen is selected in the vendor Web RCS: what the browser UI has selected, which is handy when someone else is driving it.
  • Builder: what a slot is showing: colours a slot key by what it holds, so an empty slot goes dark and a Delete goes red, with nothing for you to set up.
  • Builder: the line would fire
  • Builder: the list has more pages
  • Macro: the slot holds a command

Troubleshooting

Symptom Cause
The builder’s slot keys run out The connection was not told how many you laid out.
A command was refused Out of range — the log says which part. It refuses rather than clamping.
Nothing reached air An unqualified Recall goes to preview. Add Program, or send a Take.
Select does nothing It is refused by design; every command names its own scope.
Set or Label missing from the builder Deliberate — see above. Use the typed Command action.
Fire lit before I finished Also deliberate: the line already compiles.

See also

  • README: installing, and the full list of actions, feedbacks and variables
  • companion/HELP.md: the same material, in Companion’s help panel

This guide lives in the project's own repository and is rebuilt from it, so corrections are welcome as a pull request against docs/USER-GUIDE.md. Last updated 12 October 2026.