🖼️图片合成视频并上传到云
Frame batch → MP4 → public URL
- images
- audio
- url
This is the pack's finishing move. Where CloudImageUploadNode uploads frames and CloudVideoUploadNode uploads a file, this one takes an IMAGE batch, encodes it into an actual video file, muxes in audio if you give it any, and uploads the result to Qiniu - all inside one node. "🖼️ 图片合成视频并上传到云" (compose images into video and upload to cloud). If you've ever wanted to render a frame sequence and end up with a shareable video link without touching the file system, this is the node.
How it works
Three steps, and here's where the pack's video nodes diverge: instead of shelling out to a system ffmpeg binary, this one uses imageio_ffmpeg's bundled ffmpeg executable, so it works without installing ffmpeg separately. The batch becomes a list of PIL images, each piped as raw RGB into ffmpeg (libx264, yuv420p - the universally-playable H.264 baseline), at your chosen fps. If you feed an AUDIO input, it writes the waveform to a temp WAV with torchaudio and muxes it in as AAC with -shortest. Then the MP4 goes up to Qiniu and you get back the public url.
Inputs that matter
images(IMAGE) - the frame sequence. One frame per image in the batch, played in order.fps- 1–60, default 12. For slideshow-style outputs 12 is fine; for real motion you want 24+.audio(AUDIO) - optional despite sitting in the required list (defaultNone). The natural source is this pack'sSplitVideoByFramesoutput - that node extracts the original soundtrack, and this one puts it back on the video.access_key/secret_key/bucket_name/domain- Qiniu credentials, same as the rest of the pack's cloud nodes (defaults fromcloud_config.json, full setup in the CloudImageUploadNode article).folder/key_prefix/ext(mp4,mov,avi,mkv) - bucket path and container. Keepextasmp4unless you have a reason not to.- Output:
url(STRING), the public video link.
Installing it
ComfyUI Manager → search comfyUI_LLM, or:
cd ComfyUI/custom_nodes
git clone https://github.com/XieJunchen/comfyUI_LLM
pip install -r ComfyUI/custom_nodes/comfyUI_LLM/requirements.txt
# restart ComfyUI
imageio-ffmpeg, qiniu, and torchaudio are all in the pack's requirements.txt, so a Manager install gets the whole chain.
Where people get burned
- All frames must match resolution. The encoder uses the first frame's width and height, and rawvideo piping doesn't resize - a mixed-size batch produces a corrupt video or a hard error. Normalize before this node.
- Audio is all-or-nothing. A silent placeholder (the kind
SplitVideoByFramesreturns for audio-less videos) is treated as "no audio" and skipped, which is the behavior you want. But a real-but-short track gets padded to the video length only via-shortest- mismatch the durations and the mux can clip. - Qiniu-only in practice. The JD Cloud branch raises
NotImplementedError. - It's an output node and a network call. A big batch means a big upload; the graph blocks until it's done. Patience, or smaller batches.
For a "generated frames → video link" pipeline this collapses about four nodes into one. If your workflow ends in "I need to send someone a URL," this is the node you'll actually reach for in this pack.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| fps | INT | 121–60 | — |
| cloud_type | STRING | qiniu | — |
| access_key | STRING | — | |
| secret_key | STRING | — | |
| bucket_name | STRING | — | |
| domain | STRING | — | |
| folder | STRING | video | — |
| key_prefix | STRING | comfyui_ | — |
| ext | COMBO | mp4 | 4 options: mp4, mov, avi, mkv |
| audio | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |