fix: avoid rejecting final scale adjust candidate

This commit is contained in:
134 2026-06-29 11:24:27 +08:00
parent be0b398e5c
commit 8ded477edd
2 changed files with 28 additions and 2 deletions

View File

@ -1476,6 +1476,13 @@ export async function POST(request: NextRequest) {
: {}), : {}),
} }
: undefined; : undefined;
const scaleAdjustFinalRetryVerificationConfig =
scaleAdjustVerificationConfig && useFalScaleAdjustMockup
? {
...scaleAdjustVerificationConfig,
allowOutsideChangedWhenChangedInside: true,
}
: scaleAdjustVerificationConfig;
const imageRequest: CanvasGenerateImageRequest = { const imageRequest: CanvasGenerateImageRequest = {
aspectRatio: resolvedAspectRatio, aspectRatio: resolvedAspectRatio,
@ -1576,7 +1583,7 @@ export async function POST(request: NextRequest) {
prompt: falScaleAdjustGuideOnlyPrompt, prompt: falScaleAdjustGuideOnlyPrompt,
promptExtend: false, promptExtend: false,
referenceImages: [annotatedUpload.url], referenceImages: [annotatedUpload.url],
scaleAdjustVerification: scaleAdjustVerificationConfig, scaleAdjustVerification: scaleAdjustFinalRetryVerificationConfig,
}, },
] ]
: undefined, : undefined,

View File

@ -52,6 +52,7 @@ export interface CanvasLocalEditCompositeConfig {
} }
export interface CanvasScaleAdjustVerificationConfig { export interface CanvasScaleAdjustVerificationConfig {
allowOutsideChangedWhenChangedInside?: boolean;
protectedRegions?: CanvasLocalEditCompositeRegion[]; protectedRegions?: CanvasLocalEditCompositeRegion[];
rejectFailedCandidates?: boolean; rejectFailedCandidates?: boolean;
sourceImageUrl: string; sourceImageUrl: string;
@ -388,6 +389,8 @@ function normalizeScaleAdjustVerificationConfig(
? { ? {
sourceImageUrl, sourceImageUrl,
regions, regions,
allowOutsideChangedWhenChangedInside:
value.allowOutsideChangedWhenChangedInside === true,
rejectFailedCandidates: value.rejectFailedCandidates === true, rejectFailedCandidates: value.rejectFailedCandidates === true,
...(targetRegions.length > 0 ? { targetRegions } : {}), ...(targetRegions.length > 0 ? { targetRegions } : {}),
...(typeof scalePercent === "number" ? { scalePercent } : {}), ...(typeof scalePercent === "number" ? { scalePercent } : {}),
@ -1161,9 +1164,25 @@ async function applyScaleAdjustVerificationToImages(params: {
score: Number(scoreEvaluation(selected).toFixed(2)), score: Number(scoreEvaluation(selected).toFixed(2)),
}); });
const outsideChangeAccepted =
verification.allowOutsideChangedWhenChangedInside &&
selected.changedInside &&
selected.outsideChanged;
if (outsideChangeAccepted) {
console.warn("[Canvas Generate Image] Scale adjust accepting best AI candidate despite outside-frame diff:", {
debugLabel,
imageIndex: selected.index,
outsidePixelStats: {
changedRatio: Number(selected.outsidePixelStats.changedRatio.toFixed(4)),
meanDiff: Number(selected.outsidePixelStats.meanDiff.toFixed(2)),
},
regionDiffScores: selected.diffScores.map((score) => Number(score.toFixed(2))),
});
}
if ( if (
verification.rejectFailedCandidates && verification.rejectFailedCandidates &&
(!selected.changedInside || selected.outsideChanged) (!selected.changedInside || (selected.outsideChanged && !outsideChangeAccepted))
) { ) {
throw new ScaleAdjustOutputRejectedError({ throw new ScaleAdjustOutputRejectedError({
reason: selected.outsideChanged reason: selected.outsideChanged