Nodes/ComfyUI Nodes for External Tooling/Apply ControlNet (tooling-nodes)
ComfyUI Node

Apply ControlNet (tooling-nodes)

Apply an Anima LLLite control image with strength and timing

By Acly·Created 3 years ago·Updated about a month ago· 668
Apply ControlNet (tooling-nodes)
  • model
  • control_net
  • image
  • mask
  • model
strength1.00
start_percent0.000
end_percent1.000

The second half of the Anima LLLite control pair. ETN_control_load pulls in the weights; ETN_control_apply is where you feed the actual control image - an edge map, a pose, whatever the weights expect - and dial in how hard and how long it steers generation. Its description states the scope plainly: "Applies ControlNet conditioning. Currently only supports Anima LLLite weights." So it's Anima-only, and it's the node that gives that model the structural control it shipped without.

It's part of Acly's tooling-nodes pack, adapted from kohya's Anima-LLLite work. If you've used a normal Apply ControlNet node, the ideas transfer directly - strength, start, end - but the plumbing is different, because LLLite steers by patching the model rather than by adding a conditioning branch.

How it works

You give it the model and control object from ETN_control_load, plus your control image, and it patches the model so sampling follows the structure in that image. Because LLLite operates on the model, the output is a MODEL you route into your KSampler - not a CONDITIONING. That's the one thing to unlearn from standard ControlNet: there's no positive/negative conditioning passing through here, just a model going in and a controlled model coming out.

The two settings that decide the result are strength and timing. Strength scales how forcefully the control image is obeyed. The start/end percents control when during the sample it applies - and per the ControlNet KB, that timing is the parameter that matters most: the standing advice for structure-heavy work is to "release the condition once composition has formed rather than holding it through the whole sample," letting the model add its own detail in the later steps. Starting at 0 and ending around 0.5 guides only the composition phase.

The inputs and outputs that matter

  • model (MODEL) - the LLLite-prepared model from ETN_control_load.
  • control_net (ETN_CONTROL_NET) - the control object from ETN_control_load.
  • image (IMAGE) - the control image (your preprocessed condition map matching the loaded weights).
  • strength (FLOAT, default 1, range −10 to 10) - how hard to apply it. 1 is full; lower for a loose guide. It accepts a wide range, but you rarely want to stray far from 0.3–1.2.
  • start_percent / end_percent (FLOAT, 0–1, default 01) - the fraction of sampling where control is active. Narrow to the early phase (0 → ~0.5) to shape composition then let go.
  • mask (optional MASK) - limit the control to part of the image, for region-scoped structural control.

Output:

  • model (MODEL) - the controlled model. Wire it into your KSampler in place of the plain model.

How to install it

In the tooling-nodes pack. ComfyUI Manager: search ComfyUI Nodes for External Tooling, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/Acly/comfyui-tooling-nodes.git

then restart. You'll also need the Anima LLLite weights (loaded via ETN_control_load) and an Anima checkpoint - this path doesn't work with any other model family.

Common issues & troubleshooting

The control has no effect. First, confirm the output model actually feeds your sampler - if the KSampler is still on the unpatched model, nothing applies. Then check strength isn't near zero and start/end isn't a sliver.

It overpowers the prompt / looks rigid. Lower strength and, more importantly, pull end_percent back toward 0.4–0.6 so control shapes the composition and then hands off. Holding a structural condition through every step is what produces stiff, over-constrained output.

Type mismatch. The control_net input takes an ETN_CONTROL_NET from ETN_control_load - not a standard CONTROL_NET. And the whole pair is Anima-only; if you're not on Anima with LLLite weights, this won't run.

My condition image isn't doing what I expect. The control image has to match what the loaded LLLite weights were trained on. Loading one weight type and feeding a different kind of condition map gives muddy results - pair the preprocessed image to the weights you selected in ETN_control_load.

Categoryexternal_tooling

Inputs (7)

NameTypeDefaultDescription
modelMODEL
control_netETN_CONTROL_NET
imageIMAGE
strengthFLOAT1.00-10–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
maskoptMASK

Outputs (1)

NameTypeDescription
modelMODEL