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

Batch process multiple actions

New Here ,
Dec 31, 2024 Dec 31, 2024

Copy link to clipboard

Copied

I have about 20 different actions that I would like to batch process on sets of images simultaneously. The source and the destination folder is always the same to simplify things (I just move the finished images from these temporary folders to their final destination folder after processing). I have the Save As function recorded in the actions already, and each action is set to save as in its own specific destination folder. (again these are temporary folders that I use for Photoshop processing. Once the images are done, I move these images from here to a final destination folder).
The actions work when triggered manually.

I don’t see an obviously way to batch process multiple actions with Photoshop. I can only highlight individual actions and hit the play button. I’m not good at scripts or Automator.
Any help or script is appreciated. ChatGPT gives me the runaround of course. Can’t wait for product specific AI help to hit the markets.
Thanks everyone and happy new year!

TOPICS
Actions and scripting

Views

272
Translate

Report

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

correct answers 1 Correct answer

Community Expert , Dec 31, 2024 Dec 31, 2024

Two things that might help:

 

An action can call other actions. So if you want to run multiple actions in one click, include them in a parent action. For example, you create an action, and while recording it, you start other actions. When you stop recording you’ll see those actions listed within the parent action.

 

quote

I don’t see an obviously way to batch process multiple actions with Photoshop. I can only highlight individual actions and hit the play button.

By Attila7479

 

Another part of the

...

Votes

Translate
Adobe
Community Expert ,
Dec 31, 2024 Dec 31, 2024

Copy link to clipboard

Copied

@Attila7479 

 

It's not clear what you want to do:

 

1) Serially play 20 separate actions, one after the other on each automate/batch image? If so, an action can be recorded playing multiple actions.

 

2) Have one or more actions conditionally play on each automate/batch image, depending on image specific criteria? If so, conditional actions or a script would be required.

 

3) Something else?

 

Votes

Translate

Report

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 ,
Dec 31, 2024 Dec 31, 2024

Copy link to clipboard

Copied

Two things that might help:

 

An action can call other actions. So if you want to run multiple actions in one click, include them in a parent action. For example, you create an action, and while recording it, you start other actions. When you stop recording you’ll see those actions listed within the parent action.

 

quote

I don’t see an obviously way to batch process multiple actions with Photoshop. I can only highlight individual actions and hit the play button.

By Attila7479

 

Another part of the solution might be the File > Automate > Batch command. It doesn’t run multiple actions, but it can for example let you pick a folder and run an action on all the files in the folder.

 

So then you can combine the first suggestion (create an action that calls multiple actions in series), with the second suggestion (apply that action to a whole folder of images using the Batch command).

Votes

Translate

Report

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 ,
Jan 01, 2025 Jan 01, 2025

Copy link to clipboard

Copied

OK, thank you for responding, that could work. However, how do I add the step of opening the images from the source folder? Obviously these images will always be different, different amount of images, different kind of images. I cannot record the batch process within the action. In other words, I cannot record the steps for opening the images within the source folder and outputting them into the destination folder within the action. Running the actions with batch processing works, but that puts me back to the necessity of manually to triggering all my actions separately with batch processing. Saving the images into the destination folder can be recorded within the action and it works fine when I trigger the action with batch processing. Again, my sources and destination folders will always be the same therefore, saving the images should always work fine.

I just don't know how to tell Photoshop to open the images within the source folder. It should be the first step in the recording for the action, however, folders cannot be chosen (therefore, I cannot choose my source folder for this step), only images within the folder. And since the images within my source folder will always differ, that does not work. Thank you so much for any help you can offer.

Votes

Translate

Report

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 ,
Jan 01, 2025 Jan 01, 2025

Copy link to clipboard

Copied

LATEST

@Attila7479 

 

As I originally wrote, automate/batch.

 

As Conrad also replied, file > automate > batch.


Batch would run an action that plays all the other actions.

Votes

Translate

Report

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 ,
Jan 01, 2025 Jan 01, 2025

Copy link to clipboard

Copied

AHH! I think this is a good solution, I will try it. Thank you so much. Happy new year to you.

 

Votes

Translate

Report

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 ,
Dec 31, 2024 Dec 31, 2024

Copy link to clipboard

Copied

"I can only highlight individual actions and hit the play button."

 

You can record an action step to trigger another action. Just avoid moving actions from one set to another, as the path is hard-coded, and do not rename the action after recording the step to play it. Is that what you meant, or is there another issue you're facing?

Votes

Translate

Report

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 ,
Jan 01, 2025 Jan 01, 2025

Copy link to clipboard

Copied

And just to make sure: Are you sure the recorded »Save As«-step will not overwrite an existing file repeatedly? (Or is that the intention?) 

Votes

Translate

Report

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 ,
Jan 01, 2025 Jan 01, 2025

Copy link to clipboard

Copied

As indicated earlier I suspect the saving issue may need attention but this might provide a starting point; a dialog with the Actions from the first Set, that would run the selected Actions after OK-ing. 

Screenshot 2025-01-01 at 15.50.05.pngexpand image

// dialog with actions from first set of actions;
// 2024, use it at your own risk;
if (app.documents.length > 0) {
var theActionSets = getActionSets();
var theseActions = getActions(theActionSets[0]);
var myDocument = app.activeDocument;
//////////////////////////////////////////
var dlg = new Window('dialog', "action from first set", undefined);
//////////////////////////////
dlg.theList = dlg.add('listbox', [15,15,325,537], 'field', {multiselect: true});
// populate the list with the open files’ names;
for (var o = 0; o < theseActions.length; o++) {
dlg.theList.add ("item", theseActions[o]);
};
//dlg.theList.items[0].selected = true;
dlg.theList.onDoubleClick = function () {
var anArray = new Array;
};
//////////////////////////////
// build- and cancel-button;
dlg.cancelOk = dlg.add('panel', [12,495,308,550], "");
dlg.cancelOk.buildBtn = dlg.cancelOk.add('button', [10,10,141,40], 'OK', {name:'ok'});
dlg.cancelOk.cancelBtn = dlg.cancelOk.add('button', [149,10,280,40], 'Cancel', {name:'cancel'});
dlg.center();
var myReturn = dlg.show ();
//////////////////////////////
if (myReturn == true) {
// run clicked actions;
for (var o = 0; o < dlg.theList.items.length; o++) {
if (dlg.theList.items[o].selected == true) {
app.doAction(String(dlg.theList.items[o]), String(theActionSets[0]))
}
};
};
};
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
// using code by xbytor and paul riggott;
function getActionSets() { 
cTID = function(s) { return app.charIDToTypeID(s); }; 
sTID = function(s) { return app.stringIDToTypeID(s); }; 
var i = 1; 
var sets = [];  
while (true) { 
var ref = new ActionReference(); 
ref.putIndex(cTID("ASet"), i); 
var desc; 
var lvl = $.level; 
$.level = 0; 
try { 
desc = executeActionGet(ref); 
} catch (e) { 
break;   
} finally { 
$.level = lvl; 
} 
if (desc.hasKey(cTID("Nm  "))) { 
var set = {}; 
set.index = i; 
set.name = desc.getString(cTID("Nm  ")); 
set.toString = function() { return this.name; }; 
set.count = desc.getInteger(cTID("NmbC")); 
set.actions = []; 
for (var j = 1; j <= set.count; j++) { 
var ref = new ActionReference(); 
ref.putIndex(cTID('Actn'), j); 
ref.putIndex(cTID('ASet'), set.index); 
var adesc = executeActionGet(ref); 
var actName = adesc.getString(cTID('Nm  ')); 
set.actions.push(actName); 
} 
sets.push(set); 
} 
i++; 
} 
return sets; 
}; 
function getActions(aset) {
cTID = function(s) { return app.charIDToTypeID(s); }; 
sTID = function(s) { return app.stringIDToTypeID(s); };
var i = 1;
var names = [];
if (!aset) {
throw "Action set must be specified";
}  
while (true) {
var ref = new ActionReference();
ref.putIndex(cTID("ASet"), i);
var desc;
try {
desc = executeActionGet(ref);
} catch (e) {
break;
}
if (desc.hasKey(cTID("Nm  "))) {
var name = desc.getString(cTID("Nm  "));
if (name == aset) {
var count = desc.getInteger(cTID("NmbC"));
var names = [];
for (var j = 1; j <= count; j++) {
var ref = new ActionReference();
ref.putIndex(cTID('Actn'), j);
ref.putIndex(cTID('ASet'), i);
var adesc = executeActionGet(ref);
var actName = adesc.getString(cTID('Nm  '));
names.push(actName);
}
break;
}
}
i++;
}
return names;
};

 

Votes

Translate

Report

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