Nano Banana 2.1 局部重绘带上原图阴影 / 先分清是提示词还是区域选择的问题

文章导读
同一张图、同一句提示词,局部重绘几次还是把原图阴影带出来,通常不是选区没画好或提示词没写好这么简单,而是两个变量同时在动。判断顺序建议反过来:先把输入固定成一条基线,再分别只改提示词、只改选区各跑一次,看阴影残留是跟着提示词变化,还是跟着选区边界变化。谁变、残留就跟着谁变,问题就落在那一侧。
📋 目录
  1. Ⅰ 固定一张图与一句提示词作为唯一变量基线
  2. Ⅱ 只改提示词,补一句排除描述后再跑一次
  3. Ⅲ 只改选区,把范围缩到目标物体边缘以内
  4. Ⅳ 用脚本批量跑同一张图的多种选区组合
  5. Ⅴ 把每次输入的变量写进一张对照表
A A

同一张图、同一句提示词,局部重绘几次还是把原图阴影带出来,通常不是选区没画好或提示词没写好这么简单,而是两个变量同时在动。判断顺序建议反过来:先把输入固定成一条基线,再分别只改提示词、只改选区各跑一次,看阴影残留是跟着提示词变化,还是跟着选区边界变化。谁变、残留就跟着谁变,问题就落在那一侧。

先固定一张图、一句提示词原文和一组选区坐标作为基线。第一次只加排除阴影的描述重跑,如果残留位置随提示词改变,说明语义排除没写到位;第二次只把选区收缩到物体轮廓以内,如果残留位置随边界移动,说明阴影是被选区圈进去了。两次输出都要和基线并排保留,不要凭记忆判断。

固定一张图与一句提示词作为唯一变量基线

适用场景是阴影残留反复出现、每次都顺手调整提示词和选区。操作动作是先选一张阴影明显的原图,写死提示词原文,再手动画一组能覆盖目标物体的选区,跑一次作为基线。验证方式是后续每次只改动一个字段,输出和基线并排看。风险边界是如果连原图分辨率都不固定,选区坐标的含义会变,后面的对比就不成立。

基线要记录的是四件事:图片文件(路径与像素尺寸)、提示词原文(不要临时润色)、选区坐标(以原图左上角为原点的 x1,y1,x2,y2)、输出文件路径。建议建一个固定目录,避免覆盖:

case/
  base.png            # 原图,尺寸写在这里:1920x1080
  prompt_base.txt     # 提示词原文,不做逐字修改
  sel_base.json       # {'x1':120,'y1':80,'x2':300,'y2':260}
  out_base.png        # 基线输出

这三份输入记录加一份输出,就构成了后面两组单变量对照的参照物。缺少任何一份,残留位置的对比都只能靠印象。

Nano Banana 2.1 局部重绘带上原图阴影 / 先分清是提示词还是区域选择的问题

只改提示词,补一句排除描述后再跑一次

这一组只动提示词,选区和原图保持和基线完全一致。目的是判断残留是否由语义理解引起:提示词里没有提到阴影,重绘时把阴影当成目标物体的一部分延续下来,是常见情况。

排除句的写法骨架可以拆成三段:先说重绘范围,再说目标物体,最后单独交代阴影和反光的处理方式。中文示例:仅在选区范围内绘制目标物体;不要生成原图中的投影、接触阴影和反光;阴影原本覆盖的位置请用周围背景延续填充。如果服务提供独立的排除字段,就把最后一句挪过去:negative: 原图阴影, 投影, 反射, 暗部边缘。英文骨架同理,关键是不要在同一次修改里顺手换掉主体描述词。

跑完以后,把两次输出叠在基线旁边看残留位置。残留固定在新物体下方、形状和选区边界无关,通常说明语义层面仍有阴影概念;残留只出现在选区外沿一圈、形状贴合边界,反而更像选区带进来的,先不要删排除句,转去做第二组。

只改选区,把范围缩到目标物体边缘以内

这一组恢复基线提示词,只改选区坐标。做法是把含阴影的外框,收缩到目标物体可见轮廓以内,用同一张原图和同一句提示词再跑一次。像素级坐标示例:

Nano Banana 2.1 局部重绘带上原图阴影 / 先分清是提示词还是区域选择的问题
改动前:{'x1':110,'y1':70,'x2':320,'y2':300}   # 外框把接触阴影一起圈住
改动后:{'x1':128,'y1':92,'x2':296,'y2':248}   # 收缩到物体边缘以内

截图对照要截三个位置:选区叠加在原图上的样子、改动前输出的阴影残留、改动后输出的同一块区域。选区画法自查清单如下:

  • 选区是否把投影、接触阴影、地面反光一起圈了进去;
  • 边界是贴着物体轮廓,还是贴着阴影外缘;
  • 羽化或柔边值是否偏大,让边界外的原始阴影混进重绘区;
  • 是否用了自动分割,自动分割常把阴影并进主体掩膜,需要手动收边确认;
  • 选区是否横跨高对比边缘,接缝在新旧像素之间容易被误看成阴影残留;
  • 收缩后是否留下旧边缘残线,必要时回放原图逐像素核对。

如果收缩后残留跟着消失,说明问题在选区;如果收缩后物体边缘出现接缝、但旧阴影不再出现,属于可以接受的取舍,需要结合实际输出判断。

用脚本批量跑同一张图的多种选区组合

手工改一次提示词再改一次选区,很容易把两个变量混在一起。把选区组合和提示词组合放进列表,用同一张图跑一遍,可以复现整条判断链。下面只是通用调用骨架,接口地址和字段名按你所调用服务的实际字段替换:

Nano Banana 2.1 局部重绘带上原图阴影 / 先分清是提示词还是区域选择的问题
POST <ENDPOINT>
headers: { 'Authorization': 'Bearer <TOKEN>' }
body: {
  'image': '<原图 BASE64 或可访问地址>',
  'mask':  '<遮罩 BASE64 或可访问地址>',
  'prompt': '<提示词原文>',
  'negative_prompt': '<排除描述,若该服务无此字段则并入 prompt>',
  'seed': <固定种子,便于逐张对齐>
}
selections = [('with_shadow',(110,70,320,300)), ('tight',(128,92,296,248))]
prompts = [('base','<提示词原文>'), ('excl','<提示词原文 + 排除阴影句>')]
for sname, box in selections:
    for pname, text in prompts:
        out = f'{image_stem}_{sname}_{pname}_seed{seed}.png'
        call_edit(image=image_path, mask=make_mask(box), prompt=text, out=out)

输出命名规则建议固定为「图片名_选区标签_提示词标签_seed 值.png」,选区标签写 with_shadow 或 tight,提示词标签写 base 或 excl。同一组 seed 保持一致,输出才能逐张叠放对比;换 seed 就相当于又引入一个新变量。

把每次输入的变量写进一张对照表

跑完三组单变量对照后,把输入和观察写进同一张表。表格不写推测,只写这次输出里眼睛能看到的现象。

图片提示词选区输出表现结论
base.png原文含阴影 (110,70,320,300)填写实际观察:阴影是否出现、出现在哪个位置基线,不用于单独下判断
base.png原文 + 排除阴影句与基线相同填写实际观察:残留位置是否改变、是否只剩边界一圈变了说明语义侧有影响;没变则继续查选区
base.png原文收缩到物体边缘以内 (128,92,296,248)填写实际观察:旧阴影是否消失、物体边缘是否出现接缝跟着消失说明阴影是被圈进来的

判断规则很直接:残留跟着提示词变,就先继续打磨排除句;残留跟着选区边界变,就先收回选区;两次都不变,再回头确认原图分辨率、羽化值和 seed 是否在每次运行中保持一致。表里留空或写「待确认」比凭印象补一个结论更有用。