ChurchApps / FreeShow

FreeShow is a free and open-source, user-friendly presenter software.
https://freeshow.app
GNU General Public License v3.0
568 stars 86 forks source link

[Feature Request] Isolate Input from Presentation Clickers (Support for Use While FreeShow is Out of Focus) #877

Open jquyatt opened 1 month ago

jquyatt commented 1 month ago

Describe the feature Allow FreeShow to detect and isolate input from a connected presentation clicker, enabling specific actions (e.g., advancing or reversing slides) to be triggered by the clicker even when FreeShow is minimized or not the active window. Other input devices (keyboards, mice, etc.) would not interfere with presentation actions.

Additional context As a user running AV for live events, I often need to perform tasks across multiple applications while presenting. However, I still need to advance slides using a presenter clicker without having to constantly bring the FreeShow window into focus. This feature would provide me with more flexibility in multitasking, allowing smooth transitions in my workflow while ensuring clicker input still works as expected.

I have previously implemented a workaround for this issue with ProPresenter by using Karabiner Elements to isolate my presentation clicker's input and convert it to key presses F19 and F20, then using Hammerspoon to turn those key presses into API calls for next/previous slide. I feel that FreeShow could benefit from having a solution like this baked into the program itself, since it could isolate the key presses without having to translate them to other keys or use other programs to send API calls.

Proposed Solution

Since FreeShow is already built with Electron, this feature can be implemented using existing cross-platform Node.js modules to handle USB devices. Here’s a high-level approach:

vassbo commented 1 month ago

Would be doable, do you in that case have examples of common vendor/product ids, and the input data they send with the click of different buttons?

jquyatt commented 1 month ago

In my case, I'm using the DSAN PerfectCue Micro (SCM Products), Vendor ID 1155 (0x0483), Product ID 8320 (0x2080). (I was able to simply pull that info from Karabiner-Elements.) It has a two button remote that sends right arrow and left arrow key presses.

I would think that you could use whichever module you choose to identify all the HIDs available and then possibly include a command training feature that listens for clicks from the device that you choose to assign the commands.

mwb9aa commented 1 month ago

@vassbo

In the program EasyWorship, you have to "register" remote devices. Maybe that feature would work here (even though the USB dongle for the clicker is local). You could have a settings option for people to "register" a clicker and then attach a listener to the specific USB device that captures input from that device. Some older clickers may also use the pg up or pg down keys, so you may want to have a spot for the end user to select which keys (arrows or pg up/down) to use. It could go in the Settings->Connections Tab.