From 0507d333fe70c58e6bd18056ea901882a2c734f6 Mon Sep 17 00:00:00 2001 From: Comfy Org PR Bot Date: Mon, 24 Nov 2025 04:20:20 +0900 Subject: [PATCH] [backport core/1.32] Feat: Show Progress Text on Vue Nodes, Markdown for Preview as Text (#6857) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport of #6805 to `core/1.32` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6857-backport-core-1-32-Feat-Show-Progress-Text-on-Vue-Nodes-Markdown-for-Preview-as-Text-2b46d73d3650817691d3d5ce30e7d4e3) by [Unito](https://www.unito.io) Co-authored-by: Alexander Brown --- src/extensions/core/previewAny.ts | 4 ++-- .../widgets/components/WidgetMarkdown.vue | 2 +- .../widgets/composables/useProgressTextWidget.ts | 15 +++++++++------ .../vueNodes/widgets/registry/widgetRegistry.ts | 6 +++++- src/scripts/domWidget.ts | 5 +++-- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/extensions/core/previewAny.ts b/src/extensions/core/previewAny.ts index 3de4ca2f3..d14cfa587 100644 --- a/src/extensions/core/previewAny.ts +++ b/src/extensions/core/previewAny.ts @@ -17,10 +17,10 @@ useExtensionService().registerExtension({ nodeType.prototype.onNodeCreated = function () { onNodeCreated ? onNodeCreated.apply(this, []) : undefined - const showValueWidget = ComfyWidgets['STRING']( + const showValueWidget = ComfyWidgets['MARKDOWN']( this, 'preview', - ['STRING', { multiline: true }], + ['MARKDOWN', {}], app ).widget as DOMWidget diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue index 5d6bc3620..fea8df055 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue @@ -57,7 +57,7 @@ const renderedHtml = computed(() => { // Methods const startEditing = async () => { - if (isEditing.value) return + if (isEditing.value || widget.options?.read_only) return isEditing.value = true await nextTick() diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts index 2e7f35f86..d3e412b85 100644 --- a/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts +++ b/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts @@ -6,6 +6,7 @@ import type { InputSpec } from '@/schemas/nodeDef/nodeDefSchemaV2' import { ComponentWidgetImpl, addWidget } from '@/scripts/domWidget' import type { ComponentWidgetStandardProps } from '@/scripts/domWidget' import type { ComfyWidgetConstructorV2 } from '@/scripts/widgets' +import type { IBaseWidget } from '@/lib/litegraph/src/types/widgets' type TextPreviewCustomProps = Omit< InstanceType['$props'], @@ -14,15 +15,15 @@ type TextPreviewCustomProps = Omit< const PADDING = 16 -export const useTextPreviewWidget = ( +export function useTextPreviewWidget( options: { minHeight?: number } = {} -) => { - const widgetConstructor: ComfyWidgetConstructorV2 = ( +): ComfyWidgetConstructorV2 { + function widgetConstructor( node: LGraphNode, inputSpec: InputSpec - ) => { + ): IBaseWidget { const widgetValue = ref('') const widget = new ComponentWidgetImpl< string | object, @@ -41,8 +42,10 @@ export const useTextPreviewWidget = ( widgetValue.value = typeof value === 'string' ? value : String(value) }, getMinHeight: () => options.minHeight ?? 42 + PADDING, - serialize: false - } + serialize: false, + read_only: true + }, + type: inputSpec.type }) addWidget(node, widget) return widget diff --git a/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts b/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts index 4f91c0c1b..f093f88b9 100644 --- a/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts +++ b/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts @@ -134,7 +134,11 @@ const coreWidgetDefinitions: Array<[string, WidgetDefinition]> = [ ], [ 'markdown', - { component: WidgetMarkdown, aliases: ['MARKDOWN'], essential: false } + { + component: WidgetMarkdown, + aliases: ['MARKDOWN', 'progressText'], + essential: false + } ], ['legacy', { component: WidgetLegacy, aliases: [], essential: true }], [ diff --git a/src/scripts/domWidget.ts b/src/scripts/domWidget.ts index a550a4145..16124597f 100644 --- a/src/scripts/domWidget.ts +++ b/src/scripts/domWidget.ts @@ -303,10 +303,11 @@ export class ComponentWidgetImpl< inputSpec: InputSpec props?: P options: DOMWidgetOptions + type?: string }) { super({ - ...obj, - type: 'custom' + type: 'custom', + ...obj }) this.component = obj.component this.inputSpec = obj.inputSpec