This directory holds design notes and per-node documentation.
nodes/— one page per shipped node (inputs, outputs, typical use).- See the repository root
README.mdfor project scope and philosophy.
Every node in this repository treats MASK as the asset's alpha
channel: 1.0 = opaque content, 0.0 = fully transparent.
ComfyUI's built-in nodes use the opposite, inpainting-style
convention (1.0 = the masked-out/transparent area). Concretely,
verified against ComfyUI's source and a live instance:
LoadImage'sMASKoutput is1 - alpha. Connect it through coreInvertMaskbefore feeding it into any node here.JoinImageWithAlpha'salphainput expects the same inpainting-style mask (it does1 - alphainternally). So before baking one of ourMASKoutputs into a real PNG alpha channel forSaveImage, route it throughInvertMaskfirst too.- Plain
SaveImageignoresMASKentirely — it only saves the 3 channels inIMAGE. WithoutJoinImageWithAlpha, "transparent" pixels just save as whatever RGB value happens to be there (often black), not as a real alpha channel.
All four example workflows in examples/ show the
correct InvertMask placement on both ends of the pipeline. This was
caught by actually loading the nodes in a running ComfyUI instance and
inspecting pixel values — not obvious from unit tests alone, since our
own test suite only exercises this package's nodes in isolation.
No other node docs exist yet beyond the four listed in nodes/;
documentation lands alongside each node per
CONTRIBUTING.md.