Stable Diffusion WebUI Forge 提示词工程指南:3 套模板 + 4 个控制操作,把画面写到点子上
【免费下载链接】stable-diffusion-webui-forge项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge
同一张图,只改三处提示词,差别可能肉眼可见:主体更突出、阴影更柔和、构图更稳。Stable Diffusion WebUI Forge 的提示词生成系统,把权重、断句、嵌入都做成了可以直接复制的文本语法。下面这套做法,照着抄就能用。
效果先睹:调权前后差在哪
先拿一个具体例子感受差距。同样是画一只屋顶上的猫:
朴素版:a cat on the roof, sunset, city background 调权版:(a cat on the roof:1.2), (detailed fur:1.1), [sunset:0.6], city background改了三个地方:主体词「a cat on the roof」显式提到 1.2;补了一个细节词「detailed fur」并加权;次要的天空用中括号压到 0.6。预期画面差异:猫更清晰、更居中,毛发细节明显更多,落日不再把整张图染得偏色抢戏。
直接可用:3 套分场景提示词模板
写实人像:(masterpiece:1.2), (photorealistic:1.1), 1girl, detailed eyes, (natural lighting:1.1), (soft shadow:0.9), background: city street at dusk, bokeh, depth of field 动漫场景:anime style, (illustration:1.2), colorful, (scenery:1.1), fantasy world, floating islands, (waterfall:1.0), cherry blossoms, highly detailed 概念设计:concept art, (futuristic city:1.3), (neon lights:1.2), (cyberpunk:1.1), flying cars, [rain:0.9], reflections, detailed architecture, octane render, 8k为什么这样排词?写实人像把「photorealistic」放前面并加权,是因为编码器对提示词前段更敏感,画质类关键词靠前才压得住整体风格。动漫模板里「scenery」单独加权,是让远景的浮空岛、瀑布不被前景花草吃掉。概念设计模板把「futuristic city」给到最高权重 1.3,同时用[rain:0.9]把雨压成氛围而不是主角,画面就不会糊成一片水光。
引擎怎么理解:一条流水线,三次关键变换
不用记架构,把它想成一条流水线:文字进去,向量出来,中间发生三次关键变换。
先解析。引擎扫描你的提示词,把括号翻译成数字权重、把 BREAK 记成断句标记。权重你可以理解成「给词加粗」:数值越大,这个词在画面里的话语权越大。
再分块。CLIP 一次只认 75 个 token(token 是模型读词的最小单位,一个英文词通常拆成 1–2 个)。超长提示词会被自动切成一段段,就像长文分页。切的时候引擎会回头看最近的逗号,尽量在逗号后断开,避免把「red dress」劈成两半。
最后编码。每一块送进 CLIP 文本编码器(CLIP 是专门读文本的编码器,负责把词变成一串浮点向量),再由 UNet(负责把噪图一步步擦成成图的扩散网络)拿去和噪图对线。整条流水线由 classic_engine.py 串起来,括号的具体拆解在 parsing.py。
💡 记住这个顺序:权重管强弱,分块管顺序,编码管落地。
三个控制操作:提示词权重怎么写
操作一:权重括号
圆括号提权、方括号降权、冒号后跟数值就是显式指定,汇总成一张表:
| 写法 | 效果 |
|---|---|
(词:1.2) | 显式权重 1.2 |
(词) | 不写数值时默认 ×1.1 |
[词] | 默认 ÷1.1,降低存在感 |
((词)) | 嵌套叠加,约 ×1.21 |
那个 1.1 是引擎的默认系数,就写在 parsing.py 的round_bracket_multiplier里。可直接抄的例子:(portrait, studio light:1.1), (red dress:1.2), [cluttered desk:0.7]
操作二:BREAK 断句
在提示词中间敲一个独立的 BREAK(两边各留一个空格),引擎会强制在此处换块,后面的内容进下一块处理。适合「前半段定主体、后半段补氛围」的写法:
(masterpiece:1.2), mountain range, river valley BREAK sunset, warm lighting, snow peaks操作三:逗号分块
不写 BREAK 时,超长提示词自动切块。切块点不是随便切的:引擎在满 75 token 的位置往前找 20 个 token 内的最后一个逗号,优先在逗号后断开。所以把相关词用逗号组织成「短语组」,比一长串孤立的单词更不容易被劈坏。
风格扩展:自定义嵌入模型怎么加载
嵌入模型(Textual Inversion,俗称「触发词向量」)是把某个风格或角色训成一串数字,提示词里敲出对应触发词就自动替换进去。加载要点:
- 文件放 embeddings/ 目录(仓库默认路径见 args.py 的
embedding_dir='./embeddings'),支持.safetensors、.pt、.bin,也兼容把数据藏进 PNG 图片的格式。 - 触发词 = 文件名(或文件内写明的 name)。提示词里必须原样敲出这个词,空格、连字符都要对上;引擎先按第一个 token 找候选,再整体比对。
- 维度必须匹配:SD1.5 期望 768 维,SDXL 期望 2048 维,不匹配的会被静默跳过,记进
skipped_embeddings,不报错也不生效。 - 启动或切换模型时引擎自动走
add_embedding_dir→load_textual_inversion_embeddings(实现在 textual_inversion.py),不用手动刷新;嵌入生效时控制台会打印[Textual Inversion] Used Embedding [...],拿这行日志确认最省事。
五个高频坑:现象、原因与处理
| 现象 | 原因 | 处理 |
|---|---|---|
| 长提示词后半段语义丢失 | 超 75 token 自动分块,后块影响力天然偏弱 | 重要信息放前 75 token 内,次要信息用 BREAK 显式后移 |
| 嵌入不生效 | 触发词与文件名对不上,或维度不匹配被跳过 | 核对「文件名即触发词」;SD1.5 用 768 维、SDXL 用 2048 维 |
| 主体发黑、画面过饱和 | 多层括号按 1.1 连乘叠加,权重堆太高 | 括号不超过两层,优先写显式数值(词:1.2) |
| 权重算出来不对 | 括号没闭合,引擎按未闭合状态补乘 1.1 | 生成前检查括号配对;真要打印括号可用\(转义 |
| 改了提示词画面没变化 | 权重 1.0 附近差异极小,或设置里 Emphasis(权重生效方式)被设为 Ignore/None | 关键权重拉到 1.2 以上;检查设置里的 Emphasis 选项 |
结语
一句话带走:权重管强弱、BREAK 管先后、逗号管断行、嵌入管风格。更多实现细节看 backend/text_processing/ 与 README.md。
【免费下载链接】stable-diffusion-webui-forge项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考