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 12 months ago·Updated 4 days ago· 2
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 Manager → Install Custom Nodes → search erpk → ERPK 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.1 models including Lite. 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.
aspect_ratiooptCOMBO16:9Video aspect ratio (16:9 landscape, 9:16 portrait)
resolutionoptCOMBO720pOutput resolution. 1080p and 4k require duration=8s. Lite caps at 1080p. A shorter duration is raised to 8s.
duration_secondsoptCOMBO8Video duration: 4, 6 or 8s. 5 is kept only so older workflows load; it is sent as the nearest valid value. 1080p and 4k only support 8s.
person_generationoptCOMBOallow_adultPerson generation safety. Image-to-video accepts allow_adult only; allow_all and dont_allow are rejected.
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—