No internet connection
  1. Home
  2. How to

Pro Tools "Save Track Preset" Batch

By Bradley Denniston @Bradley_Denniston
    2025-06-07 18:13:49.598Z

    Hey ya'll! Hoping to make something like this happen:

    • Have a full session mix/ master setup with all inserts/ sends
    • Highlight all tracks and macro "Save track preset" for all the different tracks with a prefix or suffix of the artists name

    Tired of going through the whole session and saving track presets individually.

    Let me know if you got any suggestions?

    • 3 replies
    1. Kitch Membery @Kitch2025-06-07 20:23:52.768Z

      Hi @Bradley_Denniston, legend!

      Below is a script that will store track presets for all tracks in your session that end with a suffix of "_" followed by the Artist name. eg "_Bradley Denniston".

      So if one of the tracks was named "Audio 1_Bradley Denniston" a preset would be created like this.

      Please note that I've only done limited testing on this script, so let me know if there are any issues, and I'll take a look.


      Here are the steps to create the command

      • In SoundFlow, click "+New" and select "Script", name it "Store Track Presets" and press OK.

      • Copy and paste the following script into the new script you've created.

      function storeTrackPreset({ name, categoryPath }) {
          sf.ui.proTools.selectedTrack.titleButton.popupMenuSelect({
              menuPath: ["Save Track Preset..."],
              isRightClick: true
          });
      
          const saveTrackPresetWindow = sf.ui.proTools.windows.whoseTitle.is("Save Track Preset").first;
      
          saveTrackPresetWindow.elementWaitFor();
      
          saveTrackPresetWindow.popupButtons.first.popupMenuSelect({
              menuPath: categoryPath
          });
      
          // Set "Name:" field
          saveTrackPresetWindow.textFields.first.elementSetTextFieldWithAreaValue({
              value: name
          });
      
          saveTrackPresetWindow.buttons.whoseTitle.is("OK").first.elementClick();
      
          saveTrackPresetWindow.elementWaitFor({ waitType: "Disappear" });
      }
      
      function storeTrackPresets({ artistName, presetRootFolder, trackPresetsDirectory }) {
          // Location of artist's track presets folder in finder
          const targetPresetDirectory = `${trackPresetsDirectory}/${presetRootFolder}/${artistName}`;
      
          // Create artist track preset folder if it does not already exist
          if (!sf.file.directoryExists({ path: targetPresetDirectory }).exists) {
              sf.file.directoryCreate({
                  path: targetPresetDirectory,
              });
          }
      
          sf.ui.proTools.appActivateMainWindow();
          sf.ui.proTools.mainWindow.invalidate();
      
          const tracks = sf.app.proTools.tracks.invalidate().allItems;
          const targetTracks = tracks.filter(t => !t.isHidden && t.name.endsWith(`_${artistName}`));
          const targetTrackNames = targetTracks.map(t => t.name);
      
          targetTrackNames.forEach(name => {
              // Select the track
              sf.app.proTools.selectTracksByName({ trackNames: [name] });
      
              sf.ui.proTools.trackGetByName({ name }).track.trackScrollToView();
      
              // create preset name by removing the artistNameSuffix from the track Name
              const presetName = name.replace(`_${artistName}`, "").trim();
      
              storeTrackPreset({
                  name: presetName,
                  categoryPath: [presetRootFolder, artistName],
              });
          });
      }
      
      storeTrackPresets({
          artistName: "Bradley Denniston",
          presetRootFolder: "User Presets",
          trackPresetsDirectory: "~/Documents/Pro Tools/Track Presets",
      });
      
      • Update the artist name, preset root folder, and track preset directory (if needed).

      • Assign a keyboard shortcut to the Script or add it to a deck. :-)

      • Name the tracks you want to create preset names for with an "_Artist Name" Suffix, then run the script. (Note: This script could also be adapted to just work on the selected tracks rather than having the suffix added.)

      Let me know if you get stuck.
      Rock on!

      1. Amazing! How would I adapt it to just work on the selected tracks?

        1. Kitch Membery @Kitch2025-06-07 21:44:16.193Z

          Hi @Bradley_Denniston

          Here is a version that will work on Selected Tracks, so that you don't have to add the "_Artist Name" Suffix.

          function storeTrackPreset({ name, categoryPath }) {
              sf.ui.proTools.selectedTrack.titleButton.popupMenuSelect({
                  menuPath: ["Save Track Preset..."],
                  isRightClick: true,
              });
          
              const saveTrackPresetWindow = sf.ui.proTools.windows.whoseTitle.is("Save Track Preset").first;
          
              saveTrackPresetWindow.elementWaitFor();
          
              saveTrackPresetWindow.popupButtons.first.popupMenuSelect({
                  menuPath: categoryPath
              });
          
              // Set "Name:" field
              saveTrackPresetWindow.textFields.first.elementSetTextFieldWithAreaValue({
                  value: name
              });
          
              saveTrackPresetWindow.buttons.whoseTitle.is("OK").first.elementClick();
          
              saveTrackPresetWindow.elementWaitFor({ waitType: "Disappear" });
          }
          
          function storeTrackPresets({ artistName, presetRootFolder, trackPresetsDirectory }) {
              // Location of artist's track presets folder in finder
              const targetPresetDirectory = `${trackPresetsDirectory}/${presetRootFolder}/${artistName}`;
          
              // Create artist track preset folder if it does not already exist
              if (!sf.file.directoryExists({ path: targetPresetDirectory }).exists) {
                  sf.file.directoryCreate({
                      path: targetPresetDirectory,
                  });
              }
          
              sf.ui.proTools.appActivateMainWindow();
              sf.ui.proTools.mainWindow.invalidate();
          
              const tracks = sf.app.proTools.tracks.invalidate().allItems;
              const targetTracks = tracks.filter(t => !t.isHidden && t.isSelected);
              const targetTrackNames = targetTracks.map(t => t.name);
          
              targetTrackNames.forEach(name => {
                  // Select the track
                  sf.app.proTools.selectTracksByName({ trackNames: [name] });
          
                  sf.ui.proTools.trackGetByName({ name }).track.trackScrollToView();
          
                  storeTrackPreset({
                      name: name,
                      categoryPath: [presetRootFolder, artistName],
                  });
              });
          }
          
          storeTrackPresets({
              artistName: "Bradley Denniston",
              presetRootFolder: "User Presets",
              trackPresetsDirectory: "~/Documents/Pro Tools/Track Presets",
          });