diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts index d3e412b85c..c73d9bbd32 100644 --- a/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts +++ b/src/renderer/extensions/vueNodes/widgets/composables/useProgressTextWidget.ts @@ -42,11 +42,11 @@ export function useTextPreviewWidget( widgetValue.value = typeof value === 'string' ? value : String(value) }, getMinHeight: () => options.minHeight ?? 42 + PADDING, - serialize: false, read_only: true }, type: inputSpec.type }) + widget.serialize = false addWidget(node, widget) return widget } diff --git a/src/utils/litegraphUtil.test.ts b/src/utils/litegraphUtil.test.ts index 50a6ef8217..4640bd4b5c 100644 --- a/src/utils/litegraphUtil.test.ts +++ b/src/utils/litegraphUtil.test.ts @@ -89,6 +89,30 @@ describe('migrateWidgetsValues', () => { const result = migrateWidgetsValues(inputDefs, widgets, widgetValues) expect(result).toEqual(['first value', 'last value']) }) + it('should correctly handle seed with unexpected value', () => { + const inputDefs: Record = { + normalInput: { + type: 'INT', + name: 'normalInput', + control_after_generate: true + }, + forceInputField: { + type: 'STRING', + name: 'forceInputField', + forceInput: true + } + } + + const widgets = [ + { name: 'normalInput', type: 'number' }, + { name: 'control_after_generate', type: 'string' } + ] as Partial[] as IWidget[] + + const widgetValues = [42, 'fixed', 'unexpected widget value'] + + const result = migrateWidgetsValues(inputDefs, widgets, widgetValues) + expect(result).toEqual([42, 'fixed']) + }) }) describe('compressWidgetInputSlots', () => { diff --git a/src/utils/litegraphUtil.ts b/src/utils/litegraphUtil.ts index 898b3ef237..c5f9d49fd9 100644 --- a/src/utils/litegraphUtil.ts +++ b/src/utils/litegraphUtil.ts @@ -112,23 +112,17 @@ export function migrateWidgetsValues( const originalWidgetsInputs = Object.values(inputDefs).filter( (input) => widgetNames.has(input.name) || input.forceInput ) - // Count the number of original widgets inputs. - const numOriginalWidgets = _.sum( - originalWidgetsInputs.map((input) => - // If the input has control, it will have 2 widgets. - input.control_after_generate || - ['seed', 'noise_seed'].includes(input.name) - ? 2 - : 1 - ) + + const widgetIndexHasForceInput = originalWidgetsInputs.flatMap((input) => + input.control_after_generate + ? [!!input.forceInput, false] + : [!!input.forceInput] ) - if (numOriginalWidgets === widgetsValues?.length) { - return _.zip(originalWidgetsInputs, widgetsValues) - .filter(([input]) => !input?.forceInput) - .map(([_, value]) => value as TWidgetValue) - } - return widgetsValues + if (widgetIndexHasForceInput.length !== widgetsValues?.length) + return widgetsValues + + return widgetsValues.filter((_, index) => !widgetIndexHasForceInput[index]) } /**