Skip to content

ComfyUI to OSS 图片生成脚本 ​

这个脚本自动化了从 ComfyUI 生成图片并上传到阿里云 OSS 的完整流程。

功能 ​

  1. 加载 ComfyUI 工作流 JSON 文件
  2. 提交到远程 ComfyUI 服务器(内网另一台电脑)
  3. 通过轮询监听生成进度
  4. 下载生成的图片
  5. 上传到阿里云 OSS
  6. 输出 CDN 访问链接

注意:脚本直接上传 ComfyUI 生成的原始图片,不进行格式转换。如需 WebP 格式,请在 ComfyUI 工作流中配置 Save Image 节点输出 WebP。

依赖 ​

仅需项目已有的依赖:

  • ali-oss(已安装)
  • Node.js 原生 fetch API(Node 18+)

无需安装额外依赖。

配置文件 ​

编辑 scripts/comfyui-to-oss.config.json:

json
{
  "comfyui": {
    "serverUrl": "http://192.168.1.100:8188",  // ComfyUI 服务器地址
    "workflowPath": "./workflows/my-workflow.json"  // 工作流文件路径
  },
  "oss": {
    "region": "oss-cn-hangzhou",  // OSS 区域
    "accessKeyId": "your-access-key-id",  // 阿里云 AccessKey ID
    "accessKeySecret": "your-access-key-secret",  // 阿里云 AccessKey Secret
    "bucket": "your-bucket-name",  // OSS Bucket 名称
    "endpoint": "https://oss-cn-hangzhou.aliyuncs.com",  // OSS Endpoint
    "cdnDomain": "https://q02.seemts.com"  // CDN 域名
  },
  "output": {
    "pathPrefix": "site/insights/open-source-business",  // OSS 中的路径前缀
    "fileName": "why-companies-open-source",  // 输出文件名(不含扩展名)
    "format": "webp",  // 输出格式:webp | png | jpeg
    "quality": 85  // 图片质量(1-100)
  }
}

使用方法 ​

基本用法 ​

bash
tsx scripts/comfyui-to-oss.ts --output site/insights/open-source-business/why-companies-open-source.webp

指定配置文件 ​

bash
tsx scripts/comfyui-to-oss.ts --config path/to/custom-config.json --output site/insights/open-source-business/why-companies-open-source.webp

指定工作流文件(覆盖配置) ​

bash
tsx scripts/comfyui-to-oss.ts --workflow path/to/workflow.json --output site/insights/ai-basics/some-article.webp

图片压缩 ​

脚本会自动尝试将图片压缩到 120 KB 以内:

  1. 如果安装了 sharp:会逐步降低质量和尺寸,直到达到目标大小
  2. 如果未安装 sharp:跳过压缩,直接上传原始图片,并显示警告

安装 sharp(可选但推荐):

bash
npm install sharp --legacy-peer-deps

如果压缩后仍超过 120 KB,脚本会显示明显的警告提示。

工作流文件准备 ​

  1. 在 ComfyUI 中设计好工作流
  2. 点击 "Save (API Format)" 导出为 JSON 文件
  3. 将 JSON 文件放到 scripts/workflows/ 目录
  4. 在配置文件中指定路径

注意:必须使用 API 格式导出,不是普通的工作流保存格式。

输出示例 ​

📋 Configuration loaded
📄 Workflow loaded from /path/to/workflow.json
🆔 Client ID: abc123def456
📤 Queueing prompt to http://192.168.1.100:8188/prompt...
✅ Prompt queued: prompt-id-12345
⏳ Waiting for generation to complete (polling every 2s)...
✅ Generation completed
📥 Fetching history from http://192.168.1.100:8188/history/prompt-id-12345...
🖼️  Found image: /filename.webp
📥 Downloading image from http://192.168.1.100:8188/view?filename=filename.webp...
✅ Downloaded 2048576 bytes (2000.0 KB)
🗜️  Compressing image (target: 120 KB)...
✅ Compressed to 98.5 KB (quality: 70)
☁️  Uploading to OSS...
📦 Object key: site/insights/open-source-business/why-companies-open-source.webp
✅ Uploaded successfully
🔗 CDN URL: https://q02.seemts.com/site/insights/open-source-business/why-companies-open-source.webp

🎉 Success!
📸 Image URL: https://q02.seemts.com/site/insights/open-source-business/why-companies-open-source.webp
📊 Original size: 2000.0 KB
📊 Final size: 98.5 KB
🗜️  Compressed: Yes

You can now use this URL in your LazyImage component:
<LazyImage :maxWidth="860" src="https://q02.seemts.com/site/insights/open-source-business/why-companies-open-source.webp"></LazyImage>

压缩失败时的警告 ​

⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ 
⚠️  WARNING: Could not compress to 120 KB. Final size: 156.3 KB
⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️

在文章中使用 ​

生成完成后,将输出的 URL 粘贴到文章的 LazyImage 组件中:

vue
<LazyImage :maxWidth="860" src="https://q02.seemts.com/site/insights/open-source-business/your-image-name.webp"></LazyImage>

注意事项 ​

  1. ComfyUI 服务器必须开启 CORS:如果跨域访问失败,需要在 ComfyUI 启动时添加 --enable-cors 参数
  2. 工作流必须是 API 格式:在 ComfyUI 中使用 "Save (API Format)" 导出
  3. 网络连通性:确保运行脚本的电脑可以访问 ComfyUI 服务器的 IP 和端口
  4. OSS 权限:确保 AccessKey 有写入目标 Bucket 的权限
  5. 超时设置:脚本默认 10 分钟超时,如果生成时间更长需要修改代码
  6. 图片格式:脚本直接上传 ComfyUI 生成的原始格式。如需 WebP,请在 ComfyUI 的 Save Image 节点中配置输出 WebP 格式

故障排查 ​

轮询超时 ​

  • 检查 ComfyUI 是否正在处理任务
  • 查看 ComfyUI 控制台是否有错误
  • 如果生成时间超过 10 分钟,修改代码中的 maxWaitMs 参数

图片下载失败 ​

  • 检查 ComfyUI 是否成功生成了图片
  • 查看 ComfyUI 控制台是否有错误
  • 确认图片文件名和路径是否正确

OSS 上传失败 ​

  • 检查 AccessKey 是否正确
  • 确认 Bucket 名称和区域匹配
  • 查看阿里云控制台是否有权限错误

相关文件 ​

  • 配置文件:scripts/comfyui-to-oss.config.json
  • 脚本文件:scripts/comfyui-to-oss.ts
  • 工作流目录:scripts/workflows/(需要手动创建)