Bitfocus Companion - Stream Deck emulator

Bitfocus Companion enables the Elgato Streamdeck to be a professional shotbox surface for a huge amount of different presentation switchers, video playback software and broadcast equipment.

You don’t need an actual Stream Deck device to use the Companion, because it comes with a built-in Stream Deck emulator. You simply access the web portal and add touch screens.

It includes the ability to trigger buttons via OSC, TCP, UDP, HTTP, WebSocket and ArtNet.

So whatever phone/tablet on whatever operating system has a Web browser, it can be a Stream Deck device! :slight_smile:


Can confirm thousands of hours using Companion 1x and 2. It is for people who have a Streamdeck device and people who wish they had one, and people who have a smartphone or any type of tablet and want the most operative benefits of owning a Streamdeck device.

Warning it will make you buy a Streamdeck device.

Here’s the tie-in. Gig Performer loves Companion because OSC.


Nice and looks like a good option to test steam deck and to complement steamdeck.

Require the use an internet connection / login to a server or can it be used based on a local (eg Mac - iPad / iPhone) setup?

It’s a standalone application you run on your own LAN as a server. It serves a web page(s up to 99) you can access from your phone for example that emulates on a touch screen the function of a Streamdeck.

It also has a drag&drop authoring Ui that lets you configure it and program the function of 99 pages of 8x32 buttons arranged as in a Streamdeck XL. If you have a Streamdeck device it will work with that quite seamlessly and flexibly. If not it can emulate a Streamdeck to any device with a screen.

It has dozens of installable and configurable modules that can expose the function of many kinds of devices and software used in stage, video, and other applications. For example a VLC module allows you to create a cluster of highly functional buttons to control an instance of VLC for full control of video playback. For a guy who started threading open reel videotape in the machine room half a century ago during live broadcasts when some of it was still B&W this is a truly head shaking thing to have witnessed.

There is even a release that is distributed as a Raspberry Pi image that produces a standalone Companion server. The support Slack is very active as are the developers. I’ve found Companion to be fantastically well named. Hope that gives you a thumbnail.

EDIT: Gig Performer, through OSC, can bypass Companion, which may be advantageous for sending the simplest commands in the best case over a LAN. The big advantage of Companion I think is how much testing and care has gone into making the special purpose Companion modules available that typically expose functionality at a higher and more parametrized level for sequencing to button events. This ties in as well with their latest release 2.x that supports “triggers” for conditionals. There’s a very wide variety of very diverse devices and software used in stage productions and Companion can talk to them all.

1 Like

thanks for the feedback :+1:

This sounds promising , just scratching my head is there a Gig Performer module for Bitfocus Companion , I don’t think so , so how would one integrate this emulator into gig performer ?

Stream Deck is straightforward , the GP plugin talks through the Streamdeck Console to the GP Extension for commands like this view and that view , but in Bitfocus Companion a module has to be loaded to communicate through the Companion Server , without a Deskew GP module in Bitfocus Companion how would this work ? The Emulator that is , with GP .
Generic OSC module ?

There is not to my own knowledge a module for Gig Performer at least in the current stable release of Companion 2.x. I’ve used the generic OSC module to communicate with Gig Performer quite successfully of course. I’ve seen that Bitfocus encourages developers to contact them about OSC modules. Based on what I’ve seen in their Slack over a few years now I believe the Companion developers will actually organize making these modules if they can have access to the software or hardware in question. They definitely prefer to add specific support Companion modules when possible: they have a LOT of them included in the release.

1 Like

GP & Bitfocus Companion_osc.pdf (1.6 MB)

Here is a flow chart of some things to look for is you’re new to GP and OSC like I am ! This is beginner fodder , but like most of us , we have to start somewhere …

here are some other notable fun facts I learned this week with Bitfocus Companion , not so much GP related but while we are here .
The internal: System: Run shell path (local) is handy to say launch apps and in that case here is more beginner advice regarding that , say I want to launch GP from a button I would create a regular button and select a press action from the Internal module which isn’t really a module you add it’s just available from browse actions when you click the red folder , then scroll down to System: Run shell path (local) , click done , now find the in Applications , Mac OS that is , and you can get the path name from right click and hold option and then click "copy as pathname , that’s one way to do it . Then back to Bitfocus Companion and in Path (supports variables in path) enter
open ’
this is the word open and then one space and then one comma , single quotation if you will and then paste the path in this case for GP you would have

open ‘/Applications/’

took me a while to learn this syntax is important , I’m just a guitar player after all .

Also another fun fact is that the Bitfocus Companion up and down buttons that are built into pages only work on the Emulator or the device like Stream Deck for instance . Good to know .

Hope this helps anyone who isn’t a programmer and just want to launch stuff , rockets into space , that sort of thing .

I saw your thread here: Deskew Gig Performer software · Issue #1391 · bitfocus/companion-module-requests · GitHub

(also curious why did they tag it as “missing documentation”? )

ha interesting , likely because I didn’t attach the GP source code , it was sort of a knee jerk reaction , but maybe it can get the ball rolling ?

You can share with them the blog article about the Stream Deck extension + blog article about Extensions. (There is Gig Performer’s SDK listed).

So they can do something.

I see that they support lots of modules: Bitfocus - Connections

Having the access to GP’s SDK will maybe motivate them to develop a module.

1 Like

let’s hope ! I’ve attached those blog article links to my thread with Bitfocus Companion .

1 Like

Perfect :ok_hand: :beers:

It’s important to understand that even without a Companion module, Gig Performer is absolutely and well supported by Companion’s “generic OSC” module, in my own experience.

Not only that, but you can set up a 2-way exchange between Gig Performer and Companion, using the existing OSC features in Gig Performer. This also works in previous Gig Performer versions.

You can have for a simple example, a Companion (ie Streamdeck) button that will function to toggle the play state of Gig Performer:

When this button reads “PLAY” for example, that’s because Gig Performer sent that string to appear on the Companion button, and the same when it reads “STOP.”

This is significant to understand I think because OSC was originally designed with an idea of just sort of flinging a UDP packet over the wall and assuming it will work. That’s what Companion’s generic OSC module does. But the combination of Companion’s other features for handling incoming OSC messages with the comprehensive OSC support in Gig Performer, gives you a way to have a Streamdeck button that has a 2-way exchange, a handshake if you like, that you can be confident works AND reports status correctly.

If the Companion/Streamdeck button says Gig Performer is playing that’s because it’s playing, If it says stop there can’t be any other reason except that it’s stopped.

So what else did you configure, besides Play/Stop? :slight_smile:

Any photos?

1 Like

Thanks and further how does this two way handshaking look like from a osc command , all I see is “/Play” with integers 0 and 1 and indeed this stops and starts the GP global play , what is involved to actually see a change in the stream deck button … okay I just added a press action change button background and I guess that is the magic you’ve alluded to , cool .
Further aside , is there an osc command to show the global Rackspace view ? I don’t see one
I do see…

/Actions/PanelView Switch to the Panel view
/Actions/WiringView Switch to the Wiring view

etc . Thanks !!

I’m going to have to go back and fish out the out my gig file. There’s a meta string you can put into the Companion button name, $N I think that will show the last string received from Gig Performer in the displayed Companion button on the Streamdeck. I remember I also used a GP system action plugin to toggle the GP play state using an OSC path, I think.

I figured out a button press to show and hide Global Rackspace using the cmd +g keystroke

First call the app using the local shell path [internal] and then invoke the cmd +g keyboard shortcut [Vicreo Listener] to show the global backspace , also included a ten millisecond delay to occlude interruptions … win .

1 Like

That’s great if it works for you. I know that a lot of people in the Companion Slack like to recommend this Vicreo utility, and there’s nothing wrong with it and from what I’ve seen its developer is very diligent and very much deserves a couple of each user’s bucks. I’ve also used it on Mac and Windows and it works great. But it’s another moving piece in the equation.

I would be more inclined to want to find a way to show the GP Global rackspace as a result of directly sending an OSC path to Gig Performer, instead of translating that to a simulated keystroke and Vicreo sending that to GP. It just seems like a cleaner solution to me, that would be my own approach to this.

My own attempts with simulated keystrokes is it can be kind of hit and miss sometimes in unexpected ways. I’d be more inclined to want to find a way to map the rackspace focus to a GP OSC path. I’m afraid I don’t know how, but maybe there’s a way with a GP scriptlet?

1 Like