Nodes/ComfyUI-Advanced-ControlNet/Timestep Keyframe From List πŸ›‚πŸ…πŸ…’πŸ…
ComfyUI Node Runs on cloud

Timestep Keyframe From List πŸ›‚πŸ…πŸ…’πŸ…

Drive ControlNet strength from a float list

By KosinkadinkΒ·Created 3 years agoΒ·Updated 8 days agoΒ· 993
Timestep Keyframe From List πŸ›‚πŸ…πŸ…’πŸ…
  • prev_timestep_kf
  • cn_weights
  • latent_keyframe
  • mask_optional
  • TIMESTEP_KF
β—„float_strengths-1.000β–Ί
β—„start_percent0.000β–Ί
β—„end_percent1.000β–Ί
β—„null_latent_kf_strength0.000β–Ί
β—„inherit_missingtrueβ–Ί
β—„print_keyframesfalseβ–Ί

This node builds a ControlNet strength schedule across sampling steps from a plain list of floats. You feed it [1.0, 0.8, 0.6, 0.3, 0.0], it spreads those values evenly from your start percent to your end percent, and out comes a Timestep Keyframe chain. It's the "I already have the numbers, just make the schedule" node.

Where it shines is when the numbers come from somewhere else. The classic pairing is with Batch Value Schedule from FizzNodes - you author a curve (or an audio-reactive envelope, or a prompt-travel schedule) as a list of floats and pipe it straight in, so your ControlNet strength dances to the same curve as everything else in the workflow. If you're hand-typing five numbers you'd probably just use Timestep Keyframe Interpolation; the point of this node is programmatic strength lists.

How it maps

The required float_strengths is a list of floats. The first value lands at start_percent, the last lands at end_percent, and the rest are spread linearly in between. So a five-value list over a 0.0–1.0 window puts keyframes at 0%, 25%, 50%, 75%, 100%. The first generated keyframe gets guarantee_steps=1 and the rest get 0 - a detail that just means the first is guaranteed to run at least one step.

  • start_percent / end_percent - the sampling-percentage window the list is stretched across (0.0 to 1.0, where percent is fraction of the sampling process, not step index).

Everything else is optional and shared with the other keyframe nodes: prev_timestep_kf to chain onto an existing schedule, cn_weights / latent_keyframe / mask_optional to attach per-block weights, latent scheduling, and masks, inherit_missing (default true), null_latent_kf_strength, and print_keyframes to log what got built.

Output is TIMESTEP_KF, which goes to the timestep_kf input on Apply Advanced ControlNet.

Installing the pack

Through ComfyUI Manager: Install Custom Nodes, search "ComfyUI-Advanced-ControlNet," restart. Or cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet then restart. No exotic dependencies. It's Kosinkadink's pack - same author as AnimateDiff-Evolved - and the two are designed to work together. The pack has no preprocessors (use comfyui_controlnet_aux) and no ControlNet models bundled.

Common gotchas

The list has to arrive as an actual list. If you wire in a single float (or the value comes through as a lone number), you get a one-entry schedule - a flat strength, not a curve. FizzNodes' Batch Value Schedule outputs the list shape this expects; that's the intended source.

Same gate as every keyframe node: the start_percent / stop_percent on the Apply Advanced ControlNet node overrides these percentages. If your list is set to run 0.0–1.0 but Apply stops control at 0.5, the back half of your list never fires. And the schedule's strengths multiply against the Apply node's own strength, so a list topping out at 1.0 under an Apply strength of 0.7 peaks at 0.7. Flip on print_keyframes if the result doesn't match the curve you expected - it'll show you exactly what was parsed.

CategoryAdv-ControlNet πŸ›‚πŸ…πŸ…’πŸ…/keyframes

Inputs (10)

NameTypeDefaultDescription
float_strengthsFLOAT-1.000β€”
start_percentFLOAT0.0000–1β€”
end_percentFLOAT1.0000–1β€”
prev_timestep_kfoptTIMESTEP_KEYFRAMEβ€”
cn_weightsoptCONTROL_NET_WEIGHTSβ€”
latent_keyframeoptLATENT_KEYFRAMEβ€”
null_latent_kf_strengthoptFLOAT0.0000–10β€”
inherit_missingoptBOOLEANtrueβ€”
mask_optionaloptMASKβ€”
print_keyframesoptBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
TIMESTEP_KFTIMESTEP_KEYFRAMEβ€”