Anima Artist Cross-Attn Mix
Even style blends on Anima
- model
- clip
- model
- conditioning
If you've poked at Anima for more than an hour, you've hit the wall this node exists for. Artist tags on Anima are overpowered - the community's word for it, not mine - but stack two of them in one prompt and the model usually picks a winner, or blends them into an indistinct mush you didn't ask for. Anima Artist Cross-Attn Mix fixes that by encoding each artist separately and blending their cross-attention outputs by explicit weight, so @(artist_a:2.0), @(artist_b:2.0) actually reads as "both, evenly" instead of "mostly whichever one the model knows better."
What it is
It's a single node under conditioning/anima, and it is Anima-specific in a way that matters: it hooks the DiT's cross-attention layers directly, so you can't drop it on an Illustrious or Pony checkpoint and expect anything. That's not a bug - Anima's @artist tags and its Qwen3/T5 text stack are exactly what makes the trick possible. Think of it as the Anima port of the old SDXL style-mixing trick: encode each style in isolation, then interpolate attention instead of hoping the tokenizer sorts it out.
How it works
The short version: the node parses your @-tagged artists out of the text, encodes the "bare" prompt (all artists stripped) plus one encoding per artist, caches the key/value projections for each through every block, then patches a clone of your model so each cross-attention pass computes:
out = (1 - sum(weights)) * bare_attn + weight_a * attn_a + weight_b * attn_b + ...
Because every artist gets its own clean encoding, a weaker artist isn't drowned out at the token level - you're weighting the attention output directly. The weights come from your tag syntax, and the cache is built once per generation, so the cost is a handful of extra text encodings, not per-step work. The only commit in the repo's history fixes a memory leak in that cache, which tells you both that the author cared and that you're on newish code.
The three inputs and two outputs
Inputs are just model, clip, and a multiline text box - that's the whole interface, no hidden settings.
modelandclipcome straight from your Anima checkpoint loader.textis your normal prompt with artists tagged. Syntax:@artist_name(weight 1.0),@(artist name:2.0)(explicit weight, spaces allowed),(@artist:1.5)(same thing, parentheses swapped), and@(artist:-2)to subtract a style. Anima usually wants artist weights at 2.0 or higher - the author's own description says so.
Both outputs matter, which is where people get burned: the model output replaces your model going into the KSampler, and the conditioning output replaces your positive conditioning. Wire both or you're not actually mixing anything.
The built-in NegPiP is the sleeper feature. Non-artist tags with negative weights - 1girl, @(artist_a:2.0), (speech bubble:-1.1), (signature:-1.3) - get subtracted via a sign mask on the T5 embeddings, with no comfyui-ppm or extra node. If you've been fighting to remove signatures and watermarks on Anima, that alone is worth the install.
Install
Trivial. No dependencies beyond what ComfyUI already ships (it uses einops, which is bundled), no model downloads.
cd ComfyUI/custom_nodes
git clone https://github.com/Localsmile/comfyui_anima_artist_cross_attn_mix
Restart ComfyUI, and it's under conditioning/anima. Or just search "comfyui_anima_artist_cross_attn_mix" in ComfyUI Manager and hit install.
Where people trip
- Only Anima. Feed it an SDXL checkpoint and the wrapper raises a
RuntimeError- the node looks fordiffusion_model.blocksand Anima'spreprocess_text_embeds. It's a feature; don't fight it. - Forgetting the conditioning output. The most common failure, and it fails silently - output looks normal, just not mixed. Both outputs go into the sampler.
- No
@tags = pass-through. If your text has no artists, the node is just a (slower) CLIP encoder. Use it only when you're actually blending. - Weight starvation.
@artist_a, @artist_bboth at 1.0 gives you a timid blend. Crank them toward 2.0+ and it reads as intentional.
Is this a pack you must install? Honestly, no - it's a small, specialist tool for a specific Anima workflow, and this is its whole surface area. But if you generate artist-style mashups on Anima, it's the difference between rolling dice and dialing in the mix. That's worth a clone.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| text | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| conditioning | CONDITIONING | — |