Nodes/ComfyUI/Create Hook Keyframes From Floats
ComfyUI Node Runs on cloud

Create Hook Keyframes From Floats

Your exact strength curve, fed as raw numbers

By Comfy-Org·Created 4 years ago·Updated 31 minutes ago· 129,926
Create Hook Keyframes From Floats
  • floats_strength
  • prev_hook_kf
  • HOOK_KF
start_percent0.000
end_percent1.000
print_keyframesfalse

The other keyframe creators give you a ramp and let you pick the easing. CreateHookKeyframesFromFloats ("Create Hook Keyframes From Floats") skips the ceremony: you hand it a list of numbers and it turns them into a strength schedule, evenly spaced across your sampling window. It's the node for when you already know the exact curve you want - because you designed it, because another node computed it, or because you're lazy and a batch of numbers is easier than clicking keyframes.

What it does

It takes a list of floats, distributes them evenly between start_percent and end_percent, and produces a HOOK_KEYFRAMES group where each float is the strength multiplier at that point in the run. Feed it to SetHookKeyframes to attach the schedule to a HOOKS group, and your LoRA (or model-as-LoRA hook) will follow that curve through the denoise timeline - 0.0 for "off," 1.0 for the LoRA's own strength, 1.5 to push it past.

So [0.0, 0.5, 1.0, 0.5, 0.0] across the full run means the weight fades in, peaks mid-generation, and fades back out. That's a "style only in the middle" move that plain LoRA loaders simply can't do.

The inputs

  • floats_strength - the list. Here's the quirk: it's a FLOATS input, and ComfyUI core doesn't ship a node that produces FLOATS lists. You'll feed it from a custom node's list output (math/array packs, rgthree-style utilities), or - because the node also accepts a plain number - you can drop in a single float and get a one-keyframe schedule. Not a bug; the author deliberately accepted both.
  • start_percent / end_percent - where the list starts and ends in the sampling run (0.0 to 1.0). The floats are spread linearly between them.
  • print_keyframes - a debug toggle that logs every generated start_percent = value line to the console. When the fade isn't fading the way you pictured, this shows you exactly what the node built.
  • prev_hook_kf - an existing HOOK_KEYFRAMES group to append onto, so you can layer this list after another schedule.

Output: a single HOOK_KF (HOOK_KEYFRAMES) group.

Why you'd use it over the alternatives

CreateHookKeyframesInterpolated is better when you want a smooth ramp with easing. CreateHookKeyframe is better for two or three hand-placed stops. This node wins when the curve isn't a standard ramp at all - a plateau, a pulse, a beat-synced envelope, a curve that came out of a spreadsheet. Because it's just numbers in, schedule out, it's the one you reach for when you're generating schedules procedurally or batch-testing different envelopes by swapping a list.

The gotchas

First keyframe handling: the node guarantees the first keyframe has at least one step where it's actually used, which avoids a subtle "my first value is ignored" surprise that crops up when sampling starts mid-range. Second: remember the numbers are multipliers on the hook's base strength - a schedule of 0.5 on a LoRA at strength 1.0 is 0.5 effective, but on a strength 2.0 LoRA it's 1.0 effective. The curve is relative, not absolute. And third, the usual family note: this only matters if the finished HOOKS group actually reaches the sampler through a Set Props node - a schedule that never gets attached is a schedule that does nothing.

Ships with ComfyUI core, no install, experimental like all the hooks nodes. Find it under advanced → hooks → scheduling.

Categoryadvanced/hooks/scheduling

Inputs (5)

NameTypeDefaultDescription
floats_strengthFLOATS-1
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
print_keyframesBOOLEANfalse
prev_hook_kfoptHOOK_KEYFRAMES

Outputs (1)

NameTypeDescription
HOOK_KFHOOK_KEYFRAMES