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.55k stars 502 forks source link

Add the ability for Press Duration to accept a Custom Variable #2401

Open ZoomTestKitchen opened 1 year ago

ZoomTestKitchen commented 1 year ago

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

Is there an existing issue for this?

Describe the feature

Provide the ability to reference a Custom Variable for the Hold/Release Duration.

Usecases

Project: ZoomOSC/ISO control panel that will be distributed to multiple users to manage their meetings.

Description:

Developing multiple Companion Pages that contain buttons where a Short Release will Select/Deselect the Zoom Participant, and optionally a Long Press will Spotlight/Unspotlight that participant.

The amount of delay for the long press has really become a personal preference with users, and the ability to easily update this delay value for 140+ buttons on this project is highly undesirable.

The flexibility of being able to store and reference the delay value in a custom variable would be a fantastic addition. A single change to the delay value would instantly customize the user experience.

I could also then leave the adjustment of the value of this delay to the user by providing incrementing/decrementing buttons and storing their preference to the variable.

Thanks for your consideration.

dnmeid commented 1 year ago

This is not likely to be integrated that way. Is see a few solutions/workarounds available.

  1. You can open your database file with a text processor and just edit all duration group entries with search/replace.
  2. Add two duration groups with different times. In the shorter one don't use your action directly, but trigger another button if condition is true. on the other button have your release action. Make the expression so it only fires if the user opted for the shorter version.
  3. Make your buttons with different steps. Use different release group timings for the steps. Make steps not automatic progress. Make a few buttons which switch all your spotlight buttons to the step with the desired release timing.
Mozoloa commented 1 year ago

I think it would be cool to be able to adjust the delay with variables, here's another use case:

Smoke machine adjustable timer

Ability to change two variables, toggle smoke during X seconds, every X minutes. You can already increment some variables but use them as a delay between smoke on and smoke off would be great.

Julusian commented 1 year ago

I think the challenge here is more of a UX problem than technical. It would be not that hard to make it work (although it does require reworking some data structures, and changes a lot of assumptions in the code), but it raises the question of how do we present these delay groups in the ui in a sensible way. Today we order them by the duration, but the ui doesn't know how to interpret $(internal:custom_abc) as a number, so they will likely end up in a random order with no indication of what the actual delay might be.
Maybe it could poll the backend for number values of them every few seconds, but if you are looking at the programming on the button and the timings change, things will jump around. That will make it very annoying (or perhaps even impossible if the numbers are changing fast enough) to edit the buttons.

albertorighetto commented 11 months ago

+1 on this Currently using the same delay on tons of buttons to match the fade and cross-fade times on a show. Having the ability to change that value with a variable would be awesome and a huge time-saver.

tubalois commented 11 months ago

+1 om this. Usecase: Compensate different response times of different screens by user on set and not while setting up companion. My case explicitely: I have two hyperdecks which playback different videos, which have to be in sync (one video for the audience and one for the artist/performer). Different systems have different response times, especially when the venue uses special systems. My idea: buttons for increasing and decrreasing the delay --> custom variable. The custom variable is then used as the delay paramter of the play action of the slower device.

Julusian commented 11 months ago

I think this has started talking about two different types of delay.

This issue is about the delay action groups: Screenshot from 2023-10-06 13-20-38

Not about the delay property on each action: Screenshot from 2023-10-06 13-20-48 For the delay property you want https://github.com/bitfocus/companion/issues/2172