H3 Continuation · Analyze Handover
Find the Frame Where the Shot Actually Stops Moving
- images
- handover
- analysis_info
- freeze_detected
- freeze_start_frame
- ideal_handover_end_frame
- phase_aligned_handover_end_frame
- ignored_tail_frames
- confidence
Here's the thing about chaining H3 clips: the model doesn't stop cleanly. Ask for a shot that lands on a final image and it decelerates into that image, then sits on it, repeating near-identical frames until the clip ends. That tail is useless as video and extremely useful as a join - if you cut there, the next clip inherits a nearly frozen state instead of an arbitrary motion frame.
The problem is knowing where "there" is. Not by eye, at 24 fps, in a 243-frame clip.
This node is the detector. It looks at the decoded frames of your accepted clip and reports where the lock begins, plus a recommended cutoff in latent boundaries.
Why the obvious detector is wrong
The tempting approach is "find the low-motion section." The pack's own motion-analysis notes say why that fails: H3's first/last-frame mode often slows down while converging, so a low-motion test fires way too early and hands the next clip a tail that was still moving. What the current detector does instead is ask two stricter questions about the trailing run:
- Does each frame match the actual final state closely, in both global RGB error and changed-area ratio? The reference isn't one last frame - it's a pixel-wise median of the last
final_reference_frames(15) frames, so a bit of decode shimmer doesn't fool it. - Are the frame-to-frame transitions inside that run also near-static? This is the gate that rejects sustained real motion, with a robust allowance for isolated outliers (
min_static_transition_percent70,max_consecutive_motion_outliers2).
Only a run that satisfies both, all the way to the end of the clip, counts as a lock.
What you set
preset is the only field most people should touch, and there are three options:
- Balanced - the validated default.
freeze_hold8, fixed 3-frame safety. - Motion Safe - same detector, 6-frame safety. Pick this when your shots end on real movement and you'd rather cut later.
- Custom - reveals the advanced controls, and it's a long list:
analysis_window(inspect the last 72 frames, expanding backward if the whole window is already locked),freeze_hold(minimum trailing lock length),safety_margin(frames of caution before the detected lock; respected always undersafety_mode: fixed),context_frames(5/22/39 minimum motion-and-audio history),analysis_size(max edge used for analysis only - 192 by default, your render is never resized), the primary and secondary threshold sets, andsafety_mode, whereadaptive (Legacy)can reduce safety at high confidence. The author's advice is to leave it onfixed.
images wants the decoded FULL rendered frames of the accepted clip. That's an operational point, not a formality: this node works on pixels, so it sits after your VAE decode, not before it.
Outputs, and where they go
handover (H3_CONTINUOUS_HANDOVER) is the one that matters - wire it into Continue's handover, Stitch and Save, and the metadata travels with the clip.
Then the human-readable ones: analysis_info (the status line, including the preset used), freeze_detected (BOOLEAN), freeze_start_frame, ideal_handover_end_frame, phase_aligned_handover_end_frame (the snapped value the downstream nodes actually use), ignored_tail_frames, and confidence.
The no-lock case is handled, not ignored
If no lock is found, this node doesn't shrug. It applies a documented fallback: the final freeze_hold - 1 pixel frames are excluded from continuation context, and the desired cutoff is snapped backward to the latest valid phase-aligned latent boundary. The metadata records that this happened (no_lock_fallback_applied, the requested exclusion, the effective tail), so a later stage can report it honestly instead of pretending the cut was a detected lock.
Critically, your render and latent are never modified. Analysis only writes metadata.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Or Manager → IAMCCS Nodes, then restart and hard-refresh the browser. It's bundled with the pack's FL2VA continuous engine, no external continuation pack needed, and it needs no model of its own - just decoded frames and enough system RAM for a modest analysis pass.
The lineage is worth knowing because it explains the maturity: this engine credits HerrgottMargott's H3 Infinite Continuation Suite v1.2.1 for the continuation-method concepts, along with several other H3 continuation projects. Independent implementation, credited ancestry.
Practical advice
Run it on every accepted clip and save the metadata. It's cheap, it's non-destructive, and the alternative is you eyeballing a frame number and getting it wrong by four frames - which is precisely the kind of error that shows up as a hitch at the join and is miserable to diagnose later.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Decoded FULL rendered frames from the accepted H3 clip. | |
| preset | COMBO | Balanced | Balanced = validated detector with freeze_hold 8 and fixed 3-frame safety. Motion Safe = same detector with 6-frame safety. Custom reveals the advanced controls. |
| analysis_window | INT | 7212–480 | Custom only. Inspect this many final frames first. If the whole window is already locked, analysis automatically expands backward. |
| freeze_hold | INT | 82–60 | Custom only. Minimum trailing lock length. Stable-tail consensus must persist for at least this many ending frames. |
| safety_margin | INT | 30–12 | Custom only. Pixel-frame safety before the detected lock. With safety_mode=fixed (recommended), this configured margin is always respected; adaptive preserves the older confidence-based behavior. |
| context_frames | COMBO | 22 | Custom only. Minimum motion/audio history. phase_aligned_extended may extend backward beyond this value to restore canonical phase-0 alignment. |
| analysis_size | INT | 19264–512 | Custom only. Max edge used only for analysis. The rendered video is never resized or modified. |
| final_mean_diff_threshold | FLOAT | 0.01200.0001–0.03 | Custom only. PRIMARY lock test: maximum mean blurred RGB difference between a candidate frame and the median stable-tail reference. Lower = stricter/later lock. |
| final_active_pixel_threshold | FLOAT | 0.0250.001–0.2 | Custom only. PRIMARY lock test: per-pixel RGB-difference level used to decide which image areas differ from the median stable-tail reference. |
| max_final_active_area_percent | FLOAT | 3.000.05–20 | Custom only. PRIMARY lock test: at most this percentage of the image may differ materially from the median stable-tail reference. |
| transition_mean_diff_threshold | FLOAT | 0.00200.0001–0.03 | Custom only. SECONDARY safety test: maximum mean luminance change between consecutive frames inside the detected final-frame lock. |
| transition_active_pixel_threshold | FLOAT | 0.0100.001–0.2 | Custom only. SECONDARY safety test: per-pixel luminance change that counts as residual motion. |
| max_transition_active_area_percent | FLOAT | 1.000.05–20 | Custom only. SECONDARY safety test: maximum visibly changing area allowed for an individual transition. |
| min_static_transition_percent | FLOAT | 7050–100 | Custom only. ROBUST secondary gate: minimum percentage of transitions inside the final-frame-matching suffix that must be near-static. Isolated shimmer/outliers are allowed. |
| max_consecutive_motion_outliers | INT | 20–12 | Custom only. ROBUST secondary gate: maximum consecutive non-static transitions allowed inside an otherwise locked suffix. Prevents sustained real motion from being accepted. |
| final_reference_frames | INT | 153–31 | Custom only. STABLE-TAIL reference: build the final-state image from the pixel-wise median of this many ending frames instead of trusting one possibly shimmering last frame. |
| min_final_match_percent | FLOAT | 7550–100 | Custom only. ROBUST primary gate: minimum percentage of frames in the candidate locked suffix that must match the median final-state reference. |
| max_consecutive_final_outliers | INT | 30–12 | Custom only. ROBUST primary gate: maximum consecutive final-state mismatches allowed inside the locked suffix. Candidate start itself must always match. |
| safety_mode | COMBO | fixed | Custom only. fixed is recommended; adaptive (Legacy) can reduce safety at high confidence. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| handover | H3_CONTINUOUS_HANDOVER | — |
| analysis_info | STRING | — |
| freeze_detected | BOOLEAN | — |
| freeze_start_frame | INT | — |
| ideal_handover_end_frame | INT | — |
| phase_aligned_handover_end_frame | INT | — |
| ignored_tail_frames | INT | — |
| confidence | FLOAT | — |