Elgato Stream Deck XL

It’s a little bit involved, but I can try to write it up.

It used to be almost Rube Goldberg-esque – I had a process running on one Mac and syncing to another… because… reasons… but there’s been a recent fix to one of the tools that I use which allows this to be simpler.

Not simple, but simpler.


T.J.-I am bummed it’s complicated and certainly don’t want to make work for you. On the other hand, I am happy it’s not super easy and I am an idiot.

1 Like

I actually need to do the work anyway, at least as far as moving it over from The Old Way to The New Way, at which point writing it up so others can use it too seems like a “plus” because then there are more people who get to benefit from the work.

1 Like

I have received my stream deck xl last week and love it. Has anybody been able to activate the stocks widget on the device. It doesn’t seem to work on the Mac. Any ideas why?

My Stream Deck arrived today. I’m looking forward to seeing what I can do with it (and Keyboard Maestro). This thread is brilliant - please keep the use cases coming!

1 Like

I got this to work with KM the other day, though it probably isn’t as robust as TJ’s approach.

If you are using the “trigger with USB device key” trigger, and the built-in Keyboard Maestro actions, Keyboard Maestro itself offers a “Change Stream Deck Button Icon” action. You target the row and column ID of the stream deck button you want to change.

I used that in combination with a Menu Select button to create a mute/unmute button for Zoom on my Stream Deck. It shows whether I’m currently muted and tapping it toggles mute status.

Ryan, i’m guessing this macro isn’t actually checking mute status. This is a great idea if I had the discipline to only use the stream deck button to mute and unmute, but I am still clicking the icon in the zoom UI. I wonder if there’s anyway to check zoom audio status via AppleScript. I’m guessing not!

You got it. Yes, I occasionally clicked the Zoom UI and mess up the status, too. Over time I got into the new habit though.

I can think of a few ways to make it more robust. A helper macro that regularly checks the menu status (Menu item with "Unmute" is enabled or similar) and switches the icon appropriately would work, for instance.

Some random thoughts after having a Stream Deck Mini now for a few weeks.

It’s very useful for the purpose I bought it for, i.e. controlling my network media player (Logitech Media Server a.k.a. Squeezebox). Quite often I want to stop the music when I get a call or want to quickly see the name of the track that’s playing. Finding the right browser window, even if it’s a pinned one, and clicking the button in the sweb interface is a bit tedious. So my SD Mini now functions as a remote control: Play/Pause. forward, rewind, song info and switching of the (software) player.

But for other things I haven’t quite found a use for it. Since I’m using Alfred opening applications or starting workflows is only a few keystrokes away. There’s very little - that I can think of right now :wink: - that I want to be available on a button on a separate device that’s sitting under my monitor. But maybe someone here wants to share actions that are really useful for them.

Finally, Stream Deck with Hammerspoon works really great. It gives a lot of flexibility.


As Promised…

I have finally had a chance to “renovate” my setup and make it suitable for public consumption.

So, if you’ve ever wanted to have your next meeting info on your Stream Deck, checkout my new post over at GitHub:

Here’s a little example screenshot. The yellow box shows my next meeting information:

But, to me, the cool part is what happens 30, 15, 10, and 5 minutes before my next meeting:


The changing colors help me spot when a meeting is come up, just in case I have forgotten to set a reminder. (You can choose your own colors if you want different ones.)

My favorite part is that when there are no more meetings left for the day, I get to see Fantastipal smiling at me from that same spot on my Stream Deck:


He’s clearly just as happy as I am when there are no more meetings left!

Checkout the Github repo or download the .zip file and you’ll get all of the files needed to get setup:

  • 8 Keyboard Maestro macros
  • ~120 lines of shell script (plus another 170 lines of comments)
  • a version of icalBuddy that works with Keyboard Maestro
  • a detailed explanation of how it all works
  • instructions on how to set it up on your Mac

I hope this helps someone else. Even if you don’t use this exact setup, maybe it will show you something else you’d like to try.



This is awesome!

Just a couple of points I picked up as I worked through your readme, that might get others as well:

  • You will need to go to Security Preferences and allow icalbuddy to run.
  • There is your third file seconds2readable.sh that you don’t mention copying - but it needs to go over as well. I assume it also needs to be chmod 755.
  • I have a smaller Stream Deck, so while I found and replaced all the references within Keyboard Maestro, you also need to find and replace the references to the button in the km-icalbuddy.sh file.
  • Is there a reason your Keyboard Maestro group is named Steam Deck rather than Stream Deck?
  • I use BusyCal so had to change the references in KM away from Fantastical.
  • It seems that perhaps BusyCal doesn’t communicate directly with Apple’s Calendar service, because I had to launch Calendar.app before icalbuddy would see my events.

@tjluoma - this is an amazing piece of work. I have pointed out a few gotcha’s, but there is no way I could have built this.

Thank you for sharing it!

1 Like

Thank you! These are all good points. Always good to have the perspective of someone who has walked through the instructions. It’s hard for me to put myself in that position entirely, so this is very helpful. Will update the README accordingly.

Because I am a terrible typist and never noticed the typo until you mentioned it.

Will fix that too!

I think that BusyCal has a sync schedule, and does not seem to update as often as Fantastical does. But there might be a way to “force” it to sync. I haven’t use BusyCal for awhile so I don’t remember exactly.

1 Like

This is fantastic, thanks TJ!

1 Like

You could probably do something with IFTTT, via Integromat. If it was less than 1000 interactions a month it would be free.

Yup. Per your suggestion, I created a macro group that is only active when the zoom app is running, and then a macro that automatically repeats every 30 seconds. It starts with an AppleScript:

tell application "System Events"
	tell application process "zoom.us"
		if menu item "Unmute Audio" of menu "Meeting" of menu bar 1 exists then
			set isMuted to "true"
			set isMuted to "false"
		end if
	end tell
end tell

return isMuted

I’m passing that variable back to KM, and then doing a conditional set of Streamdeck button actions:

On the actual mute/unmute toggle macro, I am simulating keystroke Shift Command A, and then executing the above macro, so the icon immediately changes (not waiting the 30 seconds).

Edit: Per TJ’s suggestion, here’s the link to this macro in my dropbox account:


If you have a Dropbox account, you could export the macro to Dropbox and then post the shared Dropbox link here.

That’s a great point. I’ve been phasing out Dropbox since they put a 3 device cap on the free tier. (BTW, I would have happily paid for DB if there was a more reasonable $5 a month plan.) But I do have it on my laptop, I’ll have to do that!

I’ve installed the iOS version of SD on my phone to see how it will work for me. Like @vco1, I struggle to see how this is a lot different than just using Alfred to open apps (hands stay on the keyboard), or using keyboard shortcuts to launch KM macros. The one thing I find useful is that Streamdeck gives me visual cues for my KM macros, so I don’t find myself struggling to remember which keyboard shortcut to use.

I don’t code, so writing my own scripts to customize things isn’t an option for me. Can someone explain what I’m missing? (I’m not being sarcastic or negative – I really think I’m probably missing something.)

Before I got the Stream Deck, my imagination for macros and other automation-y custom tools was pretty limited. I was restricted to what I could see myself doing in Alfred or with pretzel-shaped keyboard shortcuts.

For example, as I wrote about recently on the Automators forum, it has been really nice to set up temporary and context-based automations—something I would never do with keyboard shortcuts because it seemed too finicky to try to keep a special set of keypress combinations conflict-free.

Alfred is probably a closer experience, but again, your working memory is only so limited. Plus, your brain really likes context and geography. Laying out visual cues in space has helped me actually use all these ideas a lot more, and to think of new ones more often, too.


Who said anything about “need”? :shushing_face: