LoadVideo [π -π ’π €π π £π ]
Turn a video file into a batch of frames ComfyUI can actually use
- IMAGES
- EMPTY LATENTS
- METADATA
- WIDTH
- HEIGHT
- META_FPS
- META_N_FRAMES
This is the node ComfyUI-N-Nodes' README is actually talking about when it says "LoadVideo" - the pack's real video decoder, tagged with the circled [N-SUITE] badge in the node picker to keep it from colliding with everyone else's node of the same name (there's a whole other page on this site about that collision, if you're curious). What it does: point it at a video, and it hands back a batch of individual frame tensors your graph can actually work with, plus enough metadata to reassemble them into a video again later.
How it works
Under the hood it decodes the source clip frame by frame (via moviepy) and returns them as a stacked IMAGES batch. You control the volume and shape of what comes out: framerate lets you keep the original pace or drop to half/quarter speed, which is the cheap way to cut a huge frame count down to something your GPU and RAM can hold. resize_by (none/width/height) plus size scales frames on the way in, so you're not decoding a 4K clip at full resolution just to downsize it in a later node. images_limit caps how many frames you pull at all, and starting_frame lets you skip ahead instead of always starting at frame zero - handy for grabbing a clip from the middle of a longer source. autoplay is a UI convenience for previewing the loaded clip in ComfyUI itself. You can also feed it local_url instead of picking an uploaded file, if your setup supports pulling from a URL directly.
The outputs, and where they go
IMAGES is the frame batch - wire it into FrameInterpolator, an upscaler, ControlNet preprocessors, or anything else that eats a batch of images. EMPTY LATENTS gives you a matching stack of blank latents sized to the batch, useful if you're about to run these frames through a sampler for an img2img-style video pass. METADATA is the important one to not lose: it's a small string object carrying the FPS and frame count, and both FrameInterpolator and the pack's own SaveVideo expect it as input so they know what frame rate they're actually working with. The remaining four - WIDTH, HEIGHT, META_FPS, META_N_FRAMES - are the same information broken out as plain ints, for wiring into nodes that want a number rather than parsing the metadata string themselves.
Installing the pack
- ComfyUI Manager - search "ComfyUI-N-Nodes," install, restart.
- Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/Nuked88/ComfyUI-N-Nodes.git, then restart ComfyUI.
Common issues & troubleshooting
Out-of-memory or allocation errors on longer or higher-resolution clips. This node loads every extracted frame into RAM as a tensor before handing the batch downstream, and someone hit exactly that on a low-spec machine (GTX 1060 3GB, 12GB system RAM) trying to run a face-swap workflow - DefaultCPUAllocator: not enough memory errors on a multi-gigabyte allocation. If you're on a modest machine, the fix is in this node's own inputs before you reach for anything else: drop framerate to half or quarter, resize down with resize_by/size, and set images_limit instead of loading an entire clip at full resolution.
moviepy.editor import errors. The pack's video pipeline imports from moviepy.editor, which moviepy 2.0 removed entirely. If decoding starts throwing ModuleNotFoundError after an environment update, the community fix is editing ComfyUI-N-Nodes/py/video_node_advanced.py to import from moviepy directly instead of moviepy.editor, or pinning moviepy<2.
A workflow from before February 2024 loads with broken nodes. The pack renamed its node classes wholesale around that date. Use the migration tool it ships - drag the .json onto migrate.bat (Windows) or run python libs/migrate.py path/to/workflow.json (Linux) - it writes a _migrated copy and leaves your original alone.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| video | COMBO | 0 options: | |
| local_url | STRING | β | |
| framerate | COMBO | original | 3 options: original, half, quarter |
| resize_by | COMBO | none | 3 options: none, width, height |
| size | INT | 512 | β |
| images_limit | INT | 0 | β |
| batch_size | INT | 0 | β |
| starting_frame | INT | 0 | β |
| autoplay | BOOLEAN | true | β |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| IMAGES | IMAGE | β |
| EMPTY LATENTS | LATENT | β |
| METADATA | STRING | β |
| WIDTH | INT | β |
| HEIGHT | INT | β |
| META_FPS | INT | β |
| META_N_FRAMES | INT | β |