Nodes/AnimaDualKVStyle/Anima Dual KV Style Lora Loader
ComfyUI Node

Anima Dual KV Style Lora Loader

Anima's style LoRAs are a different animal — this loader is why yours did nothing

By TheDucker1·Created 3 months ago·Updated 2 months ago· 0
Anima Dual KV Style Lora Loader
  • model
  • MODEL
lora_name
strength1.00
apply_ropetrue

If you've downloaded an Anima style adapter, dropped it into models/loras, plugged it into the built-in LoraLoader - and gotten nothing but the base model's deliberately plain output - this is the node you were missing. The Anima Dual KV Style Lora Loader is the only loader that understands how Anima style adapters are actually trained, and it quietly patches attention blocks the normal loader can't even see.

Here's the backstory. Anima (Circlestone Labs' 2B diffusion transformer on Cosmos-Predict2) escapes SDXL, which means its LoRAs escape SDXL conventions too. Style adapters for it are trained with something called the Dual KV Style Network: instead of low-rank deltas on the q/k/v projections, the trainer freezes the model and learns a small set of static key/value style vectors - 64 style tokens by default - plus a low-rank output bottleneck. During inference the model's own queries retrieve those vectors and the result is added to normal attention. A standard ComfyUI LoraLoader keys on lora_unet_*-style weight names; these files carry k_style, v_style, and out_proj_up weights instead. No match, no patch, no error.

How it works

The node is more of a network autodetector than a plain loader. It reads your .safetensors, inspects the keys, and picks one of three patch types:

  • Dual KV - the base style network (k_style / v_style keys)
  • Dual QKV - detected by route_down.weight
  • Dual QKV-KV - k_down / v_down keys, with an MoE experts variant flagged by v_router / v_down_experts

It then walks the Anima model's Attention modules (skipping the LLM adapter), wraps each one, and adds the style path: your query attends over the learned style KV, the result goes through the low-rank bottleneck, and gets added to the original attention output scaled by strength. Two details are worth knowing. apply_rope (default on) applies split-half Rotary Position Embedding to the queries before they attend to the style vectors, matching Anima's own RoPE implementation - the sd-scripts reference this is built from has RoPE commented out, so the node is doing the faithful thing. And it's CFG-aware: the style path touches only the positive branch, leaving the unconditional/negative path clean, with a compatibility shim for the Anima-NAG guidance node.

The inputs that matter

  • model - the Anima diffusion model to patch. It has to be Anima.
  • lora_name - your style adapter from models/loras.
  • strength - 0 to 10, default 1.0. Set to 0 and the style path is skipped entirely. These adapters are trained to be strong, so don't be shy about pushing past 1.
  • apply_rope - leave it on unless the adapter's trainer says otherwise.

Output is a single MODEL, wired straight into your KSampler like any other loader output. Multiple loaders chain cleanly - the node clones the model patcher per loader, so branch A's style can't bleed into branch B.

Install

ComfyUI Manager, search AnimaDualKVStyle, or the old-fashioned way:

cd ComfyUI/custom_nodes
git clone https://github.com/TheDucker1/animadualkvstyle.git

Then restart ComfyUI. That's it - the pack ships zero Python dependencies and downloads no models. You bring the Anima checkpoint (circlestone-labs/Anima on Hugging Face or CivitAI 2458426) and a Dual KV style adapter yourself.

Where people get burned

The silent-fail trap is real: feed this node a normal kohya-style LoRA, or an SDXL checkpoint, and it prints No matching Dual KV/QKV/QKV-KV layers found to the console and hands the model back untouched. No red error - just no style. Watch the console, not the preview. And remember Anima's version churn: adapters trained on Preview 2 or 3 degrade on the base v1.0 model, so match the adapter to the checkpoint it was trained for.

One honesty note: this is a young, single-maintainer project (v0.0.4/0.0.5, GPLv3), and the Dual KV method has essentially zero Reddit footprint beyond the Anima scene. It's the tool you reach for because it's the only option, not because it's battle-tested. But it's also the difference between Anima style LoRAs working and silently not - which, on a base model this plain, is most of the reason you're on Anima.

Categorymodel/loaders

Inputs (4)

NameTypeDefaultDescription
modelMODELThe diffusion model to apply the style to.
lora_nameCOMBOThe style adapter Lora model to load.
strengthFLOAT1.000–10Style strength multiplier.
apply_ropeBOOLEANtrueApply Rotary Position Embedding to Q before cross attend with custom KV path.

Outputs (1)

NameTypeDescription
MODELMODEL