Skip to content

Instantly share code, notes, and snippets.

@Ending2015a
Last active August 24, 2025 07:29
Show Gist options
  • Save Ending2015a/cde33e8a0b36818baec352fecb124dbf to your computer and use it in GitHub Desktop.
Save Ending2015a/cde33e8a0b36818baec352fecb124dbf to your computer and use it in GitHub Desktop.
Photopea export all group layers (folders) into separated PNG files.
// list of number index
var validLayers = [];
// list of list of active layer index
var combos = [];
// whether to export
var runExport = false;
function GetDocName(){
// var split = app.activeDocument.name.split('.');
// split.pop();
// var docName = split.join(".");
// return docName;
return app.activeDocument.name;
}
function SavePNG(saveFile){
var pngOpts = new ExportOptionsSaveForWeb;
pngOpts.format = SaveDocumentType.PNG
pngOpts.PNG8 = false;
pngOpts.transparency = false;
pngOpts.interlaced = false;
pngOpts.quality = 100;
activeDocument.exportDocument(new File(saveFile),ExportType.SAVEFORWEB,pngOpts);
}
function exportByCombos(){
for (var i=0;i<combos.length;i++){
for (var j=0;j<validLayers.length;j++){
layers[validLayers[j]].visible = false;
}
for (var j=0;j<combos[i].length;j++){
layers[combos[i][j]].visible = true;
}
SavePNG(docName + '-' + i.toString() + '.png');
}
}
function exportByLoop(){
for (var i=0;i<validLayers.length;i++){
for (var j=0;j<validLayers.length;j++){
layers[validLayers[j]].visible = false;
}
layers[validLayers[i]].visible = true;
SavePNG(docName + '-' + layers[validLayers[i]].name + '.png');
}
}
function ExportLayers(){
var layers = app.activeDocument.layers;
var docName = GetDocName();
if (validLayers.length == 0){
for (var i=0;i<layers.length;i++){
if (layers[i].layers !== null){
console.log(i, layers[i].name);
validLayers.push(i);
}
}
}
console.log(validLayers);
if (runExport){
if (combos.length > 0){
// if combos is defined
exportByCombos();
}
else{
exportByLoop();
}
}
}
ExportLayers()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment