This slightly modified version of the original script will allow the user to select multiple files in the standard Photoshop open dialog to create the stack:
/*
Selected files to smart object layer comps.jsx
https://community.adobe.com/t5/photoshop-ecosystem-discussions/script-to-create-smart-object-with-layercomps-from-selected-imageds-in-bridge/td-p/12760410
Stephen Marsh, v1.0
*/
#target photoshop
(function () {
var savedDisplayDialogs = app.displayDialogs;
app.displayDialogs = DialogModes.NO;
var origUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
var inputFiles = File.openDialog("Please select the files to stack:", Multiselect = true);
if (inputFiles === null) {
app.beep();
return;
}
// inputFiles.sort().reverse;
inputFiles.sort();
app.displayDialogs = DialogModes.NO;
var baseDoc = open(inputFiles[0]);
var baseDoc = app.activeDocument;
baseDoc.flatten();
baseDoc.duplicate("Stacker", false);
baseDoc.close(SaveOptions.DONOTSAVECHANGES);
for (var i = 0; i < inputFiles.length; i++) {
placeFile(new File(inputFiles[i]), true, 0, 0);
}
app.activeDocument.activeLayer = app.activeDocument.backgroundLayer;
app.activeDocument.activeLayer.remove();
revealAll();
//align2SelectAll('AdCH');
//align2SelectAll('AdCV');
app.runMenuItem(stringIDToTypeID("selectAllLayers"));
createSmartObject();
app.activeDocument.activeLayer.name = 'Layer Comp Stack';
app.runMenuItem(stringIDToTypeID('placedLayerEditContents'));
for (var i = 0; i < app.activeDocument.layers.length; i++) {
for (var j = 0; j < app.activeDocument.layers.length; j++) {
app.activeDocument.layers[j].visible = false;
}
var layerIndex = i;
app.activeDocument.layers[layerIndex].visible = true;
var compName = app.activeDocument.layers[layerIndex].name;
app.activeDocument.layerComps.add(compName, undefined, true, false, true, true);
// Need to add a close step that actually saves the layer comps into the PSB!
var idsave = stringIDToTypeID( "save" );
executeAction(idsave, undefined, DialogModes.NO);
}
//app.runMenuItem(stringIDToTypeID("selectAllLayers"));
//reverseLayerStack();
app.beep();
app.displayDialogs = savedDisplayDialogs;
app.preferences.rulerUnits = origUnits;
// Functions
function revealAll() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
executeAction(s2t('revealAll'), descriptor, DialogModes.NO);
}
function createSmartObject() {
try {
var id325 = stringIDToTypeID("newPlacedLayer");
executeAction(id325, undefined, DialogModes.NO);
} catch (e) {
alert("Error: Failed to make smart object " + e)
}
}
function placeFile(null2, linked, horizontal, vertical) {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var AD = new ActionDescriptor();
AD.putInteger(s2t("ID"), 1);
AD.putPath(s2t("null"), null2);
AD.putBoolean(s2t("linked"), linked); // false for embedded
AD.putEnumerated(s2t("freeTransformCenterState"), s2t("quadCenterState"), s2t("QCSAverage"));
AD.putUnitDouble(s2t("horizontal"), s2t("pixelsUnit"), horizontal);
AD.putUnitDouble(s2t("vertical"), s2t("pixelsUnit"), vertical);
AD.putObject(s2t("offset"), s2t("offset"), AD);
executeAction(s2t("placeEvent"), AD, DialogModes.NO);
}
function reverseLayerStack() {
var idreverse = stringIDToTypeID("reverse");
var desc4653 = new ActionDescriptor();
var idnull = stringIDToTypeID("null");
var ref2335 = new ActionReference();
var idlayer = stringIDToTypeID("layer");
var idordinal = stringIDToTypeID("ordinal");
var idtargetEnum = stringIDToTypeID("targetEnum");
ref2335.putEnumerated(idlayer, idordinal, idtargetEnum);
desc4653.putReference(idnull, ref2335);
executeAction(idreverse, desc4653, DialogModes.NO);
}
function align2SelectAll(method) {
/*
AdLf = Align Left
AdRg = Align Right
AdCH = Align Centre Horizontal
AdTp = Align Top
AdBt = Align Bottom
AdCV = Align Centre Vertical
*/
app.activeDocument.selection.selectAll();
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
desc.putReference(charIDToTypeID("null"), ref);
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID(method));
try {
executeAction(charIDToTypeID("Algn"), desc, DialogModes.NO);
} catch (e) {}
app.activeDocument.selection.deselect();
}
})();