3. Veo 下载视频 (Wujiai)
The Wujiai Veo downloader — same fetch node, different channel
- video
- report
This is the Wujiai-channel cousin of VeoGetNextVideo_Async: same idea - a no-input node that scans the pack's local Veo task database, grabs the oldest task marked done, downloads the video, marks it downloaded, and hands it to you as a ComfyUI VIDEO. The difference is which gateway and which database it talks to. The Grsai version lives under Nkxx/Grsai/视频 (异步); this one sits in Nkxx/Wujiai/视频 and uses the Wujiai task manager's own history file. If you're using the Wujiai Veo submit/query nodes to generate, this is the node that drains the results.
Outputs:
- video - ComfyUI VIDEO (local MP4 via VideoAdapter), ready for playback or further steps.
- report - STRING: download success or the specific failure reason.
Mechanically it mirrors the Sora2/Wujiai fetch pattern exactly: sort the local task records by submission time, take the first with a completed status, download through the pack's robust_download_video (yt-dlp, then curl fallback, three retries), and persist downloaded + the local path back to the JSON database so the next run moves on. The IS_CHANGED forced re-execution means repeated queueing walks through a batch one clip at a time.
One architectural detail worth knowing because it explains the whole Wujiai channel: the Wujiai host is resolved at runtime (the pack fetches a live gateway config and caches it, falling back to a secondary channel if that fetch fails). So this node's actual HTTP endpoint can change between runs if the gateway rotates - that's by design, not flakiness, and it's how the pack "adds models without plugin updates."
Install is pack-wide:
cd ComfyUI/custom_nodes
git clone https://github.com/jieg9341-lab/ComfyUI-nkxx
Restart; first boot auto-installs requests, pandas, yt-dlp (primary download engine), opencv-python, aiohttp. You'll need a Wujiai account (wujiai.org) for the earlier pipeline steps; this node itself reads the video URL from the local DB.
Grounded gotchas:
- One video per run, oldest first. A batch drains one clip per queue pass.
- The same honest failure handling as the Grsai twin: nothing-ready returns "当前无待下载的已完成任务。" with an empty video (not a crash), and a failed download marks the task
download_failedand gives you the raw URL to fetch by hand. It won't auto-retry later. - If you never ran the Wujiai query step, tasks stay marked
running/succeeded-unknown in the DB and this node finds nothing - submit → query → fetch is the order. - The two channels are fully separate databases. Tasks submitted on Grsai will never show up here, and vice versa; pick a channel and stay on it for a given pipeline.
Inputs (0)
No inputs
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| report | STRING | — |