Copy link to clipboard
Copied
Hi all,
I wanted to share a super simple script that creates a checkbox for removing Channels, Paths, Colour Pickers and/or LayerComps allowing a simple interface in case you don't always wish to remove all.
Can someone test on Windows for me
#target photoshop
//Created by Dale R, for public and commercial use
//global variables
var w = new Window('dialog', 'Batch Remove');
w.preferredSize = [50,100];
w.alignChildren = "left"; // align checkboxes to left
// creating buttons and checkboxes
var ck1 = w.add("CheckBox { text: 'Paths', value: false}");
var ck2 = w.add("CheckBox { text: 'Channels', value: false}");
var ck3 = w.add("CheckBox { text: 'Layer Comps', value: false}");
var ck4 = w.add("CheckBox { text: 'Colour Samplers', value: false}");
var p = w.add ('panel', undefined)
p.alignment = "center";
var btn = p.add('button', undefined, 'Run')
p.add ("button", undefined, "Cancel")
btn.onClick = function () {
w.close();
if (ck1.value == true) {
app.activeDocument.pathItems.removeAll();
}
if (ck2.value == true) {
app.activeDocument.channels.removeAll();
}
if (ck3.value == true) {
app.activeDocument.layerComps.removeAll();
}
if (ck4.value == true) {
app.activeDocument.colorSamplers.removeAll();
}
}
w.center();
w.show();
Copy link to clipboard
Copied
Is there a way that you can run this script (or a version of it) within an action and selecting certain items but without being promted with the dialogue box every time for each document? I would find it useful to create an action using this script and be able to batch process it over a whole folder of documents that all need paths and alpha channels removed. Thanks!
By @karlssonemil
The script was designed to be interactive with a GUI, intended for use on one active image at a time.
Yes, it is simple enough with a little scripting knowledge to extract the funtions and function calls that you wish to use into a new separate script without a GUI. The script can be recorded into an action for use with automate batch, or extra processing code can be added to the script so that a batch action is not required.
Which paths? Normal paths, clipping paths and/or work paths?
Which channels? Alpha channels and/or spot channels?
Copy link to clipboard
Copied
I would also love the option to run this without the GUI, is there any chance you could adjust the script so it just ticks all the options automatically? Thanks.
Copy link to clipboard
Copied
Which exact options?
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Here you go as requested, no GUI... I have not performed exhaustive testing, so use with care and let me know if edits are required... And please do use with care/caution, even more so when batching, the script is obviously "destructive" to non-pixel content and only intended for copies of non-working files.
/*
Batch Remove Items 2021 v1.jsx
Stephen Marsh, 2020
19th July 2021 - GUI removed upon request
!!! USE AT YOUR OWN RISK !!!
Based on:
Free script: Remove Selected
https://community.adobe.com/t5/photoshop/free-script-remove-selected/m-p/10104624
*/
#target photoshop
function removeStuff() {
// Remove all Layer Comps
app.activeDocument.layerComps.removeAll();
// Remove all Color Samplers
app.activeDocument.colorSamplers.removeAll();
// Remove all Alpha channels
removeAllAlphaChannelsNotSpot();
// Remove all Spot channels
removeAllSpotChannelsNotAlpha();
// Remove all Clipping Paths
removeAllClipPaths();
// Remove all Normal Paths
removeAllNormalPaths();
// Remove all Work Paths
removeAllWorkPaths();
// Remove all empty layers/groups
layrs2_DeleteEmptyLayers();
// Remove all photoshop:DocumentAncestors metadata
deleteDocumentAncestorsMetadata();
// Remove all XMP metadata
removeXMP();
// Remove all CRS metadata
removeCRSmeta();
// Remove all history snapshots
removeAllHistorySnapshots();
// Remove all horizontal guides
removeAllHorizontalGuides();
// Remove all vertical guides
removeAllVerticalGuides();
// Remove all invisible layers/sets
removeInvisibleLayers(doc);
//////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////
function removeAllHorizontalGuides() {
if (documents.length) {
var count = app.activeDocument.guides.length;
for (var a = count - 1; a >= 0; a--) {
if (app.activeDocument.guides[a].direction == Direction.HORIZONTAL) app.activeDocument.guides[a].remove();
}
}
}
function removeAllVerticalGuides() {
if (documents.length) {
var count = app.activeDocument.guides.length;
for (var a = count - 1; a >= 0; a--) {
if (app.activeDocument.guides[a].direction == Direction.VERTICAL) app.activeDocument.guides[a].remove();
}
}
}
function removeAllClipPaths() {
/* https://community.adobe.com/t5/photoshop/deleting-ps-paths-automatically/m-p/11060896 */
// Run for flattened image
if (app.activeDocument.activeLayer.isBackgroundLayer) {
// delete clipping paths
// https://wwwin.hilfdirselbst.ch/foren/Script_um_Pfade_zu_l%F6schen_P372902.html
// Note selected shape layers will be removed!
// Invisible selected shape layers will not be removed
// Deselected shape layers will not be removed
var myPath = app.activeDocument.pathItems;
for (n = myPath.length - 1; n >= 0; n--) {
var value = myPath[n];
aP = myPath[n];
if (aP.kind == "PathKind.CLIPPINGPATH") {
aP.remove();
}
}
}
// Run for layered image
else {
/* https://community.adobe.com/t5/photoshop/deleting-ps-paths-automatically/m-p/11060896 */
// Remove all paths except clipping paths & shape layer paths
// 2020, use it at your own risk;
if (app.documents.length > 0) {
////// deselect layers //////
var desc2 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
desc2.putReference(stringIDToTypeID("null"), ref1);
executeAction(stringIDToTypeID("selectNoLayers"), desc2, DialogModes.NO);
////// get paths //////
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var docDesc = executeActionGet(ref);
if (docDesc.hasKey(stringIDToTypeID("numberOfPaths")) === true) {
var theNumber = docDesc.getInteger(stringIDToTypeID("numberOfPaths"));
var theArray = new Array;
////// work through paths //////
for (var m = 0; m < theNumber + 1; m++) {
try {
var ref = new ActionReference();
ref.putIndex(stringIDToTypeID("path"), m);
var pathDesc = executeActionGet(ref);
var theName = pathDesc.getString(stringIDToTypeID("pathName"));
var theKind = pathDesc.getEnumerationValue(stringIDToTypeID("kind"));
var theIndex = pathDesc.getInteger(stringIDToTypeID("itemIndex"));
theArray.push([theName, theKind, theIndex]);
} catch (e) { }
};
////// delete //////
for (var n = theNumber - 1; n >= 0; n--) {
/* https://gist.github.com/codewings/725b91ae2c607d96f24e1cc1527b8217
phEnumNormalPath -> 1316121936 -> "NrmP" normalPath
phEnumWorkPath -> 1467116368 -> "WrkP" workPathIndex
phClassClippingPath -> 1131180112 -> "ClpP" clippingPathEPS */
if (theArray[n][1] == 1131180112) {
var desc4 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putIndex(stringIDToTypeID("path"), theArray[n][2]);
desc4.putReference(stringIDToTypeID("null"), ref2);
executeAction(stringIDToTypeID("delete"), desc4, DialogModes.NO);
};
};
};
};
}
}
function removeAllNormalPaths() {
/* https://community.adobe.com/t5/photoshop/deleting-ps-paths-automatically/m-p/11060896 */
// Run for flattened image
if (app.activeDocument.activeLayer.isBackgroundLayer) {
// delete normal paths
// https://wwwin.hilfdirselbst.ch/foren/Script_um_Pfade_zu_l%F6schen_P372902.html
// Note selected shape layers will be removed!
// Invisible selected shape layers will not be removed
// Deselected shape layers will not be removed
var myPath = app.activeDocument.pathItems;
for (n = myPath.length - 1; n >= 0; n--) {
var value = myPath[n];
aP = myPath[n];
if (aP.kind == "PathKind.NORMALPATH") {
aP.remove()
}
}
}
// Run for layered image
else {
/* https://community.adobe.com/t5/photoshop/deleting-ps-paths-automatically/m-p/11060896 */
// Remove all normal paths
// 2020, use it at your own risk;
if (app.documents.length > 0) {
////// deselect layers //////
var desc2 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
desc2.putReference(stringIDToTypeID("null"), ref1);
executeAction(stringIDToTypeID("selectNoLayers"), desc2, DialogModes.NO);
////// get paths //////
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var docDesc = executeActionGet(ref);
if (docDesc.hasKey(stringIDToTypeID("numberOfPaths")) == true) {
var theNumber = docDesc.getInteger(stringIDToTypeID("numberOfPaths"));
var theArray = new Array;
////// work through paths //////
for (var m = 0; m < theNumber + 1; m++) {
try {
var ref = new ActionReference();
ref.putIndex(stringIDToTypeID("path"), m);
var pathDesc = executeActionGet(ref);
var theName = pathDesc.getString(stringIDToTypeID("pathName"));
var theKind = pathDesc.getEnumerationValue(stringIDToTypeID("kind"));
var theIndex = pathDesc.getInteger(stringIDToTypeID("itemIndex"));
theArray.push([theName, theKind, theIndex]);
} catch (e) { }
};
////// delete //////
for (var n = theNumber - 1; n >= 0; n--) {
/* https://gist.github.com/codewings/725b91ae2c607d96f24e1cc1527b8217
phEnumNormalPath -> 1316121936 -> "NrmP" normalPath
phEnumWorkPath -> 1467116368 -> "WrkP" workPathIndex
phClassClippingPath -> 1131180112 -> "ClpP" clippingPathEPS */
if (theArray[n][1] == 1316121936) {
var desc4 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putIndex(stringIDToTypeID("path"), theArray[n][2]);
desc4.putReference(stringIDToTypeID("null"), ref2);
executeAction(stringIDToTypeID("delete"), desc4, DialogModes.NO);
};
};
};
};
}
}
function removeAllWorkPaths() {
/* https://community.adobe.com/t5/photoshop/deleting-ps-paths-automatically/m-p/11060896 */
// Run for flattened image
if (app.activeDocument.activeLayer.isBackgroundLayer) {
// delete work paths
// https://wwwin.hilfdirselbst.ch/foren/Script_um_Pfade_zu_l%F6schen_P372902.html
// Note selected shape layers will be removed!
// Invisible selected shape layers will not be removed
// Deselected shape layers will not be removed
var myPath = app.activeDocument.pathItems;
for (n = myPath.length - 1; n >= 0; n--) {
var value = myPath[n];
aP = myPath[n];
if (aP.kind == "PathKind.WORKPATH") {
aP.remove()
}
}
}
// Run for layered image
else {
/* https://community.adobe.com/t5/photoshop/deleting-ps-paths-automatically/m-p/11060896 */
// Remove all work paths
// 2020, use it at your own risk;
if (app.documents.length > 0) {
////// deselect layers //////
var desc2 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
desc2.putReference(stringIDToTypeID("null"), ref1);
executeAction(stringIDToTypeID("selectNoLayers"), desc2, DialogModes.NO);
////// get paths //////
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var docDesc = executeActionGet(ref);
if (docDesc.hasKey(stringIDToTypeID("numberOfPaths")) == true) {
var theNumber = docDesc.getInteger(stringIDToTypeID("numberOfPaths"));
var theArray = new Array;
////// work through paths //////
for (var m = 0; m < theNumber + 1; m++) {
try {
var ref = new ActionReference();
ref.putIndex(stringIDToTypeID("path"), m);
var pathDesc = executeActionGet(ref);
var theName = pathDesc.getString(stringIDToTypeID("pathName"));
var theKind = pathDesc.getEnumerationValue(stringIDToTypeID("kind"));
var theIndex = pathDesc.getInteger(stringIDToTypeID("itemIndex"));
theArray.push([theName, theKind, theIndex]);
} catch (e) { }
};
////// delete //////
for (var n = theNumber - 1; n >= 0; n--) {
/* https://gist.github.com/codewings/725b91ae2c607d96f24e1cc1527b8217
phEnumNormalPath -> 1316121936 -> "NrmP" normalPath
phEnumWorkPath -> 1467116368 -> "WrkP" workPathIndex
phClassClippingPath -> 1131180112 -> "ClpP" clippingPathEPS */
if (theArray[n][1] == 1467116368) {
var desc4 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putIndex(stringIDToTypeID("path"), theArray[n][2]);
desc4.putReference(stringIDToTypeID("null"), ref2);
executeAction(stringIDToTypeID("delete"), desc4, DialogModes.NO);
};
};
};
};
}
}
function layrs2_DeleteEmptyLayers() {
/*
http://madebyvadim.com/layrs/
*/
// ===========================
// Delete Empty Layers
// ===========================
delEmptyLayers();
function delEmptyLayers() {
if (!documents.length) return;
var layerInfo = getLayerInfo();
for (var a in layerInfo) { //delete blank layers
if (layerInfo[a][2] == 'false') deleteLayerByID(Number(layerInfo[a][0]));
}
for (var z in layerInfo) {
if (layerInfo[z][2] == 'true') { //delete empty layerSets
selectLayerById(Number(layerInfo[z][0]));
if (activeDocument.activeLayer.layers.length == 0) deleteLayerByID(Number(layerInfo[z][0]));
}
}
};
function deleteLayerByID(ID) {
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putIdentifier(charIDToTypeID('Lyr '), ID);
desc.putReference(charIDToTypeID('null'), ref);
executeAction(charIDToTypeID('Dlt '), desc, DialogModes.NO);
};
function selectLayerById(ID, add) {
add = (add == undefined) ? add = false : add;
var ref = new ActionReference();
ref.putIdentifier(charIDToTypeID('Lyr '), ID);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID('null'), ref);
if (add) {
desc.putEnumerated(stringIDToTypeID('selectionModifier'), stringIDToTypeID('selectionModifierType'), stringIDToTypeID('addToSelection'));
}
desc.putBoolean(charIDToTypeID('MkVs'), false);
executeAction(charIDToTypeID('slct'), desc, DialogModes.NO);
}
function getLayerInfo() {
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) + 1;
var Names = [];
try {
activeDocument.backgroundLayer;
var i = 0;
} catch (e) {
var i = 1;
};
for (i; i < count; i++) {
if (i == 0) continue;
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), i);
var desc = executeActionGet(ref);
var layerName = desc.getString(charIDToTypeID('Nm '));
var Id = desc.getInteger(stringIDToTypeID('layerID'));
if (layerName.match(/^<\/Layer group/)) continue;
var layerType = typeIDToStringID(desc.getEnumerationValue(stringIDToTypeID('layerSection')));
var isLayerSet = (layerType == 'layerSectionContent') ? false : true;
var boundsDesc = desc.getObjectValue(stringIDToTypeID("bounds"));
if (boundsDesc.getUnitDoubleValue(stringIDToTypeID('right')) - boundsDesc.getUnitDoubleValue(stringIDToTypeID('left')) == 0) {
Names.push([
[Id],
[layerName],
[isLayerSet]
]);
}
if (isLayerSet) Names.push([
[Id],
[layerName],
[isLayerSet]
]);
};
return Names;
};
}
function deleteDocumentAncestorsMetadata() {
//forums.adobe.com/message/8456985#8456985
whatApp = String(app.name); //String version of the app name
if (whatApp.search("Photoshop") > 0) { //Check for photoshop specifically, or this will cause errors
//Function Scrubs Document Ancestors from Files
if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");
var xmp = new XMPMeta(activeDocument.xmpMetadata.rawData);
// Begone foul Document Ancestors!
xmp.deleteProperty(XMPConst.NS_PHOTOSHOP, "DocumentAncestors");
app.activeDocument.xmpMetadata.rawData = xmp.serialize();
}
}
function removeXMP() {
//community.adobe.com/t5/photoshop/script-to-remove-all-meta-data-from-the-photo/td-p/10400906
if (!documents.length) return;
if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");
var xmp = new XMPMeta(activeDocument.xmpMetadata.rawData);
XMPUtils.removeProperties(xmp, "", "", XMPConst.REMOVE_ALL_PROPERTIES);
app.activeDocument.xmpMetadata.rawData = xmp.serialize();
}
function removeCRSmeta() {
//community.adobe.com/t5/photoshop/remove-crs-metadata/td-p/10306935
if (!documents.length) return;
if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");
var xmp = new XMPMeta(app.activeDocument.xmpMetadata.rawData);
XMPUtils.removeProperties(xmp, XMPConst.NS_CAMERA_RAW, "", XMPConst.REMOVE_ALL_PROPERTIES);
app.activeDocument.xmpMetadata.rawData = xmp.serialize();
}
function removeAllAlphaChannelsNotSpot() {
// https://community.adobe.com/t5/photoshop/remove-alpha-channel-during-a-batch/m-p/11285697?page=1#M347558
var myChannel = app.activeDocument.channels;
for (n = myChannel.length - 1; n >= 0; n--) {
var value = myChannel[n];
aC = myChannel[n];
if (aC.kind == "ChannelType.MASKEDAREA") {
aC.remove()
}
}
}
function removeAllSpotChannelsNotAlpha() {
// https://community.adobe.com/t5/photoshop/remove-alpha-channel-during-a-batch/m-p/11285697?page=1#M347558
var myChannel = app.activeDocument.channels;
for (n = myChannel.length - 1; n >= 0; n--) {
var value = myChannel[n];
aC = myChannel[n];
if (aC.kind == "ChannelType.SPOTCOLOR") {
aC.remove()
}
}
}
function removeAllHistorySnapshots() {
/* https://www.photoshopgurus.com/forum/threads/how-to-delete-all-history-states-not-history-or-other-solution-to-a-master-macro.55456/#post-1533719707 */
var doc = app.activeDocument;
var hs = doc.historyStates;
for (var a = hs.length - 1; a >= 0; --a) {
if (hs[a].snapshot) {
doc.activeHistoryState = hs[a];
delHist();
}
}
function delHist() {
var desc20 = new ActionDescriptor();
var ref23 = new ActionReference();
ref23.putProperty(charIDToTypeID('HstS'), charIDToTypeID('CrnH'));
desc20.putReference(charIDToTypeID('null'), ref23);
executeAction(charIDToTypeID('Dlt '), desc20, DialogModes.NO);
}
}
/* http://creativetuts.com/photoshop/photoshop-script-code-snippet-archive/ */
var doc = app.activeDocument;
function removeInvisibleLayers(doc) {
for (var i = doc.artLayers.length - 1; 0 <= i; i--) {
try {
if (!doc.artLayers[i].visible) {
doc.artLayers[i].remove();
}
} catch (e) { }
}
for (var j = doc.layerSets.length - 1; 0 <= j; j--) {
removeInvisibleLayers(doc.layerSets[j]);
}
}
}
app.activeDocument.suspendHistory("Batch Remove Items 2021 v1", "removeStuff()");
Copy link to clipboard
Copied
Understood! Thanks a lot, been looking for something like this for a long time, very appreciated.
Copy link to clipboard
Copied
When i use this in os scripts editor an error ocures at #target photoshop.. what am i doing wrong?
I'm using the os scripts editor but writing in Javascripts..
Copy link to clipboard
Copied
Get rid of that first line.
Copy link to clipboard
Copied
I've tried that, then i get the error: ReferenceError: Can't find variable: app
Copy link to clipboard
Copied
What exact application/program is "os scripts editor"? Sounds like it doesn't know JavaScript.
Copy link to clipboard
Copied
i'm very new to this, so sorry for all of the questions and confusion.
I'm using AppleScript 2.7. but i have set it to use JavaScript...thankfull for all of the help i can get!
Copy link to clipboard
Copied
Did you ran this code script by Photoshop (File / Scripts / Browse)?
Copy link to clipboard
Copied
No. i haven't been done that and dont know how.
When i enter the code into AppleScript i get an error message on app not found..
Copy link to clipboard
Copied
Copy link to clipboard
Copied
This is the error message i recive. I have deleted the first line of the code.
Copy link to clipboard
Copied
I believe that you need to use an editor that not only understands JavaScript/ExtendScript – but also understands the Adobe scripting environment as well. As suggested in the other topic thread, for a Mac user I would suggest that you use MS Visual Studio Code for Mac and install the Adobe ExtendScript Debugger extension. Same suggestion for Windows OS, however, the old Adobe ExtendScript Toolkit program still works on Windows (but not on later Mac OS versions) and can be downloaded using the Creative Cloud app (prefs/apps/settings/show older apps).
Copy link to clipboard
Copied
.scpt is wrong file extension.
Copy link to clipboard
Copied
I just told you how to do that. After you save your code in .jsx format run it from Photoshop.
Copy link to clipboard
Copied
What a work of art!
I have currently no use for such a script, but wondered if a check all/check none button would be useful, given the long list, or maybe a check all per section? (I mean, it is very easy to say as a non scripter)
Copy link to clipboard
Copied
I have currently no use for such a script, but wondered if a check all/check none button would be useful, given the long list, or maybe a check all per section? (I mean, it is very easy to say as a non scripter)
@PECourtejoie – It's a good and useful suggestion. It is easy enough to preset the checkboxes to be either on or off by default (hard coded into the script with value: true or value: false)... But to offer a checkbox to dynamically check/uncheck checkboxes is much harder for me to do as I don't work with ScriptUI very often.
Copy link to clipboard
Copied
I understand, hence the remark in parenthesis.
That said, IMHO, there should be a repository of such code snippets, to create frankenscripts.
Copy link to clipboard
Copied
I finally added a button to Check All checkboxes and Uncheck All checkboxes!
Copy link to clipboard
Copied
It fails in Multichannel mode.
Copy link to clipboard
Copied
Hello hello hello,
some time later and i sat down this evening and got it to work!!!!!!!!!!! i'm quite excited and thank you very much for everything..
I work for a photography studio where we produce a lot of e-com photos with alphas.. is it possible to use this script to remove alphas on a batch? if so.. how? have a great evening or day!!
Copy link to clipboard
Copied
@Pandos wrote:
... is it possible to use this script to remove alphas on a batch? if so.. how? have a great evening or day!!
Sure, save the following code as a script and then record the run of the script into an action, then batch the action.
For both alphas and spots:
#target photoshop
app.activeDocument.channels.removeAll();
For only alphas, retaining spots:
/*
https://community.adobe.com/t5/photoshop/remove-alpha-channel-during-a-batch/m-p/11285697
*/
#target photoshop
removeAllAlphaChannelsNotSpot();
function removeAllAlphaChannelsNotSpot() {
try {
var myChannel = app.activeDocument.channels;
for (n = myChannel.length - 1; n >= 0; n--) {
aC = myChannel[n];
if (aC.kind == "ChannelType.MASKEDAREA" || aC.kind == "ChannelType.SELECTEDAREA") {
aC.remove()
}
}
} catch (e) {}
}
For only spots, retaining alphas:
/*
https://community.adobe.com/t5/photoshop/remove-alpha-channel-during-a-batch/m-p/11285697
*/
#target photoshop
removeAllSpotChannelsNotAlpha();
function removeAllSpotChannelsNotAlpha() {
try {
var myChannel = app.activeDocument.channels;
for (n = myChannel.length - 1; n >= 0; n--) {
aC = myChannel[n];
if (aC.kind == "ChannelType.SPOTCOLOR") {
aC.remove();
}
}
} catch (e) {}
}
https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html