Nodes/IAMCCS-nodes/AU+IMG2VID Keyframe Timeline (legacy alias)
ComfyUI Node

AU+IMG2VID Keyframe Timeline (legacy alias)

Decide where the keyframes go and how often the video refreshes itself

By IAMCCS·Created 12 months ago·Updated 4 days ago· 117
AU+IMG2VID Keyframe Timeline (legacy alias)
  • parent_contract
  • linx
  • keyframe_payload
  • contract
  • linx
  • has_refresh
  • is_reanchor_segment
  • recommended_refresh_mode
  • protected_head_frames_out
  • preferred_tail_start
  • report
◄planner_payload{}►
◄keyframe_positions_modenone►
◄keyframe_positions►
◄refresh_mode_policyauto►
◄protected_head_frames9►
◄settling_frames_default9►
◄min_keyframe_spacing_frames8►
◄refresh_interval_segments2►
◄reanchor_every_segments3►
◄prefer_tail_refreshtrue►

Long-chunked video drifts. Each new segment is conditioned on the last one, and over twenty segments small errors compound until your character's face is a different person. The standard fix is periodic refresh - re-anchoring the generation to clean reference frames so drift resets. IAMCCS_AUIMG2VID_KeyframeTimeline (legacy alias for Ltx2HelperModules_KeyframeTimeline) is the node that decides when that happens. It's a policy node: it doesn't touch pixels, it figures out the refresh/re-anchor schedule and tells the rest of the chain what to do.

You hand it the planner_payload (for the segment plan) and some policy settings, and it returns a keyframe_payload plus a few decision outputs. The inputs that matter:

  • keyframe_positions_mode / keyframe_positions - where keyframes land: by global_frames, global_seconds, or global_ratio (fraction along the project), as a list you type in. none skips explicit keyframes and lets the schedule drive.
  • refresh_mode_policy - the heart of it: auto, anchor_only, tail_refresh, flf_blend, or disabled. tail_refresh keeps the tail of the current chunk as the seed for the next (the cheap, common choice); flf_blend mixes first-and-last-frame locking for stronger identity.
  • protected_head_frames (9) - frames at the start of a chunk that never get cut; settling_frames_default (9) - frames the model needs to "settle" after a refresh before the new content starts.
  • min_keyframe_spacing_frames (8) - how close two keyframes are allowed to get.
  • refresh_interval_segments (2) and reanchor_every_segments (3) - how often to refresh vs. fully re-anchor on a reference image. Re-anchoring is heavier and is the antidote to identity drift.

Outputs are the schedule decisions: has_refresh and is_reanchor_segment (booleans saying whether this segment refreshes/re-anchors), recommended_refresh_mode, and preferred_tail_start - the frame index where the tail refresh should begin. Those are what you wire into the refresh policy and re-anchor nodes downstream. prefer_tail_refresh (default on) makes tail refresh the first choice when the policy is auto.

Why you'd reach for it: if you've done any long LTX-2 or WAN video, you know the refresh schedule is normally something you eyeball once, hard-code, and forget - and then the face morphs at segment 11. This node turns that into settings you can tune. It's firmly part of the AU+IMG2VID chain (planner → audio timeline → keyframe timeline → refresh policy → re-anchor), so standalone use is really only for extracting recommended_refresh_mode into your own graph.

Installing: ships with IAMCCS/IAMCCS-nodes. ComfyUI Manager → search "IAMCCS", or cd ComfyUI/custom_nodes && git clone https://github.com/IAMCCS/IAMCCS-nodes.git, restart. No models, no extra deps.

The honest caveat: every refresh costs you a little motion quality - refresh anchors, then the video has to "recover" from the anchor. If your footage has a fast-moving subject, aggressive refresh_interval_segments settings produce that strobing "keyframe wobble." Start with the defaults (refresh every 2, re-anchor every 3) and only tighten if you actually see drift; if you see flicker, you've gone the other way.

CategoryIAMCCS/Ltx2 Helper Modules

Inputs (12)

NameTypeDefaultDescription
planner_payloadSTRING{}—
keyframe_positions_modeCOMBOnone4 options: global_frames, global_seconds, global_ratio, none
keyframe_positionsSTRING—
refresh_mode_policyCOMBOauto5 options: auto, anchor_only, tail_refresh, flf_blend, disabled
protected_head_framesINT90–256—
settling_frames_defaultINT90–256—
min_keyframe_spacing_framesINT80–512—
refresh_interval_segmentsINT20–256—
reanchor_every_segmentsINT30–256—
prefer_tail_refreshBOOLEANtrue—
parent_contractoptIAMCCS_SUPERNODE_CONTRACT—
linxoptIAMCCS_SUPERNODE_LINX—

Outputs (9)

NameTypeDescription
keyframe_payloadSTRING—
contractIAMCCS_SUPERNODE_CONTRACT—
linxIAMCCS_SUPERNODE_LINX—
has_refreshBOOLEAN—
is_reanchor_segmentBOOLEAN—
recommended_refresh_modeSTRING—
protected_head_frames_outINT—
preferred_tail_startINT—
reportSTRING—