ComfyUI Node

chx_IPA_basic

IP-Adapter, wired the way you'll actually use it

By cardenluo·Created 2 years ago·Updated 21 days ago· 309
chx_IPA_basic
  • model
  • image
  • attn_mask
  • image_negative
  • model
  • image
  • mask
preset
weight1.00
weight_type
combine_embeds
start_at0.000
end_at1.000
embeds_scaling

IP-Adapter is the oldest trick in the "make my output look like this reference picture" book - hand it an image, it conditions your model on what that image looks like, no LoRA training required. chx_IPA_basic is Apt_Preset's default entry point into that trick: one node, a preset dropdown, and the handful of knobs people actually touch, instead of the sprawl of separate loader + apply nodes the reference implementation needs.

What it's doing, and where it fits

Under the hood this is the same idea as cubiq's ComfyUI_IPAdapter_plus, the de facto reference implementation for IP-Adapter in ComfyUI: an image encoder turns your reference into embeddings, and the model gets patched so those embeddings steer generation through their own attention path, leaving your text prompt free to keep working alongside it. That's the whole trick - a 22M-parameter adapter riding on a frozen base model, which is why it's cheap and why it generalizes across checkpoint fine-tunes.

It's worth knowing IP-Adapter's real boundary before you reach for this node: it's strongest on SD 1.5, usable on SDXL, and it does not exist for Flux or newer architectures - nobody, including the original Tencent AI Lab team, ever shipped Flux weights for it. If you're on a Flux or Kontext-family workflow, this node (and its siblings in the chx_IPA_* family) aren't the tool; Apt_Preset's separate "redux_stack" / "union_stack" controls in its Kontext-oriented samplers are built for that instead.

The inputs and outputs that matter

  • model and image - your base model and the reference picture to condition on.
  • preset - six choices: STANDARD, LIGHT (SD1.5 only), VIT-G, PLUS, PLUS FACE, FULL FACE (SD1.5 only). This is the setting that actually decides behavior. PLUS is the usual default for general style transfer - it uses patch-level tokens instead of one global vector, so output tracks the reference more closely than STANDARD does. PLUS FACE/FULL FACE crop and encode just the face region, which is the sellable, non-face-recognition way to get face conditioning (see chx_IPA_faceID below if you want the stronger, license-restricted version).
  • weight (default 1, range -1 to 5) - how hard the reference pushes. The community's working range is 0.6–0.8 for style transfer and 0.3–0.5 for face similarity; push past ~0.8 and the reference starts overriding your prompt entirely.
  • weight_type, combine_embeds, embeds_scaling - advanced knobs (linear/ease-in/composition/style-transfer weighting curves, how multiple embeddings combine, and V-only vs K+V attention scaling). Leave these at default until weight and preset alone aren't giving you what you want.
  • start_at / end_at (0–1, step fraction of the sampling process) - restrict the adapter to a range of steps rather than all of them. Running it only early preserves more fine detail in the output; running it across every step measurably softens the image.
  • Optional attn_mask to restrict the effect to part of the canvas, and image_negative to steer away from a reference instead of toward one.

Outputs are model (patched, wire it to your sampler), image (passthrough), and mask.

Installing it

Through ComfyUI Manager: search ComfyUI-Apt_Preset, install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git

then run install.bat on Windows for dependencies, restart ComfyUI. You'll also need the actual IP-Adapter model files and a CLIP vision encoder in your models/ipadapter and models/clip_vision folders - this node applies IP-Adapter, it doesn't ship the weights. The Apache 2.0 CLIP-based variants (base, Plus, Plus Face, Full Face) are on Hugging Face under h94/IP-Adapter.

Common issues

Output looks nothing like the reference, or completely overrides your prompt. That's the weight knob - too low and the adapter barely registers, too high and it steamrolls the text prompt. Start around 0.6–0.8 for style and dial down for anything face-related.

Faces come out soft or generic. Known limitation, not a misconfiguration: IP-Adapter conditions on the face region reasonably well but loses outfit, hair, and body details elsewhere in the frame, and running it across all sampling steps costs detail overall. Tighten start_at/end_at to the earlier steps, and if you specifically need identity rather than resemblance, that's what chx_IPA_faceID is for - different tradeoff, different license.

It does nothing on your Flux or Kontext workflow. Expected - see above. This whole node family targets SD 1.5/SDXL-class models.

CategoryApt_Preset/chx_tool/chx_IPA

Inputs (11)

NameTypeDefaultDescription
modelMODEL
imageIMAGE
presetCOMBO6 options: STANDARD (medium strength), LIGHT - SD1.5 only (low strength), VIT-G (medium strength), PLUS (high strength), PLUS FACE (portraits), FULL FACE - SD1.5 only (portraits stronger)
weightFLOAT1.00-1–5
weight_typeCOMBO15 options: linear, ease in, ease out, ease in-out, reverse in-out, weak input, +9
combine_embedsCOMBO5 options: concat, add, subtract, average, norm average
start_atFLOAT0.0000–1
end_atFLOAT1.0000–1
embeds_scalingCOMBO4 options: V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty
attn_maskoptMASK
image_negativeoptIMAGE

Outputs (3)

NameTypeDescription
modelMODEL
imageIMAGE
maskMASK