模型:gemini、core、reduxe,

在ComfyUI中使用

1. 下载模型文件

  1. FLUX.1-dev,下载 flux1-dev.safetensorae.safetensors ,模型文件放置路径: ComfyUI_windows_portable\ComfyUI\models\unet,ae文件放置路径:ComfyUI_windows_portable\ComfyUI\models\vae

  2. Clip文件, 下载 clip_l.safetensorst5xxl_fp16.safetensors(对显存要求高)t5xxl_fp8_e4m3fn.safetensors,放置路径:ComfyUI_windows_portable\ComfyUI\models\clip

2. 工作流

简单工作流例子

一个工作流形式的AI作图UI工具。地址

1. 模型文件路径设置

模型文件的放置路径为 ComfyUI\models。如果同时有使用SDWebUI,可以通过设置extra_model_paths.yaml文件,写上SDWebUI的路径,便可以使得ComfyUI能够使用在SDWebUI目录下的模型文件。如:
ComfyUI_Model_Path.png
设置完后要去掉文件.example后缀将文件名变更为extra_model_paths.yaml才能生效。

2. 添加本地局域网访问

在启动文件的最后添加参数 –listen 运行机器的IP,如下:
images/ComfyUI_LocalNet.png

3. 节点

ComfyUI是一个专业的节点式的操作界面,通过将不同功能的节点单元联通起来,组合出实现某种功能的工作流。节点组合遵循以下原则:

  1. 节点的输出端口可以同时输出到多个其他节点
  2. 节点的输入端口只能接受一个输入来源
  3. 输出输入端口颜色匹配才能连通

4. 自定义节点

相当于SDWebUI的扩展插件。自定义节点的安装目录为 ComfyUI\custom_nodes,可以直接将节点库直接放在这里。通常只用这种方法来安装 ComfyUI Manager,重启之后,便可以使用 ComfyUI Manager 来安装其他自定义节点了。

1
2
// \ComfyUI\custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

5. 实用的自定义节点:

  1. ComfyUI-Custom-Scripts - promte自动补全:下载安装后在设置中启用,并且点击 Manage Custom Word 下载补全词列表,即可使用。
    CustomNode_pyssss.png
  2. ComfyUI_Custom_Nodes_AlekPet:提示词自动翻译节点与其他多种节点。可以用带翻译的 text encode 节点替代原来的 text encode 节点。
  3. prompt-all-in-one:提示词书写插件,非节点插件,安装后会在UI界面看到一个悬浮按钮。
  4. Tagger:根据图片反推提示词。推理模型因网络原因无法自动下载的话,就去主动下载。下载.onnx、.csv后缀的文件,重命名即可。
  5. 自动负面提示词:enhancegegative调到1,连接到负面提示词框就可以。
  6. 节点对齐
  7. 节点包
  8. 效率节点包

操作

  1. Ctrl + G:给选中的节点添加到组
  2. Alt + C:折叠、展开选中的节点
  3. P:固定选中的节点或节点组

1. Hires.fix(高清修复)

固定好图片种子值和其他各种参数之后,可以开启Hires.fix,为图片添加更多的细节。

  • 放大算法:很多时候,各种放大算法肉眼观察起来区别并不大。这里建议真实风格用R-ESRGAN 4x+二次元风格用R-ESRGAN 4x+Anime6B
  • 重绘幅度(Denoising):太大图片会变形较大,太小会出现边缘模糊,安全区间一般为0.3~0.5

1. Hires.fix(高清修复)

固定好图片种子值和其他各种参数之后,可以开启Hires.fix,为图片添加更多的细节。

  • 放大算法:很多时候,各种放大算法肉眼观察起来区别并不大。这里建议真实风格用R-ESRGAN 4x+二次元风格用R-ESRGAN 4x+Anime6B
  • 重绘幅度(Denoising):太大图片会变形较大,太小会出现边缘模糊,安全区间一般为0.3~0.5

2. SD upscale

利用图生图里的SD upscale脚本对图片进行放大和细节优化,与Hires.fix相比,对现显存要求没那么高。放大算法的选择、重绘幅度的大小,和Hires.fix的理念一致。

  • 图块重叠的像素(Tile overlap):SD upscale放大图片的本质是将图片切成若干块后重绘,再拼接在一起,为了拼接自然,会有拼接带的缓冲重叠带。默认是64像素。注意:需要在调整分辨率里加上重叠像素,再去进行放大绘制。
    SD Upscale
    如上所示,原图的分辨率是512*512,用SD Upscale放大两倍,图块重叠的像素(Tile overlap)设置为64时,需要将分辨率调整成576*576。

3. 附加功能的简单放大

这就是一个重绘幅度为0的图片放大,完全不改变图片内容,不会为图片添加任何细节,只是单纯的放大,所以效果不太明显。可以在做出满意的图片后,对图片进行后期处理的时候进行放大。

4. 局部重绘&手绘修正

圈定蒙版区域或者添加手绘草稿后,需要添加加权重的提示词用于描述重绘或者修正,如(close eye:1.2)

1. 二次元模型

  1. Counterfeit-V3.0

常用embeddings

1. 解决二次元风格的图像错误负面embeddings
  1. easynegative
  2. badhandv4:embedding:badhandv4
  3. negative_hand
    2. 解决真实风格的图像错误负面embeddings
  4. Deep Negative V1.x
    3. 角色设计三视图
    CharTurner - Character Turnaround helper for 1.5 AND 2.1!

常用hypernetworks

  1. 迷你风格:LamaPanama Waven Chibi Style

ControlNet模型

  1. ControlNet 1.1 Models
  • OpenPose:身体姿势、手指姿势、面部表情刻画。
  • Depth:刻画具有深度的场景,Depth Leres++这个预处理器效果最好。对于具有深度的任务姿势,openpose很多时候会没有办法很好的还原,这时候就用这个。
  • Canny边缘检测:能够精准还原要刻画的场景。
  • Soft Edge柔和边缘检测:相比Canny更加粗糙一些,Canny更注重细节,Soft Edge更加注重整体轮廓,让AI更具有自由度。
  • Scribble涂鸦:让AI非常有创意地根据传入图片去创作。

用已有的图片作为参考,生成类似的图片。图片只是一个参考,必须配合文字描述来约束。

1. 提示词反推

DeepbooruClip 两种由图像反推提示词的算法。Deepbooru相对来说更具优势。
Deebooru_Clip

提示词

1. 提示词权重分配

小括号加数字可以分配提示词的权重比例。

  • (white flower:1.2):权重增强为原来的1.2倍
  • (white flower:0.8):权重减弱为原来的0.8倍

采样

1. 采样迭代步数(Steps)

迭代数越高,生成的图像就越可能更接近描述,但所需时间就越长,也并不是越高就越好,会有边际递减效应,通常25~35便可以,综合效果最优。

2. 采样方法(Sampling method)

不同的采样方法,适合不同的风格效果;有些模型会注明适合的采样方法,照着选就好。
一般来说,Euler a适合插画;DPM 2M出图速度快;SDE细节较为丰富。推荐使用带有+号的采样方法,这是改进过的算法。

一般采取如这样的组合:

  • 采样器(Sampler):DPM++ 2M SDE,噪声调度器类型(Schedule type):Karras
  • 采样器(Sampler):Euler a,噪声调度器类型(Schedule type):normal

3. 提示词相关性(CFG Scale)

图像与提示语的一致程度,越低的值产生越有创意的结果。一般设置为7~12即可。

4. 降噪强度(Denoise)

在Tetx2Text中默认为1。在ImageToImage中,越低越接近原图。

分辨率(Width、Height)

生成图像的大小。一般使用默认尺寸512*512来生成图像就可以,这样速度最快、效果最好。确定图像成品后,再用高分辨率修复(Hires.fix)调整到目标尺寸大小。

生成批次、每批数量(Batch count、 Batch size)

两者的积便是每次生成的图像数量。一般调高生成批次的值来使得每次生成图片更多,每批数量的值设置为1即可,太大会占用太多显存。

地址

1. .ckpt文件(CheckPoint) 和 .safetensors文件

都是用来保存模型权重和参数的文件。模型文件的放置位置:\stable-diffusion-webui\models\Stable-diffusion

.ckpt 文件是用 pickle 序列化的,可能包含恶意代码。

.safetensors 文件是用 numpy 保存的,这只包含张量数据,没有任何代码,加载 .safetensors 文件更安全和快速。

如今模型文件基本都是.safetensors。

将 .ckpt 文件转换为 .safetensors 文件,你需要先加载 .ckpt 文件中的数据,然后用 numpy 保存为 .safetensors 文件。

模型文件的名称,组成词有不同的含义,如一个模型文件为“v1-5-pruned-emaonly.safetensors”,则:

  • pruned是一种剪枝技术,可以减少模型体积,提高运行速度。
  • emaonly是一种指定模型文件只包含指数移动平均权重(EMA)的标识。可以降低显存占用。

2. .vae.pt文件

VAE最主要影响画面的色彩质感,所以可以理解成为调色滤镜

放置位置\stable-diffusion-webui\models\VAE

使用方法::Settings → Stable Diffusion → SD VAE,选择所需要的VAE。

用来保存变分自编码器(VAE)的权重和参数的文件,VAE 是一种生成模型,可以用来对图像进行编码和解码。VAE 的为 Stable-diffusion 的模型提供:

  1. 低维的隐空间,可以在这个空间中控制图像的风格和特征。
  2. 初始化的图像,可以在这个图像的基础上进行细化和改进。
  3. 颜色校正的功能,可以让生成的图像更加鲜艳或者柔和。

很多模型本身就包含有VAE,不用额外加载。也有适合于多种模型的VAE。

如果模型有VAE文件,最好要加载VAE文件。

3. embeddings

嵌入式向量,一般都用于广泛、容错率高的概念和含义集合。可对于具体的形象和概念,Lora表现更出色。

放置位置stable-diffusion-webui\embeddings

使用方法:按模型说明输入触发词即可。

embeddings模型是一种用于生成图片的语言理解组件,接受文本提示并产生token embeddings。

embeddings模型可以与编码器和解码器配合使用,通过余弦距离比较编码后的embeddings和目标图片的相似性,从而优化生成图片的质量。

embeddings模型有多种不同的训练方法,例如Textual Inversion、Hypernetwork、Dreambooth 和 LoRA,它们各有优劣和适用场景。

4.LoRA

向AI传递、描述一个准确、具体清晰的形象或者概念。要强化某个形象或者概念的时候,可以多个Lora在一起混合使用。

  • 衣服类的LoRa权重不要太高。

放置位置stable-diffusion-webui\models\Lora
使用方法以<lora:triggerWord:0.8>触发,小数部分表示权重。lora模型说明里或许会有各种各样的触发词,照着说明使用即可。

LoRA是一种用于大语言模型的低秩逼近(Low-Rank Approximation)技术,可以减少参数量和计算量,提高训练效率和生成质量。

LoRA也可以用于Stable-diffusion中的交叉关注层(cross-attention layers),从而改善用文字生成图片的效果。

LoRA模型的个头都比较小,常见的都是144MB左右,使用的时候要与精简版(prund)的Stable Diffusion1.5模型配合使用。

5. ControlNet

ControlNet根据一些额外信息控制扩散的生成走向,微调扩散模型,可以有很广泛的应用(例如控制姿势)。地址。注意下载ControlNet模型的时候,还需下载其yaml配置文件。

6. hypernetworks .pt

用于改变图像的整体风格,也就是画风。前很多时候,可以被LoRa和embeddings取代。

放置位置stable-diffusion-webui\models\hypernetworks

使用方法设置 => Stable Difusion => 附加网络 => 将超网络(Hypernetwork) 添加到提示词。至此便可以了,不需要手动再输入提示词。

hypernetworks .pt 文件是用来保存超网络(hypernetworks)的权重和参数的,超网络是一种可以生成其他网络权重的网络。超网络的特点是:

  1. 可以用来对 Stable-diffusion 的模型进行文本反演(textual inversion),即根据自己的图片训练一个小部分的神经网络,然后用这个结果来生成新的图片。
  2. 可以用来对 Stable-diffusion 的模型进行风格迁移(style transfer),即根据自己的图片或者其他模型生成一个新的权重,然后用这个权重来改变生成图片的风格。

1. remember

用于存储短暂数据的 Compose 状态管理器。
生命周期与组件相关联。组件被重新创建时,remember 中存储的数据会丢失。

1
2
3
4
5
6
7
8
// 声明状态组合。方式1(通常用这种方式):
var stateV by remember { mutableStateOf(1) }

// 声明状态组合。方式2:
val state = remember { mutableStateOf(1) }

// 声明状态组合。方式3:
val (stateV, setStateV) = remember { mutableStateOf(1) }

Jetpack Compose 会根据状态的变化重新绘制 UI。当状态变化时,Compose 会重新执行 composable 函数,并生成新的 UI。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var result by remember { mutableStateOf(1) }
val imageResource = when (result) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
Column (
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
contentDescription = "dice",
contentScale = ContentScale.Crop,
painter = painterResource(imageResource)
)
Button(onClick = {
// 点击事件
result = (1..6).random()
}) {
Text("Button")
}
}

1. 使用 ?: Elvis 运算符

1
2
3
// 如果该变量不为 null,则执行 ?: Elvis 运算符之前的表达式;
// 如果变量为 null,则执行 ?: Elvis 运算符之后的表达式
val v = var1?.a ?: defaultValue