1. Veo 提交任务 (Wujiai)
Veo 3.1 from the Wujiai channel, with three reference images and seven model flavors
- image_1
- image_2
- image_3
- response
If you're comparing this pack's two Veo submit nodes, the difference is which reseller you're paying. This is the Wujiai-channel one, "1. Veo 提交任务 (Wujiai)"; the Grsai channel has its own submitter with its own API key and its own task database. Same idea - upload a prompt and up to three images, get a task ID back - but you register at wujiai.org instead of nkxx.grsai.ai, and your credits and moderation live in a different account.
The mechanism
Veo 3.1 is a closed Google model, so this node is an HTTP client in a trench coat: it wraps your prompt and images, calls the Wujiai API, and returns a string. The mechanism is straightforward. Each of the three optional image_1/2/3 inputs gets uploaded to Wujiai's image host and turned into a URL. Then it POSTs {model, prompt, aspectRatio, ...} to Wujiai's /v1/video/create endpoint, reads the task ID out of the response, and writes it into a local JSON database so the matching query node can find it later. It also appends a random zero-width character to your prompt - that's a deliberate trick to stop ComfyUI from seeing the same prompt twice and skipping the run, so don't "clean it up."
Picking a model
The model dropdown is where this node earns its keep - seven Veo 3.1 flavors, more than the Grsai submitter offers:
veo_3_1-fastandveo_3_1- the workhorsesveo_3_1-fast-4Kandveo_3_1-4K- 4K output, pricier per secondveo_3_1-components,veo_3_1-components-4K,veo_3_1-fast-components-4K- the components family, which is Veo's take on layered/shot composition control
Plus aspect_ratio (16:9 or 9:16). The default of veo_3_1-fast is a sensible place to start: fast is noticeably cheaper than the full model and most people can't tell the difference until they're pixel-peeping at 4K. Your call, but I'd prototype on fast and only reach for 4K when the deliverable actually needs it - video credits evaporate fast and this is metered per second.
Output is a single response STRING containing the task ID and a nudge to use the query node. You don't wire it into anything; the workflow continues through VeoQueryTasks (same Wujiai channel) and then VeoGetNextVideo when the status flips to done.
Install and gotchas
Install is the shared pack routine: git clone https://github.com/jieg9341-lab/ComfyUI-nkxx into ComfyUI/custom_nodes/, restart, and let it auto-install requests, pandas, openpyxl, yt-dlp, opencv-python and aiohttp on first load. No model files, no VRAM, just the Wujiai API key - which you can paste in the node, set as the WUJIAI_KEY environment variable, or hardcode in __init__.py.
Where people get burned: the Wujiai and Grsai channels are fully separate, so a task submitted here won't show up in the Grsai query node and vice versa - keep the pairing straight. A blank key gets you "API Key 不能为空". And remember this is a cloud call: your prompt and reference images leave the machine, cost real credits, and Google's moderation applies no matter which reseller fronted the request.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A cinematic shot of... | — |
| model | COMBO | veo_3_1-fast | 7 options: veo_3_1-fast, veo_3_1, veo_3_1-fast-4K, veo_3_1-4K, veo_3_1-components, veo_3_1-components-4K, +1 |
| aspect_ratio | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| image_1opt | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| api_keyopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response | STRING | — |