这次我们来看一个 ComfyUI 的展示项目,核心目标很直接:利用 ComfyUI 这个强大的节点式 AI 绘画工具,生成以假乱真、难以分辨的“真人”级别图像。对于很多刚接触 AI 绘画的朋友来说,Stable Diffusion WebUI 可能更直观,但 ComfyUI 在流程控制、显存优化和批量任务上有着独特的优势,尤其是在追求极致真实感和复杂工作流时。
这个项目的重点不是概念多复杂,而是能不能在你的电脑上跑起来,以及如何通过一套有效的工作流,从零开始生成一张足以让人惊呼“这是真人吗?”的图片。我们将重点关注 ComfyUI 的本地部署门槛、显存占用、工作流加载方式,以及如何通过调整参数来逼近真实感。如果你关心本地部署、显存优化、工作流复用和批量生成,这篇文章可以直接收藏。
本文会带你完成从零部署 ComfyUI(以流行的秋叶整合包为例),加载一个专门用于生成高真实感人像的工作流,并进行从文生图到图生图的全流程测试。我们会重点关注启动是否顺利、显存占用如何、生成效果是否稳定,以及如何排查常见的端口冲突、模型缺失等问题。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 项目类型 | 基于 ComfyUI 的高真实感人像图像生成工作流展示 |
| 核心工具 | ComfyUI(节点式 Stable Diffusion 图形界面) |
| 主要功能 | 文生图、图生图、高真实感人像生成、参数精细化控制 |
| 推荐硬件 | 支持 CUDA 的 NVIDIA 显卡(如 RTX 3060 12G 或更高),显存建议 8GB 以上。CPU 或低显存显卡(如 4G/6G)可通过优化设置运行,但速度较慢或需降低分辨率。 |
| 显存占用 | 取决于基础模型(大模型)分辨率、采样步数。生成一张 1024x1024 图片,8G 显存通常够用;使用高分辨率修复或复杂 LoRA 时,显存需求会增加。 |
| 支持平台 | Windows(主流)、Linux、macOS(支持 M 系列芯片) |
| 启动方式 | 一键启动(秋叶整合包)、命令行启动、Docker 部署 |
| 是否支持 API | 是,ComfyUI 内置 API 服务器,支持通过 HTTP 请求触发工作流和获取结果。 |
| 是否支持批量任务 | 是,可通过工作流内的“批量加载图像”节点或外部脚本调用 API 实现。 |
| 适合场景 | 本地测试高真实感 AI 绘画、电商模特图生成、角色概念设计、工作流研究与学习、批量素材生产。 |
2. 适用场景与使用边界
这个工具适合谁?
- AI 绘画爱好者与研究者:希望深入理解 Stable Diffusion 生成流程,进行精细化参数调控。
- 内容创作者与设计师:需要快速生成高质量、风格统一的人像素材,用于概念图、插画背景等。
- 电商或自媒体从业者:寻求低成本生成产品模特图或人物素材,但需注意最终用途的合规性。
- 开发者:希望通过 ComfyUI 的 API 将 AI 绘画能力集成到自己的应用或自动化流程中。
能解决什么问题?
- 流程可视化与可复现:将复杂的生成过程拆解为节点,每一步都清晰可见,工作流(json文件)可保存、分享、复用。
- 显存效率优化:节点式架构允许更灵活的内存管理,在一些场景下比 WebUI 更节省显存,适合处理高分辨率或批量任务。
- 生成质量与可控性:通过串联多个模型(如基础模型、VAE、LoRA)、ControlNet 等节点,实现对图像细节、姿态、风格的强控制,从而逼近“真人”效果。
不适合什么场景?
- 追求极致简单点击即用:相比 WebUI 的一键生成,ComfyUI 需要一定的节点连接和理解成本。
- 硬件资源极其有限:如果显卡显存低于 4GB,运行大多数现代大模型会非常吃力,体验不佳。
- 需要即时的、移动端的应用:ComfyUI 主要为本地或服务器部署设计。
版权、隐私与安全边界(必须阅读)
- 肖像权与隐私:生成高度逼真的人像时,应避免生成与真实人物高度相似的肖像,以免侵犯他人肖像权。切勿将生成的图像用于冒充真人、诽谤或欺诈。
- 素材版权:用于图生图的参考图片,务必确保你拥有其版权或已获得明确授权。使用未经授权的明星、网红照片作为参考是高风险行为。
- 合规使用:生成的内容不得用于制作色情、暴力、仇恨言论等违法或违背公序良俗的用途。在将生成图像用于商业发布前,务必进行严格的内容审核。
- 模型授权:使用的大模型、LoRA 等需遵守其开源协议(如 CreativeML OpenRAIL-M),部分模型可能有商业使用限制。
3. 环境准备与前置条件
在开始之前,请确保你的系统满足以下基本条件。我们将以 Windows 系统使用秋叶 ComfyUI 整合包为例进行说明,这是目前对新手最友好的方式。
- 操作系统:Windows 10 或 Windows 11(64位)。macOS 和 Linux 用户可通过官方仓库或 Docker 方式安装。
- Python 环境:整合包已内置,无需单独安装。手动部署需要 Python 3.10 或 3.11。
- 显卡与驱动:
- NVIDIA 显卡:确保已安装最新版的 NVIDIA 显卡驱动。建议安装 CUDA 11.8 或 12.1 版本(整合包通常已包含或自动匹配)。
- AMD 显卡:可使用 DirectML 版本整合包,但性能和兼容性可能不如 CUDA 版本。
- Intel 显卡:支持,但需要特定配置,新手不推荐。
- CPU 模式:无显卡或显存不足时可用,但生成速度极慢,仅用于测试工作流逻辑。
- 磁盘空间:至少准备 20GB 可用空间。其中 ComfyUI 本体约 2-3GB,而模型文件(大模型、VAE、LoRA、ControlNet)是占用大头,一个主流大模型(如 SDXL)可能超过 6GB,建议预留 50GB 以上空间用于存放模型。
- 虚拟内存:如果物理内存(RAM)小于 16GB,建议将系统虚拟内存(页面文件)设置得大一些(例如 16GB-32GB),以防止在处理大图时出现内存不足错误。
- 网络环境:首次启动可能需要下载缺失的节点依赖或模型,需保证网络通畅。部分模型需要从 Hugging Face 等平台下载,请自行确保访问能力。
4. 安装部署与启动方式
我们选择秋叶 ComfyUI 整合包作为演示,因为它集成了常用插件、管理器,并提供了便捷的一键启动脚本。
步骤 1:下载整合包
- 从可靠的来源获取“秋叶 ComfyUI 整合包”最新版(例如 v9.5)。通常是一个压缩包文件。
- 将其解压到一个英文路径的文件夹中,例如
D:\ComfyUI_windows。路径中不要包含中文或特殊字符。
步骤 2:放置模型文件
- ComfyUI 的模型文件默认存放在
ComfyUI_windows\ComfyUI\models目录下。 - 你需要将下载好的大模型(
.safetensors或.ckpt文件)放入models\checkpoints文件夹。 - 将 VAE 文件放入
models\vae。 - 将 LoRA 文件放入
models\loras。 - 将 ControlNet 文件放入
models\controlnet。 - 对于“真人”效果,推荐使用诸如
chilloutmix、realisticVision、majicmix等擅长真实人像的大模型。
步骤 3:一键启动
- 进入解压后的文件夹,找到
启动器或run_nvidia_gpu.bat(对于N卡)文件。 - 双击运行。首次运行会初始化环境,可能需要几分钟。
- 启动成功后,命令行窗口会保持打开,并显示类似
Running on local URL: http://127.0.0.1:8188的信息。
步骤 4:访问 WebUI
- 打开浏览器(推荐 Chrome 或 Edge),在地址栏输入
http://127.0.0.1:8188。 - 如果端口 8188 被占用,启动脚本可能会自动尝试其他端口(如 8189, 8190),请以命令行窗口输出的实际 URL 为准。
- 成功访问后,你将看到 ComfyUI 的节点式编辑界面。
备选启动方式:命令行启动如果你使用的是手动安装的 ComfyUI,可以通过命令行启动:
# 进入 ComfyUI 目录 cd /path/to/ComfyUI # 使用 Python 启动主程序 python main.py --port 8188 # 或使用低显存模式(会牺牲一些速度) python main.py --lowvram --port 81885. 功能测试与效果验证
成功启动并打开 ComfyUI 界面后,我们开始核心的功能测试。目标是加载一个高真实感人像工作流并生成图片。
5.1 加载“真人”工作流
- 获取工作流文件:从社区(如 Civitai、开源社区)下载一个专门为真实人像优化的工作流 JSON 文件。例如,一个可能命名为
realistic_portrait_workflow.json的文件。 - 导入工作流:在 ComfyUI 界面中,点击右侧的
Load(加载)按钮,选择下载好的 JSON 文件。界面会自动加载所有节点和连接。 - 检查节点与模型:加载后,仔细查看工作流中的关键节点:
- Checkpoint Loader:确认它加载的是你已放入
checkpoints文件夹的真实人像大模型(如chilloutmix)。 - VAE Loader:确认 VAE 模型已正确设置或已自动选择。
- CLIP Text Encode:这里是输入正向和反向提示词的地方。
- KSampler:核心采样器,控制采样步数、CFG 等参数。
- Save Image:图片输出节点。
- Checkpoint Loader:确认它加载的是你已放入
5.2 文生图测试
测试目的:验证工作流的基本文生图能力,生成一张基础的真实感人像。
操作步骤:
- 在
CLIP Text Encode (Positive)节点中,输入详细的正向提示词,例如:masterpiece, best quality, photorealistic, 1girl, beautiful detailed face, detailed eyes, professional photography, soft lighting, (high detailed skin:1.2), film grain - 在
CLIP Text Encode (Negative)节点中,输入反向提示词,过滤不良特征:(worst quality, low quality:1.4), (bad anatomy), (inaccurate limb:1.2), bad composition, inaccurate eyes, extra digit, fewer digits, (extra arms:1.2), (deformed fingers:1.2), text, signature, watermark - 在
KSampler节点中,设置基本参数:steps: 20-30(步数越高,细节可能越好,但耗时越长)cfg: 7-9(控制提示词相关性)sampler_name:DPM++ 2M Karras或Euler a(常用采样器)scheduler:karras或normalseed: 可以固定一个数字(如123456)以便复现,或留空随机生成。
- 在
Empty Latent Image节点中,设置初始分辨率,例如width: 512,height: 768。初次测试建议从 512x512 或 512x768 开始。 - 点击界面最右侧的
Queue Prompt按钮开始生成。
预期结果与判断:
- 命令行窗口会显示生成进度。
- 生成完成后,图片会显示在
Save Image节点预览窗口,并自动保存到ComfyUI\output目录。 - 成功标准:生成一张无明显扭曲、崩坏,且具有较高真实感的人像图片。皮肤纹理、光影、发丝细节应较为自然。
- 常见失败:
- 黑图/纯色图:可能是 VAE 未正确加载。检查
VAE Loader节点或在大模型加载节点中尝试切换 VAE。 - 图像扭曲畸形:提示词冲突或 CFG 值过高/过低。调整提示词和 CFG。也可能是分辨率比例过于极端。
- 显存不足报错:降低分辨率、减少批处理大小、启用
--lowvram模式或使用 Tiled VAE 等省显存插件。
- 黑图/纯色图:可能是 VAE 未正确加载。检查
5.3 图生图与细节优化测试
测试目的:验证工作流在图生图模式下的能力,并对生成的人像进行细节精修。
操作步骤:
- 准备参考图:在
Load Image节点上传一张真人照片(确保你有权使用)。这将作为图生图的起点。 - 连接节点:将
Load Image节点的IMAGE输出连接到VAEEncode节点,再将VAEEncode的输出连接到KSampler的latent_image输入。这取代了Empty Latent Image节点。 - 调整降噪强度:在
KSampler节点中,denoise参数控制参考图的影响程度。1.0表示完全重绘,0.5以下则保留更多原图特征。对于真人优化,可以从0.6-0.8开始尝试。 - 使用 ControlNet 增强控制(如果工作流包含):在图生图基础上,可以加入
ControlNet节点(如openpose控制姿态,depth控制景深,canny控制边缘)。将参考图也输入到ControlNet预处理节点,并将其输出连接到KSampler的positive和negative条件输入。 - 高清修复:为了获得更高清细节,可以在
KSampler后接一个Latent Upscale节点放大潜空间图像,再连接一个KSampler (High Res Fix)进行二次细化采样。或者使用Ultimate SD Upscale等插件节点。
预期结果与判断:
- 成功标准:生成的图片在保留参考图大致构图或姿态的基础上,融合了提示词描述的特征,并且画质、真实感相比原图或文生图结果有提升。
- 细节优化:通过调整
denoise、ControlNet权重,可以平衡“像参考图”和“符合提示词”之间的关系。
5.4 LoRA 模型应用测试
测试目的:测试工作流集成特定风格或特征的 LoRA 模型的能力,例如为生成的人像添加特定发型、妆容或艺术风格。
操作步骤:
- 在工作流中找到
LoraLoader节点。如果原始工作流没有,可以从节点菜单中添加。 - 在
LoraLoader节点中,选择你已放入models\loras文件夹的 LoRA 文件(例如detailed_eyes.safetensors)。 - 将
LoraLoader节点的MODEL和CLIP输出,分别连接到Checkpoint Loader下游的MODEL和CLIP输入线路上(通常需要插入一个CLIPTextEncode节点之前)。 - 在正向提示词中加入该 LoRA 的触发词(Trigger Word),例如
,。触发词通常在 LoRA 发布页有说明。 - 调整
LoraLoader节点的strength_model和strength_clip(通常设为相同的值,如 0.8),控制 LoRA 的影响强度。
预期结果与判断:
- 成功标准:生成的人像明显带有 LoRA 模型所定义的特定特征(如蓝色瞳孔、某种画风),且与整体图像融合自然,不显突兀。
- 强度控制:
strength值过高可能导致图像扭曲或过度风格化,需反复调试找到最佳值。
6. 接口 API 与批量任务
ComfyUI 的强大之处在于其无头(Headless)API 能力,可以轻松集成到自动化脚本中。
6.1 启动 API 服务器
默认情况下,通过启动器或python main.py启动时,WebUI 和 API 服务器是同时运行的。API 地址通常为http://127.0.0.1:8188。
6.2 通过 API 执行工作流
首先,你需要获取当前工作流的 JSON 定义。
- 在 ComfyUI WebUI 中,调整好所有参数。
- 点击右侧菜单的
Save (API Format)按钮,这将下载一个workflow_api.json文件。这个文件包含了所有节点的参数和连接信息。
接下来,使用 Python 脚本调用 API:
import requests import json import io from PIL import Image # ComfyUI 服务器地址 server_address = "http://127.0.0.1:8188" # 1. 加载工作流 API JSON 文件 with open("workflow_api.json", "r", encoding="utf-8") as f: workflow_api = json.load(f) # 2. 准备 API 请求负载 # 注意:prompt 字段就是整个工作流的定义 prompt_data = workflow_api # 你可以在这里动态修改 prompt_data 中的某些节点参数,例如种子、提示词 # 例如,找到 CLIP Text Encode 节点的输入文本并修改 # 这需要你了解工作流 JSON 的结构。 # 3. 提交生成请求 api_endpoint = f"{server_address}/prompt" response = requests.post(api_endpoint, json={"prompt": prompt_data}) response_data = response.json() # 获取本次执行的 prompt_id prompt_id = response_data['prompt_id'] print(f"Prompt ID: {prompt_id}") # 4. 轮询或通过 WebSocket 获取结果(这里使用简单轮询) # 更推荐使用 ComfyUI 提供的客户端库或 WebSocket 方式 history_endpoint = f"{server_address}/history" import time while True: time.sleep(1) # 每秒查询一次 history_response = requests.get(history_endpoint) history_data = history_response.json() if prompt_id in history_data: images_output = history_data[prompt_id]['outputs'] for node_id in images_output: for image_info in images_output[node_id]['images']: filename = image_info['filename'] subfolder = image_info.get('subfolder', '') # 5. 下载生成的图片 image_url = f"{server_address}/view?filename={filename}&subfolder={subfolder}&type=output" image_response = requests.get(image_url) image = Image.open(io.BytesIO(image_response.content)) image.save(f"output_{filename}") print(f"Image saved: output_{filename}") break6.3 批量任务处理
基于 API,实现批量任务非常简单:
- 批量提示词:在循环中,每次调用 API 前,修改
prompt_data中对应文本节点的text字段,替换为不同的提示词。 - 批量图片:对于图生图,可以将
Load Image节点的image参数替换为不同的 Base64 编码图片数据。更高效的方式是使用LoadImageBatch节点(需安装对应插件)。 - 目录监控:可以编写一个脚本,监控一个输入目录,每当有新图片放入,就自动触发一次图生图流程,并将结果保存到输出目录。
- 队列管理:ComfyUI 的
/prompt接口本身支持队列,连续提交多个任务会自动排队执行。注意监控服务器资源,避免队列过长导致显存溢出。
7. 资源占用与性能观察
了解资源占用是稳定运行的关键。
观察方法:
- Windows 任务管理器:打开“性能”选项卡,查看 GPU 显存使用情况、GPU 利用率以及 CPU/内存占用。
- NVIDIA-SMI:在命令行输入
nvidia-smi,可以更详细地查看每个进程的显存占用。 - ComfyUI 命令行窗口:生成过程中会打印进度和潜在错误信息。
影响因素与优化建议:
- 分辨率:这是影响显存占用的最大因素。将
Empty Latent Image的宽高从 1024x1024 降至 512x512,显存占用可能减少一半以上。建议从低分辨率开始测试。 - 批处理大小:在
Empty Latent Image节点中,batch_size大于 1 会一次性生成多张图,显存占用线性增加。除非必要,建议设为 1。 - 模型大小:SD1.5 模型(约 2GB)比 SDXL 模型(约 6GB)显存占用小。选择适合你硬件的基础模型。
- ControlNet 与 LoRA:每增加一个 ControlNet 或 LoRA 节点,都会增加显存开销。同时使用多个时需特别注意。
- 高清修复与放大:
Latent Upscale和二次采样会显著增加显存和耗时。可以考虑在生成低分辨率满意结果后,使用外部工具(如 Real-ESRGAN)进行后期放大。 --lowvram模式:在启动命令中加入此参数,会以时间换空间,降低峰值显存占用,适合显存紧张的显卡。- 使用 CPU 卸载:一些插件(如
ComfyUI-Impact-Pack)支持将部分模块(如 VAE 解码)卸载到 CPU 运行,能有效降低显存峰值。
典型场景估算(仅供参考,实际以测试为准):
- RTX 3060 12GB:运行 SD1.5 模型,生成 512x768 图像,显存占用约 3-4GB;开启一个 ControlNet,可能增至 5-6GB;进行 2x 高清修复,可能接近或超过 10GB。
- RTX 4060 8GB:运行 SD1.5 模型,生成 512x512 图像通常无压力;尝试 768x768 或开启复杂工作流时需谨慎,建议启用
--lowvram。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
启动后浏览器打不开127.0.0.1:8188 | 1. 端口被占用。 2. 服务未成功启动。 | 1. 查看命令行窗口是否有错误信息。 2. 在命令行输入 netstat -ano | findstr :8188查看端口占用。 | 1. 关闭占用端口的进程,或修改启动脚本中的--port参数为其他端口(如 8189)。2. 根据命令行错误信息解决,常见如 Python 包缺失。 |
| 加载工作流时提示节点缺失 | 工作流使用了未安装的自定义节点。 | 查看命令行窗口或 WebUI 弹出的错误提示,确认缺失的节点名称。 | 1. 通过 ComfyUI 管理器(如果整合包包含)安装缺失节点。 2. 手动从 GitHub 下载节点插件,放入 ComfyUI\custom_nodes文件夹后重启。 |
生成图片时提示CUDA out of memory | 显存不足。 | 观察任务管理器中 GPU 显存使用情况。 | 1.立即措施:降低生成分辨率、减少batch_size、关闭其他占用 GPU 的程序。2.启动参数:添加 --lowvram或--medvram。3.工作流优化:使用 Tiled VAE、CPU 卸载等省显存节点。 |
| 生成的图片全黑或全是噪点 | 1. VAE 未正确加载或损坏。 2. 模型文件损坏。 3. 采样器或调度器设置极端。 | 1. 检查VAE Loader节点设置,尝试切换其他 VAE 或使用“自动”。2. 重新下载模型文件,检查哈希值。 3. 恢复采样器为 Euler a,调度器为normal,CFG 设为 7。 | 1. 确保 VAE 文件已放入正确目录且完整。 2. 使用可靠的模型下载源。 3. 使用默认参数测试,再逐步调整。 |
| 图生图效果毫无变化 | denoise参数设置过低(接近 0)。 | 检查KSampler节点的denoise值。 | 将denoise值提高到 0.6 以上,观察变化。 |
| LoRA 效果不明显或过强 | strength权重设置不当。 | 检查LoraLoader节点的strength_model和strength_clip值。 | 从 0.5-0.8 的范围开始调整,并确保提示词中包含正确的触发词。 |
| API 调用返回错误或超时 | 1. 工作流 JSON 格式错误。 2. 服务器未就绪或任务队列堵塞。 3. 请求超时时间太短。 | 1. 检查workflow_api.json文件是否完整。2. 查看 ComfyUI 命令行窗口是否有错误。 3. 增加 requests 的 timeout参数。 | 1. 使用 WebUI 的Save (API Format)功能确保 JSON 正确。2. 重启 ComfyUI 服务。 3. 对于长任务,设置 timeout=None或一个较大的值(如 300)。 |
| 整合包启动器闪退 | 1. 路径包含中文或特殊字符。 2. 系统虚拟内存不足。 3. 显卡驱动不兼容。 | 1. 检查解压路径。 2. 查看系统事件查看器中的错误日志。 3. 更新显卡驱动。 | 1. 将整合包移动到纯英文路径。 2. 增加系统虚拟内存(页面文件)大小。 3. 安装 NVIDIA Studio 驱动或最新 Game Ready 驱动。 |
9. 最佳实践与使用建议
为了获得稳定、高效的“真人”图像生成体验,遵循以下实践建议:
- 从小开始,逐步迭代:首次测试新工作流或模型时,务必从低分辨率(如 512x512)、低步数(20步)、默认采样器开始。成功后再逐步提高分辨率、步数,添加 ControlNet、LoRA 等复杂节点。
- 建立项目文件夹结构:规范目录管理,避免混乱。
Your_Project/ ├── workflows/ # 存放不同的工作流 JSON 文件 ├── inputs/ # 存放图生图的源图片 ├── outputs/ # ComfyUI 默认输出目录,可按日期或项目建立子文件夹 ├── models/ # 模型库(可软链接到 ComfyUI 的 models 目录) └── scripts/ # 存放批量处理的 Python 脚本 - 善用“队列”和“历史”:ComfyUI 界面可以连续提交多个任务到队列。利用
Save (API Format)保存成功的工作流配置。历史记录可以帮助你回溯和复现好的生成结果。 - 提示词工程:对于真实感人像,提示词需要细致。描述肤色(
pale skin,tanned skin)、光照(studio lighting,sunlight)、细节(detailed pupils,fine hair)等。反向提示词务必包含常见的低质量标签。 - 参数备份:当得到一组满意的参数(模型、提示词、采样器、CFG、种子、LoRA强度等)时,及时保存工作流文件,或在笔记中记录关键参数。
- 合规与伦理审查:在将任何生成图像用于公开或商业用途前,进行人工审查。确保图像内容安全,不侵犯他人权益,不违反平台政策。对于高度逼真的人像,考虑添加水印或说明其为 AI 生成。
- 性能监控:在长时间进行批量任务时,监控 GPU 温度和显存占用,避免硬件过热或系统不稳定。
通过 ComfyUI 生成以假乱真的“真人”图像,是一个结合了工具使用、参数调试和艺术感觉的过程。秋叶整合包大大降低了入门门槛,而节点式的工作流让你能清晰地掌控每一个生成环节。从加载一个现成的工作流开始,理解每个节点的作用,然后尝试修改参数、替换模型、添加控制网络,最终打造出属于你自己的高真实感图像生成管线。记住,关键不是追求一次成功,而是在迭代中积累经验,在控制中实现创意。