mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-12 08:30:08 +00:00
Under a combination of many edge cases, the `widget_values` migration code added in #3326 would cause the progress text on a "Recraft Text to Image" node to incorrectly deserialize into the `control_after_generate` - widgets_values is of length 1 greater than it should be because progress text serializes - It should not, there is no code to deserialize it - negative_prompt has force_input set and skips serialization - Migration only applies when `widgets_values` is equal to actual inputs length. The two above edge cases cancel to make this true - Seed is accounted for when calculating the length of widgets, but not when applying the migration - Migration occurs even though we track workflow version now and have an accurate way of determining that it can not be needed The two primary edge cases which cause the bug are both addressed - `options.serialize` does nothing and has never done anything. I've been guilty of making the same mistake in the ancient past, and want to clean up the misconception where I can. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8625-Fix-incorrect-widgetValue-migration-2fe6d73d365081a683b4c675eaeebb6c) by [Unito](https://www.unito.io)
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { ref } from 'vue'
|
|
|
|
import TextPreviewWidget from '@/components/graph/widgets/TextPreviewWidget.vue'
|
|
import type { LGraphNode } from '@/lib/litegraph/src/litegraph'
|
|
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<typeof TextPreviewWidget>['$props'],
|
|
ComponentWidgetStandardProps
|
|
>
|
|
|
|
const PADDING = 16
|
|
|
|
export function useTextPreviewWidget(
|
|
options: {
|
|
minHeight?: number
|
|
} = {}
|
|
): ComfyWidgetConstructorV2 {
|
|
function widgetConstructor(
|
|
node: LGraphNode,
|
|
inputSpec: InputSpec
|
|
): IBaseWidget {
|
|
const widgetValue = ref<string>('')
|
|
const widget = new ComponentWidgetImpl<
|
|
string | object,
|
|
TextPreviewCustomProps
|
|
>({
|
|
node,
|
|
name: inputSpec.name,
|
|
component: TextPreviewWidget,
|
|
inputSpec,
|
|
props: {
|
|
nodeId: node.id
|
|
},
|
|
options: {
|
|
getValue: () => widgetValue.value,
|
|
setValue: (value: string | object) => {
|
|
widgetValue.value = typeof value === 'string' ? value : String(value)
|
|
},
|
|
getMinHeight: () => options.minHeight ?? 42 + PADDING,
|
|
read_only: true
|
|
},
|
|
type: inputSpec.type
|
|
})
|
|
widget.serialize = false
|
|
addWidget(node, widget)
|
|
return widget
|
|
}
|
|
|
|
return widgetConstructor
|
|
}
|