视频回调节点
The callback node for video jobs
- video
What it is
Video generation takes minutes, not seconds. If you're running Wan, LTX, or Hunyuan Video workflows - especially headless on a server - you do not want to poll the browser waiting for a clip to finish. VideoCallbackNode is the "tell me when it's done" node for that exact situation: a terminal output node that takes the finished video, saves it, and POSTs a small JSON payload to a URL of your choosing. Same idea as its sibling ImageCallbackNode in this pack, one step up the compute ladder. No cloud API, no key - it just phones home when the render lands.
Same honesty as the image node deserves: this pack is brand new, one commit, essentially no community footprint. For an automation niche it works; it is not a mainstream save node. Adjust expectations accordingly.
How it works
The node takes a single video input of ComfyUI's newer VIDEO type - the container format modern video generators emit - and, if save_video is on, saves it through the container's save_to() into ComfyUI/output/callback/. Files get named {task_uuid}_{timestamp}.mp4, or {filename_prefix}_{timestamp}.mp4 if you leave the UUID blank. Then it assembles the same payload shape its image sibling uses: a videos list of relative paths, a comfyui_videos list of /api/view?filename=...&subfolder=callback&type=output URLs, and the task_uuid - POSTed to callback_url with a 10-second timeout.
The format and codec dropdowns are backed by ComfyUI's comfy_api.util.video_types when that's available (which is how auto decides between MP4 containers and H.264), and they collapse to a plain auto/mp4 and auto/h264 on older builds. And because it's an output node, ComfyUI never caches it away - it runs every time, which is the point: every completed job should produce its callback.
The inputs that matter
video- required, VIDEO type. Only connects to nodes that emit VIDEO, i.e. the current generation of video-gen workflows. A workflow that outputs per-frame images needs ImageCallbackNode, not this one.callback_url- where the POST lands. The only input that decides whether anything happens.task_uuid/filename_prefix- the UUID tags the payload so you can match callbacks to jobs; the prefix only names files.save_video- turn off if you want the notification without keeping the clip, though then the payload's file lists will just be empty.format(auto/mp4) andcodec(auto/h264) - leave both on auto until you have a reason not to.
Install
Same pack as ImageCallbackNode - one install gets you both nodes. ComfyUI Manager: search "comfyui_callback". Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/upseem/comfyui_callback.git
Restart ComfyUI. The real runtime dependencies are requests, Pillow, and numpy, all of which a stock ComfyUI already has - no model files to download, nothing heavy. The fastapi/uvicorn/pydantic stack only matters if you want the bundled receiver server (port 6688, endpoints at /videos_callback, /status, /logs) instead of pointing the callback at your own webhook.
Common issues
Same reachability trap as the image node: localhost in callback_url resolves to whatever machine ComfyUI runs on, so on a remote or headless box you need the machine's LAN IP, not a localhost URL. Callbacks are best-effort - a dead receiver gets logged to the ComfyUI console, never raised, so a failed notification won't fail the render (good) but can slip past you silently (bad; glance at the console now and then). And since this is a one-commit pack with no real install base, give the source a read before you wire it into anything that matters - it's a few dozen lines, well within a coffee break.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| task_uuidopt | STRING | — | |
| callback_urlopt | STRING | — | |
| save_videoopt | BOOLEAN | true | — |
| output_pathopt | STRING | callback | — |
| filename_prefixopt | STRING | ComfyUI | — |
| formatopt | COMBO | auto | 2 options: auto, mp4 |
| codecopt | COMBO | auto | 2 options: auto, h264 |
Outputs (0)
No outputs