No internet connection
  1. Home
  2. How to

How do I move two clips to two other tracks in Pro Tools.

By SEAN FOYE @SEAN_FOYE
    2021-09-29 22:45:13.983Z

    I'm trying to figuring out how to move two clips in the pro tools timeline up to two specifics tracks, while maintaining their time code. Currently I highlight the two clips, hold control and slide them up. This is for moving a beep and a "not for TV" word up to two specific tracks.

    Any insight would be appreciated.

    Solved in post #2, click to view
    • 26 replies

    There are 26 replies. Estimated reading time: 27 minutes

    1. Kitch Membery @Kitch2021-09-29 22:56:39.732Z

      Hi @SEAN_FOYE ,

      Somthing like this should do the trick;

      //Destination track names
      const destinationTrackNames = ["Audio 1", "Audio 2"];
      
      //Activate Pro Tools main window;
      sf.ui.proTools.appActivateMainWindow();
      sf.ui.proTools.mainWindow.invalidate();
      
      //Original Track Names
      const originalTrackNames = sf.ui.proTools.selectedTrackNames;
      
      //Make sure Link Track and Edit Selection is enabled
      sf.ui.proTools.menuClick({
          menuPath: ["Options", "Link Track and Edit Selection"],
          targetValue: "Enable"
      });
      
      //Cut clips
      sf.ui.proTools.menuClick({ menuPath: ["Edit", "Cut"] });
      
      //Select all destination tracks
      sf.ui.proTools.trackSelectByName({
          names: destinationTrackNames,
      });
      
      //Paste Clips
      sf.ui.proTools.menuClick({ menuPath: ["Edit", "Paste"] });
      
      //Reselect previous tracks
      sf.ui.proTools.trackSelectByName({
          names: originalTrackNames
      });
      
      Reply1 LikeSolution
      1. UUser05, Gilyd @User05_Gilyd
          2022-01-25 09:33:23.815Z

          Hi there. How would I make this for a mono track?
          Im trying to move a selection of clips to just DX 1 :-)
          thanks

          1. Kat F.A. made a Template that does this. But instead of cut it copies. Make an editable copy of her template and head into the code you can find where it says "Copy" and change it to "Cut"

          2. In reply toKitch:

            @Kitch how could you make this script "smart" so it counts the number of tracks selected and then pastes to that number of tracks (starting with the top destination track obviously).

            So If I selected 5 tracks and pressed my button it would go to say "Audio 1" select the 4 tracks below it and paste the clipboard. If I only selected 2 audio tracks it'd only paste to two etc etc...

            Of course it would require that the user had enough destination tracks to select...

            1. Kitch Membery @Kitch2022-01-25 22:37:57.582Z

              Hi @Owen_Granich_Young,

              You'd do it like this :-)

              //Destination track names
              const firstDestinationTrackName = "Audio 1";
              
              function extendEditDown(repetitions) {
                  for (let i = 0; i < repetitions; i++) {
                      sf.ui.proTools.menuClick({
                          menuPath: ["Edit", "Selection", "Extend Edit Down"],
                      });
                  }
              }
              
              function main() {
                  //Get the original selected track count
                  const originalSelectedTrackCount = sf.ui.proTools.selectedTrackCount;
              
                  //Activate Pro Tools main window;
                  sf.ui.proTools.appActivateMainWindow();
                  sf.ui.proTools.mainWindow.invalidate();
              
                  //Original Track Names
                  const originalTrackNames = sf.ui.proTools.selectedTrackNames;
              
                  //Make sure Link Track and Edit Selection is enabled
                  sf.ui.proTools.menuClick({
                      menuPath: ["Options", "Link Track and Edit Selection"],
                      targetValue: "Enable"
                  });
              
                  //Cut clips
                  sf.ui.proTools.menuClick({ menuPath: ["Edit", "Cut"] });
              
                  //Select all destination tracks
                  sf.ui.proTools.trackSelectByName({ names: [firstDestinationTrackName], });
              
                  extendEditDown(originalSelectedTrackCount-1)
              
                  //Paste Clips
                  sf.ui.proTools.menuClick({ menuPath: ["Edit", "Paste"] });
              
                  //Reselect previous tracks
                  sf.ui.proTools.trackSelectByName({
                      names: originalTrackNames
                  });
              }
              
              main();
              
              1. You rock boss.

                AAF ORGANIZER - COPY/CUT to Target Track - in STORE for anybody who wants it.

                I've templated @Kitch 's above script so you can create presets with CUT or COPY

                @Kitch at some point I'll have to ask you how to give the Bolean names instead of Yes and No -- CUT and COPY

                But I think people can figure it out :P

                1. Kitch Membery @Kitch2022-01-25 23:48:20.453Z

                  Rock on!

                  Tomorrow's webinar maybe?

                  1. Will try to make it 👍🏼

            2. In reply toKitch:
              AAndrew Sherman @Andrew_Sherman
                2022-06-08 15:09:35.747Z

                Just saying thanks for this; I've made my own modified version and I'm wondering why I didn't do it much sooner! Audio post so much easier - just press the trigger and boom, off goes the audio to the correct track.

              • S
                In reply toSEAN_FOYE:
                SEAN FOYE @SEAN_FOYE
                  2021-09-29 23:07:34.704Z

                  Works perfectly! Thanks for the speedy response.

                  1. Kitch Membery @Kitch2021-09-29 23:23:38.415Z

                    You're welcome Sean :-)

                  2. M
                    In reply toSEAN_FOYE:
                    Micah Loken @Micah_Loken
                      2022-03-07 23:08:51.977Z
                      1. Kitch Membery @Kitch2022-03-07 23:20:45.184Z

                        Hi @Micah_Loken,

                        This is certainly doable. I've got a bit on my plate this week but will see what I can do when I get a chance. :-)

                        If your up for a challenge, you can learn more about how to use UI automation instead of keyboard simulation in the following 2 videos:

                        Rock on!

                        1. MMicah Loken @Micah_Loken
                            2022-03-07 23:36:29.489Z

                            No worries. Thanks for the videos. I have watched the videos and am up to speed with what the tool is capable of. this one is a script that is going to require more customizations than the standard Macro creation system in SF can produce I think.

                            Keep me posted when you have a bit more time. Thanks!

                          • In reply toMicah_Loken:
                            Kitch Membery @Kitch2022-03-07 23:28:31.590Z

                            Actually,

                            This should get you most of the way there :-)

                            const tracksToPasteTo = ["8", "10", "11"]
                            
                            
                            function main() {
                                //Get the original selected track count
                                const originalSelectedTrackCount = sf.ui.proTools.selectedTrackCount;
                            
                                //Activate Pro Tools main window;
                                sf.ui.proTools.appActivateMainWindow();
                                sf.ui.proTools.mainWindow.invalidate();
                            
                                //Original Track Names
                                const originalTrackNames = sf.ui.proTools.selectedTrackNames;
                            
                                //Make sure Link Track and Edit Selection is enabled
                                sf.ui.proTools.menuClick({
                                    menuPath: ["Options", "Link Track and Edit Selection"],
                                    targetValue: "Enable"
                                });
                            
                                //Cut clips
                                sf.ui.proTools.menuClick({ menuPath: ["Edit", "Copy"] });
                            
                            
                                if (originalSelectedTrackCount === tracksToPasteTo.length) {
                                    //Select all destination tracks
                                    sf.ui.proTools.trackSelectByName({ names: tracksToPasteTo, });
                            
                                    //Paste Clips
                                    sf.ui.proTools.menuClick({ menuPath: ["Edit", "Paste"] });
                                } else {
                                    throw `The selected track count does not match the destination track count.`;
                                }
                            
                                //Reselect previous tracks
                                sf.ui.proTools.trackSelectByName({
                                    names: originalTrackNames
                                });
                            }
                            
                            main();
                            
                            1. Kitch Membery @Kitch2022-03-08 00:15:49.126Z

                              @Micah_Loken... Not sure if you missed the above script. Let me know if it works for you. :-)

                              1. MMicah Loken @Micah_Loken
                                  2022-03-08 01:12:54.675Z

                                  I just saw your reply. While this method works, I am looking more for something that gives the ability to select which tracks for various selections. Much like a menu that pops up and dependent on the number of clips/tracks I have selected, gives me an option on which tracks to paste them too.

                                  If I select clips in 4 tracks, then a "getList" function will run (as an example) and ask which 4 tracks to paste them to and I can select those tracks and the script will then continue to run. Something along those lines. Same with selecting clips in just 1 track or 5 tracks etc. So a custom package

                                  I'm open to suggestions on how to go about it, but the workflow is effectively copying/pasting to specific tracks and it is constantly changing each group of tracks further down the timeline so making it impossible to fully automate the process. It's more of a listen and pick options and then move them to certain tracks along the timeline. I am not quite that far along in my javascript knowledge to fully make this a reality.

                                  Feel free to put this on the back burner since you are busy. I'd love to work with you and/or @chrscheuer at some point to come up with something that can make this a reality. Feel free to email me as well.

                                  1. So you want the script to prompt you every time you press the button:

                                    Hey Script : look at track count.
                                    Now script : ask me as many times as track count where you want this audio
                                    Then script : send my audio in decending order to those tracks.

                                    Right?

                                    It seems doable, like select track to paste to but ask for a series of destination tracks based on a for loop. I can't code it but that might help @kitch understand what you're looking for.... if I'm understanding it right.

                                    bests,
                                    Owen

                                    1. MMicah Loken @Micah_Loken
                                        2022-03-08 18:07:14.703Z

                                        Hi Owen,

                                        Nice tool! It inspired me to think through workflows for myself. I'm learning more and more and becoming more proficient with SF. I'm looking to essentially do what you described.

                                        Look at current track count based on selection

                                        Get list of tracks in the session, or... even better yet, ask the user once which tracks in the session they would possibly want to move items to and use those tracks (since there could be loads of tracks in the session that are not desired to be places on a searchable list)

                                        Send audio to specified tracks per the user's decision (not necessarily in descending order... although it could end up in descending order).

                                        I was not very clear about that in the videos I posted or explanation. I also don't want to cause more grief than it's worth, but at very minimum, what you stated are the steps I am looking for. New here so hope this helps!

                                        1. Micah, out of curiousity you don't think it's faster to just have a dedicated button or key command for your 10 DX tracks and when you want each one in a specifc track just go clip by clip and press the approriate button? I just feel like the script prompting you to define destination track every time want to send a clip will be a slower process overall... Just thinking out loud though.

                                          One thing I've been doing is using the the 1-5 keys instead of a stream deck for this kind of thing so I don't have to take my fingers off the keyboard. could be 1-5 and cmd+1-5 for tracks 1-10? Once again just spit balling. Every millisecond counts right?

                                          1. MMicah Loken @Micah_Loken
                                              2022-03-08 22:11:23.865Z

                                              Yeah, you are likely totally right. Hadn't thought of it like that but it would cause more time/interaction to select tracks than it would be to simply drag/drop.

                                              What I am ultimately trying to achieve is selecting multiple clips and moving them up to tracks but not necessarily appearing in descending order one right after the other, but rather mirroring how they were placed on the tracks below that I am pulling from. What I am describing is Example #1 (video) in my post above where there is a track left empty, as an example between the 2nd and third clip. This could, in theory work for any number of empty tracks. Copying/Pasting as is, even with multiple tracks left "unused" in between.

                                              Another example of a workflow (to show it with another tool) would be selecting multiple individual clips and dragging them up, using the grabber object tool, and leaving one track unused.

                                              Example #4:

                                              So, to your point... even if it was just mirroring the track layout/selection from the bank of tracks below, I would be happy with that and just reorganize as needed/wanted from there after the move. That would certainly still speed up the workflow overall!

                                              1. @samuel_henriques wrote this awesome script for me... I bet if you asked he could do a tweak on it. I have to learn how to modify it for other uses but it's in the vein of what you want.

                                                bests,
                                                Owen

                                                1. In reply toMicah_Loken:
                                                  Kitch Membery @Kitch2022-03-08 23:07:26.563Z

                                                  Hi @Micah_Loken & @Owen_Granich_Young,

                                                  Great ideas bouncing around, legends!

                                                  I don't have the time right now to create the workflow, but another option would be to;

                                                  • Have a deck that has buttons assigned to each of the destination tracks. Each button when pushed would add that tracks name to an array in the global state.
                                                  • Then you'd have a "clear" button to clear the global state, when you want to add the selected content to different tracks.
                                                  • Once the global state is populated with track names, you could then copy and paste the selected content to the tracks stored in the global via a script.
                                                  • You could also have presets that you make for preconfigured sets of track names.

                                                  This kind of solution would obviously be better created with a dynamic deck or surface, but that functionality is only currently available for the SoundFlow Developer team, however you could make something really tactile even without it being dynamic.

                                                  A good starting point is looking into setting global state values.

                                                  Push method

                                                  //Track name you want to add the the globalState variable
                                                  const trackName = "Audio 1";
                                                  
                                                  //Push the track name to global state 
                                                  //Each time you push a track name to the globalState the track name gets added to an array
                                                  globalState.destinationTrackNames.push(trackName)
                                                  
                                                  //Log what's in the global state
                                                  log(globalState.destinationTrackNames)
                                                  

                                                  Rest the global state variable

                                                  //Reset the destination track names array
                                                  globalState.destinationTrackNames = [];
                                                  
                                                  //Log what's in the global state
                                                  log(globalState.destinationTrackNames)
                                                  

                                                  Add an array of track names to the global state variable

                                                  //Add an array of track names to the destination track names global state variable
                                                  globalState.destinationTrackNames = ["Audio 1", "Audio 2", "Audio 3"];
                                                  
                                                  //Log what's in the global state
                                                  log(globalState.destinationTrackNames)
                                                  

                                                  Let me know if that makes sense. :-)
                                                  Rock on!
                                                  Kitch

                                                  1. MMicah Loken @Micah_Loken
                                                      2022-03-09 18:33:54.104Z

                                                      @Kitch @Owen_Granich_Young @samuel_henriques

                                                      Thanks all for the help! Sounds like I've got some stuff to learn in order to make this happen. Much appreciated!

                                                      1. In reply toKitch:

                                                        Hello,
                                                        I need help creating a command with my template in protools.
                                                        My template is composed as follows:
                                                        The two tracks in record are the tracks where I record, these two tracks will change name in each recording (but I manually write the name each time).
                                                        What I need is that when I finish recording and press the space bar to stop the recording, soundflow will select the two clips I just recorded and move them immediately below into the two free tracks.
                                                        It is possible that I do multiple recordings in the same spot so each time it has to bring the clips down to two tracks even further below. In fact, my template looks like this: 2 tracks to record - 1 midi track 1 - 2 tracks where to insert the recordings - 1 midi track - 2 tracks where to insert the recordings - 1 midi track, and it goes on like this for 30 times.
                                                        Each time it should bring down the clips to the first two free tracks it finds.
                                                        Can you help me, it is too difficult for me to write.

                                                        1. Kitch Membery @Kitch2023-01-03 18:26:28.643Z

                                                          Hi @studiokeasound_com,

                                                          As this is a custom workflow you are trying to achieve please start a new thread for this. You can always link this thread to the new thread for reference.

                                                          Rock on!