fix: add LoadImage and LoadVideo to canvas preview node types

LoadImage and LoadVideo were missing from CANVAS_IMAGE_PREVIEW_NODE_TYPES,
so their previews were never promoted to parent subgraph nodes. This caused
promoted preview images to not display on subgraph nodes in graph mode and
app mode when the interior node was a LoadImage or LoadVideo.
This commit is contained in:
bymyself
2026-03-25 13:39:45 -07:00
parent 04918360eb
commit b64aec26a2
2 changed files with 44 additions and 1 deletions

View File

@@ -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 {

View File

@@ -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