Actions don't have iterators hence can't set values based on iterators, so you'll need a script to drive the loop. However scripts can call actions, so the script can be quite simple and contain only the looping part and saving part (because we need to use the loop in the save name).
Important part here is to figure out how Action would look like. There could be different options here, one of them is to have Hue/Sat layers with the offsets you want and duplicate them in each loop. This way each new Hue/Sat will add a new hue shift. In this scenario the action would look like this (starts from a selected Hue/Sat layer):
- Layer via copy active (Hue/Sat) layer
- Create clipping mask
- Select the other Hue/Sat
- Layer via copy
- create clipping mask
- Select the original Hue/Sat
so this action will create a copy of each Hue/Sat layer. Next, let's say your first Hue/Sat has an offset of 60 and the second has 30. So the script will need to loop 360/30 = 12 times before creating all possible combinations. Loop will look like this:
function main()
{
var min_offset = 30; // the minimum offset
var loops_count = 360 / min_offset; // getting the number of loops, 12 in the example
var save_path = '/D/my/export/folder'; // set the save path like /DRIVE_LETTER/path/to/folder
var i;
// if save path doesn't exist, abort
if (!new Folder(save_path).exists)
{
alert(new Folder(save_path).fsName + " doesn't exist, aborting");
return false;
}
for (i = 0; i < loops_count; i++)
{
app.doAction("Action_Name", "My_Set"); // this will call an Action_Name from My_Set
// save a a document as PNG
var options = new ExportOptionsSaveForWeb();
pngFile = new File(save_path + '/my_file_' + (i+1) + '.png');
options.format = SaveDocumentType.PNG;
options.PNG8 = false;
activeDocument.exportDocument(pngFile, ExportType.SAVEFORWEB, options);
}
}
main();
result: