Nodes/ComfyUI 1hewNodes/Video to Image
ComfyUI Node

Video to Image

Unpack a VIDEO object into frames, audio, fps, and a frame count

By 1hew·Created about a year ago·Updated 16 days ago· 33
Video to Image
  • video
  • image
  • audio
  • fps
  • frame_count

A ComfyUI VIDEO object is an opaque bundle: frames, audio, and a frame rate all wrapped up in one black-box thing that most nodes can't touch directly. Video to Image is the wrench that cracks it open. Feed it any VIDEO object and you get an IMAGE batch you can actually run image nodes on, plus the audio, the fps, and the frame_count on the side. It's a conversion utility - the exact kind of thing you'll find yourself googling the moment your video workflow wants to hand frames to the image side of the graph.

Why you'd reach for it

Think of the classic pipeline: generate a Wan or LTX clip, then realize the frames need per-frame upscaling, a face fix pass, or a light img2img touch-up before you export. None of those image nodes accept a VIDEO object. This node sits right after any VIDEO producer - Load Video, URL to Video, or the sampler's own video output - and turns it back into a plain frame batch that the whole image-node universe understands.

The fps and frame_count outputs are the part people underestimate. frame_count gives you the batch size without eyeballing it, and fps lets you do timing math: how many frames is three seconds at 24fps, or how to size a downstream loop. Wire both into an Int/Float consumer and you've got the video's geometry as plain numbers.

How it works

No re-decoding, no second ffmpeg pass. The node calls the VIDEO object's standard get_components() method and unpacks whatever the producer already holds: the image tensor, audio (if the video has an audio stream), and the frame rate. frame_count is just the first dimension of the image batch - the number of frames. If the input is None or the video has zero valid frames, it returns empty outputs (no image, no audio, fps 0.0, count 0) instead of crashing. One real failure mode exists: if you wire in something that isn't a proper VIDEO object, you get a TypeError: video must provide a get_components() method. That's the node's way of saying "that's not a video."

The four outputs

  • image (IMAGE) - the frames as a batch, ready for any image node.
  • audio (AUDIO) - the audio track; None for videos without one. Check before feeding it to audio nodes.
  • fps (FLOAT) - the video's frame rate, straight from the object's metadata.
  • frame_count (INT) - how many frames ended up in the image output.

Install

Via ComfyUI Manager: search "1hewNodes" in the Custom Nodes Manager, install, restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/1hew/ComfyUI-1hewNodes

then restart ComfyUI. No model downloads for this node - the pack's heavier requirements (opencv, scikit-image, psd-tools, ultralytics, transformers, rembg, transparent-background) all belong to other nodes in the collection, and Manager installs them regardless. Expect a longer first startup while all that imports.

Common issues

  • TypeError: video must provide a get_components() - you fed it the wrong type. Common causes: connecting an IMAGE batch directly, or an older custom-node output that fakes being a video. Only genuine ComfyUI VIDEO objects work.
  • The audio output is None for clips without an audio stream. If a downstream node errors, this is usually why - guard with an Any Empty Bool or similar.
  • fps shows 0.0. It's read from the VIDEO object's metadata, so a producer that didn't set a frame rate gives you nothing. Re-check the upstream loader, not this node.
  • Long clips eat RAM. The image output is the whole clip as one tensor batch in memory. For a 1000-frame video that's a lot of frames sitting in VRAM/RAM - not a bug, just the nature of materializing a video as images.

It's a boring, faithful little node - and that's the compliment. It doesn't re-encode, doesn't guess, and its four outputs are exactly what they say they are.

Category1hewNodes/conversion

Inputs (1)

NameTypeDefaultDescription
videooptVIDEO

Outputs (4)

NameTypeDescription
imageIMAGE
audioAUDIO
fpsFLOAT
frame_countINT