Introducing KMDeck - Trigger Macros from Any Device

KMDeck is an online tool for triggering macros from your browser. It doesn't store any information as all the setup data is contained within the URL.

As an example, this is how I control Logic Pro from my iPhone:

Before you go any further, you should familiarise yourself with the potential security implications of Keyboard Maestro's Remote Trigger. I have added optional password protection, which greatly mitigates these concerns.

Happy to continue? Ok here we go!

1. Setup:

Instructions

You'll need to install this simple macro:

KMDeck.kmmacros (35 KB)

Macro screenshot

Add a remote trigger, set to Shared, and copy its Unique ID. Don't use the copy button; just copy the contents of this field:

CleanShot 2025-09-08 at 12.00.08

2. Visit KMDeck on your Mac.

Instructions

Create a grid, then paste the Unique ID you copied earlier into the setup field and save.

CleanShot 2025-09-08 at 11.58.08

3. Make some buttons!

Instructions

Select a macro you'd like to trigger in the Keyboard Maestro Editor and grab its UUID:

CleanShot 2025-09-08 at 12.06.32

Back in KMDeck, click on a button to configure it. There are various options for setting its appearance, and a field where you can paste the UUID you just copied:

4. Go mobile...

Click the Link icon at the top to copy the URL. You can add password protection here if you like.

Open this URL on another device to access the Deck. You can save it as a bookmark for quick access later.

Alternatively, you can export your Deck to a cloud folder, to be directly imported on your device via the Files app.

Pro Tips:

Tips
  • You can re-edit decks at any time by opening them on your mac and creating another share URL once you're done. You can also export and import backups of your Decks as json files, using the relevant buttons.

  • You can add multiple pages of buttons to a Deck and move between them on mobile by swiping left or right.

  • You can drag and drop to swap buttons in Edit mode. Hold ⌥ while dragging to copy the settings of one button to another.

  • You can make a button into a toggle with separate settings. Once set up, clicking the button will alternate between its two states.

  • It's easy to set button icons. Just drag your icon image to Imgur, right click the uploaded image and select Copy Image Address:

Finally, paste this address into the Background Image URL field in the button editor.

  • Oh... and top marks to anyone who finds my little easter egg.
14 Likes

WTH?

I always think about you as "that Logic guy" and then you pull this off?

I have not had the time to dig into it seriously yet, but on the surface it appears to be Dan-level work. Great job!

2 Likes

Haha. Hope you like it!

I spent months working on ABmyMix (click the top-left of the page), and by comparison this was relatively simple. I was able to reuse some of the functions from that side of things, so it came together a lot quicker.

See what you think and let me know if you have any suggestions. :+1:t3:

1 Like

Is it 5th dan Dan though?

??—Googling—ah, so. Each will reach their own opinion on the matter.

:wink:

Ok guys, let's not wax on about it. :yum:

1 Like

Anyone actually tried it yet? Any thoughts?

I saved it, as I think I will use it, but paradoxically, have too much going on to actually test it properly right now :). But I will!

-rob.

1 Like

Very cool! I did some basic testing and for what this does, it's incredibly simple and well thought out. Kudos. The one thing that popped up to me is that it might be nice to have the ability to delete a button's configuration or clear it to the defaults.

1 Like

Great idea! Done!

CleanShot 2025-09-10 at 18.36.43

2 Likes

I get a prompt that the 'link copy' failed. Tried numerous times.

Screenshot 2025-09-11 at 8.40.42 AM

I'm on an older 'testing' iMac CPU 2017 i5 running OCLP. 15.6.1

Okay, let's figure out what's happening there. Do me a favour and double click at the top right corner of the screen after the link copy fails. There's nothing visible in that corner, but if you hit the right spot, you should see a little notification saying that you've copied the Console log. If you let me see that log, I can figure out what's going on.

=== Console Logs from 9/11/2025, 9:38:12 AM ===

User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Safari/605.1.15

[2025-09-11T13:37:18.346Z] [log] Debug: DOM loaded, adding logger UI...
[2025-09-11T13:37:21.589Z] [log] [GridSetup] Creating grid: {
  "rows": 5,
  "columns": 3,
  "isLandscape": false,
  "description": "portrait (taller than wide)"
}
[2025-09-11T13:37:21.589Z] [log] [KMDeck] Grid setup complete: {
  "rows": 5,
  "columns": 3,
  "isLandscape": false
}
[2025-09-11T13:37:21.589Z] [log] [KMDeck] Created config with isLandscape: false
[2025-09-11T13:37:34.426Z] [log] [KMDeck] Button saved: {
  "id": "button-page-1-0",
  "title": "T2",
  "backgroundColor": "#1a1a1a",
  "macroUuid": "91440DFE-BAE6-4E3C-BCFB-A47E9B276F32",
  "fontFamily": "Arial, sans-serif",
  "fontSize": 18,
  "fontColor": "#ffffff",
  "hideTitle": false,
  "isToggle": false
}
[2025-09-11T13:37:35.771Z] [log] [KMDeck] triggerMacro called with: {
  "id": "button-page-1-0",
  "title": "T2",
  "backgroundColor": "#1a1a1a",
  "macroUuid": "91440DFE-BAE6-4E3C-BCFB-A47E9B276F32",
  "fontFamily": "Arial, sans-serif",
  "fontSize": 18,
  "fontColor": "#ffffff",
  "hideTitle": false,
  "isToggle": false,
  "triggerId": "91440DFE-BAE6-4E3C-BCFB-A47E9B276F32-1757597855771-mpdnxaxbz",
  "timestamp": 1757597855771
}
[2025-09-11T13:37:35.771Z] [log] [KMDeck] Using remote trigger URL: https://trigger.keyboardmaestro.com/t/E0437FD9-F103-4622-B64B-6F6D21B47883/5DDC5BF3-194B-437C-9C2F-A2736EAAD459
[2025-09-11T13:37:35.771Z] [log] [KMDeck] Generated URL: https://trigger.keyboardmaestro.com/t/E0437FD9-F103-4622-B64B-6F6D21B47883/5DDC5BF3-194B-437C-9C2F-A2736EAAD459?91440DFE-BAE6-4E3C-BCFB-A47E9B276F32
[2025-09-11T13:37:35.771Z] [log] [KMDeck] Triggering Keyboard Maestro remote trigger: https://trigger.keyboardmaestro.com/t/E0437FD9-F103-4622-B64B-6F6D21B47883/5DDC5BF3-194B-437C-9C2F-A2736EAAD459?91440DFE-BAE6-4E3C-BCFB-A47E9B276F32
[2025-09-11T13:37:35.771Z] [log] [KMDeck] Attempting to trigger macro at: https://trigger.keyboardmaestro.com/t/E0437FD9-F103-4622-B64B-6F6D21B47883/5DDC5BF3-194B-437C-9C2F-A2736EAAD459?91440DFE-BAE6-4E3C-BCFB-A47E9B276F32
[2025-09-11T13:37:35.772Z] [log] [KMDeck] Iframe created and added to DOM
[2025-09-11T13:37:35.772Z] [log] [KMDeck] Remote trigger sent successfully
[2025-09-11T13:37:35.772Z] [log] [KMDeck] Regular button processing completed for: button-page-1-0
[2025-09-11T13:37:35.889Z] [log] [KMDeck] Iframe loaded successfully
[2025-09-11T13:37:36.773Z] [log] [KMDeck] Iframe removed from DOM
[2025-09-11T13:37:41.588Z] [log] [KMDeckService] Full URL: https://abmymix.com/kmdeck?data=N4Igxg9gdgZglgcxALlAJwgdwM4oKwA04EANgK4C2UuyAzEQA4CGCApjQNqhwAmKIzNgFoAjCCJQmFVvwAKLVgAIxRAEZkALhuidufZCHVboQwa1FCADOJAa4GkjIMAVAEw3VTMAGsEGMlA8AMKkEGj8AMQiTNHRNhReGACqZLz8AJwiACxZlgAiAGIAokIAQgCCRQBsQllFtEFlQQWlQuVZAOxF6aWuHVUFtO5EMNAaBVJwJACe-OVocEwkBIrYTNRC2KwLMDajUBoAynAAXk4iABwjYyEkYZEwj082ABa8rM72jigwS1tEcGwzggCAQ32QvxIWwAvgBdOFEOzSbAaKQMFAiDp4LHpDoXLIiPAXdJEABu22wcGg-BEADpLPSbGhWBQIBoPgtQdskmgSPwXloGNhkAB6EUaTlsNC07ysaaqCBMNA8BLsCUQWmQCjikVFSxZWgdAp5dJCAoiSy0WpVVyuMpVLKtAZVPKuESlToXC60EV4PJ5IJ4UqDUTpR21Q2NdJBVwFNp9WhVIrlcp5LJ4dI2QEAGXWPGwYCYDCckJh0KAA
[2025-09-11T13:37:41.850Z] [log] [KMDeckService] Shortened URL: https://tinyurl.com/2cpmsu2x
[2025-09-11T13:37:41.850Z] [error] [KMDeck] Failed to copy share link: {
  "line": 141,
  "column": 95226,
  "sourceURL": "https://abmymix.com/assets/index-DefMwPYq.js"
}

I am in and out today a bit.
I'll try my best to stay tuned to the forum to not leave you hanging.

Silly me... I forgot Safari doesn't let you copy a link without user interaction while the content itself is visible.

I think it should work now. :crossed_fingers:t3:

1 Like

WOOF! - like a charm.
Most excellent - there are a number of uses for me.
Triggering Filemaker Pro Scripts remotely.
nice...

OF course I was doing it before with numerous URLs but this is very slick and oh so much easier!

1 Like

Update:

Added custom icons for iOS Home Screen bookmarks.

1 Like

I saved urls from yesterday and today the urls are blank with no defined buttons.
I had 3 testers in there and saved yesterday.
Do I need to export the KMDeck in order to 'save' it?
I'm probably missing something basic...

I was about to come here to post that unfortunately I realised I had to rethink the button mapping system completely. It was using a combination of

1 2 3
4 5 6
7 8 9

...and also...

R1C1 R1C2 R1C3
R2C1 R2C2 R2C3
R3C1 R3C2 R3C3

It was causing all sorts of issues with landscape/portrait switching while I was implementing some new features, so I took the decision to switch to a fully R1C1-centric method, knowing that it would break any existing setups. I figured it's early days, so hopefully nobody's too invested yet...

I'm sorry if you spent a lot of time setting it up. If you did, I might be able to help you copy your settings across to the new format.

I'm going to post the updates in a sec.

1 Like

Update:

  • Show button labels (gear menu)
  • Switch between portrait and landscape in the edit page.
  • Orientation Split: Per-page separated grid configuration, meaning you can have a completely separate grid for portrait and landscape
  • Various optimisations
2 Likes

ah, no worries, I totally get it man, .....
nothing lost, I'll hold off a day or two and check back..
cheers

1 Like