Vertex Veo Extend Video
Your clip is 4 seconds long and you want 8 — let Veo finish the job
- video
- videos
- video_path_list
Every text-to-video model eventually gives you a clip that's almost right, and then stops. Veo 2 won't give you more than a few seconds per generation, and ComfyUI has no local model that just "keeps going" the way Veo's extend feature does. That's the niche this node exists to fill: hand it an existing video plus a prompt, and Google's Veo extends the footage in the same look and motion, up to 8 seconds total. No GPU, no local checkpoint - it's a paid call to Google's Vertex AI, wrapped in a ComfyUI node.
It's one of the seven Veo nodes in Adforge, Creditas' ad-creation toolkit (Creditas being the Brazilian fintech behind the pack - you'll also find Image to Video, First-Last Frame, and Video with Reference in the same AdForge/Video Generation category). If you're building product or campaign clips and you keep bumping into Veo's length ceiling, this is the node that unblocks you without leaving ComfyUI.
How it works
Under the hood it uses Google's Gen AI SDK (google-genai), not the older Vertex REST API. You give it a video - either through the video socket or a path in input_video_path - plus your prompt, and it calls client.models.generate_videos() with the video as the source. The model does the extending server-side. The node polls the long-running operation every five seconds, then downloads the finished clips from GCS to your local ComfyUI output folder. That download step is the reason everything in this pack needs a GCS bucket: the videos are generated into cloud storage first, then pulled back to disk.
The inputs that matter
- prompt (required) - what you want to see happen in the extension. This does the heavy lifting.
- video or input_video_path - you need one or the other. The socket takes a VIDEO type from any video-producing node; the path input just takes a
/path/to/video.mp4string. - duration_seconds - 2 to 8, default 8. Total length you're aiming for.
- model - defaults to
veo-2.0-generate-001. That's Veo 2, which is where the extend/continue behavior lives; the dropdown also lists the Veo 3 variants if you want to try them. - fps (default 24), seed (0 = random; set one for reproducible output), number_of_videos (1–4 variations), generate_audio (Veo 3's native audio, off by default).
- enhance_prompt (default on) - sends your prompt through Gemini first, which helps but adds a second API call to the bill.
- output_gcs_uri - where the result lands in your bucket, format
gs://BUCKET_NAME/SUBDIRECTORY.
Outputs
Two: videos - a list of VIDEO clips you can preview or pipe into the next node, and video_path_list - the local file paths to the same clips, handy if you're scripting or saving them off.
Installing and setting it up
Grab it from ComfyUI Manager by searching adforge, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Creditas-labs/ComfyUI_Adforge
cd ComfyUI_Adforge
pip install -r requirements.txt # or: uv pip install -r requirements.txt
Restart ComfyUI. The heavy part isn't the install - it's Google Cloud. You need a project with billing enabled, a writable GCS bucket, and credentials. The pack reads a .env file under ComfyUI/custom_nodes/comfyui_adforge (copy the repo's .env.example), or you can export the variables directly:
export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_CLOUD_STORAGE_BUCKET="your-bucket"
export GOOGLE_CLOUD_LOCATION="us-central1"
export API_KEY="your-vertex-api-key"
You can also point GOOGLE_APPLICATION_CREDENTIALS at a service-account JSON instead of API_KEY. Note the pack requires Python 3.12+ and a recent ComfyUI - it uses the new comfy_api node API, so an old install will import-fail.
Where people get burned
The classic failure is "Video generation failed" with no useful detail - it's almost always GCS auth or the bucket. The node cannot work without GOOGLE_CLOUD_STORAGE_BUCKET and a project that's actually billed; Veo is pay-per-second, and there's no free tier that just works. Also remember the extension needs a real input: if you supply neither video nor a path, it raises a ValueError. And don't expect a loop-background to extend forever - 8 seconds is the ceiling per generation.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The text prompt used to guide video generation. | |
| videoopt | VIDEO | The video to process. | |
| input_video_pathopt | STRING | No documentation available | |
| negative_promptopt | STRING | Optional. A text string that describes anything you want to discourage the model from generating. | |
| output_gcs_uriopt | STRING | None/videos/video-to-video-20260720-202149.mp4 | GCS URI where the generated videos will be stored, in the format 'gs://BUCKET_NAME/SUBDIRECTORY'. |
| modelopt | COMBO | veo-2.0-generate-001 | The Veo model to use for video generation. |
| aspect_ratioopt | COMBO | 16:9 | Optional. Specifies the aspect ratio of generated videos. |
| video_mime_typeopt | COMBO | video/mp4 | Mime type of the input image or video, e.g., 'image/png' or 'video/mp4'. |
| duration_secondsopt | INT | 82–8 | Required. The length in seconds of video files that you want to generate. |
| resolutionopt | COMBO | 1080p | Optional. Veo 3 models only. The resolution of the generated video. |
| fpsopt | INT | 241–60 | Optional. Frames per second for the generated video. |
| number_of_videosopt | INT | 11–4 | Optional. Number of video variations to generate. |
| enhance_promptopt | BOOLEAN | true | Optional. Use Gemini to enhance your prompts. |
| generate_audioopt | BOOLEAN | false | Generate audio for the video. |
| person_generationopt | COMBO | allow_adult | Optional. The safety setting that controls whether people or face generation is allowed. |
| seedopt | INT | 00–2147483647 | Optional. A number to request to make generated videos deterministic. Adding a seed number with your request without changing other parameters will cause the model to produce the same videos. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| videos | VIDEO | A list of generated videos (VIDEO type). |
| video_path_list | STRING | A list of local paths to the generated videos (when output_format=local_file) |