LZ Anima Artist Cross-Attn (v2)
Inject artist styles straight into cross-attention instead of hoping the tags blend
- model
- artist_pack
- advanced_options
- model
- base_prompt
- positive_text
The community consensus on Anima is blunt: artist tags alone don't blend well ("Anima doesn't blend like Illustrious," "you need an actual style LoRA"). LZ Anima Artist Cross-Attn (v2) is this pack's workaround - instead of trusting the text encoder to merge artist names, it patches the model's cross-attention layers directly and injects each artist's encoded representation at a per-layer level. You feed it a model and an ANIMA_PACK from LZAnimaArtistPack, and it hands you a patched model plus a ready conditioning.
How it works
Mechanically it's a ComfyUI model patch: it wraps the cross-attention path (_CrossAttnWrapper) so that at each chosen layer, the query/key/value computation mixes in the per-artist conditioning from the pack. The controls matter more than the internals, though. In order of how often you'll touch them:
- combine_mode - how the artists merge into one injection:
concat(concatenate their representations),output_avg(average the outputs - the default and the safe start), orlowrank_avg(project through a low-rank bottleneck; the pack's flagship trick for finding a consensus style direction, tuned by the Options node'slowrank_k). - fusion_mode - how the injected artist attention combines with the base prompt:
interpolate(blend base and artist - the default),concat_with_base, orbase_preserve(keep the base prompt's influence intact). - strength - the headline dial. 0–1.0 interpolates between base and artist (
lerp(base, artist, strength)); 1.0–4.0 extrapolates past the artist (base + strength * (artist - base)). The tooltip's recommended 1.5–2.5 for extrapolation is where Anima artist styles really pop - and where overshoot turns to mush if you push too far. - enabled - a master on/off so you can A/B the injection without rewiring.
- apply_to_uncond - also patch the negative/unconditioned pass. Off by default; on, and the artist style bleeds into the negative branch too, which you usually don't want.
- advanced_options - an ANIMA_OPTS socket from LZAnimaArtistOptions for block ranges, EMA smoothing, static capture, anchor Q, and the rest of the deep end.
Outputs: model (patched), base_prompt (the base conditioning, so you can route it straight into a pipe or sampler), and positive_text (the prompt string, for logging).
Why "v2" matters
The versioning points at the two weight layers from the Pack node: :: weights feed this node's injection layer linearly, while bracket weights still ride the CLIP encoding layer. The two-stage design (pack encodes per-artist, this node injects) is what makes per-artist control possible at all - a plain prompt simply doesn't carry that information.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/liz-ils/ComfyUI-LZNodes
restart → LZNodes/Anima. ComfyUI Manager: ComfyUI-LZNodes. No extra dependencies.
Where people get burned
- Missing the pack upstream. This node requires an ANIMA_PACK; drop in an empty one (or a plain string) and you'll get a type error or a no-op. Pack → CrossAttn is the required pairing (or use the all-in-one LZAnimaArtistNode).
- Strength 1.0 is not "off." It's full interpolation; "off" is
enabledtoggled false. New users set strength 0 expecting neutral and get base-only - which is actually correct, but confusing. - Extrapolation above 1.5 gets chaotic fast on some artists; it's the difference between "stylized" and "the style ate the composition." Start at output_avg/interpolate/strength 1.2 and tune from there.
This is the node that makes Anima artist chains feel like a dial instead of a coin flip. It's fiddly - the README doesn't sugarcoat that, and neither should I - but it's also the most distinctive thing in the pack.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| artist_pack | ANIMA_PACK | — | |
| combine_mode | COMBO | output_avg | 3 options: concat, output_avg, lowrank_avg |
| fusion_mode | COMBO | interpolate | 3 options: interpolate, concat_with_base, base_preserve |
| strength | FLOAT | 1.000–4 | Artist injection strength. 0.0-1.0: interpolation lerp(base, artist, strength) 1.0-4.0: extrapolation base + strength * (artist - base) Recommended 1.5-2.5 for extrapolation. |
| enabled | BOOLEAN | true | — |
| apply_to_uncond | BOOLEAN | false | — |
| advanced_optionsopt | ANIMA_OPTS | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| base_prompt | CONDITIONING | — |
| positive_text | STRING | — |