🔀 S42 CutFlow Transition
Twenty-five ways to get from clip A to clip B, no external NLE required
- clip_a
- clip_b
- merged_frames
- total_frame_count
- info
Transitions are the connective tissue of a cut - without them every edit is a hard jump. S42CF_Transition gives you 25 of them in one node: the classic dissolve, fades through black and white, push/wipe/zoom/spin/iris motion transitions, a glitch, a pixelize, luma wipes, and slides. Feed it two clips, pick a type and a duration, and it hands back one merged clip with the transition built in. It's one of the "Expanded" nodes in GeekyGhost's S42 CutFlow suite, and it's how you assemble AI-generated clips into something that reads as edited rather than concatenated.
The inputs
- clip_a and clip_b - the two clips. Clip A plays first and transitions out; clip B transitions in and plays after.
- transition_type - 25 options:
cut(just concatenates, no blending), the blending types (dissolve,fade_black,fade_white,luma_wipe,glitch,pixelize), and the motion types (push_*,wipe_*,zoom_in/out,spin_cw/ccw,spin_zoom_*,iris_in/out,slide_up/down). The dropdown also carries the easing options foreasing- linear through bounce. - transition_frames (int, 1–120, default 12) - duration. 12 frames is half a second at 24fps; 24 is a full second.
- easing - ten easings, default
ease_in_out, so apush_rightaccelerates and decelerates instead of gliding at constant speed. - glitch_seed (int, default 42) - reproducible randomness for the glitch transition. Same seed, same glitch, every time.
How it works - and why the implementation detail matters
Here's the thing most people get wrong about video transitions, and this node gets it right. Blending transitions (dissolve, fades, glitch, pixelize, luma) composite the actual overlapping frames from both clips - a true temporal crossfade. Motion transitions (push, wipe, zoom, spin, iris, slide) do not animate live frames - they use stable reference frames: the last frame of clip A and the first frame of clip B. That's deliberate. Animating a moving source frame through a push or zoom produces jitter, and the fix - used in the author's earlier S42P Transition node - is to lock the motion to a reference frame. Result: smooth, non-shimmering wipes even on busy footage.
The output structure is [clip_a minus the overlap] + [transition frames] + [clip_b after the overlap], with resolutions auto-matched. Outputs: merged_frames (the assembled IMAGE batch), total_frame_count, and info.
Installing it
Standard S42 CutFlow install:
cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt # Windows portable: python_embeded\python.exe -m pip
Or ComfyUI Manager → search S42 CutFlow → install → restart. It's under S42 CutFlow/Expanded.
Gotchas
The practical traps. First, the transition consumes frames from both clips - transition_frames is taken off the end of A and the start of B, so short clips can't host long transitions (the node clamps to the shorter clip's length). Give both clips a little padding if you want roomy transitions. Second, motion transitions use reference frames, so on fast-moving content they can look slightly "frozen" mid-transition compared to a dissolve - that's the jitter fix, and it's why you keep transitions short (12–24 frames). Third, cut is genuinely useful: it's the correct way to concatenate two clips of different lengths without any effect, and it's faster than wiring a concat node. And a workflow tip: for beat-synced edits, drive transition_frames from your audio's tempo and chain Multi Split → Transition per segment; the README's montage workflow does exactly this. Pair with a final film-grain or grade pass so the transition's seams don't show.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_a | IMAGE | — | |
| clip_b | IMAGE | — | |
| transition_type | COMBO | dissolve | 25 options: cut, dissolve, fade_black, fade_white, luma_wipe, push_left, +19 |
| transition_frames | INT | 121–120 | — |
| easing | COMBO | ease_in_out | 10 options: linear, ease_in, ease_out, ease_in_out, ease_in_cubic, ease_out_cubic, +4 |
| glitch_seed | INT | 420–9999 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| merged_frames | IMAGE | — |
| total_frame_count | INT | — |
| info | STRING | — |