DarkPrompts 插件完整使用教程
1. 插件简介
DarkPrompts 是一个专门为 ComfyUI 设计的智能提示词生成工具包。这个插件的核心功能是从文件和文本输入中读取内容,智能组合它们,并根据种子值随机选择内容来生成提示词。
GitHub 原地址:https://github.com/darkpixel/darkprompts
这个插件就像一个超级智能的"抽签机器",你可以把各种描述词条放进不同的"抽签盒子"里,然后让它帮你随机组合出各种有趣的提示词。比如你有一个装满"动作"的盒子(走路、跑步、游泳),一个装满"物品"的盒子(帽子、包包、眼镜),它就能帮你随机组合出"戴帽子走路"、"背包包游泳"这样的描述。
最棒的是,它会在每次生成图片后重新读取你的文件,这意味着你可以随时修改你的词条文件,不用重启 ComfyUI 就能立即生效!
2. 如何安装
方法一:通过 ComfyUI Manager(推荐)
- 打开 ComfyUI Manager
- 在插件列表中搜索 "DarkPrompts"
- 点击安装,然后重启 ComfyUI
方法二:手动安装
- 找到你的 ComfyUI 安装目录
- 进入
custom_nodes文件夹 - 在命令行中运行:
git clone https://github.com/darkpixel/darkprompts.git - 重启 ComfyUI
3. 节点详细解析
3.1 DarkPrompt 节点
这是整个插件的核心节点,就像一个智能的"词条抽取机"。它可以从文本文件或者直接输入的文本中随机选择内容,然后加上你设定的前缀和后缀,生成完整的提示词。
3.2 DarkPrompt 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 文件路径 | file_path | 文件路径字符串 | 空或具体路径 | 告诉节点去哪个文件里找词条,就像告诉它去哪个抽签盒子里抽签 | 指定要读取的文本文件路径,每行一个词条 | 填入"activities.txt",文件里写"走路\n跑步\n游泳" |
| 文本输入 | text_input | 多行文本 | 空或直接输入词条 | 直接在这里写词条,不用单独建文件,就像直接把纸条放进抽签盒 | 直接在节点中输入文本内容,每行一个选项 | 直接输入"红色\n蓝色\n绿色" |
| 前缀 | prefix | 文本字符串 | 空或"(" | 在抽到的词条前面加什么内容,就像给词条穿个"外套" | 在随机选择的内容前添加的固定文本 | 输入"(",抽到"走路"就变成"(走路" |
| 后缀 | suffix | 文本字符串 | 空或":1.2)" | 在抽到的词条后面加什么内容,就像给词条戴个"帽子" | 在随机选择的内容后添加的固定文本 | 输入":1.2)",配合前缀就变成"(走路:1.2)" |
| 种子值 | seed | 整数 | 0 | 控制随机性的"魔法数字",同样的数字总是抽到同样的结果 | 控制随机选择的种子值,相同种子产生相同结果 | 设为123,每次运行都会抽到同样的词条 |
| 启用概率 | enable_chance | 0.0-1.0 | 1.0 | 控制这个抽签盒是否参与抽签的概率,1.0表示一定参与,0.5表示一半概率参与 | 控制节点是否输出内容的概率,1.0表示总是输出 | 设为0.7,意味着70%的时候会输出词条,30%的时候什么都不输出 |
| 去除注释 | strip_comments | 布尔值 | true | 是否忽略文件中#开头的注释行,就像过滤掉废纸条 | 是否过滤掉以#开头的注释行 | 开启后,文件中"#这是注释"这样的行会被忽略 |
| 去除空行 | strip_blank_lines | 布尔值 | true | 是否忽略文件中的空行,就像过滤掉空白纸条 | 是否过滤掉空白行 | 开启后,文件中的空行不会被选中 |
3.3 DarkCombiner 节点
这个节点就像一个"文字拼接器",可以把多个不同来源的文本串联起来,最多支持7个输入。
3.4 DarkCombiner 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 输入1 | input1 | 文本字符串 | 空 | 第一个要拼接的文本内容 | 第一个文本输入 | 输入"美丽的女孩" |
| 输入2 | input2 | 文本字符串 | 空 | 第二个要拼接的文本内容 | 第二个文本输入 | 输入"在公园里" |
| 输入3 | input3 | 文本字符串 | 空 | 第三个要拼接的文本内容 | 第三个文本输入 | 输入"看书" |
| 输入4 | input4 | 文本字符串 | 空 | 第四个要拼接的文本内容 | 第四个文本输入 | 输入"阳光明媚" |
| 输入5 | input5 | 文本字符串 | 空 | 第五个要拼接的文本内容 | 第五个文本输入 | 输入"微笑" |
| 输入6 | input6 | 文本字符串 | 空 | 第六个要拼接的文本内容 | 第六个文本输入 | 输入"长发飘飘" |
| 输入7 | input7 | 文本字符串 | 空 | 第七个要拼接的文本内容 | 第七个文本输入 | 输入"穿白裙" |
| 分隔符 | delimiter | 文本字符串 | "\n" | 用什么符号来分隔每个输入的内容,就像用什么"胶水"把它们粘在一起 | 用于分隔各个输入文本的字符 | 用", "分隔,结果就是"美丽的女孩, 在公园里, 看书" |
3.5 DarkLoraTagLoader 节点
这个节点是专门用来处理 LoRA 模型的"智能识别器",它能从文本中自动识别出 LoRA 标签并加载对应的模型。
3.6 DarkLoraTagLoader 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 文本输入 | text | 文本字符串 | 空 | 要分析的文本内容,从中找出LoRA标签 | 输入要解析LoRA标签的文本 | 输入"lora:anime_style:0.8 beautiful girl" |
| LoRA权重调整 | lora_weight | 浮点数 | 1.0 | 调整LoRA效果的强度,就像调节音量大小 | 调整LoRA模型的影响强度 | 设为0.8表示使用80%的LoRA效果 |
| 输出堆栈 | output_stack | 布尔值 | true | 是否输出LoRA堆栈,用于高级功能如XY Plot | 是否输出LoRA_STACK格式的数据 | 开启后可以配合Efficient Loader使用 |
3.7 DarkFaceIndexShuffle 节点
这个节点专门用来随机排列面部索引,配合换脸功能使用,就像一个"人脸洗牌器"。
3.8 DarkFaceIndexShuffle 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 面部索引列表 | face_indices | 文本字符串 | "0,1,2,3,4,5" | 要打乱的面部编号列表,就像一副要洗牌的扑克牌 | 输入要随机排列的面部索引 | 输入"0,1,2,3",可能输出"2,0,3,1" |
| 种子值 | seed | 整数 | 0 | 控制洗牌结果的"魔法数字",同样的数字总是得到同样的洗牌结果 | 控制随机排列的种子值 | 设为456,每次都会得到相同的排列结果 |
3.9 AnyToString 节点
这是一个万能的"格式转换器",可以把任何数据类型转换成文本格式。
3.10 AnyToString 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 任意输入 | input | 任意类型 | 空 | 接收任何类型的数据,然后转换成文字 | 接收任意数据类型并转换为字符串 | 输入数字123,输出文本"123" |
3.11 DarkCheckpointRandomizer 节点
这个节点是一个"模型轮换器",可以从你提供的模型列表中随机选择一个,并且可以设置使用多少次后再换下一个。
3.12 DarkCheckpointRandomizer 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 模型列表 | checkpoint_list | 多行文本 | 空 | 要轮换使用的模型文件名列表,每行一个 | 输入checkpoint文件名列表 | 输入"model1.safetensors\nmodel2.safetensors" |
| 使用次数 | use_for_iterations | 整数 | 1 | 每个模型要连续使用多少次才换下一个,就像每个演员要演几场戏 | 每个checkpoint连续使用的次数 | 设为5,表示选中的模型会连续用5次 |
| 种子值 | seed | 整数 | 0 | 控制模型选择的"魔法数字" | 控制随机选择的种子值 | 设为789,每次都会选择相同的模型 |
3.13 DarkFolder 节点
这是一个智能的"文件夹管理器",可以根据文件数量自动创建和管理保存图片的文件夹。
3.14 DarkFolder 参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 前缀 | prefix | 文本字符串 | "batch-" | 文件夹名字的开头部分,就像给文件夹起个"姓氏" | 文件夹名称的前缀 | 设为"my_images-",文件夹就叫"my_images-0" |
| 文件夹大小 | folder_size | 整数 | 50 | 每个文件夹最多放多少张图片,就像每个盒子最多装多少个苹果 | 每个文件夹的最大文件数量 | 设为100,每个文件夹最多放100张图 |
| 选择方法 | selection_method | 选择项 | "Highest Not Full" | 选择文件夹的策略,有三种方式可选 | 选择文件夹的算法策略 | 选择"Fill Gaps"会优先填满有空位的文件夹 |
选择方法的三个选项:
- Fill Gaps(填空策略):优先往还没满的文件夹里放图片,就像先把半满的盒子装满再开新盒子
- Highest Not Full(最高未满策略):总是往编号最大但还没满的文件夹里放图片
- New Every Generation(每次新建策略):每次生成都创建新文件夹,不管文件夹大小设置
4. 使用技巧和建议
4.1 制作词条文件的小技巧
- 分类整理:把不同类型的词条放在不同文件里,比如
colors.txt、actions.txt、objects.txt - 使用注释:在文件里用
#开头写注释,方便记忆每个词条的用途 - 权重技巧:配合前缀后缀功能,可以这样使用:
- 前缀设为
( - 后缀设为
:1.2) - 结果就是
(walking:1.2)这样的加权提示词
- 前缀设为
4.2 随机性控制技巧
- 固定种子:当你找到满意的组合时,记住种子值,下次就能重现
- 概率控制:善用
enable_chance参数,让某些元素不是每次都出现 - 多节点组合:用多个 DarkPrompt 节点处理不同类型的词条,然后用 DarkCombiner 组合
4.3 文件夹管理技巧
- 合理设置文件夹大小:根据你的生成量调整,避免单个文件夹文件过多
- 使用描述性前缀:用有意义的前缀,如
character-、landscape-等 - 定期整理:使用 Fill Gaps 策略可以更好地利用空间
5. 常见问题解答
Q1: 为什么我的词条文件没有生效?
A: 检查以下几点:
- 文件路径是否正确
- 文件编码是否为 UTF-8
- 是否开启了
strip_comments但文件里都是注释 - 检查
enable_chance是否设置过低
Q2: 如何让某个词条更容易被选中?
A: 可以在文件里重复写入同一个词条,出现次数越多,被选中的概率越大。
Q3: DarkCombiner 和直接用多个 DarkPrompt 有什么区别?
A: DarkCombiner 专门用于文本拼接,可以自定义分隔符,而且更整洁。不过现在 DarkPrompt 也支持链式组合了。
Q4: 文件夹管理器创建的文件夹在哪里?
A: 文件夹路径由你使用的保存节点决定,DarkFolder 只是提供路径信息。
Q5: 可以在词条文件里使用中文吗?
A: 完全可以,确保文件保存为 UTF-8 编码即可。
6. 高级应用示例
6.1 构建复杂角色描述系统
角色基础.txt: 美丽的女孩, 帅气的男孩, 可爱的小朋友
服装.txt: 穿着白裙, 穿着牛仔裤, 穿着校服
动作.txt: 在跑步, 在看书, 在画画
环境.txt: 在公园里, 在教室里, 在海边
使用多个 DarkPrompt 节点分别处理这些文件,然后用 DarkCombiner 组合,就能生成 "美丽的女孩, 穿着白裙, 在看书, 在公园里" 这样的复杂描述。
6.2 LoRA 模型自动化应用
在提示词中使用 <lora:style_name:0.8> 格式,DarkLoraTagLoader 会自动识别并加载对应的 LoRA 模型,非常适合批量处理不同风格的图片。
6.3 批量生成与自动整理
配合 DarkCheckpointRandomizer 随机切换模型,DarkFolder 自动管理输出文件夹,可以实现完全自动化的批量生成流程。
这个插件的强大之处在于它的灵活性和自动化能力,善用这些功能可以大大提高你的工作效率!