Skip to main content
Inspiring
May 18, 2023
Answered

Script to Flatten(Rasterize) all Top Level Groups in the document.

  • May 18, 2023
  • 1 reply
  • 1242 views

Hey,

I am looking for a simple script that will just flatten all top level groups in the document. See this:



I know I can just select and then do CTRL-E, but I have to do it one by one then.

Anyone have a solution? Thanks!

This topic has been closed for replies.
Correct answer Stephen Marsh

@futuremotion6798557 – The following script will rasterize selected layers. It was written for layers not in a group, so there is some reduant code in there, but I doubt that it slows the script down too much so best to leave it generic so that it will work on layers or groups:

 

 
/* 
Rasterize selected layers opacity.jsx
https://community.adobe.com/t5/photoshop-ecosystem-discussions/rasterize-flatten-layer-transparency-quickly/m-p/11393469
Stephen Marsh - 5th October 2022, v1.0 
*/

#target photoshop

function main() {

    ///// Process selected layers - from jazz-y /////
    var s2t = stringIDToTypeID;
    (r = new ActionReference()).putProperty(s2t('property'), p = s2t('targetLayersIDs'));
    r.putEnumerated(s2t('document'), s2t('ordinal'), s2t('targetEnum'));
    var lrs = executeActionGet(r).getList(p),
        sel = new ActionReference();
    for (var i = 0; i < lrs.count; i++) {
        sel.putIdentifier(s2t('layer'), p = lrs.getReference(i).getIdentifier(s2t('layerID')));
        (r = new ActionReference()).putIdentifier(s2t('layer'), p);
        (d = new ActionDescriptor()).putReference(s2t("target"), r);
        executeAction(s2t('select'), d, DialogModes.NO);
        
        /////
        
        var layerName = activeDocument.activeLayer.name;
        layerToGroup();
        activeDocument.activeLayer.merge();
        activeDocument.activeLayer.name = layerName;

        function layerToGroup() {
            var s2t = function (s) {
                return app.stringIDToTypeID(s);
            };
            var descriptor = new ActionDescriptor();
            var reference = new ActionReference();
            var reference2 = new ActionReference();
            reference.putClass(s2t("layerSection"));
            descriptor.putReference(s2t("null"), reference);
            reference2.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
            descriptor.putReference(s2t("from"), reference2);
            executeAction(s2t("make"), descriptor, DialogModes.NO);
        }
    }
}
app.activeDocument.suspendHistory("Rasterize selected layers opacity", "main()");

1 reply

Stephen Marsh
Community Expert
Community Expert
May 18, 2023
 
 
/*
https://community.adobe.com/t5/photoshop-ecosystem-discussions/script-to-merge-each-main-group-not-subgroup-in-to-a-layer/m-p/10400702#M237128
By SuperMerlin
*/

#target photoshop;

while (app.activeDocument.layerSets.length) {
    activeDocument.activeLayer = app.activeDocument.layerSets[0];
    executeAction(stringIDToTypeID("newPlacedLayer"), new ActionDescriptor(), DialogModes.NO);
    activeDocument.activeLayer.rasterize(RasterizeType.ENTIRELAYER);
}

 

P.S. All top-level groups, or only selected top-level groups as per your screenshot? The "BG" group isn't selected, however, it does qualify as a top-level group and would be correctly processed as such alongside all other groups with the script above. Then there is other content that has been scrolled past in the screenshot, so I'm not sure if there are any unexpected surprises...

 

 

Stephen Marsh
Community Expert
Stephen MarshCommunity ExpertCorrect answer
Community Expert
May 18, 2023

@futuremotion6798557 – The following script will rasterize selected layers. It was written for layers not in a group, so there is some reduant code in there, but I doubt that it slows the script down too much so best to leave it generic so that it will work on layers or groups:

 

 
/* 
Rasterize selected layers opacity.jsx
https://community.adobe.com/t5/photoshop-ecosystem-discussions/rasterize-flatten-layer-transparency-quickly/m-p/11393469
Stephen Marsh - 5th October 2022, v1.0 
*/

#target photoshop

function main() {

    ///// Process selected layers - from jazz-y /////
    var s2t = stringIDToTypeID;
    (r = new ActionReference()).putProperty(s2t('property'), p = s2t('targetLayersIDs'));
    r.putEnumerated(s2t('document'), s2t('ordinal'), s2t('targetEnum'));
    var lrs = executeActionGet(r).getList(p),
        sel = new ActionReference();
    for (var i = 0; i < lrs.count; i++) {
        sel.putIdentifier(s2t('layer'), p = lrs.getReference(i).getIdentifier(s2t('layerID')));
        (r = new ActionReference()).putIdentifier(s2t('layer'), p);
        (d = new ActionDescriptor()).putReference(s2t("target"), r);
        executeAction(s2t('select'), d, DialogModes.NO);
        
        /////
        
        var layerName = activeDocument.activeLayer.name;
        layerToGroup();
        activeDocument.activeLayer.merge();
        activeDocument.activeLayer.name = layerName;

        function layerToGroup() {
            var s2t = function (s) {
                return app.stringIDToTypeID(s);
            };
            var descriptor = new ActionDescriptor();
            var reference = new ActionReference();
            var reference2 = new ActionReference();
            reference.putClass(s2t("layerSection"));
            descriptor.putReference(s2t("null"), reference);
            reference2.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
            descriptor.putReference(s2t("from"), reference2);
            executeAction(s2t("make"), descriptor, DialogModes.NO);
        }
    }
}
app.activeDocument.suspendHistory("Rasterize selected layers opacity", "main()");
Inspiring
May 20, 2023

Thanks so much! Any reason you pasted v1 of the script and not v2 from the thread you linked?