TS Studio Input (Mask)
Where the studio's painted mask lands in the graph
- mask
When you paint a mask in TS Image Studio's UI - the brush over the part of the image you want regenerated - the app has to get that mask into the underlying graph somehow. TS Studio Input (Mask) is the marker that does it: a placeholder node whose value the studio overwrites at run time with the painted mask it saved as a PNG (white = regenerate). Like all the studio markers, it's part of the backend template rather than something you configure as an end user - but knowing what it does is what makes a studio backend workflow readable.
How it works
Two required widgets, same pattern as the other markers:
param_name(defaultmask) - the identifier the studio uses to find this marker and set its value. Must be unique per workflow; this is the name you'll see in the studio's parameter list.value- the annotated upload name of the mask PNG (e.g.sub/mask.png [input]), which the studio writes at run time after you paint and it saves the file.
The optional label gives the marker a human-readable name in the studio UI instead of showing the raw param_name.
The single output is mask - a ComfyUI MASK, which is exactly what an inpainting sampler, a noise-mask conditioning node, or any mask-consuming node downstream wants. White pixels are the repaint region; that convention comes from the studio's own mask canvas, and it's the standard "white = regenerate" that mask-based inpainting in the KB uses throughout.
The mental model is the same as every studio marker: it's a slot in the template. Loaded as a plain ComfyUI workflow (without the studio), the marker just uses whatever value is sitting in the field - so a backend file is still runnable by hand.
Install and use
No extra dependencies - it ships with comfyui-timesaver.
cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt
As a backend builder, you wire the mask output into whatever consumes the mask (e.g. a Studio inpaint crop node or an inpainting sampler), give the marker a unique param_name, and let the studio fill the value. As a user who just opened a workflow and found this node: that's normal - it's the studio's wiring, not something to fix.
Common issues
- "The repaint isn't happening where I painted." The studio saves the mask with white = regenerate; if a downstream node interprets masks the other way around, the region is inverted. Check the mask output's preview before it reaches the sampler.
- "My mask is blank." The studio hasn't set the value for this run, or the
param_namedoesn't match what the studio's manifest expects. Duplicate names are the classic cause - each marker must be unique. - "I need the mask as an image, not a MASK." The output is the native MASK type; convert it with a mask-to-image node if a consumer needs IMAGE instead.
The honest scope: this marker does one thing - hand the studio's painted mask to the graph - and it does it invisibly. That invisibility is the point: the studio's whole design is that you never see these values being shuffled.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| value | STRING | Annotated upload name of the mask PNG the studio sets at run time. | |
| param_name | STRING | mask | Name the studio uses to find this marker and set its value (e.g. 'prompt', 'width', 'source_image'). Must be unique per workflow. |
| labelopt | STRING | Optional human-readable label shown in the studio UI instead of param_name. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| mask | MASK | — |