By Udi Simhon @Udi_Simhon
I searched for a script that moves selected Tracks to top/bottom of the tracks list in PT but didn't find any. is there one?
Thanks,
Udi
Nathan Salefski @nathansalefskiHere you go!
Move to Bottom:
Move to Top:function moveSelectedTracksToBottom() { sf.ui.proTools.appActivateMainWindow(); sf.ui.proTools.invalidate(); let visibleTrackNames = sf.ui.proTools.invalidate().visibleTrackNames; let bottomTrack = sf.ui.proTools.invalidate().trackGetByName({ name: visibleTrackNames[visibleTrackNames.length - 1] }).track; let selectedTrackNames = sf.ui.proTools.trackGetSelectedTracks().names; sf.app.proTools.extendSelectionToTracks({ trackNames: [bottomTrack.normalizedTrackName] }); sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({ menuPath: ['Show Only Selected Tracks'] }); bottomTrack.trackScrollToView(); sf.ui.proTools.trackSelectByName({ names: selectedTrackNames, deselectOthers: true, }); let selectedTrackHeaders = sf.ui.proTools.invalidate().trackGetSelectedTracks().trackHeaders; let lastSelectedTrack = selectedTrackHeaders[selectedTrackHeaders.length - 1]; let titleButtonFrame = lastSelectedTrack.titleButton.frame; let titleButtonFrameCenterX = titleButtonFrame.x + (titleButtonFrame.w / 2); let titleButtonFrameCenterY = titleButtonFrame.y + (titleButtonFrame.h / 2); let bottomTrackFrameHeight = bottomTrack.frame.h; let dragY = bottomTrackFrameHeight + lastSelectedTrack.frame.h; // Set posiition in middle of title button sf.mouse.setPosition({ position: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY } }); sf.mouse.simulateDrag({ startPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY }, endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY + dragY }, //bottomTrack }); sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({ menuPath: ['Restore Previously Shown Tracks'] }); } moveSelectedTracksToBottom();function moveSelectedTracksToTop() { sf.ui.proTools.appActivateMainWindow(); sf.ui.proTools.invalidate(); let visibleTrackNames = sf.ui.proTools.invalidate().visibleTrackNames; let topTrack = sf.ui.proTools.invalidate().trackGetByName({ name: visibleTrackNames[0] }).track; let selectedTrackNames = sf.ui.proTools.trackGetSelectedTracks().names; sf.app.proTools.extendSelectionToTracks({ trackNames: [topTrack.normalizedTrackName] }); sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({ menuPath: ['Show Only Selected Tracks'] }); topTrack.trackScrollToView(); sf.ui.proTools.trackSelectByName({ names: selectedTrackNames, deselectOthers: true, }); let firstSelectedTrack = sf.ui.proTools.invalidate().trackGetSelectedTracks().trackHeaders[0]; let titleButtonFrame = firstSelectedTrack.titleButton.frame; let titleButtonFrameCenterX = titleButtonFrame.x + (titleButtonFrame.w / 2); let titleButtonFrameCenterY = titleButtonFrame.y + (titleButtonFrame.h / 2); let topTrackFrameHeight = topTrack.frame.h; // Set posiition in middle of title button sf.mouse.setPosition({ position: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY } }); sf.mouse.simulateDrag({ startPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY }, endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY - topTrackFrameHeight }, //topTrack }); sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({ menuPath: ['Restore Previously Shown Tracks'] }); } moveSelectedTracksToTop();
Jack Green @Jack_GreenThis is great. Is there a tweak we can make? having the smallest issue when the first track is a folder. its putting the track inside the folder rather than before it?
Thanks in advance!!
Jack
Chad Wahlbrink @Chad2025-02-18 14:58:40.310ZHi, @Jack_Green,
Changing line 41 to this seems to do the trick for moving to the top track at all track heights and regardless if the first track is a folder. I'm just shifting the y value up 10px:
endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY - topTrackFrameHeight - 10 }, //topTrackFull script:
function moveSelectedTracksToTop() { sf.ui.proTools.appActivateMainWindow(); sf.ui.proTools.invalidate(); // get visible track names let visibleTrackNames = sf.ui.proTools.invalidate().visibleTrackNames; let topTrack = sf.ui.proTools.invalidate().trackGetByName({ name: visibleTrackNames[0] }).track; let selectedTrackNames = sf.ui.proTools.trackGetSelectedTracks().names; sf.app.proTools.extendSelectionToTracks({ trackNames: [topTrack.normalizedTrackName] }); sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({ menuPath: ['Show Only Selected Tracks'] }); topTrack.trackScrollToView(); sf.ui.proTools.trackSelectByName({ names: selectedTrackNames, deselectOthers: true, }); let firstSelectedTrack = sf.ui.proTools.invalidate().trackGetSelectedTracks().trackHeaders[0]; let titleButtonFrame = firstSelectedTrack.titleButton.frame; let titleButtonFrameCenterX = titleButtonFrame.x + (titleButtonFrame.w / 2); let titleButtonFrameCenterY = titleButtonFrame.y + (titleButtonFrame.h / 2); let topTrackFrameHeight = topTrack.frame.h; // Set posiition in middle of title button sf.mouse.setPosition({ position: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY } }); sf.mouse.simulateDrag({ startPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY }, // CW EDIT - subtracting 10 from the top track frame height will ensure that the source track is not dropped into a track folder endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY - topTrackFrameHeight - 10 }, //topTrack }); sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({ menuPath: ['Restore Previously Shown Tracks'] }); } moveSelectedTracksToTop();Great script, @nathansalefski!