Copy link to clipboard
Copied
Hi, I have a script that does some basic color manipulates within a selection. I will run this script thousands of times to produce my graphic. I would like to export a copy of my working file each time I run this script so that I can compile each step into an animation. Naming the files manually each time the action is run would be really tedious and time consuming.
I've been reading about batch actions and integrating those file naming options, but I seem to be going in circles without any results. Could someone point me in the right direction please?
Check out this thread: Progressive Save As New Jpeg
Copy link to clipboard
Copied
Are you talking about a Script (JS, VB or AS) or an Action?
In any case you may want to post over at
Copy link to clipboard
Copied
sorry, i mean a photoshop action. that was confusing of me.
Copy link to clipboard
Copied
Check out this thread: Progressive Save As New Jpeg
Copy link to clipboard
Copied
thanks, that looks promising
Copy link to clipboard
Copied
Has this thread been deleted? I can't access the link and it looks like it's just what I need!
Copy link to clipboard
Copied
Adobe broke all of the old links when they changed the forum software. From memory there was also a cut-off on date as well. Such a shame for all that knowledge to be thrown out.
I tried searching for the exact topic title used in the link, however, nothing came up.
Are you just after an incremental file save script? Such as:
MyFile.jpg then after running the script you would get:
MyFile_01.jpg
MyFile_02.jpg
etc?
Please provide specific details on what you require, file format, exact options, filename suffix etc.
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Try the following code, I modified an old script to hopefully suit your requirements... By assigning a keyboard shortcut to the script, you can easily save your incremental files:
/*
automate save as or export with sequential file names
https://community.adobe.com/t5/photoshop/automate-save-as-or-export-with-sequential-file-names/td-p/9003836
2020 - Original script modified to remove the original filename from the sequential output file
https://forums.adobe.com/message/4453915#4453915
*/
#target photoshop
main();
function main() {
if (!documents.length) return;
var Name = app.activeDocument.name.replace(/\.[^\.]+$/, '');
try {
var savePath = activeDocument.path;
} catch (e) {
alert("You must save this document first!");
}
var fileList = savePath.getFiles("*.jpg").sort().reverse();
var Suffix = 0;
if (fileList.length) {
Suffix = Number(fileList[0].name.replace(/\.[^\.]+$/, '').match(/\d+$/));
}
Suffix = zeroPad(Suffix + 1, 3);
//var saveFile = File(savePath + "/" + Name + "_" + Suffix + ".jpg");
var saveFile = File(savePath + "/" + Suffix + ".jpg");
SaveJPEG(saveFile, 8); // JPEG compression level
}
function SaveJPEG(saveFile, jpegQuality) {
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = jpegQuality;
activeDocument.saveAs(saveFile, jpgSaveOptions, true, Extension.LOWERCASE);
}
function zeroPad(n, s) {
n = n.toString();
while (n.length < s) n = '0' + n;
return n;
}
Downloading and Installing Adobe Scripts
Copy link to clipboard
Copied
An Adobe Bridge reminder to save timer script here:
Leave the script running in the background in Bridge, it will pop-up an alert in Photoshop at regular intervals, reminding you to save!
________________
EDIT:
With a little modification, the reminder to save script can be altered to automatically run the script to save the incremental JPEG files.
Copy link to clipboard
Copied
Thanks so much- this is great!
Would you have a recommendation for how to modify to automatically run the script to save the incremental JPEG files
Copy link to clipboard
Copied
Have you used the Bridge timer?
By default, it was set to pop up the alert in Photoshop every 3 minutes. Did you change it to 1 minute?
The potential issue with autosaves is what happens if the autosave does not work for some reason?
Copy link to clipboard
Copied
Yes I changed it to 1 minute.
Regarding autosaves-that is a good point. I know there is a disadvantage. I'm still interested in possibly integrating the two scripts and am not sure how to approach that.
Thank you!
Copy link to clipboard
Copied
1) Record the installed or browsed script into an action, here I have named the set "Incremental" and the action "Save":
2) Here is the Bridge script, you will notice that it has a matching Photoshop command to play the Incremental set and Run action:
#target bridge;
if (BridgeTalk.appName == "bridge") {
var psRem = new MenuElement("command", "PS Auto Timer - Incremental Save", "at the end of Tools");
}
psRem.onSelect = function () {
var mins = 60000 * 1; // 1 minute
psReminder = function () {
var bt = new BridgeTalk();
bt.target = "photoshop";
// Run action set 'Incremental' & action 'Save' which calls a recorded photoshop script 'incremental-jpeg-saves'
bt.body = "if(documents.length) app.doAction('Save', 'Incremental') alert('File auto-saved via running Bridge script')";
bt.send(4)
}
id = app.scheduleTask("psReminder()", mins, true);
var win = new Window("palette", "Photoshop Reminder");
win.bu1 = win.add("button", undefined, "Stop Reminder");
win.bu1.onClick = function () {
win.close(0);
app.cancelTask(id);
}
win.show();
};
The previous code includes an alert to notify that the auto-save was performed. If you feel that this pop-up interrupts your painting workflow, change the following line of code:
bt.body = "if(documents.length) app.doAction('Save', 'Incremental') alert('File auto-saved via running Bridge script')";
To this:
bt.body = "if(documents.length) app.doAction('Save', 'Incremental')";
P.S. I'm not really happy with the reliance on a script being called from an action, which is then referenced from a Bridge script which then calls the Photoshop action and Photoshop script, however, I could not work out any other way of doing this, I have never edited BridgeTalk code before and it appears to be a bit pickier about syntax (I did try to use an @include without any luck).
Copy link to clipboard
Copied
Hello
I tried this exact script.
I have a few images in a folder.
I want to make a different modification to each of them, but save them with the same settings.
I open the first image, do the modification and I want, use the script.
Image "001.jpg"created, great
Now I open the 2nd image, I do the modification I want and use the script.
Image "001.jpg"created and replaced the one that was created just before... Not what I want.
How can it see that "001.jpg" exists and not erase it but create "002.jpg" instead?
Thank you in advance for your help
Copy link to clipboard
Copied
What version of Photoshop? What version of Bridge? What operating system and version?
Copy link to clipboard
Copied
Hello
I am trying to use the script you posted on the 27 May 2020.
I copied and pasted it in Notpad and saved it as .jsx
I have no idea what Bridge is, I don't believe I need it.
Photoshop CC 2015
Windows 10
Copy link to clipboard
Copied
OK, I posted two scripts, one with #target photoshop near the top of the code, another with #target bridge which provided a method to autosave in Photoshop using the sequential script at regular intervals.
There have been a number of scripts posted over the years for sequential saves, I'll look for some of the other scripts and post them later.
Copy link to clipboard
Copied
Thank you!
I did try to find it by myself, and found a few itterations and even tried to mess around to try to:
- specify another Folder to save the new images
- and also to name all the new images "BG " (for Background) followed by 001, 002, 003
But I failed at everything, I have 0 knowledge on this, I can barely understand any line.
So, yes to try to make you understand what I want:
I have 100 images, on each of them I want to make specific resizing, so it can't be in the script, I do that part manually.
Once I have resized, I press a key (in the actions), and it runs the macro
The macro is only: save as jpeg 12 quality, same folder (or another), with renaming as "... 001"
Then, I open the next image, do the risizing manually again and press the key, and this one will be "... 002"
and so on
Hope I have been very accurate on what I want so there is no confusion ^^
Copy link to clipboard
Copied
OK, I am just going to dump out all of the scripts that I have collected for making sequential/incremented saves. Let's just concentrate on finding one that works for you at a basic level. Perhaps they can then be modified further to do more.
Please post a threaded reply/comment against the script post, then it is obvious which one is being discussed.
Info on saving and installing scripts here:
Downloading and Installing Adobe Scripts
Copy link to clipboard
Copied
// Stephen_A_Marsh
// 05-01-2021
// Additional options & menu add
// Rombout Versluijs
// 14-01-2021
// Usage
// - Because its being added to menu it can be hotkeyed
// - useFileName > true adds filename as a prefix
// - jpegQuality > sets save quality . range 1-12
// - formatOption > 1 Progressive
// 2 Optimized Baseline
// 3 Standard Baseline
/*
@@@BUILDINFO@@@ Quick Export as JPG Incremental.jsx 0.0.0.6
*/
/*
// BEGIN__HARVEST_EXCEPTION_ZSTRING
/*
<javascriptresource>
<name>$$$/JavaScripts/QuickExportAsJPGIncremental/Menu=Quick Export as JPG Incremental...</name>
<category>scriptexport</category>
<menu>export</menu>
<enableinfo>true</enableinfo>
</javascriptresource>
// END__HARVEST_EXCEPTION_ZSTRING
*/
// alert(documents.length)
#target photoshop
var useFileName = false; // true - false
var jpegQuality = 10; // 1-12
var formatOption = 1; // 1-3
/* Start Open/Saved Document Error Check - Part A: Try */
savedDoc();
function savedDoc() {
// try {
app.activeDocument.path;
/* Finish Open/Saved Document Error Check - Part A: Try */
/* Main Code Start */
// https://forums.adobe.com/message/4453915#4453915
main();
function main() {
if (!documents.length) return;
var Name = app.activeDocument.name.replace(/\.[^\.]+$/, '');
var savePath = activeDocument.path;
var fileList = [];
if(useFileName){
var fileList = savePath.getFiles(Name + "*.jpg").sort().reverse();
} else {
var fileList = savePath.getFiles("*.jpg").sort().reverse();
var filtered = [];
for( i in fileList){
var name = String(fileList[i]).split("/").pop(); // Get filename
name = name.slice(0,name.length-4); // Split extension from name
// alert(name+" "+!isNaN(name))
// https://stackoverflow.com/questions/651563/getting-the-last-element-of-a-split-string-array
if(!isNaN(name)) filtered.push(name); // Check if name is a number or not > fullname needs to be numbers
}
}
var Suffix = 0;
if (fileList.length) {
if(useFileName){
Suffix = fileList[0].name.replace(/\.[^\.]+$/, '').match(/\d+$/); // Fix for mix of characters & numbers
Suffix = Number(String(Suffix).slice(String(Suffix).length-1,String(Suffix).length)); // Fix for Windows
// alert((fileList[0].name).slice(25,26))
// alert((fileList[0].name.replace(/\.[^\.]+$/, '').match(/\d+$/)).slice(fileList[0].name.length-5,fileList[0].name.length-4))
// alert((fileList[0].name.replace(/\.[^\.]+$/, '').match(/\d+$/)).slice(fileList[0].name.length-1,fileList[0].name.length))
// alert((fileList[0].name).slice(fileList[0].name.length-1,fileList[0].name.length))
// Suffix = Number(fileList[0].name.replace(/\.[^\.]+$/, '').match(/\d+$/)); // strips numbers when mixed
// Suffix = Number(fileList[0].name.match(/\d+$/)); // return true name even when mixed numbers and characters
} else if ((!filtered[0] === undefined) || filtered[0]) {
Suffix = Number(filtered[0].replace(/\.[^\.]+$/, '').match(/\d+$/));
}
}
Suffix = zeroPad(Suffix + 1, 3);
Name = useFileName ? (Name +"_") : "";
var saveFile = File(savePath + "/" + Name + Suffix + ".jpg");
SaveJPEG(saveFile, jpegQuality, formatOption);
}
function SaveJPEG(saveFile, jpegQuality, formatOption) {
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.embedColorProfile = true;
if (formatOption === 1) {
jpgSaveOptions.formatOptions = FormatOptions.PROGRESSIVE;
jpgSaveOptions.scans = 3;
} else if (formatOption === 2) {
jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
} else {
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
}
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = Number(jpegQuality);
activeDocument.saveAs(saveFile, jpgSaveOptions, true, Extension.LOWERCASE);
}
function zeroPad(n, s) {
n = n.toString();
while (n.length < s) n = '0' + n;
return n;
}
/* Main Code Finish */
// }
/* Start Open/Saved Document Error Check - Part B: Catch */
// catch (err) {
// alert(err)
// // alert("An image must be open and saved before running this script!");
// }
}
/* Finish Open/Saved Document Error Check - Part B: Catch */
Copy link to clipboard
Copied
Copy link to clipboard
Copied
#target photoshop
main();
function main() {
if (!documents.length) return;
var Name = app.activeDocument.name.replace(/\.[^\.]+$/, '');
try {
var savePath = activeDocument.path;
} catch (e) {
alert("You must save this document first!");
}
var fileList = savePath.getFiles("*.jpg").sort().reverse();
var Suffix = 0;
if (fileList.length) {
Suffix = Number(fileList[0].name.replace(/\.[^\.]+$/, '').match(/\d+$/));
}
Suffix = zeroPad(Suffix + 1, 3);
//var saveFile = File(savePath + "/" + Name + "_" + Suffix + ".jpg");
var saveFile = File(savePath + "/" + Suffix + ".jpg");
SaveJPEG(saveFile, 8); // JPEG compression level
}
function SaveJPEG(saveFile, jpegQuality) {
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = jpegQuality;
activeDocument.saveAs(saveFile, jpgSaveOptions, true, Extension.LOWERCASE);
}
function zeroPad(n, s) {
n = n.toString();
while (n.length < s) n = '0' + n;
return n;
}
Copy link to clipboard
Copied
Yes it is one of those that I tried yesterday.
I copied your whole script in your last post and tried, here how it went:
I opened my first image, resized it and ran the script you posted
It saved it as jpeg as 001, good
Then I pressed Del, to remove the image from Photoshop and dragged the next image, I resized it and ran the script again
It saved it as jpeg as 001 and so it unfortunately replaced the first newly created image
Somehow it does not detect "001", I think
Copy link to clipboard
Copied
//community.adobe.com/t5/photoshop/looking-for-photoshop-script-that-gives-a-file-a-unique-name-saves-and-close/td-p/10998808
if (app.documents.length) {
try { var f = app.activeDocument.fullName } catch (e) {
var p = new Folder; f = p.selectDlg(); if (f) f = File(f + '/' + app.activeDocument.name)
}
if (f) {
activeDocument.saveAs(createUniqueFileName(f))
activeDocument.close()
}
}
function createUniqueFileName(f) {
var inPath = decodeURI(f.parent),
inFile = decodeURI(f.name).replace(/\.[^\.]+$/, '').replace(/_\d+$/,''),
inExt = '.psd',
uniqueFileName = File(inPath + '/' + inFile + inExt),
fileNumber = 1
while (uniqueFileName.exists) {
uniqueFileName = File(inPath + '/' + inFile + "_" + ('000' + fileNumber).slice(-3) + inExt)
fileNumber++;
}
return uniqueFileName
}