ComfyUI的安装和基础使用

简介

最近了解了一下 AI 画图,是通过 ComfyUI 工具入门的,这里记录一下该工具的安装和基本使用流程。

本文的内容将涵盖:

  • ComfyUI 的安装
  • ComfyUI 的基本使用
  • LoRA 模型的使用
  • 一些插件推荐
  • 一些教程推荐

我使用的硬件条件:一台通过 AutoDL 私有云访问的 Linux 服务器,单卡 RTX 4090,显存 24 GB,内存 40 GB, 8 个 vCPU。如果采用本文介绍的默认设置,那么估计需要一张至少 8 GB 显存的 NVIDIA 独立显卡。如果需要训练 LoRA,那么显存要求可能更高。

安装

推荐使用 Linux 系统,因为配置环境比较方便,(可能的)性能损失也能控制在最小范围。

本文假设读者对 Git、Linux 系统和 cnoda 包管理器具有基本的了解。如果你在阅读本文时感到吃力,那么建议你使用 ComfyUI 一键包,比如 这个

这是 ComfyUI 的官方 GitHub 仓库:https://github.com/comfyanonymous/ComfyUI

找一个空闲容量足够大(具体多大取决于你之后下载什么模型,建议至少 10 GB)的地方克隆这个仓库:

git clone https://github.com/comfyanonymous/ComfyUI.git

这个仓库本身不包含任何模型,不是很大。模型需要我们后面手动添加。

创建虚拟环境

本文假设你已经正确安装了显卡驱动、CUDA 工具链和 Anaconda(或 Miniconda)。

其实不做虚拟环境管理也是可以的,但是后面我还需要训练 LoRA 模型,经尝试,把 ComfyUI 和 LoRA 训练脚本的依赖混在同一个环境里是比较痛苦的,因此我们还是新建一个虚拟环境来安装 ComfyUI 的依赖。我使用 conda 管理虚拟环境。

创建一个新的虚拟环境:

conda create -n comfyui

Python 使用最新版本即可,目前是 3.12,测试是没有问题的。

安装 PyTorch

PyTorch官网 来查询最新的 PyTorch 的安装命令。这个小工具还是很好用的:

img

由于后面的 requirements.txt 使用了 pip 的 PyTorch包名,故此处推荐使用 pip 来安装 PyTorch。使用 conda 安装也可以,但需要在后面手动修改 requirements.txt,删去此处安装的 3 个包。

  • 如果你使用 conda 安装 PyTorch,且你的系统中安装的 CUDA 工具链版本(可用命令 nvcc -V 查询)与上图中选择的 CUDA 版本不完全匹配,例如系统 CUDA 版本为 12.4,而上面的版本为 12.1,那么你需要安装额外的 cudatoolkit 包,该包的版本应当与 PyTorch 对应的 CUDA 版本保持一致:

    conda install cudatoolkit=12.1
    
  • 如果你使用 pip 安装 PyTorch,那么无需在意 CUDA 版本问题。

(可选)安装完成后,可以在 Python Shell 中执行以下命令,确保 PyTorch 可以正常调用 CUDA。

import torch
print(torch.cuda.is_available())

安装其他依赖

在命令行中切换到之前克隆的 ComfyUI 根目录,并确认当前已经激活了 comfyui 虚拟环境,然后执行

pip install -r requirements.txt

这会自动安装其他的依赖包。

(可选)自己编写一个启动脚本

我为了使用方便编写了一个 start.sh 脚本:

#!/bin/bash

# 设置系统代理
# 根据你的需要调整代理地址即可。
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

# 定义默认参数
extra_args=""

# 检查是否有额外参数
if [ $# -gt 0 ]; then
    # 如果第一个参数是 "cpu",则添加 "--cpu" 参数
    if [ "$1" = "cpu" ]; then
        extra_args="--cpu"
    fi
fi

# 执行 python 命令,附加额外参数
# 此处可根据需要修改端口
python ./main.py --port 6006 $extra_args

unset http_proxy
unset https_proxy

简单的解释:

  • 系统代理:有些 ComfyUI 的插件会连接外部网站如 Civitai 或 GitHub 下载数据,设置一个代理可以确保这些插件正常工作。
  • cpu 参数:ComfyUI 默认会在启动时检查 GPU 的可用性,如果 GPU 不可用则无法正常启动。但为了方便调试,ComfyUI 提供了一个 CPU-only 模式,可以通过向 main.py 传入 --cpu 参数来启动,此时 ComfyUI 会避免调用 GPU。在使用这个脚本时,执行 bash start.sh cpu 即可以 CPU-only 模式启动 ComfyUI。如果不附加 cpu 参数,那么就是默认的模式。
  • 端口:如果你是在本机跑的话,那无所谓,使用任何端口都可以。这里设置为 6006 是因为我使用的私有云服务会将内网的 6006 端口映射到公网,方便访问。

编写了这个脚本之后,使用 bash start.sh 即可启动 ComfyUI,无需再通过 Python 调用 main.py 了。

基本使用

确认目前已经激活了前文创建的虚拟环境。然后执行

python main.py

来启动 ComfyUI。

启动后应当能够看到以下消息:

Starting server

To see the GUI go to: http://127.0.0.1:6006

当然这里的端口可能不太一样。复制链接到浏览器就可以访问 ComfyUI 了。

大概是这个样子的:

我装了一些插件,所以可能会和默认状态有微小的不同。

img

这是一个经典的 Workflow,当你使用默认的 Stable Diffusion 模型并点击右上角的“Queue Prompt”时,会生成一张 512*512 的带有银河图案的瓶子图。

当然,ComfyUI 默认是不带任何模型的,所以我们需要下载一些模型。可以到目前在 AI 画图广受欢迎的 Civitai 网站下载模型。

如果你希望体验默认的 SD 1.5 模型,可以到 https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt 下载它。

我主要是用来画二次元图的,所以会选择一些二次元风格的模型来使用。目前底模里面我见得比较多的就只有 SD1.5 和 SDXL 两种,其中二次元文生图效果最好的应该是 PonyXL 系列模型,这是在 SDXL 的基础上改进得到的一种模型。我用的是这一款:https://civitai.com/models/404154

你可以参考 这篇文章 来做到在命令行中直连下载模型。

SDXL(以及在其基础上发展起来的 PonyXL)因其更大的参数量而比 SD1.5 更耗费显存和算力。但是,8 GB 应该足以跑 SDXL 了。

将下载好的底模(大模型)放置在 ComfyUI/models/checkpoints 目录中,然后点击 ComfyUI 右侧的“Refresh”按钮,之后就可以在最左侧“Load Checkpoint”组件中选择模型了。

选好模型之后,我们来编写提示词。

PonyXL 系列模型在训练时使用了一种质量分级规则,它将训练图像大致分为 10 个等级,每个等级又分为两个子级别。我们使用 score_[数字] 这样的提示词可以引导模型生成对应质量分级的图像。如果我们希望生成高质量图像,可以传入 score_9,score_8_up,score_7_up 这样的正向提示词,同时传入 score_4, score_5, score_6 这样的反向提示词。它们会引导模型更倾向于生成那些它认为“高质量”的图像。

PonyXL 的训练图像比较杂,风格可能涵盖日系动画、欧美动画、furry、3D 动画等。这些图像以提示词 source_[类别] 来区分。如果我们希望得到“正统”的二次元风格,那么我们需要在正向提示词中加入 source_anime(日系动画),并在反向提示词中加入 source_furry, source_pony, source_cartoon,source_filmmaker 来排除所有其他的风格。

其他的一些比较通用的提示词,可以参考 https://www.bilibili.com/read/cv22661198/

我们使用以下正向提示词:

score_9, score_8_up, score_7_up, 1girl, smile, serafuku, looking at viewer, blue eyes, 

和以下反向提示词:

source_furry, source_pony, source_cartoon,source_filmmaker, bad anatomy, extra legs, text,

生成了一张 512*512 的图像:

img

注意到最右侧的 Save Image 组件,它会将传入的图像保存到 ComfyUI/outputs 目录中。如果你在调试提示词时不希望保存图像,那么可以使用 Preview Image 组件。

在空白处右键可以呼出菜单,并在其中添加组件。但更方便的方法是在空白处双击左键,在弹出的搜索框中直接搜索你想要的组件名称,然后点击添加。

注意到右上角的齿轮图标:

img

点击它可以打开 ComfyUI 的设置。我非常推荐使用目前还是 Beta 阶段的新版菜单。新版菜单位于屏幕的顶部或者底部,占用空间更少,UI 也更现代化。

现在,UI 变成了这样:

img

我没有介绍 Stable Diffusion 的原理,以及采样器的各种设置,因为我对它们也不太熟悉。可以通过网上的各种教程来学习它们。

关于 SDXL 模型的推荐分辨率,可以参考:https://www.reddit.com/r/StableDiffusion/comments/15c3rf6/sdxl_resolution_cheat_sheet/

安装插件

ComfyUI 插件的安装流程都差不多:把插件仓库克隆到 ComfyUI/custom_nodes 目录中,然后重启 ComfyUI。如果有些插件需要额外的 Python 依赖,则在克隆之后应当安装它们。

首推的就是 ComfyUI-Manager:https://github.com/ltdrdata/ComfyUI-Manager 是一个集中管理各类插件和模型的工具。

其他我正在使用的插件:

  • extended-saveimage-comfyui:提供一个扩展的保存图像组件,可以将图像保存为 JPEG 或 WEBP 格式,节省空间。
  • ComfyUI-Inspire-Pack:功能挺多的,我主要使用该插件提供的从一个目录中批量读取图像的功能。
  • ComfyUI-Custom-Scripts:同样是一个功能比较多的插件,我主要使用该插件提供的提示词补全和 Image Feed 功能。
  • ComfyUI-Lora-Auto-Trigger-Words:这个插件支持从 Civitai 抓取 LoRA 模型的触发词。

这里介绍一下 ComfyUI-Custom-Scripts 插件的提示词补全功能。安装该插件后,打开 ComfyUI 设置,找到“🐍 Text Autocomplete”这一项,确保勾选“Enabled”来启用它,然后点击“Manage Custom Words”按钮,将弹出以下对话框:

img

插件应当会自带一个提示词列表的链接,直接点击“Load”按钮就可以缓存提示词列表,此后在提示词编辑组件中输入内容就会自动弹出提示词补全了。

LoRA 模型的使用

LoRA 允许我们使用一些体积较小的微调模型来快速获取某个角色的特征或者特定的画风。本节以 这个 模型为例进行说明。

下载模型并放置在 ComfyUI/models/loras 目录中,然后重启或者刷新 ComfyUI。

接下来,简单改动默认的 Workflow,添加一个“Load LoRA”组件,然后进行连线,如下图所示:

img

从模型发布页(或者用插件)获取 LoRA 模型的触发词。对于这个模型而言,触发词可以填 alice cartelet, hair ornament, white collared shirt, cardigan, open cardigan, striped bow, blue pleated skirt, white thighhighs, mary janes,其实最关键的就是角色名 alice cartelet,别的都是可选的。

填写正向提示词。我使用的是:

score_9, score_8_up, 1girl, alice cartelet, from below, looking at viewer, light smile, standing, leaning forward, sunset, cloudy sky, flower, white thighhighs, hair ornament, white collared shirt, cardigan, open cardigan, striped bow, blue pleated skirt, mary janes

填写反向提示词。我使用的是:

score_4, score_5, score_6, low quality, bad anatomy, bad proportions, extra legs, deformed anatomy, messy color, deformed fingers, distracted, hyperrealistic, source_furry, source_pony, source_cartoon,

设置好分辨率、采样器、步数、CFG,然后点右上角的“Queue”按钮即可。

结果如下:

img

如果有需要,可以在 VAE Decode 组件后面加放大组件,使用各类超分辨率模型来放大图像。先用相对低一些的分辨率出图,然后放大到较高分辨率,这是 Stable Diffusion 的通用流程。

ComfyUI 在保存生成的图像时会在 PNG 二进制数据的后面附加额外的元数据,其中描绘了生成这副图像使用的 Workflow 和提示词,可以用 这个工具 解析出来。这个和恋活人物卡有点像,都是利用了 PNG 尾部可以附加数据的特点。但是,如果使插件将图像保存成别的格式,那么元数据可能丢失。

需要特别注意的是,Stable Diffusion 的提示词是有先后顺序的,越靠前的越重要。我的习惯是先写底模的通用提示词,然后写角色名,然后写角色动作表情,然后写外表着装。有时候简单调整提示词的顺序就可以显著改善生成质量。

一些教程和工具推荐

posted @ 2024-08-14 10:42  Eslzzyl  阅读(1428)  评论(1编辑  收藏  举报