Copy link to clipboard
Copied
Hi guys,
I'm working on a script to help standardize naming conventions in After Effects projects at work.
The script works on my PC, but not on my Mac- its throwing me "Unable to execute script at line 1. ) does not have a value" whenever i try to run it.
If any of you scripting wizards have any idea whatsoever of what could be wrong, I'd be forever grateful.
Copy link to clipboard
Copied
Would be helpful if you pretty-print the first line with the JSON polyfill, such that it is not a single huge line anymore and you can see where exactly the issue happens.
Copy link to clipboard
Copied
Hi, thanks for looking into this.
It's the minified version of json2, pretty-printed the whole thing looks like this:
"object" != typeof JSON && (JSON = {}),
function() {
"use strict";
var rx_one = /^[\],:{}\s]*$/,
rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rx_four = /(?:^|:|,)(?:\s*\[)+/g,
rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap, indent, meta, rep;
function f(t) {
return t < 10 ? "0" + t : t
}
function this_value() {
return this.valueOf()
}
function quote(t) {
return rx_escapable.lastIndex = 0, rx_escapable.test(t) ? '"' + t.replace(rx_escapable, function(t) {
var e = meta[t];
return "string" == typeof e ? e : "\\u" + ("0000" + t.charCodeAt(0).toString(16)).slice(-4)
}) + '"' : '"' + t + '"'
}
function str(t, e) {
var r, n, o, u, f, a = gap,
i = e[t];
switch (i && "object" == typeof i && "function" == typeof i.toJSON && (i = i.toJSON(t)), "function" == typeof rep && (i = rep.call(e, t, i)), typeof i) {
case "string":
return quote(i);
case "number":
return isFinite(i) ? String(i) : "null";
case "boolean":
case "null":
return String(i);
case "object":
if (!i) return "null";
if (gap += indent, f = [], "[object Array]" === Object.prototype.toString.apply(i)) {
for (u = i.length, r = 0; r < u; r += 1) f[r] = str(r, i) || "null";
return o = 0 === f.length ? "[]" : gap ? "[\n" + gap + f.join(",\n" + gap) + "\n" + a + "]" : "[" + f.join(",") + "]", gap = a, o
}
if (rep && "object" == typeof rep)
for (u = rep.length, r = 0; r < u; r += 1) "string" == typeof rep[r] && (o = str(n = rep[r], i)) && f.push(quote(n) + (gap ? ": " : ":") + o);
else
for (n in i) Object.prototype.hasOwnProperty.call(i, n) && (o = str(n, i)) && f.push(quote(n) + (gap ? ": " : ":") + o);
return o = 0 === f.length ? "{}" : gap ? "{\n" + gap + f.join(",\n" + gap) + "\n" + a + "}" : "{" + f.join(",") + "}", gap = a, o
}
}
"function" != typeof Date.prototype.toJSON && (Date.prototype.toJSON = function() {
return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
}, Boolean.prototype.toJSON = this_value, Number.prototype.toJSON = this_value, String.prototype.toJSON = this_value), "function" != typeof JSON.stringify && (meta = {
"\b": "\\b",
"\t": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
'"': '\\"',
"\\": "\\\\"
}, JSON.stringify = function(t, e, r) {
var n;
if (indent = gap = "", "number" == typeof r)
for (n = 0; n < r; n += 1) indent += " ";
else "string" == typeof r && (indent = r);
if ((rep = e) && "function" != typeof e && ("object" != typeof e || "number" != typeof e.length)) throw new Error("JSON.stringify");
return str("", {
"": t
})
}), "function" != typeof JSON.parse && (JSON.parse = function(text, reviver) {
var j;
function walk(t, e) {
var r, n, o = t[e];
if (o && "object" == typeof o)
for (r in o) Object.prototype.hasOwnProperty.call(o, r) && (void 0 !== (n = walk(o, r)) ? o[r] = n : delete o[r]);
return reviver.call(t, e, o)
}
if (text = String(text), rx_dangerous.lastIndex = 0, rx_dangerous.test(text) && (text = text.replace(rx_dangerous, function(t) {
return "\\u" + ("0000" + t.charCodeAt(0).toString(16)).slice(-4)
})), rx_one.test(text.replace(rx_two, "@").replace(rx_three, "]").replace(rx_four, ""))) return j = eval("(" + text + ")"), "function" == typeof reviver ? walk({
"": j
}, "") : j;
throw new SyntaxError("JSON.parse")
})
}();
var panelGlobal = this;
var scriptUIPanel = (panelGlobal instanceof Panel) ? panelGlobal : new Window("palette");
if (!(panelGlobal instanceof Panel)) scriptUIPanel.text = "PerfectCompNamer";
var prefixInput, clientInput, projectInput, placementInput, dimensionsWidth, dimensionsHeight, lengthInput, languageInput, suffixInput;
var prefixCheckbox, clientCheckbox, projectCheckbox, placementCheckbox, dimensionsCheckbox, lengthCheckbox, languageCheckbox, suffixCheckbox;
// Function to save the inputs to a JSON file
function saveInputsToFile(inputs) {
var file = new File(Folder.userData.fullName + "/CompositionNamingInputs.json");
file.open("w");
file.write(JSON.stringify(inputs));
file.close();
}
// Function to load the inputs from a JSON file
function loadInputsFromFile() {
var file = new File(Folder.userData.fullName + "/CompositionNamingInputs.json");
if (file.exists) {
file.open("r");
var content = file.read();
file.close();
return JSON.parse(content);
}
return {
prefix: "",
prefixCheckbox: false,
client: "",
clientCheckbox: false,
project: "",
projectCheckbox: false,
placement: "",
placementCheckbox: false,
dimensionsWidth: "",
dimensionsHeight: "",
dimensionsCheckbox: false,
length: "",
lengthCheckbox: false,
language: "",
languageCheckbox: false,
suffix: "",
suffixCheckbox: false,
};
}
// Load the last used inputs
var lastInputs = loadInputsFromFile();
// Function to update the preview panel
function updatePreview() {
var prefix = prefixCheckbox.value ? "_" + prefixInput.text : "";
var client = clientCheckbox.value ? "_" + clientInput.text : "";
var projectDelimiter = clientCheckbox.value ? hyphenDelimiter : underscoreDelimiter;
var project = projectCheckbox.value ? projectDelimiter + projectInput.text : "";
var placement = placementCheckbox.value ? "_" + placementInput.text : "";
var aspectRatio = aspectRatioCheckbox.value ? "_" + aspectRatioInput.text : "";
var length = lengthCheckbox.value ? "_" + lengthInput.text + "s" : "";
var language = languageCheckbox.value ? "-" + languageInput.text : "";
var suffix = suffixCheckbox.value ? "_" + suffixInput.text : "";
var compositionName = prefix + client + project + placement + aspectRatio + length + language + suffix;
compositionName = cleanUpCompositionName(compositionName);
// Update the preview text in the panel
previewText.text = compositionName;
}
// Function to update the preview on checkbox change
function updatePreviewOnCheckboxChange() {
updatePreview();
}
// SCRIPTUIPANEL
// =============
scriptUIPanel.orientation = "column";
scriptUIPanel.alignChildren = ["center","top"];
scriptUIPanel.spacing = 10;
scriptUIPanel.margins = 16;
// NAMINGPROPERTIES
// ================
var namingProperties = scriptUIPanel.add("panel", undefined, undefined, {name: "namingProperties"});
namingProperties.text = "Naming Properties";
namingProperties.orientation = "column";
namingProperties.alignChildren = ["left","top"];
namingProperties.spacing = 10;
namingProperties.margins = 10;
// PREFIXGROUP
// ===========
var prefixGroup = namingProperties.add("group", undefined, {name: "prefixGroup"});
prefixGroup.orientation = "row";
prefixGroup.alignChildren = ["left","center"];
prefixGroup.spacing = 10;
prefixGroup.margins = 0;
var prefixCheckbox = prefixGroup.add("checkbox", undefined, undefined, {name: "prefixCheckbox"});
prefixCheckbox.value = lastInputs.prefixCheckbox;
// prefixWrapper
// ======
var prefixWrapper = prefixGroup.add("group", undefined, {name: "prefixWrapper"});
prefixWrapper.preferredSize.width = 80;
prefixWrapper.orientation = "row";
prefixWrapper.alignChildren = ["left","center"];
prefixWrapper.spacing = 10;
prefixWrapper.margins = 0;
var prefixPropertyText = prefixWrapper.add("statictext", undefined, undefined, {name: "prefixWrapper"});
prefixPropertyText.text = "Prefix:";
// PREFIXGROUP
// ===========
var prefixInput = prefixGroup.add('edittext {properties: {name: "prefixInput"}}');
prefixInput.text = lastInputs.prefix;
prefixInput.preferredSize.width = 120;
// CLIENTGROUP
// ===========
var clientGroup = namingProperties.add("group", undefined, {name: "clientGroup"});
clientGroup.orientation = "row";
clientGroup.alignChildren = ["left","center"];
clientGroup.spacing = 10;
clientGroup.margins = 0;
var clientCheckbox = clientGroup.add("checkbox", undefined, undefined, {name: "clientCheckbox"});
clientCheckbox.value = lastInputs.clientCheckbox;
// CLIENTWRAPPER
// =============
var clientWrapper = clientGroup.add("group", undefined, {name: "clientWrapper"});
clientWrapper.preferredSize.width = 80;
clientWrapper.orientation = "row";
clientWrapper.alignChildren = ["left","center"];
clientWrapper.spacing = 10;
clientWrapper.margins = 0;
var clientPropertyText = clientWrapper.add("statictext", undefined, undefined, {name: "clientPropertyText"});
clientPropertyText.text = "Client:";
// CLIENTGROUP
// ===========
var clientInput = clientGroup.add('edittext {properties: {name: "clientInput"}}');
clientInput.text = lastInputs.client;
clientInput.preferredSize.width = 120;
// PROJECTGROUP
// ============
var projectGroup = namingProperties.add("group", undefined, {name: "projectGroup"});
projectGroup.orientation = "row";
projectGroup.alignChildren = ["left","center"];
projectGroup.spacing = 10;
projectGroup.margins = 0;
var projectCheckbox = projectGroup.add("checkbox", undefined, undefined, {name: "projectCheckbox"});
projectCheckbox.value = lastInputs.projectCheckbox;
// PROJECTWRAPPER
// ==============
var projectWrapper = projectGroup.add("group", undefined, {name: "projectWrapper"});
projectWrapper.preferredSize.width = 80;
projectWrapper.orientation = "row";
projectWrapper.alignChildren = ["left","center"];
projectWrapper.spacing = 10;
projectWrapper.margins = 0;
var projectPropertyText = projectWrapper.add("statictext", undefined, undefined, {name: "projectPropertyText"});
projectPropertyText.text = "Project:";
// PROJECTGROUP
// ============
var projectInput = projectGroup.add('edittext {properties: {name: "projectInput"}}');
projectInput.text = lastInputs.project;
projectInput.preferredSize.width = 120;
// PLACEMENTGROUP
// ==============
var placementGroup = namingProperties.add("group", undefined, {name: "placementGroup"});
placementGroup.orientation = "row";
placementGroup.alignChildren = ["left","center"];
placementGroup.spacing = 10;
placementGroup.margins = 0;
var placementCheckbox = placementGroup.add("checkbox", undefined, undefined, {name: "placementCheckbox"});
placementCheckbox.value = lastInputs.placementCheckbox;
// PLACEMENTWRAPPER
// ================
var placementWrapper = placementGroup.add("group", undefined, {name: "placementWrapper"});
placementWrapper.preferredSize.width = 80;
placementWrapper.orientation = "row";
placementWrapper.alignChildren = ["left","center"];
placementWrapper.spacing = 10;
placementWrapper.margins = 0;
var placementPropertyText = placementWrapper.add("statictext", undefined, undefined, {name: "placementPropertyText"});
placementPropertyText.text = "Placement:";
// PLACEMENTGROUP
// ==============
var placementInput = placementGroup.add('edittext {properties: {name: "placementInput"}}');
placementInput.text = lastInputs.placement;
placementInput.preferredSize.width = 120;
// DIMENSIONSGROUP
// ================
var dimensionsGroup = namingProperties.add("group", undefined, {name: "dimensionsGroup"});
dimensionsGroup.orientation = "row";
dimensionsGroup.alignChildren = ["left","center"];
dimensionsGroup.spacing = 10;
dimensionsGroup.margins = 0;
var dimensionsCheckbox = dimensionsGroup.add("checkbox", undefined, undefined, {name: "dimensionsCheckbox"});
dimensionsCheckbox.value = lastInputs.dimensionsCheckbox
// dimensionsWRAPPER
// ==================
var dimensionsWrapper = dimensionsGroup.add("group", undefined, {name: "dimensionsWrapper"});
dimensionsWrapper.preferredSize.width = 80;
dimensionsWrapper.orientation = "row";
dimensionsWrapper.alignChildren = ["left","center"];
dimensionsWrapper.spacing = 10;
dimensionsWrapper.margins = 0;
var dimensionsPropertyText = dimensionsWrapper.add("statictext", undefined, undefined, {name: "dimensionsPropertyText"});
dimensionsPropertyText.text = "Dimensions:";
// dimensionsGROUP
// ================
var dimensionsWidthInput = dimensionsGroup.add('edittext {properties: {name: "dimensionsWidthInput"}}');
dimensionsWidthInput.text = lastInputs.dimensionsWidth;
dimensionsWidthInput.preferredSize.width = 45;
var dimensionsDivider = dimensionsGroup.add("statictext", undefined, undefined, {name: "dimensionsDivider"});
dimensionsDivider.text = "x";
var dimensionsHeightInput = dimensionsGroup.add('edittext {properties: {name: "dimensionsHeightInput"}}');
dimensionsHeightInput.text = lastInputs.dimensionsHeight;
dimensionsHeightInput.preferredSize.width = 45;
// LENGTHGROUP
// ===========
var lengthGroup = namingProperties.add("group", undefined, {name: "lengthGroup"});
lengthGroup.orientation = "row";
lengthGroup.alignChildren = ["left","center"];
lengthGroup.spacing = 10;
lengthGroup.margins = 0;
var lengthCheckbox = lengthGroup.add("checkbox", undefined, undefined, {name: "lengthCheckbox"});
lengthCheckbox.value = lastInputs.lengthCheckbox;
// LENGTHWRAPPER
// =============
var lengthWrapper = lengthGroup.add("group", undefined, {name: "lengthWrapper"});
lengthWrapper.preferredSize.width = 80;
lengthWrapper.orientation = "row";
lengthWrapper.alignChildren = ["left","center"];
lengthWrapper.spacing = 10;
lengthWrapper.margins = 0;
var lengthPropertyText = lengthWrapper.add("statictext", undefined, undefined, {name: "lengthPropertyText"});
lengthPropertyText.text = "Length:";
// LENGTHGROUP
// ===========
var lengthInput = lengthGroup.add('edittext {properties: {name: "lengthInput"}}');
lengthInput.text = lastInputs.length;
lengthInput.preferredSize.width = 120;
// LANGUAGEGROUP
// =============
var languageGroup = namingProperties.add("group", undefined, {name: "languageGroup"});
languageGroup.orientation = "row";
languageGroup.alignChildren = ["left","center"];
languageGroup.spacing = 10;
languageGroup.margins = 0;
var languageCheckbox = languageGroup.add("checkbox", undefined, undefined, {name: "languageCheckbox"});
languageCheckbox.value = lastInputs.languageCheckbox;
// LANGUAGEWRAPPER
// ===============
var languageWrapper = languageGroup.add("group", undefined, {name: "languageWrapper"});
languageWrapper.preferredSize.width = 80;
languageWrapper.orientation = "row";
languageWrapper.alignChildren = ["left","center"];
languageWrapper.spacing = 10;
languageWrapper.margins = 0;
var languagePropertyText = languageWrapper.add("statictext", undefined, undefined, {name: "languagePropertyText"});
languagePropertyText.text = "Language:";
// LANGUAGEGROUP
// =============
var languageInput = languageGroup.add('edittext {properties: {name: "languageInput"}}');
languageInput.text = lastInputs.language;
languageInput.preferredSize.width = 120;
// SUFFIXGROUP
// ===========
var suffixGroup = namingProperties.add("group", undefined, {name: "suffixGroup"});
suffixGroup.orientation = "row";
suffixGroup.alignChildren = ["left","center"];
suffixGroup.spacing = 10;
suffixGroup.margins = 0;
var suffixCheckbox = suffixGroup.add("checkbox", undefined, undefined, {name: "suffixCheckbox"});
suffixCheckbox.value = lastInputs.suffixCheckbox
// SUFFIXWRAPPER
// =============
var suffixWrapper = suffixGroup.add("group", undefined, {name: "suffixWrapper"});
suffixWrapper.preferredSize.width = 80;
suffixWrapper.orientation = "row";
suffixWrapper.alignChildren = ["left","center"];
suffixWrapper.spacing = 10;
suffixWrapper.margins = 0;
var suffixPropertyText = suffixWrapper.add("statictext", undefined, undefined, {name: "suffixPropertyText"});
suffixPropertyText.text = "Suffix:";
// SUFFIXGROUP
// ===========
var suffixInput = suffixGroup.add('edittext {properties: {name: "suffixInput"}}');
suffixInput.text = lastInputs.suffix;
suffixInput.preferredSize.width = 120;
// PREVIEWPANEL
// ============
var previewPanel = scriptUIPanel.add("panel", undefined, undefined, {name: "previewPanel"});
previewPanel.text = "Name Preview";
previewPanel.preferredSize.width = 260;
previewPanel.orientation = "column";
previewPanel.alignChildren = ["left","top"];
previewPanel.spacing = 10;
previewPanel.margins = 10;
var previewText = previewPanel.add("statictext", undefined, undefined, {name: "previewText"});
previewText.text = "StaticText";
previewText.preferredSize.width = 240;
previewText.alignment = ["center","top"];
// buttonWrapper
// ======
var buttonWrapper = scriptUIPanel.add("group", undefined, {name: "buttonWrapper"});
buttonWrapper.orientation = "row";
buttonWrapper.alignChildren = ["left","center"];
buttonWrapper.spacing = 10;
buttonWrapper.margins = 0;
var applyButton = buttonWrapper.add("button", undefined, undefined, {name: "applyButton"});
applyButton.text = "Apply Naming";
var cancelButton = buttonWrapper.add("button", undefined, undefined, {name: "cancelButton"});
cancelButton.text = "Cancel";
// Functions to update the preview text
function updatePreviewText() {
var parts = [];
if (prefixCheckbox.value) parts.push(prefixInput.text);
if (clientCheckbox.value) parts.push(clientInput.text);
if (projectCheckbox.value) parts.push(projectInput.text);
if (placementCheckbox.value) parts.push(placementInput.text);
if (dimensionsCheckbox.value) parts.push(dimensionsWidthInput.text + 'x' + dimensionsHeightInput.text);
if (lengthCheckbox.value) parts.push(lengthInput.text);
if (languageCheckbox.value) parts.push(languageInput.text);
if (suffixCheckbox.value) parts.push(suffixInput.text);
previewText.text = parts.join('_');
}
// Event listener for text input changes to update the preview
prefixInput.onChanging = clientInput.onChanging = projectInput.onChanging = placementInput.onChanging =
dimensionsWidthInput.onChanging = dimensionsHeightInput.onChanging = lengthInput.onChanging = languageInput.onChanging = suffixInput.onChanging = updatePreviewText;
// Event listener for checkbox changes to update the preview
prefixCheckbox.onClick = clientCheckbox.onClick = projectCheckbox.onClick = placementCheckbox.onClick =
dimensionsCheckbox.onClick = lengthCheckbox.onClick = languageCheckbox.onClick = suffixCheckbox.onClick = updatePreviewText;
// Apply button click event
applyButton.onClick = function() {
var comp = app.project.activeItem;
if (comp instanceof CompItem) {
comp.name = previewText.text;
alert('Composition name changed to: ' + comp.name);
} else {
alert('Please select a composition to rename.');
}
// Save the inputs for next time, including checkbox states
var inputsToSave = {
prefix: prefixInput.text,
prefixCheckbox: prefixCheckbox.value,
client: clientInput.text,
clientCheckbox: clientCheckbox.value,
project: projectInput.text,
projectCheckbox: projectCheckbox.value,
placement: placementInput.text,
placementCheckbox: placementCheckbox.value,
dimensionsWidth: dimensionsWidthInput.text,
dimensionsHeight: dimensionsHeightInput.text,
dimensionsCheckbox: dimensionsCheckbox.value,
length: lengthInput.text,
lengthCheckbox: lengthCheckbox.value,
language: languageInput.text,
languageCheckbox: languageCheckbox.value,
suffix: suffixInput.text,
suffixCheckbox: suffixCheckbox.value,
};
saveInputsToFile(inputsToSave);
};
// Cancel button click event
cancelButton.onClick = function() {
scriptUIPanel.close();
};
// Update the preview text initially
updatePreviewText();
scriptUIPanel.show();
Copy link to clipboard
Copied
... and does the "Unable to execute script at line 1." now show a different line number with that version? If so, which line of code is it? And do you get any error (and for which line) if you remove the JSON implementation from the code completely?
The first step to solve the problem is to figure out at which command it fails exactly.
Copy link to clipboard
Copied
I don't exactly know what's wrong with your code, but the "userData.fullName" seems dangerous to me.
I've had a similar way for my script and it stopped working for a user who doesn't have English set to the default language on the system.
I've since solved it by always using "fsName.replace(/%20/g, " ")". But I might be digressing.
Get ready! An upgraded Adobe Community experience is coming in January.
Learn more