Get Video Components+
Tear a video apart into frames, audio, and metadata without eating your VRAM
- video
- images
- audio
- fps
- filepath
- latent
- width
- height
- frame_count
- duration
Get Video Components+ is the Swiss-army extractor for VIDEO in ComfyUI: it takes a VIDEO object and pulls out the frames, the audio, the fps, the dimensions, the file path, the frame count, and the duration - and it does it without loading the whole video into memory unless you actually need it. It's the natural companion to the pack's Load Video+ and Save Video+, and the reason it exists is that a lot of video work is just "I need this clip's frames as an IMAGE batch for an img2vid pass" or "I need its audio for muxing."
It's part of ComfyUI-FBnodes, François Beaudry's utility pack.
How it works - the smart part
The headline trick is lazy decoding. The node probes the video's metadata up front, and only decodes the heavy outputs - images and audio - if those sockets are actually connected to something. Leave them dangling and it hands back lightweight placeholders, which makes the node cheap to drop into a workflow just to read dimensions or duration. The README calls it "metadata-first," and it's a genuinely nice design: most inspection nodes decode everything because they can't know better; this one reads the graph.
When you do connect images, it decodes in fixed chunks of 128 frames to keep memory flat - so a 500-frame clip gets decoded as four batches rather than one giant tensor. It also automatically looks for a .latent file saved beside the video (the format Save Video+ writes) and exposes it on the latent output, so you can recover the original latent without a lossy video round-trip.
The outputs you'll actually use
Nine outputs, but the ones people wire:
images(IMAGE) - the frames as a batch. Feed into a KSampler for img2vid or a preview node.audio(AUDIO) - the clip's track, ready for audio nodes or muxing.latent(LATENT) - auto-loaded matching.latentfile, if one exists.fps(FLOAT),width/height(INT),frame_count(INT),duration(FLOAT) - the numbers you feed into schedulers, filename templates, and math.filepath(STRING) - where the video lives on disk.
Single input: video (VIDEO).
Installing it
ComfyUI Manager - search "ComfyUI-FBnodes" - or:
cd ComfyUI/custom_nodes
git clone https://github.com/FranckyB/ComfyUI-FBnodes.git
pip install -r ComfyUI-FBnodes/requirements.txt
Restart ComfyUI. This node leans on av (PyAV) for decoding, which is the pack's one real dependency and gets installed with it.
Common issues
The lazy-decode behavior is the thing to understand before you debug: if images comes back as a 1×1 placeholder, you don't have a bug, you just haven't wired that output to anything - that's the design working. And if the latent output is empty, there's no .latent file beside the video (Save Video+ needs its "Save Latent" option on to write one). For decode-heavy jobs, remember chunked decoding means it's slower but gentler on VRAM than a full decode - the right trade when you're extracting frames from a long clip on a modest card.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | The video to extract components from. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| fps | FLOAT | — |
| filepath | STRING | — |
| latent | LATENT | — |
| width | INT | — |
| height | INT | — |
| frame_count | INT | — |
| duration | FLOAT | — |