Copy link to clipboard
Copied
So I have this script that opens an image sequence, cuts the frames in half, and converts it to a GIF.
I want it to open ABC001 as a sequence, run the steps, and then skip ABC002...ABC00N and move on to DEF001 and so on.
How could I achieve this?
#target photoshop
//
// gif.jsx
//
//
// Generated Sat Apr 29 2023 10:11:00 GMT-0400
//
cTID = function(s) { return app.charIDToTypeID(s); };
sTID = function(s) { return app.stringIDToTypeID(s); };
//
//==================== gif ==============
//
function gif() {
// Open
function step1(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
desc1.putPath(cTID('null'), new File("~/Downloads/ABC001.png"));
desc1.putBoolean(sTID("sequence"), true);
desc1.putBoolean(sTID("dontRecord"), false);
desc1.putBoolean(sTID("forceNotify"), true);
desc1.putDouble(sTID("frameRate"), 60);
executeAction(cTID('Opn '), desc1, dialogMode);
};
// Set
function step2(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putProperty(cTID('Prpr'), sTID("documentTimelineSettings"));
ref1.putClass(sTID("timeline"));
desc1.putReference(cTID('null'), ref1);
desc1.putDouble(sTID("frameRate"), 30);
executeAction(cTID('setd'), desc1, dialogMode);
};
// Export
function step3(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var desc2 = new ActionDescriptor();
desc2.putEnumerated(cTID('Op '), cTID('SWOp'), cTID('OpSa'));
desc2.putBoolean(cTID('DIDr'), true);
desc2.putPath(cTID('In '), new File("~/Downloads/"));
desc2.putEnumerated(cTID('Fmt '), cTID('IRFm'), cTID('GIFf'));
desc2.putBoolean(cTID('Intr'), false);
desc2.putEnumerated(cTID('RedA'), cTID('IRRd'), cTID('Adpt'));
desc2.putBoolean(cTID('RChT'), false);
desc2.putBoolean(cTID('RChV'), false);
desc2.putBoolean(cTID('AuRd'), false);
desc2.putInteger(cTID('NCol'), 256);
desc2.putInteger(cTID('DChS'), 0);
desc2.putInteger(cTID('DCUI'), 0);
desc2.putBoolean(cTID('DChT'), false);
desc2.putBoolean(cTID('DChV'), false);
desc2.putInteger(cTID('WebS'), 0);
desc2.putEnumerated(cTID('TDth'), cTID('IRDt'), cTID('None'));
desc2.putInteger(cTID('TDtA'), 100);
desc2.putInteger(cTID('Loss'), 0);
desc2.putInteger(cTID('LChS'), 0);
desc2.putInteger(cTID('LCUI'), 100);
desc2.putBoolean(cTID('LChT'), false);
desc2.putBoolean(cTID('LChV'), false);
desc2.putBoolean(cTID('Trns'), true);
desc2.putBoolean(cTID('Mtt '), false);
desc2.putEnumerated(cTID('Dthr'), cTID('IRDt'), cTID('Dfsn'));
desc2.putInteger(cTID('DthA'), 100);
desc2.putInteger(cTID('MttR'), 0);
desc2.putInteger(cTID('MttG'), 0);
desc2.putInteger(cTID('MttB'), 0);
desc2.putBoolean(cTID('SHTM'), false);
desc2.putBoolean(cTID('SImg'), true);
desc2.putEnumerated(cTID('SWsl'), cTID('STsl'), cTID('SLAl'));
desc2.putEnumerated(cTID('SWch'), cTID('STch'), cTID('CHsR'));
desc2.putEnumerated(cTID('SWmd'), cTID('STmd'), cTID('MDCC'));
desc2.putBoolean(cTID('ohXH'), false);
desc2.putBoolean(cTID('ohIC'), true);
desc2.putBoolean(cTID('ohAA'), true);
desc2.putBoolean(cTID('ohQA'), true);
desc2.putBoolean(cTID('ohCA'), false);
desc2.putBoolean(cTID('ohIZ'), true);
desc2.putEnumerated(cTID('ohTC'), cTID('SToc'), cTID('OC03'));
desc2.putEnumerated(cTID('ohAC'), cTID('SToc'), cTID('OC03'));
desc2.putInteger(cTID('ohIn'), -1);
desc2.putEnumerated(cTID('ohLE'), cTID('STle'), cTID('LE03'));
desc2.putEnumerated(cTID('ohEn'), cTID('STen'), cTID('EN00'));
desc2.putBoolean(cTID('olCS'), false);
desc2.putEnumerated(cTID('olEC'), cTID('STst'), cTID('ST00'));
desc2.putEnumerated(cTID('olWH'), cTID('STwh'), cTID('WH01'));
desc2.putEnumerated(cTID('olSV'), cTID('STsp'), cTID('SP04'));
desc2.putEnumerated(cTID('olSH'), cTID('STsp'), cTID('SP04'));
var list1 = new ActionList();
var desc3 = new ActionDescriptor();
desc3.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC00'));
list1.putObject(cTID('SCnc'), desc3);
var desc4 = new ActionDescriptor();
desc4.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC19'));
list1.putObject(cTID('SCnc'), desc4);
var desc5 = new ActionDescriptor();
desc5.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC28'));
list1.putObject(cTID('SCnc'), desc5);
var desc6 = new ActionDescriptor();
desc6.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC24'));
list1.putObject(cTID('SCnc'), desc6);
var desc7 = new ActionDescriptor();
desc7.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC24'));
list1.putObject(cTID('SCnc'), desc7);
var desc8 = new ActionDescriptor();
desc8.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC24'));
list1.putObject(cTID('SCnc'), desc8);
desc2.putList(cTID('olNC'), list1);
desc2.putBoolean(cTID('obIA'), false);
desc2.putString(cTID('obIP'), "");
desc2.putEnumerated(cTID('obCS'), cTID('STcs'), cTID('CS01'));
var list2 = new ActionList();
var desc9 = new ActionDescriptor();
desc9.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC01'));
list2.putObject(cTID('SCnc'), desc9);
var desc10 = new ActionDescriptor();
desc10.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC20'));
list2.putObject(cTID('SCnc'), desc10);
var desc11 = new ActionDescriptor();
desc11.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC02'));
list2.putObject(cTID('SCnc'), desc11);
var desc12 = new ActionDescriptor();
desc12.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC19'));
list2.putObject(cTID('SCnc'), desc12);
var desc13 = new ActionDescriptor();
desc13.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC06'));
list2.putObject(cTID('SCnc'), desc13);
var desc14 = new ActionDescriptor();
desc14.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC24'));
list2.putObject(cTID('SCnc'), desc14);
var desc15 = new ActionDescriptor();
desc15.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC24'));
list2.putObject(cTID('SCnc'), desc15);
var desc16 = new ActionDescriptor();
desc16.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC24'));
list2.putObject(cTID('SCnc'), desc16);
var desc17 = new ActionDescriptor();
desc17.putEnumerated(cTID('ncTp'), cTID('STnc'), cTID('NC22'));
list2.putObject(cTID('SCnc'), desc17);
desc2.putList(cTID('ovNC'), list2);
desc2.putBoolean(cTID('ovCM'), false);
desc2.putBoolean(cTID('ovCW'), true);
desc2.putBoolean(cTID('ovCU'), false);
desc2.putBoolean(cTID('ovSF'), true);
desc2.putBoolean(cTID('ovCB'), true);
desc2.putString(cTID('ovSN'), "images");
desc1.putObject(cTID('Usng'), sTID("SaveForWeb"), desc2);
executeAction(cTID('Expr'), desc1, dialogMode);
};
// Close
function step4(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
desc1.putEnumerated(cTID('Svng'), cTID('YsN '), cTID('N '));
desc1.putInteger(cTID('DocI'), 81);
desc1.putBoolean(sTID("forceNotify"), true);
executeAction(cTID('Cls '), desc1, dialogMode);
};
step1(); // Open
step2(); // Set
step3(); // Export
step4(); // Close
};
//=========================================
// gif.main
//=========================================
//
gif.main = function () {
gif();
};
gif.main();
// EOF
"gif.jsx"
// EOF
Copy link to clipboard
Copied
Alright I got it working, just had to loop the file list and split the name and sequence numbers then compare the file names, and only proceed to do the steps if they don't match, and pass in the current file to the Open step.
desc1.putPath(cTID('null'), new File(fileList[i]));