Nodes/comfyUI_LLM/☁️ 图片上传到云 (IMAGE)
ComfyUI Node

☁️ 图片上传到云 (IMAGE)

Send your generated images to Qiniu cloud storage and get public URLs

By XieJunchen·Created about a year ago·Updated about a month ago· 2
☁️ 图片上传到云 (IMAGE)
  • images
  • urls
access_key
secret_key
bucket_name
domain
folderoutput
key_prefixcomfyui_
formatPNG

If you've ever finished a generation and wished it were instantly behind a public URL instead of sitting in output/, this node is that wish, minus the privacy. It takes an IMAGE batch straight from your graph, uploads every frame to Qiniu (七牛云, a Chinese object-storage + CDN provider), and hands back the URLs. It's the "☁️ 图片上传到云 (IMAGE)" node from the comfyUI_LLM pack, and it exists because the author's whole workflow is built around CDN-hosted images - share a result, feed a web page, hand an image to a remote model.

How it works

Mechanically it's simple: each image in the batch becomes a Pillow image, gets encoded to format (PNG/JPEG/GIF) into a buffer, and goes up to Qiniu via their put_data API with a short-lived upload token derived from your access/secret keys. Files get a random uuid name under folder/key_prefix, and the node returns the public URL built from your domain. It's an output node (OUTPUT_NODE = True), so it terminates the branch - wire it in and run.

The Qiniu setup, once

All the cloud nodes in this pack share one config. The pack looks for cloud_config.json in the pack root (there's a cloud_config.json.example):

{
  "access_key": "",
  "secret_key": "",
  "bucket_name": "dyaigc",
  "domain": "swqqsa5wv.hb-bkt.clouddn.com"
}

Create a Qiniu account, make a bucket, get your AccessKey/SecretKey from the console, and set domain to your bucket's CDN host. You can also type keys straight into the node's widget fields - the defaults get filled from that config file at load time. The example values point at the author's own bucket, so don't expect those to work for you.

Inputs that matter

  • images (IMAGE) - what gets uploaded, one file per frame in the batch.
  • format - PNG (lossless, default), JPEG (smaller, no alpha), GIF (palette-quantized; fine for tiny thumbnails, don't expect quality).
  • folder / key_prefix - organize the keys in your bucket. Defaults output/ and comfyui_.
  • Output: urls (STRING) - a list of URLs, one per image. Read it in a Show Text node or pipe it onward.

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

The qiniu package is in requirements.txt, so a Manager install handles it.

Where people get burned

  • No keys → silent-ish failure. Empty access/secret keys upload to nothing; watch the console for the Qiniu error (put_data prints a big status block). Triple-check the key names - Qiniu's are case-sensitive.
  • It's Qiniu-only in practice. The code has a cloud_type abstraction and a stubbed JD Cloud uploader, but the JD path raises NotImplementedError. Don't plan on other providers working.
  • GIF is a trap for big batches - each frame becomes its own GIF file, not one animated GIF. If you want a single GIF, compose it before this node.
  • Security note: these URLs are public. Anyone with the link can fetch the image. Fine for sharing, not for private data - and this is a reminder that custom nodes run unsandboxed Python, so only install packs you trust.

If you're building a pipeline that ends in "image now lives on the internet," this is the terminal node for it - just bring your own Qiniu bucket.

Category云服务

Inputs (8)

NameTypeDefaultDescription
access_keySTRING
secret_keySTRING
bucket_nameSTRING
domainSTRING
imagesIMAGE
folderSTRINGoutput
key_prefixSTRINGcomfyui_
formatCOMBOPNG3 options: PNG, JPEG, GIF

Outputs (1)

NameTypeDescription
urlsSTRING