Aligned Overlap Cut Transition
The node that kills the hard cut when you chain LTX clips together
- source_images
- new_images
- images
- seam_index
- anchor_frame
- anchor_frames_tail
If you've ever stitched two AI-generated clips together and watched the video visibly jump at the join, you know exactly why this node exists. The LTX Director extender flow generates clip one, then samples a new section that overlaps the previous clip's tail so the continuation has context to hold onto. But overlap alone doesn't give you a clean splice - concatenate the two batches and you get a hard one-frame cut where the model's two passes disagree. AlignedOverlapCutTransition is the tested-default fix for that seam, and the v1.6 workflow in this pack is built around it.
How it works. You feed it source_images (the previous clip, tail end) and new_images (the freshly generated continuation), which should share a spatial resolution. The node scores every candidate cut inside the overlap window using mean squared error between the source and new frames around the boundary, picks the lowest-error seam, and merges the two batches there. Three knobs tune the splice:
edge_margin(default 1) keeps the scorer away from the very edges of the overlap window, where the data is least trustworthy.seam_shift(default 0) moves the chosen cut earlier or later inside the overlap - negative takes the new continuation over sooner, positive preserves more of the previous clip before the handoff.0lets the scorer decide automatically.blend_frames(default 0) crossfades across the seam on both sides. The README's shorthand:seam_shift = 0to auto-pick, then raiseblend_framesfor a softer handoff. Start at a few frames; too much blending gets mushy.
The node also infers a usable overlap window from the actual frame batches when the workflow resolves the overlap control wrong - that's the fix for the old virtual SetNode/GetNode bridge that used to collapse the whole thing to a one-frame cut. And it forces recomputation via IS_CHANGED so prompt/subgraph caching can't hide your tuning changes while you iterate.
Outputs. images is the merged clip, ready to feed the next pass. seam_index is the frame where the cut landed - wire it into the audio transition node so sound and picture break at the same instant. anchor_frame is the single frame at the seam, and anchor_frames_tail is the tail of the merged clip around it; both are reference frames for conditioning the next extension.
Install is the pack default:
cd ComfyUI/custom_nodes
git clone https://github.com/Yogurt1192/LTXDirector-Extender.git
Restart ComfyUI. It's pure tensor work - no models, no extra pip packages.
Where people get burned. If source_images and new_images have different spatial shapes, the node raises a ValueError - check your resize/VAE settings before blaming the splice. And remember the transition can't rescue a fundamentally wrong overlap: if you're seeing the hard cut anyway, the usual cause is the extender duration not matching the sampler subgraph duration, which this pack makes you set by hand in both places.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| source_images | IMAGE | — | |
| new_images | IMAGE | — | |
| overlap | INT | 121–4096 | — |
| edge_margin | INT | 10–256 | — |
| blend_frames | INT | 00–64 | — |
| seam_shift | INT | 0-64–64 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| seam_index | INT | — |
| anchor_frame | IMAGE | — |
| anchor_frames_tail | IMAGE | — |