Apply Anima ControlNet-LLLite (sd-scripts)
Anima's only real ControlNet — and what it can actually do
- model
- image
- mask
- MODEL
If you've moved to Anima and found yourself missing ControlNet, this node is the reason you don't have to move back. Anima is a 2B DiT built on Cosmos-Predict2, not SDXL, which means every SD-era ControlNet file is structurally useless to it - no converter will save you. Apply Anima ControlNet-LLLite (sd-scripts) is kohya-ss's own port of ControlNet-LLLite to Anima, loading weights trained with their sd-scripts trainer and injecting them at inference time. It's the closest thing Anima has to a first-party ControlNet, and for one job - region-based editing and inpainting - it's genuinely good.
LLLite is the clever part. Instead of duplicating the whole encoder like classic ControlNet, it's a lightweight, LoRA-like module that injects a low-rank correction straight into the DiT's attention (and optionally MLP) projections. On every sampling step the node wraps apply_model, swaps in the LLLite forward pass for the target Linear layers, runs, then restores the originals - so the patch never leaks across model clones. The control image is resized to latent×8 and embedded by the v2 conditioning trunk into a per-token feature map that matches the DiT's token grid. That's why this node is tiny: no copied encoder, no new UNet to hold in VRAM.
The inputs that matter
model- your Anima checkpoint, loaded however you normally load it. The patched outputMODELfeeds your KSampler (or chains into another LLLite node).lllite_name- the.safetensorsweights, picked fromComfyUI/models/controlnet/.image- the control image. Any resolution; it gets auto-resized.strength- LLLite multiplier, default 1.0.start_percent/end_percent- the active sampling window. Defaults 0.0→1.0; shorten it if the condition is fighting the model late in denoising.mask(optional) - required when the weights are 4-channel (inpaint). White = inpaint area, black = keep.
Everything architectural - cond_emb_dim, target layers, ASPP, inpaint flags - is baked into the safetensors metadata and read automatically. Don't go looking for those knobs; changing them would just break loading.
Installing it
Manager will find it under ComfyUI-Anima-LLLite, or clone it the normal way:
cd ComfyUI/custom_nodes
git clone https://github.com/kohya-ss/ComfyUI-Anima-LLLite
Restart ComfyUI. There's no requirements.txt - this node is pure torch on top of ComfyUI's own APIs, so no dependency hell. Then grab weights from kohya-ss/Anima-LLLite on HuggingFace and drop them in ComfyUI/models/controlnet/.
Where people get burned
The rename. ComfyUI core shipped its own beta AnimaLLLiteApply node, which silently shadows any custom node with the same ID. So this node is now AnimaLLLiteApply_sdscripts (display: "Apply Anima ControlNet-LLLite (sd-scripts)"). Old workflows that saved the original node type will fail validation - the old type now resolves to the core node, which takes a MODEL_PATCH from ModelPatchLoader instead of loading weights directly. Fix is manual: delete the old node, add this one, rewire. Annoying, but there's no alias workaround.
The weights are what they are. kohya calls these "community starting points / references rather than strong production-grade ControlNets," and users agree - the Preview3-era pose, depth, lineart and scribble models barely move base v1.0 output even at high strength. If you want a pose pipeline, Illustrious is still the answer. The two models retrained for base v1.0 - inpainting-v2 and any-test-like-v2 (lineart/scribble/grayscale) - are the ones actually worth using, and the inpaint model is the star: it's the base of several well-received Anima image-editing workflows.
Inpaint weights demand a mask. Load a 4-channel weight without one and you get a ValueError, not a silent fallback - that's intentional. And legacy pre-v2 weights (keys like lllite_modules.0.*) are rejected outright; retrain against current sd-scripts.
Cascading. Chain multiple LLLite nodes by feeding one node's MODEL output into the next's model input. preserve_wrapper (default True) makes them stack instead of overwriting each other - leave it on unless you know why you're turning it off.
The honest summary: this is a minimal reference implementation, and it feels like one. But for inpainting-based editing on Anima, it's the tool.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| lllite_name | COMBO | 0 options: | |
| image | IMAGE | — | |
| strength | FLOAT | 1.00-10–10 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 1.0000–1 | — |
| preserve_wrapper | BOOLEAN | true | — |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |