简介这份ComfyUI工作流合集面向AI创作者、开发者与爱好者汇集超过200个实用自动化流程覆盖图像生成、风格调整、内容创作等场景借助拖放式节点设计用户无需编程即可搭建复杂AI应用。压缩包共1310个文件以687个ipynb笔记本和540个json工作流配置为主体辅以png/jpg预览图及少量说明文档整体约113MB结构清晰便于分类使用。目前已有646人学习适合作为入门模板或二次开发起点。所有工作流均模块化设计可按需组合节点实现无限拓展资源还附带Colab运行脚本与部分教程帮助快速理解节点逻辑与部署方法。对于希望低成本探索ComfyUI或提升AI工作流效率的用户来说是相当实用的工具包。1. ComfyUI 工作流合集别急着双击解压ComfyUI 工作流合集也就是ComfyUI workflows collection.zip看起来就是一堆.json文件对用过的人来说它是一份“谁依赖谁”的接线说明书。工作流本身不包含模型正文也不包含第三方插件zip 里少了任何一块拖进画布后就是节点红成一片、控制台反复刷错甚至一个 1024×1024 的 EmptyLatentImage 就能把显存拉到接近爆。这篇笔记按“拆包 → 扫描依赖 → 导入 → 调参 → 排错”的顺序展开适合拿到别人合集、想快速判断它能不能跑的初学者也适合想把“跑通工作流”沉淀成流程的熟手。先别急着解压后面这几步能帮你把试错时间从两小时压到二十分钟。2. 拆包前先看清结构工作流 json、custom_nodes 与模型目录2.1 workflow json 里到底存了什么不存什么大多数人拿到工作流文件第一反应是“这是个能出图的成品”。实际上 ComfyUI 导出的 json 只记录了三类东西画布上每个节点的类型和坐标、节点之间怎么连线、以及连线端点上的具体参数值。模型文件、插件脚本、甚至预览图本身都不在这个文件里。一个典型的节点结构是这样的id是节点编号type是节点类型widgets_values记录的是你在界面上填的参数inputs和outputs描述连线口。真正决定工作流能不能跑起来的是type字符串。比如节点类型是KSamplerComfyUI 就知道去哪调采样器如果是某个第三方插件的专用节点比如ImpactWildcardEncode本地没有对应插件时前端就会把节点画成红色并提示未知节点类型。同样关键的是widgets_values里的模型文件名。以 checkpoint 节点为例json 里往往只存一个字符串例如ckpt_name: sd_xl_base_1.0.safetensors。它不会把模型文件打包进去也不会告诉你这个模型多大、从哪个仓库来。这意味着每次拿到新合集第一步不是看效果图而是把所有 json 里的模型名提取出来去和本地models目录做比对。这是工作流复现的第一道关卡大多数“跑不起来”都死在这里。2.2 合集 zip 的四种典型目录组织方式合集的作者习惯不同但拆开zip后常见的是下面四种结构。先认清结构再决定怎么处理能少走很多弯路。目录形态通常包含什么你的处理方式全平铺几十个.json直接摊在根目录附一个 README先扫描模型名再手动挑需要的带 custom_nodes 子目录第三方插件源码一起打进 zip解压到隔离目录逐个确认版本带 models 子目录模型文件也打包了体积会很大不建议直接覆盖本地先看文件名分版本归档按 sd15、sdxl、video 分子目录说明作者自己维护过可信度较高第一种最省事但也最容易出问题作者只给工作流不给插件你以为拖进去就能跑结果一排红。第二种要小心版本冲突尤其当你本地已经装过同名插件时覆盖后很容易把原来的配置搞坏。第三种虽然看起来“最全”但模型文件对不上很常见作者用的可能是 7GB 的原版你却下载到了其他来源的精简版跑出来的图就是不对。第四种相对友好因为它至少说明作者有整理习惯不同分支还分别标记过。拿到 zip 后我习惯先放到一个临时目录staging里观察结构而不是直接解压到 ComfyUI 的根目录。这样做的好处是你可以把custom_nodes、models、workflows分开验证确认没问题后再决定是否合并进正式环境。2.3 扫描而不解压一段安全的预检脚本既然要避免盲目解压就用一段脚本来做预检。这里我给出的做法是不真正释放文件只通过 Python 标准库zipfile读取压缩包内容顺便检查有没有异常项。# 只读取压缩包清单不实际解压任何文件 import zipfile import sys from pathlib import Path target Path(sys.argv[1]) with zipfile.ZipFile(target) as zf: for info in zf.infolist(): name info.filename.replace(\\, /) size info.file_size # 标记超过 200MB 的大文件常见于打包了模型或视频 if size 200 * 1024 * 1024: print(f[大文件] {name} ({size // (1024 * 1024)} MB)) elif name.count(/) 0 and name.endswith(.json): print(f[工作流] {name}) # 检查路径穿越防止解压时把文件写到目标目录之外 if name.startswith(/) or .. in name.split(/): print(f[路径异常] {name})这段脚本的逻辑很简单遍历压缩包里的每个条目按规则打标签。info.file_size是解压后的体积不是压缩体积所以当你看到某个条目有 2GB 时说明压缩包内嵌了完整模型。name.count(/) 0用来挑出根目录下的 json 文件通常就是工作流主体。..路径检查在近期特别值得做因为少数分享包里会夹带恶意路径解压时可能会覆盖你其他目录里的文件。如果你在 macOS 上解压过分享包还会看到大量__MACOSX目录那是系统自带压缩工具产生的垃圾文件可以直接过滤掉。用这段脚本跑一遍基本就能判断这个 zip 是“工作流合集”还是“模型搬运包”然后决定下一步怎么处理。3. 导入与安装的两条路线从 zip 到能跑通的最小集3.1 直接拖 json 到画布这条路线其实隐藏了一个前提很多人导入工作流的方式是把 json 文件拖进 ComfyUI 的空白画布然后等节点刷新出来。这个方法本身没问题但它隐藏了一个前提你本地必须已经有全部插件和模型。ComfyUI 的导入机制不会自动下载缺失资源它只会把画布重建出来然后用红色标记未知节点。这里的第一个坑是格式。ComfyUI 的“前端导出版本”和“API 调用版本”是两种不同结构。前端版会有nodes和links字段适合画布展示API 版更像一张扁平的 prompt 表没有坐标和连线。有人会把 API 版直接当普通工作流发出来你拖进画布后看到的是一大串像“3: [12, 0, 34, ...]”的机器内容按钮也没有。判断方法很简单打开 json如果看到顶层有nodes就是画布版如果全是prompt和extra这种字段就是 API 版需要先转成画布格式才能拖。所以拿到合集后我会先把所有 json 归到staging/workflows目录再一次性拖进 ComfyUI。红着的节点先不要急着删。把鼠标移到红色节点上弹出的提示会显示它属于哪个插件记录下来下一步统一装。3.2 批量放置 custom_nodes 并安装依赖命令与参数说明第三方插件一般放在ComfyUI/custom_nodes目录下。合集里如果带了自定义节点的源码那就按源码目录逐份放进去。但更稳妥的做法是先解压到一个临时目录只把 README 中说明需要启用的插件移动过去并且逐个检查有没有requirements.txt。# 批量安装合集内 custom_nodes 的开源依赖 # 注意务必先在 Conda/venv 环境内执行避免污染系统 Python for dir in staging/custom_nodes/*/; do name$(basename $dir) if [ -f $dir/requirements.txt ]; then echo 安装依赖: $name pip install -r $dir/requirements.txt fi done这个循环会扫描staging/custom_nodes下所有子目录找到带requirements.txt的插件并执行安装。参数层面需要关注两点第一执行pip install前最好先用pip list把当前环境快照保存下来。插件依赖很可能指定了固定版本一旦装进去回溯很麻烦先留后悔药总没错。第二requirements.txt里的包名如果带torch、numba这种底层库一定要格外小心。它们版本变了可能连模型推理都跑不起来。这时候我倾向于先用pip install -r requirements.txt --no-deps只补齐缺失的普通依赖torch 这类让 ComfyUI 自己的环境来管。3.3 启动日志与节点红黄状态的判定标准插件装完不等于能跑。启动时把服务日志留下来是排查未知节点和加载冲突的关键。用下面的命令启动 ComfyUI并把输出写到日志文件里方便回看。# 启动时用 --disable-auto-launch 避免浏览器被强制拉起 cd /path/to/ComfyUI python main.py --port 8188 --disable-auto-launch /tmp/comfy_run.log 21 sleep 10 # 只抓取异常相关行避免日志刷屏 grep -E ERROR|Exception|Traceback /tmp/comfy_run.log | head -20这里的两个参数值得解释--port 8188是默认 Web 端口换端口时注意别和现有服务冲突--disable-auto-launch适合远程服务器避免每次启动都尝试打开本地浏览器。sleep 10是给模型加载和插件初始化留出时间如果机器慢可以改成15或20。日志里如果出现Failed to load custom node说明某个插件本身有语法错误或依赖缺失。如果你发现工作流里有一个节点红了但插件明明已安装常见原因是插件目录名重复。比如你本地原来有个旧版合集里又带了一份ComfyUI 加载到一半就冲突。这时把旧目录改名重启再观察是否恢复。4. 跑通合集前先补齐依赖checkpoint、CLIP 与显存参数4.1 用一段脚本提取压缩包里所有工作流的模型引用这个步骤是整篇笔记里性价比最高的一步。把压缩包里所有 json 里的模型名一次性抓出来然后拿去和本地文件对比缺失的模型自然浮出水面。脚本直接读压缩包连解压都省了。# 从 zip 内的所有工作流 json 中提取 checkpoint/lora/vae/clip 引用 import json import zipfile import sys archive zipfile.ZipFile(sys.argv[1]) refs set() def visit(obj): if isinstance(obj, dict): for key, value in obj.items(): if key in {ckpt_name, lora_name, vae_name, clip_name} and isinstance(value, str): refs.add(value) else: visit(value) elif isinstance(obj, list): for item in obj: visit(item) # 跳过 macOS 产生的元数据目录 for name in archive.namelist(): if name.endswith(.json) and not name.startswith(__MACOSX): visit(json.loads(archive.read(name).decode(utf-8, errorsignore))) for ref in sorted(refs): print(ref)为什么要单独标出clip_name因为很多新人只盯ckpt_name忘了一个工作流可能同时引用 VAE 和 LoRA。SDXL 系列的 LoRA 如果不给基座模型匹配好出图直接偏色甚至崩溃。errorsignore是为了兼容含中文路径的 json防止脚本在中途卡死。抓出来的模型名挨个去ComfyUI/models/checkpoints、ComfyUI/models/loras下面找。文件名完全一致才算数大小写、后缀都不能差。有些分享包作者自定义过别名例如ckpt_name: my_mix.safetensors实际模型可能是别的名字这时要回到 README 里找映射关系。4.2 显存不够时先调哪几个参数而不是先换卡“ComfyUI 生成视频时爆内存”这个搜索词我见得太多了。其实大部分爆显存不是显卡不行而是工作流里那几个大头参数没控住。复现合集时优先看三个地方图像尺寸、批量大小、以及 ControlNet 的加载方式。# 小显存复现合集时的起步参数 # 仅在你已经确认本地资源足够但显存吃紧时使用 python main.py --port 8188 --lowvram --disable-auto-launch--lowvram会让模型分块加载代价是推理变慢。对 6GB 到 8GB 显存的环境来说跑一张 512×768 的图通常可以接受。如果工作流里用了 ControlNet还要检查 ControlNet 的strength是不是被拉到 1.0它会让额外模型占据大量显存。一般降到 0.6 到 0.8画质差异不大显存却能省下一截。另一个常见误救是盲目调低分辨率。节点里写着EmptyLatentImage里面设的是1280, 720你改成640, 360显存确实下来了但构图和预览图完全两回事。更好的做法是保持宽高比不变降一边。如果有多个EmptyLatentImage用于不同分支还要确保输入端口的 latent 和最终 KSampler 的分辨率一致否则会报 latent 形状不匹配。4.3 SD1.5 与 SDXL 混用一个 checkpoint 换错整条链就断了工作流合集里最容易出现的问题是作者本身在混用模型分支。SD1.5 的 checkpoint 需要搭配它自己的 CLIP 文本编码器通常是 77 个 token 限制SDXL 则要用两个文本编码器token 上限更高负向提示词的处理逻辑也不同。很多人在“CLIP 询问机”这个节点上栽跟头就是因为没有意识到它输出的 hidden states 和后面那个 pay attention 节点的预期长度不一致。快速判断方法是看 checkpoint 文件名带xl或sdxl的是新分支其余大概率是 1.5。如果你发现工作流调了clip_skip2还出图糊多半也是分支不匹配。SD1.5 常用 CLIP skip 2SDXL 一般不动或只跳 1。这里不要靠玄学一个个试直接看作者 README 里有没有写基础模型名。还有一种情况藏在 KSampler 的model输入前面的CheckpointLoaderSimple里。合集 zip 里可能明明已经放了models/checkpoints/xxx.safetensors但工作流引用的是另一个名字。这时不要硬改工作流里的名字建议把模型复制一份并用引用名命名放到同一目录。理由很简单作者为了兼容性可能同时在多个节点引用同一个文件改名会让其他分支一起失效。5. 工作流合集避坑指南从 zip 解压到出图的 4 个高频坑5.1 节点整排标红但 README 里完全没提插件这种现象很常见。你下载的 zip 里只有 json 和 READMEREADME 也只写了“加载工作流后一键出图”。但拖进画布后一大串节点直接红掉点击提示是Unknown node type: ImpactWildcardEncode之类。原因作者默认你装了“ComfyUI Impact Pack”这类插件集合但没在简介里声明。解决方法是先到 ComfyUI 的custom_nodes市场里搜索对应插件关键词安装后重启服务。安装时不要图省事用整包覆盖单独在 custom_nodes 下新建目录让插件自己拉依赖能减少冲突。血泪经验告诉我红节点不要删删了连线就断了等插件装回来还要手动重连。5.2 模型文件明明在还报ckpt not found你确认models/checkpoints下有对应的.safetensors文件名也没拼错但加载时还是提示找不到。这种情况十有八九是文件路径大小写或后缀不同。比如 json 里写的是.ckpt你放进去的是.safetensorsComfyUI 不认为它们是同一个文件。还有一种更隐蔽的文件确实在但哈希不完整。下载中断过的模型文件表面能显示大小加载时却会花很长时间然后报Error(s) in loading state_dict for ...。解决方法是先用ls -l看文件字节数再和 README 里给的数值比对。差几百 MB 就一定有问题直接重新下载不要拿残缺文件硬试。# 对比模型文件大小判断文件是否完整 ls -l /path/to/ComfyUI/models/checkpoints/*.safetensors如果两个候选文件大小相近可以用sha256sum验哈希。这步会花一点时间但能排除大量“跑出来图不对”的玄学因素。5.3 固定随机种子但每次输出都出一张一模一样的“预览图”这个问题非常迷惑。你点了 Run出来的图看着和作者预览图一模一样以为成功了但放大看细节感觉它压根不像生成的更像一张贴图。原因在于工作流里包含了LoadImage或VAE Encode节点输入图像被固定了后面的流程只是在变换一张已有图片而不是从噪声开始生成。如果你想要的是真实生成就去找到工作流里第一个EmptyLatentImage或KSampler的输入端确认它连接的是EmptyLatentImage而不是LoadImage。有时作者为了展示效果会把中间结果连到静态图上新手很容易被误导。还有一个排查办法把种子改成随机重新跑一次如果输出几乎不变说明图像来源根本不是采样器而是静态图。5.4 zip 里的 ffmpeg 或临时依赖路径在 Windows 上加载不了很多工作流会调用ComfyUI-VideoHelperSuite这类插件它依赖 ffmpeg 可执行文件。zip 解压后如果插件检查不到 ffmpeg它会在日志里提示你手动指定路径。在 Windows 上路径含中文或空格会引发额外问题。解决方法是把 ffmpeg 的完整路径写到插件配置文件里或者把它放进插件的ffmpeg子目录。启动时如果看到failed to locate ffmpeg之类的行先确认真实路径可执行再修改环境变量FFMPEG_BINARY指向绝对地址。目录名尽量不要带空格比如用D:/Tools/ffmpeg不要用D:/Program Files/...。这个坑通常在合集包下了一半、跑视频分支时才会暴露提前埋好能避免后面再翻车。6. 做一张“合集验收卡”用 15 分钟决定 zip 的去留工作流合集越来越多不可能每个都放进正式环境长期维护。我习惯每拿到一个 zip就用一张固定的“验收卡”走一遍 15 分钟流程能跑通就留跑不通又不打算深究的新手可以直接弃包不用硬磕。检查项花费时间通过标志扫描 zip 内容清单1 分钟无非预期路径、无超大文件提取模型引用并与本地比对5 分钟所有引用名都有对应文件批量安装 custom_nodes 并启动5 分钟日志无 critical 错误画布无红节点跑一张最小图5 分钟出图速度正常尺寸与原图接近这套流程里最重要的一招是把工作流裁剪成最小复现新建一个空工作流只保留CheckpointLoaderSimple → KSampler → VAE Decode → SaveImage先把底图跑通。如果这一步能稳定出图说明模型和插件链路没问题之后再把原工作流里其余节点一层层加回来。这样可以快速判断问题出在哪一段而不是对着整张大图从头找。我自己保存合集时还会顺带把每个 json 对应的模型名写进该目录的DEPENDENCIES.md文件名即使没有后缀也保证准确。这个习惯帮我避免了很多次“两周后想复现却发现早忘了供应链”的窘境。如果你也照这个顺序走一遍至少不会再花一下午对着红节点发呆。希望帮到你。本文还有配套的精品资源点击获取