ComfyUI to OSS 图片生成脚本
这个脚本自动化了从 ComfyUI 生成图片并上传到阿里云 OSS 的完整流程。
功能
- 加载 ComfyUI 工作流 JSON 文件
- 提交到远程 ComfyUI 服务器(内网另一台电脑)
- 通过轮询监听生成进度
- 下载生成的图片
- 上传到阿里云 OSS
- 输出 CDN 访问链接
注意:脚本直接上传 ComfyUI 生成的原始图片,不进行格式转换。如需 WebP 格式,请在 ComfyUI 工作流中配置 Save Image 节点输出 WebP。
依赖
仅需项目已有的依赖:
ali-oss(已安装)- Node.js 原生
fetchAPI(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 以内:
- 如果安装了 sharp:会逐步降低质量和尺寸,直到达到目标大小
- 如果未安装 sharp:跳过压缩,直接上传原始图片,并显示警告
安装 sharp(可选但推荐):
bash
npm install sharp --legacy-peer-deps如果压缩后仍超过 120 KB,脚本会显示明显的警告提示。
工作流文件准备
- 在 ComfyUI 中设计好工作流
- 点击 "Save (API Format)" 导出为 JSON 文件
- 将 JSON 文件放到
scripts/workflows/目录 - 在配置文件中指定路径
注意:必须使用 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>注意事项
- ComfyUI 服务器必须开启 CORS:如果跨域访问失败,需要在 ComfyUI 启动时添加
--enable-cors参数 - 工作流必须是 API 格式:在 ComfyUI 中使用 "Save (API Format)" 导出
- 网络连通性:确保运行脚本的电脑可以访问 ComfyUI 服务器的 IP 和端口
- OSS 权限:确保 AccessKey 有写入目标 Bucket 的权限
- 超时设置:脚本默认 10 分钟超时,如果生成时间更长需要修改代码
- 图片格式:脚本直接上传 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/(需要手动创建)