Create Hook LoRA
The node that turns a LoRA file into a schedulable, maskable patch
- prev_hooks
- HOOKS
A normal LoRA loader applies the LoRA to the whole model at one strength for the whole run. CreateHookLora ("Create Hook LoRA") is the node that breaks that contract: it loads a LoRA and wraps it as a hook, which means the LoRA can now be masked to a region of the image, scheduled to fade in and out across sampling, or stacked with other hooks - none of which a plain loader can do. It's the foundation node of ComfyUI's hooks system, and it's the first thing to reach for when "one number for everything" stops being good enough.
How it works
Hooks landed in ComfyUI core around December 2024 - the "mask and schedule LoRA and model weights" release - as weight patches that ride along on conditioning. This node loads a LoRA file from models/loras and registers its weights as a hook with two strengths: strength_model for the diffusion model (UNet/DiT) and strength_clip for the CLIP text encoder. The output HOOKS group doesn't do anything on its own; it has to be attached to conditioning via a Set Props node, at which point the sampler applies the LoRA's weights to whatever pixels that conditioning owns, at whatever strength the keyframe schedule says.
The node caches the last-loaded LoRA, so re-running with the same file skips the disk load. And if both strengths are 0, it skips creating a patch entirely and just passes the previous hooks through - a neat way to build a "disabled" branch that still routes.
The inputs
lora_name- dropdown of everything inmodels/loras. Same folder your normal loaders read.strength_model- the model patch strength, −20 to 20. 1.0 = the LoRA's native strength.strength_clip- the CLIP patch strength. If the LoRA's trigger word is baked in, keep this near 1.0; if the LoRA is a pure weight-space effect, 0 is cleaner.prev_hooks- an existing HOOKS group to chain onto, so one wire can carry several LoRAs.
Output: a single HOOKS group.
What people actually do with it
The flagship use, straight from the announcement and the threads that followed: regional LoRA. Two CreateHookLora nodes, two different character LoRAs, each wired into a PairConditioningSetPropertiesAndCombine with a mask over half the image - and the two characters coexist with no attribute bleeding, something regional-prompting tools on A1111 could never quite pull off for weights. Add a third global prompt via a "Set Default Combine" node so the halves don't look stitched, and you've got the setup people call glorious when it works.
Scheduling is the other half: feed the HOOKS into SetHookKeyframes with a ramp from CreateHookKeyframesInterpolated and the LoRA's strength animates across the run.
The honest gotchas
Performance is the big one. Each hooked conditioning runs a separate model pass, and a two-region LoRA workflow is noticeably slower than a plain generation - community benchmarks on 4070-class and 4090 cards report several-fold slowdowns. GGUF is the other one: early on, the hook system's LoRA loading didn't support GGUF-format LoRAs and Flux users hit errors; if your LoRA is GGUF and it fails here, try the .safetensors version. Both are known, real frictions, not things you imagined.
It ships with ComfyUI core - nothing to install, no Manager - and it's marked experimental like the rest of the family. Under advanced → hooks → create.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| lora_name | COMBO | 0 options: | |
| strength_model | FLOAT | 1.00-20–20 | — |
| strength_clip | FLOAT | 1.00-20–20 | — |
| prev_hooksopt | HOOKS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| HOOKS | HOOKS | — |