Nodes/comfyui-anima-ipadapter/Anima IP-Adapter Apply
ComfyUI Node

Anima IP-Adapter Apply

Keep the same character in Anima without training a LoRA

By Wenaka2004·Created 4 months ago·Updated 4 months ago· 58
Anima IP-Adapter Apply
  • model
  • ipadapter
  • siglip_features
  • MODEL
start_at0.00
end_at1.00
weight1.00

Anima is the first anime model since Illustrious that made people switch, but it has the same gap every fresh base model has: hold a character or a style across generations and you're training a LoRA. This node is the fix. It's the IP-Adapter idea - reference image goes in, character comes out consistent, no training - rebuilt for Anima's 2B DiT instead of the SDXL CLIP stack where you're used to it. Feed it a character portrait and a prompt and Anima draws that same character doing whatever the prompt says.

There's real debate in the community about whether IP-Adapter is even worth your time in 2026 - edit models swallowed the character-consistency job, and plenty of people on the Anima announcement thread called adapters "borderline obsolete." But the counter-argument won there too: edit models are still notably bad at pure style transfer, and "noob ipadapter is still king" at that one job. This is the only node that gives Anima that trick at all.

How it works

The mechanism is the same decoupled cross-attention that made IP-Adapter famous, modernized. Your reference image goes through SigLIP2, gets pulled down to a set of learned query tokens by a timestep-aware Perceiver resampler, and then each of Anima's 28 DiT blocks gets an extra cross-attention layer that only looks at those image tokens. The node monkey-patches every block's cross_attn.forward to add the IP output onto the text attention output - text_attn + gate * ip_attn - leaving the text path untouched. That decoupling is the whole trick: the prompt still does its job, the reference just steers appearance.

One detail worth knowing because it explains why the node recomputes embeddings: the resampler is conditioned on the sampling timestep, so in principle the image tokens can be re-encoded as denoising progresses. In this build the hook actually encodes once at a fixed t=0.5 and applies the adapter at constant strength through the whole loop - the per-step wiring exists in the code but isn't connected in apply() yet. Net effect: weight is your real dial, and start_at / end_at are in the schema but don't gate anything as shipped.

Inputs and outputs that matter

The required inputs, of which a beginner actually touches two:

  • model - your Anima checkpoint, from any loader that outputs a MODEL.
  • ipadapter - the adapter object from Anima IP-Adapter Loader.
  • siglip_features - reference features from Anima SigLIP2 Encode Image. These are SigLIP2 patch features [1, N, 768], not a single global image vector - the old image_emb plug from the Qwen3-VL era won't fit this socket.
  • weight - global strength, 0 to 5, default 1.0. This is the one you'll actually set. 1.0 is a strong reference grip; dial toward 0.5–0.7 if the prompt stops winning against the reference.

Output is a single MODEL - the same model, with the hooks attached - which you wire straight into a KSampler and sample normally. Same prompt, same sampler, no special handling.

Install and gotchas

Install via ComfyUI Manager (search "Anima IP-Adapter") or:

cd ComfyUI/custom_nodes
git clone https://github.com/Wenaka2004/comfyui-anima-ipadapter
pip install -r comfyui-anima-ipadapter/requirements.txt

Two traps bite everyone here. First, you need an IP-Adapter checkpoint for the loader - and the README doesn't link one, so grab the v3 .safetensors from wherever the author publishes them or train your own with the scripts in training/. Second, if the loader errors with "v1/v2 checkpoint not compatible with v3 architecture," you have an older-format adapter and it will not work - retrain or find a v3 file, that's not a bug you can configure around.

The SigLIP2 encoder loads on first use (downloads google/siglip2-base-patch16-512), and the encode node is CUDA-only - no CPU path, so count a few hundred MB of VRAM on top of Anima while encoding. If your first run crashes with a download or out-of-memory error, that's the model coming down, not your workflow.

Categoryanima_ipadapter

Inputs (6)

NameTypeDefaultDescription
modelMODEL
ipadapterANIMA_IPADAPTER
siglip_featuresSIGLIP_FEATURESSigLIP2 patch features [1, N, 768]
start_atFLOAT0.000–1Start sigma for IP-Adapter
end_atFLOAT1.000–1End sigma for IP-Adapter
weightFLOAT1.000–5IP-Adapter strength

Outputs (1)

NameTypeDescription
MODELMODEL