Create Hook Keyframes From Floats
Your exact strength curve, fed as raw numbers
- floats_strength
- prev_hook_kf
- HOOK_KF
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 aFLOATSinput, and ComfyUI core doesn't ship a node that producesFLOATSlists. 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 generatedstart_percent = valueline 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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| floats_strength | FLOATS | -1 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 1.0000–1 | — |
| print_keyframes | BOOLEAN | false | — |
| prev_hook_kfopt | HOOK_KEYFRAMES | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| HOOK_KF | HOOK_KEYFRAMES | — |