bitfocus / companion

Bitfocus Companion enables the reasonably priced Elgato Stream Deck and other controllers to be a professional shotbox surface for an increasing amount of different presentation switchers, video playback software and broadcast equipment.
http://bitfocus.io/companion
Other
1.63k stars 505 forks source link

Trigger remote Companion buttons without Satellite #3158

Closed bramsteenbrugge2 closed 1 day ago

bramsteenbrugge2 commented 4 days ago

Is this a feature relevant to companion itself, and not a module?

Is there an existing issue for this?

Describe the feature

Add connections to other instances of Companion on the network, to retrieve certain buttons of those Companion instances.A bit like Companion Satellite, but with more control and customization.

I haven't found a way to do this, so please correct me if I'm wrong if this already exists.

Usecases

Say I have a production with multiple rooms, and each room and their director have their own Companion setup. In the MCR, there's another Companion running with the video routing setup. The director's Companion does not have access to the video router itself. They should be able to copy 'remote buttons' from the MCR's Companion instance, so they can trigger some routing themselves if they want to. When they trigger the buttons on their local Companion, they effectively trigger a button on the MCR Companion.

josephdadams commented 4 days ago

Bitfocus Companion Cloud. It does this perfectly.

bramsteenbrugge2 commented 4 days ago

Sorry, I was talking about a local network, assuming we don't have access to internet connection, only locally.

bramsteenbrugge2 commented 3 days ago

Not sure if this can be reopened again, given this new information?

thedist commented 3 days ago

Is there a reason you can't use a single Companion server that is utilized by all rooms, rather than using multiple Companion servers?

bramsteenbrugge2 commented 3 days ago

Yes several reasons, most of them are related to network access and security issues. Also, a centralized approach has a single point of failure, which would mean if our single Companion server goes down, the entire conference stops.

I don't think implementing this is a bad idea, the idea of borrowing buttons from other Companion servers might be really helpful in lots of situations, and the fact you'll be implementing this in Companion Cloud shows you guys somewhat agree. But the biggest issue with Cloud is I'd have to rely on internet connectivity, which is a big no-no in some productions where network security won't allow access to the internet.

If there was a way to run the Companion Cloud service on-premise, this issue would be resolved.

thedist commented 3 days ago

If the Companion servers being run in each room don't have access to control the video router in the MCR for 'network access and security issues' reasons, then wont accessing buttons on the Companion server running in the MCR to in turn control the video router essentially be circumventing those network/security restrictions that are intended to be in place? As if you can access a remote Companion server from each room then you can access everything that it can access as Companion exposes those connections to whoever connects to it.

Additionally to the issue of a single point of failure, if the Companion server in the MCR goes down then once again all other rooms will lose access to the video router.

bramsteenbrugge2 commented 3 days ago

The examples I'm giving are what they are - examples. I'm not saying that this is the exact setup we are using and that these are the exact network security rules that are implemented, because doing that would mean I'd have to write an entire essay on our practices and on those of the network admins, which they also probably wouldn't appreciate.

To try to counter your absolutely valid point, let's say the fact that the network rules that are in place have nothing to do with the av setup and that they have an accidental effect of not being able to reach the video router and we'd need to bypass this by sending commands to the MCR Companion server. Let's also say the network admins give us a go to do this. You can talk about the fact that this would be poor network design, but again, I'm talking examples, even though this is something that might happen in the real world because of a plethora of reasons, constraints, stability issues, or even plain time shortage.

And indeed, if the MCR Companion server goes down, we'd have no more way of routing video, but at least the director is still able to control his own room.

Let's actually take this to make an example of a totally different scenario. We might have 2 companion servers, a main and a backup, having the exact same configuration except for the fact the backup doesn't have it's instances enabled. Our user Companion triggers them both with 1 button, and if the main goes down for whatever reason, the backup will be under the same button (after enabling the instances, which surely could be automated if main doesn't respond after x amount of ping or some other solution - you get my point).

Another example delves into the QOL of the user. Let's say there are 10 rooms with all completely different setups, the only thing they have in common is having to have access to the video router inside the MCR. This would mean we'd have to set up the video router instance 10 times, and configure the specific buttons 10 times (as each room will need to do it's own, different video routing). With the feature I'm requesting, they can just copy their buttons from the MCR Companion that had to be set up only 1 time. Yes, you could argue to set up all buttons on one companion and import these pages to the 10 different Companion configs and then manually delete the ones you don't need and reorder them to fit the workflow of that specific room, but that would still be less handy than to send a remote button press, in my opinion.

What everything comes down to, is the fact that I'd like to see a Companion Cloud feature on the local network level/peer-to-peer Companion integration. I'm sure there are way more usecases for this than mine alone. What I and many others absolutely love about Companion is the flexibility it gives us. This feature would, in my eyes, expand the flexibility enormously, even if my examples aren't the strongest. I'd hoped you guys would see the same benefits.

josephdadams commented 3 days ago

I re opened - I recall this being requested before so if I can find that issue number i will tag one of them as a duplicate and close it then.

Julusian commented 2 days ago

@josephdadams perhaps https://github.com/bitfocus/companion-module-requests/issues/304, which has also been closed because of cloud?

bramsteenbrugge2 commented 2 days ago

My apologies if this belongs in the module requests. It's kind of meta so I thought it might fit better here.

dnmeid commented 2 days ago

Yes, I'd say this is a valid request and it is best covered by a module. A module to interact with a different Companion on the local network. Maybe this will use a combination of Satellite protocol and other API to access buttons and variables. The best place for this request would be in the https://github.com/bitfocus/companion-module-requests The https://github.com/bitfocus/companion-module-requests/issues/304 has been closed because it was in the scope of cloud, but this one is about local network. So please open a request there

bramsteenbrugge2 commented 1 day ago

@dnmeid thanks, i posted in https://github.com/bitfocus/companion-module-requests/issues/1692#issue-2687677017