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 变化