No internet connection
  1. Home
  2. How to
  3. Logic Pro

Independent Pan

By Matthew Brabender @Matthew_Brabender
    2025-05-19 23:59:11.146Z

    Hi folks
    Do you know if there's a way to activate independent pan on a bus send without using mouse click functions?
    I often do the following:

    • switch to sends on faders (with a key command)
    • right click on the bus send
    • select 'independent pan'

    I'm hoping to set up a macro that does those three steps but have trouble with mouse click methods behind consistent.
    Many thanks!

    • 7 replies
    1. Kitch Membery @Kitch2025-05-21 16:25:41.615Z

      Hi @Matthew_Brabender,

      I'll take a look at this today to see if it can be done. :-)

      1. Matthew Brabender @Matthew_Brabender
          2025-05-21 19:39:52.750Z

          Thanks! :) It’s a ‘nice to have’ thing so no rush :)

          1. Kitch Membery @Kitch2025-05-21 22:48:00.758Z

            Hi @Matthew_Brabender

            Try this out :-)

            Update the targetBusName const to the name of the bus you want to target (The bus must be in the selected track in the inspector on the left).

            const targetBusName = "Bus 1";
            
            const logic = sf.ui.logic;
            logic.appActivateMainWindow();
            
            const mainWindow = sf.ui.logic.mainWindow;
            logic.invalidate();
            
            const inspector = mainWindow.inspector;
            const list = inspector.childrenByRole("AXList").first;
            const layoutAreas = list.groups.find(g => {
                return g.children.whoseRole.is("AXLayoutArea").first.getString("AXDescription") === "Mixer";
            }).childrenByRole("AXLayoutArea");
            
            function getBusPopupButton() {
                const mixer = layoutAreas.whoseDescription.is("Mixer").first;
                const channelStrips = mixer.children.whoseRole.is("AXLayoutItem");
                const leftChannelStrip = channelStrips.first;
                const firstBusGroup = leftChannelStrip.groups.whoseDescription.startsWith(targetBusName).first;
                const busPopupButton = firstBusGroup.invalidate().buttons.whoseDescription.is("list").first;
            
                return busPopupButton;
            }
            
            getBusPopupButton().popupMenuSelect({
                menuPath: ["Sends on Faders"],
                targetValue: "Enable",
            });
            
            sf.waitFor({
                callback: () => {
                    return !layoutAreas.whoseDescription.is("Mixer").first
                        .children.whoseRole.is("AXMenu").first
                        .children.first.invalidate().exists;
                },
                timeout: 1000,
            }, `Failed waiting for the send menu to close`);
            
            getBusPopupButton().popupMenuSelect({
                menuPath: ["Independent Pan"],
                targetValue: "Enable",
            });
            

            Let me know if that works for you. :-)

            1. Matthew Brabender @Matthew_Brabender
                2025-05-21 22:51:49.493Z

                Wow that was quick! Thanks Kitch, I'll give it a try today and let you know :)

                1. Kitch Membery @Kitch2025-05-21 22:55:40.655Z

                  My pleasure, @Matthew_Brabender
                  Keep me posted.

                  1. Matthew Brabender @Matthew_Brabender
                      2025-05-22 08:15:20.306Z

                      Hi Kitch. This worked perfectly. Thanks so much!!!

                      1. Kitch Membery @Kitch2025-05-22 15:58:24.653Z

                        Awesome! Glad it worked! :-)