ComfyUI Node

IPAdapter V2

The IP-Adapter apply node, without the bells

By chflame163·Created 2 years ago·Updated 2 years ago· 55
IPAdapter V2
  • model
  • ipadapter
  • image
  • attn_mask
  • MODEL
weight1.00
start_at0.000
end_at1.000
weight_type

If you downloaded a workflow from the IP-Adapter era and wondered which node was actually doing the work, it's probably this one. IPAdapterV2 is the plain apply node: feed it a model, an ipadapter pipe from the Unified Loader, and a reference image, and it injects that image's CLIP embedding into the model's attention path via decoupled cross-attention. That's the whole trick behind IP-Adapter - the image conditioning runs through its own cross-attention layers alongside the frozen text path, so your prompt keeps working instead of getting steamrolled by the reference.

In this pack it maps to the "Simple" apply node from cubiq's original, renamed for coexistence. It's the least configurable of the apply nodes - which is exactly why it's the one to start with. The IPAdapterAdvancedV2 and its descendants give you combine_embeds and embeds_scaling knobs; this one keeps it to the four settings that actually matter for a first run.

The inputs that matter:

  • weight - how hard the reference pushes. The community sweet spot is 0.3–0.6; above 0.7–0.8 the reference starts overriding your prompt. For style transfer you'll lean higher, 0.6–0.8.
  • start_at / end_at - which fraction of the denoising steps the adapter is active. This is the detail-preservation lever: running IP-Adapter across all steps measurably softens output. Start it at 0.0 and end it early (say 0.7–0.8) and you keep more fine detail while the composition is set early.
  • weight_type - three options, and the naming is honest: standard is linear, prompt is more important eases the image influence out, style transfer emphasizes the reference. Internally these map to the weight-curve types of the advanced node.

The optional attn_mask is worth knowing about even if you don't use it today: hand it a mask and IP-Adapter only conditions the masked region, which is how the regional workflows hold a face or a character while leaving the rest of the frame to the prompt.

The single output is MODEL - a patched clone of your checkpoint - and it chains straight into your sampler, or into another apply node if you're stacking adapters.

Wiring it up

CheckpointLoader → IPAdapterUnifiedLoaderV2 ──model──→ IPAdapterV2 ──→ KSampler
                                    └──ipadapter──┘         ↑
                                          LoadImage ────────┘

Install

Same pack story as every node here: chflame163/ComfyUI_IPAdapter_plus_V2, a GPL-3.0 fork of cubiq's pack with V2-renamed nodes so it coexists with the original. Install via ComfyUI Manager (search ComfyUI_IPAdapter_plus_V2) or:

cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_IPAdapter_plus_V2

Restart, then make sure the adapter weights are in ComfyUI/models/ipadapter/ and the CLIP vision encoder in ComfyUI/models/clip_vision/. No pip requirements for this node.

Where people get burned

Mostly the weight. A reference at weight 1.0 will eat your prompt, and then you blame the node. Dial back to 0.5, end the adapter at step 0.8, and suddenly the prompt matters again. Second-most common: forgetting the loader entirely and dropping an image straight into the image socket with no ipadapter - you'll get a clear "Please load the models with the IPAdapterUnifiedLoader node" error, which is the pack's way of saying wire up the loader first. And remember the scope: this is an SD 1.5 / SDXL tool. It won't patch Flux or newer models, so if you're past SDXL this page is archaeology.

Categoryipadapter

Inputs (8)

NameTypeDefaultDescription
modelMODEL
ipadapterIPADAPTER
imageIMAGE
weightFLOAT1.00-1–3
start_atFLOAT0.0000–1
end_atFLOAT1.0000–1
weight_typeCOMBO3 options: standard, prompt is more important, style transfer
attn_maskoptMASK

Outputs (1)

NameTypeDescription
MODELMODEL