通常我们喜欢把写Prompt的过程,称之为“施放魔咒”,而对于它的整个生成过程,我们又称之为“炼丹”。今天,在这里,我主要带大家先从浅及深,从最基础的语法格式,到提示词的一般组成,以及利用一些扩展或者脚本,帮助我们去更好的完成提示词的生成,做一个相对简单又不算特别深入的探讨。
prompt(或咒语),由多个以英文逗号进行分割的标签组成,标签越前,权重越大,反之越小。每一个标签,可以使用以下几种格式:
自然语法,也就是和我们日常聊天一样的方式,通常为一段句子。如我想画一个伤心的女孩坐在教室里,stablediffusion目前仅支持少量中文、日文,通常我们以英文方式表达,翻译为英文为"asadgirlsitsinaclassroom",我们用它去进行生成一下,看看效果:自然语法
asadgirlsitsinaclassroom
Tag语法通常是把你想表达的东西关键词或者短语方式去表达,它也是我们平常用得最多的一种方式。针对上一个例子,换成Tag语法,我们的Prompt可以写成"agirl,sad,inclassrom",生成一下,我们同样来看看效果:Tag语法
agirl,sad,inclassrom
emoji也就是表情符号的意思,通过表情符号,我们可以为人物生成对应的表情,继续以上一个例子为例,我们用emoji来表示的话,Prompt将改写为"1girl,,inclassroom",效果如下:emoji
1girl,,inclassroom
颜文字是随着互联网的兴起,一种用字符表达人物表情的表达方式,仍然以上一个例子为例,我们用颜文字来表示的话,Prompt将改写为"1girl,:-<,inclassroom",效果如下:颜文字
1girl,:-<;,inclassroom
支持的颜文字,详细可以参见here(zh.m.wikipedia.org)。
上面提过,标签越靠前,权重越重。在实际应用中,除了默认权重以外,我们还可以通过权重语法来对标签进行加减或者手动设置权重。它主要有以下几种格式:
通过()、[]、{}等方式设置权重手动设置权重:格式:(提示词:权重值),示例:(sad:1.1),表示对伤心程度设置权重为1.1{提示词]等价于(提示词:1.05)[提示词]等价于(提示词:0.952](提示词)等价于(提示词:1.1)),{{{{提示词}}}}等价于(提示词:1.05x1.05x1.05x1.05)。0.952x0.952x1.1),[[[提示词]]]等价于(提示词:0.952x通过()、[]、{}进行嵌套,实现权重加权。除了可以使用上面的方式进行加权或者指定权重,我们还可以对上面的权重表示符号进行嵌套加权,每多一重嵌套,相当于在原来的权重基础上,再进行了一次迭代。比如((提示词))等价于(提示词:1.1
一般情况下,我们建议采用(提示词:权重)这种方式,可读、控制性高。
OR语法,通常用"|"表示。这里我们还是以上面的女孩为例,给它添加上具有red、yellow、green多彩颜色头发,Prompt词:"1girl,(redhair:1.1)|(yellowhair:1.2)|(greenhair:1.4),inclassroom",直接上图看效果:
1girl,(redhair:1.1)|(yellowhair:1.2)|(greenhair:1.4),inclassroom
AND语法,在多个单词或者短语之间添加"and"来实现。还以刚才的例子为例,改为and语法,Prompt为"1girl,1girl,(redhair:1.1)and(yellowhair:1.2)and(greenhair:1.4),inclassroom,inclassroom",效果如下:
1girl,(redhair:1.1)and(yellowhair:1.2)and(greenhair:1.4),inclassroom
"+"联接语法,通过在多个单词或者短语间添加"+"实现,把上个例子我们改成"+"语法来看看效果,Prompt:"1girl,(redhair:1.1)+(yellowhair:1.2)+(greenhair:1.4),inclassroom",效果见下图:
1girl,(redhair:1.1)+(yellowhair:1.2)+(greenhair:1.4),inclassroom
"_"联接语法,通过在多个单词或者短语间添加"_"实现,把上个例子我们改成"+"语法来看看效果,Prompt:"1girl,(redhair:1.1)_(yellowhair:1.2)_(greenhair:1.4),inclassroom",效果见下图:
1girl,(redhair:1.1)_(yellowhair:1.2)_(greenhair:1.4),inclassroom
","联接语法,其实只是为了和上面的做比较,不属于特殊语法。Prompt:"1girl,(redhair:1.1),(yellowhair:1.2),(greenhair:1.4),inclassroom",效果见下图:
1girl,(redhair:1.1),(yellowhair:1.2),(greenhair:1.4),inclassroom
直接拼接语法,不使用任何符号,在标签之间进行连接。Prompt:"1girl,(redhair:1.1)(yellowhair:1.2)(greenhair:1.4),inclassroom",效果见下图:
1girl,(redhair:1.1)(yellowhair:1.2)(greenhair:1.4),inclassroom
[提示词:数值]表示从多少步或者多少百分比开始渲染前面的提示词,我还以上面的女孩为例,我们从第10步开始画红头发,Prompt:"1girl,[redhair:10],(yellowhair:1.2),(greenhair:1.4),inclassroom",效果如下:交替渲染语法,格式为[提示词:数值]、[提示词::数值]、[提示词1:提示词2:数值]等,其中的数值大于1,表示从多少步开始,小于1,表示在多少百分比开始。
1girl,[redhair:10],(yellowhair:1.2),(greenhair:1.4),inclassroom
[提示词::数值]表示在多少步或者多少百分比结束再画前面的提示词,把上面的例子,我们改一下,在第10步结束开始画红头发,Prompt:"1girl,[redhair::10],(yellowhair:1.2),(greenhair:1.4),inclassroom",效果如下:
1girl,[redhair::10],(yellowhair:1.2),(greenhair:1.4),inclassroom
[提示词1:提示词2:数值]表示在前面多少步或者多少百分比画提示词1,后面的画提示词2。把上面的例子,我们改成前面10步画红头发,后面画黄头发。Prompt:"1girl,[redhair:yellowhair:10],(greenhair:1.4),inclassroom",效果如下:
1girl,[redhair:yellowhair:10],(greenhair:1.4),inclassroom
我们还可以对交替渲染语法做嵌套,比如[[提示词::20]:10],表示从第10步开始到20步结束画提示词。仍然以上面的例子为例,我们改为从10步开始,到20步结束画红头发。Prompt:"1girl,[[redhair::20]:10],(yellowhair:1.2),(greenhair:1.4),inclassroom",效果如下:
1girl,[[redhair::20]:10],(yellowhair:1.2),(greenhair:1.4),inclassroom
[提示词1|提示词2]表示交替渲染。仍然以上面的例子为例,我们让红发和黄发交替渲染,Prompt:"1girl,[(redhair:1.1)|(yellowhair:1.2)],(greenhair:1.4),inclassroom",效果如下:
1girl,[(redhair:1.1)|(yellowhair:1.2)],(greenhair:1.4),inclassroom
总结:
少使用emoji表情和颜文字,有些model支持较差使用model对应的triggerword,否则有可能效果不尽人意尽量使用英文,其他语言支持能力有限以Tag语法,配合少量自然语法
通过上面的讲解,我们已经对Prompt的写法有了些基础了解,但不知道各位朋友有没有发现,上面生成的图像过于简单,没有画质感,画的结构组成层次不清晰,没有光影效果。
在这节,我主要给大家讲述,如何去画好一幅画。这里以人物画做例进行介绍,一幅好的人物画,除了要有人物以及场景的简单介绍之外,还需要有以下几部分:
其他细节,诸如主体视角、某某艺术家、分辨率及色调等光线,特别重要,可以让你的画更有艺术感场景,主体所处的环境描述主体细节,画人的话,包括人物的发饰、上下身衣物、动作造型等主体,你如果画人,通常可能会有1girl、1boy等画风,Portraits、Landscape、Anime、Photography等画质,如bestquality、UHD、highres、ultra-detailed,masterpiece等
Stablediffusionwebui本身提供了丰富的扩展能力,帮助我们完成文生图或者图生图。以下功能都是利用它的脚本扩展能力。
通过修改上面的案例,我们可以看看在加与不加画质词,对整体画的影响,Prompt:"1girl,elgantdress,highsteel,inclassroom|bestquality|highres",它将生成4张画,分别表示全部画质词不加,以及加其中任意一个和全部都加的情况下,详细效果见下:
1girl,elgantdress,highsteel,inclassroom|bestquality|highres
这里面我将继续使用脚本扩展能力,来对前面的女孩用例,对它进行换装,Prompt:"bestquality,highres,UHD,1girl,elgantdress,highsteel,inclassroom",选中"X/Y/Zplot"脚本项,X轴我们用CFGScale,值为"7,10",Y轴选prompts/r,值填入"elgantdress,businesssuit,hanfu",一共将生成6幅画,效果详细见下:
bestquality,highres,UHD,1girl,elgantdress,highsteel,inclassroom
通过这项扩展,我们可以验证tag交换后,对整体图像生成的影响,也可以用于验证是否tag越靠着,权重是否越大。仍然以上面的为例,我们这次对主体(1girl)、场景(inclassroom)以及画质(bestquality)进行交换,看看相应图像会有什么变化。Prompt:"bestquality,1girl,inclassroom",选中"X/Y/Zplot"脚本项,X轴我们用CFGScale,值为"7,10",Y轴选promptorder,值填入"1girl,bestquality,inclassroom"详细效果见下:
bestquality,1girl,inclassroom
词图PromptTool-www.prompttool.com/NovelAI魔咒百科词典(aitag.top)魔咒百科宝典-咒语生成器-tag.redsex.cc