Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jquyatt opened this issue Oct 9, 2024 · 3 comments
Labels
enhancement New feature or request

Comments

@jquyatt
Copy link

jquyatt commented Oct 9, 2024

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:

  • Use Electron with Node-HID, Electron-HID, or a similar library to detect and handle USB devices like presentation clickers across Windows, macOS, and Linux.
  • Device Identification: Isolate the clicker by identifying it through its vendor and product ID.
  • Input Handling While Out of Focus: Allow the clicker’s input to trigger specific actions (e.g., advancing/reversing slides) even when FreeShow is minimized or out of focus.
  • Input Filtering: Ensure only the clicker is recognized for advancing slides while ignoring input from other devices (keyboards, mice, etc.).
@jquyatt jquyatt added the enhancement New feature or request label Oct 9, 2024
@vassbo
Copy link
Collaborator

vassbo commented Oct 10, 2024

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
Copy link
Author

jquyatt commented Oct 10, 2024

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
Copy link

mwb9aa commented Oct 23, 2024

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants