Skip to main content
_wckdTall_
Inspiring
July 20, 2026
Question

How do you find layer kind for Grain in scripting?

  • July 20, 2026
  • 1 reply
  • 14 views

app.activeLayer.kind returns an error for Grain adjustment layers, is here anyway to return a value for them? Is it detectable with AM? Currently, just using a try catch to return undefined.

activeDocument.activeLayer
------------------------
1) allLocked=false
2) blendMode=BlendMode.NORMAL
3) bounds=0 px,0 px,13754 px,7760 px
4) boundsNoEffects=0 px,0 px,13754 px,7760 px
5) fillOpacity=100
6) filterMaskDensity=100
7) filterMaskFeather=0
8) grouped=false
9) id=7002
10) isBackgroundLayer=false
11) itemIndex=12
12) kind= Internal error
13) layerMaskDensity=100
14) layerMaskFeather=0
15) linkedLayers=
16) name=Grain 1
17) opacity=100
18) parent=[LayerSet Effects]
19) pixelsLocked=false
20) positionLocked=false
21) textItem= Layer is not a text layer.
22) transparentPixelsLocked=false
23) typename=ArtLayer
24) vectorMaskDensity=100
25) vectorMaskFeather=0
26) visible=true
27) xmpMetadata=[XMP Metadata]

 

1 reply

Stephen Marsh
Community Expert
Community Expert
July 21, 2026
stringIDToTypeID( "grainAdjustment" );

 

As in:

 

var idMk = charIDToTypeID( "Mk  " );
var desc6296 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref316 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref316.putClass( idcontentLayer );
desc6296.putReference( idnull, ref316 );
var idUsng = charIDToTypeID( "Usng" );
var desc6297 = new ActionDescriptor();
var idType = charIDToTypeID( "Type" );
var idgrainAdjustment = stringIDToTypeID( "grainAdjustment" );
desc6297.putClass( idType, idgrainAdjustment );
var idcontentLayer = stringIDToTypeID( "contentLayer" );
desc6296.putObject( idUsng, idcontentLayer, desc6297 );
executeAction( idMk, desc6296, DialogModes.NO );

 

Edit: Here's something useful…

 

if (isGrainAdjustmentLayer()) {
alert("True");
} else {
alert("False");
}

function isGrainAdjustmentLayer() {
try {
var s2t = stringIDToTypeID;
var ref = new ActionReference();
ref.putProperty(s2t("property"), s2t("adjustment"));
ref.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
return typeIDToStringID(executeActionGet(ref).getList(s2t("adjustment")).getObjectType(0)) === "grainAdjustment";
} catch (e) {
return false;
}
}


/*
function isGrainAdjustmentLayer() {
try {
var s2t = stringIDToTypeID;
function getLayerProperty(property) {
var ref = new ActionReference();
ref.putProperty(s2t("property"), s2t(property));
ref.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
return executeActionGet(ref);
}
// Must be an adjustment layer
if (getLayerProperty("layerKind").getInteger(s2t("layerKind")) !== 2) {
return false;
}
return typeIDToStringID(getLayerProperty("adjustment").getList(s2t("adjustment")).getObjectType(0)) === "grainAdjustment";
} catch (e) {
return false;
}
}
*/

 

Stephen Marsh
Community Expert
Community Expert
July 21, 2026
/*
https://community.adobe.com/t5/photoshop-ecosystem-discussions/how-to-check-layer-kind-using-javascript/m-p/13174707
*/

s2t = stringIDToTypeID;
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('layerKind'));
r.putEnumerated(s2t('layer'), s2t('ordinal'), s2t('targetEnum'));
var layerKind = executeActionGet(r).getInteger(p);

if (layerKind == 0) {
alert("kAnySheet");
}
else if (layerKind == 1) {
alert("kPixelSheet");
}
else if (layerKind == 2) {
s2t = stringIDToTypeID;
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('adjustment'));
r.putEnumerated(s2t('layer'), s2t('ordinal'), s2t('targetEnum'));
alert("kAdjustmentSheet: " + typeIDToStringID(executeActionGet(r).getList(p).getObjectType(0)));
}
else if (layerKind == 3) {
alert("kTextSheet");
}
else if (layerKind == 4) {
alert("kVectorSheet");
}
else if (layerKind == 5) {
alert("kSmartObjectSheet");
}
else if (layerKind == 6) {
alert("kVideoSheet");
}
else if (layerKind == 7) {
alert("kLayerGroupSheet");
}
else if (layerKind == 8) {
alert("k3DSheet");
}
else if (layerKind == 9) {
alert("kGradientSheet");
}
else if (layerKind == 10) {
alert("kPatternSheet");
}
else if (layerKind == 11) {
alert("kSolidColorSheet");
}
else if (layerKind == 12) {
alert("kBackgroundSheet");
}
else if (layerKind == 13) {
alert("kHiddenSectionBounder");
}
else {
alert("Why am I seeing this message?!");
}