Nodes/ComfyUI-LoraControls/LoRA Keyframes πŸ“Š
ComfyUI Node

LoRA Keyframes πŸ“Š

Fades, pulses, and mid-run resets

By kreonxvΒ·Created 7 months agoΒ·Updated 7 months agoΒ· 1
LoRA Keyframes πŸ“Š
  • clip
  • CLIP
  • schedule_graph
β—„lora_nameβ–Ύβ–Ί
β—„strength_multiplier1.00β–Ί
β—„presetcustomβ–Ί
β—„interpolationlinearβ–Ί
β—„resolution20β–Ί

Every LoRA loader you've ever used hands you one static number. LoRA Keyframes πŸ“Š turns that number into a curve that plays out over the denoising run: fade in, fade out, pulse twice, run at full strength for exactly the middle third and nothing else. If you've ever set a character LoRA to 0.8, stared at the over-baked output, and wished it had only been that strong for half the steps - this is the node for that.

Why bother? LoRA strength is constant, but what a given strength does isn't uniform across a generation. Early steps set the composition and broad structure; late steps nail down texture and detail. A strong style or character LoRA running flat-out for the whole pass tends to dominate everything - the community term is over-baking, and it's a big reason people default to 0.5–0.8 instead of 1.0. Scheduling attacks the cause instead of the symptom: fade a LoRA in so its concept blends in gently, fade it out by the 70% mark so the final steps are pure base-model detail, or hold a style only in the middle so it shapes composition without touching the initial noise or final polish. People have hacked around this by splitting the sampling into three KSamplers with different strengths. This node is the do-it-in-one-pass version.

How it works. It's a thin wrapper over ComfyUI's built-in hook system - CreateHookLora, CreateHookKeyframe, SetHookKeyframes, SetClipHooks, all core since the 2024 model-patching update. It builds a LoRA hook carrying your global strength, attaches a chain of keyframes, and stitches the result onto the CLIP before you sample. That's why this pack ships with no requirements.txt and nothing to download: it only needs core ComfyUI plus the LoRA already in your ComfyUI/models/loras folder.

The inputs that matter:

  • keyframes - the heart of it. A comma-separated list of strength@percent pairs, where percent is a fraction of the run (0.0 = first step, 1.0 = last). "[email protected], [email protected], [email protected]" is a bell curve; "[email protected], [email protected]" starts hot and fades out. The parser is forgiving: it clamps percents to 0–1, fills in zero-strength ends you didn't specify, and if you duplicate a percent, the last one wins.
  • preset - eight ready-made shapes (fade_in, fade_out, middle_only, two_peaks…). Selecting one overrides the keyframes string, so it's a great way to see the syntax working before you write your own.
  • interpolation - how it moves between keyframes: step (hard jumps), linear, or the eased ones (smoothstep, ease_in, ease_out, ease_in_out) for organic transitions.
  • strength_multiplier - a global scale on the whole curve (βˆ’10 to 10; negative flips the effect). This is where your old "static strength" instinct goes.
  • resolution - how many intermediate points it bakes between your keyframes (default 20 β†’ 21 points). Higher is smoother, but the author's own tip is that each keyframe costs a little scheduling time. 20 is plenty; don't chase 100.

Outputs. The CLIP goes wherever you'd wire a LoraLoader's CLIP output. The second output, schedule_graph, is an ASCII plot of your curve that also prints to the console - connect it to any Show Text-style node to eyeball the schedule before you burn a generation.

Install. It's half of ComfyUI-LoraControls, a two-node pack. Search "ComfyUI-LoraControls" in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/kreonxv/ComfyUI-LoraControls.git

Restart ComfyUI; it lands under the loaders category. No pip step, no model downloads.

Where people get burned. This wraps core hook nodes, so a ComfyUI install old enough to predate them fails at runtime when the CreateHookLora import isn't there - keep ComfyUI updated. Malformed keyframe lines are skipped with a console warning rather than an error, so if a curve looks wrong, check the terminal. And one Flux note: the author clearly built this around T5-era models, and the pack's code is internally inconsistent about the core schedule_clip setting - LoraKeyframes leaves it off while its sibling LoRAStepRange flips it to True with a code comment calling it "critical for FLUX." If your timing feels subtly off on a Flux workflow, that asymmetry is the first place to look.

Categoryloaders

Inputs (7)

NameTypeDefaultDescription
clipCLIPβ€”
lora_nameCOMBO0 options:
strength_multiplierFLOAT1.00-10–10β€”
presetCOMBOcustom9 options: custom, constant_full, fade_in, fade_out, fade_in_out, early_only, +3
keyframesSTRING[email protected], [email protected], [email protected]β€”
interpolationCOMBOlinear6 options: step, linear, smoothstep, ease_in, ease_out, ease_in_out
resolutionINT202–100β€”

Outputs (2)

NameTypeDescription
CLIPCLIPβ€”
schedule_graphSTRINGβ€”