简介:这份资源是面向AI绘画与自动化流程爱好者的ComfyUI工作流合集,适合希望借助可视化拖拽界面快速搭建AI处理流程的创作者、开发者与研究人员。包内共1310个文件,以687个ipynb笔记本和540个json工作流配置为主,另含png、jpg示例图、md说明文档及少量yml、py脚本,压缩包约113.09MB,覆盖图像生成、风格调整、文本编辑与内容创作等场景。每个工作流由经验丰富的开发者预先配置好节点,用户可直接运行或按需组合定制,模块化设计带来丰富的扩展可能。资源还附带文档与教程,帮助理解各工作流的功能与操作方法,降低上手门槛。目前已有649人学习下载,适合作为探索ComfyUI与AI创作流程的实用起点。
1. 拿到一个 ComfyUI 工作流合集压缩包,先别急着双击
很多人第一次接触 ComfyUI 工作流合集,是从一个几十上百兆的 zip 开始的。解压之后满屏.json,文件名还都是workflow_v3_final_修正.json这种,双击打不开,拖进 ComfyUI 又报一堆红色节点。于是有人得出结论:这合集是垃圾。但真实情况往往是——你缺的不是工作流,而是节点依赖和模型路径的对应关系。
ComfyUI 的工作流本质是一张节点图,.json里存的是节点类型、连线关系和参数值,它不包含节点实现,也不包含模型权重。所以一个工作流能不能跑起来,取决于三件事:节点插件装没装、模型文件放没放对、版本对不对得上。这篇笔记就按这个顺序,把「拿到一个 ComfyUI 工作流合集之后怎么落地」讲清楚,适合刚上手 ComfyUI、手里已经有一堆工作流但跑不通的人。
2. 先搞懂工作流合集里到底装了什么:节点、模型、参数三层结构
2.1 一个 .json 工作流文件的内部结构
ComfyUI 的工作流 JSON 顶层通常是一个对象,里面最关键的字段是nodes、links和extra。nodes是节点数组,每个节点有id、type、widgets_values、inputs、outputs;links描述节点之间的连线;extra里往往藏着ds(节点在画布上的位置)和group(分组框)。
下面是一段精简过的结构示例,帮你建立直觉:
{ "last_node_id": 12, "nodes": [ { "id": 3, "type": "CheckpointLoaderSimple", "widgets_values": ["sd_xl_base_1.0.safetensors"], "inputs": [], "outputs": [ {"name": "MODEL", "type": "MODEL", "links": [7]}, {"name": "CLIP", "type": "CLIP", "links": [8]} ] }, { "id": 5, "type": "KSampler", "widgets_values": [156680208700286, "randomize", 20, 7.5, "euler", "normal", 1.0], "inputs": [ {"name": "model", "type": "MODEL", "link": 7}, {"name": "positive", "type": "CONDITIONING", "link": 9} ] } ], "links": [[7, 3, 0, 5, 0, "MODEL"]] }type字段是判断依赖的关键。CheckpointLoaderSimple、KSampler、CLIPTextEncode这些是 ComfyUI 内置节点,装了本体就有;但如果你看到IPAdapterApply、ControlNetApplyAdvanced、AnimateDiffLoaderV1这类,基本可以确定来自第三方插件包。widgets_values的顺序和节点定义里的 widget 顺序一一对应,改参数就是改这个数组,但顺序错了会直接崩,所以手改 JSON 不如在界面里改。
2.2 节点依赖:从 type 反查需要装哪个插件
拿到一个跑不通的工作流,第一步不是去搜文件名,而是看报错里缺哪个type。ComfyUI 启动时如果加载工作流失败,控制台会打印类似Cannot execute because node type 'IPAdapterApply' is not registered的信息。把这个 type 记下来,去插件市场或插件仓库搜,通常能定位到对应的插件包。
我一般会用一个脚本先把合集里所有工作流的节点类型扫一遍,去重后和本地已装节点做差集,这样一次就能知道缺哪些插件,而不是一个个打开试。
import json, os, glob # 本地已注册节点类型,可从 ComfyUI 的 /object_info 接口导出后存成 json with open("local_nodes.json", "r", encoding="utf-8") as f: local_nodes = set(json.load(f).keys()) missing = {} for path in glob.glob("workflows/**/*.json", recursive=True): try: with open(path, "r", encoding="utf-8") as f: wf = json.load(f) except Exception as e: print(f"[跳过] {path} 解析失败: {e}") continue for node in wf.get("nodes", []): t = node.get("type") if t and t not in local_nodes: missing.setdefault(t, []).append(os.path.basename(path)) for t, files in sorted(missing.items(), key=lambda x: -len(x[1])): print(f"{t} 出现在 {len(files)} 个工作流中,例如: {files[0]}")这段脚本的逻辑很直白:遍历所有工作流 JSON,收集nodes[].type,和本地节点集合比对,输出缺失节点及其出现频次。local_nodes.json可以从 ComfyUI 运行时的/object_info接口拿到,也可以手动维护。参数上唯一要注意的是glob的递归模式,如果你的合集目录层级很深,**/*.json配合recursive=True才能扫全。跑完之后,按出现频次从高到低装插件,优先解决影响面最大的那几个。
2.3 模型依赖:文件名对不上是最常见的翻车点
节点装齐了,工作流还是可能报Value not in list,这基本是模型文件名对不上。工作流里CheckpointLoaderSimple的widgets_values[0]写死了sd_xl_base_1.0.safetensors,但你本地放的是SDXL/base.safetensors,ComfyUI 就找不到。
常见做法是保持模型目录结构和工作流预期一致:checkpoint 放models/checkpoints,LoRA 放models/loras,ControlNet 放models/controlnet,VAE 放models/vae。如果文件名确实不同,有两个选择:一是改工作流里的文件名,二是在 ComfyUI 里用Extra Model Paths配置额外搜索路径。前者适合少量工作流,后者适合整个合集统一管理。
提示:不要用中文文件名或带空格的路径,ComfyUI 在部分系统上对这类路径处理不稳定,报错信息还很难看懂。
3. 把工作流合集跑起来的最小操作路径
3.1 环境准备:ComfyUI 本体与插件管理器的安装
假设你已经有一个能启动的 ComfyUI。如果没有,标准做法是克隆本体仓库、建虚拟环境、装依赖。插件管理推荐用 ComfyUI-Manager,它能列出已装插件、检查缺失节点、一键安装,省掉大量手动 git clone 的功夫。
# 进入 ComfyUI 的 custom_nodes 目录 cd ComfyUI/custom_nodes # 安装管理器(具体仓库地址以你实际使用的为准) git clone <manager-repo-url> ComfyUI-Manager # 回到 ComfyUI 根目录,启动 cd ../.. python main.py --listen 127.0.0.1 --port 8188启动后浏览器打开http://127.0.0.1:8188,在管理器面板里点「Install Missing Custom Nodes」,它会读取当前工作流缺失的节点并尝试安装。这一步能解决大部分插件缺失问题,但装完必须重启 ComfyUI,否则新节点不会注册。
3.2 批量导入工作流并定位缺失节点
合集里的工作流不建议一次性全拖进去。正确做法是先建一个workflows目录,把 JSON 按功能分类放好,然后逐个拖入 ComfyUI 画布。拖入后如果节点显示为红色或紫色,说明类型未注册;如果节点正常但连线断开,说明输入输出类型不匹配,通常是插件版本差异导致的。
我一般会先跑一遍第 2.2 节那个扫描脚本,把缺失节点清单拿到,装完插件再逐个打开。打开时重点看三类节点:加载器(Checkpoint/LoRA/ControlNet)、采样器(KSampler 及其变体)、后处理(Upscale、FaceDetailer)。这三类是最容易因为插件版本不同而出问题的。
3.3 用 API 格式导出并做一次无界面验证
ComfyUI 界面里保存的是「工作流格式」,但如果你要批量跑或者集成到其他系统,需要的是「API 格式」。在界面右上角菜单里可以导出 API 格式 JSON,它的结构和界面格式不同,节点用class_type标识,输入用inputs对象描述。
下面是一个用 API 格式提交任务的最小 Python 示例:
import json, requests SERVER = "http://127.0.0.1:8188" with open("workflow_api.json", "r", encoding="utf-8") as f: prompt = json.load(f) # 修改关键参数:这里改的是 KSampler 的 seed 和步数 for node_id, node in prompt.items(): if node.get("class_type") == "KSampler": node["inputs"]["seed"] = 123456 node["inputs"]["steps"] = 25 resp = requests.post(f"{SERVER}/prompt", json={"prompt": prompt}) print(resp.status_code, resp.json())这段代码的核心是/prompt接口,它接收一个prompt字段,值是 API 格式的工作流字典。class_type对应界面里的节点类型,inputs里的键对应节点输入名。改参数就是改inputs里的值。提交成功会返回一个prompt_id,可以用它去/history/{prompt_id}查执行结果。这个方式适合把工作流集成到自动化流程里,也方便做批量测试。
注意:API 格式和界面格式不能混用,提交界面格式会直接报 400。导出时确认菜单里选的是「Export (API)」。
4. 工作流跑不通时的排查顺序与避坑清单
4.1 现象:节点全红,控制台报 node type not registered
原因:插件没装或装了但没重启。ComfyUI 只在启动时扫描custom_nodes目录,运行中新增的插件不会自动加载。
解决:确认插件目录下有对应文件夹且里面有__init__.py,然后完全重启 ComfyUI。如果重启后仍报缺失,检查插件是否依赖特定版本的 ComfyUI 本体,版本不匹配时插件会加载失败但不一定报明显错误,看启动日志里有没有 import 异常。
4.2 现象:工作流能加载,但执行到某节点报 Value not in list
原因:模型文件名或路径不匹配。常见于 checkpoint、LoRA、ControlNet 三类加载器。
解决:在 ComfyUI 界面里点开对应加载器节点,看下拉列表里实际有哪些文件,把工作流里的文件名改成列表里存在的那个。批量处理时可以用脚本统一替换 JSON 里的widgets_values文件名。
4.3 现象:出图正常但风格和预期完全不符
原因:LoRA 权重没加载、ControlNet 没生效、或者采样器参数被覆盖。工作流合集里经常有多个 KSampler 串联,改参数时只改了第一个,第二个还是旧值。
解决:从头到尾检查所有采样器节点的widgets_values,特别是steps、cfg、sampler_name、scheduler、denoise五个值。denoise在重绘类工作流里尤其关键,设成 1.0 等于完全重画,设成 0.5 才是部分重绘。
4.4 现象:显存爆了,报 CUDA out of memory
原因:分辨率过高、batch size 过大、或者同时加载了多个大模型。SDXL 工作流在 8G 显存上跑 1024x1024 加 ControlNet 很容易爆。
解决:先降分辨率到 768 以下测试,确认流程通了再往上加。ComfyUI 启动参数加--lowvram或--medvram能缓解,但会牺牲速度。另一个常见做法是把 VAE 单独加载并在采样后释放,减少峰值占用。
4.5 现象:工作流在别人机器上能跑,在我这里报节点版本不兼容
原因:插件版本差异。同一个节点类型在不同版本里输入输出可能变了,旧工作流里的连线在新版插件上对不上。
解决:不要盲目升级所有插件。先确认工作流大概是什么时期产出的,装对应时期的插件版本。如果找不到,就在界面里手动重新连一下断开的线,通常能救回来。这也是为什么我建议把能跑通的工作流连同插件版本一起备份,省得下次再踩。
5. 把合集变成可复用资产:版本锁定与批量验证
工作流合集真正的价值不在于「有多少个」,而在于「有多少个能在你的环境里稳定复现」。所以最后这一步,是把跑通的工作流固化成可复用资产。
我的习惯是给每个跑通的工作流建一个目录,里面放三样东西:API 格式 JSON、一份requirements.txt记录插件版本、一张输出样图。插件版本可以用 ComfyUI-Manager 的导出功能拿到,也可以手动记录关键插件的 git commit。这样下次换机器或者重装环境,照着装就能复现,不用再靠记忆。
批量验证可以用一个简单的脚本,遍历所有 API 格式工作流,逐个提交并检查返回状态:
import json, glob, requests, time SERVER = "http://127.0.0.1:8188" results = [] for path in glob.glob("api_workflows/*.json"): with open(path, "r", encoding="utf-8") as f: prompt = json.load(f) try: r = requests.post(f"{SERVER}/prompt", json={"prompt": prompt}, timeout=10) ok = r.status_code == 200 results.append((path, ok, r.status_code)) except Exception as e: results.append((path, False, str(e))) time.sleep(1) # 避免请求过密 for path, ok, info in results: print(f"{'OK ' if ok else 'FAIL'} {path} -> {info}")这个脚本只验证「能不能提交」,不验证「出图对不对」。提交成功说明节点和模型依赖都齐了,出图质量还得靠人眼看。time.sleep(1)是防止请求过密导致服务端排队,实际跑的时候可以根据机器性能调整。
一个血泪经验:不要在工作流里写死绝对路径。合集里经常能看到C:/Users/xxx/models/xxx.safetensors这种,换台机器直接废。统一用相对路径或者 ComfyUI 的模型目录约定,能省掉后面无数次改路径的麻烦。希望帮到你。
本文还有配套的精品资源,点击获取