A better Zoom experience with a Stream Deck

UPDATE: Please refer to the plugin page to get the latest information.Β 

Since moving to a global and work-from-home role, about a year ago, I've been using Zoom a lot. I spend around 4-5 hours a day in sessions. While I always try to give my full attention to the conversation, there are times that I'll be multi-tasking: taking notes, re-reading an email thread on the subject, reaching out to other colleagues on the subject, etc. Plus, it always bothered me to be staring at a person for a few seconds, after already having said bye, because you need to find the Zoom window and exit. πŸ˜‰

I started to look into some solutions to make this process easier and quicker a few weeks ago. After trying things like global keyboard shortcuts (which you need to remember), a desktop widget (which needs screen real-estate), I settled on an Elgato Stream Deck (SD) as a control panel. It's a programmable pad that can be placed on your desktop:

In the lower-left corner are the 4 Zoom shortcuts I've been using. Top left is a Zoom window focus button, which brings up the Zoom client to focus. Top-right is to leave or end a meeting. Bottom 2 buttons should be obvious: toggles for mute and video. I'll explain how to get here in the rest of this post.

Combination of Stream Deck + Keyboard Maestro

These buttons work with a combination of the Stream Deck software and Keyboard Maestro. I've programmed the SD keys to call Keyboard Maestro (KM), and KM will target Zoom and send a shortcut. By using the targeted shortcut that KM can execute: it doesn't matter if the Zoom client is not the focus window.

I was already using KM for other purposes, but any application that can send a targeted shortcut will do.

Keyboard Maestro

To make it easier to duplicate this setup, I've uploaded the KM Macros to GitHub here: https://gist.github.com/smitmartijn/9344b2c43eb7ba7c72eb5aa6b8af2520

Save that file and import it using the KM file menu: Import Macros Safely. It should create a new group on the left, called Zoom. I believe you also have to enable all the macros after import, as the default is to disable imported macros.

After importing and activating the macros, find the kmtrigger:// URL for each one; you'll use these URLs in Stream Deck. I've opted to use the internal URL structure that KM uses, and not sacrifice a global key combination to trigger these functions. The kmtrigger URL is highlighted below:

Stream Deck Software

The Stream Deck (SD) controlΒ software is pretty extensible. The built-in features are targeted towards Streamers (hence its name), with Game Capture, Twitch, Twitter, YouTube functions. But, there are also generic functions; opening a website, multimedia control, triggering hotkeys, etc.

Once KM is set up with the macros, we can add the actions to SD to trigger the macros.

Single Action vs Toggle

In this case, the Zoom Focus and Leave Meeting functions are one-off; they do one thing. For these one-offs, pick the System β†’ Website function in SD.

Drop the icon (download is below) in the key icon box, and point the URL to the proper kmtrigger URL from KM. Do not check Access in background (doesn't seem to work).

I wanted to also show the status of the Mute and Video button on the Stream Deck. I found the Multi Action Switch function best suitable. This function allows two different icons with two different actions; a toggle.

For the Multi Action Switch function, there are two dots under the key icon box (1), which switches between the different actions. On the first page, drop the muted icon, add the System β†’ Website action and make sure the URL goes to the Zoom Mute Toggle kmtrigger URL.

Then switch to the next page, using the right dot and do the same thing, only with the Unmuted icon. The kmtrigger URL is the same.

Rinse and repeat for the Video Multi Action Switch.


Using some open-sourced images, I put together this icon set to use in the SD actions. Just drop them into the key icon window.

Optimizing Zoom Settings

For these shortcuts to work optimally, there are a few Zoom settings you need to enable:

  • General β†’ Prompt a confirmation before leaving a meeting
  • General β†’ Advanced Features β†’ Disable Display end-of-meeting experience feedback survey
  • Video β†’ Turn off my video when joining a meeting
  • Audio β†’ Mute microphone when joining a meeting

The last 2 are generally good Zoom etiquette, to prevent embarrassing moments when you join a meeting. But also required to synchronise the button icon with the actual status. Disabling the prompt before leaving the meeting makes the leave button actually effective - otherwise, you're still in the meeting unless you click "Yes, really leave the meeting". Disabling the experience feedback survey disables that "thumbs up or down" window at the end of every meeting.


It's amazing to be able to toggle mute, video, focus the Zoom client window, and leave meetings with a single button. It's helped me prevent some awkward moments and generally helped to speed things up. One 'annoying' thing is that the switch button status can differ from the actual status, Zoom can be unmuted, while the button indicates it's muted. I had this in the beginning while getting used to using the Stream Deck (and not switching status in the Zoom client), but once you start to use only the Stream Deck - this does not happen.

Let me know if you're using these buttons, or come up with any extra ones that help!

Share the wealth!


  1. David Hawkins

    March 30, 2020 at 23:16

    I love the content overall in this article, but I had to say Keyboard Maestro was not required. I purchased it and followed your entire program here, but found that the Camera, Mute, and Leave Meeting toggles performed better for me just using keystrokes.

    The leave meeting toggle was easier to do with key strokes, but the multi-action as you used. Action 1 was to leave meeting, and action two was to hit enter. The reason I did this is that no matter what setting I used with Zoom, the “don’t prompt me” check box never seemed to make a difference. It wouldn’t get rid of the dialog box prompting if I wanted to leave or not. But by making my second action on the button to be “enter”, I was able to double tap the button and it would log me out. The default highlighted button is “End Meeting for All”, which as the host, I couldn’t help but get every time.

    • Martijn

      March 31, 2020 at 11:43

      Hi David,

      Thanks! Maybe I didn’t highlight this best, but the primary reason for using Keyboard Maestro is to be able to execute these actions anywhere, also when Zoom is not in focus. I tend to multi-task and have something else in focus (notes, outlook, etc.). Then, the regular key combinations that Zoom supports, do not work. KM makes sure the keys are targeted to the Zoom client.

  2. Thanx Martijn for pointing is this direction. I plan to use Zoom and the Stream Deck for broadcasting our council meetings on YouTube (via Open Broadcast Studio). At the very moment I’m figuring out how to ‘spotlight’ a speaker in Zoom. So far I didn’t succeed.
    Keep up the good work!

  3. I love this, thank you for the article. I have been using Zoom for years, just got a Stream Deck and this is a welcome addition.

    Thank you,


  4. Now I want to spend more money! I love Keyboard Maestro, now I want a Stream Deck. Thanks for sharing.

  5. Thanks Martijn, great article! Like the commenter above, I’d really love to know whether its possible to “spotlight” someone by configuring a streamdeck key to choose that option from a drop down menu. My other favourite key would be “spotlight the last person spotlighted before the current one”. Any ideas?

  6. Fantastic, thanks for sharing!

  7. Great explainer! This came up at my first search attempt for ‘Stream Deck Zoom’. I primarily run Windows, so I adjusted the idea to use AutoHotKey (GPL licensed) to get the same result. Work great, with some minor nits. As you explained, I also struggle with the actual status shown on the Stream Deck for e.g. the mute control. I would love to see that work without the initial ‘calibration’ at the start of a meeting, or when manually flipping it in the Zoom client leaving the Stream Deck out of sync again. I had a look at the Stream Deck SDK which inspires me to build something to get that sorted, but that’s for another day when I have some spare time.

  8. John Albrektson

    May 21, 2020 at 16:45

    Great overview! Thanks so much. I use zoom for remote teaching and have some very challenging share desktop options. In zoom, that is the only way to activate a document camera, or switch to a desktop window or PowerPoint or pictures are being displayed. I have a feeling that the stream deck is only going to get me so far and I’m going to have to do the rest by selecting and clicking.

  9. Dave Nicholls

    May 28, 2020 at 22:32


    I came across this because I’m in the process of setting up the same thing. I also found that there is an official Keyboard Maestro plug in for the Stream Deck. Details are in the KM Wiki here: https://wiki.keyboardmaestro.com/Stream_Deck

    This removes the need to use the KM URL’s and it also has actions to change the button image and title

  10. Hey Martijn,

    I’m having a strange issue with this. I downloaded the Macros into Keyboard Maestro. When I select the Leave Meeting one, and click the Try button on the bottom of the screen, sure enough the End Meeting For All pops up on Zoom.

    However, I copied the URL into StreamDeck, but it doesn’t seem to work there. Pressing the buttons on the Stream Deck brings KM into focus rather than running the macros.

    Any ideas on how to overcome this? Thanks.

  11. Never mind, just after posting the comment I spotted the “Enable or Disable Group” option in KM, and that sorted it.

    Extreme n00b here ??‍♂️

  12. Great writeup – I’ve got a very similar setup but without KM. I just set all the shortcuts in Zoom to be global and then I can use all the shortcuts regardless if Zoom is in focus or not.
    Thanks for highlighting KM though as it will solve some other problems in other apps πŸ˜‰

Comments are closed.

© 2024 Lostdomain

Theme by Anders NorénUp ↑