一、真实项目中遇到的行业痛点
个人业余创作的时候,ComfyUI 使用流程十分简单:导入 JSON,丢一张参考图,调整降噪强度,点生成,保存图片。这种模式适合几张图的小需求。一旦进入商业项目,同时处理几十上百张参考图,设计师、外包、合作方来回传递工作流文件,各种各样的问题就会集中爆发,这些都是我们实际项目踩过的坑。
第一,工作流可复现性极差,JSON 不等于完整方案。把调试完毕的 JSON 发给同事或者合作方,对方导入后直接报错,或者画面风格、人物五官完全不一样。排查之后才发现缺少自定义节点、Checkpoint 版本不一致、LoRA 文件名不一样。JSON 文件只保存节点连线和参数,并不携带模型权重、插件环境信息,很多新人会误以为拿到 JSON 就等于拿到完整可用方案。经常出现花费数小时调试出来的工作流,交付出去完全无法复现,来回远程调试消耗大量时间。
第二,缺少版本管理,工作流越堆越乱。电脑里存一大堆img2img测试.json、img2img最终.json、img2img最终改2.json,没有明确版本标记。分不清哪个是测试版本,哪个是对外交付 Release 版本。迭代修改直接覆盖旧文件,后续想要回退到上一版效果,已经找不到原始工作流。
第三,GUI 手动操作效率低下,大批量参考图处理人力成本高。商业项目经常会遇到几十张角色草稿、人设图需要统一重绘。在 ComfyUI 界面手动一张张上传图片,修改参数,保存输出,大量时间消耗在机械重复点击上,设计师没有精力专注画面审美调整。
第四,项目资产散落,缺少统一归档。参考原图、输出成品、提示词、样例效果图分散在设计师个人电脑各个文件夹。人员交接之后,之前项目的参考素材、调参记录直接丢失。输出图片经过 PS 二次编辑之后,PNG 内部 ComfyUI 元数据被清除,后期无法回溯当初的生成参数与节点配置ComfyUI。
第五,对外交付缺少标准化流程,交付没有留痕。交付就是把 JSON 和几张样图打包压缩,微信发送。没有统一交付台账,没有记录交付版本、交付时间。网盘分享链接过期之后,已经分不清当初交付的是哪一套工作流资产。
很多团队会觉得,这些属于管理问题,写文档约束大家遵守就可以。现实中小团队人员流动性大,单纯依靠口头制度很难落地。更好的方式是把规则固化成文件夹目录结构,再通过脚本替代重复手工操作。网盘在这里只承担资产存储分发,整套方案核心重点是 SD 绘图业务本身的流程治理。
完整项目素材包:https://pan.quark.cn/s/279d9eed8978
二、ComfyUI 图生图资产规范化体系
2.1 资产分类定义
结合商业图生图业务,我们将整套项目产出分为四大资产分类,团队内部所有项目统一执行这套标准。
表格
| 资产类型 | 内容说明 | 版本管控规则 |
| Workflow 工作流资产 | ComfyUI 导出 JSON,基础图生图、ControlNet 约束、超分修复等节点工程 | Alpha 内部测试版、Beta 参数调优版、Release 对外正式版 |
| Model 依赖资产 | Checkpoint 大模型、角色 / 风格 LoRA、ControlNet 预处理器、第三方自定义节点 | 记录模型文件名、哈希值、下载地址;资产包不存放大体积权重文件 |
| Reference 参考资产 | 输入参考图、人设草稿、线稿、原始照片、对比样例 | 按批次编号,原始参考图禁止覆盖,迭代生成新文件 |
| Doc 文档资产 | 正负提示词库、降噪强度参数表、自定义节点清单、环境部署排坑说明 | 跟随工作流版本同步更新 |
2.2 标准化目录结构
下面目录已经在配套素材包落地。新建项目直接复制这套目录模板,不随意新建文件夹。统一目录结构,不管是谁接手项目,打开就能够看懂整个项目文件组织逻辑。
ComfyUI绘图工作流,SD底层绘图,图生图,出画面/ ├── 01_工作流JSON/ │ ├── Img2Img_Base_V02.json #基础图生图工作流 │ ├── Img2Img_CN_Line_V01.json #线稿约束图生图 │ └── Release_Production_V1.json #对外交付正式版工作流 ├── 02_模型依赖清单/ │ ├── model_dependency.csv #模型名称、哈希、下载来源 │ └── custom_nodes_require.txt #第三方自定义节点列表 ├── 03_参考与样例图片/ │ ├── input_reference/ #输入原始参考素材 │ └── output_sample/ #工作流输出效果样例 ├── 04_批量输出产物/ │ ├── temp_output/ #测试生成临时图片 │ └── release_output/ #正式交付成品图片 ├── 05_项目文档/ │ ├── 参数调优说明.md │ └── 环境部署排坑指南.docx └── _archive归档/ #废弃工作流、旧版本素材归档存放,不直接删除
文件命名规范统一:[工作流类型]-[版本号]-[更新日期].json,示例:Img2Img_Base‑Release‑V1‑20261027.json。
2.3 落地执行的几条核心原则
这些都是经过真实项目验证,比代码更加重要的执行准则:
- 禁止直接覆盖原始文件,迭代修改就生成新版本,旧版本移入
_archive归档。对外交付只允许使用 Release 正式版本,Alpha、Beta 测试版本只保留团队内部。 - 每一份对外交付工作流 JSON,必须附带完整依赖清单,记录模型名称、哈希、自定义节点列表,避免合作方拿到工程无法运行。
- 大体积模型权重不要打包进资产包,只记录下载地址与哈希值,否则整个资产包体积膨胀几十 GB,传输存储都非常麻烦。
- 生成输出图片保留原始带元数据 PNG 副本,用于后续回溯生成参数;经过后期修图另存副本,不要覆盖原始生成图ComfyUI。
- 临时测试输出与正式成品严格分开文件夹存放,不要混杂在一起。
目录规范是整套流水线的地基,如果素材、工作流本身杂乱无序,批量推理脚本、交付工具再完善,也很难发挥实际业务价值。
三、整体技术方案设计
3.1 模块划分
整套方案分为两大模块,面向中小团队本地 GPU 环境,不追求复杂分布式集群。
- 图生图批量推理模块:调用 ComfyUI 官方 HTTP API,读取标准化目录下的参考图片,循环提交图生图任务,动态修改提示词、降噪强度参数,替代 GUI 手动重复操作。设计师只需要前期调试好工作流,批量任务交给脚本执行,把人力留给审美与效果审核。
- 资产自动化交付模块:自动生成标准化交付文案,输出 Excel 交付台账,记录资产包名称、版本、分享链接、交付时间,解决交付不留痕的痛点。
技术边界说明:批量推理直接使用 ComfyUI 开放本地 API,不需要逆向;交付模块使用 Selenium 浏览器自动化模拟网页操作。网盘仅作为存储分发载体,可以替换为其他存储服务;网页自动化会受前端改版影响,如果元素定位失效,需要手动调整 xpath 选择器。
3.2 完整业务流程
- 美术设计师在 ComfyUI GUI 调试工作流,完成参数调优,导出 Release 正式 JSON,整理模型与自定义节点依赖清单;
- 把参考素材按照目录规范放入项目文件夹;
- 本地启动 ComfyUI 服务,运行批量推理脚本,批量处理参考图完成图生图生成;
- 筛选输出结果,正式成品归档,不合格产物移入归档目录;
- 需要对内协作或者对外交付,运行交付脚本,生成标准化交付文案,写入交付台账;
- 合作方获取资产包,对照依赖清单部署模型、自定义节点,导入 JSON 复现效果;
- 后期可以扩展巡检脚本,定期校验台账中的分享链接有效性。
四、环境依赖与完整可运行源码
4.1 环境准备
Python≥3.8;本地启动 ComfyUI 服务,默认访问地址http://127.0.0.1:8188。 硬件建议显存 8G 以上,处理高分辨率图片建议开启显存优化,防止 OOM 显存溢出报错。
pip install requests selenium pyperclip openpyxl
- requests:调用 ComfyUI 本地 API 接口执行批量推理
- selenium、pyperclip、openpyxl:资产自动化交付模块
4.2 第一部分:图生图批量推理脚本
保存文件为img2img_batch_run.py,批量读取参考图片,动态修改提示词、降噪强度,提交 ComfyUI 执行图生图任务。
import requests import json import os import time # =====================配置区 根据项目实际修改===================== COMFYUI_API_URL = "http://127.0.0.1:8188/prompt" WORKFLOW_JSON_PATH = "./01_工作流JSON/Img2Img_Base_V02.json" INPUT_REFERENCE_FOLDER = "./03_参考与样例图片/input_reference" OUTPUT_FOLDER = "./04_批量输出产物/temp_output" POSITIVE_PROMPT = "masterpiece,best quality,精细五官,细腻皮肤,电影光影,8k,高清细节" NEGATIVE_PROMPT = "模糊,畸形肢体,水印,文字,低分辨率,扭曲,噪点" DENOISE_STRENGTH = 0.62 #图生图降噪强度,0-1,数值越高改动越大;角色重绘建议0.4‑0.7 # ================================================================ def load_workflow(file_path): with open(file_path, "r", encoding="utf-8") as f: return json.load(f) def modify_workflow(workflow_dict,img_name,pos_prompt,neg_prompt,denoise): wf_copy = json.loads(json.dumps(workflow_dict)) for node_id,node in wf_copy.items(): if node["class_type"] == "LoadImage": node["inputs"]["image"] = img_name if node["class_type"] == "CLIPTextEncode" and "positive" in node["_meta"]["title"].lower(): node["inputs"]["text"] = pos_prompt if node["class_type"] == "CLIPTextEncode" and "negative" in node["_meta"]["title"].lower(): node["inputs"]["text"] = neg_prompt if node["class_type"] == "KSampler": node["inputs"]["denoise"] = denoise return wf_copy def submit_comfy_task(prompt_data): resp = requests.post(COMFYUI_API_URL,json={"prompt":prompt_data}) return resp.json() if __name__ == "__main__": os.makedirs(OUTPUT_FOLDER,exist_ok=True) base_workflow = load_workflow(WORKFLOW_JSON_PATH) img_list = [f for f in os.listdir(INPUT_REFERENCE_FOLDER) if f.lower().endswith((".png",".jpg",".jpeg"))] img_list.sort() print(f"待处理参考图片总数量:{len(img_list)}") for image_file in img_list: print(f"提交任务,参考图:{image_file}") run_workflow = modify_workflow(base_workflow,image_file,POSITIVE_PROMPT,NEGATIVE_PROMPT,DENOISE_STRENGTH) result = submit_comfy_task(run_workflow) task_id = result.get("prompt_id") print(f"任务ID:{task_id},已提交,请在ComfyUI查看生成进度\n") time.sleep(1) print("✅全部图片任务提交完毕,请等待全部推理完成。")
实操提醒:API 模式下,输入图片必须放到 ComfyUI 安装目录
input文件夹,脚本才可以读取图片;生成图片默认输出 ComfyUI 的 output 目录,完成之后手动复制到项目资产目录,这是高频踩坑点。
4.3 第二部分:资产自动化交付脚本
保存文件comfyui_asset_delivery.py,自动生成交付文案,输出 Excel 交付台账,留存交付记录。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from openpyxl import Workbook import pyperclip import time import datetime # =====================配置区===================== FOLDER_NAME = "ComfyUI绘图工作流,SD底层绘图,图生图,出画面" WORKFLOW_VERSION = "Release‑V1正式版" WEB_PAN_URL = "https://pan.quark.cn/" OUTPUT_TXT = "./工作流交付文案.txt" OUTPUT_EXCEL = "./绘图资产交付台账.xlsx" WAIT_SECONDS = 15 # ================================================ def init_chrome(): chrome_opt = webdriver.ChromeOptions() chrome_opt.add_argument("--start-maximized") # chrome_opt.add_argument(r"--user-data-dir=./chrome_profile") #取消注释开启持久登录 driver = webdriver.Chrome(options=chrome_opt) return driver def get_share_link(driver): wait = WebDriverWait(driver,WAIT_SECONDS) driver.get(WEB_PAN_URL) print("[系统提示]浏览器已打开,请完成网盘登录,登录完成脚本继续执行。") time.sleep(7) folder_elem = wait.until( EC.presence_of_element_located((By.XPATH,f'//div[contains(text(),"{FOLDER_NAME}")]')) ) folder_elem.click() time.sleep(2) share_btn = wait.until(EC.presence_of_element_located((By.XPATH,'//span[text()="分享"]'))) share_btn.click() time.sleep(2) copy_btn = wait.until(EC.presence_of_element_located((By.XPATH,'//button[contains(text(),"复制链接")]'))) copy_btn.click() time.sleep(1) return pyperclip.paste() def build_delivery_text(link): content = f"""【ComfyUI绘图资产交付】版本:{WORKFLOW_VERSION} 我用夸克网盘给你分享了「{FOLDER_NAME}」,内含SD图生图工作流JSON、模型依赖清单、参考样图、部署调优文档。 点击链接或复制整段内容,打开「夸克APP」即可获取。 链接:{link} 交付说明:本包为Release正式版本;导入前请对照model_dependency.csv准备模型权重与自定义节点;工作流仅限授权合作方内部使用。""" return content def save_record(text,link): with open(OUTPUT_TXT,"w",encoding="utf-8") as f: f.write(text) workbook = Workbook() sheet = workbook.active sheet.title = "交付记录" sheet.append(["资产包名称","工作流版本","分享链接","交付文案","交付时间"]) sheet.append([ FOLDER_NAME, WORKFLOW_VERSION, link, text, datetime.datetime.now().strftime("%Y‑%m‑%d %H:%M:%S") ]) workbook.save(OUTPUT_EXCEL) print(f"\n✅交付文件生成完成:\n交付文案:{OUTPUT_TXT}\n交付台账:{OUTPUT_EXCEL}") if __name__ == "__main__": browser = init_chrome() try: share_url = get_share_link(browser) delivery_text = build_delivery_text(share_url) print("\n====生成交付文案====") print(delivery_text) save_record(delivery_text,share_url) except Exception as err: print(f"\n❌脚本执行异常:{str(err)}") finally: input("\n按下回车键关闭浏览器窗口") browser.quit()
五、方案局限与后续迭代方向
这套脚本面向小团队本地业务,不是万能方案,存在客观局限性,在此如实说明。
- 批量推理脚本依赖本地 GPU 与 ComfyUI 服务,没有实现分布式多显卡调度;工作流节点发生改动,脚本内部节点匹配逻辑需要同步修改。
- 交付模块依赖网页 DOM 元素定位,如果网盘前端改版更新,xpath 选择器会失效,需要人工适配调整。
- 当前脚本没有任务队列、失败重试机制,如果个别图片推理显存溢出报错,任务直接中断,需要人工排查重跑。
- 缺少自动校验工具,不能自动解析 JSON 检测缺失模型、自定义节点,依赖人工维护依赖清单。
后续可以沿着下面方向迭代,适配更大体量项目:
- 工作流完整性校验工具:开发脚本解析 JSON,自动提取工作流用到的模型、LoRA、自定义节点,和依赖清单做比对,提前发现缺失资源,避免交付无法运行的工作流。
- 简易任务队列改造:加入失败重试、任务状态记录,处理上百张图片大规模批量业务。
- 元数据解析导出工具:批量读取输出 PNG 内部 ComfyUI 元数据,导出 JSON 存档,防止后期图片编辑后元数据丢失。
- 多套交付模板:区分内部研发、外包合作方两套文案模板,支持设置分享有效期。
- 台账链接巡检脚本:定时读取 Excel 台账,批量检测分享链接有效性,输出失效链接告警。
六、一线项目落地经验与避坑总结
下面这些都是真实项目踩坑总结,比代码本身更值得关注。
- 先落地资产目录规范,再使用自动化脚本。很多人拿到脚本直接运行,但参考素材、工作流文件杂乱无章,脚本很难发挥价值,规范永远排在第一位。
- 降噪强度不能一概而论。角色人脸重绘降噪强度建议 0.4‑0.6;风格化大幅度改写参考图建议 0.6‑0.75;数值过高容易丢失原图人物特征,需要根据业务沉淀参数表写进项目文档。
- 不要把模型权重打包进资产包,大模型体积巨大,只记录哈希和下载地址,否则资产包体积过大,传输分发都很困难。
- ComfyUI API 模式图片路径坑点:外部文件夹图片 API 无法读取,图片必须放到 ComfyUI 内置 input 目录。
- 版权风险务必重视:输入参考图、人设素材需要具备合法版权,不要直接使用网络无授权图片用于商业绘图业务。
- 脚本只是辅助,不建议完全无人值守跑大批量任务,AI 绘图容易出现显存溢出,需要人员定期查看任务状态。
七、总结
很多人聊 ComfyUI 工业化,第一反应就是云渲染、大型集群。但对于大量中小美术工作室、短剧美术外包团队来说,真正的工业化,不等于全自动无人值守。
真正的工业化,是把依靠设计师个人记忆、零散随意的工作方式,转变成可复现、可追溯、可交接的标准化流程。SD 底层给了我们强大绘图能力,但工作流 JSON 不等于完整交付方案,模型、节点、参考素材、参数文档共同构成完整业务资产。
本方案不绑定特定网盘,网盘仅作为存储分发媒介。整套体系的核心价值是实现绘图资产规范化、批量推理、标准化交付留痕。配套素材包可以直接拿来当做新项目模板,复制目录快速启动业务;两份 Python 脚本可以结合团队业务持续二次迭代优化。