From a16db20e78ef1fd8674b02069418b0230e39ba9c Mon Sep 17 00:00:00 2001 From: Comfy Org PR Bot Date: Tue, 13 Jan 2026 14:15:45 +0900 Subject: [PATCH] [backport core/1.36] Fix linked asset widget promotion in vue (#8002) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport of #7895 to `core/1.36` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8002-backport-core-1-36-Fix-linked-asset-widget-promotion-in-vue-2e76d73d365081609fa6d09552938bb9) by [Unito](https://www.unito.io) Co-authored-by: AustinMroz --- src/lib/litegraph/src/subgraph/SubgraphNode.ts | 3 +++ src/lib/litegraph/src/types/widgets.ts | 2 ++ .../vueNodes/widgets/components/WidgetSelectDropdown.vue | 5 +++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/litegraph/src/subgraph/SubgraphNode.ts b/src/lib/litegraph/src/subgraph/SubgraphNode.ts index 43f59b516..e26e1cd48 100644 --- a/src/lib/litegraph/src/subgraph/SubgraphNode.ts +++ b/src/lib/litegraph/src/subgraph/SubgraphNode.ts @@ -28,6 +28,7 @@ import type { } from '@/lib/litegraph/src/types/serialisation' import type { IBaseWidget } from '@/lib/litegraph/src/types/widgets' import type { UUID } from '@/lib/litegraph/src/utils/uuid' +import { AssetWidget } from '@/lib/litegraph/src/widgets/AssetWidget' import { toConcreteWidget } from '@/lib/litegraph/src/widgets/widgetMap' import { ExecutableNodeDTO } from './ExecutableNodeDTO' @@ -333,6 +334,8 @@ export class SubgraphNode extends LGraphNode implements BaseLGraph { const promotedWidget = toConcreteWidget(widget, this).createCopyForNode( this ) + if (widget instanceof AssetWidget) + promotedWidget.options.nodeType ??= widget.node.type Object.assign(promotedWidget, { get name() { diff --git a/src/lib/litegraph/src/types/widgets.ts b/src/lib/litegraph/src/types/widgets.ts index 1cfb323d8..b2cf11557 100644 --- a/src/lib/litegraph/src/types/widgets.ts +++ b/src/lib/litegraph/src/types/widgets.ts @@ -27,6 +27,8 @@ export interface IWidgetOptions { socketless?: boolean /** If `true`, the widget will not be rendered by the Vue renderer. */ canvasOnly?: boolean + /** Used as a temporary override for determining the asset type in vue mode*/ + nodeType?: string values?: TValues /** Optional function to format values for display (e.g., hash → human-readable name) */ diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue index f460390a2..84cb49218 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue @@ -60,8 +60,9 @@ const combinedProps = computed(() => ({ })) const getAssetData = () => { - if (props.isAssetMode && props.nodeType) { - return useAssetWidgetData(toRef(() => props.nodeType)) + const nodeType = props.widget.options?.nodeType ?? props.nodeType + if (props.isAssetMode && nodeType) { + return useAssetWidgetData(toRef(nodeType)) } return null }