From 3ee921119de8ead03d9864a1663ef9d01a9158e2 Mon Sep 17 00:00:00 2001 From: Christian Byrne Date: Sat, 29 Nov 2025 17:13:32 -0800 Subject: [PATCH] fix: loader node widget value shows placeholder instead of filename on cloud (#7005) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes issue on cloud where the Loader node dropdowns showed placeholder values (after refresh) in the widget UI despite a value being loaded. 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 only tracks `modelValue`: https://github.com/Comfy-Org/ComfyUI_frontend/blob/df653d6ce183fde7a67feb81c1a029143e521458/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue#L215-L226 This watcher runs before assets load, fails to find a match, clears `selectedSet`, and the placeholder persists: https://github.com/Comfy-Org/ComfyUI_frontend/blob/df653d6ce183fde7a67feb81c1a029143e521458/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue#L222-L224 Once the assets 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. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7005-fix-loader-node-widget-value-shows-placeholder-instead-of-filename-on-cloud-2b86d73d36508125a16de5c9e366b014) by [Unito](https://www.unito.io) --- 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()