☰
ComfyUI模型替换实战:从Checkpoint切换到批量出图全流程
2026/9/25 5:51:21 网站建设 项目流程

先说结论:在 ComfyUI 里做模型替换,不是把新模型文件拖进目录就完事。很多人换完模型发现出图崩、风格不对、人物糊,问题通常不在模型本身,而在替换链路里还有 Checkpoint 切换、提示词适配、VAE 配套、采样参数、批量验证这些环节没有一起跟上。

这次我们看一个很具体的替换场景:把出图模型从“死神遗镰”切成“大狗叫”。这两个名字你可以先理解成两套不同的本地模型文件,“大狗叫”是目标模型,“死神遗镰”是当前在用的模型。整篇文章会按本地模型替换的完整流程展开,包含模型文件准备、ComfyUI 节点切换、参数调整、批量出图、API 调用和常见问题排查。即使你手上不是这两个模型,换成任意两个 Checkpoint 或 LoRA,这套流程同样能复用。

文章适合已经在用 ComfyUI、想换模型风格但不想重新搭工作流的用户,也适合刚开始接触本地出图、想搞清楚 Checkpoint、LoRA、VAE 之间关系的读者。全文不涉及复杂的训练环节,只讲替换和验证这件事怎么落地。

1. 核心能力速览

这是一个以模型替换为核心流程的操作型教程。先把手头要准备的东西和能实现的能力列成一张表,方便对照检查。

能力项说明
项目类型ComfyUI 本地模型替换与出图流程改造
涉及模型示例为“大狗叫”模型与“死神遗镰”模型,实际以本地模型文件为准
主要功能Checkpoint 切换、提示词适配、参数调整、批量出图、API 调用
启动方式ComfyUI 本地启动,或启动 API 服务后脚本调用
推荐硬件建议使用 N 卡 + CUDA 环境,具体显存需求以模型版本为准
是否支持批量任务支持,可通过 WebUI 排队或脚本批量提交生成任务
是否开放 APIComfyUI 自带 API,默认监听 8188 端口
输出格式PNG/WebP/JPEG,具体取决于保存节点配置
适合场景本地绘图、风格切换、批量出图、二次开发集成

这里需要先说明一点:本文不会把两个模型的出图效果写成固定结论,因为模型版本、提示词、采样参数不同,真实表现差异很大。更稳妥的判断方式是直接跑几组对比图,用结果判断现有工作流是否适合新模型。

2. 适用场景与使用边界

2.1 这个流程适合谁

如果你满足下面任意一条,这个替换流程值得完整走一遍。

  • 想切换本地绘图模型,但不希望从零重写 ComfyUI 工作流。
  • 想比较两个 Checkpoint 在相同提示词下的风格差异,需要批量生成对比图。
  • 想把旧的手动出图流程改成 API 批量调用,方便接入自己的管理脚本。
  • 想理解模型文件、VAE、LoRA 之间如何配合,减少换模型后的返工。

2.2 不适合什么场景

  • 如果你需要完全不同的工作流结构,比如从文生图切到图像编辑,单纯换 Checkpoint 不够,要改节点链路。
  • 如果你希望新模型能 100% 复现旧模型的提示词效果,这通常很难做到,因为模型训练语料、风格倾向都不一样。
  • 如果你要处理的是别人训练且未授权使用的模型文件,先确认授权再使用,不要直接拿来做商用。

2.3 合规与安全边界

本地模型替换涉及模型文件下载、图像生成和可能的 API 服务,使用时要关注以下几点。

  • 确认模型文件来源合法,尽量使用作者允许下载、允许本地使用的版本。
  • 如果模型基于某个角色形象、真实人物或受版权保护的素材训练,不要用于仿冒、造谣、规避审核等场景。
  • 用 API 批量生成时,建议只在本地或受控网络内开放服务,避免未授权的公网访问。
  • 涉及人脸生成、声音克隆或数字人相关能力时,必须先获得当事人授权,并在测试环境验证边界。

3. 环境准备与前置条件

3.1 操作系统与硬件

ComfyUI 官方对 Windows、Linux 都有较好的支持。通常来说,显卡驱动和 CUDA 环境要先装好,N 卡体验最顺畅。如果没有独立显卡,也能用 CPU 跑,但出图速度会慢很多,适合小尺寸简单测试。

显存方面,不同模型差异很大。老一点的 SD1.5 系列模型占用相对低,SDXL 系列需要更高显存和更大磁盘空间。这里的判断标准是:以本地实际运行时的显存占用为准。不要只看模型文件大小,要看加载进显存后的实际占用。

3.2 Python 与依赖

ComfyUI 基于 Python 开发,建议使用 Python 3.10 或更高版本。安装 PyTorch 时要注意 CUDA 版本匹配,否则启动时会报 Torch 相关错误。

通用检查清单如下。

  • Python 版本符合项目要求。
  • 显卡驱动已更新,nvidia-smi能看到正常输出。
  • PyTorch 安装的是 GPU 版本,torch.cuda.is_available()返回 True。
  • ComfyUI 依赖已完整安装,requirements.txt已执行。

3.3 模型目录结构

ComfyUI 默认通过目录结构区分模型类型。换模型时,大部分文件只需要放到对应目录里。

ComfyUI/ ├── models/ │ ├── checkpoints/ # 完整模型文件,如大狗叫模型 │ ├── loras/ # LoRA 文件 │ ├── vae/ # 独立 VAE 文件 │ ├── controlnet/ # ControlNet 模型 │ └── ... ├── input/ # 图生图输入素材 ├── output/ # 出图结果 └── main.py # 启动入口

“死神遗镰”模型如果暂时不用,可以先备份到别处或保留在 checkpoints 目录里,不一定要马上删除。保留旧模型的好处是方便做对比测试,缺点是多占磁盘空间。

磁盘空间按模型体积预留。一个较大模型往往有几 GB,如果目录里还保留了多个版本,建议至少预留几十 GB 空间。

4. 安装部署与启动方式

4.1 使用一键包或源码启动

ComfyUI 有两种常见启动方式:一种是解压即可用的整合包,一种是源码拉取后手动安装依赖。无论哪种,最终都是执行main.py启动服务。

如果使用整合包,通常自带 Python 环境和依赖,直接运行启动脚本即可。如果使用源码,先安装依赖再启动。

cd ComfyUI pip install -r requirements.txt python main.py

启动成功后,浏览器访问默认地址即可打开 WebUI。

http://127.0.0.1:8188

如果 8188 端口被占用,可以手动指定端口。

python main.py --port 8189 --listen 127.0.0.1

这里需要提醒:--listen 127.0.0.1表示只允许本机访问。如果要让局域网内其他设备访问,可以把 IP 换成0.0.0.0,但要注意访问权限,不要随意暴露到公网。

4.2 放置“大狗叫”模型文件

拿到“大狗叫”模型文件后,先确认文件格式。常见的有.safetensors和.ckpt,推荐优先使用.safetensors,安全性更高。

文件放入对应目录:

# 完整模型放入 checkpoints 目录 ComfyUI/models/checkpoints/dagoujiao_v1.safetensors

如果是 LoRA 形式的模型,则放入 loras 目录:

ComfyUI/models/loras/dagoujiao_lora_v1.safetensors

放入后回到 ComfyUI 页面刷新,正常情况下“大狗叫”会出现在 Checkpoint 加载器或 LoRA 加载器的模型下拉列表里。如果列表里没有,优先检查目录路径和文件名,然后重新启动 ComfyUI。

模型下载完成后建议做一次哈希校验,防止文件损坏导致加载报错。

sha256sum dagoujiao_v1.safetensors

把计算结果与来源页面提供的哈希值对比。如果一致,文件完整性没问题。

4.3 “死神遗镰”模型是否需要删除

不强制删除。稳妥的做法是先在当前工作流里确认所有引用“死神遗镰”的节点,把它们替换成“大狗叫”,再决定是否移除旧文件。

很多人在这个步骤踩坑:新模型文件放进了目录,但工作流里 Checkpoint 加载器仍然指向旧模型名,结果生成出来的图还是旧模型效果。排查时先看节点里的模型名称,不要只看目录里的文件。

5. 功能测试与效果验证

5.1 第一次单图测试

启动 ComfyUI 后,先不要直接跑批量任务,用最小的参数跑一张图验证链路是否通畅。

操作步骤:

  • 在 Checkpoint 加载器中把 ckpt_name 切换为“大狗叫”模型。
  • 正向提示词填一句简单描述,比如a small dog sitting on the grass, soft light。
  • 负向提示词保持原有内容不变,或者从最简开始。
  • 采样步数先用 20,CFG 先用 7。
  • 分辨率先用 512x512 或模型对应的小尺寸,跑通后再放大。

预期结果是:任务能正常执行,图像能保存到 output 目录,WebUI 页面能看到生成缩略图。如果执行过程报错或输出空白图,先看控制台日志和节点状态。

这个阶段判断链路的三个标准:

  • 模型加载没有报错。
  • 采样过程正常走完。
  • 最终图片文件和预览图都存在。

5.2 对比测试

对比测试的目的是看“大狗叫”和“死神遗镰”在相同提示词下差异有多大。操作方式是在 Checkpoint 加载器里切换模型名,保持其他节点参数不变,分别生成一张图。

建议把两张图的种子固定成同一个数值,这样更容易看出模型差异,而不是随机噪声差异。种子相同、提示词相同、参数相同,只换模型,得到的风格差异基本就是模型本身的倾向。

对比时重点观察:

  • 色彩倾向是否有明显变化。
  • 人物或主体的面部、结构是否稳定。
  • 背景细节和光影风格差异。
  • 是否出现旧模型没有的伪影或滤镜感。

如果差异太大,说明旧提示词不完全适配新模型,需要调整提示词。

5.3 提示词适配调整

“大狗叫”和“死神遗镰”在相同提示词下效果不同是正常的。新模型可能对某些词更敏感,也可能对某些风格词反应弱。

调整建议:

  • 保留正向提示词里的主体描述,比如场景、动作、光线。
  • 如果效果偏暗,增加bright lighting, high contrast之类的正向词。
  • 如果效果偏平板,可以增加detailed, intricate details。
  • 如果风格不对,先删掉旧模型专用的风格词,再逐步加回测试。
  • 负向提示词不要照搬旧模型,注意是否包含旧模型特有的负面 tag。

提示词调整是一个逐步逼近的过程。建议每次只改一个变量,记录下出图效果,几次之后就能找到当前模型相对稳定的提示词组合。

5.4 图生图与局部调整测试

如果工作流里有图生图或局部重绘节点,换模型后也要验证。

图生图测试步骤如下:

  • 准备一张测试图片,放入 ComfyUI 的 input 目录。
  • 在图生图节点中加载该图片。
  • 切换 Checkpoint 为“大狗叫”。
  • 设置合适的重绘幅度,比如 0.4 到 0.6。
  • 生成并检查输出是否保留了原图结构。

局部重绘测试时,重点看蒙版区域的边缘过渡是否自然。换模型后,新模型对蒙版边缘的处理可能不同,如果重绘痕迹过重,需要调整蒙版羽化值或重绘幅度。

5.5 判断标准

功能测试完成的标准不是“图好看”,而是“流程稳定可重复”。

  • 相同参数重复生成,不会出现任务中断。
  • 模型切换后,出图风格符合预期基础方向。
  • 提示词、种子、分辨率等参数都能正常工作。
  • API 调用能拿到和 WebUI 一致的结果。

如果以上都满足,再进入批量任务阶段。

6. 接口 API 与批量任务

6.1 开启 API 服务

ComfyUI 启动后本身就带有 API 服务,不需要额外开启。默认情况下,http://127.0.0.1:8188就是 API 服务地址。

WebUI 里的任何一张工作流图,都可以通过页面上的 API 格式按钮导出为 JSON。这个 JSON 就是提交给 API 的请求体。

如果要把工作流导出为 API 格式,在 ComfyUI WebUI 界面中找到保存/加载工作流的按钮,选择导出为 API 格式,保存下来的 json 文件可以直接用于后续脚本调用。

6.2 提交生成任务

以下代码把 API 工作流 json 读入,替换 Checkpoint 名称,并提交生成任务。

import json import time import requests server = "http://127.0.0.1:8188" with open("workflow_api.json", encoding="utf-8") as f: workflow = json.load(f) # 替换模型名 for node_id, node in workflow.items(): if node["class_type"] == "CheckpointLoaderSimple": node["inputs"]["ckpt_name"] = "dagoujiao_v1.safetensors" # 提交任务 resp = requests.post( f"{server}/prompt", json={"prompt": workflow} ) resp.raise_for_status() prompt_id = resp.json()["prompt_id"] print("prompt_id:", prompt_id) # 轮询任务状态 for _ in range(120): history = requests.get(f"{server}/history/{prompt_id}").json() if prompt_id in history: outputs = history[prompt_id]["outputs"] print("outputs:", outputs) break time.sleep(2)

这里的workflow_api.json是导出的 API 格式工作流文件,节点 ID 和节点类型需要以实际工作流为准。如果提示词节点是CLIPTextEncode,可以在脚本里找到它再替换文本内容。

替换提示词的示例:

# 假设节点 ID 为 6 的是正向提示词节点 if "6" in workflow: workflow["6"]["inputs"]["text"] = "a cute puppy in a fantasy forest"

实际项目中,先打开导出的 json 文件,确认正向提示词节点的 ID,再写进脚本,避免改错节点。

6.3 批量提交任务

批量任务的核心思路是:循环修改工作流中的提示词、种子、模型参数,然后逐个提交到/prompt接口。ComfyUI 内部有任务队列,可以连续接收多个任务。

import json import time import requests server = "http://127.0.0.1:8188" with open("workflow_api.json", encoding="utf-8") as f: base_workflow = json.load(f) prompt_list = [ "a puppy playing on grass, photo style", "a puppy sleeping in a basket, soft light", "a puppy running in snow, dynamic pose", ] for idx, prompt_text in enumerate(prompt_list): workflow = json.loads(json.dumps(base_workflow)) # 替换正向提示词节点 for node in workflow.values(): if node["class_type"] == "CLIPTextEncode" and node["inputs"].get("text"): # 根据实际工作流决定正向和负向节点 node["inputs"]["text"] = prompt_text break resp = requests.post( f"{server}/prompt", json={"prompt": workflow} ) if resp.status_code != 200: print(f"task {idx} failed:", resp.text) else: print(f"task {idx} submitted:", resp.json()["prompt_id"])

批量任务要注意几个问题:

  • 保存图片时,工作流里的 SaveImage 节点会自动写入 output 目录。
  • 如果任务之间互相影响,建议每个任务用一个独立 client_id。
  • 如果批量任务量很大,本地生成会依次排队,不要一次性提交上千个任务,先跑几十个验证稳定性。
  • 任务失败时记录失败原因,不要静默跳过。

6.4 下载结果图

ComfyUI 历史接口返回的 outputs 中会包含图片文件名,通过/view接口可以下载。

for node_id, node_outputs in outputs.items(): if "images" in node_outputs: for image in node_outputs["images"]: filename = image["filename"] subfolder = image.get("subfolder", "") img_resp = requests.get( f"{server}/view", params={"filename": filename, "subfolder": subfolder, "type": "output"} ) with open(f"download_{filename}", "wb") as f: f.write(img_resp.content)

实际使用时,把download_{filename}改成有意义的命名规则,比如包含种子、提示词索引,方便批量整理。

7. 资源占用与性能观察

7.1 显存占用怎么看

模型加载到显卡后,显存占用会明显上升。最常用的观察命令是nvidia-smi。

在任务执行期间,开一个终端执行:

nvidia-smi -l 1

这样每秒刷新一次显存状态。重点看图中对应 Python 进程的显存占用数值。

如果任务执行完,显存没有立刻释放,通常是进程还没退出或缓存未清理。可以等几秒,或者重启 ComfyUI 进程。如果持续占用很高,检查是否有其他任务堆积在队列里。

7.2 哪些参数影响资源和速度

  • 分辨率:分辨率越大,显存占用和耗时越高。建议先在模型对应的小分辨率下测试,再放大。
  • 采样步数:步数越多,耗时越长。20 步和 30 步在视觉上不一定差很多,但耗时明显不同。
  • 批量大小:一次生成多张图会大幅提高显存占用,容易爆显存。先用 batch_size 1 跑通。
  • 放大模型:如果加载了额外的放大模型,显存和内存都会增加。
  • 局部重绘区域:蒙版区域越大,计算量越大。

比较典型的降显存方法:

  • 降低分辨率。
  • 减少批量大小。
  • 关掉不必要的预览或切换为低显存优化。
  • 清理 ComfyUI 队列里积压的任务。
  • 如果显存紧张,优先用轻量模型,而不是一味调低参数。

7.3 CPU 与 GPU 差异

如果机器没有可用的 GPU,ComfyUI 会退回到 CPU 推理,速度会慢很多。如果 GPU 可用但速度还是慢,检查 PyTorch 是否真的使用 CUDA。

在 Python 环境里确认:

import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "CPU only")

如果返回 False,大概率是 PyTorch 版本与 CUDA 不匹配,需要重新安装对应版本的 PyTorch。

7.4 端口冲突与进程残留

ComfyUI 默认端口是 8188。如果启动时提示端口被占用,可以查看占用情况:

netstat -ano | findstr 8188

Windows 下找到对应 PID 后,可以结束进程,也可以直接换端口启动。更推荐换端口:

python main.py --port 8190

进程残留问题多见于强制关闭服务后,模型文件仍被占用。此时需要结束对应 Python 进程,或者等待系统释放文件后再删除模型。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
模型列表里没有“大狗叫”模型放错目录或未刷新检查 checkpoints/loras 目录,重启 ComfyUI移到正确目录,重新加载页面
加载模型报 “model not found”工作流 JSON 中的模型名与文件名不一致查看节点里的 ckpt_name 参数修改节点名或重命名模型文件
启动后页面打不开端口被占用或服务未启动查看启动日志,检查 8188 端口更换端口或重启服务
出图效果仍然像旧模型Checkpoint 节点没有切换打开工作流,逐个检查模型加载节点确认所有引用点都已替换
显存不足分辨率、批量大小或模型体积过大观察 nvidia-smi 显存变化降低分辨率,减少批量,换小模型
API 提交失败JSON 格式错误或节点 ID 不对打印提交响应的报错信息检查导出的 workflow_api.json
任务一直排队不执行队列里积压大量任务或显存被占满查看 /queue 接口状态清空队列,重启服务
批量任务中途卡住某个任务参数异常或本地资源不足查看控制台日志和失败任务 ID增加日志,失败后重试
图片保存失败output 目录无写入权限或磁盘空间不足检查磁盘空间和目录权限释放空间,修复目录权限
换模型后人物结构崩坏提示词或采样器参数不匹配对比新旧模型同参数出图调整提示词、步数、CFG 或采样器

这里有一个常见误解:模型文件放到目录里不等于任务里自动生效。ComfyUI 工作流中,模型是通过节点加载的,不是自动全局替换。排查时按“文件目录检查 -> 节点参数检查 -> 输出结果检查”的顺序来,效率更高。

9. 最佳实践与使用建议

9.1 先小后大,先单后批

第一次切换模型,不要直接跑大规模批量任务。先单张测试,再 4 张对比,再小批量 10 到 20 张,确认稳定后再扩大。

批量任务建议加日志和失败重试机制。在脚本里记录每个任务的 prompt_id、提交时间、结果文件名、失败原因,这样后续排查和维护会轻松很多。

9.2 模型与素材分目录管理

建议按下面结构组织本地文件:

ComfyUI/ ├── models/ │ ├── checkpoints/ │ │ ├── dagoujiao_v1.safetensors │ │ └── sishenyilian_v1.safetensors ├── input/ │ └── comparison/ # 对比测试素材 ├── output/ │ ├── dagoujiao/ │ └── sishenyilian/ └── workflow_backup/ # 工作流 JSON 备份

工作流 JSON 是易丢失的部分。改完参数、确认稳定之后,第一时间导出并备份,避免后面改乱时无法回退。

9.3 保留最小可运行配置

当找到一个能稳定出图的参数组合后,单独保存一份最小工作流。这份工作流不包含多余的放大节点、ControlNet 节点,只保留模型加载、提示词、采样、保存图。之后需要排查问题时,先用最小工作流跑,能快速区分是模型问题、参数问题还是节点链路问题。

9.4 API 服务安全建议

如果启动了 API 服务用于批量任务,建议只在本地使用。不要让服务监听在公网地址上,否则任何能访问该端口的人都可以向你的显卡提交生成任务。更稳妥的方式是搭配反向代理和访问认证,或者只在需要时才临时打开服务。

9.5 合规与版权提示

  • “大狗叫”“死神遗镰”作为示例模型名,实际使用前确认模型本身允许本地使用和再加工。
  • 不要把模型用在冒名、诈骗、伪造内容等场景。
  • 如果生成结果用于公开或商用,检查模型授权协议,必要时标注模型来源。
  • 图片中如果涉及可识别人物,发布和商用前需要获得授权。

10. 总结与下一步

这次模型替换的核心思路,可以压缩成三个动作:放对文件、换对节点、跑通验证。

最先要验证的功能是 Checkpoint 切换后单张出图是否正常。最容易踩的坑是文件已经放进目录,但工作流节点仍然指向旧模型,导致生成结果没有变化。其次要留意的是提示词适配,直接照搬旧模型提示词很可能会出现风格偏移。

如果这篇文章里的流程你已经跑通,下一步可以从这几个方向继续扩展。一是把批量脚本改成带失败重试和定时任务的形式,提升出图效率。二是尝试在替换 Checkpoint 的同时配合 LoRA,让风格控制更精准。三是把 ComfyUI 的 API 接到自己的管理系统里,实现任务提交、结果回传、素材管理一体化。

模型替换看起来只是换一个文件名,但真正稳定落地,需要把环境、节点、提示词、批量任务和排查能力都准备好。把这套流程保存下来,以后再换其他模型,只需要替换对应文件和分析新模型的输出差异。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询