Video Warp Transition
Warp your way between clips — swirls, squeezes, liquid, and waves, all in pure Python
- video1
- video2
- video
If the shake is a punch, this is a stretch. Video Warp deforms video1 - swirling it down a drain, squeezing it flat, melting it, or rippling it like water - and lets video2 snap back into place as the distortion releases. It's the pack's liquid-feel transition: swirl, squeeze_h, squeeze_v, liquid, and wave. Great for dreamier cuts, title reveals, and any edit where you want the transition itself to feel physical without resorting to glitch or explosion theatrics.
How it works
This is one of the pack's true pure-Python nodes - no Playwright, no Chromium, no browser. The source implements real per-pixel displacement with OpenCV's remap: for each frame it computes a displacement map (swirl rotation, squeeze scaling, liquid noise, or sine-wave ripple), warps the source frame through it, and eases between the warped video1 and video2 over total_frames. warp_intensity and warp_speed drive the deformation, and max_scale (1–3) with scale_recovery control a squeeze-and-recover effect. Because it's pixel math rather than CSS animation, it runs fast and stays deterministic.
Inputs and outputs that matter
video1,video2- the two clips, sampled by progress.warp_type-swirl,squeeze_h,squeeze_v,liquid,wave. The personality of the effect.warp_intensity(0.1–2, default 0.5) - how hard the deformation is. 0.5 is visible but tasteful; 2 is a full melt.warp_speed(0.1–3, default 1) - how fast the distortion evolves.max_scale(1–3, default 1.3) - how far the squeeze-compress goes (pairs withsqueeze_h/squeeze_v).scale_recovery(default on) - the frame springs back to full size as video2 lands.total_frames(default 60) andfps(default 30) - the default 60 frames is a fairly long warp; 30–40 reads snappier.use_gpuandbatch_sizeare in the schema, but this one is NumPy/OpenCV on the CPU regardless - the toggles are mostly inherited pack plumbing.background_color,width/height(capped at 1920×1080).
Output is video - an IMAGE batch; combine it with VHS_VideoCombine or ImageBatch to export.
Installing it
Same pack as the rest. ComfyUI Manager → "VideoTransition", or:
cd ComfyUI/custom_nodes
git clone https://github.com/yichengup/ComfyUI-VideoTransition
cd ComfyUI-VideoTransition
pip install -r requirements.txt
That's all - this is one of the nodes where you can skip playwright install chromium entirely.
Common issues
cv2ImportError - the pack's requirements.txt doesn't list opencv-python; this node lives on the copy ComfyUI bundles. In a bare environment,pip install opencv-python.- Warp barely visible -
warp_intensityat 0.5 with a short transition can read as a subtle shimmer. Crank intensity toward 1+ or slowwarp_speedso the deformation has time to build. - Edges stretch into bars - that's
remaprevealing the background beyond the frame. Setbackground_colorto match your footage or usesqueeze_h/squeeze_vwhich stay inside the frame better. - Feels too long - the default 60 frames at 30fps is two seconds; warp effects read best as a quick flex. Drop
total_framesto ~30.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| video1 | IMAGE | — | |
| video2 | IMAGE | — | |
| warp_type | COMBO | 5 options: swirl, squeeze_h, squeeze_v, liquid, wave | |
| total_frames | INT | 604–300 | — |
| fps | INT | 3015–60 | — |
| warp_intensityopt | FLOAT | 0.500.1–2 | — |
| warp_speedopt | FLOAT | 1.000.1–3 | — |
| max_scaleopt | FLOAT | 1.31–3 | — |
| scale_recoveryopt | BOOLEAN | true | — |
| use_gpuopt | BOOLEAN | false | — |
| batch_sizeopt | INT | 51–20 | — |
| background_coloropt | STRING | #000000 | — |
| widthopt | INT | 640320–1920 | — |
| heightopt | INT | 640240–1080 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | IMAGE | — |