Nano Banana 2.1 逐轮改图、把上一轮结果当新输入

文章导读
一张图来回改五六轮后颜色发灰、细节发糊,通常是两件事叠在一起:一是每次导出都要重新编码和调色,二是把上一轮输出当成下一轮输入时,误差会一层压一层。要分清是哪一种,最直接的做法是固定同一张原图,分别跑一组「链式输入」和一组「每轮回原图」,逐轮把输出单独存盘再对照。下面给的是记录口径和脚本骨架,目的是让你在同一张图、同一组参数、同一台机器上跑一遍,自己看出漂移从第几轮开始变得不可接受。
📋 目录
  1. 一 固定同一张原图,连续跑五轮相同的局部修改
  2. 二 把每轮输出当作下一轮输入,观察画质变化
  3. 三 改成每轮都回退原图再改另一处
  4. 四 用脚本按固定轮数循环提交,减少手工误差
  5. 五 给出多轮改图的操作建议与回退点
A A

一张图来回改五六轮后颜色发灰、细节发糊,通常是两件事叠在一起:一是每次导出都要重新编码和调色,二是把上一轮输出当成下一轮输入时,误差会一层压一层。要分清是哪一种,最直接的做法是固定同一张原图,分别跑一组「链式输入」和一组「每轮回原图」,逐轮把输出单独存盘再对照。下面给的是记录口径和脚本骨架,目的是让你在同一张图、同一组参数、同一台机器上跑一遍,自己看出漂移从第几轮开始变得不可接受。

多轮改图变灰变糊,多数情况下是链式输入在放大重编码损失,而不是模型单次能力不够。建议先固定同一张原图连跑五轮建立基线,再改成每轮以上一轮输出为输入连跑五轮,两组都逐轮单独保存并按同一坐标裁剪对比。判断依据优先看三处:非编辑区域是否也开始变化、整体色调是否相对原图偏移、细线条和文字边缘是否出现重影。具体可接受轮数受原图内容、导出格式和分辨率影响,需要用自己的图跑一遍确认,不要直接照搬别人的轮数。

固定同一张原图,连续跑五轮相同的局部修改

这一组的输入永远是同一张原始文件,五轮的改动描述和改动区域保持完全一致。它回答的是「同一原图重复跑,结果本身稳不稳」,只有这组稳定,后面链式输入看到的差异才能归因到多轮累积上。

选图时优先挑含有大面积渐变、暗部、细纹理或文字边缘的原图,这几类区域通常最先暴露漂移。每轮输出必须另存为新文件,不要覆盖上一轮,也不要在对话窗口里接着上一轮继续改,否则后面无法回退。

  • 命名模板:orig.png、r01-reset-{area}.png …… r05-reset-{area}.png,轮次和输入来源都写进文件名。
  • 像素尺寸:每轮用同一方式读取宽高并记录,出现尺寸变化说明导出环节被改了参数。
  • 文件体积:记录字节数,体积异常变小往往对应纹理被抹平,可作为辅助线索。
  • 参数留痕:把该轮的提示词、遮罩区域、种子、尺寸写进同名 .json,便于回溯和重跑。
轮次输入来源文件名像素尺寸文件体积颜色偏移细节清晰度边缘状态
第 1 轮orig.png待填待填待填待填待填待填
第 2 轮orig.png待填待填待填待填待填待填
第 3 轮orig.png待填待填待填待填待填待填
第 4 轮orig.png待填待填待填待填待填待填
第 5 轮orig.png待填待填待填待填待填待填

把每轮输出当作下一轮输入,观察画质变化

第二组把第 N 轮的输入换成第 N-1 轮的输出文件,改动描述仍然一致,只让编辑位置逐轮挪动。每轮结束后,把该轮结果与原始文件在同一坐标裁一块、放大到同一倍数并排看,比在整图上扫一眼更容易判断漂移。

差异不会平均分布,通常先出现在几个固定位置:大面积渐变和暗部先出现色块或脏边;细纹理(毛发、织物、砂石)先糊;细线条和文字边缘先出现毛刺或重影;还有一种更要紧的情况是编辑区域之外的背景也开始变化,说明改动溢出了预期范围。

Nano Banana 2.1 逐轮改图、把上一轮结果当新输入

明显程度建议用四级文字描述,避免凭印象说「有点差」:看不出 / 放大后可见 / 1:1 下可见 / 缩略图就可见。逐轮记录差异位置和级别,通常能看到级别随轮数单调上升;如果某一轮突然跳级,优先怀疑该轮的遮罩或提示词改动过大,而不是模型本身。

改成每轮都回退原图再改另一处

第三组每轮都从 orig.png 重新开始,只改当轮需要改的那一处,改完直接导出,不再把结果喂回下一轮。两组用同一批改动、同一个顺序,唯一变量就是输入来源。

对比维度链式输入回原图输入
漂移累积随轮数叠加每轮只承担一次编码损失
颜色一致性整体色调容易逐轮偏移相对原图稳定
细节保留纹理逐轮变软未编辑区域基本不动
编辑连贯性上一轮结果可继续沿用每轮改动需要重新描述
可回退性只能回到某一轮中间态随时可退回原图重做
适用场景同一处反复微调、需要承接前轮上下文一张图多处独立修改、需要交付干净成品

经验上,一张图要改多处独立位置时,回原图输入更省心;只有同一处需要连续微调、且每轮改动都建立在上一轮效果之上时,链式输入才有意义,而且这种场景建议把链长压到两三步以内。

用脚本按固定轮数循环提交,减少手工误差

手工一轮一轮点,最容易出问题的不是画质,而是「这轮到底喂的是哪张图」。把轮数和输入来源写进脚本参数,两组对照才有可比性。下面只是通用骨架,接口字段名以你实际对接的服务为准。

Nano Banana 2.1 逐轮改图、把上一轮结果当新输入
import os, json

API_ENDPOINT = '{API_ENDPOINT}'   # 替换为实际服务地址
API_KEY      = '{API_KEY}'
MODEL        = '{MODEL_NAME}'
ORIGINAL     = 'input/orig.png'
ROUNDS       = 5
MODE         = 'chain'            # chain=上一轮输出作输入;reset=每轮回原图
PROMPT       = '{EDIT_PROMPT}'    # 每轮改动描述
MASK         = '{MASK_OR_REGION}' # 局部区域,可为空
SEED         = '{SEED}'           # 固定种子便于复现

os.makedirs('out', exist_ok=True)
os.makedirs('logs', exist_ok=True)
src = ORIGINAL
for i in range(1, ROUNDS + 1):
    if MODE == 'reset':
        src = ORIGINAL
    out = 'out/round-%02d-%s.png' % (i, MODE)
    payload = {
        'image': src,
        'prompt': PROMPT,
        'mask': MASK,
        'seed': SEED,
        'size': '{WIDTH}x{HEIGHT}'
    }
    resp = call_api(API_ENDPOINT, API_KEY, MODEL, payload)  # 自行实现
    save_image(resp, out)                                    # 自行实现
    with open('logs/round-%02d.json' % i, 'w') as f:
        json.dump(payload, f, ensure_ascii=False)
    print(i, out, os.path.getsize(out))
    src = out

跑之前确认三件事:MODE 与要验证的路线一致、每轮的 PROMPT 和 MASK 已按轮次替换而不是复用同一份、失败轮次直接跳过重跑而不是留下半张图。输出目录建议保持固定结构,便于两组并排比较:

workspace/
├── input/
│   └── orig.png
├── out/
│   ├── round-01-chain.png
│   └── round-05-chain.png
├── logs/
│   └── round-01.json
└── compare/
    ├── crop-round-01.png
    └── side-by-side.png

给出多轮改图的操作建议与回退点

综合两组结果,可以给一个保守区间:同一张图上的局部修改,经验上控制在 2 到 4 轮内比较稳妥;接近第 5 轮时,建议逐轮放大检查颜色和边缘,确认是否已经出现可见偏移。这个区间不是模型的上限,具体能撑几轮取决于原图内容、导出格式、分辨率和单轮改动面积,需要自己跑一遍确认。

出现下面任意一条,就建议退回原图重做,而不是继续往下改:未编辑的背景区域也开始变化;整体色调相对原图明显偏移且调不回来;同一处细节连续两轮变糊;细线条或文字边缘出现重影;同一组参数两次运行结果差异明显,说明当前轮数已经不可复现。

验证方式不需要复杂工具:把每轮结果和原图在同一坐标裁出等大区域,按同一倍数放大并排看;对未编辑区域做一次差分,确认没有非预期变化;用相同种子重跑一轮,确认差异是否可复现。如果是需要交付的成品,最终版本建议直接从原图重新生成,而不是拿链式链尾的文件继续导出。