Skip to main content
Participant
October 18, 2023
Question

Script works on Windows but not Mac: Unable to execute script at line 1. ) does not have a value

  • October 18, 2023
  • 1 reply
  • 793 views

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.


"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(gap="",indent="","number"==typeof r)for(n=0;n<r;n+=1)indent+=" ";else"string"==typeof r&&(indent=r);if(rep=e,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 enableDisableEdittext(checkbox, edittext) {
    edittext.enabled = checkbox.value;
  }
 

// 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;
    enableDisableEdittext(prefixCheckbox, prefixInput);

// 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;
    enableDisableEdittext(clientCheckbox, clientInput);

// 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;
    enableDisableEdittext(projectCheckbox, projectInput);

// 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;
    enableDisableEdittext(placementCheckbox, placementInput);

// 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;
    enableDisableEdittext(dimensionsCheckbox, dimensionsWidthInput);
   

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;
    enableDisableEdittext(dimensionsCheckbox, dimensionsHeightInput);
   


// 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;
    enableDisableEdittext(lengthCheckbox, lengthInput);


// 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;
    enableDisableEdittext(languageCheckbox, languageInput);

// 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;
    enableDisableEdittext(suffixCheckbox, suffixInput);

// PREVIEWPANEL
// ============
var previewPanel = scriptUIPanel.add("panel", undefined, undefined, {name: "previewPanel"});
    previewPanel.text = "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";    


    function updatePreviewText() {
        var parts = [];
   
        if (prefixCheckbox.value && prefixInput.text !== '') parts.push(prefixInput.text);
   
        // Check if both clientCheckbox and projectCheckbox are checked
        if (clientCheckbox.value && projectCheckbox.value) {
            if (clientInput.text !== '' && projectInput.text !== '') {
                parts.push(clientInput.text + '-' + projectInput.text);
            } else {
                if (clientInput.text !== '') parts.push(clientInput.text);
                if (projectInput.text !== '') parts.push(projectInput.text);
            }
        } else {
            if (clientCheckbox.value && clientInput.text !== '') parts.push(clientInput.text);
            if (projectCheckbox.value && projectInput.text !== '') parts.push(projectInput.text);
        }
   
        if (placementCheckbox.value && placementInput.text !== '') parts.push(placementInput.text);
        if (dimensionsCheckbox.value && dimensionsWidthInput.text !== '' && dimensionsHeightInput.text !== '') parts.push(dimensionsWidthInput.text + 'x' + dimensionsHeightInput.text);
        if (lengthCheckbox.value && lengthInput.text !== '') parts.push(lengthInput.text + 's');
   
        // Add the language part with a '-' delimiter if preceded by other inputs
        if (languageCheckbox.value && languageInput.text !== '') {
            if (parts.length > 0) {
                parts.push('-' + languageInput.text);
            } else {
                parts.push(languageInput.text);
            }
        }
   
        if (suffixCheckbox.value && suffixInput.text !== '') parts.push(suffixInput.text);
   
        previewText.text = parts.join('_').replace(/_-/, '-');
    }




// 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;
 
// Event listener for checkbox changes to enable/disable edittext fields
prefixCheckbox.onClick = function() {
    enableDisableEdittext(prefixCheckbox, prefixInput);
    updatePreviewText();
  };
  clientCheckbox.onClick = function() {
    enableDisableEdittext(clientCheckbox, clientInput);
    updatePreviewText();
  };
  projectCheckbox.onClick = function() {
    enableDisableEdittext(projectCheckbox, projectInput);
    updatePreviewText();
  };
  placementCheckbox.onClick = function() {
    enableDisableEdittext(placementCheckbox, placementInput);
    updatePreviewText();
  };
  dimensionsCheckbox.onClick = function() {
    enableDisableEdittext(dimensionsCheckbox, dimensionsWidthInput);
    enableDisableEdittext(dimensionsCheckbox, dimensionsHeightInput);
    updatePreviewText();
  };
  lengthCheckbox.onClick = function() {
    enableDisableEdittext(lengthCheckbox, lengthInput);
    updatePreviewText();
  };
  languageCheckbox.onClick = function() {
    enableDisableEdittext(languageCheckbox, languageInput);
    updatePreviewText();
  };
  suffixCheckbox.onClick = function() {
    enableDisableEdittext(suffixCheckbox, suffixInput);
    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();






This topic has been closed for replies.

1 reply

Mathias Moehl
Community Expert
Community Expert
October 20, 2023

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.

 

Mathias Möhl - Developer of tools like BeatEdit and Automation Blocks for Premiere Pro and After Effects
LeauxPainAuthor
Participant
October 20, 2023

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();







Mathias Moehl
Community Expert
Community Expert
October 20, 2023

... 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.

Mathias Möhl - Developer of tools like BeatEdit and Automation Blocks for Premiere Pro and After Effects