Skip to content

Masks

src.helpers.masks.copy_layer_mask(layer_from: Union[ArtLayer, LayerSet], layer_to: Union[ArtLayer, LayerSet]) -> None

Copies mask from one layer to another.

Parameters:

Name Type Description Default
layer_from ArtLayer | LayerSet

Layer to copy from.

required
layer_to ArtLayer | LayerSet

Layer to copy to.

required
Source code in src\helpers\masks.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def copy_layer_mask(
    layer_from: Union[ArtLayer, LayerSet],
    layer_to: Union[ArtLayer, LayerSet]
) -> None:
    """Copies mask from one layer to another.

    Args:
        layer_from: Layer to copy from.
        layer_to: Layer to copy to.
    """
    desc1 = ActionDescriptor()
    ref17 = ActionReference()
    ref18 = ActionReference()
    desc1.putClass(sID("new"), sID("channel"))
    ref17.putEnumerated(sID("channel"), sID("channel"), sID("mask"))
    ref17.putIdentifier(sID("layer"), layer_to.id)
    desc1.putReference(sID("at"), ref17)
    ref18.putEnumerated(sID("channel"), sID("channel"), sID("mask"))
    ref18.putIdentifier(sID("layer"), layer_from.id)
    desc1.putReference(sID("using"), ref18)
    APP.executeAction(sID("make"), desc1, NO_DIALOG)

src.helpers.masks.copy_vector_mask(layer_from: Union[ArtLayer, LayerSet], layer_to: Union[ArtLayer, LayerSet]) -> None

Copies vector mask from one layer to another.

Parameters:

Name Type Description Default
layer_from ArtLayer | LayerSet

Layer to copy from.

required
layer_to ArtLayer | LayerSet

Layer to copy to.

required
Source code in src\helpers\masks.py
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
def copy_vector_mask(
    layer_from: Union[ArtLayer, LayerSet],
    layer_to: Union[ArtLayer, LayerSet]
) -> None:
    """Copies vector mask from one layer to another.

    Args:
        layer_from: Layer to copy from.
        layer_to: Layer to copy to.
    """
    desc1 = ActionDescriptor()
    ref1 = ActionReference()
    ref2 = ActionReference()
    ref3 = ActionReference()
    ref1.putClass(sID("path"))
    desc1.putReference(sID("target"),  ref1)
    ref2.putEnumerated(sID("path"), sID("path"), sID("vectorMask"))
    ref2.putIdentifier(sID("layer"),  layer_to.id)
    desc1.putReference(sID("at"),  ref2)
    ref3.putEnumerated(sID("path"), sID("path"), sID("vectorMask"))
    ref3.putIdentifier(sID("layer"), layer_from.id)
    desc1.putReference(sID("using"),  ref3)
    APP.executeAction(sID("make"), desc1, NO_DIALOG)

src.helpers.masks.apply_mask_to_layer_fx(layer: Union[ArtLayer, LayerSet] = None) -> None

Sets the layer mask to apply only to layer effects in blending options.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet

ArtLayer or LayerSet object.

None
Source code in src\helpers\masks.py
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
def apply_mask_to_layer_fx(layer: Union[ArtLayer, LayerSet] = None) -> None:
    """Sets the layer mask to apply only to layer effects in blending options.

    Args:
        layer: ArtLayer or LayerSet object.
    """
    if not layer:
        layer = APP.activeDocument.activeLayer
    ref = ActionReference()
    ref.putIdentifier(sID("layer"), layer.id)
    desc = APP.executeActionGet(ref)
    layer_fx = desc.getObjectValue(sID('layerEffects'))
    layer_fx.putBoolean(sID("layerMaskAsGlobalMask"), True)
    desc = ActionDescriptor()
    desc.putReference(sID("target"), ref)
    desc.putObject(sID("to"), sID("layer"), layer_fx)
    APP.executeAction(sID("set"), desc,  NO_DIALOG)

src.helpers.masks.set_layer_mask(layer: Union[ArtLayer, LayerSet, None] = None, visible: bool = True) -> None

Set the visibility of a layer's mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer object.

None
visible bool

Whether to make the layer mask visible.

True
Source code in src\helpers\masks.py
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
def set_layer_mask(
    layer: Union[ArtLayer, LayerSet, None] = None,
    visible: bool = True
) -> None:
    """Set the visibility of a layer's mask.

    Args:
        layer: ArtLayer object.
        visible: Whether to make the layer mask visible.
    """
    if not layer:
        layer = APP.activeDocument.activeLayer
    desc1 = ActionDescriptor()
    desc2 = ActionDescriptor()
    ref1 = ActionReference()
    ref1.putIdentifier(cID("Lyr "), layer.id)
    desc1.putReference(sID("target"), ref1)
    desc2.putBoolean(cID("UsrM"), visible)
    desc1.putObject(cID("T   "), cID("Lyr "), desc2)
    APP.executeAction(cID("setd"), desc1, NO_DIALOG)

src.helpers.masks.enable_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None

Enables a given layer's mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer object.

None
Source code in src\helpers\masks.py
119
120
121
122
123
124
125
def enable_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """Enables a given layer's mask.

    Args:
        layer: ArtLayer object.
    """
    set_layer_mask(layer, True)

src.helpers.masks.disable_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None

Disables a given layer's mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer object.

None
Source code in src\helpers\masks.py
128
129
130
131
132
133
134
def disable_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """Disables a given layer's mask.

    Args:
        layer: ArtLayer object.
    """
    set_layer_mask(layer, False)

src.helpers.masks.apply_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None

Applies a given layer's mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer or LayerSet object, use active layer if not provided.

None
Source code in src\helpers\masks.py
137
138
139
140
141
142
143
144
145
146
147
148
149
150
def apply_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """Applies a given layer's mask.

    Args:
        layer: ArtLayer or LayerSet object, use active layer if not provided.
    """
    if layer:
        APP.activeDocument.activeLayer = layer
    desc1 = ActionDescriptor()
    ref1 = ActionReference()
    ref1.putEnumerated(sID("channel"), sID("channel"), sID("mask"))
    desc1.putReference(sID("target"),  ref1)
    desc1.putBoolean(sID("apply"), True)
    APP.executeAction(sID("delete"), desc1, NO_DIALOG)

src.helpers.masks.set_layer_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None, visible: bool = False) -> None

Set the visibility of a layer's vector mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer object.

None
visible bool

Whether to make the vector mask visible.

False
Source code in src\helpers\masks.py
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
def set_layer_vector_mask(
    layer: Union[ArtLayer, LayerSet, None] = None,
    visible: bool = False
) -> None:
    """Set the visibility of a layer's vector mask.

    Args:
        layer: ArtLayer object.
        visible: Whether to make the vector mask visible.
    """
    if not layer:
        layer = APP.activeDocument.activeLayer
    desc1 = ActionDescriptor()
    desc2 = ActionDescriptor()
    ref1 = ActionReference()
    ref1.putIdentifier(sID("layer"), layer.id)
    desc1.putReference(sID("target"), ref1)
    desc2.putBoolean(sID("vectorMaskEnabled"), visible)
    desc1.putObject(sID("to"), sID("layer"), desc2)
    APP.executeAction(sID("set"), desc1, NO_DIALOG)

src.helpers.masks.enable_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None

Enables a given layer's vector mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer object.

None
Source code in src\helpers\masks.py
175
176
177
178
179
180
181
def enable_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """Enables a given layer's vector mask.

    Args:
        layer: ArtLayer object.
    """
    set_layer_vector_mask(layer, True)

src.helpers.masks.disable_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None

Disables a given layer's vector mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer object.

None
Source code in src\helpers\masks.py
184
185
186
187
188
189
190
def disable_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """Disables a given layer's vector mask.

    Args:
        layer: ArtLayer object.
    """
    set_layer_vector_mask(layer, False)

src.helpers.masks.enter_mask_channel(layer: Union[ArtLayer, LayerSet, None] = None)

Enters mask channel to allow working with current layer's mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

Layer to make active, if provided.

None
Source code in src\helpers\masks.py
198
199
200
201
202
203
204
205
206
207
208
209
210
211
def enter_mask_channel(layer: Union[ArtLayer, LayerSet, None] = None):
    """Enters mask channel to allow working with current layer's mask.

    Args:
        layer: Layer to make active, if provided.
    """
    if layer:
        APP.activeDocument.activeLayer = layer
    d1 = ActionDescriptor()
    r1 = ActionReference()
    r1.PutEnumerated(sID("channel"), sID("channel"), sID("mask"))
    d1.PutReference(sID("target"), r1)
    d1.PutBoolean(sID("makeVisible"), True)
    APP.Executeaction(sID("select"), d1, NO_DIALOG)

src.helpers.masks.enter_rgb_channel(layer: Union[ArtLayer, LayerSet, None] = None)

Enters the RGB channel (default channel).

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

Layer to make active, if provided.

None
Source code in src\helpers\masks.py
214
215
216
217
218
219
220
221
222
223
224
225
226
227
def enter_rgb_channel(layer: Union[ArtLayer, LayerSet, None] = None):
    """Enters the RGB channel (default channel).

    Args:
        layer: Layer to make active, if provided.
    """
    if layer:
        APP.activeDocument.activeLayer = layer
    d1 = ActionDescriptor()
    r1 = ActionReference()
    r1.PutEnumerated(sID("channel"), sID("channel"), sID("RGB"))
    d1.PutReference(sID("target"), r1)
    d1.PutBoolean(sID("makeVisible"), True)
    APP.Executeaction(sID("select"), d1, NO_DIALOG)

src.helpers.masks.create_mask(layer: Union[ArtLayer, LayerSet, None] = None)

Add a mask to provided or active layer.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

Layer to make active, if provided.

None
Source code in src\helpers\masks.py
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
def create_mask(layer: Union[ArtLayer, LayerSet, None] = None):
    """Add a mask to provided or active layer.

    Args:
        layer: Layer to make active, if provided.
    """
    if layer:
        APP.activeDocument.activeLayer = layer
    d1 = ActionDescriptor()
    r1 = ActionReference()
    d1.PutClass(sID("new"), sID("channel"))
    r1.PutEnumerated(sID("channel"), sID("channel"), sID("mask"))
    d1.PutReference(sID("at"), r1)
    d1.PutEnumerated(sID("using"), sID("userMaskEnabled"), sID("revealAll"))
    APP.Executeaction(sID("make"), d1, NO_DIALOG)

src.helpers.masks.copy_to_mask(target: Union[ArtLayer, LayerSet], source: Union[ArtLayer, LayerSet, None] = None)

Copies the pixels of the current layer, creates a mask on target layer, enters that layer's mask, and pastes to the mask before exiting the mask.

Parameters:

Name Type Description Default
target ArtLayer | LayerSet

Layer to create a mask on and paste the copied pixels.

required
source ArtLayer | LayerSet | None

Layer to copy pixels from, use active if not provided.

None
Source code in src\helpers\masks.py
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
def copy_to_mask(
    target: Union[ArtLayer, LayerSet],
    source: Union[ArtLayer, LayerSet, None] = None,
):
    """Copies the pixels of the current layer, creates a mask on target layer,
    enters that layer's mask, and pastes to the mask before exiting the mask.

    Args:
        target: Layer to create a mask on and paste the copied pixels.
        source: Layer to copy pixels from, use active if not provided.
    """

    # Select canvas and copy
    docref = APP.activeDocument
    if source:
        docref.activeLayer = source
    docsel = docref.selection
    select_canvas(docref)
    docsel.copy()
    docsel.deselect()

    # Create a mask, enter, paste, and exit
    docref.activeLayer = target
    create_mask()
    enter_mask_channel()
    docref.paste()
    enter_rgb_channel()

src.helpers.masks.delete_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None

Removes a given layer's mask.

Parameters:

Name Type Description Default
layer ArtLayer | LayerSet | None

ArtLayer ore LayerSet object, use active layer if not provided.

None
Source code in src\helpers\masks.py
281
282
283
284
285
286
287
288
289
290
291
292
293
def delete_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """Removes a given layer's mask.

    Args:
        layer: ArtLayer ore LayerSet object, use active layer if not provided.
    """
    if layer:
        APP.activeDocument.activeLayer = layer
    desc1 = ActionDescriptor()
    ref1 = ActionReference()
    ref1.putEnumerated(sID("channel"), sID("ordinal"), sID("targetEnum"))
    desc1.putReference(sID("target"), ref1)
    APP.executeAction(sID("delete"), desc1, NO_DIALOG)