diff --git a/app/api/canvas/local-edit/route.ts b/app/api/canvas/local-edit/route.ts index f44d1195a..868acc9a7 100644 --- a/app/api/canvas/local-edit/route.ts +++ b/app/api/canvas/local-edit/route.ts @@ -2678,9 +2678,12 @@ function suppressScaleAdjustProtectedFurnitureDarkAlpha(params: { luma < 150 && (saturation < 0.55 || (r < 110 && g < 110 && b < 110)); const lowContrastDark = luma < 132 && saturation < 0.32; - const shouldClear = inProtectedSideArea - ? neutralDark || lowContrastDark - : luma < 100 || (luma < 132 && saturation < 0.22); + const shouldClear = + inProtectedSideArea || + neutralDark || + lowContrastDark || + luma < 100 || + (luma < 132 && saturation < 0.22); if (!shouldClear) continue; output[alphaIndex] = 0; @@ -3128,6 +3131,43 @@ async function buildScaleAdjustVisualLayoutGuideBuffer(params: { if (structureLockAppliedRef) { structureLockAppliedRef.value = true; } + if (protectedPersonSide && sourceRaw) { + const washRight = + protectedPersonSide === "right" + ? Math.round(placement.sourceFootprintBox.width * 0.74) + : placement.sourceFootprintBox.width; + const washLeft = + protectedPersonSide === "left" + ? placement.sourceFootprintBox.left + + Math.round(placement.sourceFootprintBox.width * 0.26) + : placement.sourceFootprintBox.left; + const washWidth = + protectedPersonSide === "left" + ? Math.max( + 1, + placement.sourceFootprintBox.width - + Math.round(placement.sourceFootprintBox.width * 0.26) + ) + : Math.max(1, washRight); + sourceFootprintBoxes.push({ + left: washLeft, + top: placement.sourceFootprintBox.top, + width: washWidth, + height: placement.sourceFootprintBox.height, + background: estimateScaleAdjustBoxBackground({ + box: { + left: washLeft, + top: placement.sourceFootprintBox.top, + width: washWidth, + height: placement.sourceFootprintBox.height, + }, + raw: sourceRaw, + width: sourceWidth, + }), + innerOpacity: 0.5, + opacity: 0.72, + }); + } subjectWashComposites.push(structureLockedComposite.wash); if (structureLockedComposite.compositeClip) { compositeClipComposites.push(structureLockedComposite.compositeClip); @@ -4966,7 +5006,7 @@ export async function POST(request: NextRequest) { scaleAdjustPromptStrategy: isScaleAdjustOperation ? scaleAdjustPatchReference ? useScaleAdjustFullFrameStructurePatch - ? "full-frame-structure-locked-draft-v6-protected-side-dark-cleared-one-shot" + ? "full-frame-structure-locked-draft-v7-protected-side-cleared-one-shot" : scaleAdjustPatchReference.structureLockedDraft ? "ai-patch-workspace-structure-locked-draft-v87-subject-alpha-clipped-one-shot" : "ai-patch-workspace-draft-v75-soft-wipe-erase-ghost-one-shot"