From 00a6ac08df45b327e5ab3f351ed0e828d8fc89f2 Mon Sep 17 00:00:00 2001 From: 134 Date: Mon, 6 Jul 2026 05:11:23 +0800 Subject: [PATCH] fix: tighten product lock scale adjust clip mask --- app/api/canvas/local-edit/route.ts | 44 ++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/app/api/canvas/local-edit/route.ts b/app/api/canvas/local-edit/route.ts index 552373197..5d94baec2 100644 --- a/app/api/canvas/local-edit/route.ts +++ b/app/api/canvas/local-edit/route.ts @@ -2687,6 +2687,15 @@ async function buildScaleAdjustRmbgStructureLockedComposite(params: { ) { return null; } + const sourceEditBaseMask = filteredSourceBbox + ? filteredSourceMask + : highConfidenceSourceMask; + const sourceEditMaskBbox = getScaleAdjustMaskBoundingBox({ + height: placement.sourceBox.height, + mask: sourceEditBaseMask, + width: placement.sourceBox.width, + }); + if (!sourceEditMaskBbox) return null; const sourceWashBaseMask = filteredSourceBbox ? solidifyScaleAdjustStructureMask({ box: placement.sourceBox, @@ -2707,15 +2716,26 @@ async function buildScaleAdjustRmbgStructureLockedComposite(params: { }); const sourceCompositeClipMask = dilateScaleAdjustStructureMask({ height: placement.sourceBox.height, - mask: sourceWashBaseMask, + mask: sourceEditBaseMask, radius: Math.max( - 1, + 4, Math.round( - Math.min(placement.sourceBox.width, placement.sourceBox.height) * 0.003 + Math.min(placement.sourceBox.width, placement.sourceBox.height) * + (protectedPersonSide ? 0.018 : 0.014) ) ), width: placement.sourceBox.width, }); + const sourceWashMaskBbox = getScaleAdjustMaskBoundingBox({ + height: placement.sourceBox.height, + mask: sourceWashMask, + width: placement.sourceBox.width, + }); + const sourceCompositeClipBbox = getScaleAdjustMaskBoundingBox({ + height: placement.sourceBox.height, + mask: sourceCompositeClipMask, + width: placement.sourceBox.width, + }); const sourceWashPatch = await buildScaleAdjustMaskWashPatch({ background, box: placement.sourceBox, @@ -2833,7 +2853,25 @@ async function buildScaleAdjustRmbgStructureLockedComposite(params: { protectedPersonMaskApplied: Boolean(protectedPersonMask), sameSizeCutout, alphaBandingStats, + sourceClipAlphaRatio: Number( + ( + (sourceCompositeClipBbox?.count || 0) / + Math.max(1, placement.sourceBox.width * placement.sourceBox.height) + ).toFixed(3) + ), + sourceEditAlphaRatio: Number( + ( + sourceEditMaskBbox.count / + Math.max(1, placement.sourceBox.width * placement.sourceBox.height) + ).toFixed(3) + ), sourceHeight: placement.sourceBox.height, + sourceWashAlphaRatio: Number( + ( + (sourceWashMaskBbox?.count || 0) / + Math.max(1, placement.sourceBox.width * placement.sourceBox.height) + ).toFixed(3) + ), sourceWidth: placement.sourceBox.width, });