11import { ref } from 'vue'
22
33import MultiSelectWidget from '@/components/graph/widgets/MultiSelectWidget.vue'
4+ import { t } from '@/i18n'
45import type { LGraphNode } from '@/lib/litegraph/src/litegraph'
5- import type { IComboWidget } from '@/lib/litegraph/src/types/widgets'
6+ import type {
7+ IBaseWidget ,
8+ IComboWidget
9+ } from '@/lib/litegraph/src/types/widgets'
610import { transformInputSpecV2ToV1 } from '@/schemas/nodeDef/migration'
711import {
812 ComboInputSpec ,
@@ -18,6 +22,8 @@ import {
1822 type ComfyWidgetConstructorV2 ,
1923 addValueControlWidgets
2024} from '@/scripts/widgets'
25+ import { assetService } from '@/services/assetService'
26+ import { useSettingStore } from '@/stores/settingStore'
2127
2228import { useRemoteWidget } from './useRemoteWidget'
2329
@@ -28,7 +34,10 @@ const getDefaultValue = (inputSpec: ComboInputSpec) => {
2834 return undefined
2935}
3036
31- const addMultiSelectWidget = ( node : LGraphNode , inputSpec : ComboInputSpec ) => {
37+ const addMultiSelectWidget = (
38+ node : LGraphNode ,
39+ inputSpec : ComboInputSpec
40+ ) : IBaseWidget => {
3241 const widgetValue = ref < string [ ] > ( [ ] )
3342 const widget = new ComponentWidgetImpl ( {
3443 node,
@@ -48,7 +57,36 @@ const addMultiSelectWidget = (node: LGraphNode, inputSpec: ComboInputSpec) => {
4857 return widget
4958}
5059
51- const addComboWidget = ( node : LGraphNode , inputSpec : ComboInputSpec ) => {
60+ const addComboWidget = (
61+ node : LGraphNode ,
62+ inputSpec : ComboInputSpec
63+ ) : IBaseWidget => {
64+ const settingStore = useSettingStore ( )
65+ const isUsingAssetAPI = settingStore . get ( 'Comfy.Assets.UseAssetAPI' )
66+ const isEligible = assetService . isAssetBrowserEligible (
67+ inputSpec . name ,
68+ node . comfyClass || ''
69+ )
70+
71+ if ( isUsingAssetAPI && isEligible ) {
72+ // Create button widget for Asset Browser
73+ const currentValue = getDefaultValue ( inputSpec )
74+
75+ const widget = node . addWidget (
76+ 'button' ,
77+ inputSpec . name ,
78+ t ( 'widgets.selectModel' ) ,
79+ ( ) => {
80+ console . log (
81+ `Asset Browser would open here for:\nNode: ${ node . type } \nWidget: ${ inputSpec . name } \nCurrent Value:${ currentValue } `
82+ )
83+ }
84+ )
85+
86+ return widget
87+ }
88+
89+ // Create normal combo widget
5290 const defaultValue = getDefaultValue ( inputSpec )
5391 const comboOptions = inputSpec . options ?? [ ]
5492 const widget = node . addWidget (
@@ -59,14 +97,14 @@ const addComboWidget = (node: LGraphNode, inputSpec: ComboInputSpec) => {
5997 {
6098 values : comboOptions
6199 }
62- ) as IComboWidget
100+ )
63101
64102 if ( inputSpec . remote ) {
65103 const remoteWidget = useRemoteWidget ( {
66104 remoteConfig : inputSpec . remote ,
67105 defaultValue,
68106 node,
69- widget
107+ widget : widget as IComboWidget
70108 } )
71109 if ( inputSpec . remote . refresh_button ) remoteWidget . addRefreshButton ( )
72110
@@ -84,7 +122,7 @@ const addComboWidget = (node: LGraphNode, inputSpec: ComboInputSpec) => {
84122 if ( inputSpec . control_after_generate ) {
85123 widget . linkedWidgets = addValueControlWidgets (
86124 node ,
87- widget ,
125+ widget as IComboWidget ,
88126 undefined ,
89127 undefined ,
90128 transformInputSpecV2ToV1 ( inputSpec )
0 commit comments