ComfyUI Node

Veo 3 to VHS

The bridge that turns a Veo 3 clip into frames ComfyUI can actually touch

By cuban044·Created about a year ago·Updated about a year ago· 3
Veo 3 to VHS
  • video_paths
  • images

Veo 3 to VHS is the pack's translator. The generation node hands you a path to an .mp4 on disk, which is great for playing in a video player and useless to nearly every other node in ComfyUI. Comfy's video pipeline mostly thinks in batches of images - a tensor shaped [frames, height, width, 3] of 0–1 float RGB. This node opens the .mp4 with OpenCV and converts it into exactly that. The name is a nod to Video Helper Suite (VHS), the de-facto standard for video in ComfyUI; it has nothing to do with magnetic tape.

Why you'd bother

Because everything you want to do after generation happens locally, on frames. Upscale the clip with your favorite model, run frame interpolation to smooth the motion, push frames through img2img for a consistent style pass, or cut a contact sheet - none of that works on the raw file. This node is the bridge that gets your paid Google clip into the part of the workflow you actually control.

How it works

The mechanics are simple and worth knowing before you trust the output:

  • It samples up to 120 frames evenly across the clip - total_frames // 120 sets the step, so a 192-frame clip (8 seconds at 24fps) becomes every other frame.
  • OpenCV reads in BGR; the node converts to RGB, normalizes to 0–1 floats, and stacks everything into a single IMAGE batch.
  • If it gets an empty list (generation failed upstream), it returns a 512×512 black dummy image instead of erroring. That keeps your workflow alive - and means you should check the result, because black frames are not a successful generation.

Inputs and output

Just one input: video_paths (VEO_VIDEO), from Veo 3 Text to Video or passed through the Video Saver. Output: images (IMAGE) - the batched frame stack.

Wire images into anything that takes an IMAGE batch: a VHS encode node, an upscaler, an interpolation model, whatever your post pipeline is. One caveat: this is a bare IMAGE batch, not VHS's video format, so it carries no FPS metadata. Your source is 24fps - keep that in mind when you reassemble the output at the end.

Installing and gotchas

Same pack, same install as Veo 3 Text to Video - one clone (or ComfyUI Manager, search "Veo 3 Experimental"), pip install -r requirements.txt, restart. The relevant dependency here is opencv-python, which the requirements already pull in, so there's nothing extra to grab.

Two things trip people up. First, 120 frames is a cap, so an 8-second clip loses half its frames to sampling - fine for upscaling, less fine for interpolation projects where you want the real cadence. Second, a failed generation upstream gives you the silent black dummy rather than an error; glance at the preview before building a whole post pipeline on top of it.

For a pack this small, this is the node that makes the API output actually composable. Cheap, boring, and you'll want it on every workflow.

Categoryvideo/conversion

Inputs (1)

NameTypeDefaultDescription
video_pathsVEO_VIDEO

Outputs (1)

NameTypeDescription
imagesIMAGE