Nodes/ERPK Collection/Veo Image to Video
ComfyUI Node

Veo Image to Video

Google's best video model, fed from your canvas

By eRepublik-Labs·Created 11 months ago·Updated 20 days ago· 1
Veo Image to Video
  • image
  • client
  • last_frame_image
  • reference_images
  • video_path
prompt
modelveo-3.1-generate-preview
aspect_ratio16:9
resolution720p
duration_seconds8
person_generationallow_adult
seed-1
output_directory

What it is

This node sends an image from your ComfyUI canvas to Google's Veo and gets a video back. Veo 3.x is the model the community grudgingly admits is ahead of open-source video right now - and it's the only one that generates native synchronized audio along with the picture. If you want your still frame turned into a moving, talking, sound-emitting clip without leaving ComfyUI, this is the node.

It's under ERPK/Gemini/Veo, which tells you the important thing: this is a Gemini API node, not a WaveSpeed one. Different key (Google's, free tier available from aistudio.google.com/app/apikey), different billing, and separate Veo-via-WaveSpeed nodes exist elsewhere in the pack if you'd rather be billed through WaveSpeed instead.

How it works

Your image becomes the first frame. The node uploads it, kicks off a generation, and polls until it's done - expect minutes, not seconds. The finished video is saved to disk (ComfyUI's output folder by default) and returned as a video_path string that wires into PreviewVideo or Preview Anything. Temp upload files are cleaned up automatically. If the safety filter blocks the request, you get an error and - per the source - Veo doesn't charge for blocked generations. That's a small mercy.

The inputs that matter

  • image - required first frame. Everything starts here.
  • prompt - optional, and it's where the magic hides: Veo 3.x understands audio cues, so you can write "she speaks, wind rustling, soft music in background" and get real sound.
  • model - default veo-3.1-generate-preview; also -lite- (cheapest, but no 4K and no reference images) and -fast-.
  • last_frame_image - optional last frame for first-to-last interpolation. This is the killer feature, and it's a trap: it requires duration_seconds=8, or the API rejects it with an opaque "use case not supported" 400 after burning several minutes of generation.
  • reference_images - up to 3 images for style/content guidance, Veo 3.1 / 3.1 Fast only. Requires 8s and 16:9, and is mutually exclusive with last_frame_image.
  • duration_seconds, resolution, aspect_ratio - the node auto-clamps invalid combos. 8s output demands 1080p or reference images (720p gets bumped automatically); Lite caps at 1080p; Veo 2 ignores resolution entirely.
  • person_generation - safety. Image-to-video rejects allow_all; use allow_adult or dont_allow.

One honest quirk: the seed widget is for ComfyUI cache invalidation only - the Gemini Developer API doesn't accept a seed for video, so it's never forwarded. Changing it just forces a fresh run.

Installing the pack

  1. ComfyUI ManagerInstall Custom Nodes → search erpkERPK Custom Nodes → install → restart.
  2. Or:
cd /path/to/ComfyUI/custom_nodes/
git clone https://github.com/eRepublik-Labs/comfyui-nodes-erpk.git erpk
cd erpk
pip install -r requirements.txt

Then set your Google API key (not a WaveSpeed key) in right-click canvas → ERPK Settings → API Keys, or grab an API key from aistudio.google.com. The Gemini nodes run standalone when the key is in Settings - the optional client input just pulls in a Gemini API Config node if you want explicit control.

Gotchas, condensed

  • Interpolation needs 8s. The single most common failure: connect a last frame at 4s or 6s and watch it fail after a long generation. Set 8s.
  • Reference images are picky: 8s, 16:9, Veo 3.1+, and never together with a last frame.
  • It's slow by nature. Multi-minute polling is normal; don't assume it hung.
  • Prompt maxes at 2500 characters; the node truncates with a warning.
  • EU/UK/CH/MENA users get person_generation locked to allow_adult on Veo 3.x.
CategoryERPK/Gemini/Veo

Inputs (12)

NameTypeDefaultDescription
imageIMAGEFirst frame of the video (required)
clientoptGEMINI_API_CLIENTGemini API client from Gemini API Config node. Optional: when unconnected, the key is resolved from ComfyUI Settings or config.ini.
last_frame_imageoptIMAGEOptional last frame for first-to-last interpolation. Supported on all Veo 3.x models including Lite, and Veo 2. REQUIRES duration_seconds=8 — the API rejects 4s/6s interpolation with an opaque 'use case not supported' 400 after running generation.
reference_imagesoptIMAGEUp to 3 reference images (batched IMAGE) for style/content guidance. Only supported on Veo 3.1 and Veo 3.1 Fast. REQUIRES duration_seconds=8 and aspect_ratio=16:9. Mutually exclusive with last_frame_image.
promptoptSTRINGOptional text description to guide the video. Supports audio cues for Veo 3.x.
modeloptCOMBOveo-3.1-generate-previewVeo model. Lite is cheapest (no 4k, no reference images). Veo 3.1 / 3.1 Fast support reference images. Veo 2 has no resolution control.
aspect_ratiooptCOMBO16:9Video aspect ratio (16:9 landscape, 9:16 portrait)
resolutionoptCOMBO720pOutput resolution. 1080p and 4k require duration=8s. Lite caps at 1080p. Veo 2 ignores this parameter.
duration_secondsoptCOMBO8Video duration. Veo 3.x (all variants): 4/6/8s. Veo 2: 5/6/8s. 8s output requires 1080p (or 4k where supported) or reference_images. Mismatched values are auto-clamped to the nearest valid choice.
person_generationoptCOMBOallow_adultPerson generation safety. EU/UK/CH/MENA: Veo 3.x limited to allow_adult. Veo 3.x image-to-video rejects allow_all; use allow_adult or dont_allow.
seedoptINT-1-1–4294967295Seed for ComfyUI cache invalidation. The Gemini Developer API does not accept a seed for video generation (only Vertex/Enterprise mode does), so this value is not forwarded — but changing it still forces a fresh run. -1 for random.
output_directoryoptSTRINGDirectory to save video. Empty uses ComfyUI output folder.

Outputs (1)

NameTypeDescription
video_pathSTRING