diff --git a/src/composables/node/canvasImagePreviewTypes.ts b/src/composables/node/canvasImagePreviewTypes.ts index 03013db13e..498e6bb1ef 100644 --- a/src/composables/node/canvasImagePreviewTypes.ts +++ b/src/composables/node/canvasImagePreviewTypes.ts @@ -4,7 +4,9 @@ export const CANVAS_IMAGE_PREVIEW_WIDGET = '$$canvas-image-preview' const CANVAS_IMAGE_PREVIEW_NODE_TYPES = new Set([ 'PreviewImage', 'SaveImage', - 'GLSLShader' + 'GLSLShader', + 'LoadImage', + 'LoadVideo' ]) export function supportsVirtualCanvasImagePreview(node: LGraphNode): boolean { diff --git a/src/core/graph/subgraph/promotionUtils.test.ts b/src/core/graph/subgraph/promotionUtils.test.ts index b5f4d949c7..999953b0d1 100644 --- a/src/core/graph/subgraph/promotionUtils.test.ts +++ b/src/core/graph/subgraph/promotionUtils.test.ts @@ -203,6 +203,28 @@ describe('getPromotableWidgets', () => { ).toBe(true) }) + it('adds virtual canvas preview widget for LoadImage nodes', () => { + const node = new LGraphNode('LoadImage') + node.type = 'LoadImage' + + const widgets = getPromotableWidgets(node) + + expect( + widgets.some((widget) => widget.name === CANVAS_IMAGE_PREVIEW_WIDGET) + ).toBe(true) + }) + + it('adds virtual canvas preview widget for LoadVideo nodes', () => { + const node = new LGraphNode('LoadVideo') + node.type = 'LoadVideo' + + const widgets = getPromotableWidgets(node) + + expect( + widgets.some((widget) => widget.name === CANVAS_IMAGE_PREVIEW_WIDGET) + ).toBe(true) + }) + it('does not add virtual canvas preview widget for non-image nodes', () => { const node = new LGraphNode('TextNode') node.addOutput('TEXT', 'STRING') @@ -271,6 +293,25 @@ describe('promoteRecommendedWidgets', () => { expect(updatePreviewsMock).not.toHaveBeenCalled() }) + it('eagerly promotes virtual preview widget for LoadImage nodes', () => { + const subgraph = createTestSubgraph() + const subgraphNode = createTestSubgraphNode(subgraph) + const loadImageNode = new LGraphNode('LoadImage') + loadImageNode.type = 'LoadImage' + subgraph.add(loadImageNode) + + promoteRecommendedWidgets(subgraphNode) + + const store = usePromotionStore() + expect( + store.isPromoted(subgraphNode.rootGraph.id, subgraphNode.id, { + sourceNodeId: String(loadImageNode.id), + sourceWidgetName: CANVAS_IMAGE_PREVIEW_WIDGET + }) + ).toBe(true) + expect(updatePreviewsMock).not.toHaveBeenCalled() + }) + it('registers $$canvas-image-preview on configure for GLSLShader in saved workflow', () => { // Simulate loading a saved workflow where proxyWidgets does NOT contain // the $$canvas-image-preview entry (e.g. blueprint authored before the