Stream Deck configuration using the new Floating Menu / Macro Pad components

I'm experimenting with the new Floating Menu support for Stream Decks.

(currently on version 6.681)

First, this is really cool, and I'm certain it will be an improvement over the old way of doing things. The sample templates work on both my Stream Deck + and on my SD Neo.

But, I have some questions, some of which might be user confusion:

  1. The Stream Deck + supports swipe left and swipe right actions generated by the LCD touch strip. How do I add these as actions to trigger something?

  2. I have been using the LCD touch strip on my SD+ to hold 8 items (each 100x100), 2 for each knob. (Skipping my use case for this as it is complicated, but basically, I get more stuff on the LCD strip.). It seems to me that it should be possible to do this with the new config, so I shrank one of the "knob items to 100x100, resulting in the following:

(Note that this is how it appears on my screen. On my SD+, only the first LCD button item got shrunk, and the others remain 200x100 as expected). Anyway, I tried to add another 100x100 "standard item" after the first LCD button, and then I set its location to "Macro Pad" / LCD strip, in the hope that this would put the new item in the right place. It did put the new item on the LCD strip, but then it replaces all of the knob items. Either I'm doing it wrong, or some further support in the BTT code might be needed.

  1. With the old way of doing things, you could use the BTT triggers 'Close currently open Stream Deck group' and 'Open Stream Deck Group with Name' to change which groups were active on the Stream Deck devices. How do we do this with the new configuration? I tried using Toggle Floating Menu (and Close Floating Menu), but these only toggle the menu visibility on the computer display rather than changing what is active on the Stream Deck. (I also tried using the old open/close Stream Deck Group triggers with the names of my SD macropad floating menus, but this doesn't work either.)

  2. I'd like to add other things to my LCD strip, like the Weather Widget, but I don't see how to do this...

  3. Is there a macropad item that supports the SD Neo infobar? I don't see anything, but I might be missing it...

Thanks for any help/advice!

Hey, thanks for testing! It's still quite early so most things you mentioned had not yet been implemented.

With 6.684 (uploading) I added

  • Swipe categories at the floating menu level that allow you to override the swipes
  • Mix knob items and lcd items (previously as soon as knob items had been added, no additional lcd items could be added)
  • Predefined action "Open Specific Submenu in Floating Menu" (and the corresponding close action) now work with macro pads.
  • Predefined action "Macro Pad: Show Menu" that allows to load a completely different floating menu onto the pad

Widgets are a bigger topic because of their dynamic nature and limitations on how often I can push a new image to the Macro Pads. I'll work on that soon to make at least some possible.


The macro pad can be used in Stream Deck plugin mode? Or it only works when "Fully controlled by BTT" option is enabled?

only in full control mode, for plugin mode you need to keep using the old stream deck specific implementation

1 Like

Hi Andreas,

Thanks for the quick response and for the functionality updates!

Re stream deck and swipes: (I'm currently testing on BTT 6.687)

It seems to me that the default behavior for swipe direction is backwards from the next and prev page chevrons.
That is, the next page button uses ">>", which looks to me like movement to the right. But, to get to the subpage, you actually need to swipe left.
Similarly, if you are on page 2 and want to get back to page 1, the default prev page button is "<<", but you need to swipe from left to right
to get the same behavior.

Re LCD Strip items:

  • I can now add a non-knob item to the LCD strip (as described in my last message). Very cool.
  • I want to add text to my new LCD strip item.
    I can do this the usual way by just clicking on the Item Appearance and typing, but the text doesn't show up on the item, either on the stream deck, or on the floating menu on the display if I bring it up.

Re Changing pages using Macro Pad: Show Menu :
There's something weird about the behavior I'm seeing. (Maybe several things...)
I have 3 floating menus:
Defined globally: "SD+ test" , "SD+ test 2"
Defined for Firefox: "SD+ test"
(The name overload is intentional, I use this a lot to get behavior that changes with the active app. I love that this works.)

When I first start BTT, there is no menu on the Stream Deck until I open the BTT Config window, then things work fine.
The global "SD+ test" menu is active on the StreamDeck.
If I change the active app to Firefox, then I get the Firefox version of the "SD+ test" menu.

However:
I have one button on the menu set to open the "SD+ test 2" menu. When I press this button, nothing happens immediately, but if I change the
foreground application, then the requested menu appears.

I have one button on the test2 menu set to open the "SD+ test" menu. The same thing happens here: When I press this button, nothing happens immediately, but if I change the
foreground application, then the requested menu appears.

I get the same thing if I trigger the menu change using the stream deck swipe (from menu test2)

Also, at some point in all of this menu changing, the auto toggle back and forth between the Global and Firefox versions of the test menu stops working,
and it get stuck on one of the menus.

If I restart BTT, the stuck behavior persists until the first time that I open the BTT Configuration screen.
If I instead quit BTT, then the LCD buttons don't seem to be visible until I open the BTT Config screen.

Sorry, I know that's not a great description!

Thoughts

  • maybe there is some BTT reset that happens when the Config screen is opened, and if so, does some of this need to also happen on BTT restart?
  • maybe the equivalent of a menu repaint that gets triggered by Macro Pad: Show Menu is stuck waiting on some state event?

Here is the minimal preset I'm using for testing:

SD_floating_test_1.bttpreset (333.2 KB)

Follow up info after some more testing:

Re LCD Strip items:

  • I figured out that as long as the Icon Position is not "Center (Icon Only)", then I can get both the Icon and text to show up next to each other on an LCD Strip item.
    • I can work with this. :slightly_smiling_face:
    • I will say that in the past I had a stream deck button where I had an icon in the center and text above and below it, and I liked being able to do that. Something like putting the icon in the background and then allowing the text to paint over the top.

Re Changing pages using Macro Pad: Show Menu :

  • I removed the overloaded menu (with the same name) to make things simpler. I'm still seeing the delay between when Macro Pad: Show Menu is triggered and when the new menu becomes visible as I described above.

@Andreas_Hegenberg

New question:
I'm now trying to simulate a "dial stack", which is a thing the Elgato S/W allows you to setup, where you click a knob to change both the display (LCD Strip item) and the functionality associated with the knob.

I've got the functionality changing, but I can't seem to get the Stream Deck display to reliably change.
Simplified code:

const brightness = { // stack action 1.  Display Brightness.
    "BTTMenuIcon" : {
        "BTTMenuItemSFSymbolName" : "sunrise.fill"
     },
     "BTTMenuItemText" : "Screen Brightness",
}

let current_menu_data = brightness;
let json_rep = JSON.stringify(current_menu_data)
await update_menu_item({"item_uuid": menu_item_UUID, 
                        "json": json_rep, "persist": true})

Two issues here:

  • This has a similar repaint issue to what I'm seeing with Macro Pad: Show Menu, in that the changes to the text do not appear on the Stream Deck when the code above is executed. If I change away to a different Macro Pad menu and then change back (and also change the foreground application), then I can force a repaint and the new text shows up.
  • The icon on the LCD Strip item does not change. My guess is that I'm using the wrong arguments. Any idea what args I should use?

Sample preset attached, the dialstack is on the leftmost knob.

SD_floating_test_2.bttpreset (250.9 KB)

Thanks, these observations all help a lot. I am currently working from home and don't have my stream deck here, but will be back in office on thursday to test.

6.692 might already fix some of the described issues and adds support for LoupeDeck Live / Razer Stream Controller devices.

For the update_menu_item issue, can you try to update all properties? (Dark mode is only required if you use dark mode)

const brightness = {
    "BTTMenuItemIconType": 2,
    "BTTMenuItemSFSymbolName": "sunrise.fill",
    "BTTMenuItemIconTypeDark": 2,
    "BTTMenuItemSFSymbolNameDark": "sunrise.fill",
    "BTTMenuItemText": "Screen Brightness"
};
await update_menu_item({
    "item_uuid": menu_item_UUID,
    "json": JSON.stringify(brightness),
    "persist": true
});

@Andreas_Hegenberg ,

Thanks for the response and for the quick update! :slight_smile:

I inserted your code in my javascript, updated to 6.692, and added my overloaded menu for Firefox (with the same name) back in:

  • Using your suggested code fixes the icon update issue.

  • Macro pad menus now repaint immediately when Macro Pad: Show Menu is called.

  • Macro pad menus paint correctly on both BTT start and on BTT restart.

However:

  • The menu does not repaint after update_menu_item() is called.

    • For this, I still have to force the repaint by changing away to a different Macro Pad menu and back.
  • If I change to menu "SD+ test 2", and then I make Firefox my foreground application, then the Firefox version of menu "SD+ test" shows.

    • This is a weird corner case, but I think that it would make more sense for the current global menu to stay active unless there is an overload matching the new foreground application with the same name as the existing menu.
    • This item is a low priority for me as I intend to manage the menu changes fully programmatically in javascript.

Three new questions:

  • Given that I intend to have multiple macro pad menus defined at the global level, how do I indicate to BTT which of these is the default (the menu that should be shown on BTT startup)?

  • In the Macro Pad option for a menu, right now it seems like the choices are 1) a specific device ID, or 2) all devices of a specific type, such as "Any Elgato Stream Deck (+)". Will you consider a more general option such as "Any Elgato Stream Deck"?

    • I happen to have both a Stream Deck+ and a Stream Deck Neo, and these have identical button layouts such that it would be cool to be able to define a menu once and open it on either or both devices. (This does leave you with the problem of what to do with LCD Strip items, knob items, Infobar items etc that only work on one of the two kinds of devices, for this maybe any item that doesn't apply gets ignored/filtered out of the menu?)
  • Can you consider adding a DeviceID argument to "Macro Pad: Show Menu" such that if the device ID is given, the menu is only opened on that device, but if it is not given, it is opened on all Macro Pad devices that the menu is defined for?

And (so it doesn't fall off your list):

  • The default swipe actions still seem backwards to me.

Here is a new version of my preset (now with the LCD strip item icon and background color updating properly) for testing.

SD_floating_test_3.bttpreset (357.6 KB)

Thanks again for the new macro pad support, I think it will be great when it is complete!

I saw on another thread that there is a newer version, so I updated to 6.695.

The new version fixes the following for me:

  • Macro Pad menus now repaint correctly after update_menu_item() is called.
  • Activation of menus based on changes to foreground application seem reasonable.
  • The default swipe actions match the chevron directions on the page change buttons.

I also see that you've implemented the following things, all of which work for me:

  • Selection for making a macro pad menu the default
  • Selection for anchoring macro pad menus to all Elgato devices rather than just specific types,
  • Added DeviceID argument to "Macro Pad: Show Menu"

:slightly_smiling_face:

Thank you! As always, I'm extremely impressed and grateful about how responsive you are to questions and requests from your user community.

1 Like

great, thanks for testing!