From 3f2a15e7eae00483c0b6c0ced9506f1ff9c95fc9 Mon Sep 17 00:00:00 2001 From: InpaintRegionEditor Dev Date: Tue, 3 Mar 2026 20:49:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=B7=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=90=8E=E6=81=A2=E5=A4=8D=E5=9B=BE=E5=83=8F=E5=92=8C=E9=80=89?= =?UTF-8?q?=E5=8C=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - onNodeCreated: 如果 image widget 已有值,加载图像 - loadImageAndDetectMask: 检查 region_coords widget 恢复之前的选区 --- web/extension.js | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/web/extension.js b/web/extension.js index a0e8682..5180b1d 100644 --- a/web/extension.js +++ b/web/extension.js @@ -773,7 +773,26 @@ async function loadImageAndDetectMask(node, imageName) { if (hasMask && minX <= maxX && minY <= maxY) { data.maskBounds = { x: minX, y: minY, width: maxX - minX + 1, height: maxY - minY + 1 }; - // 使用统一的约束函数计算选区 + + // 检查是否有之前保存的选区坐标 + const coordsWidget = node.widgets?.find(w => w.name === "region_coords"); + if (coordsWidget?.value) { + try { + const savedRegion = JSON.parse(coordsWidget.value); + if (savedRegion.x !== undefined && savedRegion.y !== undefined && + savedRegion.width !== undefined && savedRegion.height !== undefined) { + data.regionX = savedRegion.x; + data.regionY = savedRegion.y; + data.regionWidth = savedRegion.width; + data.regionHeight = savedRegion.height; + nodeImageData.set(node.id, data); + node.setDirtyCanvas(true); + return; + } + } catch (e) {} + } + + // 没有保存的选区,重新计算 constrainRegion(data, padding); } @@ -1334,6 +1353,11 @@ app.registerExtension({ if (origCb) origCb.apply(this, arguments); loadImageAndDetectMask(node, v); }; + + // 刷新节点时:widget 已有值,需要加载图像 + if (imgW.value) { + setTimeout(() => loadImageAndDetectMask(node, imgW.value), 0); + } } // 监听 padding 变化