Preview/Save video
Ran a Veo node and saw nothing? This is the node that shows the video
- video_paths
Here's the thing that trips up everyone's first Veo workflow: the Veo nodes in this pack don't display anything. They generate a video, dump it in ComfyUI's temp folder, and hand you a VEO_VIDEO path list. If your graph ends there, you've spent API money and have nothing on screen to show for it. VeoVideoSaveAndPreview is the terminal node that fixes that - it's what actually renders the video in the UI and, if you ask nicely, saves it somewhere permanent.
How it works
It's an output node, so it produces no data outputs - its whole purpose is the player widget and the file handling. It takes the video file paths, opens each one with moviepy to pull the duration, dimensions, and format, then hands a metadata bundle to a small custom JS widget (preview_veo_video.js in the pack's web/ folder) that draws the in-canvas player. The autoplay, mute, and loop flags are exactly what they sound like - player behavior, passed straight through to the widget.
The interesting part is save_video. When it's off (the default), the video just previews from temp. Flip it on and the node copies the file from temp into output/veo, named {prefix}_{timestamp}_{md5-hash}.{ext}, so you get a unique, collision-proof filename each run. That's the difference between "I can see it right now" and "I can find it next week."
Inputs that matter
- video_paths (
VEO_VIDEO) - feed it from any Veo node'svideo_pathsoutput. Required, and it errors if it's empty. - save_video - the one most people forget to flip. Off by default, which is why your Veo clips vanish.
- save_video_file_prefix - default
veo_video; change it if you want your outputs grouped by project. - autoplay / mute / loop - player controls. Mute defaults to true, which is honestly a mercy on an 8-second generated clip.
It accepts .mp4, .webm, .ogg, .mov, and .mkv, and raises a clear error if it hits a file it can't handle.
Installing it
Part of the Google GenMedia pack - install via ComfyUI Manager (search comfyui-google-genmedia-custom-nodes) or:
cd ComfyUI/custom_nodes
git clone https://github.com/GoogleCloudPlatform/comfyui-google-genmedia-custom-nodes
pip install -r comfyui-google-genmedia-custom-nodes/requirements.txt
Restart, and it lives under Google AI/Utils. No models to download; moviepy (which powers the metadata reading) comes with the requirements. And since this is a Google Cloud pack, the Veo node feeding it still needs your gcp_project_id and gcp_region set - plus gcloud auth application-default login on a local install.
Where people get burned
Mostly it's the save flag, honestly. The other common miss: running a Veo workflow without this node at the end and wondering where the output went. It's a deliberately dumb node - wire it after the Veo generator, flip save_video when you care about the file, and if you also need frames for post-processing, run VeoVideoToVHSNode in parallel. Same input, two different jobs, no conflict.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| video_paths | VEO_VIDEO | — | |
| autoplay | BOOLEAN | true | — |
| mute | BOOLEAN | true | — |
| loop | BOOLEAN | false | — |
| save_video | BOOLEAN | false | — |
| save_video_file_prefix | STRING | veo_video | — |
Outputs (0)
No outputs