đź’€Video Resize
The resize node that won't wreck your aspect ratio
- video
- images
- Frame
Most "resize" nodes in ComfyUI are just a width and a height - feed them a 16:9 clip and tell them you want 512x512, and they'll squeeze it flat like a pancake. đź’€Video Resize is not that node. It's the one from the S4Motion pack that actually thinks about aspect ratio, which is why it's the most-used node in the pack. If you're feeding a video into an image-to-video model or upscaler, this is where you fix the resolution without destroying the footage.
It takes either a video input (a VideoFromFile-style object from a video loader like VHS) or an images image sequence - the tooltip says it plainly: "Video input from video nodes" and "Image sequence input". You get back a single Frame IMAGE output, which is just your whole clip as a batch of frames at the new size. Wire that into a SaveAnimatedWEBP, a save-video node, or straight into a sampler.
The inputs that matter:
- method - this is the whole point.
stretchforces both dimensions (the pancake).keep proportion(default) fits the clip inside your target box and preserves the ratio.fill / cropscales to cover the box and crops the overflow.padletterboxes it with thepad_colorhex. For anything except deliberate squishing, keep the default. - condition - set
downscale if biggerand the node skips frames that are already smaller than the target. That's the one you want before a model with a hard resolution cap: it never upscales stuff that doesn't need it, which keeps quality and saves time. - interpolation -
lanczosis the default and it's the right call for downscaling. Drop tobilinearorareaif you want speed;nearestis for pixel-art. - width / height - the target box. 16 to 8192.
Mechanically it's nothing exotic: the node converts the input to PIL frames, runs a condition check, then resizes every frame with your chosen resampling method. The whole clip is processed, not just a thumbnail - this is where OpenCV earns its keep, because VIDEO-type inputs are decoded through cv2.
Install
Same as the rest of the pack - ComfyUI Manager, search "S4Motion", install, restart. Or manually:
cd ComfyUI/custom_nodes/
git clone https://github.com/S4MUEL-404/ComfyUI-S4Motion.git
pip install -r ComfyUI-S4Motion/requirements.txt
Then restart ComfyUI. All nodes show up under the đź’€S4Motion category.
Where people get burned
- VIDEO input needs OpenCV. If you feed it a video object and
opencv-pythonisn't installed, you'll get a hard error: "OpenCV is required for video processing but not available." If you only ever feed IMAGE sequences, you can run on Pillow alone. conditionis evaluated per source size, not per frame. If your clip has mixed resolutions it picks based on the first frame. Rare, but worth knowing.pad_coloris a hex string -#000000default. If you type a color name it just falls back to black, silently.
Honestly, the community doesn't talk about this pack much - a reddit corpus search for S4Motion turns up zero discussion, so if you found a workflow using đź’€Video Resize, it came from the pack's examples/ folder. It's a small, quiet tool that does one job well. Pair it with đź’€Video Info to check what you're actually feeding in, and you'll be fine.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 51216–8192 | — |
| height | INT | 51216–8192 | — |
| interpolation | COMBO | lanczos | 5 options: nearest, bilinear, bicubic, area, lanczos |
| method | COMBO | keep proportion | 4 options: stretch, keep proportion, fill / crop, pad |
| condition | COMBO | always | 5 options: always, downscale if bigger, upscale if smaller, if bigger area, if smaller area |
| pad_color | STRING | #000000 | — |
| videoopt | VIDEO | Video input from video nodes | |
| imagesopt | IMAGE | Image sequence input |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Frame | IMAGE | — |