Stable Diffusion Dynamic Prompts 扩展
一个为 AUTOMATIC1111/stable-diffusion-webui 开发的自定义扩展,实现了一种用于随机或组合式提示词生成的表达性模板语言,并包含支持深层通配符目录结构的功能。
正在寻找 ComfyUI 节点?请在此处查找。
目录
- 基本用法
- 在线资源
- 安装
- 配置
- 故障排除
- 兼容脚本
- 模板语法
- 组合生成
- 固定种子
- 魔法提示词
- 我手气不错
- 注意力抓取器
- 将提示词写入文件
- Jinja2 模板
- WILDCARD_DIR
- 集合
- 动态提示词与随机种子
基本用法
使用此脚本,提示词:
A {house|apartment|lodge|cottage} in {summer|winter|autumn|spring} by {2$$artist1|artist2|artist3}
将生成以下任意一个提示词:
- A house in summer by artist1, artist2
- A lodge in autumn by artist3, artist1
- A cottage in winter by artist2, artist3
- ...
如果您正在寻找艺术家和风格的有趣组合,这特别有用。
您还可以从文件中随机选择一个字符串。假设您在 WILDCARD_DIR(见下文)中有 seasons.txt 文件,那么:
seasons 即将到来
可能会生成以下内容:
- Winter is coming
- Spring is coming
- ...
你也可以使用同一个通配符两次
I love __seasons__ better than __seasons__
- I love Winter better than Summer
- I love Spring better than Spring
更完整的文档可以在这里。
更喜欢教程?点击这里
需要一个通配符库?我们为你准备好了。
在线资源
你可以在这里找到教程和通配符包的列表
安装
该扩展可以直接在 Webui 的 Extensions 选项卡内安装

你也可以通过从 webui 目录中运行以下命令来手动安装:
git clone https://github.com/adieyal/sd-dynamic-prompts/ extensions/sd-dynamic-prompts
你可以创建 通配符文件 in extensions/sd-dynamic-prompts/wildcards 或者利用 预装集合
通过使用 Web UI 中的 "Wildcards Manager" 选项卡。
Configuration
你可以在 Dynamic Prompts 部分的 Settings 选项卡中找到各种用于更改 Dynamic Prompt 行为的设置。
Changing syntax
如果与另一个扩展存在语法冲突,Dynamic Prompts 允许你更改变体开始和变体结束的定义。默认情况下,它们分别设置为 { 和 }。 , 例如 {red|green|blue}。在设置选项卡中,你可以将这两个更改为任意字符串,例如 <red|green|blue> 甚至 ::red|green|blue::。
默认情况下,通配符以 __(双下划线)开头,以 __ 结尾。你可以在设置选项卡中的 wildcard wrap 下更改此设置。
Wildcard settings
Dynamic Prompts 在使用通配符文件之前会自动去重并排序。如果你希望禁用此功能,可以取消勾选设置选项卡中的复选框。
勾选“shuffle wildcards”复选框将随机化通配符的顺序,确保运行组合模型时在不同运行中生成不同的图像。
Save template to metadata
默认行为是将所有通配符解析为可用的提示词,然后该提示词会被存储在 PNG 信息或 txt 文件中(例如 I love Winter better than Summer)。 如果您还希望
召回带有通配符的原始模板,可以启用此选项,您将保存:
I love Winter better than Summer
Template: I love __seasons__ better than __seasons__
注意:此额外的“Template”部分不会在生成页面中显示,但可在 PNG Info(或图像浏览器中,如果你已安装该扩展)中查看。
故障排除
如果你在使用 Dynamic Prompts 时遇到问题,请按照以下步骤解决问题:
-
检查你是否已安装 Dynamic Prompts 扩展和库的最新版本。要检查已安装的版本,请打开 txt2image 中 Dynamic Prompts 部分的 Need Help? 手风琴。你可以在这里找到扩展的最新版本号,在这里找到库的最新版本号。
-
如果版本不匹配,请在扩展选项卡中更新扩展并重启 webui。扩展应会自动更新库。
-
如果上述步骤不起作用,你可能需要使用以下命令手动更新库:
python -m pip install -U dynamicprompts[attentiongrabber,magicprompt]
- 重启 webui 并检查。如果 webui 使用了不同的 python 二进制文件,请找到 python 二进制文件的正确路径并运行:
/path/to/python/binary/python -m pip install -U dynamicprompts[attentiongrabber,magicprompt]
-
如果 Wildcard UI 未显示,可能是由于库版本过旧。请检查终端中的错误,并按照步骤 3 中的说明更新库。
-
如果收到错误消息“No values found for wildcard some/wildcard”,请确保文件 wildcard.txt 位于 extensions/sd-dynamic-prompts/wildcards/some/ 中。必须使用完整路径,因为目前不支持相对路径。
-
如果问题仍然存在,请在 GitHub 的 issues 部分 和 讨论论坛 中搜索解决方案。如果找不到解决方案,请创建一个新的 issue 并为其起一个描述性的名称,例如“Wildcard values are being ignored in prompt templates”。请提供必要的上下文,包括 Dynamic Prompts 扩展和库的版本,并说明所使用的操作系统或 colab。如果终端中有错误,请复制并粘贴完整文本或截图。
-
最后,测试并应用我们发布的任何修复措施至关重要。您的反馈非常有价值,因为在我们的环境中可用的问题在您的环境中可能无法正常工作。
Compatible Scripts
Dynamic Prompts 与 X/Y Plot 配合使用效果特别好——在使用 X/Y Plot 时将 Dynamic Prompts 设置为 combinatorial mode,可以让您同时全面测试提示词和参数变体。
Template syntax
文档可在 此处 找到
模糊 Glob/递归通配符文件/目录匹配
除了 __times__ -> times.txt 等标准通配符标记外,您还可以使用 globbing 一次性匹配多个文件。
例如:
__colors*__将匹配以下任意一项:
- WILDCARD_DIR/colors.txt
- WILDCARD_DIR/colors1.txt
- WILDCARD_DIR/nested/folder/colors1.txt
__light/**/*__将匹配:
- WILDCARD_DIR/nested/folder/light/a.txt
- WILDCARD_DIR/nested/folder/light/b.txt
但不会匹配
- WILDCARD_DIR/nested/folder/dark/a.txt
- WILDCARD_DIR/a.txt
您还可以使用字符范围 [0-9] 和 [a-z] 以及单个通配符字符 ?。更多示例请参阅 this article。
WILDCARD_DIR 默认为 extensions/sd-dynamic-prompts/wildcards。
组合生成
组合生成不是从模板中生成随机提示,而是从给定字符串中生成所有可能的提示。例如:
I {love|hate} {New York|Chicago} in {June|July|August}
将生成:
- I love New York in June
- I love New York in July
- I love New York in August
- I love Chicago in June
- I love Chicago in July
- I love Chicago in August
- I hate New York in June
- I hate New York in July
- I hate New York in August
- I hate Chicago in June
- I hate Chicago in July
- I hate Chicago in August
如果提供了 __wildcard__,则将为通配符文件中的每个值生成一个新提示。例如:
My favourite season is __seasons__
将生成:
- My favourite season is Summer
- My favourite season is August
- My favourite season is Winter
- My favourite season is Sprint
你还可以在通配符内任意嵌套组合,以及在组合内嵌套通配符。
如果你想为文件中的每位艺术家创建一张图像,组合生成会很有用。你可以在 ui 中勾选 Combinatorial generation 复选框来启用此功能。为了防止意外生成数千张图像,你可以使用 Max Generations 滑块来限制生成的提示词总数。值为 0(默认值)时不会设置任何限制。
组合批次
组合批次滑块允许你使用不同的种子重复同一组提示词若干次。默认的批次数量为 1。
增加最大生成数量
默认情况下,automatic1111 的 Batch count 滑块的最大值为 100。这可能会限制使用组合生成时的最大生成数量。你可以通过编辑 ui-config.json 并修改以下设置来更改此滑块的最大值:
txt2img/Batch count/maximum": 100
改为更大的值,例如:
txt2img/Batch count/maximum": 1000
固定种子
如果你希望为每张生成的图像使用相同的种子,请选择此项。如果没有通配符,则所有图像都将完全相同。如果你想测试某个特定修饰符的效果,这很有用。例如:
A beautiful day at the beach __medium/photography/filmtypes__
这样你就可以隔离每种胶片类型对特定场景的影响。以下是一些结果:

Magic Prompt
使用多种提示词生成模型之一来丰富你的提示词。
使用 Gustavosta 的 MagicPrompt 模型,该模型基于来自 Lexica.art 的 80,000 个提示词进行训练,它可以帮助你针对特定主题生成有趣的新提示词。以下是针对“dogs playing football”自动生成的一些变体:
dogs playing football, in the streets of a japanese town at night, with people watching in wonder, in the style of studio ghibli and makoto shinkai, highly detailed digital art, trending on artstation
dogs playing football, in the background is a nuclear explosion. photorealism. hq. hyper. realistic. 4 k. award winning.
dogs playing football, in the background is a nuclear explosion. photorealistic. realism. 4 k wideshot. cinematic. unreal engine. artgerm. marc simonetti. jc leyendecker
这与上述描述的通配符语法兼容。
其他模型
- daspartho/prompt-extend (~500mb)
- succinctly/text2image-prompt-generator (~600mb) - 使用 Midjourney 提示词训练
- microsoft/Promptist (~500mb) - 在此处](https://arxiv.org/abs/2212.09611)阅读论文
- AUTOMATIC/promptgen-lexart (~300mb) - 使用来自 lexica.art 的 134,819 个提示词进行微调
- AUTOMATIC/promptgen-majinai-safe (~300mb) - 来自 majinai.art 的 1,654 个提示词
- AUTOMATIC/promptgen-majinai-unsafe (~300mb) - 来自 majinai.art 的 825 个提示词 (NSFW)
- Gustavosta/MagicPrompt-Dalle
- kmewhort/stable-diffusion-prompt-bolster (~500mb),
- Ar4ikov/gpt2-650k-stable-diffusion-prompt-generator (~500mb),
- Ar4ikov/gpt2-medium-650k-stable-diffusion-prompt-generator (~1.4gb),
- crumb/bloom-560m-RLHF-SD2-prompter-aesthetic (~1.1gb),
- Meli/GPT2-Prompt (~500mb),
- DrishtiSharma/StableDiffusion-Prompt-Generator-GPT-Neo-125M (~550mb)
首次使用模型时,它会被下载。其大小约为 500mb,因此根据连接速度的不同,需要花费一些时间。首次激活时,由于模型加载到内存中,也需要几秒钟。请注意,如果 VRAM 不足,您可能会遇到 Cuda 错误。我的 GPU 使用量低于 8GB,但具体情况可能因人而异。
您可以通过 Max magic prompt length 滑块来控制最大提示词长度。Magic prompt creativity 可以调整生成的提示词,但您需要对此设置进行实验。
使用 Magic prompt blocklist regex 来过滤关键词。例如,如果您想避免包含 Greg Rutkowski 的提示词,请将他的名字添加到该字段中。
如果您正在使用 Magic Prompt 生成大量提示词,增加 Magic Prompt batch size 可以显著提高提示词生成速度。如果您没有同时生成图像,这一点可能才比较明显,因为图像生成比提示词生成慢得多。
I'm feeling lucky
使用 lexica.art API 创建随机提示词。如果您正在寻找灵感,或者只是懒得自己想提示词,这很有用。当选择此选项时,主提示词框中的提示词将用作搜索字符串。例如,提示词 "Mech warrior" 可能会返回:
- 森林中央的一尊大型机器人石像,由 Greg Rutkowski、Sung Choi、Mitchell Mohrhauser、Maciej Kuciara、Johnson Ting、Maxim Verehin、Peter Konig 创作,最终幻想,8k 照片级真实感,电影级布光,HD,高细节,氛围感,
- 一幅精美的 ( ( ( 赛博朋克 ) ) ) 盔甲肖像画,由 simon stalenhag 和 pascal blanche 和 alphonse mucha 和 nekro 创作。数字艺术风格。色彩鲜艳的漫画,黑色电影,对称,笔触,颤动的色彩,超精细。octane render。在 artstation 上流行
- 对称!!机器人宇航员肖像,花卉!地平线零之曙光机械,错综复杂,优雅,高度细节,数字绘画,artstation,概念艺术,平滑,焦点清晰,插画,art by artgerm 和 greg rutkowski 和 alphonse mucha,8 k
将提示框留空会返回一个完全随机选择的提示列表。
注意力吸引器
此选项会随机选择提示中的一个关键词,并添加随机数量的强调。以下是此功能对提示影响的示例:
a portrait an anthropomorphic panda mage casting a spell, wearing mage robes, landscape in background, cute, dnd character art portrait, by jason felix and peter mohrbacher, cinematic lighting
在 Advanced options 下勾选 Fixed seed 复选框,以查看在不更改 seed 的情况下强调如何改变你的图像。
Write prompts to file
勾选 write prompts to file 复选框以创建一个包含所有生成提示词的文件。生成的文件是提示词的 slugified 版本,可以在与生成图像相同的目录中找到,例如 outputs/txt2img-images

Jinja2 templates
Jinja2 templates 是一个实验性功能,允许你以命令式方式定义提示词。这是一个高级功能,仅推荐给熟悉编写脚本的用户。
要启用此功能,请打开 advanced 手风琴并选择 Enable Jinja2 templates。

你可以在此处阅读更多详细信息 here
WILDCARD_DIR
该扩展程序会在 WILDCARD_DIR 中查找通配符文件。默认位置是 /path/to/stable-diffusion-webui/extensions/sd-dynamic-prompts/wildcards。也可以在主 webui config.json 下的 wildcard_dir 中手动定义。如有疑问,webui 中该扩展程序的帮助文本列出了 WILDCARD_DIR 的完整路径
Collections
collections 目录包含你可以直接使用或用于创建自己库的修饰符库。要开始使用,可以使用 Wildcard Manager 选项卡将一个或多个集合复制到你的 wildcards 文件夹,或者手动复制文件。dynamic prompts 扩展程序附带了三个集合。
- jumbo 一个非常大的通配符集合,涵盖众多类别,包括美学、外观、艺术家、媒介、风格和时间。它仍在完善中,但旨在为各种修饰符类别提供良好的覆盖。
- parrotzone 一个更小且更易管理的集合,源自 https://proximacentaurib.notion.site/e28a4f8d97724f14a784a538b8589e7d?v=42948fd8f45c4d47a0edfc4b78937474。
- devilkkw Devilkkw 更侧重于角色构建、服装、手势、食物等。
如果你使用的是 Unix/Linux 操作系统,并且不打算对其进行修改,你可以轻松地为相关集合创建符号链接,而不是将其复制过来。例如:
ln -sr collections/parrotzone wildcards/
你也可以通过从扩展的根目录运行 python _tools/download_collections.py 来下载额外的扩展,即 extensions/sd-dynamic-prompts/
动态提示词与随机种子
随机种子在控制生成输出的随机性方面起着重要作用。让我们讨论一下动态提示词在不同场景下如何与随机种子配合工作。
未启用动态提示词时
- 如果种子设置为 -1:将选择一个随机种子。该种子用于生成第一张图像,然后使用 seed + 1 创建下一张图像,此模式在后续图像中持续进行。
- 如果种子设置为大于 -1 的特定数字:过程与上述类似,但使用用户指定的种子开始。
- 如果定义了 variation seed,但 variation strength 为零:过程与前两点相同。
- 如果 variation seed 设置为大于 0 的数字:每张图像都使用相同的初始种子(随机选择或由用户设置)生成。variation seed 是随机的(如果设置为 -1)或用户选择的值。第一张图像使用 variation seed 生成,下一张使用 variation seed + 1,依此类推。
在随机/标准模式下启用动态提示词时使用:
- 如果种子设置为 -1:该过程与上一节中的第一点类似。但是,提示词也会使用相同的种子进行选择(如果使用了随机提示词生成器)。
- 如果种子设置为大于 -1 的数字:该过程与上一节中的第二点类似。但是,区别在于,如果使用提示词生成器,也会使用所选的种子生成一个随机提示词。
- 如果勾选了固定种子复选框:所有图像和提示词都使用相同的种子。这意味着会反复生成相同的图像(这对于组合生成很有用)。
- 如果同时勾选了固定种子和将种子与提示词解绑复选框:提示词使用随机种子,但所有图像使用相同的种子。如果您想查看不同的提示词如何影响同一图像的生成,此设置可能很有用。
动态提示词下的变体种子
- 变体强度设置为 0:忽略变体。
- 变体设置为大于 0 的数字:为每张图像分配一个变体种子,每次递增 1。但是,由于您正在寻找同一图像的变体,因此只生成 1 个提示词。
变体强度大于 0 的组合模式
在这种情况下,它只会为您生成第一张图像,这可能不是您想要的结果。要获得所需的结果,您可能需要调整设置或使用不同的模式。