Video Transition
57 ways to join two clips
- video_a
- video_b
- video
Hard cuts are fine until they're not. Video Transition is the node that crossfades one clip into another with FFmpeg's xfade family - plain fades, dissolves, directional slides, circle reveals, radial and pixelize transitions, and a few dozen more. It's how you join two generated clips so the seam feels intentional.
What it does
On ▶ Run it blends video_a (the outgoing clip) into video_b (the incoming one) over a transition of your choice and outputs a single COMFYTV_VIDEO. Both inputs are required - run with either missing and the node errors instead of guessing.
The controls:
- transition - pick from the full
XFADE_TRANSITIONSmenu:fade(default),dissolve,fadeblack,fadewhite, directional wipes and slides (wipeleft…smoothdown), reveals (circlecrop,circleopen,vertopen…),cover*/reveal*,squeezeh/squeezev,zoomin,distance,pixelize,radial,hblur. That's 57 named styles. - duration - transition length in seconds, 0.1–5.0, default 1.0.
- offset - seconds into clip A where the transition starts; 0 (default) means auto - it places the transition at the tail of A, ending the clip. Set a real value only when you want the transition to begin earlier inside A.
Choosing well
The honest guidance: 90% of the time a fade or dissolve is the right answer, and the exotic wipes read as motion graphics, not filmmaking. The directional wipes and cover*/reveal* family earn their keep in montages and title sequences; pixelize and radial are the "stylized reveal" options for AI-video work where you want the transition to feel generative. If you want a gradient wipe - a shape sweeping across based on a grayscale pattern - that's a different node, Luma Wipe, which supports custom luma images. For assembling many clips with per-cut transitions in one node, the pack's Sequence stage does it at scale.
Install and troubleshooting
Pack-standard: git clone https://github.com/jtydhr88/ComfyTV into ComfyUI/custom_nodes, restart, under ComfyTV → Compose. No models, no GPU - PyAV xfade pass.
- Run errors "needs two upstream videos" - one of
video_a/video_bis unwired or wasn't run. Both must hold snapshots. - Transition looks off - check
duration(a 1s transition on a 3s clip is a big fraction) and whetheroffsetis pulling the start into the middle of A when you wanted the tail. - Wanted a gradient/custom wipe - that's Luma Wipe, not this node.
Output is a COMFYTV_VIDEO snapshot; cross to native ComfyUI nodes with a ← ComfyTV Video Bridge.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| transition | COMBO | fade | 58 options: fade, dissolve, fadeblack, fadewhite, fadegrays, fadefast, +52 |
| duration | FLOAT | 1.000.1–5 | — |
| offset | FLOAT | 0.000–3600 | seconds into clip A where the transition starts; 0 = auto (end of A) |
| video_aopt | COMFYTV_VIDEO | — | |
| video_bopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |