From fa56a2e527980619fcd9d9ec65a6ccc1b9be50c6 Mon Sep 17 00:00:00 2001 From: akawana Date: Tue, 10 Feb 2026 21:54:30 +0800 Subject: [PATCH] f --- js/RGBYPMaskEditor_io.js | 40 ++++++++++++++++++++++++++++++++-------- nodes/RGBYPMaskBridge.py | 9 +++------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/js/RGBYPMaskEditor_io.js b/js/RGBYPMaskEditor_io.js index 4543f96..cd4a731 100644 --- a/js/RGBYPMaskEditor_io.js +++ b/js/RGBYPMaskEditor_io.js @@ -136,15 +136,39 @@ export function initBaseImageAndCanvas() { state.rgbypHadJsonOnOpen = false; } + // if (!baseImg) { + // try { + // baseImg = await loadImageFromUrl(withCacheBust(fallbackSrc)); + // } catch (e) { + // console.error("[RGBYP] Failed to load image from node src", fallbackSrc, e); + // return; + // } + // } + if (!baseImg) { - try { - baseImg = await loadImageFromUrl(withCacheBust(fallbackSrc)); - } catch (e) { - console.error("[RGBYP] Failed to load image from node src", fallbackSrc, e); - return; + // Variant 1: use already-loaded preview image from node memory (no disk/network) + if (node.imgs && Array.isArray(node.imgs) && node.imgs.length > 0) { + const memImg = node.imgs[0]; + const w = memImg?.naturalWidth || memImg?.width || 0; + const h = memImg?.naturalHeight || memImg?.height || 0; + + if (memImg instanceof Image && w > 0 && h > 0) { + console.log("[RGBYP] initBaseImageAndCanvas: using node.imgs[0] from memory", { w, h }); + baseImg = memImg; + } + } + + // Fallback: load via URL + if (!baseImg) { + try { + console.log("[RGBYP] initBaseImageAndCanvas: loading base from URL", fallbackSrc); + baseImg = await loadImageFromUrl(withCacheBust(fallbackSrc)); + } catch (e) { + console.error("[RGBYP] Failed to load image from node src", fallbackSrc, e); + return; + } } } - state.baseImg = baseImg; state.maskImg = maskImg || null; @@ -174,7 +198,7 @@ export function initBaseImageAndCanvas() { const mctx = state.maskCanvas.getContext("2d"); mctx.clearRect(0, 0, imgW, imgH); // if (maskImg) { - // mctx.drawImage(maskImg, 0, 0); + // mctx.drawImage(maskImg, 0, 0); // } if (maskImg) { mctx.drawImage(maskImg, 0, 0, imgW, imgH); @@ -371,6 +395,6 @@ export function fitImageToPanel(state) { state.zoom = 1; panel.scrollLeft = Math.max(0, (container.scrollWidth - boxW) / 2); - panel.scrollTop = Math.max(0, (container.scrollHeight - boxH) / 2); + panel.scrollTop = Math.max(0, (container.scrollHeight - boxH) / 2); } diff --git a/nodes/RGBYPMaskBridge.py b/nodes/RGBYPMaskBridge.py index 51002cc..be2a7ca 100644 --- a/nodes/RGBYPMaskBridge.py +++ b/nodes/RGBYPMaskBridge.py @@ -150,15 +150,12 @@ class RGBYPMaskBridge: preview_mask_available = False preview_filename = None - # last_fp = self._get_last_input_fp() - # isInputImageChanged, new_fp = is_input_image_changed_variantA(last_fp, image) - # self._set_last_input_fp(new_fp) + last_fp = self._get_last_input_fp() + isInputImageChanged, new_fp = is_input_image_changed_variantA(last_fp, image) + self._set_last_input_fp(new_fp) # if last_fp is None: # isInputImageChanged = False - last_sig = self._get_last_input_fp() - isInputImageChanged, new_sig = is_image_changed(last_sig, image, grid=12) - self._set_last_input_fp(new_sig) # first run after server start: don't trigger the "input changed" branch # if last_sig is None: