No internet connection
  1. Home
  2. How to

Import session data

By Matthew Eldridge @Matthew_Eldridge
    2023-08-08 01:45:25.614Z2023-08-08 05:04:00.010Z

    I am wanting to create a script that will streamline my importing of session data from an AAF. I know that there is a package and some scripts available that does this but I have yet to get one to do exactly what I want.

    I would like to create a script that when the 'import session data' window is open it:

    .maps timecode to 01:00:00:00
    .Imports all tracks
    .Selects only 'clips and media' within 'track data to import' (checks what is selected and only selects this)
    .Selects 'import rendered audio effects
    .Selects ' Import Clip Gain'
    .All other session data greyed out
    .Once imported into session selects last track (ready to run import template script)

    Sorry I am new to Soundflow but having this will speed my workflow up at work a lot. Thanks

    • 4 replies
    1. Nathan Salefski @nathansalefski
        2023-08-09 12:42:10.997Z

        This should work. However when I run the script SoundFlow restarts. I've never seen this issue before. @chrscheuer or @Kitch ? I believe it's the disableCheckboxes(); function.

        //Activate Pro Tools and Refresh Cache
        sf.ui.proTools.appActivate();
        sf.ui.proTools.mainWindow.invalidate();
        
        function importData() {    
            // Make Reference to Import Session Data Window
            const iSDWin = sf.ui.proTools.windows.whoseTitle.is("Import Session Data").first
        
            function setTimecode() {    
                //Make Reference to Time Code Mapping Section
                const timeCodeSec = iSDWin.groups.whoseTitle.is("Timecode Mapping Options:").first
        
                //Select "Map start timecode to"
                timeCodeSec.popupButtons.first.popupMenuSelect({ menuPath: ["Map start timecode to"],});
        
                //Click Timecode Box
                iSDWin.mouseClickElement({ relativePosition: {"x":390,"y":105},});
        
                //Press Delete
                sf.keyboard.press({ keys: "delete",});
        
                //Click Hours in Timecode Box
                iSDWin.mouseClickElement({ relativePosition: {"x":403,"y":105},});
        
                //Press Delete
                sf.keyboard.type({ text: '1' });
            }
        
            setTimecode();
        
            //Make Reference to Sample Rate Conversion Section
            const sRCMenu = iSDWin.groups.whoseTitle.is("Sample Rate Conversion Options:").first
            
            //Disable "Apply SRC"
            sRCMenu.checkBoxes.whoseTitle.is("Apply SRC").first.checkboxSet({ targetValue: "Disable",});   
        
            //Option Click to Import all Tracks onto New Tracks
            iSDWin.mouseClickElement({ relativePosition: {"x":185,"y":510}, isOption: true,});
        
            function disableCheckboxes() {
                //Disable Apply SRC
                const aSRCCheckbox = sRCMenu.checkBoxes.whoseTitle.is("Apply SRC").first
        
                if (aSRCCheckbox.value.invalidate().value === 'Checked') { aSRCCheckbox.checkboxSet({ targetValue: "Disable",});};
        
        
                //Make Reference to Session Data Section
                const sessDataSec = iSDWin.groups.whoseTitle.is("Session Data").first
            
                //Make Reference to All Session Data Section Checkboxes
                const tMMCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Tempo / Meter Map").first
                const kSCMCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Key Signature / Chord Map").first
                const rMMLCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Ruler Markers / Memory Locations").first
                const wCCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Window Configurations").first
                const mPSCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Mic PRE Settings").first
                const hMSCheckbox = sessDataSec.checkBoxes.whoseTitle.is("HEAT Master Settings").first
        
                //Deselect if Selected
                if (tMMCheckbox.value.invalidate().value === 'Checked') { tMMCheckbox.checkboxSet({ targetValue: "Disable",});};
                if (kSCMCheckbox.value.invalidate().value === 'Checked') { kSCMCheckbox.checkboxSet({ targetValue: "Disable",});};
                if (rMMLCheckbox.value.invalidate().value === 'Checked') { rMMLCheckbox.checkboxSet({ targetValue: "Disable",});};
                if (wCCheckbox.value.invalidate().value === 'Checked') { wCCheckbox.checkboxSet({ targetValue: "Disable",});};
                if (mPSCheckbox.value.invalidate().value === 'Checked') { mPSCheckbox.checkboxSet({ targetValue: "Disable",});};
                if (hMSCheckbox.value.invalidate().value === 'Checked') { hMSCheckbox.checkboxSet({ targetValue: "Disable",});}; 
        
        
                //Enable Import/Replace Existing Playlists
                const iREPCheckbox = iSDWin.radioButtons.whoseTitle.is("Import - Replace Existing Playlists").first
        
                if (iREPCheckbox.value.invalidate().value === 'Checked') { iREPCheckbox.checkboxSet({ targetValue: "Enable",});};      
            }
        
            disableCheckboxes();
        
            function clipsAndMedia() {
                // Refresh Cache
                sf.ui.proTools.mainWindow.invalidate(); 
        
                // Click "Choose..."
                iSDWin.groups.whoseTitle.is("Session Data").first.buttons.whoseTitle.is("Choose...").first.elementClick();
        
                //Reference Track Data to Import Window
                const trackData = sf.ui.proTools.windows.whoseTitle.is("Track Data to Import").first
        
                //Wait for Track Data Window to Appear
                trackData.elementWaitFor({waitType: "Appear"});
        
                //Option Click to Deselect All
                trackData.mouseClickElement({ relativePosition: {"x":22,"y":125}, isOption: true,});
        
                //Select "Clips and Media"
                trackData.groups.whoseTitle.is("Track Data").first.checkBoxes.whoseTitle.is("Clips and Media").first.checkboxSet({ targetValue: "Enable",});
        
                //Make Reference to Last Checkbox
                const iIMOCheckbox = trackData.groups.whoseTitle.is("Track Data").first.checkBoxes.whoseTitle.is("Include Instrument/MIDI output").first
        
                //Deselect if Selected
                if (iIMOCheckbox.value.invalidate().value === 'Checked') { iIMOCheckbox.checkboxSet({ targetValue: "Disable",});}
        
                //Click "OK" in Track Data to Import Window
                trackData.buttons.whoseTitle.is("OK").first.elementClick();
        
                //Wait for Track Data Window to Disappear
                trackData.elementWaitFor({waitType: "Disappear"});
            }
        
            clipsAndMedia();
        
            //Click "OK" in Import Session Data Window
            iSDWin.buttons.whoseTitle.is("OK").first.elementClick();
        
            //Wait
            sf.ui.proTools.waitForNoModals();
        }
        
        importData();
        
        1. Nathan Salefski @nathansalefski
            2023-08-09 12:50:54.532Z

            Looking into it even something as simple as this is causing SoundFlow to restart for me. Running SoundFlow v5.4.3 and Pro Tools version 2023.6.0

            const sRCCheckbox = sf.ui.proTools.windows.whoseTitle.is("Import Session Data").first.groups.whoseTitle.is("Sample Rate Conversion Options:").first.checkBoxes.whoseTitle.is("Apply SRC").first
            
            if (sRCCheckbox.value.invalidate().value === 'Checked') { sRCCheckbox.checkboxSet({ targetValue: "Disable",});}
            
            1. You should be able to skip the if block and just use checkboxSet with the targetValue as it does the checking for you

              1. Nathan Salefski @nathansalefski
                  2023-08-09 14:15:02.923Z

                  That was what was causing the crashes. Thanks @chrscheuer! @Matthew_Eldridge this should work for you:

                  //Activate Pro Tools and Refresh Cache
                  sf.ui.proTools.appActivate();
                  sf.ui.proTools.mainWindow.invalidate();
                  
                  function importData() {    
                      // Make Reference to Import Session Data Window
                      const iSDWin = sf.ui.proTools.windows.whoseTitle.is("Import Session Data").first
                  
                      function setTimecode() {    
                          //Make Reference to Time Code Mapping Section
                          const timeCodeSec = iSDWin.groups.whoseTitle.is("Timecode Mapping Options:").first
                  
                          //Select "Map start timecode to"
                          timeCodeSec.popupButtons.first.popupMenuSelect({ menuPath: ["Map start timecode to"],});
                  
                          //Click Timecode Box
                          iSDWin.mouseClickElement({ relativePosition: {"x":390,"y":105},});
                  
                          //Press Delete
                          sf.keyboard.press({ keys: "delete",});
                  
                          //Click Hours in Timecode Box
                          iSDWin.mouseClickElement({ relativePosition: {"x":403,"y":105},});
                  
                          //Press Delete
                          sf.keyboard.type({ text: '1' });
                      }
                  
                      setTimecode();
                  
                      //Make Reference to Sample Rate Conversion Section
                      const sRCMenu = iSDWin.groups.whoseTitle.is("Sample Rate Conversion Options:").first
                      
                      //Disable "Apply SRC"
                      sRCMenu.checkBoxes.whoseTitle.is("Apply SRC").first.checkboxSet({ targetValue: "Disable",});   
                  
                      //Option Click to Import all Tracks onto New Tracks
                      iSDWin.mouseClickElement({ relativePosition: {"x":185,"y":510}, isOption: true,});
                  
                      function disableCheckboxes() {
                          //Disable Apply SRC
                          const aSRCCheckbox = sRCMenu.checkBoxes.whoseTitle.is("Apply SRC").first
                  
                          aSRCCheckbox.checkboxSet({ targetValue: "Disable",});
                  
                  
                          //Make Reference to Session Data Section
                          const sessDataSec = iSDWin.groups.whoseTitle.is("Session Data").first
                      
                          //Make Reference to All Session Data Section Checkboxes
                          const tMMCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Tempo / Meter Map").first
                          const kSCMCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Key Signature / Chord Map").first
                          const rMMLCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Ruler Markers / Memory Locations").first
                          const wCCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Window Configurations").first
                          const mPSCheckbox = sessDataSec.checkBoxes.whoseTitle.is("Mic PRE Settings").first
                          const hMSCheckbox = sessDataSec.checkBoxes.whoseTitle.is("HEAT Master Settings").first
                  
                          //Deselect if Selected
                          tMMCheckbox.checkboxSet({ targetValue: "Disable",});
                          kSCMCheckbox.checkboxSet({ targetValue: "Disable",});
                          rMMLCheckbox.checkboxSet({ targetValue: "Disable",});
                          wCCheckbox.checkboxSet({ targetValue: "Disable",});
                          mPSCheckbox.checkboxSet({ targetValue: "Disable",});
                          hMSCheckbox.checkboxSet({ targetValue: "Disable",});
                  
                  
                          //Enable Import/Replace Existing Playlists
                          const iREPCheckbox = iSDWin.radioButtons.whoseTitle.is("Import - Replace Existing Playlists").first
                  
                          iREPCheckbox.checkboxSet({ targetValue: "Enable",});      
                      }
                  
                      disableCheckboxes();
                  
                      function clipsAndMedia() {
                          // Refresh Cache
                          sf.ui.proTools.mainWindow.invalidate(); 
                  
                          // Click "Choose..."
                          iSDWin.groups.whoseTitle.is("Session Data").first.buttons.whoseTitle.is("Choose...").first.elementClick();
                  
                          //Reference Track Data to Import Window
                          const trackData = sf.ui.proTools.windows.whoseTitle.is("Track Data to Import").first
                  
                          //Wait for Track Data Window to Appear
                          trackData.elementWaitFor({waitType: "Appear"});
                  
                          //Option Click to Deselect All
                          trackData.mouseClickElement({ relativePosition: {"x":22,"y":125}, isOption: true,});
                  
                          //Select "Clips and Media"
                          trackData.groups.whoseTitle.is("Track Data").first.checkBoxes.whoseTitle.is("Clips and Media").first.checkboxSet({ targetValue: "Enable",});
                  
                          //Make Reference to Last Checkbox
                          const iIMOCheckbox = trackData.groups.whoseTitle.is("Track Data").first.checkBoxes.whoseTitle.is("Include Instrument/MIDI output").first
                  
                          //Deselect if Selected
                          iIMOCheckbox.checkboxSet({ targetValue: "Disable",})
                  
                          //Click "OK" in Track Data to Import Window
                          trackData.buttons.whoseTitle.is("OK").first.elementClick();
                  
                          //Wait for Track Data Window to Disappear
                          trackData.elementWaitFor({waitType: "Disappear"});
                      }
                  
                      clipsAndMedia();
                  
                      //Click "OK" in Import Session Data Window
                      iSDWin.buttons.whoseTitle.is("OK").first.elementClick();
                  
                      //Wait
                      sf.ui.proTools.waitForNoModals();
                  }
                  
                  importData();