Nodes/ComfyUI-VideoHelperSuite/Load Video (Upload) πŸŽ₯πŸ…₯πŸ…—πŸ…’
ComfyUI Node Runs on cloud

Load Video (Upload) πŸŽ₯πŸ…₯πŸ…—πŸ…’

Get a video file into ComfyUI as frames

By KosinkadinkΒ·Created 3 years agoΒ·Updated 3 months agoΒ· 1,727
Load Video (Upload) πŸŽ₯πŸ…₯πŸ…—πŸ…’
  • meta_batch
  • vae
  • IMAGE
  • frame_count
  • audio
  • video_info
β—„videoβ–Ύβ–Ί
β—„force_rate0β–Ί
β—„custom_width0β–Ί
β—„custom_height0β–Ί
β—„frame_load_cap0β–Ί
β—„skip_first_frames0β–Ί
β—„select_every_nth1β–Ί
β—„formatAnimateDiffβ–Ί

ComfyUI thinks in images. It has no idea what a video is. So the moment you want to do something to an existing clip - restyle it, run ControlNet off its motion, upscale it frame by frame, or just grab its last frame to keep a longer generation going - you need a node that cracks the file open into individual frames. That's this one. Load Video (Upload) takes a video sitting on your machine, uploads it to ComfyUI's input folder, and hands the rest of your graph a batch of images plus the audio and metadata that came with it.

It's part of ComfyUI-VideoHelperSuite, Kosinkadink's video I/O pack - the same author behind AnimateDiff-Evolved, and the same reliability. VHS is the default in/out layer for video work in ComfyUI regardless of which model you're driving, so if Load Video is the front door, Video Combine is the back one.

How it works

Under the hood it decodes the file with ffmpeg and turns each frame into an image tensor. Where it earns its keep is the handful of knobs that let you not load the whole thing - because a 30-second 30fps clip is 900 frames, and 900 frames of latents will happily eat all your RAM and fall over.

The four that actually matter:

  • frame_load_cap - the max number of frames to load. It defaults to 0, which means load everything, which is the classic way to OOM on a long video. Set a real cap (say 81, a common Wan clip length) and you control the batch size.
  • force_rate - resamples the clip to a target fps by dropping or duplicating frames. Many motion models want a specific rate; set this to match (the AnimateDiff era ran at 8, Wan-style workflows at 16). Leave it 0 to keep the source rate. Lowering it also cuts frames, which cuts time and memory.
  • skip_first_frames - an offset into the clip. Combined with frame_load_cap, this is how you process a long video in chunks: bump the skip by the cap each run.
  • select_every_nth - keeps one frame out of every N. Better behaved than force_rate on variable-frame-rate sources like gifs, where forcing a rate can get weird.

There's also custom_width / custom_height to resize on the way in (set both and it crops to keep aspect ratio; leave at 0 to keep native size). Two optional inputs are worth knowing: vae, which makes the node emit latents instead of images - a big system-RAM saver on 100+ frame clips, and recommended unless you're feeding a node that specifically needs an image connection like Apply ControlNet - and meta_batch, for splitting genuinely huge sequences into managed sub-batches.

The outputs, and one you shouldn't ignore

Four of them. IMAGE is the frame batch - the main event, wired into your sampler, upscaler, or ControlNet. frame_count tells you how many frames actually came out. audio carries the original soundtrack, so you can hand it straight to Video Combine and keep sound attached. And video_info exposes the source's real properties, including its frame rate - wire that fps into Video Combine's frame_rate and your output can't drift out of sync with the source. That last trick is the difference between a clean vid2vid and one that plays at the wrong speed.

Installing it

ComfyUI Manager: search ComfyUI-VideoHelperSuite, install, restart. Or from a terminal:

cd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite

then restart. It's a utility pack - no models to download.

Where people get burned

Two things, and they're both boring in the good way. First, ffmpeg: decoding is ffmpeg's job, so on a machine without it installed and on PATH, loading fails. If you're managing your own ComfyUI, install ffmpeg. (On ComfyICU it's baked into the executor image, so this one's a non-issue.)

Second, frame_load_cap = 0. The default loads every frame, and on a long clip that's a fast route to an out-of-memory crash - the fix is simply to cap it and pull the video in pieces with skip_first_frames. If your preview looks like it's ignoring your cap and skip settings, that's expected unless you've turned on Advanced Previews in the VHS settings, which makes the node's animated preview actually reflect the frame range you selected - genuinely useful for lining up an exact slice before you commit compute to it.

CategoryVideo Helper Suite πŸŽ₯πŸ…₯πŸ…—πŸ…’

Inputs (10)

NameTypeDefaultDescription
videoCOMBO0 options:
force_rateFLOAT00–60β€”
custom_widthINT00–8192β€”
custom_heightINT00–8192β€”
frame_load_capINT00–9007199254740991β€”
skip_first_framesINT00–9007199254740991β€”
select_every_nthINT11–9007199254740991β€”
meta_batchoptVHS_BatchManagerβ€”
vaeoptVAEβ€”
formatoptCOMBOAnimateDiff7 options: None, AnimateDiff, Mochi, LTXV, Hunyuan, Cosmos, +1

Outputs (4)

NameTypeDescription
IMAGEIMAGEβ€”
frame_countINTβ€”
audioAUDIOβ€”
video_infoVHS_VIDEOINFOβ€”