UAD to UADX converter not working
Title
UAD to UADX converter not working
Content type
script
Content name
UAD to UADx Converter
Content package
UAD to UADx Converter
Version info
OS: macOS 26.2.0
SoundFlow: 6.0.9
Pro Tools: null
What do you expect to happen when you run the script?
convert.. but when it hit run it says app is not running in soundflow.. the soundflow app
Are you seeing an error?
UAD to UADX converter not running
What happens when you run the script?
How were you running this script?
I clicked the Run Script or Run Macro button in SoundFlow
How important is this issue to you?
5
Details
{
"textExpected": "convert.. but when it hit run it says app is not running in soundflow.. the soundflow app\n",
"textError": "UAD to UADX converter not running",
"inputHowRun": "I clicked the Run Script or Run Macro button in SoundFlow",
"inputImportance": 5,
"textTitle": "UAD to UADX converter not working"
}
Source
//UAD Plugin Arrays
const uadXpluginLookupArray = [
{
uadPluginName: "UAD UA 1176 Rev A",
presetPositionXPercentage: 0.10,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx 1176 Rev A Compressor",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.37,
},
{
uadPluginName: "UAD UA 1176LN Rev E",
presetPositionXPercentage: 0.10,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx 1176LN Rev E Compressor",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.37,
},
{
uadPluginName: "UAD UA 1176AE",
presetPositionXPercentage: 0.10,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx 1176AE Compressor",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.37,
},
{
uadPluginName: "UAD API 2500",
presetPositionXPercentage: 0.09,
presetPositionYPercentage: 0.98,
uadXPluginName: "UADx API 2500 Bus Compressor",
pastePositionXPercentage: 0.35,
pastePositionYPercentage: 0.20,
},
{
uadPluginName: "UAD Brigade Chorus",
presetPositionXPercentage: 0.15,
presetPositionYPercentage: 0.98,
uadXPluginName: "UADx Brigade Chorus",
pastePositionXPercentage: 0.60,
pastePositionYPercentage: 0.18,
},
{
uadPluginName: "UAD Galaxy Tape Echo",
presetPositionXPercentage: 0.12,
presetPositionYPercentage: 0.98,
uadXPluginName: "UADx Galaxy Tape Echo",
pastePositionXPercentage: 0.47,
pastePositionYPercentage: 0.22,
},
{
uadPluginName: "UAD Lexicon 224",
presetPositionXPercentage: 0.28,
presetPositionYPercentage: 0.985,
uadXPluginName: "UADx Lexicon 224 Digital Reverb",
pastePositionXPercentage: 0.81,
pastePositionYPercentage: 0.14,
},
{
uadPluginName: "UAD Neve 1073",
presetPositionXPercentage: 0.33,
presetPositionYPercentage: 0.985,
uadXPluginName: "UADx Neve 1073 Preamp and EQ",
pastePositionXPercentage: 0.75,
pastePositionYPercentage: 0.13,
},
{
uadPluginName: "UAD Pultec EQP-1A",
presetPositionXPercentage: 0.09,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx Pultec EQP-1A EQ",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.27,
},
{
uadPluginName: "UAD Pultec HLF-3C",
presetPositionXPercentage: 0.095,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx Pultec HLF-3C EQ",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.33,
},
{
uadPluginName: "UAD Pultec MEQ-5",
presetPositionXPercentage: 0.095,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx Pultec MEQ-5 EQ",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.33,
},
{
uadPluginName: "UAD Pure Plate",
presetPositionXPercentage: 0.25,
presetPositionYPercentage: 0.985,
uadXPluginName: "UADx Pure Plate Reverb",
pastePositionXPercentage: 0.84,
pastePositionYPercentage: 0.13,
},
{
uadPluginName: "UAD Studio D Chorus",
presetPositionXPercentage: 0.0985,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx Studio D Chorus",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.36,
},
{
uadPluginName: "UAD Teletronix LA-2",
presetPositionXPercentage: 0.0985,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx LA-2 Compressor",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.275,
},
{
uadPluginName: "UAD Teletronix LA-2A Gray",
presetPositionXPercentage: 0.0985,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx LA-2A Gray Compressor",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.275,
},
{
uadPluginName: "UAD Teletronix LA-2A Silver",
presetPositionXPercentage: 0.0985,
presetPositionYPercentage: 0.97,
uadXPluginName: "UADx LA-2A Silver Compressor",
pastePositionXPercentage: 0.38,
pastePositionYPercentage: 0.275,
},
];
function saveSession() {
sf.ui.proTools.menuClick({ menuPath: ['File', 'Save'] });
}
function ensureEditWindowIsFocused() {
//ensure edit window is focused
sf.ui.proTools.menuClick({ menuPath: ['Window', 'Edit'] });
}
function ensureTempoRulerIsVisible() {
//ensure tempo ruler is visible
sf.ui.proTools.menuClick({
menuPath: ["View", "Rulers", "Tempo"],
targetValue: "Enable",
});
}
function hideAllFloatingWindows() {
//Hide all floating windows
sf.ui.proTools.menuClick({
menuPath: ["Window", "Hide All Floating Windows"],
targetValue: "Enable",
});
}
/** @param {{ savePath: string, newSessionName: string }} args */
function saveAs({ savePath, newSessionName }) {
sf.ui.proTools.menuClick({ menuPath: ['File', 'Save As...'] });
// Save Window
const saveWin = sf.ui.proTools.windows.whoseTitle.is("Save").first;
const saveWinSheet = saveWin.sheets.first;
saveWin.elementWaitFor();
// Open the "Go to the folder" sheet
sf.keyboard.press({ keys: 'slash' });
saveWinSheet.elementWaitFor();
const sheet = saveWin.sheets.first;
if (sheet.comboBoxes.first.exists) {
//Set preset name
sheet.comboBoxes.first.value.value = savePath;
//Click "Go"
sheet.buttons.whoseTitle.is('Go').first.elementClick();
} else {
//Set presetPath
sheet.textFields.first.value.value = savePath;
sf.keyboard.press({ keys: 'return' });
}
//give the sheet extra buffer time to appear
sf.wait({ intervalMs: 500 });
// Set name of Save Copy In Session
saveWin.textFields.first.elementSetTextFieldWithAreaValue({
value: newSessionName
});
// Click 'Save' and wait for window to dissapear
saveWin.buttons.whoseTitle.is("Save").first.elementClick();
saveWin.elementWaitFor({ waitType: 'Disappear' });
sf.ui.proTools.waitForNoModals();
}
function saveAsUadx() {
sf.ui.proTools.appActivateMainWindow();
sf.ui.proTools.mainWindow.invalidate();
const sessionPath = sf.ui.proTools.mainWindow.invalidate().sessionPath;
const sessionParentPath = sessionPath.split("/").slice(0, -1).join("/");
const sessionName = sessionPath.split("/").slice(-1)[0].split(".")[0];
saveAs({
savePath: function () {
const savePath = `${sessionParentPath}`;
if (!sf.file.directoryExists({ path: savePath }).exists) {
sf.file.directoryCreate({ path: savePath });
}
return savePath;
}(),
//amend filename here
newSessionName: `${sessionName}_UADx`,
});
}
//Find all UAD<>UADx Compatiable Tracks
function findAllUadTracks() {
/**
* @param {array} plugNames
* @param {boolean} includeInactive
*/
function selectTrackskWithPlugName(plugNames, includeInactive) {
sf.ui.proTools.trackDeselectAll();
const visibleTrackNames = sf.ui.proTools.visibleTrackNames;
let foundTracks = []
//Loop visible tracks
for (let i = 0; i < visibleTrackNames.length; i++) {
const trackName = visibleTrackNames[i]
const track = sf.ui.proTools.trackGetByName({ name: trackName }).track
const muteBtn = track.buttons.whoseTitle.is("Mute").first
if (!muteBtn.exists) continue;
const isTrackInactive = muteBtn.value.value.startsWith('inactive')
if (isTrackInactive && !includeInactive) continue;
//Loop insert btns
for (let i = 0; i < 9; i++) {
const insertBtn = track.insertButtons[i]
if (!insertBtn.exists) break;// exit insert loop
const insertSelectorBtn = track.insertSelectorButtons[i]
let isInactive
//If u want to include inactive, isInactive = false so will never continue by this reason,
//else, will only go to next step if active
includeInactive ? isInactive = false : isInactive = insertSelectorBtn.value.invalidate().value === "inactive"
if (isInactive) continue;
const plugName = insertBtn.value.invalidate().value
if (plugNames.includes(plugName)) {
foundTracks.push(track.normalizedTrackName)
};
};
};
if (foundTracks.length === 0) { alert(`No active UAD<>UADx Compatiable inserts or tracks found`); throw 0; }
sf.ui.proTools.trackSelectByName({ names: foundTracks });
};
/**
* @param {object} param
* @param {string[]} param.plugNames
* @param {boolean} [param.includeInactive]
*/
function selectTracksWithPlug_in({ plugNames, includeInactive = false }) {
sf.ui.proTools.invalidate();
// Get disabled viwes
const disabled = ["Inserts A-E", "Inserts F-J"].filter(view => !sf.ui.proTools.getMenuItem("View", "Edit Window Views", view).isMenuChecked);
//Enable Disabled Views
disabled.map(view => sf.ui.proTools.menuClick({ menuPath: ["View", "Edit Window Views", view], targetValue: "Enable" }));
try {
selectTrackskWithPlugName(plugNames, includeInactive)
} catch (err) {
throw err;
} finally {
// Return Views to original state
disabled.map(view => sf.ui.proTools.menuClick({ menuPath: ["View", "Edit Window Views", view], targetValue: "Disable" }));
}
};
selectTracksWithPlug_in({
plugNames:
["UAD UA 1176 Rev A",
"UAD UA 1176AE",
"UAD UA 1176LN Rev E",
"UAD API 2500",
"UAD Brigade Chorus",
"UAD Galaxy Tape Echo",
"UAD Lexicon 224",
"UAD Neve 1073",
"UAD Pultec EQP-1A",
"UAD Pultec HLF-3C",
"UAD Pultec MEQ-5",
"UAD Pure Plate",
"UAD Studio D Chorus",
"UAD Teletronix LA-2",
"UAD Teletronix LA-2A Gray",
"UAD Teletronix LA-2A Silver"]
});
}
function loadFirstUadPlug() {
function getInsertsInfo() {
const insertInfo = Array(10).fill(0).map((_, index) => {
const track = sf.ui.proTools.selectedTrack;
const insertButton = track.invalidate().insertButtons[index];
const insertButtonValue = insertButton.value.invalidate().value;
const insertSelectorButton = track.invalidate().insertSelectorButtons[index]
const insertSelectorButtonValue = insertSelectorButton.value.invalidate().value;
return {
insertButton,
insertButtonValue,
insertSelectorButton,
insertSelectorButtonValue,
insertIndex: index,
pluginName: insertButtonValue,
//isBypassed: insertSelectorButtonValue.includes('bypassed'),
isActive: !insertSelectorButtonValue.includes('inactive'),
};
});
return insertInfo;
}
//Get an array of usable UAD plugin names
const usablePluginNames = uadXpluginLookupArray.map(item => item.uadPluginName);
const insertsInfo = getInsertsInfo();
//Filter to get all insert slots whose name includes any of the usablePluginNames
const matchingInsertSlots = insertsInfo.filter(btn => {
return usablePluginNames.some((name) => name === btn.pluginName) && btn.isActive === true;
});
sf.ui.proTools.appActivateMainWindow();
//Loop through the matchingInsertSlots
matchingInsertSlots.forEach(insert => {
sf.ui.proTools.selectedTrack.trackInsertToggleShow({
insertNumber: insert.insertIndex + 1,
});
convertUadToUadx();
});
}
function convertUadToUadx() {
//position plugin window so drop down menu has room to drop
const targetWindowXPostion = sf.ui.proTools.mainWindow.buttons.whoseTitle.is("Add Tempo Change").first.frame.x;
const targetWindowYPosition = sf.ui.proTools.mainWindow.gridNudgeCluster.frame.y;
const pluginWindow = sf.ui.proTools.windows.whoseTitle.contains("Plug-in:").first;
//get plugin bypass info - if bypass is active, then move on to the next instance
const pluginBypassInfo = sf.ui.proTools.windows.whoseTitle.startsWith("Plug-in: UAD").first.buttons.whoseTitle.is("Effect Bypass").first.value.invalidate().value;
if (pluginBypassInfo === "on") {
return
}
function setWindowsizeAndPosition(settings) {
const { window, x, y, screenIndex } = settings;
let screenFrame = sf.ui.screens.allScreens[screenIndex].visibleFrame;
window.windowMove({
position: { x, y, }
});
}
setWindowsizeAndPosition({
window: pluginWindow,
x: targetWindowXPostion,
y: targetWindowYPosition,
screenIndex: 0,
});
const targetPluginName = sf.ui.proTools.windows.first.popupButtons.whoseTitle.startsWith('Plug-In Selector').first.value.invalidate().value;
const matchingPluginInfo = uadXpluginLookupArray.find(item => item.uadPluginName === targetPluginName);
const pluginWindowFrame = pluginWindow.frame;
const relativePresetButtonPosition = {
x: pluginWindowFrame.x + pluginWindowFrame.w * matchingPluginInfo.presetPositionXPercentage,
y: pluginWindowFrame.y + pluginWindowFrame.h * matchingPluginInfo.presetPositionYPercentage,
}
function copyUadSetting({ relativePresetButtonPosition }) {
sf.mouse.setPosition({ position: relativePresetButtonPosition });
sf.wait({ intervalMs: 200 });
sf.mouse.click({ position: relativePresetButtonPosition, });
sf.keyboard.press({
keys: "down",
repetitions: 3,
});
sf.keyboard.press({
keys: "return",
});
}
copyUadSetting({
relativePresetButtonPosition
});
const pluginMenuItems = sf.ui.proTools.windows.first.popupButtons.whoseTitle.startsWith("Plug-In Selector").first.popupMenuFetchAllItems().menuItems;
const menuPath = pluginMenuItems.find(mi => mi.element.isMenuChecked).path;
//Get the width to add to the end of the plugin name.
const pluginWidth = menuPath[2].match(/\(([^)]+)\)/)[0];
//Find the matching object in the
const matchingPluginObject = uadXpluginLookupArray.find(plugin => {
return plugin.uadPluginName === menuPath[2].split(" (")[0];
});
//Create the UADx pluing name
const uadxName = `${matchingPluginObject.uadXPluginName} ${pluginWidth}`;
//This is the path to the UADx plugin
const uadXPluginPath = [
menuPath[0],
menuPath[1],
uadxName
];
sf.ui.proTools.appActivateMainWindow();
const relativePasteButtonPosition = {
x: pluginWindowFrame.x + pluginWindowFrame.w * matchingPluginInfo.pastePositionXPercentage,
y: pluginWindowFrame.y + pluginWindowFrame.h * matchingPluginInfo.pastePositionYPercentage
}
function pasteUadx() {
//wait for plugin to appear
sf.ui.proTools.windows.whoseTitle.contains("Plug-in: UADx").first.elementWaitFor({
waitType: "Appear",
});
sf.mouse.click({
position: relativePasteButtonPosition,
});
}
function unlinkedMultiMono() {
/////MULTI MONO STUFF/////
const masterLinkUad = sf.ui.proTools.windows.whoseTitle.contains("Plug-in: UAD").first.buttons.whoseTitle.is("Master Link button");
const targetInsertSlot = sf.ui.proTools.windows.whoseTitle.contains("Plug-in: UAD").first.popupButtons.allItems[4].value.invalidate().value;
const linkStatus = masterLinkUad.first.value.invalidate().value;
const pluginWin = sf.ui.proTools.windows.whoseTitle.contains("Plug-in:").first;
//open multimono plugin instance
function convertMultiMonoUadToUadx() {
pluginWin.popupButtons.allItems[5].popupMenuSelect({
menuPath: uadXPluginPath,
});
}
//duplicate current track
function duplicateTrack() {
sf.ui.proTools.menuClick({
menuPath: ["Track", "Duplicate..."],
});
//Wait for Dialog
sf.ui.proTools.duplicateTracksDialog
//duplicate settings
sf.ui.proTools.trackDuplicateSelected({
duplicateActivePlaylist: false,
duplicateAlternatePlaylists: false,
duplicateAutomation: false,
duplicateGroupAssignments: false,
duplicateInserts: true,
duplicateSends: false,
insertAfterLastSelectedTrack: true,
numberOfDuplicates: 1
})
//Wait for dlg to disappear
sf.ui.proTools.duplicateTracksDialog.elementWaitFor({
waitType: "Disappear",
});
const isThereAnAlertWindow = sf.ui.proTools.windows.whoseDescription.is("alert").first.elementWaitFor({
timeout: 1000,
onError: "Continue",
}).success
if (isThereAnAlertWindow) {
sf.wait({ intervalMs: 200 });
sf.ui.proTools.windows.whoseDescription.is("alert").first.getElement("AXDefaultButton").elementClick();
}
//wait for main window become active
sf.wait({ intervalMs: 200 });
}
function openTargetInsertSlot() {
var currentInsertSlot = sf.ui.proTools.windows.whoseTitle.startsWith("Plug-in: UAD").first.popupButtons.allItems[4].value.invalidate().value;
const insertSlotsByLetter = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
var letter = currentInsertSlot;
var insertByNumber = insertSlotsByLetter.indexOf(letter) + 1;
sf.ui.proTools.selectedTrack.trackInsertToggleShow({
insertNumber: insertByNumber,
targetValue: "Enable",
waitForInsertWindow: true,
});
}
//L or R channel focused
//copy left channel
function focusLeftChannel() {
if (pluginWin.popupButtons.allItems[3].value.invalidate().value !== "L") {
pluginWin.popupButtons.allItems[3].popupMenuSelect({
menuPath: ["Left"],
});
}
}
//copy right channel
function focusRightChannel() {
if (pluginWin.popupButtons.allItems[3].value.invalidate().value !== "R") {
pluginWin.popupButtons.allItems[3].popupMenuSelect({
menuPath: ["Right"],
});
}
}
function selectTrackAbove() {
sf.ui.proTools.menuClick({
menuPath: ["Edit", "Selection", "Extend Edit Up"],
});
sf.ui.proTools.menuClick({
menuPath: ["Edit", "Selection", "Remove Edit from Bottom"],
});
}
function selectTrackBelow() {
sf.ui.proTools.menuClick({
menuPath: ["Edit", "Selection", "Extend Edit Down"],
});
sf.ui.proTools.menuClick({
menuPath: ["Edit", "Selection", "Remove Edit from Top"],
});
}
function deleteSelectedTrack() {
if (sf.ui.proTools.getMenuItem('Track', 'Delete...').exists) {
sf.ui.proTools.getMenuItem('Track', 'Delete...').elementClick();
sf.ui.proTools.confirmationDialog.invalidate().elementWaitFor();
sf.ui.proTools.confirmationDialog.buttons.whoseTitle.is('Delete').first.elementClick();
} else if (sf.ui.proTools.getMenuItem('Track', 'Delete').exists) {
sf.ui.proTools.getMenuItem('Track', 'Delete').elementClick();
}
}
focusLeftChannel();
duplicateTrack();
openTargetInsertSlot();
focusLeftChannel();
copyUadSetting({
relativePresetButtonPosition
});
selectTrackAbove();
openTargetInsertSlot();
//launch UADx multimono instance
sf.ui.proTools.windows.whoseTitle.startsWith("Plug-in:").first.popupButtons.allItems[5].popupMenuSelect({
menuPath: uadXPluginPath,
});
sf.ui.proTools.windows.whoseTitle.contains("Plug-in:").first.buttons.whoseTitle.is("Master Link button").first.invalidate();
sf.ui.proTools.windows.whoseTitle.contains("Plug-in:").first.buttons.whoseTitle.is("Master Link button").first.elementClick();
pasteUadx();
selectTrackBelow();
openTargetInsertSlot();
focusRightChannel();
copyUadSetting({
relativePresetButtonPosition
});
selectTrackAbove();
openTargetInsertSlot();
focusRightChannel();
pasteUadx();
//store originally selected track name
const selectedTracks = sf.ui.proTools.selectedTrackNames
selectTrackBelow();
deleteSelectedTrack();
// select original track name
sf.ui.proTools.trackSelectByName({ names: selectedTracks })
}
//load UADx Version
if (menuPath[0] === "multi-mono plug-in" && sf.ui.proTools.windows.whoseTitle.contains("Plug-in: UAD").first.buttons.whoseTitle.is("Master Link button").first.value.invalidate().value === "") {
//selects multi-mono instance unlinked
unlinkedMultiMono();
} else if (menuPath[0] === "multi-mono plug-in") {
//selects multi-mono instance
sf.ui.proTools.windows.whoseTitle.startsWith("Plug-in:").first.popupButtons.allItems[5].popupMenuSelect({
menuPath: uadXPluginPath,
});
pasteUadx();
} else {
//selects multichannel or individual instance
sf.ui.proTools.windows.whoseTitle.startsWith("Plug-in:").first.popupButtons.allItems[4].popupMenuSelect({
menuPath: uadXPluginPath,
});
pasteUadx();
}
//Close plugin window
sf.ui.proTools.menuClick({
menuPath: ["Window", "Hide All Floating Windows"],
targetValue: "Enable",
});
}
//MAIN FUNCTION
function main() {
sf.ui.proTools.appActivateMainWindow();
sf.ui.proTools.mainWindow.invalidate();
var conversionType = sf.interaction.displayDialog({
buttons: ["Single Instance", "Whole Track", "Entire Session"],
prompt: "What UAD to UADx conversion type do you want?",
title: "Tristan Hoogland's UAD to UADx Converter",
}).button;
if (conversionType === "Single Instance") {
convertSingleInstance();
} else if (conversionType === "Whole Track") {
convertWholeTrack();
} else if (conversionType === "Entire Session") {
convertEntireSession();
}
function convertSingleInstance() {
ensureEditWindowIsFocused();
ensureTempoRulerIsVisible();
//get open plugin focused
function focusOpenPlugin() {
var frontPluginWin = sf.ui.proTools.getFloatingWindowWithTitleStartingWith("Plug-in: UAD").invalidate();
var pluginTrack = frontPluginWin.popupButtons.whoseTitle.is("Track Selector").first.value.invalidate().value
sf.ui.proTools.trackSelectByName({ names: [pluginTrack] });
}
try {
focusOpenPlugin();
convertUadToUadx();
} catch (error) {
var selectPlugin = sf.interaction.displayDialog({
buttons: ["OK", "Cancel"],
cancelButton: "Cancel",
prompt: "Please launch a compatiable UAD<>UADx insert then press OK to proceed.",
title: "Tristan Hoogland's UAD to UADx Converter",
}).button;
if (selectPlugin === "OK") {
convertSingleInstance();
}
}
}
function convertWholeTrack() {
ensureEditWindowIsFocused();
hideAllFloatingWindows();
ensureTempoRulerIsVisible();
function doForAllSelectedTracks(action) {
var originallySelectedTrackNames = sf.ui.proTools.selectedTrackNames;
try {
sf.ui.proTools.selectedTrackHeaders.forEach(track => {
track.trackSelect();
action(track);
});
}
finally {
sf.ui.proTools.trackSelectByName({ names: originallySelectedTrackNames });
}
}
/**@param {AxPtTrackHeader} track */
function trackFunc(track) {
loadFirstUadPlug();
}
doForAllSelectedTracks(trackFunc);
}
function convertEntireSession() {
sf.interaction.displayDialog({
buttons: ["Yes", "Cancel"],
cancelButton: "Cancel",
defaultButton: "Yes",
prompt: "You are about to find and replace ALL active instances of UAD with UADx compatiable plugins. This may take some time." + ("\n") + ("\n") + "Are you sure you want to continue?",
title: "Tristan Hoogland's UAD to UADx Converter",
}).button;
ensureEditWindowIsFocused();
//save current version before proceeding
saveSession();
saveAsUadx();
hideAllFloatingWindows();
ensureTempoRulerIsVisible();
findAllUadTracks();
function doForAllSelectedTracks(action) {
var originallySelectedTrackNames = sf.ui.proTools.selectedTrackNames;
try {
sf.ui.proTools.selectedTrackHeaders.forEach(track => {
track.trackSelect();
action(track);
});
}
finally {
sf.ui.proTools.trackSelectByName({ names: originallySelectedTrackNames });
}
}
/**@param {AxPtTrackHeader} track */
function trackFunc(track) {
loadFirstUadPlug();
}
doForAllSelectedTracks(trackFunc);
//finally deselect all tracks
sf.ui.proTools.trackDeselectAll();
// log("UAD to UADx conversion complete!");
saveSession();
var reopenSession = sf.interaction.displayDialog({
buttons: ["Yes", "No"],
cancelButton: "No",
defaultButton: "No",
prompt: "UAD to UADx conversion complete!" + ("\n") + ("\n") + "Would you like to close and reopen the session?",
title: "Tristan Hoogland's UAD to UADx Converter",
}).button;
if (reopenSession === "Yes") {
sf.ui.proTools.menuClick({
menuPath: ["File", "Close Session"],
});
if (sf.ui.proTools.confirmationDialog.exists) {
sf.ui.proTools.confirmationDialog.elementWaitFor();
sf.ui.proTools.confirmationDialog.buttons.whoseTitle.is("Save").first.elementClick();
sf.ui.proTools.confirmationDialog.elementWaitFor({ waitType: "Disappear" });
}
//open most recent session
sf.keyboard.press({
keys: "cmd+shift+o",
});
}
}
sf.interaction.displayDialog({
prompt: "UAD to UADx Conversion complete!"
})
}
main();
Links
User UID: vJpolCkKEqVNlE3Na2RPrn26YVR2
Feedback Key: sffeedback:vJpolCkKEqVNlE3Na2RPrn26YVR2:-OjxUmtiC3xUBAVFnJCp
Feedback ZIP: Ah3EnJCVwwKGjzHDaBFdETwFvQGe//eJ0YCeOnDjBMelcPkYZ4qXkJHeiPs51RsDNIlFDkRFAEA++P4FqHEg9qzhmbPcYqUKKY00uMzGhWiXrqOuVUEd4FZ/7otD5R5s/34VreCbORFAYlgTrsZl18/t56lzyCjOmIfsYnCL4ot4ilcTykpOyTthRcYKRtpYng34S+SnMvrGqXPrYjycYE4CbXuxztgAjD+I9WzMv3OPW0aaZ39TFImDmnoVQrCMgwlinZGtPIKiDSdD90VGxA7ExUbXVFUsJFiH6sMI1gf39yu4rLOLg6AX/wZrl/Zc69ZUSFhraLZ17KM/0Ra/Fs+b3yy7Leqls/UX5lNW4Is=
Chad Wahlbrink @Chad2026-01-28 16:00:56.434ZHi there,
I believe this script is from the UAD to UADx Converter by @Tristan. Feel free to ask any questions related to this package in the package forum for this package here:
You can get to a Package's forum by selecting the package in your package list and then clicking the "Package Forum" Button

In reply toinfomvmntcreative_co⬆:Chad Wahlbrink @Chad2026-01-28 16:17:24.017ZNote that the error you were seeing indicates that Pro Tools may not have been running when you tried to run this script.
This script converts UAD Plug-ins on a selected track to their equivalent UADx versions. Currently, not all available UADx plugins are supported by this script, and it could use a bit of updating for the latest versions of Pro Tools (instances of "Plug-in" need to be changed to "Plugin" in PT 2024.10+).
Still, the concept of this script is great, and if you are savvy with code, you could update it yourself via the "Make Editable Copy" button for the script:

- TIn reply toinfomvmntcreative_co⬆:Tristan Hoogland @Tristan
Hey! I get a lot of requests to update this script, it's been on the to do list for months, but I've been absolutely slammed with work non stop for the past 12 months. Can't promise I'll fix it asap unfortunately, but when work next quietens down I'll be sure to update all my scripts (there are manyyyy)
Chad Wahlbrink @Chad2026-01-28 20:34:08.474ZNo worries, @Tristan!