IAMCCS_Ltx2HelperModules Refresh Policy
Turn 'when to refresh' into 'how hard to refresh'
- parent_contract
- linx
- refresh_payload
- contract
- linx
- apply_refresh
- segment_role
- continuity_preset_override
- first_anchor_strength_effective
- last_anchor_strength_effective
- first_lock_slots
- last_lock_slots
- end_transition_slots
- report
KeyframeTimeline tells you when a segment needs a refresh. RefreshPolicy is the node that turns that into how - the concrete numbers the rest of the chain acts on: whether to refresh at all, whether this segment is a light continuity pass or a full reanchor, which extension preset to use, and exactly how hard to lock the anchor frames. It's the decision node that sits between the timeline and the execution nodes (ReanchorLatent, Continuity, DiskExtension), reading two payloads and emitting one that everyone downstream trusts.
Think of it as the "mission control" of the refresh system. It exists because the same refresh concept needs different strengths at different moments: a periodic refresh can be a gentle tail nudge, while a reanchor segment - every few segments, when drift has accumulated - needs the anchors locked hard enough to drag the video back on course.
How it works
It reads the planner and keyframe payloads, then decides three things:
segment_role-continuityorreanchor. The defaultsegment_policyofplanner_drivendefers to whatKeyframeTimelinedecided (is_reanchor_segment). You can force it:continuity_only,reanchor_only, orreanchor_mix.apply_refresh- BOOLEAN, the go/no-go. True on reanchor segments or any segment the keyframe timeline flagged withhas_refresh.- The effective strengths - here's where the knobs are:
first_anchor_strength(default 0.35) andlast_anchor_strength(default 0.20) set how hard the reanchor locks its start/end frames;tail_refresh_strength(0.30) governs the lighter tail refresh. On reanchor segments these get passed through toReanchorLatentas effective values; on continuity segments they're zeroed out (a continuity pass shouldn't be yanking the anchors).
It also picks the extension preset per role: continuity_preset (default lossless_refresh_24fps) for continuity segments and reanchor_preset (default lossless_refresh_24fps) for reanchors - the presets are the same list the ExtensionModule uses, so this is where the refresh strategy meets the actual stitching config. reanchor_overlap_mode (default filmic_crossfade) sets how the reanchor blends.
The inputs and outputs that matter
Wire in planner_payload + keyframe_payload (the chain's handshake), set segment_policy and the three strength sliders, and read:
apply_refresh- BOOLEAN; connect it to anything that should only run on refresh segments.segment_role- STRING (continuity/reanchor).continuity_preset_override- STRING, the effective preset for the extension step.first_anchor_strength_effective/last_anchor_strength_effective- FLOATs, whatReanchorLatentwill actually use.first_lock_slots/last_lock_slots/end_transition_slots- INTs, the Pro-slot configuration for the reanchor lock.
Plus refresh_payload (the JSON contract), contract, linx, and report.
Installing it
Ships in IAMCCS-nodes under IAMCCS/Ltx2 Helper Modules. Manager → "IAMCCS" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart ComfyUI. No models, no dependencies.
Common issues
The trap is misreading the effective strengths: on continuity segments first_anchor_strength_effective comes out as 0.0 even though your slider says 0.35 - that's deliberate (continuity doesn't anchor), and people waste time "fixing" it. If your video never reanchors at all, check segment_policy: continuity_only turns every segment into a continuity pass and silently zeroes all anchoring. And if the reanchor looks too strong - the clip snaps onto the anchor image - drop first_anchor_strength toward 0.2 before you touch the lock slots. The report tells you role, apply, and preset in one line; read it once and this node stops being a mystery.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| planner_payload | STRING | {} | — |
| keyframe_payload | STRING | {} | — |
| segment_policy | COMBO | planner_driven | 4 options: planner_driven, continuity_only, reanchor_mix, reanchor_only |
| continuity_preset | COMBO | lossless_refresh_24fps | 10 options: custom, target_extension_ltx2, lossless_refresh_24fps, lossless_refresh_strong_24fps, videoclip_audio_24fps, monologue_audio_24fps, +4 |
| reanchor_preset | COMBO | lossless_refresh_24fps | 10 options: custom, target_extension_ltx2, lossless_refresh_24fps, lossless_refresh_strong_24fps, videoclip_audio_24fps, monologue_audio_24fps, +4 |
| first_anchor_strength | FLOAT | 0.350–1 | — |
| last_anchor_strength | FLOAT | 0.200–1 | — |
| tail_refresh_strength | FLOAT | 0.300–1 | — |
| reanchor_overlap_mode | COMBO | filmic_crossfade | 5 options: cut, linear_blend, ease_in_out, filmic_crossfade, perceptual_crossfade |
| parent_contractopt | IAMCCS_SUPERNODE_CONTRACT | — | |
| linxopt | IAMCCS_SUPERNODE_LINX | — |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| refresh_payload | STRING | — |
| contract | IAMCCS_SUPERNODE_CONTRACT | — |
| linx | IAMCCS_SUPERNODE_LINX | — |
| apply_refresh | BOOLEAN | — |
| segment_role | STRING | — |
| continuity_preset_override | STRING | — |
| first_anchor_strength_effective | FLOAT | — |
| last_anchor_strength_effective | FLOAT | — |
| first_lock_slots | INT | — |
| last_lock_slots | INT | — |
| end_transition_slots | INT | — |
| report | STRING | — |