Nodes/AnimateDiff Evolved/LoRA Hook Keyframes From List πŸŽ­πŸ…πŸ…“
ComfyUI Node Runs on cloud

LoRA Hook Keyframes From List πŸŽ­πŸ…πŸ…“

Scheduling a LoRA's strength over time

By KosinkadinkΒ·Created 3 years agoΒ·Updated 12 days agoΒ· 3,519
LoRA Hook Keyframes From List πŸŽ­πŸ…πŸ…“
  • prev_hook_kf
  • HOOK_KF
β—„strengths_float-1.000β–Ί
β—„start_percent0.000β–Ί
β—„end_percent1.000β–Ί
β—„print_keyframesfalseβ–Ί

Where the Combine LoRA Hooks nodes handle which LoRAs run together, this one handles when - and specifically, how strong. It takes a list of strength values and turns them into a keyframe schedule, so a single LoRA hook can fade in, fade out, pulse, or otherwise vary its strength across the generation instead of applying at one flat number the whole time.

What it does

strengths_float accepts a list of float values - the kind of thing you'd get from a Float List or similar batch-value node feeding in, rather than a single typed-in number. Those values get distributed across the window between start_percent and end_percent of the sampling process, building a HOOK_KEYFRAMES schedule that ramps the LoRA's effective strength through the list as sampling progresses. It's the temporal counterpart to Combine LoRA Hooks: that node merges multiple LoRAs together spatially/logically, this one animates one LoRA's intensity across time.

prev_hook_kf lets you chain this onto an existing keyframe schedule - building up a longer or more complex strength curve out of multiple list segments rather than one flat pass.

print_keyframes is a debug convenience: flip it on and the resulting schedule gets dumped where you can inspect it, so you can sanity-check the timing before committing to a long, expensive render. Worth turning on the first time you build a new schedule, and off once you trust it.

Inputs and output

  • strengths_float - the list of strength values to schedule across the range (default -1, floor -1 - a placeholder value rather than a meaningful strength; you'll be piping in a real list).
  • start_percent, end_percent - the slice of the sampling run (0–1) this schedule covers. 0 to 1 covers the whole generation.
  • print_keyframes - debug toggle, dumps the built schedule for inspection.
  • prev_hook_kf (optional) - chain in a previous HOOK_KEYFRAMES to extend or combine schedules.

Output is HOOK_KF (a HOOK_KEYFRAMES), which attaches to a LoRA hook to give it this timing behavior.

How to install it

Ships with the base pack.

  • ComfyUI Manager - search AnimateDiff Evolved by Kosinkadink, install, restart.
  • Manual - cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved, restart.
  • You'll need an actual LoRA hook node upstream and a list-producing node (Float List or similar) feeding strengths_float for this to have something meaningful to schedule.

Common issues & troubleshooting

This is a deep-cut, low-traffic corner of the pack. LoRA hook scheduling in general doesn't have much community writeup floating around, so don't expect a well-worn recipe - turn on print_keyframes, look at what actually got built, and adjust from there rather than assuming a particular list-to-timeline mapping without checking.

Nothing seems scheduled - the LoRA just applies flat. Confirm the HOOK_KF output actually reaches the LoRA hook node's keyframe input, and that the hook itself is wired into the model/conditioning chain that's actually being sampled. A disconnected schedule node has no effect.

Strength values don't match what you expected mid-render. Turn on print_keyframes first - it's there specifically so you're not debugging blind on a long generation. Confirm the printed schedule matches your intent before spending render time on it.

CategoryAnimate Diff πŸŽ­πŸ…πŸ…“/conditioning/schedule lora hooks

Inputs (5)

NameTypeDefaultDescription
strengths_floatFLOAT-1.000β€”
start_percentFLOAT0.0000–1β€”
end_percentFLOAT1.0000–1β€”
print_keyframesBOOLEANfalseβ€”
prev_hook_kfoptHOOK_KEYFRAMESβ€”

Outputs (1)

NameTypeDescription
HOOK_KFHOOK_KEYFRAMESβ€”