🎬 S42 CutFlow Ken Burns
Pan and Zoom on Demand
- clip
- clip
- frame_count
- info
Named after the documentary filmmaker who turned a slow, stately zoom into an entire visual language, the Ken Burns effect is how you make a still image feel like it has a camera. S42CF_KenBurns brings that to S42 CutFlow: an animated pan and zoom applied to your clip or still, with easing so the motion accelerates and decelerates like a real camera move instead of sliding at a constant rate.
The inputs that matter
The node works by cropping a window into each frame and resizing it back up, so it's all in the four corners:
start_x/start_y- where the crop window starts (0–1, normalized across the frame). 0, 0 is top-left.start_zoom- the starting magnification. 1.0 is full view, 2.0 is a 2× zoom (a 50% crop).end_x/end_y- where the crop window ends up.end_zoom- the ending magnification (default 1.5).easing- the acceleration curve (ease_in_outby default). This is what separates a film look from a mechanical slideshow: the camera starts slow, moves, settles slow.output_frames- 0 means "keep the input length." Set a number to force a specific output duration.
So a classic push-in is start_zoom 1.0 → end_zoom 1.3 with start_x/y drifting from 0 to 0.3/0.2. The default values in the node actually demo this decently.
The still-image workflow (this is where it shines)
The tooltip has the key gotcha: for still images, use S42CF_ImageToClip first - otherwise KenBurns animates a single frame and you get one frozen frame out, which defeats the purpose. The right chain:
- Image → S42CF_ImageToClip (say 72 frames, 3 seconds)
- → S42CF_KenBurns (zoom 1.0 → 1.3, ease_in_out)
- → grade, grain, export
That's the entire "make my AI still cinematic" recipe, and it's why this node pairs with ImageToClip constantly. It works on real video clips too - a subtle push-in on already-moving footage adds production value - but its superpower is animating stills.
Outputs are clip, frame_count, and info. Since it's a crop-resize operation on CPU, it's fast and VRAM-free, and the normalized coordinates mean the same settings work at any resolution.
Install
ComfyUI Manager → search "S42 CutFlow" → Install → restart. Or:
cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt
Restart fully; console prints [S42 CutFlow] Loaded 53 total nodes. Pure CPU/numpy - no models, no VRAM. Only pack dependency is OpenCV (opencv-python-headless in requirements.txt; README's troubleshooting says pip install opencv-python if you see "No module named 'cv2'").
Pack caveat, standing: Geeky Ghost runs S42 CutFlow as a work-in-progress being groomed for LTX Desktop. The composition core - KenBurns included - is stable; expanded nodes are where things move.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | IMAGE | Source clip or image. For stills, use ImageToClip first or this will animate a single frame. | |
| start_x | FLOAT | 0.000–1 | Start crop left edge (0-1 of width). |
| start_y | FLOAT | 0.000–1 | Start crop top edge. |
| start_zoom | FLOAT | 1.000.2–3 | Start zoom level. 1.0 = full view, 2.0 = 2x zoom (50% crop). |
| end_x | FLOAT | 0.300–1 | End crop left edge. |
| end_y | FLOAT | 0.200–1 | End crop top edge. |
| end_zoom | FLOAT | 1.500.2–3 | End zoom level. |
| easing | COMBO | ease_in_out | Animation easing curve. |
| output_frames | INT | 00–9999 | Output frame count. 0 = same as input clip length. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| clip | IMAGE | — |
| frame_count | INT | — |
| info | STRING | — |