news 2026/10/26 2:14:01

AI绘图构图提示词词典:32种构图与批量验证脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI绘图构图提示词词典:32种构图与批量验证脚本

写 AI 绘图的提示词时,很多人会把精力全砸在画质词和风格词上:8K、超写实、电影感、虚幻引擎、大师作品……结果图出来了,画面元素确实精致,但整体看起来"散"——主体被挤到角落,视线没有落点,画面上下左右重量不均。这时候继续加画质词基本无效,因为问题不在清晰度,而在构图。

构图是画面信息组织的方式,它决定观者的眼睛先落在哪里、沿着什么路径移动、最后停在哪里。AI 模型并不会"理解"构图这个概念,它只是把提示词里的构图描述映射到训练数据中相同描述的图像分布上。换句话说,你写的构图词越具体、越符合标注习惯,模型复现的概率就越高;写"好看的构图"这种词,等于什么都没说。

这篇文章要解决的问题很具体:把 AI 绘图里真正有效的构图描述整理成一份可查、可抄、可验证的词典,覆盖 32 种常见构图,每种都给出提示词写法、主要作用和适用场景,并配一套可以批量跑对比图的脚本。如果你正在用 Stable Diffusion、ComfyUI 或任何支持英文提示词的文生图接口做封面图、插画、电商主图、分镜草图,读完可以直接拿去改自己的提示词模板。

1. 为什么构图是 AI 绘图里最容易被跳过的变量

先说一个常见误区:很多人以为构图是"后期裁一刀"就能解决的事。实际不是。扩散模型在生成阶段就已经把画面元素的相对位置固定下来了,你后期裁剪只能改变取景范围,改不了主体和背景的空间关系。一张主体被压在正中间、背景元素均匀铺满的图,你无论怎么裁,都不会变成一张干净的留白海报。

第二个误区是把构图当成"摄影师的事"。但 AI 绘图的使用场景里,构图承担的是信息传达职责:商品图要突出产品本体,封面图要给标题留位置,分镜图要交代人物和环境的关系,插画要有情绪落点。这些需求本质上都是构图需求,而不是画风需求。所以当你说"这张图感觉不对"的时候,大概率不是模型不行,是构图指令缺失。

第三个现实问题是提示词权重被稀释。主流的文生图模型对提示词的处理是有长度和注意力分配的,你在前面堆了二十个画质词,构图词排到后面,模型给出的注意力权重就很低。这也是为什么同样一句rule of thirds,放在提示词开头和放在末尾,效果差别明显。

这篇文章面向三类读者:需要批量出图的运营和设计同学、正在搭建 AI 绘图工作流的开发者、以及想把提示词工程做规范化的团队。下面的内容会从原理讲到词典,再讲到批量验证脚本,你可以按需跳读,但建议至少把第 4 章的词典和第 5 章的脚本看完。

2. AI 构图的核心概念与作用机制

2.1 构图词在扩散模型里到底作用在哪一层

要理解构图词为什么有时灵有时不灵,得先知道它在整个生成流程中的位置。文生图模型的核心是条件扩散:文本编码器把提示词转成一串向量,这串向量在每一步去噪时通过交叉注意力影响图像的生成方向。构图词影响的是"空间布局相关的注意力分布",而不是某个具体像素。

所以会出现两个现象。第一,构图词的影响是概率性的,不是确定性的,同一个提示词换种子可能就失效。第二,构图词之间会互相冲突,你同时写centered composition和rule of thirds,模型会得到一个模糊的中间态,结果两边都不像。

理解这一点之后,实践结论就清楚了:构图词要少而准,一次主推一种构图,需要多种构图时靠批量出图做筛选,而不是靠一句话全塞进去。

2.2 三种构图控制手段的取舍

控制手段实现方式控制强度适用场景主要局限
提示词描述在 prompt 中加入构图术语弱到中快速探索、大批量出图结果不稳定,受种子影响大
参考图 / 图生图img2img、参考图权重中到强已有大致版式,需要保持容易过度贴近原图,丢失创意
结构化控制ControlNet 的边缘、深度、姿态、线稿强需要精确版式、商业交付需要准备控制图,流程更重

实际项目里通常组合使用:先用提示词批量跑出方向,选定 2 到 3 张满意的,再用 ControlNet 把版式锁死,最后微调细节。只靠提示词做商业交付,返工率会很高;一上来就上 ControlNet,探索成本又太大。

2.3 画幅比例本身就是构图的一部分

这一点特别容易被忽略。三分法在 16:9 横图和 9:16 竖图里的视觉效果完全不同,对称构图在方图里最稳,引导线构图需要足够的长边来延伸。你在提示词里写leading lines,但画幅给的是 1:1,线条没有延伸空间,效果自然出不来。

所以正确的做法是画幅和构图一起定。常见的对应关系:

构图类型推荐画幅原因
对称构图、中心构图1:1、4:5视觉重心居中,方图最稳
三分法、留白构图3:2、16:9需要横向空间安放主体和负空间
垂直引导、仰拍9:16、2:3长边提供纵向张力
全景、鸟瞰21:9、16:9需要横向信息量

3. 环境准备与提示词工程基础

3.1 运行环境与前置条件

本文的示例基于 Stable Diffusion 系列模型和常见的 WebUI 接口,具体版本请以你本地实际安装为准,本文重点演示通用思路和脚本结构,不锁定具体版本号。需要准备的东西如下:

  • 一台带独立显卡的机器,显存建议 8GB 以上,跑 768 级别分辨率更从容;显存不足可以降低分辨率或使用 CPU 推理,但耗时会明显增加。
  • 一个可用的文生图服务,本地部署或通过 HTTP 接口调用均可。本文脚本按 WebUI 的 API 格式编写。
  • Python 3.9 及以上,安装requests和pillow两个库即可。
  • 一个用于存放配置和输出图的目录。

如果你的服务是 WebUI,启动时需要带 API 参数,否则外部脚本调不通:

# 启动 WebUI 并开放 API,端口按实际配置调整 python launch.py --api --listen --port 7860

启动后可以先用一条命令验证接口是否可用:

curl -s http://127.0.0.1:7860/sdapi/v1/sd-models | head -c 500

能返回模型列表 JSON,说明接口正常。返回连接拒绝,说明服务没起或者端口不对,先解决这一步再往下走。

3.2 提示词的分层写法

构图词单独写是没用的,它必须放在一个结构化的模板里。推荐把提示词拆成五层,顺序不要乱:

  1. 主体描述:谁、在做什么、什么状态。
  2. 构图描述:这一层就是本文的词典内容。
  3. 视角与镜头:焦距、机位、拍摄距离。
  4. 光影与色调:光源方向、色温、对比强度。
  5. 风格与画质:媒介、笔触、分辨率描述。

一个填好的例子:

a lone hiker standing on a rocky ridge at dawn, wide shot, rule of thirds composition, subject placed on the right third line, 35mm lens, slightly low angle, warm backlight from the left, soft haze in the valley, cinematic photography, high detail

这样写的好处是,构图词处在一个不会被淹没的位置,而且和视角、光影形成了互相支撑的关系。反过来,如果你把构图词塞在一堆画质词中间,模型很难判断它是不是重点。

3.3 构图词的中英对照与常用表达

中文提示词在部分模型上可用,但构图类术语的标注数据以英文为主,用英文命中率更高。几个高频表达先记住:

  • rule of thirds:三分法
  • centered composition:中心构图
  • symmetrical composition:对称构图
  • leading lines:引导线
  • negative space:留白
  • low angle shot/high angle shot:仰拍 / 俯拍
  • dutch angle:倾斜构图
  • shallow depth of field:浅景深
  • foreground, midground, background:前景中景背景分层

还有个实用技巧:描述位置比描述术语更管用。rule of thirds有时不如subject positioned on the left third, empty space on the right来得直接,因为后者是具体的空间指令,模型不需要二次解释。这一点在第 4 章的词典里会反复用到。

4. 32 种构图完整词典与适用场景

下面按五类展开。每类先给一张总览表,再逐条解释提示词写法、主要作用和容易踩的坑。提示词片段可以直接拼接进第 3.2 节的模板。

4.1 几何骨架类:用基础形状稳住画面

编号构图名称核心提示词片段主要作用
1三分法rule of thirds, subject on the left third让画面不呆板,留出呼吸感
2中心构图centered composition, subject in the middle强调主体,制造庄重感
3对称构图symmetrical composition, mirror symmetry秩序感强,适合建筑与仪式感场景
4黄金分割golden ratio composition, spiral placement比三分法更柔和的比例关系
5三角构图triangular composition, three anchor points画面结构稳定,适合多人或多元素
6对角线构图diagonal composition, strong diagonal axis制造动感和张力

1. 三分法构图。这是最通用的一种,把画面用两条横线和两条竖线切成九宫格,主体放在任意一条线或交点上。提示词建议写位置而不是只写术语,例如subject on the right third, horizon on the upper third line。主要作用是避免主体居中带来的呆板感,同时天然留出可用的负空间,适合封面图、文章配图、带标题的设计稿。容易踩的坑是只写rule of thirds而不指定主体落点,模型可能把地平线放在中间,构图意图就丢了。

2. 中心构图。主体放在画面正中央,四周元素围绕中心展开。提示词用centered composition, subject dead center, radial elements around。它适合需要强视觉冲击的场合,比如产品主图、人物肖像、标志性建筑。主要作用是让观者视线一步到位,没有寻找成本。风险是画面容易显得呆,需要靠光影或背景层次来补,所以通常要配合dramatic lighting之类的词一起用。

3. 对称构图。画面以中轴线镜像分布,可以是左右对称也可以是上下对称。提示词写symmetrical composition, perfect mirror symmetry along the vertical axis。它在建筑、室内、宗教场景、水面倒影中效果最好,主要作用是传达秩序、稳定和仪式感。坑在于 AI 很难做到严格对称,常出现左右细节不一致,这时就要上 ControlNet 或者后期修图,别指望纯提示词一次到位。

4. 黄金分割构图。和三分法接近,但分割比例更接近 1:0.618,主体落点更靠内一些。提示词写golden ratio composition, subject at the golden spiral focal point。主要作用是比例关系更柔和自然,适合静物、人像和艺术品展示这类需要"舒服"而不是"强烈"的画面。实际使用中它和三分法的差异很细微,不用过度纠结,把它当作三分法的一个变体来用就行。

5. 三角构图。画面中有三个视觉锚点构成三角形,可以是三个人物、三个物体,也可以是人物姿态形成的三角。提示词写triangular composition, three subjects forming a stable triangle。主要作用是结构稳定又不呆板,非常适合多人合影、产品组合图、场景叙事。注意三角不要太正,正三角容易僵,稍微倾斜一点更有张力。

6. 对角线构图。主体或主要线条沿画面对角方向延伸。提示词写diagonal composition, subject aligned along the diagonal axis。主要作用是制造动感、速度感和不稳定感,适合运动、街头、时尚类内容。它的一个变体是"对角线分割",即画面被一条斜线切成两块,适合做对比型海报。

4.2 线条引导类:控制视线的移动路径

编号构图名称核心提示词片段主要作用
7引导线构图leading lines pointing to the subject把视线从边缘引向主体
8S 形曲线构图s-curve composition, winding path优雅、有韵律的视线流动
9水平线构图strong horizontal lines, calm horizon稳定、开阔、平静
10垂直线构图strong vertical lines, tall structures庄严、力量感、向上延伸
11放射线构图radial composition, lines radiating from center聚焦中心,制造爆发感
12消失点构图vanishing point composition, one point perspective强纵深感,空间延伸

7. 引导线构图。利用道路、栏杆、河流、光影边缘等线条,把视线从画面边缘引向主体。提示词写leading lines from the bottom left corner pointing toward the subject,明确线条起点和指向,效果比只写leading lines稳得多。它适合风景、建筑、街头和产品场景图,主要作用是增强画面的纵深和叙事方向。坑在于线条指向的位置如果没对准主体,视线会跑偏,出图后要先检查线条落点。

8. S 形曲线构图。画面中有一条蜿蜒的曲线,常见于河流、小径、人物姿态。提示词写s-curve composition, winding river leading into the distance。主要作用是制造优雅的韵律感,让视线缓慢流动而不是被硬拽过去,适合风景、人像、婚礼和美食摆盘。它比直线构图更柔和,但也更依赖场景本身有没有曲线元素,硬凑会很假。

9. 水平线构图。画面被明显的水平线分割,比如海平面、地平线、桌面边缘。提示词写strong horizontal lines, low horizon line, calm and expansive。主要作用是传达平静、稳定、开阔,适合风景、海景、极简设计和商务风配图。关键细节是地平线的位置:放在上三分之一显得开阔,放在下三分之一压出天空,放在正中间会产生对称感但也容易呆板,写提示词时最好把位置一起指定。

10. 垂直线构图。画面以纵向线条为主,比如树林、高楼、柱子、站立的人物。提示词写strong vertical lines, towering structures, upward perspective。主要作用是传递庄严、力量、秩序和向上延伸的感觉,适合建筑、森林、工业题材和人像全身照。配合 9:16 或 2:3 的竖画幅效果最明显,用横画幅会浪费掉纵向张力。

11. 放射线构图。线条从画面某一点向四周发散,像阳光、烟花、伞骨。提示词写radial composition, lines radiating outward from the center point。主要作用是把注意力强行拉到放射中心,制造爆发感和仪式感,适合节日海报、产品发布图、灯光场景。要注意放射中心不一定在画面正中,偏一点反而更自然。

12. 消失点构图。利用一点透视或多点透视,让线条汇聚到远处的消失点。提示词写one point perspective, vanishing point composition, road converging in the distance。主要作用是制造强烈的纵深感和空间延伸,适合街道、走廊、铁轨、室内空间。它和引导线构图经常一起出现,区别在于消失点强调的是"汇聚",引导线强调的是"指向"。

4.3 空间层次类:让画面有前后关系

编号构图名称核心提示词片段主要作用
13框架式构图framing composition, subject framed by archway制造窥视感,强化主体
14三层空间构图foreground, midground, background layers明确的纵深分层
15留白构图negative space, large empty area on the right突出主体,留出文字位
16满版构图fill the frame, subject occupying most of the frame信息密度高,冲击力强
17重复与图案repetitive pattern, rhythmic repetition秩序感与节奏感
18交叠遮挡overlapping elements, layered depth强化前后关系和真实感

13. 框架式构图。用门、窗、树枝、拱门等元素在画面中形成一个"框",把主体框在里面。提示词写framing composition, subject seen through a doorway, dark frame around the edges。主要作用是制造窥视感和私密感,同时把观者视线牢牢锁在框内主体上。它特别适合人像、旅拍、室内场景。坑在于框架太抢眼会喧宾夺主,需要靠明暗对比压住框架,让框变暗、主体变亮。

14. 前景中景背景三层构图。画面明确分成三层:近处的前景、中间的主体、远处的背景。提示词写clear foreground, midground and background layers, blurred foreground leaves, distant mountains。主要作用是建立空间纵深,让二维图像有三维感。这是风景和场景类图像最实用的构图手法之一,配合浅景深提示词效果更明显。注意前景不要挡住主体关键部位。

15. 留白构图。画面大部分是空的,主体只占一小块。提示词写negative space composition, large empty sky on the upper right, small subject at the lower left。主要作用是突出主体、制造高级感和呼吸感,同时为文字排版留出位置。它是封面图、海报、PPT 配图最实用的构图之一。中文语境里常说的"高级感",很多时候就是留白比例控制得好。坑在于留白区域如果被模型填满了细节,效果就没了,所以要用minimal detail in the empty area之类的词辅助。

16. 满版构图。主体几乎占满整个画面,边缘被裁切。提示词写fill the frame, close framing, subject cropped by the frame edge。主要作用是信息密度高、冲击力强,适合美妆、食品、纹理展示和情绪特写。它和留白构图是两个极端,选择哪一个取决于这张图要不要放文字、要不要传达"空"的感觉。

17. 重复与图案构图。画面中出现大量重复元素,比如一排窗户、一片椅子、成排的树。提示词写repetitive pattern, rhythmic repetition of identical elements。主要作用是制造秩序感和节奏感,同时可以通过"打破重复"来突出主体,比如一片相同的窗户里有一扇亮着灯。这个手法在建筑摄影和概念图里很常用,商业上也适合表现规模感。

18. 交叠遮挡构图。画面中的元素互相遮挡,形成明确的前后关系。提示词写overlapping elements, objects partially blocking each other, layered depth。主要作用是强化空间真实感,让画面看起来不是贴片拼起来的。AI 出图常见的问题就是元素"贴"在一起缺少遮挡,加上这个描述能明显改善。它常和三层空间构图配合使用。

4.4 视角与透视类:改变观看的位置

编号构图名称核心提示词片段主要作用
19低角度仰拍low angle shot, looking up at the subject强化气势与压迫感
20高角度俯拍high angle shot, looking down at the subject弱化主体,交代环境
21鸟瞰构图bird's eye view, top down view展示全局布局关系
22荷兰角倾斜dutch angle, tilted horizon制造不安与动感
23特写构图extreme close-up, detail shot强调细节与情绪
24全景构图wide establishing shot, full scene visible交代环境与人物关系

19. 低角度仰拍。机位低于主体,向上看。提示词写low angle shot, camera near the ground looking up。主要作用是让主体显得高大、有气势,同时简化背景(因为仰拍时背景多半是天空)。适合人物英雄感塑造、建筑、产品展示。坑在于仰拍会让人物腿部显长、面部变形,人像使用时要注意焦段描述。

20. 高角度俯拍。机位高于主体,向下看。提示词写high angle shot, camera above looking down。主要作用是弱化主体的强势感,同时把地面环境纳入画面。适合美食、桌面摆拍、儿童和宠物、以及需要交代"在哪里"的场景。俯拍角度越大,环境信息越多,主体越小,这个比例要按用途调。

21. 鸟瞰构图。接近垂直向下的俯视,像从飞机或无人机上拍。提示词写bird's eye view, aerial top down shot。主要作用是展示整体布局和空间关系,比如城市肌理、停车场、农田、桌面平铺。它在概念图和信息图配图里很好用,因为天然带有"全局视角"的含义。注意鸟瞰图往往缺少立体感,需要靠光影和阴影补。

22. 荷兰角倾斜构图。相机故意倾斜,地平线不水平。提示词写dutch angle, tilted camera, skewed horizon line。主要作用是制造不安、紧张、失衡的心理感受,适合悬疑、动作、音乐封面和潮流视觉。它属于"情绪性构图",用多了会显得廉价,一般只在需要强调情绪张力时用。

23. 特写构图。镜头贴近主体,只拍局部。提示词写extreme close-up, macro detail, only the eyes visible。主要作用是放大细节、传递情绪,让观者注意力高度集中。适合美妆、珠宝、材质展示、人物情绪表达。它通常需要配合浅景深,否则背景细节会抢戏。

24. 全景构图。镜头拉远,把人物和周围环境一起拍进去。提示词写wide establishing shot, full body in a wide environment。主要作用是交代"这个人处在什么环境里",是叙事类图像最基础的构图。它和特写是一对,实际项目里经常需要同一场景的远景和特写两个版本,用来做分镜或详情页。

4.5 对比与情绪类:用差异制造重点

编号构图名称核心提示词片段主要作用
25大小对比scale contrast, tiny subject beside huge structure强调体量差异
26明暗对比chiaroscuro, dramatic light and shadow contrast突出主体,营造氛围
27色彩对比complementary color contrast, warm subject cool background用色彩拉开层次
28虚实对比shallow depth of field, sharp subject blurred background分离主体与背景
29剪影构图silhouette composition, subject backlit against bright sky强调轮廓与情绪
30非对称平衡asymmetrical balance, large mass offset by small bright element画面活泼但不失衡
31视线引导subject looking toward the empty space用目光方向引导注意力
32极简构图minimalist composition, only one subject and plain background信息极简,聚焦单一

25. 大小对比构图。画面中放入体量差异极大的两个元素,比如小人站在巨大建筑前。提示词写scale contrast, a tiny human figure standing before a massive structure。主要作用是直观传达体量、力量、渺小感,适合建筑表现、科幻场景、概念图。它比单纯写"很大的建筑"有效得多,因为模型需要参照物才能表现尺度。

26. 明暗对比构图。画面靠强光和深影拉开层次,类似古典绘画的明暗法。提示词写chiaroscuro lighting, strong light and shadow contrast, subject lit from one side。主要作用是突出主体、营造戏剧性氛围,同时天然弱化背景干扰。它在人像、静物、电影感场景里都非常有效。使用时注意指定光源方向,否则模型可能给出均匀照明,对比效果就没了。

27. 色彩对比构图。主体和背景使用对比色,比如暖色主体配冷色背景。提示词写complementary color contrast, warm orange subject against cool blue background。主要作用是用色彩直接拉开主体和背景的距离,让画面第一眼就有重点。它在电商主图、海报、封面设计里是常规操作。坑在于颜色写得太抽象容易失控,最好具体到色名。

28. 虚实对比构图。主体清晰、背景虚化,或者反过来。提示词写shallow depth of field, sharp subject with blurred background, bokeh。主要作用是把主体从复杂背景中"抠"出来,减少视觉干扰。它和明暗对比、色彩对比属于同一类手段,都是通过差异建立层次,实际出图时三种经常一起用。

29. 剪影构图。主体背光,只留轮廓。提示词写silhouette composition, subject backlit against a bright sunset sky, pure black outline。主要作用是强调形状和姿态,同时营造情绪和氛围感,适合日落、逆光人像、城市天际线。它最大的优势是绕开了 AI 生成面部细节不稳定的问题,因为剪影不需要五官。

30. 非对称平衡构图。画面左右重量不均等,但通过元素大小、亮度、色彩的搭配达到视觉平衡。提示词写asymmetrical balance, a large dark mass on the left balanced by a small bright element on the right。主要作用是让画面既活泼又不失衡,比严格对称更有现代感。它是进阶手法,用得好很高级,用不好就是单纯的"偏"。建议先靠三分法打底,再逐步调平衡关系。

31. 视线引导构图。人物或动物的视线朝向画面某个方向,观者会不自觉跟着看过去。提示词写subject looking toward the right side of the frame, gaze leading into empty space。主要作用是引导注意力、制造叙事悬念,同时为文字排版留出空间。这个手法在人像和叙事插画里非常实用。要注意视线方向前方必须留空,如果视线指向画面边缘,会让人觉得憋。

32. 极简构图。画面只有一两个元素,背景干净。提示词写minimalist composition, single subject, plain seamless background, lots of empty space。主要作用是信息极度聚焦,适合产品图、图标、概念表达和高端品牌视觉。它和留白构图有重叠但不完全一样:留白强调空间比例,极简强调元素数量。两者叠加使用时,效果最干净,但对模型控制力要求也最高,容易出现多余元素。

5. 完整示例:批量生成 32 种构图对比图

光看词典不够,最有效的学习方式是把 32 种构图用同一个主体跑一遍,横向对比。下面这套脚本就是干这个的。

5.1 配置文件:把构图词典变成数据结构

把词典写成 JSON,好处是后续可以按类别筛选、随机抽样、做 A/B 测试。文件路径建议放在项目根目录的config/compositions.json。

{ "base": { "subject": "a ceramic coffee cup on a wooden table", "style": "product photography, soft natural light, high detail", "negative": "lowres, blurry, watermark, text, extra objects, cluttered background", "steps": 28, "cfg_scale": 6.5, "sampler_name": "Euler a" }, "compositions": [ { "id": 1, "name": "rule_of_thirds", "prompt": "rule of thirds composition, subject positioned on the left third line", "width": 1024, "height": 768 }, { "id": 2, "name": "centered", "prompt": "centered composition, subject dead center, symmetrical background", "width": 1024, "height": 1024 }, { "id": 3, "name": "symmetrical", "prompt": "symmetrical composition, perfect mirror symmetry along the vertical axis", "width": 1024, "height": 1024 }, { "id": 13, "name": "framing", "prompt": "framing composition, subject seen through a dark doorway", "width": 832, "height": 1216 }, { "id": 15, "name": "negative_space", "prompt": "negative space composition, large empty area on the right side", "width": 1216, "height": 832 }, { "id": 22, "name": "dutch_angle", "prompt": "dutch angle, tilted camera, skewed horizon line", "width": 1024, "height": 768 }, { "id": 28, "name": "shallow_dof", "prompt": "shallow depth of field, sharp subject with heavily blurred background, bokeh", "width": 1024, "height": 768 } ] }

这里只列了 7 条做演示,实际使用时把第 4 章的 32 条全部补齐即可,结构完全一样。注意每条都带了自己的宽高,因为前面说过构图和画幅要一起定。

5.2 调用脚本:批量出图并落盘

文件路径:scripts/batch_generate.py。

import base64 import json import os import time from pathlib import Path import requests API_URL = "http://127.0.0.1:7860/sdapi/v1/txt2img" CONFIG_PATH = Path("config/compositions.json") OUTPUT_DIR = Path("output") SEED = 20240101 # 固定种子,保证不同构图之间可比 def build_prompt(base: dict, composition: dict) -> str: """按 主体 + 构图 + 风格 的顺序拼接提示词。""" return f"{base['subject']}, {composition['prompt']}, {base['style']}" def request_image(payload: dict, retries: int = 2) -> bytes: """调用文生图接口,失败时重试。""" last_error = None for attempt in range(retries + 1): try: resp = requests.post(API_URL, json=payload, timeout=180) resp.raise_for_status() data = resp.json() images = data.get("images") or [] if not images: raise ValueError("接口返回中没有 images 字段") return base64.b64decode(images[0].split(",", 1)[-1]) except Exception as exc: # noqa: BLE001 last_error = exc time.sleep(2 * (attempt + 1)) raise RuntimeError(f"生成失败:{last_error}") def main() -> None: config = json.loads(CONFIG_PATH.read_text(encoding="utf-8")) base = config["base"] OUTPUT_DIR.mkdir(parents=True, exist_ok=True) for item in config["compositions"]: payload = { "prompt": build_prompt(base, item), "negative_prompt": base["negative"], "steps": base["steps"], "cfg_scale": base["cfg_scale"], "sampler_name": base["sampler_name"], "width": item["width"], "height": item["height"], "seed": SEED, "batch_size": 1, } image_bytes = request_image(payload) filename = f"{item['id']:02d}_{item['name']}.png" (OUTPUT_DIR / filename).write_bytes(image_bytes) print(f"[OK] {filename} {item['width']}x{item['height']}") if __name__ == "__main__": main()

关键逻辑说明三点。第一,build_prompt把主体、构图、风格按固定顺序拼接,保证 32 张图只有构图变量不同,其他条件一致,这样对比才有意义。第二,seed写死,避免随机性干扰判断,如果某张图明显崩了,可以单独把这张的种子调一下再跑。第三,重试机制是必要的,本地服务在高负载下偶尔会超时,没有重试会导致批量任务中断。

5.3 运行与可选的单条调试命令

# 进入项目目录后执行 python scripts/batch_generate.py

如果想先单独试一条,直接用 curl 验证接口和提示词效果,确认没问题再跑批量:

curl -s http://127.0.0.1:7860/sdapi/v1/txt2img \ -H "Content-Type: application/json" \ -d '{ "prompt": "a ceramic coffee cup on a wooden table, negative space composition, large empty area on the right side, product photography, soft natural light", "negative_prompt": "lowres, blurry, watermark, text, cluttered background", "steps": 28, "cfg_scale": 6.5, "width": 1216, "height": 832, "seed": 20240101 }' | python -c "import sys,json,base64;d=json.load(sys.stdin);open('preview.png','wb').write(base64.b64decode(d['images'][0].split(',',1)[-1]))"

5.4 拼成对比图,一次性看完

32 张图一张张点开太低效,用 ImageMagick 拼成一张联系表:

cd output montage *.png -tile 4x -geometry +6+6 -background "#1a1a1a" contact_sheet.png

如果环境里没有 ImageMagick,用 Pillow 也能拼,逻辑不复杂,这里不展开。拼好之后横向对比,能很直观地看出哪种构图适合你这个主体。

如果你用的是 ComfyUI,思路完全一致,只是把 HTTP 调用换成节点工作流。关键是把提示词节点和Empty Latent Image的宽高做成可以外部传入的参数,通过/prompt接口提交。工作流 JSON 比较长,不建议手写,在界面里搭好之后导出,然后只改text和width、height三个字段就够了。

6. 运行结果与效果验证

脚本跑完,output目录里应该出现 32 个按编号命名的 PNG 文件,控制台按顺序打印[OK]行。这是第一层验证:文件数量对得上、文件名对得上,说明流程通了。

第二层验证是构图是否真的生效。这一步不能靠感觉,建议按下面几个检查点逐条过:

  • 主体位置是否符合描述。三分法的图,主体应该明显偏左或偏右,而不是正中。
  • 负空间是否真的空。留白构图的图,空白区域应该没有杂物,如果被填满了元素,说明提示词权重不够。
  • 线条是否指向主体。引导线构图的图,线条汇聚的位置应该落在主体附近。
  • 画幅比例是否被遵守。用图片属性看一眼实际尺寸,排除接口忽略宽高参数的情况。

第三层验证是横向对比。把同一主体的 32 张图排在一起,你会发现有的构图天生适合这个主体,有的完全不搭。这个结论本身就是有价值的产出,它比背词典更能形成直觉。

如果某一张明显没生效,第一步先看提示词在最终 payload 里的实际内容。很多问题是拼接时漏了逗号或者顺序错了,导致构图词和主体描述粘在一起,模型理解成别的意思。第二步看种子,同一提示词换种子跑三次,如果三次都不生效,说明这个词对这个模型本身就不敏感,需要换更具体的空间描述。

7. 常见问题与排查思路

问题现象可能原因排查方式解决方案
构图词完全不生效提示词过长,构图描述被稀释打印最终 prompt,看构图词位置把构图描述提到主体描述之后、风格描述之前
主体不在预期位置只写了术语没写具体位置检查 prompt 是否有方位描述补上on the left third这类具体落点
留白区域被填满缺少负空间约束对比不同种子的出图加minimal detail in the empty area,并加强负向提示词
对称构图左右不一致模型本身难以严格对称肉眼比对中轴线两侧改用 ControlNet 锁定线稿,或后期镜像修补
引导线没有指向主体线条起点和主体位置冲突观察线条汇聚点明确写出起点和终点方位,必要时换构图
宽高设置被忽略宽高不是 8 的倍数查看返回图实际尺寸宽高统一取 8 的整数倍,如 1024、1216
接口请求超时分辨率过高或队列拥堵看服务端日志和显存占用降低分辨率,加大脚本超时时间并加重试
同一提示词结果差异大种子随机检查 seed 是否固定固定种子做对比,探索阶段再放开
画面出现多余元素负向提示词不够统计多余元素类型把具体元素名写进 negative prompt
竖构图主体被裁切宽高与构图不匹配检查构图类型和画幅对应关系竖构图类换成 9:16 或 2:3

排查的核心原则是先定位问题在哪一层:是提示词层、参数层,还是模型能力层。提示词层的问题改文字就能解决;参数层查宽高、步数、CFG;模型能力层的问题,比如严格对称、精确文字,就不是提示词能解决的,得换工具或者上结构化控制。

8. 最佳实践与工程建议

第一条,把构图词典做成团队资产而不是个人笔记。配置化的 JSON 好处是能进版本管理,谁改了哪条提示词、为什么改,都能追溯。团队里不同人对"三分法"的理解可能不一样,统一成一份可执行的配置,比口头沟通有效得多。

第二条,一次只改一个变量。批量对比的时候,种子固定、主体固定、风格固定,只变构图。这个原则听起来简单,但实际做的时候很容易顺手把风格也换了,最后得不出任何结论。如果确实想同时测风格,就做笛卡尔积,别混在一起。

第三条,提示词里位置描述优先于术语描述。这条前面反复提过,值得再强调一次。模型的训练数据里,subject on the left这类空间描述的样本量远大于构图学术语,命中率更高。术语可以用,但要配位置。

第四条,把负向提示词当成构图的一部分来管。留白构图最怕画面被填满,极简构图最怕多余元素,这两种情况都要靠 negative prompt 兜底。建议单独维护一份"构图相关负向词",按构图类型分组,需要时拼接。

第五条,商业交付场景必须上结构化控制。提示词构图适合探索和草稿,一旦确定版式要交付,就用 ControlNet 的线稿或深度图锁死。原因很现实:客户不会接受"这一版和上一版构图不一样",而纯提示词做不到稳定复现。

第六条,注意模型和构图词的适配差异。不同模型对构图术语的敏感度不一样,有的模型对dutch angle反应很强烈,有的几乎无感。换模型之后,之前调好的提示词要重跑一遍验证,不要直接复用。

第七条,做好输出文件命名和元数据留存。文件名里带上编号和构图名,最好再把完整的 payload 存一份同名 JSON。后期想复现某张图,有 payload 就能一分钟搞定,没有就得重新猜。

9. 后续可以继续深入的方向

这份词典解决的是"知道有哪些构图、怎么写提示词"的问题。往下走还有几个值得投入的方向。

一个是构图与光影的联动。同一套构图配不同光位,出来的气质完全不同,比如侧逆光配留白构图会非常通透,正面平光配留白就容易发灰。把光影变量也做成配置,和构图做组合测试,能快速积累出适合自己业务的组合库。

另一个是结构化控制的实操。ControlNet 的线稿、深度、姿态三种预处理方式,各自适合锁什么类型的构图,需要单独花时间摸。经验上,线稿适合锁建筑和产品轮廓,深度适合锁空间层次,姿态适合锁人物动作,三者可以叠加但权重需要调。

第三个方向是把词典接进实际工作流。比如做封面图时,先按"留白 + 三分法 + 视线引导"三选一出图,再根据标题位置决定最终方案;做电商主图时,优先用中心构图和满版构图,配合高对比光影。这些对应关系一旦固化下来,出图效率的提升比换更贵的显卡更明显。

建议你现在就做的第一件事:把第 5 章的 JSON 配置补齐到 32 条,用你自己业务里最常用的主体跑一遍。跑完之后你会对自己的模型、自己的提示词习惯、以及哪些构图真的适合你的场景,形成一套比任何词典都更贴合实际的判断。这份配置留着,后面换模型、换风格、换项目,都能直接复用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 2:13:47

提升前端开发效率的30个必备VSCode插件

1. 前端开发效率提升的核心痛点作为一名从业多年的前端工程师,我深刻理解在日常开发中遇到的效率瓶颈问题。从项目初始化到代码调试,从界面构建到性能优化,每个环节都存在大量重复性劳动。特别是在现代前端工程日益复杂的背景下,如…

作者头像 李华
网站建设 2026/10/26 2:12:32

C#读取点云数据实战:从字节流到点集合的完整解析

简介:这份资源面向具备一定C#基础、希望入门三维数据处理与机器视觉方向的开发者,围绕点云数据的读取与解析展开,解决文本格式点云文件在C#中如何逐行加载、拆分坐标并封装为点对象的问题。压缩包共39个文件,约88KB,以…

作者头像 李华
网站建设 2026/10/26 2:12:24

科研智能体工作流:从部署到批量任务自动化

读研读博真正消耗人的,往往不是"想不出 idea",而是被切碎在几十件琐事上:读不完的文献、跑不通的代码、画不完的图、改不完的稿、回不完的邮件、整不完的参考文献格式。一天十几个小时下去,真正的深度思考时间可能不到两…

作者头像 李华
网站建设 2026/10/26 2:12:03

AI数字人系列化内容生产:从结构化剧本到自动成片

《外星人访谈》做到第 49 集,这件事本身就比“用什么模型”更值得聊。一个 AI 生成的访谈栏目,能连续更新到 49 期还不崩人设、不崩音色、不崩画面风格,靠的不是某一个神奇工具,而是一套能重复执行的流水线:大模型写结…

作者头像 李华
网站建设 2026/10/26 2:11:46

用Python挖掘客户痛点:从非结构化文本到文案榜单

做营销和内容运营的朋友经常会遇到一个尴尬场面:会上被问“你的客户到底卡在哪一步、最疼的是什么”,回答往往是“感觉他们挺在意价格”“好像对响应速度有意见”。这种靠体感得出的结论,落到投放和文案上就变成了撒网式试错,预算…

作者头像 李华
网站建设 2026/10/26 2:11:46

Adobe Reader入门指南:PDF阅读、批注与表单填写实战

简介:本资源为Adobe Reader 11.x经典离线安装包,面向PDF文档处理初学者、办公人员及IT支持工程师,解决跨平台PDF稳定阅读、基础批注与安全打印等核心需求。压缩包共274个文件,总计102.16MB,包含12个可执行程序&#xf…

作者头像 李华