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.61k stars 504 forks source link

Feature Request: Add Tagging System for Button References to Ensure Consistency #3138

Open davojc opened 6 days ago

davojc commented 6 days ago

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

Is there an existing issue for this?

Describe the feature

Description: In the current Bitfocus Companion setup, referencing a button requires specifying its exact page, column, and row. While this approach works, it creates challenges when buttons are moved or rearranged, as users must update references manually to reflect each new position. This proposal suggests implementing a tagging system that allows users to assign unique, persistent tags to buttons. These tags would follow the button wherever it is moved, providing a stable reference point regardless of layout changes.

Advantages of a Tagging System:

Improved Flexibility for Layout Adjustments: Users can freely reorganize button layouts without worrying about updating every reference to match the new positions. This is particularly useful for users with large, complex configurations, as it drastically reduces the time spent managing and updating button references.

Reduction in Maintenance Efforts: Manual updating of references becomes unnecessary with tags, as the tag remains constant regardless of where the button is placed. For users managing multiple pages or frequently adjusting button layouts, this feature would minimize errors and maintenance needs, making workflows smoother and more reliable.

Enhanced Usability for Complex Setups: For advanced users with intricate workflows that require precise button references across different layouts, the tagging system ensures commands remain accurate and consistent. Tags simplify the process of setting up and modifying configurations, providing a user-friendly experience even for complex setups.

Error Prevention: Since tags maintain consistent references, the risk of broken or incorrect button references is greatly reduced. This minimizes the chances of operational errors, particularly in live settings where accuracy is crucial.

Streamlined Command Logic: With tags, commands and scripts that reference buttons can be set once and remain consistent, making it easier to manage and execute tasks that rely on specific buttons. This also makes it easier to document workflows, as each button’s tag provides a clear, recognizable reference.

Usecases

dnmeid commented 5 days ago

Have a look at #2387 There I go one step further and propose the separation of the button from the actions. When actions are not an integrated part of the button but are in fact called by the button press (or release or whatever), a method of naming the actions and calling them would be needed anyway. So actually I consider your feature request to be a part of #2387 Especially some of your usecases would be streamined even more with a separation, because you would not have one master button and some references but instead one script/action set and call that from different locations.

Julusian commented 5 days ago

I don't think this should be considered part of #2387. While it has some overlap, this is a much smaller and well scoped task that I think is a needed follow up to #2438.
The current fallout of #2438 is that I think that reordering pages is pretty dangerous as it will very easily break existing button press references.

There is some overlap with #1676 and #2138.

My question is what we should use as the stable reference: 1) User defined 'tags'

davojc commented 5 days ago

I have seen #2387 but wanted to provide something that is more doable in the immediate future.

I totally agree with the idea of creating scripts independent of buttons ... at the moment I am using a button as a kind of script where other buttons set variable state and then that button is the script that executes with the variable state. This means I don't have to create a set of actions for each button. BUT that is another improvement. I still think that my above suggestion is relatively easy to implement with no obvious side effects.

As for Julusian's suggestions ...

I wasn't considering multiple tags unless tags take on another purpose. This is a very specific tag for the purpose of identifying a button and so a button should only have one of these and it should be unique compared to all other buttons on all other pages. This is a reference assist and so it must be unique.

Perhaps tag was a bad choice of words. I thought about label but then that could be confused for the display text. Maybe a user-defined identifier would be a better choice of terms.