From 3856e0deeafad796f6beb53bbe14862b36e7bd4d Mon Sep 17 00:00:00 2001 From: Comfy Org PR Bot Date: Sun, 30 Nov 2025 11:14:34 +0900 Subject: [PATCH] [backport cloud/1.33] fix: loader node widget value shows placeholder instead of filename on cloud (#7046) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport of #7005 to `cloud/1.33` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7046-backport-cloud-1-33-fix-loader-node-widget-value-shows-placeholder-instead-of-filename-2bb6d73d365081bd9531c08bbaeb8634) by [Unito](https://www.unito.io) Co-authored-by: Christian Byrne --- cloud-loader-dropdown.md | 24 +++++++++++++++++++ .../components/WidgetSelectDropdown.vue | 5 ++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 cloud-loader-dropdown.md diff --git a/cloud-loader-dropdown.md b/cloud-loader-dropdown.md new file mode 100644 index 000000000..84ef26385 --- /dev/null +++ b/cloud-loader-dropdown.md @@ -0,0 +1,24 @@ +Fixes loader dropdown placeholder +=============================== + +Cloud loader dropdowns hydrate via `useAssetWidgetData(nodeType)`, so `dropdownItems` stays empty until the Asset API returns friendly filenames. Meanwhile `modelValue` already holds the saved asset and the watcher at [WidgetSelectDropdown.vue#L215-L227](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue#L215-L227) only tracks `modelValue`. It runs before assets load, fails to find a match, clears `selectedSet`, and the placeholder persists. + +```ts +watch( + modelValue, + (currentValue) => { + if (currentValue === undefined) { + selectedSet.value.clear() + return + } + const item = dropdownItems.value.find((item) => item.name === currentValue) + if (item) { + selectedSet.value.clear() + selectedSet.value.add(item.id) + } + }, + { immediate: true } +) +``` + +Once the API resolves, `dropdownItems` recomputes but nothing resyncs because the watcher never sees that change. Desktop doesn’t hit this because it still reads from `widget.options.values` immediately. diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue index e891b9bbd..78702bafa 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue @@ -213,12 +213,13 @@ const acceptTypes = computed(() => { const layoutMode = ref(props.defaultLayoutMode ?? 'grid') watch( - modelValue, - (currentValue) => { + [modelValue, dropdownItems], + ([currentValue, _dropdownItems]) => { if (currentValue === undefined) { selectedSet.value.clear() return } + const item = dropdownItems.value.find((item) => item.name === currentValue) if (item) { selectedSet.value.clear()