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

Save all history snapshots as files

Community Expert ,
Dec 09, 2015 Dec 09, 2015

Copy link to clipboard

Copied

I must confess, I like saving history snapshots! Sometimes I wish to save them as a file for later reference once the current image has been closed.

I have written an action to save the current 10 snapshots out as files. It works fine with the following limitations:

1) It only saves 10 snapshots (this is easily expanded upon if required)

2) The snapshots have to be named  “Snapshot 1”, “Snapshot 2” etc.

This action does not work if the snapshot has a different name.

Does anybody know of a script that does similar?

Here is a sample of the action steps saved as text:

Set: Save First 10 History Snapshots to File

  Action: Save First 10 History Snapshots to File

  Select snapshot “Snapshot 1”

  Make document

  Using: Current History State

  Save

  Close

  Select snapshot “Snapshot 2”

  Make document

  Using: Current History State

  Save

  Close

TOPICS
Actions and scripting

Views

6.1K

Translate

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

Guide , Jan 02, 2016 Jan 02, 2016

This script will save all snapshots in a folder called snapshots off the documents path, each file is saved as a jpg with the name of the snapshot.

#target photoshop;

app.bringToFront();

main();

function main(){

if(!documents.length) return;

try{

    var Path = activeDocument.path;

    }catch(err){

        alert("You save your document before running this script!");

        return;

        }

var doc = app.activeDocument;

var now = doc.activeHistoryState;

var Snaps = snapShotList();

var outputFol

...

Votes

Translate

Translate
Adobe
Community Expert ,
Dec 09, 2015 Dec 09, 2015

Copy link to clipboard

Copied

It would be very easy to run through the history state and act upon snapshot,  You will have the snapshot name and you can select them.  You will most likely need to use Action manager scriptlisener cot to do the "Make Document Using Current History state.

saveCurrentHistoryState= app.activeDocument.activeHistoryState; // Remember current

for (var i=0,len=app.activeDocument.historyStates.length;i<len;i++) {

   var historyStateRef = app.activeDocument.historyStates;

   if (historyStateRef.snapshot) {

      alert("Index " + i + " " + historyStateRef.typename + "' for document '" + historyStateRef.parent + " is a snapshop with a name '" + historyStateRef.name );

      app.activeDocument.activeHistoryState = historyStateRef; //select this history state

     // add code to make document usind current histort state then save and close here

   }

};

app.activeDocument.activeHistoryState = saveCurrentHistoryState; //select this history state

JJMack

Votes

Translate

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

Copy link to clipboard

Copied

‌Thanks JJMack, I can't script so I can't do anything with your snippet. I was hoping that somebody knew of a script for this, I presumed that this would be a common enough task.

Votes

Translate

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

Copy link to clipboard

Copied

Adobe Photoshop CC 2015 JavaScript Reference

 

Code for Save can be found in this forum and in the above manual.

 

Scripting a Save As command

JJMack

Votes

Translate

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

Copy link to clipboard

Copied

‌It would be just as useful to provide me with a foreign language dictionary and grammar guide... Hmmm, you just did! :]

Coding comes easy to some. I am not one of those, which is why I was looking for an existing script, there are many out there.

Votes

Translate

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
Guide ,
Jan 02, 2016 Jan 02, 2016

Copy link to clipboard

Copied

This script will save all snapshots in a folder called snapshots off the documents path, each file is saved as a jpg with the name of the snapshot.

#target photoshop;

app.bringToFront();

main();

function main(){

if(!documents.length) return;

try{

    var Path = activeDocument.path;

    }catch(err){

        alert("You save your document before running this script!");

        return;

        }

var doc = app.activeDocument;

var now = doc.activeHistoryState;

var Snaps = snapShotList();

var outputFolder = Folder(Path + "/snapshots");

if(!outputFolder.exists) outputFolder.create();

for (var z in Snaps){

    revertNamedSnapshot(Snaps);

    var saveFile = File(outputFolder + "/" + Snaps.toString().replace(/\./g,'_') + ".jpg");

    SaveForWeb(saveFile,80);

    }

doc.activeHistoryState = now;

};

function SaveForWeb(saveFile,jpegQuality) {

var sfwOptions = new ExportOptionsSaveForWeb();

   sfwOptions.format = SaveDocumentType.JPEG;

   sfwOptions.includeProfile = false;

   sfwOptions.interlaced = 0;

   sfwOptions.optimized = true;

   sfwOptions.quality = jpegQuality;

activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, sfwOptions);

};

function snapShotList(){

var doc = app.activeDocument;

var hs = doc.historyStates;

var now = doc.activeHistoryState;

var Name = new Array();

for(var a =0;a <hs.length;a++){

   if(hs.snapshot) {

       doc.activeHistoryState = hs;

       Name.push(hs.name);

       }

    }

doc.activeHistoryState = now;

return Name;

};

function revertNamedSnapshot(name) {

var desc = new ActionDescriptor();

var ref = new ActionReference();

ref.putName( charIDToTypeID('SnpS'), name );

desc.putReference( charIDToTypeID('null'), ref );

executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );

};

Votes

Translate

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 02, 2016 Jan 02, 2016

Copy link to clipboard

Copied

Thank you SuperMerlin, that is fantastic – greatly appreciated! I should be able to edit this script to use a lossless format like TIFF or PSD. I’ll post back if I run into problems.

JJMack, I hear what you are saying and as I have been using Photoshop since v2.0 I do take a lot of past learning for granted. That being said, I am pretty much a GUI user, that is how I think. Learning text based languages are simply just not as easy for me. I have tried, I struggle with GREP/RegEx!

Votes

Translate

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 02, 2016 Jan 02, 2016

Copy link to clipboard

Copied

I will never be able to do regular expressions.  Decoding readable code is hard for me. Code like regular expressions, reverse polish notation one line APL programs are for machine not humans. .

JJMack

Votes

Translate

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 02, 2016 Jan 02, 2016

Copy link to clipboard

Copied

OK, so my Frankenstein’s monster code is below, I have commented out the JPEG options and transplanted some code for saving PSD, however I think that I am going wrong somewhere on line 23?

I have tried different combinations of code from the commented lines 02 and 03.

I have commented out the original JPEG options for reference (lines 24, 38-46).

I am like a bull in a china shop when it comes to code!

// https://forums.adobe.com/thread/2034807

// http://stackoverflow.com/questions/5796764/from-photoshop-actions-to-photoshop-scripting

// https://github.com/joonaspaakko/Photoshop-Auto-Save-PSD-script/blob/master/Auto%20Save%20PSD.jsx

#target photoshop;

app.bringToFront();

main();

function main(){

if(!documents.length) return;

try{

    var Path = activeDocument.path;

    }catch(err){

        alert("You save your document before running this script!");

        return;

        }

var doc = app.activeDocument;

var now = doc.activeHistoryState;

var Snaps = snapShotList();

var outputFolder = Folder(Path + "/History Snapshots as PSD");

if(!outputFolder.exists) outputFolder.create();

for (var z in Snaps){

    revertNamedSnapshot(Snaps);

    var saveFile = File(outputFolder + "/" + Snaps.toString().replace(/\./g,'_') + ".psd");

    PhotoshopSaveOptions(psdOptions, true);

    // SaveForWeb(saveFile,80);

    }

doc.activeHistoryState = now;

};

//Save as PSD

        var psdOptions = new PhotoshopSaveOptions();

        psdOptions.alphaChannels = true;

        psdOptions.annotations = true;

        psdOptions.embedColorProfile = true;

        psdOptions.layers = true;

        psdOptions.spotColors = true;

// function SaveForWeb(saveFile,jpegQuality) {

// var sfwOptions = new ExportOptionsSaveForWeb();

//  sfwOptions.format = SaveDocumentType.JPEG;

//  sfwOptions.includeProfile = false;

//  sfwOptions.interlaced = 0;

//  sfwOptions.optimized = true;

//  sfwOptions.quality = jpegQuality;

// activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, sfwOptions);

// };

function snapShotList(){

var doc = app.activeDocument;

var hs = doc.historyStates;

var now = doc.activeHistoryState;

var Name = new Array();

for(var a =0;a <hs.length;a++){

  if(hs.snapshot) {

      doc.activeHistoryState = hs;

      Name.push(hs.name);

      }

    }

doc.activeHistoryState = now;

return Name;

};

function revertNamedSnapshot(name) {

var desc = new ActionDescriptor();

var ref = new ActionReference();

ref.putName( charIDToTypeID('SnpS'), name );

desc.putReference( charIDToTypeID('null'), ref );

executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );

};

Votes

Translate

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
Guide ,
Jan 03, 2016 Jan 03, 2016

Copy link to clipboard

Copied

This might help you..

#target photoshop;

app.bringToFront();

main();

function main(){

if(!documents.length) return;

try{

    var Path = activeDocument.path;

    }catch(err){

        alert("You save your document before running this script!");

        return;

        }

var doc = app.activeDocument;

var now = doc.activeHistoryState;

var Snaps = snapShotList();

var outputFolder = Folder(Path + "/snapshots");

if(!outputFolder.exists) outputFolder.create();

for (var z in Snaps){

    revertNamedSnapshot(Snaps);

    //var saveFile = File(outputFolder + "/" + Snaps.toString().replace(/\./g,'_') + ".jpg");

    var saveFile = File(outputFolder + "/" + Snaps.toString().replace(/\./g,'_') + ".psd");

    //var saveFile = File(outputFolder + "/" + Snaps.toString().replace(/\./g,'_') + ".tif");

    //SaveForWeb(saveFile,80);

    SavePSD(saveFile);

    //SaveTIFF(saveFile);

    }

doc.activeHistoryState = now;

};

function SaveTIFF(saveFile){

tiffSaveOptions = new TiffSaveOptions();

tiffSaveOptions.embedColorProfile = true;

tiffSaveOptions.byteOrder = ByteOrder.IBM;

tiffSaveOptions.transparency=true;

tiffSaveOptions.interleaveChannels=true;

tiffSaveOptions.alphaChannels = false;

tiffSaveOptions.imageCompression = TIFFEncoding.NONE;

activeDocument.saveAs(saveFile, tiffSaveOptions, true, Extension.LOWERCASE);

};

function SavePSD(saveFile){

psdSaveOptions = new PhotoshopSaveOptions();

psdSaveOptions.embedColorProfile = true;

psdSaveOptions.alphaChannels = true; 

psdSaveOptions.layers = true; 

activeDocument.saveAs(saveFile, psdSaveOptions, true, Extension.LOWERCASE);

};

function SaveForWeb(saveFile,jpegQuality) {

var sfwOptions = new ExportOptionsSaveForWeb();

   sfwOptions.format = SaveDocumentType.JPEG;

   sfwOptions.includeProfile = false;

   sfwOptions.interlaced = 0;

   sfwOptions.optimized = true;

   sfwOptions.quality = jpegQuality;

activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, sfwOptions);

};

function snapShotList(){

var doc = app.activeDocument;

var hs = doc.historyStates;

var now = doc.activeHistoryState;

var Name = new Array();

for(var a =0;a <hs.length;a++){

   if(hs.snapshot) {

       doc.activeHistoryState = hs;

       Name.push(hs.name);

       }

    }

doc.activeHistoryState = now;

return Name;

};

function revertNamedSnapshot(name) {

var desc = new ActionDescriptor();

var ref = new ActionReference();

ref.putName( charIDToTypeID('SnpS'), name );

desc.putReference( charIDToTypeID('null'), ref );

executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );

};

Votes

Translate

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 03, 2016 Jan 03, 2016

Copy link to clipboard

Copied

Thanks again SuperMerlin, this is exactly what I was looking for and it is within my scripting “skills” to enable/disable existing code if I would like TIFF instead of PSD.

Votes

Translate

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 02, 2016 Jan 02, 2016

Copy link to clipboard

Copied

Coding is not easy like everything it must be learned.  I just hack at it.  If I want something I will work at it.  If you want a custom script you should try learning a little about scripting like you learned a bit about Actions and other Photoshop features.  You most likely have edit and action or to know the Action Palette is as editor as well as a recorder.   You also know how to use a text editor.  That is what you edit scripts with.

JJMack

Votes

Translate

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 ,
Apr 19, 2024 Apr 19, 2024

Copy link to clipboard

Copied

LATEST

As the forum software change broke the code, here it is again:

 

/* https://community.adobe.com/t5/photoshop-ecosystem-discussions/save-all-history-snapshots-as-files/m-p/7857534 */
#target photoshop;  
app.bringToFront();  
main();  
function main(){  
if(!documents.length) return;  
try{  
    var Path = activeDocument.path;  
    }catch(err){  
        alert("You save your document before running this script!");  
        return;  
        }  
var doc = app.activeDocument;  
var now = doc.activeHistoryState;  
var Snaps = snapShotList();  
var outputFolder = Folder(Path + "/snapshots");  
if(!outputFolder.exists) outputFolder.create();  
for (var z in Snaps){  
    revertNamedSnapshot(Snaps[z]);  
    var saveFile = File(outputFolder + "/" + Snaps[z].toString().replace(/\./g,'_') + ".jpg");  
    //var saveFile = File(outputFolder + "/" + Snaps[z].toString().replace(/\./g,'_') + ".psd");  
    //var saveFile = File(outputFolder + "/" + Snaps[z].toString().replace(/\./g,'_') + ".tif");  
  
    SaveForWeb(saveFile,80);  
    //SavePSD(saveFile);  
    //SaveTIFF(saveFile);  
    }  
doc.activeHistoryState = now;  
};  
function SaveTIFF(saveFile){  
tiffSaveOptions = new TiffSaveOptions();   
tiffSaveOptions.embedColorProfile = true;  
tiffSaveOptions.byteOrder = ByteOrder.IBM;  
tiffSaveOptions.transparency=true;  
tiffSaveOptions.interleaveChannels=true;  
tiffSaveOptions.alphaChannels = false;   
tiffSaveOptions.imageCompression = TIFFEncoding.NONE;   
activeDocument.saveAs(saveFile, tiffSaveOptions, true, Extension.LOWERCASE);   
};  
function SavePSD(saveFile){   
psdSaveOptions = new PhotoshopSaveOptions();   
psdSaveOptions.embedColorProfile = true;   
psdSaveOptions.alphaChannels = true;    
psdSaveOptions.layers = true;
psdSaveOptions.annotations = true;
psdSaveOptions.spotColors = true;
activeDocument.saveAs(saveFile, psdSaveOptions, true, Extension.LOWERCASE);   
};  
function SaveForWeb(saveFile,jpegQuality) {  
var sfwOptions = new ExportOptionsSaveForWeb();   
   sfwOptions.format = SaveDocumentType.JPEG;   
   sfwOptions.includeProfile = false;   
   sfwOptions.interlaced = 0;   
   sfwOptions.optimized = true;   
   sfwOptions.quality = jpegQuality;  
activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, sfwOptions);  
};  
function snapShotList(){  
var doc = app.activeDocument;  
var hs = doc.historyStates;  
var now = doc.activeHistoryState;  
var Name = new Array();  
for(var a =0;a <hs.length;a++){  
   if(hs[a].snapshot) {  
       doc.activeHistoryState = hs[a];  
       Name.push(hs[a].name);  
       }  
    }  
doc.activeHistoryState = now;  
return Name;  
};  
function revertNamedSnapshot(name) {  
var desc = new ActionDescriptor();  
var ref = new ActionReference();  
ref.putName( charIDToTypeID('SnpS'), name );  
desc.putReference( charIDToTypeID('null'), ref );  
executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );  
};  

Votes

Translate

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