Skip to main content
Inspiring
August 15, 2025
Answered

Detect and Select Layer Mask

  • August 15, 2025
  • 1 reply
  • 258 views

I recently needed to do the following with javascript

  1.  Detect if a layer has a mask applied.
  2.  If the layer has a mask, select the pixels of that mask (as if using Ctrl/Cmd + LMB on the mask icon in the Layers panel).

 

The following code was successful, so I'm sharing it in case it becomes useful to anyone else. See the reply below.

 

 

Correct answer Nick Combs
function layerMask( lyr ) {

  if( lyr && lyr.typename && lyr.typename == 'ArtLayer' ) 
    activeDocument.activeLayer = lyr
  else 
    lyr = activeDocument.activeLayer

  var r = {}, d = {}, st = stringIDToTypeID, ch = charIDToTypeID

  r['activeLayer'] = new ActionReference()
  r['activeLayer'].putEnumerated( ch('Lyr '), ch('Ordn'), ch('Trgt') )
  d['activeLayer'] = executeActionGet( r['activeLayer'] )

  if( d['activeLayer'].getBoolean( st('hasUserMask') ) ) {

    d['maskSelection'] = new ActionDescriptor()

    r['maskSelection'] = new ActionReference()
    r['maskSelection'].putProperty( ch('Chnl'), ch('fsel') )
    d['maskSelection'].putReference( ch('null'), r['maskSelection'] )

    r['activeChannel'] = new ActionReference()
    r['activeChannel'].putEnumerated( ch('Chnl'), ch('Ordn'), ch('Msk ') )
    d['maskSelection'].putReference( ch('T   '), r['activeChannel'] )

    executeAction( ch('setd'), d['maskSelection'], DialogModes.NO )

    return activeDocument.selection
  }
  return false
}

1 reply

Nick CombsAuthorCorrect answer
Inspiring
August 15, 2025
function layerMask( lyr ) {

  if( lyr && lyr.typename && lyr.typename == 'ArtLayer' ) 
    activeDocument.activeLayer = lyr
  else 
    lyr = activeDocument.activeLayer

  var r = {}, d = {}, st = stringIDToTypeID, ch = charIDToTypeID

  r['activeLayer'] = new ActionReference()
  r['activeLayer'].putEnumerated( ch('Lyr '), ch('Ordn'), ch('Trgt') )
  d['activeLayer'] = executeActionGet( r['activeLayer'] )

  if( d['activeLayer'].getBoolean( st('hasUserMask') ) ) {

    d['maskSelection'] = new ActionDescriptor()

    r['maskSelection'] = new ActionReference()
    r['maskSelection'].putProperty( ch('Chnl'), ch('fsel') )
    d['maskSelection'].putReference( ch('null'), r['maskSelection'] )

    r['activeChannel'] = new ActionReference()
    r['activeChannel'].putEnumerated( ch('Chnl'), ch('Ordn'), ch('Msk ') )
    d['maskSelection'].putReference( ch('T   '), r['activeChannel'] )

    executeAction( ch('setd'), d['maskSelection'], DialogModes.NO )

    return activeDocument.selection
  }
  return false
}
Stephen Marsh
Community Expert
Community Expert
August 16, 2025

@Nick Combs - thank you for sharing!