OSS Video Uploader
Ship Your Finished MP4 to a Bucket (Bring VideoHelperSuite)
- VHS_FILENAMES
- url
ComfyUI has no native "save this as an MP4 and put it somewhere" node. By the time you have a finished video, it went through VideoHelperSuite's VideoCombine - which writes the file and emits a VHS_FILENAMES tuple saying exactly where it put it. This uploader is built to consume that tuple. That's the whole trick: you don't connect a video to it, you connect the filenames output of VideoCombine.
Why bother? Once you're generating video at scale - a batch box, a headless render server, a Wan pipeline on a rented Alibaba GPU - local disk fills up and nobody's watching the folder anyway. This node pushes the finished file to an Alibaba Cloud OSS bucket and hands you a URL a CMS, CDN, or downstream job can pick up. Same pattern as its sibling nodes in this pack: Alibaba Cloud OSS is S3 with a Chinese accent, and if your ComfyUI already lives on Alibaba hosting, the bucket is where results belong.
How it works
It inspects the VHS_FILENAMES input, finds the file path, checks it exists (and prints a warning if not), then does a put_object through the oss2 SDK with your credentials. Retries are aggressive - 20 attempts, three seconds apart in the code (the README claims 10; the code wins). The returned URL is https://{bucket}.{endpoint}/{path}/{filename}.
The inputs that matter
VHS_FILENAMES- comes from VideoHelperSuite's VideoCombine node. That's your video's filenames output, not a video socket.endpoint,bucket,access_key,access_secret- your OSS settings. The defaults are the author's own bucket (cck-sh, pathaigc/up) - replace them; they're not meant for you.path- folder prefix in the bucket.random_filename(default on) - a timestamp + random-string name that keeps the source extension, so an.mp4stays an.mp4. Off meansfilenameis used.
What comes out
One output: a url STRING. Read it off the node, show it with a text node, or pass it to whatever needs a hosted video URL. Nothing else.
Gotchas, from reading the source
It uploads the last video file in the VHS_FILENAMES list. If VideoCombine handed you several segments, you get the last one, not all of them - fine for a normal single-file run, surprising if you've built a multi-part pipeline.
Ordering matters too. The node expects the file to exist now, and normally it does, because VideoCombine wrote it earlier in the same graph run. But if you ever see a Video file may not exist yet warning in the console, the uploader fired before the file was flushed - check that VideoCombine is actually set to save output, and that you grabbed the right socket.
Same error-swallowing as the rest of the pack: failures come back as a string starting with Error:, with the real exception in the console log. And the same security rule - the OSS keys live in the workflow JSON, so use a scoped AccessKey, keep the bucket private, and don't share workflows with live keys in them.
Installing it
This node ships in ComfyUI-OSS-Upload, along with image, audio, and generic file uploaders. Manager → search "ComfyUI-OSS-Upload" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ahkimkoo/ComfyUI-OSS-Upload
then restart ComfyUI. It also needs VideoHelperSuite installed for the VHS_FILENAMES socket to exist at all - that's a peer dependency, not bundled. No models, no GPU hit. The pack's requirements.txt installs oss2 plus scipy; the README's pip install oss2 one-liner alone is technically enough for this node, but install the whole file anyway so the pack's other nodes don't bite you later:
pip install -r custom_nodes/ComfyUI-OSS-Upload/requirements.txt
Reach for it when your videos have somewhere to go besides a local disk. If you make one-off clips and post them by hand, you don't need this. If you're running a video pipeline that ends in "and then it should be in the bucket," this is the last node in the graph.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| VHS_FILENAMES | VHS_FILENAMES | — | |
| endpoint | STRING | oss-cn-shanghai.aliyuncs.com | — |
| bucket | STRING | cck-sh | — |
| access_key | STRING | — | |
| access_secret | STRING | — | |
| path | STRING | aigc/up | — |
| random_filename | BOOLEAN | true | — |
| filename | STRING | video.mp4 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |