Register LoRA Hook ππ π
Loading a LoRA that only fires when you tell it to
- model
- clip
- MODEL
- CLIP
- HOOKS
This is the entry point to the pack's LoRA Hooks system - the README calls it "Maskable and Schedulable SD LoRA (and Models as LoRA) for both AnimateDiff and StableDiffusion usage via LoRA Hooks." A normal LoraLoader applies a LoRA globally, for the whole run, the moment it's wired in. This node instead registers a LoRA as a HOOKS object that does nothing on its own - you then attach that hook to a specific piece of conditioning (with ADE_AttachLoraHookToCLIP or a conditioning-side equivalent) so the LoRA only activates when that particular conditioning is actually driving generation.
That's a genuinely different capability from a standard LoRA: masked or scheduled LoRA influence, tied to which prompt or which frame range is active, rather than one flat effect for the whole clip. It's also, honestly, one of the least-used corners of this pack - worth using deliberately once you need it, not something to reach for by habit.
How it works
You give it a model and clip, the same as LoraLoader, plus the LoRA file and its strengths. Under the hood it applies the LoRA the same way a standard loader would - but instead of returning a model/clip you use directly everywhere, it also hands back a HOOKS handle representing that specific application. The MODEL/CLIP outputs here are the hooked versions; the real payoff is the HOOKS output, which downstream nodes use to selectively gate where that LoRA's effect actually applies.
The inputs and outputs that matter
All five required inputs, same shape as a standard LoRA loader: model and clip (what you're applying the LoRA to), lora_name (a dropdown of your LoRA files), strength_model and strength_clip (both default 1, range β20 to 20).
Three outputs: MODEL and CLIP (the hooked versions - usually you route the unhooked base model/clip elsewhere in your graph and only pull the hooked versions where you specifically want gated behavior), and HOOKS - the handle you feed into ADE_AttachLoraHookToCLIP or a similar attach node to actually gate where the LoRA fires.
How to install it
Standard for the pack - ComfyUI Manager, search AnimateDiff Evolved by Kosinkadink, or:
cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
You need whatever LoRA file you're registering, in your normal LoRA folder, same as any standard LoraLoader. No AnimateDiff-specific download tied to this node.
Common issues & troubleshooting
LoRA seems to apply everywhere anyway, not just where you attached the hook. Check that you're routing the unhooked model/clip outputs of this node - or your original checkpoint's outputs - to the parts of your graph that shouldn't have the LoRA, rather than accidentally using this node's MODEL/CLIP outputs globally. The hook mechanism gates conditioning, but if you also wired the hooked model straight into your sampler, the LoRA is active regardless of any hook.
Not sure what to do with the HOOKS output. It's inert on its own - you need a follow-up node like ADE_AttachLoraHookToCLIP to actually tie it to a piece of conditioning before it does anything. This node is step one of a two-step system, not a complete feature by itself.
Wondering if this is overkill for your workflow. For most AnimateDiff work, it is. If you just want one LoRA active for the entire clip, a plain LoraLoader is simpler and does the job. Reach for LoRA Hooks specifically when you need a LoRA to apply only to part of a scheduled prompt sequence, or only during certain frames - a genuinely narrow, advanced use case.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| clip | CLIP | β | |
| lora_name | COMBO | 0 options: | |
| strength_model | FLOAT | 1.00-20β20 | β |
| strength_clip | FLOAT | 1.00-20β20 | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | β |
| CLIP | CLIP | β |
| HOOKS | HOOKS | β |