Skip to content

Masks

MASK HELPERS

apply_mask(layer=None)

Applies a given layer's mask. @param layer: ArtLayer or LayerSet object, use active layer if not provided.

Source code in src/helpers/masks.py
124
125
126
127
128
129
130
131
132
133
134
135
136
def apply_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """
    Applies a given layer's mask.
    @param layer: ArtLayer or LayerSet object, use active layer if not provided.
    """
    if layer:
        select_layer(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)

apply_mask_to_layer_fx(layer=None)

Sets the layer mask to apply only to layer effects in blending options. @param layer: ArtLayer or LayerSet object.

Source code in src/helpers/masks.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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.
    @param 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)

copy_layer_mask(layer_from, layer_to)

Copies mask from one layer to another. @param layer_from: Layer to copy from. @param layer_to: Layer to copy to.

Source code in src/helpers/masks.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def copy_layer_mask(
    layer_from: Union[ArtLayer, LayerSet],
    layer_to: Union[ArtLayer, LayerSet]
) -> None:
    """
    Copies mask from one layer to another.
    @param layer_from: Layer to copy from.
    @param 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)

copy_vector_mask(layer_from, layer_to)

Copies vector mask from one layer to another. @param layer_from: Layer to copy from. @param layer_to: Layer to copy to.

Source code in src/helpers/masks.py
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def copy_vector_mask(
    layer_from: Union[ArtLayer, LayerSet],
    layer_to: Union[ArtLayer, LayerSet]
) -> None:
    """
    Copies vector mask from one layer to another.
    @param layer_from: Layer to copy from.
    @param 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)

delete_mask(layer=None)

Removes a given layer's mask. @param layer: ArtLayer ore LayerSet object, use active layer if not provided.

Source code in src/helpers/masks.py
139
140
141
142
143
144
145
146
147
148
149
150
def delete_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """
    Removes a given layer's mask.
    @param 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)

disable_mask(layer=None)

Disables a given layer's mask. @param layer: ArtLayer object.

Source code in src/helpers/masks.py
116
117
118
119
120
121
def disable_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """
    Disables a given layer's mask.
    @param layer: ArtLayer object.
    """
    set_layer_mask(layer, False)

disable_vector_mask(layer=None)

Disables a given layer's vector mask. @param layer: ArtLayer object.

Source code in src/helpers/masks.py
182
183
184
185
186
187
def disable_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """
    Disables a given layer's vector mask.
    @param layer: ArtLayer object.
    """
    set_layer_vector_mask(layer, False)

enable_mask(layer=None)

Enables a given layer's mask. @param layer: ArtLayer object.

Source code in src/helpers/masks.py
108
109
110
111
112
113
def enable_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """
    Enables a given layer's mask.
    @param layer: ArtLayer object.
    """
    set_layer_mask(layer, True)

enable_vector_mask(layer=None)

Enables a given layer's vector mask. @param layer: ArtLayer object.

Source code in src/helpers/masks.py
174
175
176
177
178
179
def enable_vector_mask(layer: Union[ArtLayer, LayerSet, None] = None) -> None:
    """
    Enables a given layer's vector mask.
    @param layer: ArtLayer object.
    """
    set_layer_vector_mask(layer, True)

set_layer_mask(layer=None, visible=True)

Set the visibility of a layer's mask. @param layer: ArtLayer object. @param visible: Whether to make the layer mask visible.

Source code in src/helpers/masks.py
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def set_layer_mask(
    layer: Union[ArtLayer, LayerSet, None] = None,
    visible: bool = True
) -> None:
    """
    Set the visibility of a layer's mask.
    @param layer: ArtLayer object.
    @param 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)

set_layer_vector_mask(layer=None, visible=False)

Set the visibility of a layer's vector mask. @param layer: ArtLayer object. @param visible: Whether to make the vector mask visible.

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
def set_layer_vector_mask(
    layer: Union[ArtLayer, LayerSet, None] = None,
    visible: bool = False
) -> None:
    """
    Set the visibility of a layer's vector mask.
    @param layer: ArtLayer object.
    @param 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)