Nodes/ComfyUI-LZNodes/LZ Anima Artist Cross-Attn (v2)
ComfyUI Node

LZ Anima Artist Cross-Attn (v2)

Inject artist styles straight into cross-attention instead of hoping the tags blend

By liz-ils·Created 7 months ago·Updated 12 days ago· 1
LZ Anima Artist Cross-Attn (v2)
  • model
  • artist_pack
  • advanced_options
  • model
  • base_prompt
  • positive_text
combine_modeoutput_avg
fusion_modeinterpolate
strength1.00
enabledtrue
apply_to_uncondfalse

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), or lowrank_avg (project through a low-rank bottleneck; the pack's flagship trick for finding a consensus style direction, tuned by the Options node's lowrank_k).
  • fusion_mode - how the injected artist attention combines with the base prompt: interpolate (blend base and artist - the default), concat_with_base, or base_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 enabled toggled 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.

CategoryMyCustomNodes/Anima

Inputs (8)

NameTypeDefaultDescription
modelMODEL
artist_packANIMA_PACK
combine_modeCOMBOoutput_avg3 options: concat, output_avg, lowrank_avg
fusion_modeCOMBOinterpolate3 options: interpolate, concat_with_base, base_preserve
strengthFLOAT1.000–4Artist 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.
enabledBOOLEANtrue
apply_to_uncondBOOLEANfalse
advanced_optionsoptANIMA_OPTS

Outputs (3)

NameTypeDescription
modelMODEL
base_promptCONDITIONING
positive_textSTRING