Introducing the Stream Deck Plugin for Zoom

After getting a Stream Deck earlier this year, I built a way to control my Zoom meetings with it. For one, this sent keyboard shortcuts directly to the Zoom client to toggle mute and video and had the ability to leave a meeting with the press of a (physical) button. There was a drawback: the SD buttons didn’t synchronize with the Zoom client, meaning the button could show a muted icon, while the meeting was not muted. After doing some research, I decided to solve that with a native Stream Deck Plugin for Zoom.

Capabilities

The plugin has the following actions available:

  • Toggle your mute status
  • Toggle your video
  • Toggle sharing; bring up the start share window, or stop sharing
  • Bring the Zoom client to the front and focus on it
  • Leave a meeting. If you’re the host, end the meeting

Currently, this Zoom plugin only works on macOS. It’s using AppleScript to detect the status of the buttons and an alternative needs to be figured out for Windows. The code is open for pull requests for anyone who would like to do the Windows part!

Installation

To install this plugin, download the com.lostdomain.zoom.sdPlugin file from GitHub and double click it to install into the Stream Deck configurator.

Before adding the actions to your Stream Deck, make sure the following shortcuts are marked as global:

  • Mute/Unmute My Audio
  • Start/Stop Video
  • Start/Stop Screen Sharing

Here’s a screenshot of how it should look:

Zoom Shortcuts

Now install the plugin by double-clicking the .streamDeckPlugin file. It’ll ask for confirmation to install it, click yes.

After installing the plugin, it will ask Accessibility permissions, which it needs to control the Zoom client.

Zoom Permissions Ask

Make sure Stream Deck is selected in the system preferences:

Zoom Permissions Config

Now you’re ready to add the Zoom actions to your Stream Deck profile of choice and start using it!

Zoom Actions

Installation Video

To get a visual view of the installation procedure, check out this video:

 



Share the wealth!

27 Comments

  1. Great stuff! I successfully downloaded, tested and it works great! I was put on to your plugin by Elgato customer support. I passed along these suggestions to them, but I thought you might appreciate them as well:

    Mute All: (Command + Up Arrow + M )
    Switch Camera: (Command + Up Arrow + N )
    Show Chat: ( Command + Up Arrow + H )
    Record on this Computer: ( Command + Up Arrow + R )
    Record to the Cloud: ( Command + Up Arrow + C )
    Show Manage Participants: ( Command + U )
    Preferences: ( Command + Comma )

    I’m sure you are just as frustrated as I am by all of Zoom’s ridiculous Key commands (the up arrows are especially odd.) I also put in a request to Elgato to allow their software to accept 3 Key Commands such as these in future updates.

    Thanks again! I use Zoom almost everyday and this will really help my workflow for Live and Virtual Events.

    -Corey

  2. Echoing what prev commenter Corey said! This is great, thank you so much for making this. Would also love a buttons for these actions if possible:
    – Toggle between active presenter and gallery view
    – End video spotlight/unpin video

  3. This sounds really nice. Don’t suppose there is any hope in getting something like this for Windows. I have hotkeys setup on my Elgato stream deck that do a bunch of different Zoom shortcuts, but have no way of getting the current status to keep it in sync. I have looked at the Zoom API/SDK but it is beyond my technical knowledge to build this

    • Martijn

      July 25, 2020 at 21:35

      Hi Michael, yes – someone pointed me towards a way to do it on Windows. I have an early version and wanted to see if you want to test it: http://lostdomain.org/etc/com.lostdomain.zoom-v2-beta.streamDeckPlugin

      Let me know if it works, and if you have any issues.

      • I tested this today and it does work. The stream deck updates the Mic, Video, and Screen sharing status to match Zoom, but it is very slow to act when pressing a button. It took ~2 seconds for the mic to turn on or off when pressed, a little longer for the video to react and when I pressed the Screen sharing it took probably 15-20 sec before the window opened.

        Also the delays are accumulated so it you press the mic on and then off, then video on, then mic off it could be 15 secs before it catch up.

  4. Thanks for making this, I was able to install the plugin but the step to allow the stream deck.app accessibility control never came up. And the stream deck.app is not in the list when I go into the security and privacy system preferences. I tried uninstalling and reinstalling the plugin but that didn’t help. When I try to use the zoom buttons I’ve created in the stream deck it shows a yellow danger symbol, I am assuming because it can’t communicate with zoom. (i have set the shortcuts as global). Thanks.

    • I have manually added the stream deck.app into the privacy system preference but the zoom plugin buttons on the stream deck still do nothing. I have set the shortcuts to global.

  5. Thanks for your great work on this. I did similar with SD’s built-in Hotkey assignable buttons but yours are sweeter. I’ve replaced the ones I made with yours and kept hotkeys for ‘chat’ (to open chat) and ‘hand up’ for raising my hand in a meeting. I wish Zoom would add hotkeys for reactions, but that’s not to be yet.

    Well done.

  6. Luca Proietti

    July 27, 2020 at 11:37

    Hi, thanks a lot for this plug-in, it’s great to have Stream Deck button synchronized with the Zoom status. I was wandering if there’s a way to change the Key combinations associated with each command though; I originally changed mine because given that I had set them as Global key command I wanted to choose some combinations not used by other programs. For example I run Cubase that I teach remotely with Zoom and the ⌘⇧A combo is already assigned to a Cubase command. I’ve noticed that your plug-in does not work if the key commands are not the default ones, so for me would be really useful is the user could change what key presses every button sends

  7. Thanks for making this! Working from home and using it a lot.
    Sometimes however, leaving the meeting doesn’t work. Upon clicking there’s a “bomp” mac os error sound and the microphone is muted, not sure why!?

    • Martijn

      September 23, 2020 at 18:30

      Did you change the shortcut to leave the meeting, by any chance? The plugin tries the default combination, and the bump sound tells me it’s doing something that doesn’t work anymore.

  8. Hello!! I love this plugin, but recently it’s quit working for me. I get the error:

    void ESDActionsGridViewModel::onKeyReleased(): Key 5 released: com.lostdomain.zoom.focus

    I’m not sure how to move forward. Any insights?

  9. HI

    Handy plug in.

    I have been trying to get Stream Deck to do a bit more though.

    Had some success with using Applescripts but not quite getting what I need.

    Wondering if anyone has done a Script to a Screen Share of the Advanced setting ‘Music of Computer sound only.

    Using this with OBS would solve a lot of problems.

    Thanks

  10. Because this is based on keyboard commands, I assume it only works if Zoom is in the foreground? Or is there some way it can control Zoom even if something else is foregrounded?

  11. Hi Martijn,
    First of all, thank you so much for developing this. I am testing out the windows beta you posted in an earlier comment, and was wondering if there is anything I can do about the lag in timing from when the button is pressed to when the action occurs. I would love to help with any testing you have for the windows plugin.

    Thank you!

    • Martijn

      November 8, 2020 at 16:01

      The lag is there because of the python executable..I’m switching away from that to a quicker method.

  12. This is super cool. Thank you!

    One question: for some reason, the Zoom actions do not show up in the menu when I’m within a “Multi-Action”. Only when I’m at the top level action menu.

    Any idea why that might be?

    Thx
    Nick

    • Martijn

      November 8, 2020 at 16:00

      Hi Nick,

      Version 1 not marked as a multi-action capable. Honestly, I didn’t know what that meant when I made it. It’ll be available in version 2, which won’t be too long.

  13. Hi Martijn,

    Super work on 2.0! It works great on Mac. On Windows, I get a bunch of errors like “The code execution cannot proceed because MSVCP140.dll was not found. Reinstalling the application may fix this problem” as well as perhaps six or seven more similar ones with different file names. I’ve trying uninstalling and reinstalling Stream Deck, and also tried some of the other solutions I’ve found online, such as reinstalling the Microsoft Visual C ++ Redistributable Package, but nothing seems to help. Any ideas? Feel free to reach out directly if needed.

    • Martijn

      November 14, 2020 at 20:54

      Thanks! I think I know why; should’ve statically compiled it. Can you try this v2.1 and see if that fixes those Windows errors? https://www.dropbox.com/s/1u5xyer0dtvxdt2/com.lostdomain.zoom-v2.1.streamDeckPlugin?dl=0

      • Hi Martijn. Yes! This seems to work. The only button I noticed some trouble with is the Local Record Toggle. It switches correctly when you start recording, but fails to switch back when you stop recording. Only when I leave the meeting, then it correctly returns to the neutral state. (I did not try the Cloud Record Toggle)

      • Excellent work on this Martijn!

        The toggle buttons seem to work functionally, but the icon on the streamdeck doesn’t toggle if the zoom client isn’t focused when the button is pressed.

        • Martijn

          November 15, 2020 at 16:54

          Zoom doesn’t have to be in focus, but its window has to be open on the same desktop you’re working on, yes. That’s an AppleScript limitation and because Zoom doesn’t have an API or SDK that can be used for this plugin, it’s something to be aware of.

Leave a Reply

Your email address will not be published. Required fields are marked *

© 2020 Lostdomain

Theme by Anders NorénUp ↑