ComfyUI Node

Veo3.1 Reference To Video

Character consistency in Veo 3.1 without training a thing

By GoogleCloudPlatform·Created 8 months ago·Updated about a month ago· 47
Veo3.1 Reference To Video
  • image1
  • image2
  • image3
  • video_paths
modelVEO_3_1
image_formatPNG
prompt
aspect_ratio16:9
output_resolution720p
compression_qualityoptimized
person_generationallow_adult
duration_seconds8
generate_audiotrue
sample_count1
output_gcs_uri
negative_prompt
seed0
gcp_project_id
gcp_region

Text-to-video gets you a video, but it's a lottery whether the character, the outfit, or the art style survives from shot to shot. That's the gap the reference-to-video mode in Veo 3.1 is built for: hand it up to three reference images and it uses them to anchor the style and content of the clip. No LoRA training, no fine-tuning, just images in, video out. If you've been fighting character drift in Veo, this is the node you want.

How it works

The node packages your prompt plus one to three reference image tensors and sends the whole bundle to Google's Veo 3.1 API on Vertex AI. image1 is required - that's your primary anchor. image2 and image3 are optional secondary references you can add for extra constraints, like a style sheet plus a character sheet. The model uses them to keep the output consistent with what you showed it. It runs the standard Veo 3.1 generation pipeline: polls the long-running operation, downloads the result, and hands back a list of local file paths in the temp folder.

Inputs that matter

The full generation toolkit is on show here, but the ones a beginner actually touches:

  • image1, image2, image3 - your reference images. image1 is mandatory; the other two are optional.
  • prompt - what you want to happen in the video. The model still follows this on top of the references.
  • model - VEO_3_1 by default, with VEO_3_1_FAST and VEO_3_1_LITE as cheaper, quicker variants.
  • output_resolution - 720p (default), 1080p, or 4k. The default is the one people complain about; bump it if your budget allows.
  • duration_seconds - 4, 6, or 8 seconds (the API only accepts those).
  • generate_audio - Veo 3.1's native audio is one of the few genuinely unmatched capabilities in this space; leave it on unless you're scoring it yourself.
  • sample_count - up to 4 variations of the same request, billed per video.

Optional extras: negative_prompt to steer away from things, seed for reproducibility, and output_gcs_uri, which is required if you set compression_quality to lossless - otherwise the node throws an interactive error telling you exactly that.

Gotchas

Two things to flag. The seed widget's tooltip says seed works with enhance-prompt disabled, but Veo 3.1 doesn't let you disable prompt enhancement at all - so in practice, treat the seed as mostly decorative on these nodes. And the 720p default is a recurring complaint: people pay for Veo and feel shortchanged by the default resolution, so set output_resolution before you burn an expensive run.

Installing and using

It's part of the Google GenMedia pack - ComfyUI Manager, search comfyui-google-genmedia-custom-nodes, install, restart. Manual:

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

You'll find it under Google AI/Veo3.1. Every node in the pack needs your gcp_project_id and gcp_region on the node itself (or GKE workload identity if you're running on GKE), and billing is per Vertex AI call - this is API, not local inference. The video_paths output feeds VeoVideoSaveAndPreview to watch the result, or VeoVideoToVHSNode if you want frames for post-processing.

CategoryGoogle AI/Veo3.1

Inputs (18)

NameTypeDefaultDescription
modelCOMBOVEO_3_13 options: VEO_3_1, VEO_3_1_FAST, VEO_3_1_LITE
image1IMAGE
image_formatCOMBOPNGMIME type of the image
promptSTRING
aspect_ratioCOMBO16:92 options: 16:9, 9:16
output_resolutionCOMBO720p3 options: 720p, 1080p, 4k
compression_qualityCOMBOoptimized2 options: optimized, lossless
person_generationCOMBOallow_adult2 options: dont_allow, allow_adult
duration_secondsINT84–8
generate_audioBOOLEANtrue
sample_countINT11–4
image2optIMAGE
image3optIMAGE
output_gcs_urioptSTRING
negative_promptoptSTRING
seedoptINT00–42949672950 seed let's Veo API handle randomness.
gcp_project_idoptSTRINGGCP project id where Vertex AI API will query Veo
gcp_regionoptSTRINGGCP region for Vertex AI API

Outputs (1)

NameTypeDescription
video_pathsVEO_VIDEO