LoRA Step Loader
A LoRA that fades in and out across the sampling steps — not the strength
- model
- clip
- model
- clip
- hooks
Most LoRA loaders let you set a strength and that's it - the LoRA is equally loud at step 2 and step 28. LoRAStepLoader is the version that schedules the strength across the denoising range: crank it in at the start to steer composition, then fade it out so the later steps aren't fighting it. It's built on ComfyUI's hooks API, the same machinery behind the ecosystem's fancy per-step conditioning, so it's doing this properly rather than with a hack.
How it works
It's a loader plus a scheduler. The LoRA file loads and caches like any other; the CLIP side gets the strength_start value applied as a fixed strength (no fade - text conditioning doesn't need one). The MODEL side is where the magic is: the loader builds a HookKeyframeGroup with keyframes across the start_at→end_at window, interpolating from strength_start to strength_end in ten steps. Outside the window the strength is zero. Set start equal to end and it becomes a plain constant-strength LoRA inside the window - no fade, just gating.
The result is three outputs: model, clip, and - the one you must not ignore - hooks.
The inputs
- model / clip - the checkpoint you're loading onto.
- lora_name - dropdown of your
models/loras/folder. - strength_start (FLOAT, default 1) / strength_end (FLOAT, default 0) - fade endpoints, 0–2.
- start_at (FLOAT, default 0) / end_at (FLOAT, default 1) - the window as a 0–1 fraction of the sampling range.
Outputs: model, clip, and hooks (HOOKS).
The one gotcha that bites everyone
The hooks output is not optional decoration. If you don't connect it to a conditioning node that sets hook properties - the code comments point at something like PairConditioningSetProperties - the per-step scheduling silently never applies, and you'll wonder why your fade isn't fading. It's a two-part wiring job: hooks out of this node, into a conditioning-set node, and that conditioning into your sampler. Miss the middle hop and the LoRA just runs at full strength the whole time.
Practical pattern: a style or pose LoRA that grips the early composition phase and lets go by mid-sample - say start_at=0, end_at=0.5, fading 1→0. It's the same "get in early, get out before detail" philosophy as this pack's CNStepControl, and the two pair well on the DiT-era models. Also note both strengths at 0 is a fast no-op: the node returns your model and clip untouched with no hooks.
Install
Part of the IXIWORKS pack - ComfyUI Manager → search ComfyUI-VideoDescription, restart, or clone into custom_nodes/. It relies on comfy.hooks, which is core ComfyUI - no extra packages. If your ComfyUI is older than the hooks API, update ComfyUI first, because that's the dependency that actually matters here.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_name | COMBO | 0 options: | |
| strength_start | FLOAT | 1.000–2 | — |
| strength_end | FLOAT | 0.000–2 | — |
| start_at | FLOAT | 0.000–1 | — |
| end_at | FLOAT | 1.000–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| hooks | HOOKS | — |