Anima Artist Adapter Mixer (Experimental)
Anima's LLM Encoder Blends Artist Tags Badly — This Node Mixes Them in Embedding Space, ~2x Faster
- model
- artist_pack
- advanced_options
- model
- base_prompt
Here's the problem this node exists for, in one sentence: Anima's text encoder is an LLM (Qwen3-0.6B), and when you drop wlop, sakimichan into one prompt it contextualizes them together - the styles blur, one eats the other, or the mix is just unpredictable. On SDXL anime models artist tags blend the way you'd expect; on Anima they interfere, because the encoder reads the prompt as a sentence, not a list.
The parent pack's older answer, Anima Artist Cross-Attn, encodes each artist separately against the base prompt and mixes the outputs inside every patched cross-attention layer. It works, but it's slow - the more artists you add, the slower it gets. Anima Artist Adapter Mixer (Experimental) is the alternative that does the mixing once, in the LLMAdapter embedding space, instead of patching per-layer attention - and the author measured close to double the generation throughput while keeping visual quality close. "Experimental" is an honest label: if the Cross-Attn node has you waiting, this is the path to test.
How it works
Feed it the artist_pack from Anima Artist Pack (Split + Encode) and it computes a per-token mix:
mixed = base + strength * perpendicular(sum(weight_i * artist_i) - base, base)
Read that as: average your artists, subtract the base to get the "artist delta", keep only the part perpendicular to the base, and add it back at strength. The perpendicular projection is what stops the base prompt's structure from being dragged along with the style. strength=1.0 is a normal mix; past 1.2 you're extrapolating style at the cost of structure.
The clever part is alignment_mode=base_anchored (the default). Each artist was encoded with its own full prompt, so their embedding rows don't line up. After the Adapter the node finds the base prompt's T5 token sequence inside each artist sequence, anchors matching rows, and slots unmatched artist rows into gap positions (exact suffix match, LCS fallback for tokenizer drift). Nothing gets pooled, truncated, or overwritten. shared_base_ids is the older A/B mode that hands every artist the same T5 target grid - simpler to reason about, but it replaces each artist's original target sequence and keeps less information.
The inputs you'll actually touch
model- your Anima checkpoint. The node checks for Anima'spreprocess_text_embedsadapter interface and rejects anything else.artist_pack- fromAnima Artist Pack (Split + Encode). All the encoding happens there; this node does no prompting itself.strength- default 1.0.0is pure base.normalize_weights- keep on, so1::wlop, 2::sakimichanis a 1:2 ratio, not 3x amplification.alignment_mode-base_anchoredis the default and what you want.apply_to_uncond/uncond_strength- leave off. Inbase_anchoredmode uncond is always preserved anyway; the wrapper never sees the negative prompt's T5 IDs to align against.
Optionally wire Anima Artist Options (Advanced) into advanced_options. That's where the Q-only anchor lives: enable artist_anchor_q, leave anchor_seed_list empty and anchor_seeds_count generates fresh style-reference seeds every run, or pin seeds like 42,12345 for repeatable cross-seed stabilization. warm_cache and adaptive_q reuse cached Q keyframes across sampler seeds - faster later runs, but the CPU cache can eat several GiB at 1024-class resolutions with the default 8 keyframes, so keep anchor_cache_points modest.
The node outputs model (to KSampler) and base_prompt (to KSampler positive). That's the whole workflow:
Anima Artist Pack -> Anima Artist Adapter Mixer -> KSampler model
|
+-> base_prompt -> KSampler positive
Two hard rules: use Anima's own CLIP/text loader (the same one its normal workflow uses), and never chain this with Anima Artist Cross-Attn - they're alternative algorithms, and chaining injects the artists twice. There's also an enabled toggle for A/B testing the patch.
Install
Via ComfyUI Manager (search "Anima Artist Mixer") or:
cd ComfyUI/custom_nodes
git clone https://github.com/An1X3R/Anima-Artist-Mixer
then restart ComfyUI. That's the whole install - zero Python dependencies, no model files to fetch; just an Anima checkpoint and its usual loader. It's inference-only.
Troubleshooting
The 26.8.3 release fixed a black-image/noise failure seen on RTX 50-series cards combined with dynamic VRAM/offload, interrupted sampling, and LoRA changes - if that sequence gives you blank frames, update the pack and re-run. Otherwise, expect the "Experimental" tax: warm_cache makes the first complete run slower, and first-run cost grows with how many anchor seeds you average. And keep expectations honest: Anima's encoder and adapter are highly non-linear, so no mixing path here is lossless like an SDXL artist chain. This node makes the tradeoff controllable and, on speed, substantially cheaper - that's the whole argument for it.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| artist_pack | ANIMA_PACK | — | |
| strength | FLOAT | 1.000–4 | Strength of the perpendicular artist delta in post-adapter embedding space. |
| normalize_weights | BOOLEAN | true | Normalize ::weights to relative artist ratios. |
| alignment_mode | COMBO | base_anchored | base_anchored keeps every artist's own Adapter input and aligns post-Adapter rows by T5 token IDs. shared_base_ids is the older common-target-grid mode. |
| enabled | BOOLEAN | true | — |
| apply_to_uncond | BOOLEAN | false | Experimental uncond mixing for shared_base_ids. base_anchored always preserves uncond because negative T5 IDs are unavailable for token alignment. |
| uncond_strength | FLOAT | 0.000–1 | — |
| advanced_optionsopt | ANIMA_OPTS | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| base_prompt | CONDITIONING | — |