Nodes/BrushNet/PowerPaint CLIP Loader
ComfyUI Node Runs on cloud

PowerPaint CLIP Loader

Merges the task-prompt weights the PowerPaint node needs

By nullquant·Created 2 years ago·Updated about a year ago· 947
PowerPaint CLIP Loader
    • clip
    base
    powerpaint

    PowerPaint's whole trick is doing five different inpainting jobs - text-guided edits, shape-guided, object removal, context-aware fill, outpainting - from one model, switched by a learned "task prompt" instead of five separate fine-tunes. Those task-prompt embeddings don't live inside a normal CLIP text encoder; they're a separate file the PowerPaint authors trained alongside the base SD1.5 text encoder. This node's entire job is gluing those two pieces together into one CLIP object that the PowerPaint node can actually consume.

    If you're using the base BrushNet node, you don't need this at all - it uses your regular CLIPTextEncode setup like any normal workflow. This loader exists purely for the PowerPaint node's clip input.

    Inputs and outputs

    Two dropdowns, both populated by scanning your model folders - they'll show nothing until you've actually placed the files:

    • base - your SD1.5 text encoder (model.safetensors, or the fp16 variant), which the README points to from nmkd/stable-diffusion-1.5-fp16 or ashllay/stable-diffusion-v1-5-archive on HuggingFace. This goes in models/clip.
    • powerpaint - the PowerPaint task-prompt weights (pytorch_model.bin), downloaded from JunhaoZhuang/PowerPaint-v2-1 on HuggingFace. This one goes in models/inpaint, alongside the PowerPaint diffusion weights.

    Output: a single clip socket, which feeds the PowerPaint node's clip input specifically - not the base BrushNet node.

    Installing it

    Bundled with the whole pack, no separate install. ComfyUI Manager: search "BrushNet," install, restart. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/nullquant/ComfyUI-BrushNet && pip install -r requirements.txt.

    For the files themselves, you need three total for PowerPaint to work end to end, and this loader consumes two of them: from JunhaoZhuang/PowerPaint-v2-1 on HuggingFace, grab both diffusion_pytorch_model.safetensors (goes to the BrushNet Loader node instead, as the powerpaint model) and pytorch_model.bin (goes here, as the powerpaint input). Then the SD1.5 text encoder model.safetensors for the base input.

    Common issues

    Filename collisions, again. This is the recurring failure mode across the whole pack - PowerPaint's diffusion_pytorch_model.safetensors shares a filename with BrushNet's own checkpoint downloads, and multiple PowerPaint-related files can land with generic names too. The fix the community actually landed on, documented in the pack's own support threads: rename each download to something specific before you place it - PowerPaint_v2.safetensors for the diffusion weights, and keep pytorch_model.bin in its own dedicated PowerPaint subfolder under models/inpaint rather than mixed in with BrushNet's checkpoints.

    Forgetting the SD1.5 text encoder is a separate file. It's easy to assume your regular checkpoint's CLIP will do, but PowerPaintCLIPLoader wants an explicit standalone text encoder in models/clip - if the base dropdown is empty, that's almost always the reason.

    Empty dropdowns generally. Both fields only populate from files that already exist in the right folder. If either is blank, the fix is always "download the file and put it in the right place," not a config setting to hunt for.

    Categoryinpaint

    Inputs (2)

    NameTypeDefaultDescription
    baseCOMBO0 options:
    powerpaintCOMBO0 options:

    Outputs (1)

    NameTypeDescription
    clipCLIP