From 91a855c04176a104690c533c2a680803e9e8723f Mon Sep 17 00:00:00 2001 From: 134 Date: Wed, 24 Jun 2026 11:35:49 +0800 Subject: [PATCH] fix: improve scale adjust annotation guide --- app/api/canvas/local-edit/route.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/app/api/canvas/local-edit/route.ts b/app/api/canvas/local-edit/route.ts index e5052f873..fdf9c7ec5 100644 --- a/app/api/canvas/local-edit/route.ts +++ b/app/api/canvas/local-edit/route.ts @@ -931,7 +931,7 @@ function buildScaleAdjustPrompt( "这是一项局部主体比例 inpaint/edit 任务,不是整图缩放、整图裁切或重新构图任务。", sourceSizeLine, "输入图片1是原始干净图,也是最终输出必须继承的唯一画面基底。除目标主体尺寸变化与必要背景补全外,输入图片1中的文字、Logo、装饰、排版、背景、光线、构图边界和所有未选区域必须保持不变。", - "输入图片2是白底选区参考图,只用于说明输入图片1上的红色实线框、青色目标虚线框和四角箭头关系;它不包含场景内容,不是输出底图,不得学习或复刻它的框线、箭头、编号、角点、半透明遮罩或 UI 标记。", + "输入图片2是输入图片1的标注副本,直接在原始图上叠加了红色实线框、青色目标虚线框和四角箭头,只用于让你读取目标主体的当前位置、目标大小和目标位置;输入图片2不是输出底图,不得学习或复刻它的框线、箭头、编号、角点、半透明遮罩或 UI 标记。", cropLines ? `输入图片3及之后是框选区域的干净局部裁切参考图,作用是帮助你确认“要缩放的是哪个主体”。这些裁切图不是输出底图,不得被整体放大、贴回或覆盖到原图上。\n${cropLines}` : "", @@ -1099,16 +1099,7 @@ export async function POST(request: NextRequest) { regions, width: sourceWidth, }); - const annotatedBase = isScaleAdjustOperation - ? sharp({ - create: { - background: "#ffffff", - channels: 3, - height: sourceHeight, - width: sourceWidth, - }, - }) - : sharp(sourceBuffer, { failOn: "none" }); + const annotatedBase = sharp(sourceBuffer, { failOn: "none" }); const annotatedBuffer = await annotatedBase .composite([{ input: annotationSvg, left: 0, top: 0 }]) .png({ compressionLevel: 6 }) @@ -1194,7 +1185,7 @@ export async function POST(request: NextRequest) { annotatedReferenceUrl: annotatedUpload.url, annotatedReferenceSentToModel: isScaleAdjustOperation, annotatedReferenceType: isScaleAdjustOperation - ? "white-source-target-arrow-guide" + ? "source-target-arrow-overlay" : "source-overlay", cleanSourceReferenceIndex: 1, configuredDetailModelId: configuredDetailModel || null, @@ -1218,7 +1209,7 @@ export async function POST(request: NextRequest) { scaleAdjustTargetRegionCount: regions.filter((region) => region.targetRect) .length, scaleAdjustPromptStrategy: isScaleAdjustOperation - ? "locked-plate-local-subject-target-box-arrows-v5" + ? "locked-plate-local-subject-target-box-arrows-v6" : undefined, scaleAdjustPostCompositeApplied: false, scaleAdjustUsesFullFrameOutput: isScaleAdjustOperation,