Video Shake Transition
The impact-shake cut — jolt the camera, land on the next clip
- video1
- video2
- video
Sometimes a cut doesn't need to be clever - it needs to hit. The shake transition does the thing you see in every action trailer: the frame convulses violently for a split second and when it settles, you're in the next clip. The pack frames it as "CapCut-style," and that's the right reference - it's a punch, not a flourish. Six shake styles (random_shake, horizontal_shake, vertical_shake, rotation_shake, scale_shake, combo_shake) and a fade_mix option that blends a crossfade in underneath. Use it for impact moments, cuts on a beat drop, or hiding an otherwise-jarring edit.
How it works
Chromium branch: the two frames are composited in a headless Chromium page and a shakeController in the page applies per-frame transforms - translation for horizontal/vertical, rotation for the spin, scale for the zoom-shake, and combinations for combo_shake. The Python side drives the animation in batches. Two details make the effect: transition_point (0.2–0.8, default 0.5) decides when in the clip the shake peaks, and the transition is short by design - total_frames here tops out at 60, not 300, because a shake that goes on for three seconds is motion sickness, not cinema.
Inputs and outputs that matter
video1,video2- the two clips.shake_style- the six-way enum.combo_shakeis the most dramatic;horizontal_shakeis the most readable.shake_intensity(5–50, default 20) - pixel amplitude of the jolt. 20 is already noticeable; 50 is nausea.shake_frequency(2–20, default 8) - how fast it oscillates. Higher frequency + higher intensity = that frantic jitter.transition_point(0.2–0.8, default 0.5) - when the peak lands in the transition. 0.5 puts the violence mid-cut.fade_mix(default on) - blends a crossfade under the shake, which smooths the handoff to video2.total_frames(4–60, default 12) andfps(default 24) - 12 frames at 24fps is a half-second punch. That's the right ballpark.use_gpu,batch_size,background_color,width/height,quality.
Output is video - an IMAGE batch; feed it to VHS_VideoCombine or ImageBatch to export.
Installing it
Same pack. ComfyUI Manager → "VideoTransition", or:
cd ComfyUI/custom_nodes
git clone https://github.com/yichengup/ComfyUI-VideoTransition
cd ComfyUI-VideoTransition
pip install -r requirements.txt
playwright install chromium
Chromium is required.
Common issues
- Missing Chromium crash -
playwright install chromium(mirror flag behind the GFW). - The shake looks blurry/mushy - the jolt displaces the whole frame; at high
shake_intensitywithfade_mixon you get smearing. Either drop intensity or turnfade_mixoff for a sharper cut. - Shake peaks at the wrong moment - that's
transition_point; move it toward 0.8 if you want the jolt right before the new clip lands. - Too long - this is the one node where the short
total_framescap is the author doing you a favor. Keep it under ~20 frames.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| video1 | IMAGE | — | |
| video2 | IMAGE | — | |
| shake_style | COMBO | 6 options: random_shake, horizontal_shake, vertical_shake, rotation_shake, scale_shake, combo_shake | |
| total_frames | INT | 124–60 | — |
| fps | INT | 2415–60 | — |
| shake_intensityopt | FLOAT | 20.005–50 | — |
| shake_frequencyopt | FLOAT | 8.002–20 | — |
| transition_pointopt | FLOAT | 0.500.2–0.8 | — |
| fade_mixopt | BOOLEAN | true | — |
| use_gpuopt | BOOLEAN | false | — |
| batch_sizeopt | INT | 81–20 | — |
| background_coloropt | STRING | #000000 | — |
| widthopt | INT | 640640–3840 | — |
| heightopt | INT | 640360–2160 | — |
| qualityopt | INT | 9060–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | IMAGE | — |