BrushNet Model Loader
The Node That Builds Your BrushNet — and Why It's Already Half-Retired
- model
- clip
- vae
- ip_adapter
- brushnet
First, the honest version of the title: this node still works, but the author - Kijai, one of the most prolific ComfyUI wrapper devs around - put a banner on the README telling you to use a different pack instead. If you're here because a workflow from 2024 told you to add it, read on. If you're choosing in 2026, you may want the native implementation (nullquant/ComfyUI-BrushNet) or, honestly, an instruction-editing model for most inpainting jobs. The mechanics below still hold for either path.
What it is
BrushNet Model Loader is the entry point to the whole pack. It takes a MODEL, CLIP, and VAE (any SD 1.5 checkpoint - the loader builds the pipeline from configs/v1-inference.yaml, so this is SD 1.5 territory, full stop) and bolts a BrushNet inpainting model onto it, producing a single BRUSHNET object that the pack's sampler nodes consume.
BrushNet itself is TencentARC's March 2024 "plug-and-play" inpainting approach: instead of fine-tuning a whole inpainting checkpoint, you attach a second branch that feeds the masked image features straight into the UNet alongside the noisy latent. The model gets told exactly what's under the mask instead of guessing from a masked input, which is why its edge blending was noticeably better than plain inpaint-anywhere for its era. It's inpainting's answer to ControlNet's insight: separate the what from the where.
The model dropdown
The brushnet_model enum is where you pick weights. All three auto-download from Kijai's HuggingFace repo (Kijai/BrushNet-fp16) into ComfyUI/models/brushnet on first use, so there's no manual file hunt:
- brushnet_segmentation_mask (default) - trained on real object/segmentation masks. This is the one nearly every example workflow uses.
- brushnet_random_mask - trained on random blobs; more forgiving if your mask is rough or hand-painted.
- powerpaint_v2_brushnet - PowerPaint's weights, which also pull in a separate text encoder. Pick this only if you're pairing it with the PowerPaint BrushNet Sampler; the plain sampler will refuse to run it.
The optional ip_adapter input (type DIFFUSERSIPADAPTER) lets the sampler drive prompting from a reference image instead of text alone - it comes from the pack's brushnet_ipadapter_matteo node, not from ComfyUI's own IPAdapter nodes.
Wiring it up
Output brushnet feeds straight into BrushNet Sampler (or the PowerPaint/ELLA variants). The checkpoint's MODEL/CLIP/VAE get baked in at load time, so changing the checkpoint means re-running this node - nothing else in the graph changes.
Installing
Via ComfyUI Manager, search "BrushNet" and install ComfyUI-BrushNet-Wrapper from git, then restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-BrushNet-Wrapper
cd ComfyUI-BrushNet-Wrapper
pip install -r requirements.txt
Portable installs run the same from the ComfyUI_windows_portable folder:
python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\ComfyUI-BrushNet-Wrapper\requirements.txt
The heavy dependencies are diffusers>=0.27.2, accelerate, and omegaconf - that's a whole HuggingFace diffusers stack dropped into your ComfyUI, which is exactly why this wrapper eventually lost to the native port. First run downloads the fp16 models (roughly 3–5 GB depending on selection), so budget a few minutes and don't panic at the console spam.
Where people get burned: expecting an SDXL checkpoint to work (it won't - SD 1.5 config only), and forgetting that this pack builds its own diffusers pipeline, so your usual KSampler settings don't apply. The sampler nodes carry their own scheduler dropdown instead. If that friction sounds annoying, it is - and it's the reason the author recommends the native implementation now.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| brushnet_model | COMBO | brushnet_segmentation_mask | 3 options: brushnet_segmentation_mask, brushnet_random_mask, powerpaint_v2_brushnet |
| ip_adapteropt | DIFFUSERSIPADAPTER | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| brushnet | BRUSHNET | — |