Thank you, I did come to that conclusion, however I couldn't get the recursive code to correctly add the layer sets into the effects set. Perhaps the temp layer was active when it shouldn't be, I ran out of steam...
Does this work?
(function () {
try {
var inputFolder = Folder.selectDialog("Select the input folder:");
if (inputFolder === null) {
// alert('Script cancelled!');
return;
}
var fileList = inputFolder.getFiles(/\.(tif|tiff)$/i);
fileList.sort().reverse();
var validateEmptyList = (fileList.length > 0);
if (validateEmptyList === false) {
alert("Script cancelled as the input folder is empty!");
return;
}
var baseDoc = app.activeDocument.name;
var savedDisplayDialogs = app.displayDialogs;
app.displayDialogs = DialogModes.NO;
app.activeDocument.activeLayer = app.activeDocument.layers[0];
var effectsGroup = app.activeDocument.layerSets.add();
effectsGroup.name = "EFFECTS";
for (var i = 0; i < fileList.length; i++) {
open(fileList[i]);
dupeLayer("_temp", 5);
var maskName = app.activeDocument.name.replace(/\.[^\.]+$/, '').replace(/^.{5}/, '').replace(/\d{4}$/, '');
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
var tempGroup = effectsGroup.layerSets.add();
tempGroup.name = maskName;
blankMask();
applyMask(true);
removeTempLayer();
}
app.activeDocument.activeLayer = app.activeDocument.layers[0];
app.displayDialogs = savedDisplayDialogs;
app.beep();
} catch (err) {
alert("An unexpected error has occurred!");
}
////// FUNCTIONS /////
function removeTempLayer() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var list = new ActionList();
var reference = new ActionReference();
reference.putName(s2t("layer"), "_temp");
descriptor.putReference(s2t("null"), reference);
list.putInteger(373);
descriptor.putList(s2t("layerID"), list);
executeAction(s2t("delete"), descriptor, DialogModes.NO);
}
function applyMask(preserveTransparency) {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var descriptor2 = new ActionDescriptor();
var reference = new ActionReference();
reference.putEnumerated(s2t("channel"), s2t("channel"), s2t("RGB"));
reference.putName(s2t("layer"), "_temp");
descriptor2.putReference(s2t("to"), reference);
descriptor2.putBoolean(s2t("preserveTransparency"), preserveTransparency);
descriptor.putObject(s2t("with"), s2t("calculation"), descriptor2);
executeAction(s2t("applyImageEvent"), descriptor, DialogModes.NO);
}
function blankMask() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
descriptor.putClass(s2t("new"), s2t("channel"));
reference.putEnumerated(s2t("channel"), s2t("channel"), s2t("mask"));
descriptor.putReference(s2t("at"), reference);
descriptor.putEnumerated(s2t("using"), s2t("userMaskEnabled"), s2t("revealAll"));
executeAction(s2t("make"), descriptor, DialogModes.NO);
}
function dupeLayer(name2, version) {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
var reference2 = new ActionReference();
reference.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
descriptor.putReference(s2t("null"), reference);
reference2.putName(s2t("document"), baseDoc);
descriptor.putReference(s2t("to"), reference2);
descriptor.putString(s2t("name"), name2);
descriptor.putInteger(s2t("version"), version);
executeAction(s2t("duplicate"), descriptor, DialogModes.NO);
}
}());