画布视频输出 🎬
Your frames become an MP4 — with one silent way to fail
- images
CanvasVideoOutput is the closing bracket of this pack's video story. The input node turns a clip into frames; a video model does its thing; and this output node turns the resulting frame batch back into an actual video file - an H.264 MP4 in ComfyUI's output folder, which the Infinite Canvas frontend can play right on the canvas. If you're running the pack's wan2.2 workflow, this is where it ends.
How it works
Two inputs: images (the frame batch) and fps (an INT from 1 to 120, default 24 - the frame rate you want the output to run at). The node multiplies the batch by 255, converts to uint8, and hands it to imageio.mimwrite with the libx264 codec and a quality setting of 8 on a 0–10 scale. The ffmpeg binary that does the actual encoding comes from the imageio-ffmpeg package - that's the entire reason it's in the pack's requirements.txt. Output lands as Canvas_Vid_<n>.mp4.
The thing to understand: this is deliberately plain. A batch of frames in, one broadly-compatible H.264 file out. No bitrate controls, no resolution checks, no metadata.
The silent failure that will waste your afternoon
The save_video code wraps the encode in a try/except. If imageio throws - missing ffmpeg plugin, mixed-size frames, a format it refuses - it prints an error to the console and returns an empty UI result. You get no video, no red error box on the node, no modal. The run just "succeeds" and nothing appears.
So the first rule of using this node: if a run produces no MP4, read the ComfyUI console. The message is there, waiting for you. Nine times out of ten it's one of two things:
- Mixed frame sizes. If anything upstream gives you a batch with inconsistent resolutions, the encoder chokes. Standardize your frames first - the pack's own CanvasResolutionSelector is the natural tool, since it rounds everything to friendly multiples of 8.
- The plugin isn't there. On a minimal install where requirements didn't finish,
imageio-ffmpegis missing and every encode dies. Reinstall the pack's requirements and restart.
The filename quirk, same as its sibling
Canvas_Vid_<n>.mp4 numbers itself off how many files are in the output folder at save time, not off this node's own history. That means the counter shares the folder with everything else you've ever output, and if you delete files, a future save can reuse a name that already exists and overwrite it. Treat these filenames as provisional - rename anything you care about.
A small honest note: quality=8 is a quality scale, not a bitrate. It's a fine default for canvas work, but if you're chasing precise file sizes you won't find a lever for it here.
Install
Same drill as the whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/zml-w/ComfyUI-Infinite-Canvas
Restart ComfyUI, or install via ComfyUI Manager (search "ComfyUI-Infinite-Canvas"). For the frontend to work, add --enable-cors-header to your ComfyUI startup arguments - the README's one explicit requirement. Find the node under the 无限画布 category as 画布视频输出 🎬; don't confuse it with the input node, which shares the same emoji but a different label.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| fps | INT | 241–120 | — |
Outputs (0)
No outputs