Load & Resize Media
The one loader for images AND video, with resize, audio, and an is_video flag
- IMAGE
- frames
- width
- height
- frame_rate
- audio
- is_video
- meta_bundle
The flagship of Nifty Nodes' media trio, and it earns the name "versatile." Load & Resize Media opens images, animations, and video through a single file dropdown - jpg, png, webp, gif, apng, avif, mp4, mkv, webm and friends - runs the pack's resize pipeline on whatever comes in, and then hands you an unusually complete picture of what it loaded: frame count, dimensions, frame rate, audio, a meta_bundle, and a boolean saying whether it was a video at all.
That last flag is the clever bit. Because it's an output (is_video, True for videos and animations, False for stills), you can route a downstream graph on what kind of thing got loaded - a Nifty Input Switch on is_video can send a loaded video to a video-sampling path and a still image to an image path, all from one loader. That single boolean turns a universal loader into a universal workflow front-end.
The inputs that matter
- file - dropdown of your ComfyUI
inputfolder (with an upload control),none= empty output. - force_frame_rate - resample to a target fps. 0 = keep the source rate. Set 24/30/60 to force it; frames get resampled on load.
- resize - the shared resize pipeline: exact dimensions (with center-crop option), multiplier, longer/shorter side, width/height only, target megapixels, or "make divisible by N" for video models like WAN. Separate upscale/downscale methods, from
nearest-exactfor pixel art tolanczosfor smooth upscales.
Outputs: IMAGE (loaded frames as a batch), frames, width, height, frame_rate, audio, is_video, meta_bundle. An AUDIO output means you can even carry the soundtrack through to a video-encode stage - and if the file has no audio, you get a silent placeholder rather than an error.
How it works under the hood
Still images load straight through PIL. Videos and animations go through the bundled imageio-ffmpeg, which decodes frames and (if you asked) resamples them to your forced frame rate; the source fps is probed so frame_rate reports something real. If a file has audio, it's extracted (via torchaudio when available) and passed along. Failed or empty video reads return an empty batch instead of crashing the graph - a small mercy that matters when you're batch-loading a folder with a mixed bag in it.
The one thing it can't do is decide for you - that's what is_video is for. If you want a loader restricted to a single kind, Load & Resize Image and Load & Resize Video are the narrow versions of this same node, with trimmed output sets to match.
Install
Nifty Nodes: ComfyUI Manager → search "Nifty Nodes", or
cd ComfyUI/custom_nodes
git clone https://github.com/Stibo/comfyui-nifty-nodes
Restart ComfyUI, keep ComfyUI current (v3 API). Video decoding rides on the pack's imageio-ffmpeg dependency - it comes bundled, so no extra model files. Young pack, but this loader is the one I'd install it for.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| file | COMBO | none | Image, video or animation file to load. Select 'none' to pass through an empty output. |
| force_frame_rate | INT | 00–240 | Force a specific frame rate for playback and resampling. 0 = keep the original frame rate of the file. |
| resize | COMBO | Resize mode to apply after loading. 'off' loads the file at its original size. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| frames | INT | — |
| width | INT | — |
| height | INT | — |
| frame_rate | INT | — |
| audio | AUDIO | — |
| is_video | BOOLEAN | — |
| meta_bundle | BUNDLE | — |