Zhenzhen Veo 3.1 Fast Ref2Video Fal
Google Veo 3.1 in your ComfyUI graph, no GPU required
- image1
- image2
- image3
- video
- video_url
- response
Veo is the closed video model everyone wants and nobody can run locally - Google's flagship, and the one with the trick nobody's matched in open weights: native audio that's synchronized to what's on screen. Comfly_veo3_1_fal is the reference-to-video flavor of the fast tier, wrapped for ComfyUI. Feed it a prompt plus one to three reference images and you get an 8-second, sound-included clip back as a VIDEO output.
This is the "model isn't on your machine and never will be" category. Veo has no open weights, so the choice isn't "cloud vs local" - it's "pay a reseller's cheap API" vs "pay Google directly." This node routes through Zhenzhen's AI工坊 proxy to the fal-ai/veo3.1/fast/reference-to-video endpoint, which is how you end up paying a fraction of the official rate.
How it works
Classic submit-and-poll. The node posts your prompt, images, and the video settings to the endpoint, then checks back every few seconds until the render finishes, downloads the MP4, and returns it as video plus a video_url and the raw response JSON. The poll timeout is generous (max_poll_attempts × poll_interval, default an hour) because 4K Veo genuinely takes a while.
The inputs that actually matter:
prompt- the creative brief. Keep it in English; Veo is fussy about language.image1–image3- reference images for character or scene consistency. This is the "Ref2Video" in the node's name. Defaultimage_wayisimage_url, so set it tobase64if you're only connecting live images.resolution- 720p / 1080p / 4k. 4K costs the most and takes longest; 720p is fine for drafts.aspect_ratio- 16:9 or 9:16, that's it.durationis locked to 8s.generate_audio- on by default, and honestly the reason to use Veo at all. Veo's native audio is the capability gap that open models still haven't closed.safety_tolerance- 1 (strictest) to 6 (least strict), default 4. This is your content-policy dial. If prompts keep getting rejected, raising this is the first lever.auto_fix- on, and the node retries a content-policy-rejected prompt in an auto-fixed form.
Installing and setting up
Install via ComfyUI Manager (search Comfyui-zhenzhen) or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
Restart, then drop your AI工坊 API key into api_key. No models, no checkpoints - this whole pack is network calls. FAL routes pre-charge a few credits and refund the difference after the run, so don't read too much into the initial number.
Troubleshooting
The usual suspects apply. 443 errors = can't reach the overseas server, which the README says means proxy time (TUN mode). And remember that a 500 mid-run is often Google's problem, not yours - the README's standing advice for this pack is just run it again; failed runs don't charge you. The skip_error toggle is there for when you're batching and would rather a failure produce an empty video than kill the queue. If your clip comes back muted, double-check generate_audio - it's easy to toggle off by accident and easy to miss.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| api_keyopt | STRING | — | |
| aspect_ratioopt | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| durationopt | COMBO | 8s | 1 options: 8s |
| resolutionopt | COMBO | 720p | 3 options: 720p, 1080p, 4k |
| generate_audioopt | BOOLEAN | true | Whether to generate audio for the video. |
| auto_fixopt | BOOLEAN | false | Auto-fix prompts that fail content policy. |
| safety_toleranceopt | COMBO | 4 | 1=most strict, 6=least strict. |
| image_wayopt | COMBO | image_url | 2 options: image_url, base64 |
| poll_intervalopt | INT | 62–30 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | 开启后,节点失败时不报错、返回默认空结果。 |
| seedopt | INT | 00–18446744073709550000 | Execution seed for ComfyUI cache control. Fixed reuses the cached result; randomize/increment/decrement requests a new run. This compatibility seed is not sent to APIs that do not expose a native seed parameter. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| response | STRING | — |