Nodes/ComfyUI-VideoTransition/Video Warp Transition
ComfyUI Node

Video Warp Transition

Warp your way between clips — swirls, squeezes, liquid, and waves, all in pure Python

By yichengup·Created 11 months ago·Updated 11 months ago· 25
Video Warp Transition
  • video1
  • video2
  • video
warp_type
total_frames60
fps30
warp_intensity0.50
warp_speed1.00
max_scale1.3
scale_recoverytrue
use_gpufalse
batch_size5
background_color#000000
width640
height640

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 with squeeze_h/squeeze_v).
  • scale_recovery (default on) - the frame springs back to full size as video2 lands.
  • total_frames (default 60) and fps (default 30) - the default 60 frames is a fairly long warp; 30–40 reads snappier.
  • use_gpu and batch_size are 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

  • cv2 ImportError - 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_intensity at 0.5 with a short transition can read as a subtle shimmer. Crank intensity toward 1+ or slow warp_speed so the deformation has time to build.
  • Edges stretch into bars - that's remap revealing the background beyond the frame. Set background_color to match your footage or use squeeze_h/squeeze_v which 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_frames to ~30.
CategoryVideoTransition

Inputs (14)

NameTypeDefaultDescription
video1IMAGE
video2IMAGE
warp_typeCOMBO5 options: swirl, squeeze_h, squeeze_v, liquid, wave
total_framesINT604–300
fpsINT3015–60
warp_intensityoptFLOAT0.500.1–2
warp_speedoptFLOAT1.000.1–3
max_scaleoptFLOAT1.31–3
scale_recoveryoptBOOLEANtrue
use_gpuoptBOOLEANfalse
batch_sizeoptINT51–20
background_coloroptSTRING#000000
widthoptINT640320–1920
heightoptINT640240–1080

Outputs (1)

NameTypeDescription
videoIMAGE