diff --git a/js/CanvasView.js b/js/CanvasView.js index 67d88e5..256f4c4 100644 --- a/js/CanvasView.js +++ b/js/CanvasView.js @@ -842,6 +842,7 @@ async function createCanvasWidget(node, widget, app) { delete newLayer.imageId; canvas.layers[selectedLayerIndex] = newLayer; canvas.canvasSelection.updateSelection([newLayer]); + canvas.canvasLayersPanel?.onLayersChanged(); // Invalidate processed image cache when layer image changes (matting) canvas.canvasLayers.invalidateProcessedImageCache(newLayer.id); canvas.render(); diff --git a/src/CanvasView.ts b/src/CanvasView.ts index ae099c2..f933df6 100644 --- a/src/CanvasView.ts +++ b/src/CanvasView.ts @@ -1046,6 +1046,7 @@ async function createCanvasWidget(node: ComfyNode, widget: any, app: ComfyApp): canvas.layers[selectedLayerIndex] = newLayer; canvas.canvasSelection.updateSelection([newLayer]); + canvas.canvasLayersPanel?.onLayersChanged(); // Invalidate processed image cache when layer image changes (matting) canvas.canvasLayers.invalidateProcessedImageCache(newLayer.id); diff --git a/tests/test_matting_status_characterization.mjs b/tests/test_matting_status_characterization.mjs index c385bc6..8f8e68e 100644 --- a/tests/test_matting_status_characterization.mjs +++ b/tests/test_matting_status_characterization.mjs @@ -58,3 +58,10 @@ test('CanvasView delegates both model status checks to the shared helper', () => assert.doesNotMatch(canvasViewSource, /const modelCheckUrl =/); assert.doesNotMatch(canvasViewSource, /fetch\(['"]\/matting\/check-model/); }); + +test('Matting refreshes the layer panel after replacing a layer object', () => { + assert.match( + canvasViewSource, + /canvas\.layers\[selectedLayerIndex\] = newLayer;\s+canvas\.canvasSelection\.updateSelection\(\[newLayer\]\);\s+canvas\.canvasLayersPanel\?\.onLayersChanged\(\);/, + ); +});