Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

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

New Here ,
Oct 18, 2023 Oct 18, 2023

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






TOPICS
Scripting
820
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 20, 2023 Oct 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
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 20, 2023 Oct 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();







Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 20, 2023 Oct 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
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Nov 03, 2023 Nov 03, 2023
LATEST

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.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines