var __defProp=Object.defineProperty,__typeError=e=>{throw TypeError(e)},__defNormalProp=(e,t,i)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,__publicField=(e,t,i)=>__defNormalProp(e,"symbol"!=typeof t?t+"":t,i),__accessCheck=(e,t,i)=>t.has(e)||__typeError("Cannot "+i),__privateGet=(e,t,i)=>(__accessCheck(e,t,"read from private field"),i?i.call(e):t.get(e)),__privateAdd=(e,t,i)=>t.has(e)?__typeError("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),__privateSet=(e,t,i,s)=>(__accessCheck(e,t,"write to private field"),s?s.call(e,i):t.set(e,i),i),__privateMethod=(e,t,i)=>(__accessCheck(e,t,"access private method"),i),_a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m,_n,_pos,_size,_node,_value,_ComboWidget_instances,getValues_fn,canUseButton_fn,tryChangeValue_fn;import{d as defineStore,h as hotkeys,s as script,a as script$1,T as Tooltip,b as script$2,c as storeToRefs,e as script$3,f as script$4,g as script$5,i as script$6}from"./vendor-BWlTOcRr.js";import{c as cloneDeep}from"./lodash-CZi7izHi.js";import{r as ref,m as markRaw,t as toRaw,u as useModel,o as onMounted,a as openBlock,c as createElementBlock,b as createBaseVNode,d as createVNode,e as unref,w as withDirectives,f as createBlock,g as mergeModels,n as normalizeStyle,h as renderSlot,i as computed,j as watch,k as normalizeClass,l as createCommentVNode,p as withCtx,q as toDisplayString,s as withModifiers,v as reactive,F as Fragment,x as renderList}from"./vue-DAoaJb2i.js";import{u as useEventListener,a as useIntersectionObserver,b as useMouseInElement,c as useElementHover}from"./vueuse-CqzKat4r.js";let app$1=(null==(_b=null==(_a=window.comfyAPI)?void 0:_a.app)?void 0:_b.app)||null,api=(null==(_d=null==(_c=window.comfyAPI)?void 0:_c.api)?void 0:_d.api)||null,$el=(null==(_f=null==(_e=window.comfyAPI)?void 0:_e.ui)?void 0:_f.$el)||null,ComfyDialog=(null==(_h=null==(_g=window.comfyAPI)?void 0:_g.dialog)?void 0:_h.ComfyDialog)||null,ComfyWidgets=(null==(_j=null==(_i=window.comfyAPI)?void 0:_i.widgets)?void 0:_j.ComfyWidgets)||null,applyTextReplacements=(null==(_l=null==(_k=window.comfyAPI)?void 0:_k.utils)?void 0:_l.applyTextReplacements)||null,GroupNodeConfig=(null==(_n=null==(_m=window.comfyAPI)?void 0:_m.groupNode)?void 0:_n.GroupNodeConfig)||null,registerExtension=e=>{try{app$1.registerExtension(e)}catch(t){}};const getUserSettingsValue=e=>{var t,i;return e?null==(i=null==(t=null==app$1?void 0:app$1.ui)?void 0:t.settings)?void 0:i.getSettingValue(e):null};function getSetting(e,t=null){try{let i=e?getUserSettingsValue(e):null;return null==i&&(i=t?localStorage[t]:localStorage[e]||null),i}catch(i){return null}}function getSettingsLookup(e,t=e=>{}){var i;const s=null==(i=app$1.ui.settings.settingsLookup)?void 0:i[e];s&&(s.onChange=e=>t(e))}async function setSetting(e,t,i=null){var s,o;if(!e)throw new Error("Invalid arguments");try{(null==(o=null==(s=null==app$1?void 0:app$1.ui)?void 0:s.settings)?void 0:o.setSettingValue)?app$1.ui.settings.setSettingValue(e,t):await api.storeSetting(e,t),i&&(localStorage[i]="object"==typeof t?JSON.stringify(t):t)}catch(a){}}function addSetting(e){app$1.ui.settings.settingsLookup[e.id]||app$1.ui.settings.addSetting(e)}function getLocale(){return getSetting("Comfy.Locale")}const zhCN={"Workflow created by":"工作流创建者","Watch more video content":"观看更多视频内容","Workflow Guide":"工作流指南","💎 View Checkpoint Info...":"💎 查看 Checkpoint 信息...","💎 View Lora Info...":"💎 查看 Lora 信息...","🔃 Reload Node":"🔃 刷新节点","Updated At:":"最近更新:","Created At:":"首次发布:","✏️ Edit":"✏️ 编辑","💾 Save":"💾 保存","No notes":"当前还没有备注内容","Saving Notes...":"正在保存备注...","Type your notes here":"在这里输入备注内容",ModelName:"模型名称","Models Required":"所需模型","Download Model":"下载模型","Source Url":"模型源地址",Notes:"备注",Type:"类型","Trained Words":"训练词",BaseModel:"基础算法",Details:"详情",Description:"描述",Download:"下载量",Source:"来源","Saving Preview...":"正在保存预览图...","Saving Succeed":"保存成功","Clean SuccessFully":"清理成功","Clean Failed":"清理失败","Saving Failed":"保存失败","No COMBO link":"沒有找到COMBO连接","Reboot ComfyUI":"重启ComfyUI","Are you sure you'd like to reboot the server?":"是否要重启ComfyUI?","NODES MAP":"管理节点与组",NodesMap:"节点与组","Nodes map sorting mode":"管理节点组排序模式","Search by Node ID/Name...":"通过节点ID/名称搜索...","No Nodes":"未找到节点","No nodes found in the map":"在工作流程中没有找到节点","No nodes found in the search":"未找到与搜索匹配的节点","Jump to this node":"跳转到该节点","Rename node":"重命名节点","Delete node":"删除节点","Rename group":"重命名组","Delete group":"删除组","Expand All":"展开所有组","Collapse All":"折叠所有组",Close:"关闭","Default automatic sorting, if set to manual, groups can be dragged and dropped and the sorting results saved.":"默认自动排序,如果设置为手动,组可以拖放并保存排序结果。","For drag and drop sorting, please find Nodes map sorting mode in Settings->EasyUse and change it to manual":"如需拖拽排序请在设置->EasyUse节点中找到管理节点组排序模式并修改成 manual",Queue:"队列","Cleanup Of VRAM Usage":"清理显存占用","Please stop all running tasks before cleaning GPU":"请在清理GPU之前停止所有运行中的任务",Always:"启用中",Bypass:"已忽略",Never:"已停用","Auto Sorting":"自动排序","Toggle `Show/Hide` can set mode of group, LongPress can set group nodes to never":"点击`启用中/已忽略`可设置组模式, 长按可停用该组节点","Enable Shift+Up/Down/Left/Right key and Shift+Ctrl+Alt+Left/Right to align selected nodes":"启用 Shift+上/下/左/右 和 Shift+Ctrl+Alt+左/右 键对齐选中的节点","Enable Shift+Ctrl+Left/Right key to normalize selected nodes":"启用 Shift+Ctrl+左/右 键规范化选中的节点","Enable Shift+g to add selected nodes to a group":"启用 Shift+g 键将选中的节点添加一个组","Enable Shift+r to unload models and node cache":"启用 Shift+r 键卸载模型和节点缓存","Enable Shift+m to toggle nodes map":"启用 Shift+m 键显隐管理节点组","Enable Up/Down/Left/Right key to jump nearest nodes":"启用 上/下/左/右 键跳转到最近的前后节点","Enable Alt+1~9 to paste nodes from nodes template":"启用 Alt+1~9 从节点模板粘贴到工作流中","Enable contextMenu auto nest subdirectories":"启用上下文菜单自动嵌套子目录","Enable right-click menu to add node A~Z sorting":"启用右键菜单中新建节点A~Z排序","Enable model thumbnails display":"启动模型预览图显示","Enable nodes runtime display":"启动节点运行时间显示","Enable chain get node and set node with parent nodes":"启用将获取点和设置点与父节点链在一起","Maximum number of model thumbnails displayed":"显示的模型缩略图的最大数量","Too many thumbnails will affect the first loading time, set the maximum value to not load the thumbnail function when there are too many models's thumbnail":"太多的缩略图会影响首次加载时间,当模型缩略图太多时,设置最大值以不加载缩略图功能","Too many thumbnails, have closed the display":"模型缩略图太多啦,为您关闭了显示","Shift+Up/Down/Left/Right can align selected nodes, Shift+Ctrl+Alt+Left/Right can distribute horizontal/vertical nodes":"Shift+上/下/左/右 可以对齐选中的节点, Shift+Ctrl+Alt+左/右 可以水平/垂直分布节点","Enable Shift+Ctrl+Left key to normalize width and Shift+Ctrl+Right key to normalize height":"启用 Shift+Ctrl+左 键规范化宽度和 Shift+Ctrl+右 键规范化高度","After v1.2.39, Ctrl+g can be used instead of it":"从v1.2.39开始,可以使用Ctrl+g代替","Styles Selector Display Type":"样式选择器显示类型","Styles Selector Display Type, if set to 'Gird', it will display as a gird, if set to 'List', it will display as a list":"样式选择器显示类型,如果设置为“网格”,则显示为网格,如果设置为“列表”,则显示为列表","Use three shortcut buttons in the right-click menu":"在右键菜单中使用三个快捷按钮","Enable Nodes Map":"启用节点组管理","Display Groups Only":"仅显示组","Display Node ID":"显示节点ID","You need to refresh the page to update successfully":"您需要刷新页面以成功更新","Get styles list Failed":"获取样式列表失败","Get style image Failed":"获取样式图片失败","Empty All":"清空所有","Type here to search styles ...":"在此处输入以搜索样式 ...","Loading UserInfo...":"正在获取用户信息...","Please set the APIKEY first":"请先设置APIKEY","Setting APIKEY":"设置APIKEY","Save Account Info":"保存账号信息",Choose:"选择",Delete:"删除",Edit:"编辑","At least one account is required":"删除失败: 至少需要一个账户","APIKEY is not Empty":"APIKEY 不能为空","Add Account":"添加账号","Getting Your APIKEY":"获取您的APIKEY",Canceling:"正在取消","Cancel current run":"取消当前运行","Waiting for selection...":"等待选择中...","Using last selection":"使用上次选择","Pass Through":"跳过选择","Unknown Mode":"未知模式","Choose Selected Images":"选择选中的图片","Choose images to continue":"选择图片以继续","Please run first":"请先运行队列","Progress selected":"处理选中的图片","Progress selected image":"处理选中的图片","Please select images to continue":"请选择图片以继续",Background:"背景",Hat:"帽子",Hair:"头发",Body:"身体",Face:"脸部",Clothes:"衣服",Others:"其他",Glove:"手套",Glasses:"眼镜",Sunglasses:"太阳镜","Upper-clothes":"上衣","Top-clothes":"上衣","Bottom-clothes":"下身装","Torso-skin":"皮肤",Dress:"连衣裙",Belt:"腰带",Coat:"外套",Socks:"袜子",Pants:"裤子",Jumpsuits:"连体衣",Bag:"包",Scarf:"围巾",Skirt:"裙子","Left-arm":"左臂","Right-arm":"右臂","Left-leg":"左腿","Right-leg":"右腿","Left-foot":"左脚","Right-foot":"右脚","Left-shoe":"左鞋","Right-shoe":"右鞋","select mask components":"选择分割部位","select items":"选择项",Unlabelled:"未标记","shirt, blouse":"衬衫,女式衬衫","top, t-shirt, sweatshirt":"上衣,T恤,运动衫",sweater:"毛衣",cardigan:"开襟毛衣",jacket:"夹克",vest:"背心",pants:"长裤",shorts:"短裤",skirt:"裙子",coat:"外套",dress:"连衣裙",jumpsuit:"连体衣",cape:"斗篷",glasses:"眼镜",hat:"帽子","headband, head covering, hair accessory":"头带,头饰,发饰",tie:"领带",glove:"手套",watch:"手表",belt:"腰带","leg warmer":"护腿","tights, stockings":"紧身袜,丝袜",sock:"袜子",shoe:"鞋子","bag, wallet":"包,钱包",scarf:"围巾",umbrella:"雨伞",hood:"帽兜",collar:"领子",lapel:"翻领",epaulette:"肩章",sleeve:"袖子",pocket:"口袋",neckline:"领口",buckle:"扣环",zipper:"拉链",applique:"贴花",bead:"珠子",bow:"蝴蝶结",flower:"花朵装饰",fringe:"流苏",ribbon:"丝带",rivet:"铆钉",ruffle:"褶边",sequin:"亮片",tassel:"流苏穗",background:"背景",skin:"皮肤",nose:"鼻子",eyeglasses:"眼镜",left_eye:"左眼",right_eye:"右眼",left_eyebrow:"左眉毛",right_eyebrow:"右眉毛",left_ear:"左耳",right_ear:"右耳",mouth:"嘴巴",upper_lip:"上唇",lower_lip:"下唇",hair:"头发",earring:"耳环",necklace:"项链",neck:"脖子",clothing:"服装",s:"秒","No Node Templates Found":"未找到节点模板预设","Get Node Templates File Failed":"获取节点模板文件失败","Node template with {key} not set":"未设置快捷键为{key}的节点预设","ComfyUI Basic":"ComfyUI 基础节点","Recommend Nodes":"推荐节点","Others A~Z":"其他节点 A~Z","The maximum number of inputs is 20":"输入数量最大20个","The maximum number of outputs is 20":"输出数量最大20个","Stop recording":"停止录音","Voice input":"语音输入",Continue:"继续",Stop:"停止",now:"当前",prev:"上一步"},$t=(e,t=!1)=>{switch(getLocale()){case"zh-CN":case"zh":return zhCN[e]||e;default:return e}};function addPreconnect(e,t=!1){const i=document.createElement("link");i.rel="preconnect",i.href=e,t&&(i.crossorigin=""),document.head.appendChild(i)}function addCss(e,t=!0,i="ComfyUI-Easy-Use"){const s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.href=t?`extensions/${i}/${e}`:e,document.head.appendChild(s)}const PREFIX_CLASS="comfyui-easyuse-",DARK_THEME_CLASS="dark-theme",THEME_COLOR="#60a5fa",CUSTOM_LINK_TYPES_COLOR={PIPE_LINE:"#7737AA",PIPE_LINE_SDXL:"#7737AA",INT:"#29699C",X_Y:"#38291f",XYPLOT:"#74DA5D",LORA_STACK:"#94dccd",CONTROL_NET_STACK:"#94dccd",FLOW_CONTROL:"#373780"},MAX_SEED_NUM=0x4000000000000,COMFYUI_NODE_BASIC_CATEGORY=["loaders","latent","image","mask","sampling","_for_testing","advanced","utils","api","api node","加载器","Latent","图像","遮罩","采样","_用于测试","高级","工具","API","api 节点","chargeurs","latent","image","masque","échantillonnage","_pour_test","avancé","outils","nœud api","загрузчики","латентный","изображение","маска","выборка","_для_тестирования","расширенный","инструменты","api","api узел","로더","잠재","이미지","마스크","샘플링","_테스트용","고급","도구","api","api 노드","ローダー","潜在","画像","マスク","サンプリング","_テスト用","高度な","ツール","api","apiノード","cargadores","latente","imagen","máscara","muestreo","_para_pruebas","avanzado","herramientas","api","nodo api"],HUMAN_SEGMENTATION={selfie_multiclass_256x256:["Background","Hair","Body","Face","Clothes","Others"],human_parsing_lip:["Background","Hat","Hair","Glove","Sunglasses","Upper-clothes","Dress","Coat","Socks","Pants","Jumpsuits","Scarf","Skirt","Face","Left-arm","Right-arm","Left-leg","Right-leg","Left-shoe","Right-shoe"],"human_parts (deeplabv3p)":["Background","Face","Hair","Glasses","Top-clothes","Bottom-clothes","Torso-skin","Left-arm","Right-arm","Left-leg","Right-leg","Left-foot","Right-foot"],segformer_b3_clothes:{Background:0,Hat:1,Hair:2,Sunglasses:3,"Upper-clothes":4,Skirt:5,Pants:6,Dress:7,Belt:8,"Left-shoe":9,"Right-shoe":10,Face:11,"Left-leg":12,"Right-leg":13,"Left-arm":14,"Right-arm":15,Bag:16,Scarf:17},segformer_b3_fashion:{Unlabelled:0,"shirt, blouse":1,"top, t-shirt, sweatshirt":2,sweater:3,cardigan:4,jacket:5,vest:6,pants:7,shorts:8,skirt:9,coat:10,dress:11,jumpsuit:12,cape:13,glasses:14,hat:15,"headband, head covering, hair accessory":16,tie:17,glove:18,watch:19,belt:20,"leg warmer":21,"tights, stockings":22,sock:23,shoe:24,"bag, wallet":25,scarf:26,umbrella:27,hood:28,collar:29,lapel:30,epaulette:31,sleeve:32,pocket:33,neckline:34,buckle:35,zipper:36,applique:37,bead:38,bow:39,flower:40,fringe:41,ribbon:42,rivet:43,ruffle:44,sequin:45,tassel:46},face_parsing:["background","skin","nose","eyeglasses","left_eye","right_eye","left_eyebrow","right_eyebrow","left_ear","right_ear","mouth","upper_lip","lower_lip","hair","hat","earring","necklace","neck","clothing"]},NODE_MODE={ALWAYS:0,NEVER:2,BYPASS:4},NODES_MAP_ID="easyuse_nodes_map",NO_PREVIEW_IMAGE="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QMyaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA5LjEtYzAwMSA3OS4xNDYyODk5Nzc3LCAyMDIzLzA2LzI1LTIzOjU3OjE0ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjUuMyAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2RkFERDc2MUNDRkIxMUVGQjFENkE0NzFCNTUzRkQ0MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2RkFERDc2MkNDRkIxMUVGQjFENkE0NzFCNTUzRkQ0MCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjUyMkMxRkIyQ0M0QzExRUZCMUQ2QTQ3MUI1NTNGRDQwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjZGQURENzYwQ0NGQjExRUZCMUQ2QTQ3MUI1NTNGRDQwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEB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",VERSION=112,bgcolor$1="rgba(24,24,27,.9)",obsidian={ColorPalette:{version:VERSION,id:"obsidian",name:"Obsidian",colors:{node_slot:{CLIP:"#FFD500",CLIP_VISION:"#A8DADC",CLIP_VISION_OUTPUT:"#ad7452",CONDITIONING:"#FFA931",CONTROL_NET:"#6EE7B7",IMAGE:"#64B5F6",LATENT:"#FF9CF9",MASK:"#81C784",MODEL:"#B39DDB",STYLE_MODEL:"#C2FFAE",VAE:"#FF6E6E",TAESD:"#DCC274",PIPE_LINE:"#7737AA",PIPE_LINE_SDXL:"#7737AA",INT:"#29699C",X_Y:"#38291f",XYPLOT:"#74DA5D",LORA_STACK:"#94dccd",CONTROL_NET_STACK:"#94dccd",FAST_MODEL_LOADER:"#ffd399",SAMPLING:"#60a5fa"},litegraph_base:{BACKGROUND_IMAGE:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQBJREFUeNrs1rEKwjAUhlETUkj3vP9rdmr1Ysammk2w5wdxuLgcMHyptfawuZX4pJSWZTnfnu/lnIe/jNNxHHGNn//HNbbv+4dr6V+11uF527arU7+u63qfa/bnmh8sWLBgwYJlqRf8MEptXPBXJXa37BSl3ixYsGDBMliwFLyCV/DeLIMFCxYsWLBMwSt4Be/NggXLYMGCBUvBK3iNruC9WbBgwYJlsGApeAWv4L1ZBgsWLFiwYJmCV/AK3psFC5bBggULloJX8BpdwXuzYMGCBctgwVLwCl7Be7MMFixYsGDBsu8FH1FaSmExVfAxBa/gvVmwYMGCZbBg/W4vAQYA5tRF9QYlv/QAAAAASUVORK5CYII=",CLEAR_BACKGROUND_COLOR:"#222222",NODE_TITLE_COLOR:"#d4d4d8",NODE_SELECTED_TITLE_COLOR:"#ffffff",NODE_TEXT_SIZE:14,NODE_TEXT_COLOR:"#ffffff",NODE_SUBTEXT_SIZE:12,NODE_DEFAULT_COLOR:"#09090b",NODE_DEFAULT_BGCOLOR:"rgba(24,24,27,.9)",NODE_DEFAULT_BOXCOLOR:"rgba(255,255,255,.75)",NODE_DEFAULT_SHAPE:2,NODE_BOX_OUTLINE_COLOR:THEME_COLOR,NODE_BYPASS_BGCOLOR:"#FF00FF",NODE_ERROR_COLOUR:"#E00",DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0)",DEFAULT_GROUP_FONT:24,WIDGET_BGCOLOR:"#242427",WIDGET_OUTLINE_COLOR:"#3f3f46",WIDGET_TEXT_COLOR:"#d4d4d8",WIDGET_SECONDARY_TEXT_COLOR:"#d4d4d8",LINK_COLOR:"#9A9",EVENT_LINK_COLOR:"#A86",CONNECTING_LINK_COLOR:"#AFA"},comfy_base:{"fg-color":"#fff","bg-color":"#09090b","comfy-menu-bg":"rgba(24,24,24,.9)","comfy-input-bg":"#262626","input-text":"#ddd","descrip-text":"#999","drag-text":"#ccc","error-text":"#ff4444","border-color":"#29292c","tr-even-bg-color":"rgba(28,28,28,.9)","tr-odd-bg-color":"rgba(19,19,19,.9)"}}},NODE_COLORS:{red:{color:"#af3535",bgcolor:bgcolor$1,groupcolor:"#A88"},brown:{color:"#38291f",bgcolor:bgcolor$1,groupcolor:"#b06634"},green:{color:"#346434",bgcolor:bgcolor$1,groupcolor:"#8A8"},blue:{color:"#1f1f48",bgcolor:bgcolor$1,groupcolor:"#88A"},pale_blue:{color:"#006691",bgcolor:bgcolor$1,groupcolor:"#3f789e"},cyan:{color:"#008181",bgcolor:bgcolor$1,groupcolor:"#8AA"},purple:{color:"#422342",bgcolor:bgcolor$1,groupcolor:"#a1309b"},yellow:{color:"#c09430",bgcolor:bgcolor$1,groupcolor:"#b58b2a"},black:{color:"rgba(0,0,0,.8)",bgcolor:bgcolor$1,groupcolor:"#444"}}};let obsidian_dark=JSON.parse(JSON.stringify(obsidian));delete obsidian_dark.NODE_COLORS,obsidian_dark.ColorPalette.id="obsidian_dark",obsidian_dark.ColorPalette.name="Obsidian Dark",obsidian_dark.ColorPalette.colors.litegraph_base.BACKGROUND_IMAGE="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGlmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuMTQ2Mjg5OSwgMjAyMy8wNi8yNS0yMDowMTo1NSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjEgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0xMS0xM1QwMDoxODowMiswMTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMTEtMTVUMDI6MDQ6NTkrMDE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMTEtMTVUMDI6MDQ6NTkrMDE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmIyYzRhNjA5LWJmYTctYTg0MC1iOGFlLTk3MzE2ZjM1ZGIyNyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk0ZmNlZGU4LTE1MTctZmQ0MC04ZGU3LWYzOTgxM2E3ODk5ZiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjIzMWIxMGIwLWI0ZmItMDI0ZS1iMTJlLTMwNTMwM2NkMDdjOCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjMxYjEwYjAtYjRmYi0wMjRlLWIxMmUtMzA1MzAzY2QwN2M4IiBzdEV2dDp3aGVuPSIyMDIzLTExLTEzVDAwOjE4OjAyKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4OWY1NzlmLTJkNjUtZWQ0Zi04OTg0LTA4NGE2MGE1ZTMzNSIgc3RFdnQ6d2hlbj0iMjAyMy0xMS0xNVQwMjowNDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjEgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiMmM0YTYwOS1iZmE3LWE4NDAtYjhhZS05NzMxNmYzNWRiMjciIHN0RXZ0OndoZW49IjIwMjMtMTEtMTVUMDI6MDQ6NTkrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4OTe6GAAAAx0lEQVR42u3WMQoAIQxFwRzJys77X8vSLiRgITif7bYbgrwYc/mKXyBoY4VVBgsWLFiwYFmOlTv+9jfDOjHmr8u6eVkGCxYsWLBgmc5S8ApewXvgYRksWLBgKXidpeBdloL3wMOCBctgwVLwCl7BuyyDBQsWLFiwTGcpeAWv4D3wsAwWLFiwFLzOUvAuS8F74GHBgmWwYCl4Ba/gXZbBggULFixYprMUvIJX8B54WAYLFixYCl5nKXiXpeA98LBgwTJYsGC9tg1o8f4TTtqzNQAAAABJRU5ErkJggg==",obsidian_dark.ColorPalette.colors.litegraph_base.CLEAR_BACKGROUND_COLOR="#09090b";const bgcolor="#FFFFFF",milk_white={ColorPalette:{id:"milk_white",name:"Milk White",colors:{node_slot:{CLIP:"#FFA726",CLIP_VISION:"#5C6BC0",CLIP_VISION_OUTPUT:"#8D6E63",CONDITIONING:"#EF5350",CONTROL_NET:"#66BB6A",IMAGE:"#42A5F5",LATENT:"#AB47BC",MASK:"#9CCC65",MODEL:"#7E57C2",STYLE_MODEL:"#D4E157",VAE:"#FF7043",PIPE_LINE:"#7737AA",PIPE_LINE_SDXL:"#7737AA",INT:"#29699C",X_Y:"#38291f",XYPLOT:"#74DA5D",LORA_STACK:"#94dccd",CONTROL_NET_STACK:"#94dccd",FAST_MODEL_LOADER:"#ffd399",SAMPLING:"#60a5fa"},litegraph_base:{BACKGROUND_IMAGE:"data:image/gif;base64,R0lGODlhZABkALMAAAAAAP///+vr6+rq6ujo6Ofn5+bm5uXl5d3d3f///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAABkAGQAAAT/UMhJq7046827HkcoHkYxjgZhnGG6si5LqnIM0/fL4qwwIMAg0CAsEovBIxKhRDaNy2GUOX0KfVFrssrNdpdaqTeKBX+dZ+jYvEaTf+y4W66mC8PUdrE879f9d2mBeoNLfH+IhYBbhIx2jkiHiomQlGKPl4uZe3CaeZifnnijgkESBqipqqusra6vsLGys62SlZO4t7qbuby7CLa+wqGWxL3Gv3jByMOkjc2lw8vOoNSi0czAncXW3Njdx9Pf48/Z4Kbbx+fQ5evZ4u3k1fKR6cn03vHlp7T9/v8A/8Gbp4+gwXoFryXMB2qgwoMMHyKEqA5fxX322FG8tzBcRnMW/zlulPbRncmQGidKjMjyYsOSKEF2FBlJQMCbOHP6c9iSZs+UnGYCdbnSo1CZI5F64kn0p1KnTH02nSoV3dGTV7FFHVqVq1dtWcMmVQZTbNGu72zqXMuW7danVL+6e4t1bEy6MeueBYLXrNO5Ze36jQtWsOG97wIj1vt3St/DjTEORss4nNq2mDP3e7w4r1bFkSET5hy6s2TRlD2/mSxXtSHQhCunXo26NevCpmvD/UU6tuullzULH76q92zdZG/Ltv1a+W+osI/nRmyc+fRi1Xdbh+68+0vv10dH3+77KD/i6IdnX669/frn5Zsjh4/2PXju8+8bzc9/6fj27LFnX11/+IUnXWl7BJfegm79FyB9JOl3oHgSklefgxAC+FmFGpqHIYcCfkhgfCohSKKJVo044YUMttggiBkmp6KFXw1oII24oYhjiDByaKOOHcp3Y5BD/njikSkO+eBREQAAOw==",CLEAR_BACKGROUND_COLOR:"lightgray",NODE_TITLE_COLOR:"#222",NODE_SELECTED_TITLE_COLOR:"#000",NODE_TEXT_SIZE:14,NODE_TEXT_COLOR:"#444",NODE_SUBTEXT_SIZE:12,NODE_DEFAULT_COLOR:"#F7F7F7",NODE_DEFAULT_BGCOLOR:"#F5F5F5",NODE_DEFAULT_BOXCOLOR:"#555",NODE_DEFAULT_SHAPE:2,NODE_BOX_OUTLINE_COLOR:"#000",DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0.1)",DEFAULT_GROUP_FONT:24,WIDGET_BGCOLOR:"#D4D4D4",WIDGET_OUTLINE_COLOR:"#999",WIDGET_TEXT_COLOR:"#222",WIDGET_SECONDARY_TEXT_COLOR:"#555",LINK_COLOR:"#9A9",EVENT_LINK_COLOR:"#FF9800",CONNECTING_LINK_COLOR:"#222"},comfy_base:{"fg-color":"#222","bg-color":"#DDD","comfy-menu-bg":"#F5F5F5","comfy-input-bg":"#C9C9C9","input-text":"#222","descrip-text":"#444","drag-text":"#555","error-text":"#F44336","border-color":"#bbb","tr-even-bg-color":"#f9f9f9","tr-odd-bg-color":"#fff","content-bg":"#e0e0e0","content-fg":"#222","content-hover-bg":"#adadad","content-hover-fg":"#222"}}},NODE_COLORS:{red:{color:"#af3535",bgcolor:bgcolor,groupcolor:"#A88"},brown:{color:"#38291f",bgcolor:bgcolor,groupcolor:"#b06634"},green:{color:"#346434",bgcolor:bgcolor,groupcolor:"#8A8"},blue:{color:"#1f1f48",bgcolor:bgcolor,groupcolor:"#88A"},pale_blue:{color:"#006691",bgcolor:bgcolor,groupcolor:"#3f789e"},cyan:{color:"#008181",bgcolor:bgcolor,groupcolor:"#8AA"},purple:{color:"#422342",bgcolor:bgcolor,groupcolor:"#a1309b"},yellow:{color:"#c09430",bgcolor:bgcolor,groupcolor:"#b58b2a"},black:{color:"rgba(0,0,0,.8)",bgcolor:bgcolor,groupcolor:"#444"}}},settings={addGroup:{id:"EasyUse.Hotkeys.AddGroup",name:"Enable Shift+g to add selected nodes to a group",tooltip:"After v1.2.39, Ctrl+g can be used instead of it",type:"boolean",defaultValue:!0},cleanVRAMUsed:{id:"EasyUse.Hotkeys.cleanVRAMUsed",name:"Enable Shift+r to unload models and node cache",type:"boolean",defaultValue:!0},toggleSiteMap:{id:"EasyUse.Hotkeys.toggleNodesMap",name:"Enable Shift+m to toggle nodes map",type:"boolean",defaultValue:!0},alignSelectedNodes:{id:"EasyUse.Hotkeys.AlignSelectedNodes",name:"Enable Shift+Up/Down/Left/Right key and Shift+Ctrl+Alt+Left/Right to align selected nodes",tooltip:"Shift+Up/Down/Left/Right can align selected nodes, Shift+Ctrl+Alt+Left/Right can distribute horizontal/vertical nodes",type:"boolean",defaultValue:!0},NormalizeSelectedNodes:{id:"EasyUse.Hotkeys.NormalizeSelectedNodes",name:"Enable Shift+Ctrl+Left/Right key to normalize selected nodes",tooltip:"Enable Shift+Ctrl+Left key to normalize width and Shift+Ctrl+Right key to normalize height",type:"boolean",defaultValue:!0},nodesTemplate:{id:"EasyUse.Hotkeys.NodesTemplate",name:"Enable Alt+1~9 to paste nodes from nodes template",type:"boolean",defaultValue:!0},jumpNearestNodes:{id:"EasyUse.Hotkeys.JumpNearestNodes",name:"Enable Up/Down/Left/Right key to jump nearest nodes",type:"boolean",defaultValue:!0},subDirectories:{id:"EasyUse.ContextMenu.SubDirectories",name:"Enable contextMenu auto nest subdirectories",type:"boolean",defaultValue:!1},modelsThumbnails:{id:"EasyUse.ContextMenu.ModelsThumbnails",name:"Enable model thumbnails display",type:"boolean",defaultValue:!1},rightMenuNodesSort:{id:"EasyUse.ContextMenu.NodesSort",name:"Enable right-click menu to add node A~Z sorting",type:"boolean",defaultValue:!0},quickOptions:{id:"EasyUse.ContextMenu.QuickOptions",name:"Use three shortcut buttons in the right-click menu",type:"combo",options:["At the forefront","At the end","Disable"],defaultValue:"At the forefront"},nodesRuntime:{id:"EasyUse.Nodes.Runtime",name:"Enable nodes runtime display",type:"boolean",defaultValue:!0},chainGetSet:{id:"EasyUse.Nodes.ChainGetSet",name:"Enable chain get node and set node with parent nodes",type:"boolean",defaultValue:!0},nodesMap:{id:"EasyUse.NodesMap.Sorting",name:"Nodes map sorting mode",tooltip:"Default automatic sorting, if set to manual, groups can be dragged and dropped and the sorting results saved.",type:"combo",options:["Auto sorting","Manual drag&drop sorting"],defaultValue:"Auto sorting"},displayNodesID:{id:"EasyUse.NodesMap.DisplayNodeID",name:"Display Node ID",type:"boolean",defaultValue:!0},onlyDisplayGroup:{id:"EasyUse.NodesMap.DisplayGroupOnly",name:"Display Groups Only",type:"boolean",defaultValue:!1},enableNodesMap:{id:"EasyUse.NodesMap.Enable",name:"Enable Nodes Map",tooltip:"You need to refresh the page to update successfully",type:"boolean",defaultValue:!0},stylesSelectorDisplay:{id:"EasyUse.StylesSelector.DisplayType",name:"Styles Selector Display Type",tooltip:"Styles Selector Display Type, if set to 'Gird', it will display as a gird, if set to 'List', it will display as a list",type:"combo",options:["Gird","List"],defaultValue:"Gird"}};function sleep(e=100,t){return new Promise((i=>{setTimeout((()=>{i(t)}),e)}))}function formatTime(e,t){if(e="number"==typeof e?e:e instanceof Date?e.getTime():parseInt(e),isNaN(e))return null;let i=new Date(e);(e=i.toString().split(/[\s\:]/g).slice(0,-2))[1]=["01","02","03","04","05","06","07","08","09","10","11","12"][i.getMonth()];let s={MM:1,dd:2,yyyy:3,hh:4,mm:5,ss:6};return t.replace(/([Mmdhs]|y{2})\1/g,(t=>e[s[t]]))}function isLocalNetwork(e){return["192.168.","10.","127.",/^172\.((1[6-9]|2[0-9]|3[0-1])\.)/].some((t=>"string"==typeof t?e.startsWith(t):t.test(e)))}const isMac=/Mac|iPod|iPhone|iPad/.test(navigator.platform),normalize=e=>isMac?e.replace(/Ctrl/g,"⌘").replace(/Alt/g,"⌥").replace(/Shift/g,"⇧"):e;class Toast{constructor(){__publicField(this,"element",$el(`div.${PREFIX_CLASS}toast`)),__publicField(this,"children",HTMLElement),__publicField(this,"container",document.body),__publicField(this,"info_icon",`mdi mdi-information ${PREFIX_CLASS}theme`),__publicField(this,"success_icon",`mdi mdi-check-circle ${PREFIX_CLASS}success`),__publicField(this,"error_icon",`mdi mdi-close-circle ${PREFIX_CLASS}error`),__publicField(this,"warn_icon",`mdi mdi-alert-circle ${PREFIX_CLASS}warning`),__publicField(this,"loading_icon","mdi mdi-rotate-right loading"),this.container.appendChild(this.element)}async show(e){let t=$el(`div.${PREFIX_CLASS}toast-container`,[$el("div",[$el("span",[...e.icon?[$el("i",{className:e.icon})]:[],$el("span",e.content)])])]);t.setAttribute("toast-id",e.id),this.element.replaceChildren(t),this.container.appendChild(this.element),await sleep(64),t.style.marginTop=`-${t.offsetHeight}px`,await sleep(64),t.classList.add("show"),e.duration&&(await sleep(e.duration),this.hide(e.id))}async hide(e){const t=document.querySelector(`.${PREFIX_CLASS}toast > [toast-id="${e}"]`);(null==t?void 0:t.classList.contains("show"))&&(t.classList.remove("show"),await sleep(750)),t&&t.remove()}async clearAllMessages(){let e=document.querySelector(`.${PREFIX_CLASS}container`);e&&(e.innerHTML="")}async info(e,t=3e3,i=[]){this.show({id:"toast-info",icon:this.info_icon,content:e,duration:t})}async success(e,t=3e3){this.show({id:"toast-success",icon:this.success_icon,content:e,duration:t})}async error(e,t=3e3){this.show({id:"toast-error",icon:this.error_icon,content:e,duration:t})}async warn(e,t=3e3){this.show({id:"toast-warn",icon:this.warn_icon,content:e,duration:t})}async showLoading(e,t=0){this.show({id:"toast-loading",icon:this.loading_icon,content:e,duration:t})}async hideLoading(){this.hide("toast-loading")}}const toast=new Toast,useNodesStore=defineStore("groups",{state:e=>({groups:[],nodes:[],isWatching:!1}),getters:{groups_nodes(){var e;let t=[],i=[];const s=e=>{var t;return{info:e,children:(null==(t=e.sub_groups)?void 0:t.length)>0?e.sub_groups.map(s):[],bounds:{x1:e.pos[0],y1:e.pos[1],x2:e.pos[0]+e.size[0],y2:e.pos[1]+e.size[1]}}};if(t=this.groups.map(s),(null==(e=this.nodes)?void 0:e.length)>0){const e=(e,t)=>e[0]>=t.x1&&e[0]<=t.x2&&e[1]>=t.y1&&e[1]<=t.y2,s=(t,i)=>{let s=null,o=-1;const a=(i,n)=>{i.bounds&&e(t.pos,i.bounds)&&(n>o&&(o=n,s=i),i.children.forEach((e=>a(e,n+1))))};return i.forEach((e=>a(e,0))),s};this.nodes.forEach((e=>{const o=s(e,t);o?(o.children||(o.children=[]),o.children.push(e)):i.push({info:e})}))}return[...t,...i]}},actions:{setGroups(e){let t=cloneDeep(e);t.forEach((e=>{e.sub_groups=[],t.forEach((t=>{t!==e&&t.pos[0]>e.pos[0]&&t.pos[0]e.pos[1]&&t.pos[1]{t=t.filter((t=>t!==e))}))})),this.groups="Manual drag&drop sorting"==getSetting("EasyUse.NodesMap.Sorting")?cloneDeep(t):cloneDeep(t.sort(((e,t)=>e.pos[0]-t.pos[0])).sort(((e,t)=>e.pos[1]-t.pos[1])))},setNodes(e){this.nodes=cloneDeep(e)},update(){var e,t,i;(((null==(e=app$1.extensionManager)?void 0:e.activeSidebarTab)||(null==(i=null==(t=app$1.extensionManager.sidebarTab)?void 0:t.activeSidebarTab)?void 0:i.id))===NODES_MAP_ID||this.isWatching)&&setTimeout((e=>{this.setGroups(app$1.canvas.graph._groups),this.setNodes(app$1.canvas.graph._nodes)}),1)},watchGraph(e=!1){e&&(this.isWatching=!0);let t=this;this.update();const i=app$1.graph.onNodeAdded;app$1.graph.onNodeAdded=function(e){t.update();const s=e.onRemoved;return e.onRemoved=function(){return t.update(),null==s?void 0:s.apply(this,arguments)},null==i?void 0:i.apply(this,arguments)},app$1.canvas.onNodeMoved=function(e){t.update()};const s=LGraphCanvas.onNodeAlign;LGraphCanvas.onNodeAlign=function(e){return t.update(),null==s?void 0:s.apply(this,arguments)};const o=LGraphCanvas.onGroupAdd;LGraphCanvas.onGroupAdd=function(){return t.update(),null==o?void 0:o.apply(this,arguments)};const a=LGraphCanvas.onGroupAlign;LGraphCanvas.onGroupAlign=function(e){return t.update(),null==a?void 0:a.apply(this,arguments)};const n=LGraphCanvas.onMenuNodeRemove;LGraphCanvas.onMenuNodeRemove=function(e){return t.update(),null==n?void 0:n.apply(this,arguments)}},unwatchGraph(){this.isWatching=!1}}});function drawRoundedRect(e,t,i,s,o,a){e.beginPath(),e.moveTo(t+a,i),e.lineTo(t+s-a,i),e.arcTo(t+s,i,t+s,i+a,a),e.lineTo(t+s,i+o-a),e.arcTo(t+s,i+o,t+s-a,i+o,a),e.lineTo(t+a,i+o),e.arcTo(t,i+o,t,i+o-a,a),e.lineTo(t,i+a),e.arcTo(t,i,t+a,i,a),e.closePath()}function drawText(e,t,i,s,o="#000",a=12,n="Inter"){e.font=`${a}px ${n}`,e.fillStyle=o,e.fillText(t,i,s)}const ELLIPSIS="…",TWO_DOT_LEADER="‥",ONE_DOT_LEADER="․",RenderShape={BOX:1,ROUND:2,CIRCLE:3,CARD:4,ARROW:5,GRID:6,HollowCircle:7};function strokeShape(e,t,i={}){const{shape:s=RenderShape.BOX,round_radius:o=LiteGraph.ROUND_RADIUS,title_height:a=LiteGraph.NODE_TITLE_HEIGHT,title_mode:n=LiteGraph.NORMAL_TITLE,color:l=LiteGraph.NODE_BOX_OUTLINE_COLOR,padding:r=6,collapsed:d=!1,thickness:c=1}=i;n===LiteGraph.TRANSPARENT_TITLE&&(t[1]-=a,t[3]+=a);const{lineWidth:u,strokeStyle:p}=e;e.lineWidth=c,e.globalAlpha=.8,e.strokeStyle=l,e.beginPath();const[A,g,h,m]=t;switch(s){case RenderShape.BOX:e.rect(A-r,g-r,h+2*r,m+2*r);break;case RenderShape.ROUND:case RenderShape.CARD:{const t=o+r,i=s===RenderShape.CARD&&d||s===RenderShape.ROUND?[t]:[t,2,t,2];e.roundRect(A-r,g-r,h+2*r,m+2*r,i);break}case RenderShape.CIRCLE:{const t=A+h/2,i=g+m/2,s=Math.max(h,m)/2+r;e.arc(t,i,s,0,2*Math.PI);break}}e.stroke(),e.lineWidth=u,e.strokeStyle=p,e.globalAlpha=1}function truncateTextToWidth(e,t,i){if(!(i>0))return"";if(e.measureText(t).width<=i)return t;const s=.75*e.measureText(ELLIPSIS).width;if(s>i){if(.75*e.measureText(TWO_DOT_LEADER).width{if(!e.length||1===e.length)return!0;const t=e[0].naturalWidth/e[0].naturalHeight;for(let i=1;ia&&(a=v,d=f,c=y,u=g,p=e,A=g*((s-f)/2))}return{cellWidth:d,cellHeight:c,cols:u,rows:p,shiftX:A}}const renderPreview=(e,t,i)=>{const s=app$1.canvas,o=s.graph_mouse;!s.pointer_is_down&&t.pointerDown&&(o[0]===t.pointerDown.pos[0]&&o[1]===t.pointerDown.pos[1]&&(t.imageIndex=t.pointerDown.index),t.pointerDown=null);const a=t.imgs??[];let{imageIndex:n}=t;const l=a.length;1!==l||n||(t.imageIndex=n=0);const r=t.size[0],d=t.size[1]-i-15;if(null==n){let n,c,u,p,A;const g=is_all_same_aspect_ratio$1(a);if(g)p=0,({cellWidth:n,cellHeight:c,cols:A,shiftX:u}=calculateImageGrid$1(a,r,d));else{p=2;const e=a.reduce(((e,t)=>Math.max(e,t.naturalWidth,t.naturalHeight)),0),t=[];t.length=a.length,t[0]={naturalWidth:e,naturalHeight:e},({cellWidth:n,cellHeight:c,cols:A,shiftX:u}=calculateImageGrid$1(t,r,d))}let h=!1;t.imageRects=[];for(let r=0;r{let r="#333",d="#fff",c=!1;return LiteGraph.isInsideRectangle(o[0],o[1],i+t.pos[0],a+t.pos[1],n,n)&&(s.canvas.style.cursor="pointer",s.pointer_is_down?(r="#1e90ff",c=!0):(r="#eee",d="#000")),e.fillStyle=r,e.beginPath(),e.roundRect(i,a,n,n,[4]),e.fill(),e.fillStyle=d,e.font="12px Arial",e.textAlign="center",e.fillText(l,i+15,a+20),c};if(!(l>1))return;const b=(t.imageIndex??0)+1;if(_(r-40,d+i-40,30,`${b}/${l}`)){const e=b>=l?0:b;t.pointerDown&&t.pointerDown.index===e||(t.pointerDown={index:e,pos:[...o]})}_(r-40,i+10,30,"x")&&(t.pointerDown&&null===t.pointerDown.index||(t.pointerDown={index:null,pos:[...o]}))};class ImagePreviewWidget{constructor(e,t){this.type="custom",this.name=e,this.options=t,this.value=""}draw(e,t,i,s,o){renderPreview(e,t,s)}computeLayoutSize(e,t){return{minHeight:220,minWidth:1}}}const useImagePreviewWidget=()=>(e,t)=>e.addCustomWidget(new ImagePreviewWidget(t.name,{serialize:!1})),useChainCallback=(e,...t)=>function(...i){null==e||e.call(this,...i),t.forEach((e=>e.call(this,...i)))},useTryCatchCallback=(e,...t)=>function(...i){try{t.forEach((e=>null==e?void 0:e.call(this,...i)))}catch(s){null==e||e.call(this,...i,s)}};function isInRectangle(e,t,i,s,o,a){return e>=i&&e=s&&t=i&&e=s&&t=e[0]&&this.y+this.height>=e[1]}containsRect(e){return this.x<=e[0]&&this.y<=e[1]&&this.x+this.width>=e[0]+e[2]&&this.y+this.height>=e[1]+e[3]}overlaps(e){return this.xe[0]&&this.y+this.height>e[1]}findContainingCorner(e,t,i){return this.isInTopLeftCorner(e,t,i)?"NW":this.isInTopRightCorner(e,t,i)?"NE":this.isInBottomLeftCorner(e,t,i)?"SW":this.isInBottomRightCorner(e,t,i)?"SE":void 0}isInTopLeftCorner(e,t,i){return isInRectangle(e,t,this.x,this.y,i,i)}isInTopRightCorner(e,t,i){return isInRectangle(e,t,this.right-i,this.y,i,i)}isInBottomLeftCorner(e,t,i){return isInRectangle(e,t,this.x,this.bottom-i,i,i)}isInBottomRightCorner(e,t,i){return isInRectangle(e,t,this.right-i,this.bottom-i,i,i)}isInTopEdge(e,t,i){return isInRectangle(e,t,this.x,this.y,this.width,i)}isInBottomEdge(e,t,i){return isInRectangle(e,t,this.x,this.bottom-i,this.width,i)}isInLeftEdge(e,t,i){return isInRectangle(e,t,this.x,this.y,i,this.height)}isInRightEdge(e,t,i){return isInRectangle(e,t,this.right-i,this.y,i,this.height)}getCentre(){return[this.centreX,this.centreY]}getArea(){return this.width*this.height}getPerimeter(){return 2*(this.width+this.height)}getTopLeft(){return[this[0],this[1]]}getBottomRight(){return[this.right,this.bottom]}getSize(){return[this[2],this[3]]}getOffsetTo([e,t]){return[e-this[0],t-this[1]]}getOffsetFrom([e,t]){return[this[0]-e,this[1]-t]}resizeTopLeft(e,t){this[2]+=this[0]-e,this[3]+=this[1]-t,this[0]=e,this[1]=t}resizeBottomLeft(e,t){this[2]+=this[0]-e,this[3]=t-this[1],this[0]=e}resizeTopRight(e,t){this[2]=e-this[0],this[3]+=this[1]-t,this[1]=t}resizeBottomRight(e,t){this[2]=e-this[0],this[3]=t-this[1]}setWidthRightAnchored(e){const t=this[2];this[2]=e,this[0]+=t-e}setHeightBottomAnchored(e){const t=this[3];this[3]=e,this[1]+=t-e}toArray(){return this.export()}export(){return[this[0],this[1],this[2],this[3]]}_drawDebug(e,t="red"){const{strokeStyle:i,lineWidth:s}=e;try{e.strokeStyle=t,e.lineWidth=.5,e.beginPath(),e.strokeRect(this[0],this[1],this[2],this[3])}finally{e.strokeStyle=i,e.lineWidth=s}}}_pos=new WeakMap,_size=new WeakMap;const _BaseWidget=class e{constructor(e,t){__privateAdd(this,_node),__privateAdd(this,_value),void 0===t&&(t=e.node),__privateSet(this,_node,t),__privateSet(this,_value,e.value),this.name=e.name,this.options=e.options,this.type=e.type,this.y=0;const{node:i,outline_color:s,background_color:o,height:a,text_color:n,secondary_text_color:l,disabledTextColor:r,displayName:d,displayValue:c,labelBaseline:u,...p}=e;Object.assign(this,p)}get node(){return __privateGet(this,_node)}get value(){return __privateGet(this,_value)}set value(e){__privateSet(this,_value,e)}get outline_color(){return this.advanced?LiteGraph.WIDGET_ADVANCED_OUTLINE_COLOR:LiteGraph.WIDGET_OUTLINE_COLOR}get background_color(){return LiteGraph.WIDGET_BGCOLOR}get height(){return LiteGraph.NODE_WIDGET_HEIGHT}get text_color(){return LiteGraph.WIDGET_TEXT_COLOR}get secondary_text_color(){return LiteGraph.WIDGET_SECONDARY_TEXT_COLOR}get disabledTextColor(){return LiteGraph.WIDGET_DISABLED_TEXT_COLOR}get displayName(){return this.label||this.name}get _displayValue(){return String(this.value)}get labelBaseline(){return this.y+.7*this.height}drawWidgetShape(t,{width:i,showText:s,isEasyUseTheme:o}){const{height:a,y:n}=this,{margin:l}=e;t.textAlign="left",t.strokeStyle=this.outline_color,t.fillStyle=this.background_color,t.beginPath(),s?o?t.roundRect(l,n,i-2*l,a,[.25*a]):t.roundRect(l,n,i-2*l,a,[.5*a]):t.rect(l,n,i-2*l,a),t.fill(),s&&!this.computedDisabled&&t.stroke()}drawTruncatingText({ctx:t,width:i,leftPadding:s=5,rightPadding:o=20,isEasyUseTheme:a}){const{height:n,y:l}=this,{margin:r}=e,{displayName:d,_displayValue:c}=this,u=t.measureText(d).width,p=t.measureText(c).width,A=e.labelValueGap,g=2*r+(a?s?2:-8:s),h=i-g-2*r-(a?4:o),m=u+A+p,f=new Rectangle(g,l,h,.7*n);if(a&&(t.font="11px Inter"),t.fillStyle=this.secondary_text_color,m<=h)drawTextInArea({ctx:t,text:d,area:f,align:"left"});else if(LiteGraph.truncateWidgetTextEvenly){const e=(h-A)/(m-A);f.width=u*e,drawTextInArea({ctx:t,text:d,area:f,align:"left"}),f.right=g+h,f.setWidthRightAnchored(p*e)}else if(LiteGraph.truncateWidgetValuesFirst){const e=Math.min(u,h);f.width=e,drawTextInArea({ctx:t,text:d,area:f,align:"left"}),f.right=g+h,f.setWidthRightAnchored(Math.max(h-A-e,0))}else{const e=Math.min(p,h);f.width=Math.max(h-A-e,0),drawTextInArea({ctx:t,text:d,area:f,align:"left"}),f.right=g+h,f.setWidthRightAnchored(e)}t.fillStyle=this.text_color,drawTextInArea({ctx:t,text:c,area:f,align:"right"})}setValue(e,{e:t,node:i,canvas:s}){var o;const a=this.value;if(e===this.value)return;const n="number"===this.type?Number(e):e;this.value=n,(null==(o=this.options)?void 0:o.property)&&void 0!==i.properties[this.options.property]&&i.setProperty(this.options.property,n);const l=s.graph_mouse;this.callback&&this.callback(this.value,s,i,l,t),i.onWidgetChanged&&i.onWidgetChanged(this.name??"",n,a,this),i.graph&&i.graph._version++}};_node=new WeakMap,_value=new WeakMap,__publicField(_BaseWidget,"margin",15),__publicField(_BaseWidget,"arrowMargin",6),__publicField(_BaseWidget,"arrowWidth",10),__publicField(_BaseWidget,"minValueWidth",42),__publicField(_BaseWidget,"labelValueGap",5);let BaseWidget=_BaseWidget;class ButtonWidget extends BaseWidget{constructor(e,t){super(e,t),this.type="button",this.clicked=this.clicked??!1}drawWidget(e,{width:t,showText:i=!0,isEasyUseTheme:s=!1}){const{fillStyle:o,strokeStyle:a,textAlign:n}=e,{height:l,y:r}=this,{margin:d}=BaseWidget;e.fillStyle=this.background_color,this.clicked&&(e.fillStyle="#AAA",this.clicked=!1),s?(e.fillStyle=this.background_color,e.beginPath(),e.roundRect(d,r,t-2*d,l,[.25*l]),e.fill()):e.fillRect(d,r,t-2*d,l),i&&!this.computedDisabled&&(e.strokeStyle=this.outline_color,s?e.stroke():e.strokeRect(d,r,t-2*d,l)),i&&this.drawLabel(e,.5*t),Object.assign(e,{textAlign:n,strokeStyle:a,fillStyle:o})}drawLabel(e,t){e.textAlign="center",e.fillStyle=this.text_color,e.fillText(this.displayName,t,this.y+.7*this.height)}onClick({e:e,node:t,canvas:i}){const s=i.graph_mouse;this.clicked=!0,i.setDirty(!0),this.callback&&this.callback(this,i,t,s,e)}}class BooleanWidget extends BaseWidget{constructor(e){super(e),this.type="toggle"}drawWidget(e,{width:t,showText:i=!0,isEasyUseTheme:s=!1}){const{height:o,y:a}=this,{margin:n}=BaseWidget;this.drawWidgetShape(e,{width:t,showText:i,isEasyUseTheme:s}),e.fillStyle=this.value?THEME_COLOR:"#333",e.beginPath(),e.arc(t-2*n+(s?4:0),a+.5*o,o*(s?.25:.36),0,2*Math.PI),e.fill(),i&&(this.drawLabel(e,2*n-(s?8:0)),this.drawValue(e,t-(s?36:40)))}drawLabel(e,t){e.fillStyle=this.secondary_text_color;const{displayName:i}=this;i&&e.fillText(i,t,this.labelBaseline)}drawValue(e,t){e.fillStyle=this.value?this.text_color:this.secondary_text_color,e.textAlign="right";const i=this.value?this.options.on||"true":this.options.off||"false";e.fillText(i,t,this.labelBaseline)}onClick(e){this.setValue(!this.value,e)}}function getWidgetStep(e){return e.step2||.1*(e.step||10)}function clamp(e,t,i){return ei?i:e}const sentWarnings=new Set;function warnDeprecated(e,t=null){if(!LiteGraph.alwaysRepeatWarnings){if(sentWarnings.has(e))return;if(sentWarnings.size>UNIQUE_MESSAGE_LIMIT)return;sentWarnings.add(e)}for(const i of LiteGraph.onDeprecationWarning)i(e,t)}class SliderWidget extends BaseWidget{constructor(e,t){super(e,t),this.type="slider"}drawWidget(e,{width:t,showText:i=!0,isEasyUseTheme:s=!1}){const{fillStyle:o,strokeStyle:a,textAlign:n}=e,{height:l,y:r}=this,{margin:d}=BaseWidget;e.fillStyle=this.background_color,s?(e.strokeStyle=this.outline_color,e.beginPath(),e.roundRect(d,r,t-2*d,l,[.25*l]),e.fill(),e.stroke()):e.fillRect(d,r,t-2*d,l);const c=this.options.max-this.options.min;let u=(this.value-this.options.min)/c;if(u=clamp(u,0,1),e.fillStyle=this.options.slider_color??THEME_COLOR,s?(e.beginPath(),e.roundRect(d,r,u*(t-2*d),l,[.25*l]),e.fill()):e.fillRect(d,r,u*(t-2*d),l),i&&!this.computedDisabled&&(e.strokeStyle=this.outline_color,s||e.strokeRect(d,r,t-2*d,l)),null!=this.marker){let i=(this.marker-this.options.min)/c;i=clamp(i,0,1),e.fillStyle=this.options.marker_color??"#AA9",s?e.roundRect(d+i*(t-2*d),r,2,l,[.25*l]):e.fillRect(d+i*(t-2*d),r,2,l)}if(i){e.textAlign="center",e.fillStyle=this.text_color;const i=Number(this.value).toFixed(this.options.precision??3);e.fillText(`${this.label||this.name} ${i}`,.5*t,r+.7*l)}Object.assign(e,{textAlign:n,strokeStyle:a,fillStyle:o})}onClick(e){if(this.options.read_only)return;const{e:t,node:i}=e,s=this.width||i.size[0],o=clamp((t.canvasX-i.pos[0]-15)/(s-30),0,1),a=this.options.min+(this.options.max-this.options.min)*o;a!==this.value&&this.setValue(a,e)}onDrag(e){if(this.options.read_only)return!1;const{e:t,node:i}=e,s=this.width||i.size[0],o=clamp((t.canvasX-i.pos[0]-15)/(s-30),0,1),a=this.options.min+(this.options.max-this.options.min)*o;a!==this.value&&this.setValue(a,e)}}class KnobWidget extends BaseWidget{constructor(){super(),this.type="knob",this.current_drag_offset=0}computeLayoutSize(){return{minHeight:60,minWidth:20,maxHeight:1e6,maxWidth:1e6}}get height(){return this.computedHeight||super.height}drawWidget(e,{width:t,showText:i=!0}){const{fillStyle:s,strokeStyle:o,textAlign:a}=e,{y:n}=this,{margin:l}=BaseWidget,{gradient_stops:r="rgb(14, 182, 201); rgb(0, 216, 72)"}=this.options,d=this.computedHeight||this.height,c=Math.min(this.computedHeight||this.height,this.width||20)/20,u={x:t/2,y:d/2+n};e.lineWidth=(Math.min(t,d)-l*c)/6;const p=(Math.min(t,d)-l*c-e.lineWidth)/2;{const t=e.createRadialGradient(u.x,u.y,p+e.lineWidth,0,0,p+e.lineWidth);t.addColorStop(0,"rgb(29, 29, 29)"),t.addColorStop(1,"rgb(116, 116, 116)"),e.fillStyle=t}e.beginPath(),e.arc(u.x,u.y,p+e.lineWidth/2,0,2*Math.PI,!1),e.fill(),e.closePath();const A={start_angle:.6*Math.PI,end_angle:2.4*Math.PI};e.beginPath();{const t=e.createRadialGradient(u.x,u.y,p+e.lineWidth,0,0,p+e.lineWidth);t.addColorStop(0,"rgb(99, 99, 99)"),t.addColorStop(1,"rgb(36, 36, 36)"),e.strokeStyle=t}e.arc(u.x,u.y,p,A.start_angle,A.end_angle,!1),e.stroke(),e.closePath();const g=this.options.max-this.options.min;let h=(this.value-this.options.min)/g;h=clamp(h,0,1),e.beginPath();const m=e.createConicGradient(A.start_angle,u.x,u.y),f=r.split(";");for(const[v,_]of f.entries())m.addColorStop(v,_.trim());e.strokeStyle=m;const y=(A.end_angle-A.start_angle)*h+A.start_angle;if(e.arc(u.x,u.y,p,A.start_angle,y,!1),e.stroke(),e.closePath(),i&&!this.computedDisabled&&(e.strokeStyle=this.outline_color,e.beginPath(),e.strokeStyle=this.outline_color,e.arc(u.x,u.y,p+e.lineWidth/2,0,2*Math.PI,!1),e.lineWidth=1,e.stroke(),e.closePath()),i){e.textAlign="center",e.fillStyle=this.text_color;const i=Number(this.value).toFixed(this.options.precision??3);e.fillText(`${this.label||this.name}\n${i}`,.5*t,n+.5*d)}Object.assign(e,{textAlign:a,strokeStyle:o,fillStyle:s})}onClick(){this.current_drag_offset=0}onDrag(e){if(this.options.read_only)return;const{e:t}=e,i=getWidgetStep(this.options),s=this.options.max-this.options.min,o=s/10,a=s/100,n={delta_x:i,shift:o>i?o-o%i:i,delta_y:a>i?a-a%i:i},l=Math.abs(t.movementY)>Math.abs(t.movementX),r=l?-t.movementY:t.movementX;this.current_drag_offset+=r;let d=0;this.current_drag_offset>15?(d+=1,this.current_drag_offset-=15):this.current_drag_offset<-15&&(d-=1,this.current_drag_offset+=15);const c=d*(t.shiftKey?n.shift:l?n.delta_y:i),u=clamp(this.value+c,this.options.min,this.options.max);u!==this.value&&this.setValue(u,e)}}class BaseSteppedWidget extends BaseWidget{constructor(e,t){super(e,t)}canIncrement(){throw new Error("Method not implemented")}canDecrement(){throw new Error("Method not implemented")}incrementValue(e){throw new Error("Method not implemented")}decrementValue(e){throw new Error("Method not implemented")}drawArrowButtons(e,t,i){const{height:s,text_color:o,disabledTextColor:a,y:n}=this,{arrowMargin:l,arrowWidth:r,margin:d}=BaseWidget,c=d+l+(i?2:0),u=c+r;e.fillStyle=this.canDecrement()?o:a,e.beginPath();const p=i?6.5:5,A=i?-6:0;e.moveTo(u+A,n+p),e.lineTo(c+A/2,n+.5*s),e.lineTo(u+A,n+s-p),e.fill(),e.fillStyle=this.canIncrement()?o:a,e.beginPath(),e.moveTo(t-u-A,n+p),e.lineTo(t-c-A/2,n+.5*s),e.lineTo(t-u-A,n+s-p),e.fill()}drawWidget(e,t){const{fillStyle:i,strokeStyle:s,textAlign:o}=e;this.drawWidgetShape(e,t),t.showText&&(this.computedDisabled||this.drawArrowButtons(e,t.width,t.isEasyUseTheme),this.drawTruncatingText({ctx:e,width:t.width,isEasyUseTheme:t.isEasyUseTheme})),Object.assign(e,{textAlign:o,strokeStyle:s,fillStyle:i})}}function toArray(e){return Array.isArray(e)?e:Object.keys(e)}class ComboWidget extends BaseSteppedWidget{constructor(e,t){super(e,t),__privateAdd(this,_ComboWidget_instances),this.type="combo"}get _displayValue(){const{values:e}=this.options;if(e){const t="function"==typeof e?e():e;if(t&&!Array.isArray(t))return t[this.value]}return"number"==typeof this.value?String(this.value):this.value}canIncrement(){return __privateMethod(this,_ComboWidget_instances,canUseButton_fn).call(this,!0)}canDecrement(){return __privateMethod(this,_ComboWidget_instances,canUseButton_fn).call(this,!1)}incrementValue(e){__privateMethod(this,_ComboWidget_instances,tryChangeValue_fn).call(this,1,e)}decrementValue(e){__privateMethod(this,_ComboWidget_instances,tryChangeValue_fn).call(this,-1,e)}onClick({e:e,node:t,canvas:i}){const s=e.canvasX-t.pos[0],o=this.width||t.size[0];if("function"==typeof this.options.values&&warnDeprecated("Using a function for values is deprecated. Use an array of unique values instead."),s<40)return this.decrementValue({e:e,node:t,canvas:i});if(s>o-40)return this.incrementValue({e:e,node:t,canvas:i});const a=__privateMethod(this,_ComboWidget_instances,getValues_fn).call(this,t),n=toArray(a),l=a!=n?Object.values(a):a;new LiteGraph.ContextMenu(l,{scale:Math.max(1,i.ds.scale),event:e,className:"dark",callback:s=>{this.setValue(a!=n?l.indexOf(s):s,{e:e,node:t,canvas:i})}})}}_ComboWidget_instances=new WeakSet,getValues_fn=function(e){const{values:t}=this.options;if(null==t)throw new Error("[ComboWidget]: values is required");return"function"==typeof t?t(this,e):t},canUseButton_fn=function(e){const{values:t}=this.options;if("function"==typeof t)return!1;const i=toArray(t);if(!(i.length>1))return!1;const s=i.at(0),o=i.at(-1);return s===o||this.value!==(e?o:s)},tryChangeValue_fn=function(e,t){const i=__privateMethod(this,_ComboWidget_instances,getValues_fn).call(this,t.node),s=toArray(i);t.canvas.last_mouseclick=0;const o=clamp("object"==typeof i?s.indexOf(String(this.value))+e:s.indexOf(this.value)+e,0,s.length-1),a=Array.isArray(i)?i[o]:o;this.setValue(a,t)};class NumberWidget extends BaseSteppedWidget{constructor(e,t){super(e,t),this.type="number"}get _displayValue(){return Number(this.value).toFixed(void 0!==this.options.precision?this.options.precision:3)}canIncrement(){const{max:e}=this.options;return null==e||this.valuee}incrementValue(e){this.setValue(this.value+getWidgetStep(this.options),e)}decrementValue(e){this.setValue(this.value-getWidgetStep(this.options),e)}setValue(e,t){let i=e;null!=this.options.min&&ithis.options.max&&(i=this.options.max),super.setValue(i,t)}onClick({e:e,node:node,canvas:canvas}){const x=e.canvasX-node.pos[0],width=this.width||node.size[0],delta=x<40?-1:x>width-40?1:0;delta?this.setValue(this.value+delta*getWidgetStep(this.options),{e:e,node:node,canvas:canvas}):canvas.prompt("Value",this.value,(v=>{if(/^[\d\s()*+/-]+|\d+\.\d+$/.test(v))try{v=eval(v)}catch{}const newValue=Number(v);isNaN(newValue)||this.setValue(newValue,{e:e,node:node,canvas:canvas})}),e)}onDrag({e:e,node:t,canvas:i}){const s=this.width||t.width,o=e.canvasX-t.pos[0];(o<40?-1:o>s-40?1:0)&&o>-3&&o{null!==s&&this.setValue(s,{e:e,node:t,canvas:i})}),e,(null==(s=this.options)?void 0:s.multiline)??!1)}}class LegacyWidget extends BaseWidget{draw(e,t,i,s,o,a){}drawWidget(e,t){const i=LiteGraph.NODE_WIDGET_HEIGHT;this.draw&&this.draw(e,this.node,t.width,this.y,i,!!t.showText)}onClick(){}}function toClass(e,...t){return t[0]instanceof e?t[0]:new e(...t)}function toConcreteWidget(e,t,i=!0){if(e instanceof BaseWidget)return e;const s=e;switch(s.type){case"button":return toClass(ButtonWidget,s,t);case"toggle":return toClass(BooleanWidget,s,t);case"slider":return toClass(SliderWidget,s,t);case"knob":return toClass(KnobWidget,s,t);case"combo":return toClass(ComboWidget,s,t);case"number":return toClass(NumberWidget,s,t);case"string":case"text":return toClass(TextWidget,s,t);default:if(i)return toClass(LegacyWidget,e,t)}}let nodesStore$1=null;const custom_themes=["custom_obsidian","custom_obsidian_dark","custom_milk_white","obsidian_dark","obsidian","milk_white"],NODE_CUSTOM_COLORS={"easy positive":"green","easy negative":"red","easy promptList":"cyan","easy promptLine":"cyan","easy promptConcat":"cyan","easy promptReplace":"cyan","easy forLoopStart":"blue","easy forLoopEnd":"blue","easy whileLoopStart":"blue","easy whileLoopEnd":"blue","easy loadImagesForLoop":"blue"};let NODE_COLOR_THEMES=LGraphCanvas.node_colors,color_palettes=null,color_palette=null,monitor=null;for(let e in settings)addSetting(settings[e]);let OriginDrawNodeWidgets=null;function getColorBrightness(e,t,i){return.299*e+.587*t+.114*i}function isColorDarkOrLight(e){let t=e.replace("#","");return getColorBrightness(parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16))>127.5?"light":"dark"}function drawNodeShape(e,t,i,s,o,a,n){var l,r;t.strokeStyle=s,t.fillStyle=o;const d=LiteGraph.NODE_TITLE_HEIGHT,{low_quality:c}=this,{collapsed:u}=e.flags,p=e.renderingShape,{title_mode:A}=e.constructor,g=A!=LiteGraph.TRANSPARENT_TITLE&&A!=LiteGraph.NO_TITLE;let h=new Float32Array(4);h=[0,g?-d:0,i[0]+1,g?i[1]+d:i[1]];let m=t.globalAlpha;if(t.lineWidth=1,t.beginPath(),p==LiteGraph.BOX_SHAPE||c?t.fillRect(h[0],h[1],h[2],h[3]):p==LiteGraph.ROUND_SHAPE||p==LiteGraph.CARD_SHAPE?t.roundRect(h[0],h[1],h[2],h[3],p==LiteGraph.CARD_SHAPE?[this.round_radius,this.round_radius,0,0]:[this.round_radius]):p==LiteGraph.CIRCLE_SHAPE&&t.arc(.5*i[0],.5*i[1],.5*i[0],0,2*Math.PI),t.strokeStyle=LiteGraph.WIDGET_OUTLINE_COLOR,t.stroke(),t.strokeStyle=s,t.fill(),e.has_errors&&!LiteGraph.use_legacy_node_error_indicator&&strokeShape(t,h,{shape:p,title_mode:A,title_height:d,padding:12,color:LiteGraph.NODE_ERROR_COLOUR,collapsed:u,thickness:10}),!u&&g&&(t.shadowColor="transparent",t.fillStyle="rgba(0,0,0,0.2)",t.fillRect(0,-1,h[2],2)),t.shadowColor="transparent",e.onDrawBackground&&e.onDrawBackground(t,this,this.canvas,this.graph_mouse),g||A==LiteGraph.TRANSPARENT_TITLE){const s="dark"==isColorDarkOrLight((null==e?void 0:e.color)||"#ffffff");e.drawTitleBarBackground(t,{scale:this.ds.scale,low_quality:c}),t.globalAlpha=m;let o=!1;LiteGraph.node_box_coloured_by_mode&&LiteGraph.NODE_MODES_COLORS[e.mode]&&(o=LiteGraph.NODE_MODES_COLORS[e.mode]),LiteGraph.node_box_coloured_when_on&&(o=e.action_triggered?"#FFF":e.execute_triggered?"#AAA":o);let n=10;if(e.onDrawTitleBox)e.onDrawTitleBox(t,d,i,this.ds.scale);else if(p==LiteGraph.ROUND_SHAPE||p==LiteGraph.CIRCLE_SHAPE||p==LiteGraph.CARD_SHAPE){const i=s?"#ffffff":LiteGraph.NODE_SELECTED_TITLE_COLOR,l=s?"#eeeeee":e.boxcolor||o||LiteGraph.NODE_DEFAULT_BOXCOLOR;t.fillStyle=a?i:l,t.beginPath(),t.fillRect(10,0-1.05*n-1,1.1*n,.125*n),t.fillRect(10,0-1.45*n-1,1.1*n,.125*n),t.fillRect(10,0-1.85*n-1,1.1*n,.125*n)}else t.fillStyle=e.renderingBoxColor,t.fillRect(.5*(d-n),-.5*(d+n),n,n);if(t.globalAlpha=m,e.onDrawTitleText&&e.onDrawTitleText(t,d,i,this.ds.scale,this.title_text_font,a),!c){t.font=this.title_text_font;const i=e.getTitle()??`❌ ${e.type}`,o=String(i)+(e.pinned?"📌":"");o&&(t.fillStyle=a?s?"#ffffff":LiteGraph.NODE_SELECTED_TITLE_COLOR:s?"#ffffff":e.constructor.title_text_color||this.node_title_color,e.flags.collapsed?(t.textAlign="left",t.measureText(o),t.fillText(o.substr(0,20),d,LiteGraph.NODE_TITLE_TEXT_Y-d),t.textAlign="left"):(t.textAlign="left",t.fillText(o,d,LiteGraph.NODE_TITLE_TEXT_Y-d)))}if(!u&&e.subgraph&&!e.skip_subgraph_button){let i=LiteGraph.NODE_TITLE_HEIGHT,s=e.size[0]-i,o=LiteGraph.isInsideRectangle(this.graph_mouse[0]-e.pos[0],this.graph_mouse[1]-e.pos[1],s+2,2-i,i-4,i-4);t.fillStyle=o?"#888":"#555",p==LiteGraph.BOX_SHAPE||c?t.fillRect(s+2,2-i,i-4,i-4):(t.beginPath(),t.roundRect(s+2,2-i,i-4,i-4,[4]),t.fill()),t.fillStyle="#333",t.beginPath(),t.moveTo(s+.2*i,.6*-i),t.lineTo(s+.8*i,.6*-i),t.lineTo(s+.5*i,.3*-i),t.fill()}null==(l=e.onDrawTitle)||l.call(e,t)}if(null==e?void 0:e.strokeStyles){for(const i of Object.values(e.strokeStyles)){const s=i.call(e);s&&strokeShape(t,h,{shape:p,title_height:d,title_mode:A,collapsed:u,...s})}null==e||e.drawProgressBar(t)}else if(a){null==(r=e.onBounding)||r.call(e,h),A==LiteGraph.TRANSPARENT_TITLE&&(h[1]-=d,h[3]+=d),t.lineWidth=2,t.globalAlpha=.8,t.beginPath();let o=0,a=0,n=1;p==LiteGraph.BOX_SHAPE?t.rect(o+h[0],o+h[1],a+h[2],a+h[3]):p==LiteGraph.ROUND_SHAPE||p==LiteGraph.CARD_SHAPE&&e.flags.collapsed?t.roundRect(o+h[0],o+h[1],a+h[2],a+h[3],[this.round_radius*n]):p==LiteGraph.CARD_SHAPE?t.roundRect(o+h[0],o+h[1],a+h[2],a+h[3],[this.round_radius*n,n,this.round_radius*n,n]):p==LiteGraph.CIRCLE_SHAPE&&t.arc(.5*i[0],.5*i[1],.5*i[0]+6,0,2*Math.PI),t.strokeStyle=LiteGraph.NODE_BOX_OUTLINE_COLOR,t.stroke(),t.strokeStyle=s,t.globalAlpha=1}e.execute_triggered>0&&e.execute_triggered--,e.action_triggered>0&&e.action_triggered--}function drawNodeWidgets(e,t,i){var s,o;if(!e.widgets)return;const a=e.widgets.some((e=>["easyHidden","fastHidden"].includes(e.type))),n=custom_themes.includes(color_palette);if(!a&&!n)return void(OriginDrawNodeWidgets&&(null==OriginDrawNodeWidgets||OriginDrawNodeWidgets.apply(this,arguments)));let l=this.low_quality||!1,r=this.editor_alpha||1;const d=e.size[0],{widgets:c}=e,u=LiteGraph.NODE_WIDGET_HEIGHT,p=!l;i.save(),i.globalAlpha=r;for(const A of c){if(!e.isWidgetVisible(A))continue;const{y:t}=A,a=A.advanced?LiteGraph.WIDGET_ADVANCED_OUTLINE_COLOR:LiteGraph.WIDGET_OUTLINE_COLOR;A.last_y=t,A.computedDisabled=A.disabled||null!=(null==(s=e.getSlotFromWidget(A))?void 0:s.link),i.strokeStyle=a,i.fillStyle="#222",i.textAlign="left",A.computedDisabled&&(i.globalAlpha*=.5);const c=A.width||d;if("function"==typeof A.draw)A.draw(i,e,c,t,u,l);else if("$$canvas-image-preview"==A.name){const e=(e,t,i,s)=>{renderPreview(e,t,s)};A.draw=e}else null==(o=toConcreteWidget(A,e,!1))||o.drawWidget(i,{width:c,showText:p,isEasyUseTheme:n});i.globalAlpha=r}i.restore()}function onMenuNodeMode(e,t,i,s,o){return new LiteGraph.ContextMenu(LiteGraph.NODE_MODES,{event:i,callback:function(e){if(!o)return;var t=Object.values(LiteGraph.NODE_MODES).indexOf(e),i=function(e){t>=0&&LiteGraph.NODE_MODES[t]?e.changeMode(t):e.changeMode(LiteGraph.ALWAYS),nodesStore$1||(nodesStore$1=useNodesStore()),nodesStore$1.update()},s=LGraphCanvas.active_canvas;if(!s.selected_nodes||Object.keys(s.selected_nodes).length<=1)i(o);else for(var a in s.selected_nodes)i(s.selected_nodes[a])},parentMenu:s,node:o}),!1}function onMenuNodeColors(e,t,i,s,o){if(!o)throw"no node for color";var a=[];for(var n in a.push({value:null,content:"No color"}),LGraphCanvas.node_colors){var l=LGraphCanvas.node_colors[n];e={value:n,content:""+n+""};a.push(e)}return new LiteGraph.ContextMenu(a,{event:i,callback:function(e){if(!o)return;var t=e.value?LGraphCanvas.node_colors[e.value]:null,i=function(e){t?e.constructor===LiteGraph.LGraphGroup?e.color=t.groupcolor:(e.color=t.color,e.bgcolor=t.bgcolor):(delete e.color,delete e.bgcolor),nodesStore$1||(nodesStore$1=useNodesStore()),nodesStore$1.update()},s=LGraphCanvas.active_canvas;if(!s.selected_nodes||Object.keys(s.selected_nodes).length<=1)i(o);else for(var a in s.selected_nodes)i(s.selected_nodes[a]);o.setDirtyCanvas(!0,!0)},parentMenu:s,node:o}),!1}function onShowPropertyEditor(e,t,i,s,o){var a=e.property||"title",n=o[a],l=document.createElement("div");l.is_modified=!1,l.className="graphdialog",l.innerHTML="",l.close=function(){l.parentNode&&l.parentNode.removeChild(l)},l.querySelector(".name").innerText=a;var r=l.querySelector(".value");r&&(r.value=n,r.addEventListener("blur",(function(e){this.focus()})),r.addEventListener("keydown",(function(e){if(l.is_modified=!0,27==e.keyCode)l.close();else if(13==e.keyCode)g();else if(13!=e.keyCode&&"textarea"!=e.target.localName)return;e.preventDefault(),e.stopPropagation()})));var d=LGraphCanvas.active_canvas.canvas,c=d.getBoundingClientRect(),u=-20,p=-20;c&&(u-=c.left,p-=c.top),event?(l.style.left=event.clientX+u+"px",l.style.top=event.clientY+p+"px"):(l.style.left=.5*d.width+u+"px",l.style.top=.5*d.height+p+"px"),l.querySelector("button").addEventListener("click",g),d.parentNode.appendChild(l),r&&r.focus();var A=null;function g(){r&&function(t){"Number"==e.type?t=Number(t):"Boolean"==e.type&&(t=Boolean(t));o[a]=t,l.parentNode&&l.parentNode.removeChild(l);o.setDirtyCanvas(!0,!0),nodesStore$1||(nodesStore$1=useNodesStore());nodesStore$1.update()}(r.value)}l.addEventListener("mouseleave",(function(e){LiteGraph.dialog_close_on_mouse_leave&&!l.is_modified&&LiteGraph.dialog_close_on_mouse_leave&&(A=setTimeout(l.close,LiteGraph.dialog_close_on_mouse_leave_delay))})),l.addEventListener("mouseenter",(function(e){LiteGraph.dialog_close_on_mouse_leave&&A&&clearTimeout(A)}))}registerExtension({name:"Comfy.EasyUse.UI",init(){var e,t;const i="Comfy.CustomColorPalettes",s="Comfy.Settings.Comfy.CustomColorPalettes";if(color_palettes||(color_palettes=getSetting(i,s)),color_palette||(color_palette=getSetting("Comfy.ColorPalette","Comfy.Settings.Comfy.ColorPalette")||"dark"),(!(null==(e=null==color_palettes?void 0:color_palettes.obsidian)?void 0:e.version)||color_palettes.obsidian.version{(null==e?void 0:e.value)&&(null==e?void 0:e.oldValue)&&(await sleep(1),Object.assign(app$1.canvas.default_connection_color_byType,CUSTOM_LINK_TYPES_COLOR),Object.assign(LGraphCanvas.link_type_colors,CUSTOM_LINK_TYPES_COLOR)),"custom_milk_white"==e.value&&document.body.classList.remove(DARK_THEME_CLASS)})),setTimeout((e=>setCrystoolsUI(getSetting("Comfy.UseNewMenu")||"Disabled")),1);const t=null==(e=app$1.ui.settings.settingsLookup)?void 0:e["Comfy.UseNewMenu"];t&&(t.onChange=e=>setCrystoolsUI(e)),api.addEventListener("easyuse-toast",(e=>{const t=e.detail.content,i=e.detail.type,s=e.detail.duration;i?toast.show({id:`toast-${i}`,icon:toast[i+"_icon"],content:`${t}`,duration:s||3e3}):toast.info(t,s)}))},async nodeCreated(e){if(NODE_CUSTOM_COLORS.hasOwnProperty(e.comfyClass)){const t=NODE_CUSTOM_COLORS[e.comfyClass],i=NODE_COLOR_THEMES[t];if(!i)return;!e.bgcolor&&i.bgcolor&&(e.bgcolor=i.bgcolor),!e.color&&i.color&&(e.color=i.color)}}});const setCrystoolsUI=e=>{var t;const i=(null==(t=document.getElementById("crystools-root"))?void 0:t.children)||null,s=getSetting("Comfy.Workflow.WorkflowTabsPosition",null);if((null==i?void 0:i.length)>0&&s)if(monitor||(monitor=document.getElementById("MonitorUI")),"Disabled"==e){document.getElementById("crystools-root").appendChild(monitor)}else{let e=document.getElementById("crystools-root-easyuse");if(e)e.appendChild(monitor);else{const e=document.getElementsByClassName("comfyui-menu-right");e.length>0&&e[0].before($el("div",{id:"crystools-root-easyuse"},monitor))}}};let origProps={};const getWidgetByName=(e,t)=>e.widgets.find((e=>e.name===t)),doesInputWithNameLink=(e,t,i)=>!!e.inputs&&e.inputs.some((e=>e.name===t&&e.link&&!i)),toggleWidget=(e,t,i=!1,s="")=>{var o;if(!t||doesInputWithNameLink(e,t.name,i))return;origProps[t.name]||(origProps[t.name]={origType:t.type,origComputeSize:t.computeSize});const a=e.size;t.type=i?origProps[t.name].origType:"easyHidden"+s,t.computeSize=i?origProps[t.name].origComputeSize:()=>[0,-4],null==(o=t.linkedWidgets)||o.forEach((s=>toggleWidget(e,s,":"+t.name,i)));const n=i?Math.max(e.computeSize()[1],a[1]):e.size[1];e.setSize([e.size[0],n])},getWidgetValue=(e,t=0)=>{var i,s;if(e)return(null==(i=e.widgets)?void 0:i[t])?e.widgets[t].value:e.widgets_values?null==(s=e.widgets_values)?void 0:s[t]:void 0},updateNodeHeight=e=>e.setSize([e.size[0],e.computeSize()[1]]),getNodeById=(e,t)=>graph.getNodeById(e),getSelectedNodes=e=>{var t;try{return Object.values(null==(t=null==graph?void 0:graph.list_of_graphcanvas[0])?void 0:t.selected_nodes)}catch(i){return[]}};function easeInOut(e){return.5-.5*Math.cos(Math.PI*e)}function lerp(e,t,i){return e+easeInOut(i)*(t-e)}const jumpToPosition=([e,t],i)=>{const s=i.ds,o=document.body.clientWidth,a=document.body.clientHeight,n=s.scale,l=.5*o/n-e,r=.5*a/n-t,d=Date.now()+250,c=s.offset[0],u=s.offset[1],p=()=>{const e=d-Date.now();if(!(Date.now(){var i,s;const o=(null==(s=null==(i=e.graph)?void 0:i.list_of_graphcanvas)?void 0:s[0])||null;if(!o)return;const[a,n]=e.pos,[l,r]=e.size;jumpToPosition([a+l/2,n+r/2],o),t&&o.selectNode(e)},jumpToNodeId=e=>{const t=getNodeById(e);t&&jumpToNode(t)},getLinks=()=>graph.links??[],getLinkById=(e,t=getLinks())=>t[e],getAllNodes=e=>graph._nodes??[],formatVariables=e=>e.toLowerCase().replace(/_./g,(e=>e.replace("_","").toUpperCase())),isGetNode=e=>"easy getNode"===e.type,isSetNode=e=>"easy setNode"===e.type,isGetSetNode=e=>isGetNode(e)||isSetNode(e),getGetSetNodes=(e=getAllNodes())=>e.filter((e=>isGetSetNode(e)));let lastTargetGetPos={},lastTargetSetPos={};const chainNode=(e=!1,t={})=>{var i,s,o,a,n;const l=getGetSetNodes();if(!l||l.length<1)return;const r=getSelectedNodes();if(0===r.length)return;let d=t.inputX||160,c=t.ouputX||60;if(r.filter((e=>isGetSetNode(e))).length>1)return;for(const p of r){let a=t.inputY||10,n=t.outputY||30;const l=[],u=p.id;if(p.graph){lastTargetGetPos[u]||(lastTargetGetPos[u]=[]);for(const e of p.inputs??[]){const t=e.link;if(!t)continue;const{origin_id:i,target_slot:s}=getLinkById(t),o=getNodeById(i);if(!o)continue;if(!isGetSetNode(o))continue;let n=p.getConnectionPos(!0,s);lastTargetGetPos[u][s]||(lastTargetGetPos[u][s]=n),!lastTargetGetPos[u]||lastTargetGetPos[u][s][1]===n[1]&&lastTargetGetPos[u][s][0]===n[0]||(d=n[0]-lastTargetGetPos[u][s][0],a=n[1]-lastTargetGetPos[u][s][1],o.pos=[o.pos[0]+d,o.pos[1]+a]),lastTargetGetPos[u][s]=n,l.push(o)}lastTargetSetPos[u]||(lastTargetSetPos[u]=[]);for(const e of p.outputs??[])if(e.links&&p.graph)for(const t of e.links){const{target_id:e,target_slot:s,origin_slot:o}=getLinkById(t),a=getNodeById(e);if(!a)continue;if(!isGetSetNode(a))continue;const r=null==(i=a.outputs)?void 0:i.links;if((null==r?void 0:r.length)>1)return;const d=p.getConnectionPos(!1,o);lastTargetSetPos[u][o]||(lastTargetSetPos[u][o]=d),!lastTargetSetPos[u]||lastTargetSetPos[u][o][0]===d[0]&&lastTargetSetPos[u][o][1]===d[1]||(c=d[0]-lastTargetSetPos[u][o][0],n=d[1]-lastTargetSetPos[u][o][1],a.pos=[a.pos[0]+c,a.pos[1]+n]),lastTargetSetPos[u][o]=d,l.push(a)}if(e&&1===r.length){const e=[p,...l];(null==(o=null==(s=p.graph)?void 0:s.list_of_graphcanvas)?void 0:o[0]).selectNodes(e)}}}const u=r[0];if(!u)return;(null==(n=null==(a=u.graph)?void 0:a.list_of_graphcanvas)?void 0:n[0]).setDirty(!0,!0)},setWidgetValue=(e,t,i=0)=>{e.widgets_values||(e.widgets_values=[]),e.widgets_values[i]=t,e.widgets[i].value=t},graphAdd=e=>graph.add(e),graphRemove=e=>graph.remove(e),traverseInputReroute=(e,t=0)=>{var i,s;if("Reroute"!==e.type)return[e,t];const o=e,a=null==(s=null==(i=o.inputs)?void 0:i[0])?void 0:s.link;if(!a)return[o,t];const n=getLinkById(a);if(!n)return[o,t];const l=getNodeById(n.origin_id);return l?(setTimeout((()=>{graphRemove(o)})),traverseInputReroute(l,n.origin_slot)):[o,t]},traverseOutputReroute=e=>{var t,i,s;if("Reroute"!==e.type)return e;const o=e,a=null==(i=null==(t=o.outputs)?void 0:t[0])?void 0:i.links;if(!a)return o;const n=a[0];if(!n)return o;const l=getLinkById(n);if(!l)return o;const r=getNodeById(l.target_id);return r?(1===(null==(s=o.outputs[0].links)?void 0:s.length)&&setTimeout((()=>{graphRemove(o)})),traverseOutputReroute(r)):o},convertLinkToGetSetNode=(e,t=!1)=>{var i,s,o,a,n,l,r,d,c,u;const{type:p}=e;if("*"===p)return;let{origin_id:A,target_id:g,origin_slot:h,target_slot:m}=e,f=getNodeById(A),y=getNodeById(g);if(!f||!y)return!1;if("Reroute"===f.type){let e=0;[f,e]=traverseInputReroute(f),A=null==f?void 0:f.id,h=e,void 0!==h&&-1!==h||(h=0)}if("Reroute"===y.type&&(y=traverseOutputReroute(y),g=null==y?void 0:y.id,m=null==y?void 0:y.inputs.findIndex((e=>e.type===p)),void 0!==m&&-1!==m||(m=0)),void 0===A||void 0===g||!f||!y)return!1;if(t&&(isGetSetNode(f)||isGetSetNode(y)))return!1;let v=formatVariables((null==(i=y.getInputInfo(m))?void 0:i.name)??p.toLowerCase());v||(v=formatVariables((null==(o=null==(s=null==f?void 0:f.outputs)?void 0:s[h])?void 0:o.name)??(null==(n=null==(a=null==f?void 0:f.outputs)?void 0:a[h])?void 0:n.type.toString())??v+`_from_${A}_to_${g}`));let _,b=!1,S=!1;if(isGetSetNode(f))v=getWidgetValue(f),S=!0;else{const e=null==(r=null==(l=f.outputs)?void 0:l[h])?void 0:r.links;if(e)for(const t of e){const e=getNodeById((null==(d=getLinkById(t))?void 0:d.target_id)??-1);e&&isGetSetNode(e)&&isSetNode(e)&&(v=getWidgetValue(e),S=!0)}if(!S){for(const e of getGetSetNodes()){if(!(v===getWidgetValue(e)&&isSetNode(e)))continue;const t=null==(c=e.inputs[0])?void 0:c.link;(null==(u=getLinkById(t))?void 0:u.origin_id)===f.id?S=!0:b=!0}b&&(v+=`_from_${A}_to_${g}`)}}if(!S){_=LiteGraph.createNode("easy setNode"),_.is_auto_link=!0;const e=f.getConnectionPos(!1,h);_.pos=[e[0]+20,e[1]],_.inputs[0].name=v,_.inputs[0].type=p,_.inputs[0].widget=y.inputs[m].widget,setWidgetValue(_,v),graphAdd(_),_.flags.collapsed=!0;let t=[];f.widgets?t=Object.values(f.widgets).map((e=>e.value)):f.widgets_values&&(t=JSON.parse(JSON.stringify(f.widgets_values))),f.connect(h,_,0),f.widgets_values=t,"PrimitiveNode"===f.type&&setTimeout((()=>{if(f){f.connect(h,_,0);for(const[e,i]of t.entries())setWidgetValue(f,i,e);null!==_&&_.setSize(_.computeSize())}}))}const N=LiteGraph.createNode("easy getNode"),w=y.getConnectionPos(!0,m);N.pos=[w[0]-150,w[1]],N.outputs[0].name=v,N.outputs[0].type=p,N.outputs[0].widget=y.inputs[m].widget,graphAdd(N),setWidgetValue(N,v),null===N||(N.flags.collapsed=!0,N.setSize(N.computeSize()),N.connect(0,y,m))},addNodesToGroup=(e,t=[],i=20)=>{var s,o,a,n,l,r,d,c,u,p;for(var A of(o=a=n=l=-1,r=d=c=u=-1,[e._nodes,t]))for(var g in A)r=(p=A[g]).pos[0],d=p.pos[1],c=p.pos[0]+p.size[0],u=p.pos[1]+p.size[1],"Reroute"!=p.type&&(d-=LiteGraph.NODE_TITLE_HEIGHT),(null==(s=p.flags)?void 0:s.collapsed)&&(u=d+LiteGraph.NODE_TITLE_HEIGHT,(null==p?void 0:p._collapsed_width)&&(c=r+Math.round(p._collapsed_width))),(-1==o||rn)&&(n=c),(-1==l||u>l)&&(l=u);a-=Math.round(1.4*e.font_size),e.pos=[o-i,a-i],e.size=[n-o+2*i,l-a+2*i]},setNodesSameSize=(e,t="width")=>{var i;const s=e[0],o="width"==t?0:1,a=null==(i=s.size)?void 0:i[o];a&&(e.forEach((e=>{e.size[o]=a})),LGraphCanvas.active_canvas.setDirty(!0,!0))},distributeNodes=(e,t="horizontal")=>{if(e.length<3)return;const i="horizontal"===t?0:1;e.sort(((e,t)=>e.pos[i]-t.pos[i]));const s=Math.min(...e.map((e=>e.pos[i]))),o=(Math.max(...e.map((e=>e.pos[i]+e.size[i])))-s-e.reduce(((e,t)=>e+t.size[i]),0))/(e.length-1);let a=s;e.forEach((e=>{e.pos[i]=a,a+=e.size[i]+o})),LGraphCanvas.active_canvas.setDirty(!0,!0)},CANVAS_IMAGE_PREVIEW_WIDGET="$$canvas-image-preview";function useNodeCanvasImagePreview(){const e=useImagePreviewWidget();return{showCanvasImagePreview:function(t){var i;(null==(i=t.imgs)?void 0:i.length)&&t.widgets&&(t.widgets.find((e=>e.name===CANVAS_IMAGE_PREVIEW_WIDGET))||e(t,{type:"IMAGE_PREVIEW",name:CANVAS_IMAGE_PREVIEW_WIDGET}))},removeCanvasImagePreview:function(e){var t,i;if(!e.widgets)return;const s=e.widgets.findIndex((e=>e.name===CANVAS_IMAGE_PREVIEW_WIDGET));s>-1&&(null==(i=(t=e.widgets[s]).onRemove)||i.call(t),e.widgets.splice(s,1))}}}const ANIM_PREVIEW_WIDGET="$$comfy_animation_preview";function useNodeVideoPreview(){return{showVideoPreview:function(e){var t;(null==(t=e.video)?void 0:t.length)&&e.widgets&&e.widgets.findIndex((e=>e.name===ANIM_PREVIEW_WIDGET))},removeVideoPreview:function(e){var t,i;if(!e.widgets)return;const s=e.widgets.findIndex((e=>"video-preview"===e.name));s>-1&&(null==(i=(t=e.widgets[s]).onRemove)||i.call(t),e.widgets.splice(s,1))}}}const VIDEO_NODE_PROPERTY="video_upload",getNodeData=e=>{var t;return null==(t=e.constructor)?void 0:t.nodeData},getInputSpecsFromData=e=>{if(!e)return[];const{required:t,optional:i}=e,s=[];if(t)for(const o of Object.values(t))s.push(o);if(i)for(const o of Object.values(i))s.push(o);return s},hasInputProperty=(e,t)=>{if(!e)return!1;const i=getNodeData(e);if(!(null==i?void 0:i.input))return!1;return getInputSpecsFromData(i.input).some((e=>{var i;return null==(i=null==e?void 0:e[1])?void 0:i[t]}))};function isVideoNode(e){return!!e&&(!!e.videoContainer||!!e.widgets&&hasInputProperty(e,VIDEO_NODE_PROPERTY))}const getNodeId=e=>null==e?void 0:e.id.toString(),getNodeOutputs=e=>app$1.nodeOutputs[getNodeId(e)],getNodePreviews=e=>app$1.nodePreviewImages[getNodeId(e)],getPreviewParam=e=>e.animatedImages?"":app$1.getPreviewFormatParam();function getNodeImageUrls(e){var t;const i=getNodePreviews(e),s=getNodeOutputs(e);if((null==i?void 0:i.length)&&!e.isOutputFinal)return i;if(!(null==(t=null==s?void 0:s.images)?void 0:t.length))return(null==i?void 0:i.length)?i:void 0;const o=app$1.getRandParam(),a=getPreviewParam(e);return s.images.map((e=>{const t=new URLSearchParams(e);return api.apiURL(`/view?${t}${a}${o}`)}))}const VIDEO_WIDGET_NAME="video-preview",VIDEO_DEFAULT_OPTIONS={playsInline:!0,controls:!0,loop:!0},MEDIA_LOAD_TIMEOUT=8192,MAX_RETRIES=1,VIDEO_PIXEL_OFFSET=64,createContainer=()=>{const e=document.createElement("div");return e.classList.add("comfy-img-preview"),e},createTimeout=e=>new Promise((t=>setTimeout((()=>t(null)),e))),getVideoRealURL=e=>api.apiURL(`/view?filename=${encodeURIComponent(e.filename)}&type=${e.type}&subfolder=${e.subfolder}&rand=${Math.random()}`),useNodePreview=(e,t)=>{const{loadElement:i,onLoaded:s,onFailedLoading:o}=t,a=async(e,t=0)=>{const s=await Promise.race([i(e),createTimeout(MEDIA_LOAD_TIMEOUT)]);return null===s&&t0?e.videos.map((e=>getVideoRealURL(e))):getNodeImageUrls(e);(null==n?void 0:n.length)&&((null==t?void 0:t.block)&&(e.isLoading=!0),(async e=>Promise.all(e.map((e=>a(e)))))(n).then((e=>{const t=e.filter((e=>null!==e));t.length&&(null==s||s(t))})).catch((()=>{null==o||o()})).finally((()=>{e.isLoading=!1})))}}},useNodeImage=e=>{e.previewMediaType="image";return useNodePreview(e,{loadElement:e=>new Promise((t=>{const i=new Image;i.onload=()=>t(i),i.onerror=()=>t(null),i.src=e})),onLoaded:t=>{e.imageIndex=null,e.imgs=t},onFailedLoading:()=>{e.imgs=void 0}})},useNodeVideo=e=>{e.previewMediaType="video";return useNodePreview(e,{loadElement:e=>new Promise((t=>{const i=document.createElement("video");Object.assign(i,VIDEO_DEFAULT_OPTIONS),i.onloadeddata=()=>t(i),i.onerror=()=>t(null),i.src=e})),onLoaded:t=>{const i=t[0];var s,o;i&&(e.videoContainer||(e.imgs&&(e.imgs=void 0),e.videoContainer=createContainer(),e.videoContainer.style.pointerEvents="auto",s=e.videoContainer,(null==(o=e.widgets)?void 0:o.some((e=>e.name===VIDEO_WIDGET_NAME)))||e.addDOMWidget(VIDEO_WIDGET_NAME,"video",s,{hideOnZoom:!1,serialize:!1})),e.videoContainer.replaceChildren(i),e.imageOffset=VIDEO_PIXEL_OFFSET)},onFailedLoading:()=>{e.videoContainer=void 0}})};function unsafeDrawBackground(e,t){var i;if(e.flags.collapsed)return;const{showCanvasImagePreview:s,removeCanvasImagePreview:o}=useNodeCanvasImagePreview(),{showVideoPreview:a,removeVideoPreview:n}=useNodeVideoPreview(),l=getNodeOutputs(e),r=getNodePreviews(e),d=l&&(e.images!==l.images||e.videos!==l.videos),c=r&&e.preview!==r;if(c&&(e.isOutputFinal=!1,e.isTwiceRendered&&(e.isTwiceRendered=!1),e.preview=r),d&&(e.isOutputFinal=!0,l.images&&(e.images=l.images),l.videos&&(e.videos=l.videos)),d||c){e.animatedImages=null==l?void 0:l.animated;const t=e.animatedImages&&l.images.some((e=>{var t;return null==(t=e.filename)?void 0:t.includes("webp")})),i=e.animatedImages&&!t||isVideoNode(this);d&&(null==l?void 0:l.videos)||i?useNodeVideo(e).showPreview():useNodeImage(e).showPreview()}e.id!=app$1.runningNodeId&&!e.isTwiceRendered&&e.isOutputFinal&&(e.videos?useNodeVideo(e.videos):useNodeImage(e).showPreview(),e.isTwiceRendered=!0),(null==(i=e.imgs)?void 0:i.length)&&(e.animatedImages||d&&(null==l?void 0:l.videos)?(o(e),a(e)):(n(e),s(e)))}const allow_widgets=["rescale_after_model","rescale","lora_name","upscale_method","image_output","add_noise","info","sampler_name","ckpt_B_name","ckpt_C_name","save_model","refiner_ckpt_name","num_loras","num_controlnet","mode","toggle","resolution","ratio","target_parameter","input_count","replace_count","downscale_mode","range_mode","text_combine_mode","input_mode","lora_count","ckpt_count","conditioning_mode","preset","use_tiled","use_batch","num_embeds","easing_mode","guider","scheduler","inpaint_mode","t5_type","rem_mode","encode","method"],ipa_presets=["LIGHT - SD1.5 only (low strength)","STANDARD (medium strength)","VIT-G (medium strength)","REGULAR - FLUX and SD3.5 only (high strength)","PLUS (high strength)","PLUS (kolors genernal)","PLUS FACE (portraits)","FULL FACE - SD1.5 only (portraits stronger)","COMPOSITION"],ipa_loras_presets=["FACEID","FACEID PLUS - SD1.5 only","FACEID PLUS V2","FACEID PLUS KOLORS"],ipa_faceid_presets=[...ipa_loras_presets,"FACEID PORTRAIT (style transfer)","FACEID PORTRAIT UNNORM - SDXL only (strong)"],has_seed_nodes=["easy seed","easy latentNoisy","easy wildcards","easy preSampling","easy preSamplingAdvanced","easy preSamplingNoiseIn","easy preSamplingSdTurbo","easy preSamplingCascade","easy preSamplingDynamicCFG","easy preSamplingLayerDiffusion","easy fullkSampler","easy fullCascadeKSampler"],loader_nodes=["easy fullLoader","easy a1111Loader","easy comfyLoader","easy hyditLoader","easy pixArtLoader"],samplers_nodes=["easy fullkSampler","easy kSampler","easy kSamplerCustom","easy kSamplerTiled","easy kSamplerLayerDiffusion","easy kSamplerInpainting","easy kSamplerDownscaleUnet","easy kSamplerSDTurbo","easy fullCascadeKSampler","easy cascadeKSampler"],image_dynamic_nodes=["easy imageSize","easy imageSizeBySide","easy imageSizeByLongerSide","easy imageSizeShow","easy imageRatio","easy imagePixelPerfect"],loop_nodes=["easy forLoopStart","easy forLoopEnd","easy whileLoopStart","easy whileLoopEnd"],index_switch_nodes=["easy anythingIndexSwitch","easy imageIndexSwitch","easy textIndexSwitch","easy conditioningIndexSwitch"],inverse_switch_nodes=["easy anythingInversedSwitch"],change_slots_nodes=["easy loadImagesForLoop",...loop_nodes,...index_switch_nodes,...inverse_switch_nodes],value_names={"easy anythingInversedSwitch":"out","easy anythingIndexSwitch":"value","easy imageIndexSwitch":"image","easy textIndexSwitch":"text","easy conditioningIndexSwitch":"cond"};function toggleLogic(e,t){var i;const s=e.comfyClass;let o=t.value;switch(t.name){case"range_mode":toggleWidget(e,getWidgetByName(e,"step"),"step"==o),toggleWidget(e,getWidgetByName(e,"num_steps"),"num_steps"==o),updateNodeHeight(e);break;case"text_combine_mode":toggleWidget(e,getWidgetByName(e,"replace_text"),"replace"==o);break;case"lora_name":["lora_model_strength","lora_clip_strength"].map((t=>toggleWidget(e,getWidgetByName(e,t),"None"!==o)));break;case"resolution":"自定义 x 自定义"===o&&(t.value="width x height (custom)"),["empty_latent_width","empty_latent_height","width","height"].map((t=>toggleWidget(e,getWidgetByName(e,t),"width x height (custom)"===o)));break;case"ratio":["empty_latent_width","empty_latent_height"].map((t=>toggleWidget(e,getWidgetByName(e,t),"custom"===o)));break;case"num_loras":var a=o+1,n=null==(i=getWidgetByName(e,"mode"))?void 0:i.value;requestAnimationFrame((t=>{for(let i=0;itoggleWidget(e,getWidgetByName(e,t),"simple"!==n)));for(let i=a;i<99;i++)["lora_"+i+"_name","lora_"+i+"_strength","lora_"+i+"_model_strength","lora_"+i+"_clip_strength"].map((t=>toggleWidget(e,getWidgetByName(e,t),!1)));updateNodeHeight(e)}));break;case"num_controlnet":a=o+1,n=getWidgetByName(e,"mode").value;for(let t=0;ttoggleWidget(e,getWidgetByName(e,t),!0))),["start_percent_"+t,"end_percent_"+t].map((t=>toggleWidget(e,getWidgetByName(e,t),"simple"!==n)));for(let t=a;t<21;t++)["controlnet_"+t,"controlnet_"+t+"_strength","scale_soft_weight_"+t,"start_percent_"+t,"end_percent_"+t].map((t=>toggleWidget(e,getWidgetByName(e,t),!1)));updateNodeHeight(e);break;case"mode":switch(null==e?void 0:e.comfyClass){case"easy loraStack":a=getWidgetByName(e,"num_loras").value+1,n=o;for(let t=0;ttoggleWidget(e,getWidgetByName(e,t),"simple"!==n)));updateNodeHeight(e);break;case"easy controlnetStack":a=getWidgetByName(e,"num_controlnet").value+1,n=o;for(let t=0;ttoggleWidget(e,getWidgetByName(e,t),"simple"!==n)));updateNodeHeight(e);break;case"easy icLightApply":n=o;["lighting","remove_bg"].map((t=>toggleWidget(e,getWidgetByName(e,t),"Foreground"===n))),toggleWidget(e,getWidgetByName(e,"source"),"Foreground"!==n),updateNodeHeight(e)}break;case"toggle":t.type="toggle",t.options={on:"Enabled",off:"Disabled"};break;case"t5_type":["clip_name","padding"].map((t=>toggleWidget(e,getWidgetByName(e,t),"sd3"==o))),["t5_name","device","dtype"].map((t=>toggleWidget(e,getWidgetByName(e,t),"t5v11"==o))),updateNodeHeight(e);break;case"preset":if("FLUX.1-dev"==o&&(t.value="REGULAR - FLUX and SD3.5 only (high strength)"),ipa_presets.includes(o)){let t=getWidgetByName(e,"use_tiled");toggleWidget(e,getWidgetByName(e,"lora_strength")),toggleWidget(e,getWidgetByName(e,"provider"),!!["REGULAR - FLUX and SD3.5 only (high strength)"].includes(o)),toggleWidget(e,getWidgetByName(e,"weight_faceidv2")),toggleWidget(e,getWidgetByName(e,"weight_kolors")),toggleWidget(e,getWidgetByName(e,"use_tiled"),!0),toggleWidget(e,getWidgetByName(e,"sharpening"),t&&t.value)}else ipa_faceid_presets.includes(o)&&(toggleWidget(e,getWidgetByName(e,"weight_faceidv2"),!!["FACEID PLUS V2","FACEID PLUS KOLORS"].includes(o)),toggleWidget(e,getWidgetByName(e,"weight_kolors"),!!["FACEID PLUS KOLORS"].includes(t.value)),["FACEID PLUS KOLORS","FACEID PORTRAIT (style transfer)","FACEID PORTRAIT UNNORM - SDXL only (strong)"].includes(o)?toggleWidget(e,getWidgetByName(e,"lora_strength"),!1):toggleWidget(e,getWidgetByName(e,"lora_strength"),!0),toggleWidget(e,getWidgetByName(e,"provider"),!0),toggleWidget(e,getWidgetByName(e,"use_tiled")),toggleWidget(e,getWidgetByName(e,"sharpening")));updateNodeHeight(e);break;case"use_tiled":toggleWidget(e,getWidgetByName(e,"sharpening"),!!o),updateNodeHeight(e);break;case"num_embeds":a=o+1;for(let t=0;ttoggleWidget(e,getWidgetByName(e,t),!1)));break;case"brushnet_random":case"brushnet_segmentation":["dtype","scale","start_at","end_at"].map((t=>toggleWidget(e,getWidgetByName(e,t),!0))),["fitting","function"].map((t=>toggleWidget(e,getWidgetByName(e,t),!1)));break;case"powerpaint":["dtype","fitting","function","scale","start_at","end_at"].map((t=>toggleWidget(e,getWidgetByName(e,t),!0)))}updateNodeHeight(e);break;case"encode":toggleWidget(e,getWidgetByName(e,"noise_mask"),!!["inpaint_model_conditioning","different_diffusion"].includes(o)),updateNodeHeight(e);break;case"image_output":toggleWidget(e,getWidgetByName(e,"link_id"),!!["Sender","Sender&Save"].includes(o)),toggleWidget(e,getWidgetByName(e,"decode_vae_name"),!!["Hide","Hide&Save"].includes(o)),["save_prefix","output_path","embed_workflow","number_padding","overwrite_existing"].map((t=>toggleWidget(e,getWidgetByName(e,t),!!["Save","Hide&Save","Sender&Save"].includes(o))));break;case"add_noise":var l=getWidgetByName(e,"control_before_generate"),r=getWidgetByName(e,"control_after_generate")||l;"disable"===o?(toggleWidget(e,getWidgetByName(e,"seed")),r&&(r.last_value=r.value,r.value="fixed",toggleWidget(e,r))):("enable"===o&&(t.value="enable (CPU)"),toggleWidget(e,getWidgetByName(e,"seed"),!0),r&&((null==r?void 0:r.last_value)&&(r.value=r.last_value),toggleWidget(e,r,!0))),updateNodeHeight(e);break;case"guider":switch(o){case"Basic":case"IP2P+Basic":["cfg_negative"].map((t=>toggleWidget(e,getWidgetByName(e,t))));break;case"CFG":case"IP2P+CFG":toggleWidget(e,getWidgetByName(e,"cfg"),!0),toggleWidget(e,getWidgetByName(e,"cfg_negative"));break;case"DualCFG":case"IP2P+DualCFG":["cfg","cfg_negative"].map((t=>toggleWidget(e,getWidgetByName(e,t),!0)))}updateNodeHeight(e);break;case"scheduler":"easy preSamplingCustom"==s&&(["karrasADV","exponentialADV","polyExponential"].includes(o)?(["sigma_max","sigma_min"].map((t=>toggleWidget(e,getWidgetByName(e,t),!0))),["denoise","beta_d","beta_min","eps_s","coeff"].map((t=>toggleWidget(e,getWidgetByName(e,t))),!1),toggleWidget(e,getWidgetByName(e,"rho"),"exponentialADV"!=o)):"vp"==o?(["sigma_max","sigma_min","denoise","rho","coeff"].map((t=>toggleWidget(e,getWidgetByName(e,t)))),["beta_d","beta_min","eps_s"].map((t=>toggleWidget(e,getWidgetByName(e,t),!0)))):(["sigma_max","sigma_min","beta_d","beta_min","eps_s","rho"].map((t=>toggleWidget(e,getWidgetByName(e,t)))),toggleWidget(e,getWidgetByName(e,"coeff"),"gits"==o),toggleWidget(e,getWidgetByName(e,"denoise"),!0)),updateNodeHeight(e));break;case"conditioning_mode":["replace","concat","combine"].includes(o)?["average_strength","old_cond_start","old_cond_end","new_cond_start","new_cond_end"].map((t=>toggleWidget(e,getWidgetByName(e,t)))):"average"==o?(toggleWidget(e,getWidgetByName(e,"average_strength"),!0),["old_cond_start","old_cond_end","new_cond_start","new_cond_end"].map((t=>toggleWidget(e,getWidgetByName(e,t),!1)))):"timestep"==o&&(["average_strength"].map((t=>toggleWidget(e,getWidgetByName(e,t),!1))),["old_cond_start","old_cond_end","new_cond_start","new_cond_end"].map((t=>toggleWidget(e,getWidgetByName(e,t),!0))));break;case"rescale":getWidgetByName(e,"rescale_after_model").value,toggleWidget(e,getWidgetByName(e,"width"),"to Width/Height"===o),toggleWidget(e,getWidgetByName(e,"height"),"to Width/Height"===o),toggleWidget(e,getWidgetByName(e,"percent"),"by percentage"===o),toggleWidget(e,getWidgetByName(e,"longer_side"),"to longer side - maintain aspect"===o),updateNodeHeight(e);break;case"upscale_method":["factor","crop"].map((t=>toggleWidget(e,getWidgetByName(e,t),"None"!==o)));break;case"target_parameter":switch(s){case"easy XYInputs: Steps":["first_step","last_step"].map((t=>toggleWidget(e,getWidgetByName(e,t),"steps"==o))),["first_start_step","last_start_step"].map((t=>toggleWidget(e,getWidgetByName(e,t),"start_at_step"==o))),["first_end_step","last_end_step"].map((t=>toggleWidget(e,getWidgetByName(e,t),"end_at_step"==o)));break;case"easy XYInputs: Sampler/Scheduler":let t=getWidgetByName(e,"input_count").value+1;for(let i=0;itoggleWidget(e,getWidgetByName(e,t),"strength"==o))),["first_start_percent","last_start_percent"].map((t=>toggleWidget(e,getWidgetByName(e,t),"start_percent"==o))),["first_end_percent","last_end_percent"].map((t=>toggleWidget(e,getWidgetByName(e,t),"end_percent"==o))),["strength","start_percent","end_percent"].map((t=>toggleWidget(e,getWidgetByName(e,t),o!=t))),updateNodeHeight(e)}case"replace_count":a=o+1;for(let t=0;ttoggleWidget(e,getWidgetByName(e,t),!d)));for(let t=a;t<11;t++)["lora_name_"+t,"model_str_"+t,"clip_str_"+t].map((t=>toggleWidget(e,getWidgetByName(e,t),!1)));updateNodeHeight(e);break;case"ckpt_count":a=o+1;var c=-1!=getWidgetByName(e,"input_mode").value.indexOf("ClipSkip"),u=-1!=getWidgetByName(e,"input_mode").value.indexOf("VAE");for(let t=0;ttoggleWidget(e,getWidgetByName(e,t),!1)));updateNodeHeight(e);break;case"input_count":a=o+1;var p=getWidgetByName(e,"target_parameter").value;for(let t=0;ttoggleWidget(e,getWidgetByName(e,i),!!t)));["model_strength","clip_strength"].map((i=>toggleWidget(e,getWidgetByName(e,i),!t)));break;case"easy XYInputs: Checkpoint":a=getWidgetByName(e,"ckpt_count").value+1,c=-1!=getWidgetByName(e,"input_mode").value.indexOf("ClipSkip"),u=-1!=getWidgetByName(e,"input_mode").value.indexOf("VAE");for(let i=0;ie.name===t));if(-1!==e){for(let t=e;t{var e;const t=this.computeSize();t[0]"info"===e.name));if(-1!==e&&this.widgets[e]){this.widgets[e].value=t}}requestAnimationFrame((()=>{var e;const t=this.computeSize();t[0]"prompt"==e.name));this.addWidget("button","get values from COMBO link","",(()=>{var t,s;const o=(null==(s=null==(t=this.outputs[1])?void 0:t.links)?void 0:s.length)>0?this.outputs[1].links[0]:null,a=i.graph._nodes.find((e=>{var t;return null==(t=e.inputs)?void 0:t.find((e=>e.link==o))}));if(o&&a){const t=a.inputs.find((e=>e.link==o)).widget.name,i=a.widgets.find((e=>e.name==t));let s=(null==i?void 0:i.options.values)||null;s&&(s=s.join("\n"),e.value=s)}else toast.error($t("No COMBO link"),3e3)}),{serialize:!1})}),loader_nodes.includes(t.name)){let t=function(e){var t="";for(let i=0;ie.name===t+"_prompt")),s="comfy-multiline-input wildcard_"+t+"_"+this.id.toString();if(-1==i&&e){const i=document.createElement("textarea");i.className=s,i.placeholder="Wildcard Prompt ("+t+")";const o=this.addDOMWidget(t+"_prompt","customtext",i,{getValue:e=>i.value,setValue(e){i.value=e},serialize:!1});o.inputEl=i,o.inputEl.readOnly=!0,i.addEventListener("input",(()=>{var e;null==(e=o.callback)||e.call(o,o.value)})),o.value=e}else if(this.widgets[i])if(e){this.widgets[i].value=e}else{this.widgets.splice(i,1);const e=document.getElementsByClassName(s);e&&e[0]&&e[0].remove()}}};e.prototype.onExecuted=function(e){null==r||r.apply(this,arguments);const s=t(e.positive),o=t(e.negative);i.call(this,s,"positive"),i.call(this,o,"negative")}}if(["easy sv3dLoader"].includes(t.name)){let t=function(e,t,i){switch(e){case"azimuth":return i.readOnly=!0,i.style.opacity=.6,"0:(0.0,0.0)"+(t>1?`\n${t-1}:(360.0,0.0)`:"");case"elevation":return i.readOnly=!0,i.style.opacity=.6,"0:(-90.0,0.0)"+(t>1?`\n${t-1}:(90.0,0.0)`:"");case"custom":return i.readOnly=!1,i.style.opacity=1,"0:(0.0,0.0)\n9:(180.0,0.0)\n20:(360.0,0.0)"}};e.prototype.onNodeCreated=async function(){n&&n.apply(this,[]);const e=this.widgets.find((e=>"easing_mode"==e.name)),i=this.widgets.find((e=>"batch_size"==e.name)),s=this.widgets.find((e=>"scheduler"==e.name));setTimeout((o=>{s.value||(s.value=t(e.value,i.value,s.inputEl))}),1),e.callback=e=>{s.value=t(e,i.value,s.inputEl)},i.callback=i=>{s.value=t(e.value,i,s.inputEl)}}}if(has_seed_nodes.includes(o)&&(e.prototype.onNodeCreated=async function(){n&&n.apply(this,[]);const e=this.widgets.find((e=>["seed_num","seed"].includes(e.name))),s=this.widgets.find((e=>["control before generate","control after generate","control_before_generate","control_after_generate"].includes(e.name)));if("easy seed"==t.name&&s){const t=this.addWidget("button","🎲 Manual Random Seed",null,(t=>{"fixed"!=s.value&&(s.value="fixed"),e.value=Math.floor(Math.random()*MAX_SEED_NUM),i.queuePrompt(0,1)}),{serialize:!1});e.linkedWidgets=[t,s]}},e.prototype.onAdded=async function(){a&&a.apply(this,[]);const e=this.widgets.find((e=>["seed_num","seed"].includes(e.name))),t=this.widgets.find((e=>["control before generate","control after generate","control_before_generate","control_after_generate"].includes(e.name)));t&&setTimeout((i=>{["control before generate","control_before_generate"].includes(t.name)&&0===e.value&&(e.value=Math.floor(Math.random()*MAX_SEED_NUM))}),1)}),"easy convertAnything"==o&&(e.prototype.onNodeCreated=async function(){n&&n.apply(this,[]);const e=this.widgets.find((e=>"output_type"==e.name)),t=t=>{this.outputs[0].type=e.value.toUpperCase(),this.outputs[0].name=e.value,this.outputs[0].label=e.value};setTimeout((e=>t()),10),e.callback=e=>t()}),"easy imageInsetCrop"==o){let t=function(e){const t=e.widgets[0];for(let i=1;i<=4;i++)"Pixels"===t.value?(e.widgets[i].options.step=80,void 0!==e.widgets[i].options.step2&&(e.widgets[i].options.step2=8),e.widgets[i].options.max=8192):(e.widgets[i].options.step=10,void 0!==e.widgets[i].options.step2&&(e.widgets[i].options.step2=1),e.widgets[i].options.max=99)};e.prototype.onAdded=async function(e){const i=this.widgets[0];let s=i.callback;i.callback=(...e)=>{t(this),s&&s.apply(i,[...e])},setTimeout((e=>{t(this)}),1)}}if(change_slots_nodes.includes(o)){const t=e=>{switch(o){case"easy forLoopStart":case"easy whileLoopStart":return 0;case"easy forLoopEnd":case"easy whileLoopEnd":return 1}},i=e=>{switch(o){case"easy forLoopStart":return 2;case"easy forLoopEnd":case"easy whileLoopEnd":return 0;case"easy whileLoopStart":return 1}};e.prototype.onNodeCreated=async function(){if("easy loadImagesForLoop"==o&&(this.outputs[0].shape=5),loop_nodes.includes(o)){const e=this.inputs.findIndex((e=>"flow"===e.name)),s=this.outputs.findIndex((e=>"flow"===e.name));-1!==e&&(this.inputs[e].shape=5),-1!==s&&(this.outputs[s].shape=5),this.inputs=this.inputs.filter(((e,i)=>i<=t()||e.widget)),this.outputs=this.outputs.filter(((e,t)=>t<=i())),updateNodeHeight(this)}return index_switch_nodes.includes(o)&&("easy textIndexSwitch"==o&&(this.widgets=this.widgets.filter(((e,t)=>t<=2))),this.inputs=this.inputs.filter(((e,t)=>t<=1||e.widget)),updateNodeHeight(this)),null==n?void 0:n.apply(this,arguments)},e.prototype.onConnectionsChange=function(e,s,a,n){var l,r;if(n)if(1==e){let e=this.inputs.every((e=>null!==e.link||e.widget)),i=this.inputs.filter((e=>!["condition","index","total"].includes(e.name)));if(loop_nodes.includes(o)){if(e){if(i.length>=20)return void toast.warn($t("The maximum number of inputs is 20"));let e=i[i.length-1],t=parseInt(e.name.split("initial_value")[1])+1;if(this.inputs.find((e=>e.name==="initial_value"+t)))return;let s="initial_value"+t,o="value"+t;this.addInput(s,"*"),this.addOutput(o,"*")}else if(!a){const e=t();let i=this.inputs.findLastIndex((e=>e.link));if(s>=e&&(-1===i||s>=i)){let e=this.inputs[s];if(!e.name||["condition","total"].includes(e.name))return;let t=parseInt(e.name.split("initial_value")[1])+1,i=this.inputs.findIndex((e=>e.name==="initial_value"+t)),o=this.outputs.findIndex((e=>e.name==="value"+t));-1!==i&&this.removeInput(i),-1!==o&&this.removeOutput(o)}}}else if(index_switch_nodes.includes(o))if(e){if(i.length>=20)return void toast.warn($t("The maximum number of inputs is 20"));let e=value_names[o]+i.length;this.addInput(e,"*")}else a||s==this.inputs.length-2&&this.removeInput(s+1)}else if(2==e){let e=this.outputs.filter((e=>!["flow","index"].includes(e.name))),t=e.every((e=>{var t;return(null==(t=e.links)?void 0:t.length)>0}));if(loop_nodes.includes(o)){if(t){if(e.length>=20)return void toast.warn($t("The maximum number of outputs is 20"));let t=e[e.length-1],i=parseInt(t.name.split("value")[1])+1;if(this.inputs.find((e=>e.name==="initial_value"+i)))return;if(this.outputs.find((e=>e.name==="value"+i)))return;let s="initial_value"+i,o="value"+i;this.addInput(s,"*"),this.addOutput(o,"*")}else if(!a){const e=i();let t=n.origin_slot,s=this.outputs.findLastIndex((e=>{var t;return(null==(t=e.links)?void 0:t.length)>0}));if(t>=e&&(-1===s||t>=s)){let e=this.outputs[t];if(!e.name||["flow","index"].includes(e.name))return;let i=parseInt(e.name.split("value")[1])+1,s=this.inputs.findIndex((e=>e.name==="initial_value"+i)),o=this.outputs.findIndex((e=>e.name==="value"+i));if(-1!==s&&(null==(l=this.inputs[s])?void 0:l.link))return;-1!==s&&this.removeInput(s),-1!==o&&this.removeOutput(o)}}}else if(inverse_switch_nodes.includes(o))if(t){if(e.length>=20)return void toast.warn($t("The maximum number of outputs is 20"));let t=value_names[o]+e.length;this.addOutput(t,"*")}else if(!a){let t=n.origin_slot;t==this.outputs.length-2&&0==(null==(r=e[t].links)?void 0:r.length)&&this.removeOutput(t+1)}}}}if(["easy fluxLoader","easy fullLoader"].includes(o)&&(e.prototype.onConnectionsChange=async function(e,t){d&&d.apply(this,[]);const i=this.inputs.find((e=>"model_override"===e.name)),s=this.inputs.find((e=>"vae_override"===e.name));let o=getWidgetByName(this,"ckpt_name"),a=getWidgetByName(this,"vae_name");if((null==i?void 0:i.link)&&0==t){const e=(null==o?void 0:o.options.values)||[];setTimeout((t=>{this.widgets[0].value=(null==e?void 0:e[0])||"None",toggleWidget(this,o,!(null==i?void 0:i.link))}),1)}else toggleWidget(this,o,!(null==i?void 0:i.link));if(!(null==s?void 0:s.link)||1!=t&&2!=t)toggleWidget(this,a,!(null==s?void 0:s.link));else{let e=this.widgets.findIndex((e=>"vae_name"==e.name));setTimeout((t=>{this.widgets[e].value="Baked VAE",toggleWidget(this,a,!(null==s?void 0:s.link))}),1)}}),samplers_nodes.includes(o)||-1!==o.indexOf("workflow")){const i=(null==(s=null==t?void 0:t.input)?void 0:s.required)||{};if(!i.image_output&&!i["图像输出"]&&!i["视频输出"])return;e.prototype.onDrawBackground=function(e){try{unsafeDrawBackground(this,e)}catch(t){}}}},nodeCreated(e){if(e.comfyClass.startsWith("easy ")){if(e.widgets)for(const i of e.widgets){if(!allow_widgets.includes(i.name))continue;let t=i.value;toggleLogic(e,i),Object.defineProperty(i,"value",{get:e=>t,set(s){s!==t&&(t=s,requestAnimationFrame((t=>{toggleLogic(e,i)})))}})}const t=e.comfyClass;if("easy preDetailerFix"==t){const t=e.widgets.find((e=>"customtext"===e.type));if(!t)return;t.dynamicPrompts=!1,t.inputEl.placeholder="wildcard spec: if kept empty, this option will be ignored",t.serializeValue=()=>t.value}if(["easy wildcards","easy wildcardsMatrix"].includes(t)){const t=e.widgets.find((e=>"text"==e.name));let i=1;Object.defineProperty(e.widgets[i],"value",{set:e=>{if("Select the LoRA to add to the text"!=e){let i=e;i.endsWith(".safetensors")&&(i=i.slice(0,-12)),t.value+=``}},get:e=>"Select the LoRA to add to the text"}),Object.defineProperty(e.widgets[i+1],"value",{set:e=>{"Select the Wildcard to add to the text"!=e&&(""!=t.value&&(t.value+=", "),t.value+=e)},get:e=>"Select the Wildcard to add to the text"}),e.widgets[i].serializeValue=e=>"Select the LoRA to add to the text",e.widgets[i+1].serializeValue=e=>"Select the Wildcard to add to the text"}if("easy prompt"==t){const t=e.widgets.find((e=>"text"==e.name));let i=1;Object.defineProperty(e.widgets[i],"value",{set:s=>{var o,a;"Select the prefix to add to the text"!=s&&(null==(a=null==(o=e.widgets[i])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=" "+s)},get:e=>"Select the prefix to add to the text"}),Object.defineProperty(e.widgets[i+1],"value",{set:s=>{var o,a;"👤Select the subject add to the text"!=s&&(null==(a=null==(o=e.widgets[i+1])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=" "+s)},get:e=>"👤Select the subject add to the text"}),Object.defineProperty(e.widgets[i+2],"value",{set:s=>{var o,a;"🎬Select the action add to the text"!=s&&(null==(a=null==(o=e.widgets[i+2])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=","+s)},get:e=>"🎬Select the action add to the text"}),Object.defineProperty(e.widgets[i+3],"value",{set:s=>{var o,a;"👚Select the clothes add to the text"!=s&&(null==(a=null==(o=e.widgets[i+3])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=","+s)},get:e=>"👚Select the clothes add to the text"}),Object.defineProperty(e.widgets[i+4],"value",{set:s=>{var o,a;"☀️Select the illumination environment add to the text"!=s&&(null==(a=null==(o=e.widgets[i+4])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=","+s)},get:e=>"☀️Select the illumination environment add to the text"}),Object.defineProperty(e.widgets[i+5],"value",{set:s=>{var o,a;"🎞️Select the background add to the text"!=s&&(null==(a=null==(o=e.widgets[i+5])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=" "+s)},get:e=>"🎞️Select the background add to the text"}),Object.defineProperty(e.widgets[i+6],"value",{set:s=>{var o,a;"🔞Select the nsfw add to the text"!=s&&(null==(a=null==(o=e.widgets[i+6])?void 0:o.options)?void 0:a.values.includes(s))&&(""==t.value?t.value+=s:t.value+=","+s)},get:e=>"🔞Select the nsfw add to the text"}),e.widgets[i].serializeValue=e=>"Select the prefix add to the text",e.widgets[i+1].serializeValue=e=>"👤Select the subject add to the text",e.widgets[i+2].serializeValue=e=>"🎬Select the action add to the text",e.widgets[i+3].serializeValue=e=>"👚Select the clothes add to the text",e.widgets[i+4].serializeValue=e=>"☀️Select the illumination environment add to the text",e.widgets[i+5].serializeValue=e=>"🎞️Select the background add to the text",e.widgets[i+6].serializeValue=e=>"🔞Select the nsfw add to the text"}if(image_dynamic_nodes.includes(t)){const t=document.createElement("textarea");t.className="comfy-multiline-input",t.readOnly=!0;const i=e.addDOMWidget("info","customtext",t,{getValue:e=>t.value,setValue:e=>t.value=e,serialize:!1});i.inputEl=t,t.addEventListener("input",(()=>{var e;null==(e=i.callback)||e.call(i,i.value)}))}}}});const LGraphNode$1=LiteGraph.LGraphNode;app$1.registerExtension({name:"easy bookmark",registerCustomNodes(){class e extends LGraphNode$1{constructor(){super("🔖"),__publicField(this,"type","easy bookmark"),__publicField(this,"title","🔖"),__publicField(this,"slot_start_y",-20),__publicField(this,"___collapsed_width",0),__publicField(this,"isVirtualNode",!0),__publicField(this,"serialize_widgets",!0),__publicField(this,"keypressBound",null),this.addWidget("text","shortcut_key","1",(e=>{""!==(e=e.trim()[0]||"1")&&(this.title="🔖 "+e)}),{y:8}),this.addWidget("number","zoom",1,(e=>{}),{y:8+LiteGraph.NODE_WIDGET_HEIGHT+4,max:2,min:.5,precision:2}),this.keypressBound=this.onKeypress.bind(this)}get _collapsed_width(){return this.___collapsed_width}set _collapsed_width(e){const t=app$1.canvas,i=t.canvas.getContext("2d");if(i){const e=i.font;i.font=t.title_text_font,this.___collapsed_width=40+i.measureText(this.title).width,i.font=e}}onAdded(){setTimeout((e=>{const t=this.widgets[0].value;t&&(this.title="🔖 "+t)}),1),window.addEventListener("keydown",this.keypressBound)}onRemoved(){window.removeEventListener("keydown",this.keypressBound)}onKeypress(e){const t=e.target;["input","textarea"].includes(t.localName)||this.widgets[0]&&e.key.toLocaleLowerCase()===this.widgets[0].value.toLocaleLowerCase()&&this.canvasToBookmark()}canvasToBookmark(){var e,t;const i=app$1.canvas;(null==(e=null==i?void 0:i.ds)?void 0:e.offset)&&(i.ds.offset[0]=16-this.pos[0],i.ds.offset[1]=40-this.pos[1]),null!=(null==(t=null==i?void 0:i.ds)?void 0:t.scale)&&(i.ds.scale=Number(this.widgets[1].value||1)),i.setDirty(!0,!0)}}LiteGraph.registerNodeType("easy bookmark",Object.assign(e,{title:"Bookmark 🔖"})),e.category="EasyUse/Util"}}),app$1.registerExtension({name:"Comfy.EasyUse.ChainNode",init(){app$1.canvas._mousemove_callback=e=>{getSetting("EasyUse.Nodes.ChainGetSet",null)&&chainNode()};const e=LGraphCanvas.prototype.showLinkMenu;LGraphCanvas.prototype.showLinkMenu=useTryCatchCallback(e,(function(t,i){return i.shiftKey?(convertLinkToGetSetNode(t),!1):(e.apply(this,[t,i]),!1)}))}});const cleanVRAM=async()=>{try{const{Running:e,Pending:t}=await api.getQueue();if(e.length>0||t.length>0)return void toast.error($t("Clean Failed")+":"+$t("Please stop all running tasks before cleaning GPU"));200==(await api.fetchApi("/easyuse/cleangpu",{method:"POST"})).status?toast.success($t("Clean SuccessFully")):toast.error($t("Clean Failed"))}catch(e){}},reboot=async()=>{if(confirm($t("Are you sure you'd like to reboot the server?")))try{api.fetchApi("/easyuse/reboot")}catch(e){}};let modelsList={},isPyssssNode=!1;function serializeParentNodeMenu(e){let t=[],i=[];return e.forEach((e=>{(null==e?void 0:e.value)&&COMFYUI_NODE_BASIC_CATEGORY.includes(e.value.split("/")[0])?t.push(e):i.push(e)})),[{title:$t("ComfyUI Basic"),is_category_title:!0},...t,{title:$t("Others A~Z"),is_category_title:!0},...i.sort(((e,t)=>e.content.localeCompare(t.content)))]}function onMenuAdd(e,t,i,s,o){var a=LGraphCanvas.active_canvas,n=a.getCanvasWindow(),l=a.graph;if(l)return function e(t,s){var r=LiteGraph.getNodeTypesCategories(a.filter||l.filter).filter((function(e){return e.startsWith(t)})),d=[];r.map((function(i){if(i){var s=new RegExp("^("+t+")"),o=i.replace(s,"").split("/")[0],a=""===t?o+"/":t+o+"/",n=o;-1!=n.indexOf("::")&&(n=n.split("::")[1]),-1===d.findIndex((function(e){return e.value===a}))&&d.push({value:a,content:n,has_submenu:!0,callback:function(t,i,s,o){e(t.value,o)}})}})),LiteGraph.getNodeTypesInCategory(t.slice(0,-1),a.filter||l.filter).map((function(e){if(!e.skip_list){var t={value:e.type,content:e.title,has_submenu:!1,callback:function(e,t,i,s){var n=s.getFirstEvent();a.graph.beforeChange();var l=LiteGraph.createNode(e.value);l&&(l.pos=a.convertEventToCanvasOffset(n),a.graph.add(l)),o&&o(l),a.graph.afterChange()}};d.push(t)}}));const c=getSetting("EasyUse.ContextMenu.NodesSort",null);""===t&&c&&(d=serializeParentNodeMenu(d)),new LiteGraph.ContextMenu(d,{event:i,parentMenu:s},n)}("",s),!1}function encodeRFC3986URIComponent(e){try{return encodeURIComponent(e).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`))}catch(t){return e}}function contextMenuAddItem(e,t,i){var s=this;i=i||{};var o=document.createElement("div");o.className="litemenu-entry submenu";var a=!1;function n(e){var t=this.value,o=!0;(s.current_submenu&&s.current_submenu.close(e),i.callback)&&(!0===i.callback.call(this,t,i,e,s,i.node)&&(o=!1));if(t){if(t.callback&&!i.ignore_item_callbacks&&!0!==t.disabled)!0===t.callback.call(this,t,i,e,s,i.extra)&&(o=!1);if(t.submenu){if(!t.submenu.options)throw"ContextMenu submenu needs options";new s.constructor(t.submenu.options,{callback:t.submenu.callback,event:e,parentMenu:s,ignore_item_callbacks:t.submenu.ignore_item_callbacks,title:t.submenu.title,extra:t.submenu.extra,autoopen:i.autoopen}),o=!1}}o&&!s.lock&&s.close()}return null===t?o.classList.add("separator"):t.is_category_title?(o.classList.remove("litemenu-entry"),o.classList.remove("submenu"),o.classList.add("litemenu-title"),o.innerHTML=t.title):(o.innerHTML=t&&t.title?t.title:e,o.value=t,t&&(t.disabled&&(a=!0,o.classList.add("disabled")),(t.submenu||t.has_submenu)&&o.classList.add("has_submenu")),"function"==typeof t?(o.dataset.value=e,o.onclick_callback=t):o.dataset.value=t,t.className&&(o.className+=" "+t.className)),o&&(null==t?void 0:t.thumbnail)&&(o.addEventListener("mouseenter",showModelsThumbnail(o,t,this.root),{passive:!0}),o.addEventListener("mouseleave",closeModelsThumbnail(),{passive:!0}),o.addEventListener("click",closeModelsThumbnail(),{passive:!0})),this.root.appendChild(o),a||o.addEventListener("click",n),!a&&i.autoopen&&LiteGraph.pointerListenerAdd(o,"enter",(function(e){var t=this.value;if(!t||!t.has_submenu)return;n.call(this,e)})),o}function getExtensions(e){return null==e?void 0:e.substring(e.lastIndexOf(".")+1)}app$1.registerExtension({name:"Comfy.EasyUse.ContextMenu",async setup(){LGraphCanvas.onMenuAdd=onMenuAdd,getModelsList();const e=LiteGraph.ContextMenu;LiteGraph.ContextMenu=function(t,i){if(!(null==i?void 0:i.callback)||t.some((e=>"string"!=typeof e))){if(i.parentMenu);else if(i.extra);else if(i.scale);else{const e=getSetting("EasyUse.ContextMenu.QuickOptions",null);if(i.hasOwnProperty("extra")&&"Disable"!==e){if("At the forefront"==e?t.unshift(null):t.push(null),isLocalNetwork(window.location.host)){const i={content:`${$t("Reboot ComfyUI")}`,callback:e=>reboot()};"At the forefront"==e?t.unshift(i):t.push(i)}const i=getSetting("EasyUse.Hotkeys.cleanVRAMUsed",null)?"("+normalize("Shift+r")+")":"",s={content:`${$t("Cleanup Of VRAM Usage")} ${i}`,callback:e=>cleanVRAM()};"At the forefront"==e?t.unshift(s):t.push(s);const o=getSetting("EasyUse.Hotkeys.toggleNodesMap",null)?"("+normalize("Shift+m")+")":"",a={content:`${$t("Nodes Map")} ${o}`,callback:e=>{var t,i,s;const o=(null==(t=app$1.extensionManager)?void 0:t.sidebarTab)||app$1.extensionManager,a=(null==(i=app$1.extensionManager.sidebarTab)?void 0:i.activeSidebarTabId)||(null==(s=app$1.extensionManager)?void 0:s.activeSidebarTab);o.activeSidebarTabId=a==NODES_MAP_ID?null:NODES_MAP_ID}};"At the forefront"==e?t.unshift(a):t.push(a)}}return e.apply(this,[...arguments])}{const s=setComboOptions(t,i);return s?e.call(this,s,i):e.apply(this,[...arguments])}},LiteGraph.ContextMenu.prototype=e.prototype,getSetting("EasyUse.ContextMenu.NodesSort")&&(LiteGraph.ContextMenu.prototype.addItem=contextMenuAddItem),document.getElementById("graph-canvas").addEventListener("mouseenter",(e=>{setTimeout((e=>{const t=document.getElementById("easyuse-model-thumbnail");t&&0!=t.style.opacity&&(t.style.display="none",t.style.opacity=0,t.style.left="0px",t.style.top="0px")}),100)}))},async beforeRegisterNodeDef(e,t,i){const s=e.prototype.onNodeCreated;["CheckpointLoader|pysssss","LoraLoader|pysssss"].includes(t.name)&&(e.prototype.onNodeCreated=async function(){s&&s.apply(this,[]);let e=getWidgetByName(this,"lora_name")||getWidgetByName(this,"ckpt_name");if(e){let t=e.onClick;e.onClick=function(e){return isPyssssNode=!0,setTimeout((e=>{isPyssssNode=!1}),500),t.call(this,e)}}})}});const calculateImagePosition=(e,t,i)=>{const{x:s}=e.getBoundingClientRect();let{top:o,left:a}=t;const{width:n,height:l}=i;s<=n&&(a+=t.width);return t.top<=l||(o=l),{left:a,top:o}},getModelsList=async()=>{["checkpoints","loras","diffusion_models"].map((async e=>{const t=await api.getModels(e);(null==t?void 0:t.length)>0&&t.map((t=>{modelsList[t.name]={folder:e,pathIndex:t.pathIndex}}))}))},showModelsThumbnail=(e,t,i)=>s=>{var o;const a=t=>{setTimeout((s=>{const o=i.getBoundingClientRect();if(!o)return;const a=document.body.getBoundingClientRect();if(!a)return;const{left:n,top:l}=calculateImagePosition(e,o,a),r=document.getElementById("easyuse-model-thumbnail");r.src=t,r.style.left=`${n}px`,r.style.top=`${l}px`,r.style.display="block",r.style.opacity=1,r.onerror=e=>{r.src=NO_PREVIEW_IMAGE}}),10)};if(null==(o=null==modelsList?void 0:modelsList[t.fullName])?void 0:o.img){let e=modelsList[t.fullName].img;a("no_preview_image"==e?NO_PREVIEW_IMAGE:e.src)}else{let e=new Image;e.src=t.thumbnail,e.onload=i=>{modelsList[t.fullName].img=e,a(t.thumbnail)},e.onerror=i=>{e=null,modelsList[t.fullName].img="no_preview_image",a(NO_PREVIEW_IMAGE)}}},closeModelsThumbnail=()=>e=>{const t=document.getElementById("easyuse-model-thumbnail");t&&0!=t.style.opacity&&(t.style.display="none",t.style.opacity=0,t.style.left="0px",t.style.top="0px")};function setComboOptions(e,t){const i=getSetting("EasyUse.ContextMenu.ModelsThumbnails",null),s=getSetting("EasyUse.ContextMenu.SubDirectories",null);if(!i&&!s)return null;if(isPyssssNode)return null;const o=["ckpt","pt","bin","pth","safetensors","gguf"];if((null==e?void 0:e.length)>0){const t=getExtensions(e[e.length-1]);if(!o.includes(t))return null}const a=t.callback,n=[...e];t.callback=null;const l=(e,t)=>{["None","无","無","なし"].includes(e.content)?a("None",t):a(n.find((t=>t.endsWith(e.content)),t))};if(i&&!s)return e.map((e=>{var t,i;let s=null==(t=modelsList[e])?void 0:t.folder,o=null==(i=modelsList[e])?void 0:i.pathIndex;const a=window.location.protocol,n=window.location.host;let r=s?`${`${a}//${n}`}/api/experiment/models/preview/${s}/${o}/${encodeRFC3986URIComponent(e)}`:"";return{folder:s,content:e,fullName:e,title:$el("div.comfyui-easyuse-contextmenu-model",{},[$el("span",{},e)]).outerHTML,thumbnail:r,callback:l}}));const r=e,d={},c=[],u=[];for(const h of r){const e=h.indexOf("/")>-1?"/":"\\",t=h.split(e);if(t.length>1){const i=t.shift();d[i]=d[i]||[],d[i].push({value:t.join(e),fullValue:h})}else"CHOOSE"===h||h.startsWith("DISABLE ")?c.push({value:h,fullValue:h}):u.push({value:h,fullValue:h})}const p=Object.values(d).length,A=[],g=(e,t="",s)=>{var o,a;let n;n=$el("div.comfyui-easyuse-contextmenu-model",{},[$el("span",{},e)]);let r=null==(o=modelsList[s])?void 0:o.folder,d=null==(a=modelsList[s])?void 0:a.pathIndex;const c=window.location.protocol,u=window.location.host;let p=r?`${`${c}//${u}`}/api/experiment/models/preview/${r}/${d}/${encodeRFC3986URIComponent(s)}`:"";return{folder:r,content:e,fullName:s,thumbnail:i?p:null,title:n.outerHTML,callback:l}};if(p>0){const e=(t,i)=>{let s=[],o=[];const a=t.map((({value:e,fullValue:t})=>{const a={},n=e.indexOf("/")>-1?"/":"\\",l=e.split(n);if(l.length>1){const e=l.shift();a[e]=a[e]||[],a[e].push({value:l.join(n),fullValue:t})}if(Object.values(d).length>0){let i=Object.keys(a)[0];i&&a[i]?s.push({key:i,value:a[i][0]}):o.push(g(e,i,t))}return g(e,i,t)}));if(s.length>0){let t={};return s.forEach((e=>{t[e.key]=t[e.key]||[],t[e.key].push(e.value)})),[...Object.entries(t).map((t=>({content:t[0],has_submenu:!0,callback:()=>{},submenu:{options:e(t[1],t[0])}}))),...o]}return a};for(const[t,i]of Object.entries(d))A.push({content:t,has_submenu:!0,callback:()=>{},submenu:{options:e(i,t)}})}return A.push(...u.map((e=>g(e.value,"",e.fullValue)))),c.length>0&&A.push(...c.map((e=>g(e.value,"",e.fullValue)))),A}class MetadataDialog extends ComfyDialog{constructor(){super(),this.element.classList.add("easyuse-model-metadata")}show(e){super.show($el("div",Object.keys(e).map((t=>$el("div",[$el("label",{textContent:t}),$el("span",{textContent:e[t]})])))))}}class ModelInfoDialog extends ComfyDialog{constructor(e){super(),this.name=e,this.element.classList.add("easyuse-model-info")}get customNotes(){return this.metadata["easyuse.notes"]}set customNotes(e){this.metadata["easyuse.notes"]=e}get hash(){return this.metadata["easyuse.sha256"]}async show(e,t){this.type=e;const i=api.fetchApi("/easyuse/metadata/"+encodeURIComponent(`${e}/${t}`));this.info=$el("div",{style:{flex:"auto"}}),this.imgCurrent=0,this.imgList=$el("div.easyuse-preview-list",{style:{display:"none"}}),this.imgWrapper=$el("div.easyuse-preview",[$el("div.easyuse-preview-group",[this.imgList])]),this.main=$el("main",{style:{display:"flex"}},[this.imgWrapper,this.info]),this.content=$el("div.easyuse-model-content",[$el("div.easyuse-model-header",[$el("h2",{textContent:this.name})]),this.main]);const s=$el("div",{textContent:"ℹ️ Loading...",parent:this.content});super.show(this.content),this.metadata=await(await i).json(),this.viewMetadata.style.cursor=this.viewMetadata.style.opacity="",this.viewMetadata.removeAttribute("disabled"),s.remove(),this.addInfo()}createButtons(){const e=super.createButtons();return this.viewMetadata=$el("button",{type:"button",textContent:"View raw metadata",disabled:"disabled",style:{opacity:.5,cursor:"not-allowed"},onclick:e=>{this.metadata&&(new MetadataDialog).show(this.metadata)}}),e.unshift(this.viewMetadata),e}parseNote(){if(!this.customNotes)return[];let e=[];const t=new RegExp("(\\bhttps?:\\/\\/[^\\s]+)","g");let i,s=0;do{let o;i=t.exec(this.customNotes);let a=0;i?(o=i.index,a=i.index+i[0].length):o=this.customNotes.length;let n=this.customNotes.substring(s,o);n&&(n=n.replaceAll("\n","
"),e.push($el("span",{innerHTML:n}))),i&&e.push($el("a",{href:i[0],textContent:i[0],target:"_blank"})),s=a}while(i);return e}addInfoEntry(e,t){return $el("p",{parent:this.info},["string"==typeof e?$el("label",{textContent:e+": "}):e,"string"==typeof t?$el("span",{textContent:t}):t])}async getCivitaiDetails(){const e=await fetch("https://civitai.com/api/v1/model-versions/by-hash/"+this.hash);if(200===e.status)return await e.json();throw 404===e.status?new Error("Model not found"):new Error(`Error loading info (${e.status}) ${e.statusText}`)}addCivitaiInfo(){const e=this.getCivitaiDetails(),t=$el("span",{textContent:"ℹ️ Loading..."});return this.addInfoEntry($el("label",[$el("img",{style:{width:"18px",position:"relative",top:"3px",margin:"0 5px 0 0"},src:"https://civitai.com/favicon.ico"}),$el("span",{textContent:"Civitai: "})]),t),e.then((e=>{var t,i;this.imgWrapper.style.display="block";let s=this.element.querySelector(".easyuse-model-header");s&&s.replaceChildren($el("h2",{textContent:this.name}),$el("div.easyuse-model-header-remark",[$el("h5",{textContent:$t("Updated At:")+formatTime(new Date(e.updatedAt),"yyyy/MM/dd")}),$el("h5",{textContent:$t("Created At:")+formatTime(new Date(e.updatedAt),"yyyy/MM/dd")})]));let o=null,a=this.parseNote.call(this),n=$t("✏️ Edit"),l=$el("div.easyuse-model-detail-textarea",[$el("p",(null==a?void 0:a.length)>0?a:{textContent:$t("No notes")})]);if(a&&0!=a.length?l.classList.remove("empty"):l.classList.add("empty"),this.info.replaceChildren($el("div.easyuse-model-detail",[$el("div.easyuse-model-detail-head.flex-b",[$el("span",$t("Notes")),$el("a",{textContent:n,href:"#",style:{fontSize:"12px",float:"right",color:"var(--warning-color)",textDecoration:"none"},onclick:async e=>{if(e.preventDefault(),o){if(o.value!=this.customNotes){toast.showLoading($t("Saving Notes...")),this.customNotes=o.value;const e=await api.fetchApi("/easyuse/metadata/notes/"+encodeURIComponent(`${this.type}/${this.name}`),{method:"POST",body:this.customNotes});if(toast.hideLoading(),200!==e.status)return toast.error($t("Saving Failed")),void alert(`Error saving notes (${e.status}) ${e.statusText}`);toast.success($t("Saving Succeed")),a=this.parseNote.call(this),l.replaceChildren($el("p",(null==a?void 0:a.length)>0?a:{textContent:$t("No notes")})),o.value?l.classList.remove("empty"):l.classList.add("empty")}else l.replaceChildren($el("p",{textContent:$t("No notes")})),l.classList.add("empty");e.target.textContent=n,o.remove(),o=null}else e.target.textContent="💾 Save",o=$el("textarea",{placeholder:$t("Type your notes here"),style:{width:"100%",minWidth:"200px",minHeight:"50px",height:"100px"},textContent:this.customNotes}),l.replaceChildren(o),o.focus()}})]),l]),$el("div.easyuse-model-detail",[$el("div.easyuse-model-detail-head",{textContent:$t("Details")}),$el("div.easyuse-model-detail-body",[$el("div.easyuse-model-detail-item",[$el("div.easyuse-model-detail-item-label",{textContent:$t("Type")}),$el("div.easyuse-model-detail-item-value",{textContent:e.model.type})]),$el("div.easyuse-model-detail-item",[$el("div.easyuse-model-detail-item-label",{textContent:$t("BaseModel")}),$el("div.easyuse-model-detail-item-value",{textContent:e.baseModel})]),$el("div.easyuse-model-detail-item",[$el("div.easyuse-model-detail-item-label",{textContent:$t("Download")}),$el("div.easyuse-model-detail-item-value",{textContent:(null==(t=e.stats)?void 0:t.downloadCount)||0})]),$el("div.easyuse-model-detail-item",[$el("div.easyuse-model-detail-item-label",{textContent:$t("Trained Words")}),$el("div.easyuse-model-detail-item-value",{textContent:(null==e?void 0:e.trainedWords.join(","))||"-"})]),$el("div.easyuse-model-detail-item",[$el("div.easyuse-model-detail-item-label",{textContent:$t("Source")}),$el("div.easyuse-model-detail-item-value",[$el("label",[$el("img",{style:{width:"14px",position:"relative",top:"3px",margin:"0 5px 0 0"},src:"https://civitai.com/favicon.ico"}),$el("a",{href:"https://civitai.com/models/"+e.modelId,textContent:"View "+e.model.name,target:"_blank"})])])])])])),null==(i=e.images)?void 0:i.length){this.imgCurrent=0,this.isSaving=!1,e.images.map((e=>e.url&&this.imgList.appendChild($el("div.easyuse-preview-slide",[$el("div.easyuse-preview-slide-content",[$el("img",{src:e.url}),$el("div.save",{textContent:"Save as preview",onclick:async()=>{if(this.isSaving)return;this.isSaving=!0,toast.showLoading($t("Saving Preview..."));const t=await(await fetch(e.url)).blob(),i="temp_preview."+new URL(e.url).pathname.split(".")[1],s=new FormData;s.append("image",new File([t],i)),s.append("overwrite","true"),s.append("type","temp");if(200!==(await api.fetchApi("/upload/image",{method:"POST",body:s})).status)return this.isSaving=!1,toast.error($t("Saving Failed")),toast.hideLoading(),void alert(`Error saving preview (${req.status}) ${req.statusText}`);await api.fetchApi("/easyuse/save/"+encodeURIComponent(`${this.type}/${this.name}`),{method:"POST",body:JSON.stringify({filename:i,type:"temp"}),headers:{"content-type":"application/json"}}).then((e=>{toast.success($t("Saving Succeed")),toast.hideLoading()})),this.isSaving=!1,app.refreshComboInNodes()}})])]))));let t=this;this.imgDistance=(-660*this.imgCurrent).toString(),this.imgList.style.display="",this.imgList.style.transform="translate3d("+this.imgDistance+"px, 0px, 0px)",this.slides=this.imgList.querySelectorAll(".easyuse-preview-slide"),this.slideLeftButton=$el("button.left",{parent:this.imgWrapper,style:{display:e.images.length<=2?"none":"block"},innerHTML:'',onclick:()=>{e.images.length<=2||(t.imgList.classList.remove("no-transition"),0==t.imgCurrent?(t.imgCurrent=e.images.length/2-1,this.slides[this.slides.length-1].style.transform="translate3d("+(-660*(this.imgCurrent+1)).toString()+"px, 0px, 0px)",this.slides[this.slides.length-2].style.transform="translate3d("+(-660*(this.imgCurrent+1)).toString()+"px, 0px, 0px)",t.imgList.style.transform="translate3d(660px, 0px, 0px)",setTimeout((e=>{this.slides[this.slides.length-1].style.transform="translate3d(0px, 0px, 0px)",this.slides[this.slides.length-2].style.transform="translate3d(0px, 0px, 0px)",t.imgDistance=(-660*this.imgCurrent).toString(),t.imgList.style.transform="translate3d("+t.imgDistance+"px, 0px, 0px)",t.imgList.classList.add("no-transition")}),500)):(t.imgCurrent=t.imgCurrent-1,t.imgDistance=(-660*this.imgCurrent).toString(),t.imgList.style.transform="translate3d("+t.imgDistance+"px, 0px, 0px)"))}}),this.slideRightButton=$el("button.right",{parent:this.imgWrapper,style:{display:e.images.length<=2?"none":"block"},innerHTML:'',onclick:()=>{if(!(e.images.length<=2))if(t.imgList.classList.remove("no-transition"),t.imgCurrent>=e.images.length/2-1){t.imgCurrent=0;const i=e.images.length/2;this.slides[0].style.transform="translate3d("+(660*i).toString()+"px, 0px, 0px)",this.slides[1].style.transform="translate3d("+(660*i).toString()+"px, 0px, 0px)",t.imgList.style.transform="translate3d("+(-660*i).toString()+"px, 0px, 0px)",setTimeout((e=>{this.slides[0].style.transform="translate3d(0px, 0px, 0px)",this.slides[1].style.transform="translate3d(0px, 0px, 0px)",t.imgDistance=(-660*this.imgCurrent).toString(),t.imgList.style.transform="translate3d("+t.imgDistance+"px, 0px, 0px)",t.imgList.classList.add("no-transition")}),500)}else t.imgCurrent=t.imgCurrent+1,t.imgDistance=(-660*this.imgCurrent).toString(),t.imgList.style.transform="translate3d("+t.imgDistance+"px, 0px, 0px)"}})}return e.description&&$el("div",{parent:this.content,innerHTML:e.description,style:{marginTop:"10px"}}),e})).catch((e=>{this.imgWrapper.style.display="none",t.textContent="⚠️ "+e.message})).finally((e=>{}))}}class CheckpointInfoDialog extends ModelInfoDialog{async addInfo(){await this.addCivitaiInfo()}}const MAX_TAGS=500;class LoraInfoDialog extends ModelInfoDialog{getTagFrequency(){if(!this.metadata.ss_tag_frequency)return[];const e=JSON.parse(this.metadata.ss_tag_frequency),t={};for(const i in e){const s=e[i];for(const e in s)e in t?t[e]+=s[e]:t[e]=s[e]}return Object.entries(t).sort(((e,t)=>t[1]-e[1]))}getResolutions(){let e=[];if(this.metadata.ss_bucket_info){const t=JSON.parse(this.metadata.ss_bucket_info);if(null==t?void 0:t.buckets)for(const{resolution:i,count:s}of Object.values(t.buckets))e.push([s,`${i.join("x")} * ${s}`])}e=e.sort(((e,t)=>t[0]-e[0])).map((e=>e[1]));let t=this.metadata.ss_resolution;if(t){const i=t.split(","),s=i[0].replace("(",""),o=i[1].replace(")","");e.push(`${s.trim()}x${o.trim()} (Base res)`)}else(t=this.metadata["modelspec.resolution"])&&e.push(t+" (Base res");return e.length||e.push("⚠️ Unknown"),e}getTagList(e){return e.map((e=>$el("li.easyuse-model-tag",{dataset:{tag:e[0]},$:e=>{e.onclick=()=>{e.classList.toggle("easyuse-model-tag--selected")}}},[$el("p",{textContent:e[0]}),$el("span",{textContent:e[1]})])))}addTags(){let e,t=this.getTagFrequency();if(null==t?void 0:t.length){const i=t.length;let s;i>MAX_TAGS&&(t=t.slice(0,MAX_TAGS),e=$el("p",[$el("span",{textContent:`⚠️ Only showing first ${MAX_TAGS} tags `}),$el("a",{href:"#",textContent:`Show all ${i}`,onclick:()=>{s.replaceChildren(...this.getTagList(this.getTagFrequency())),e.remove()}})])),s=$el("ol.easyuse-model-tags-list",this.getTagList(t)),this.tags=$el("div",[s])}else this.tags=$el("p",{textContent:"⚠️ No tag frequency metadata found"});this.content.append(this.tags),e&&this.content.append(e)}async addInfo(){const e=this.addCivitaiInfo();this.addTags();const t=await e;t&&$el("div",{parent:this.content,innerHTML:t.description,style:{maxHeight:"250px",overflow:"auto"}})}createButtons(){const e=super.createButtons();function t(e,t){const i=$el("textarea",{parent:document.body,style:{position:"fixed"},textContent:t.map((e=>e.dataset.tag)).join(", ")});i.select();try{document.execCommand("copy"),e.target.dataset.text||(e.target.dataset.text=e.target.textContent),e.target.textContent="Copied "+t.length+" tags",setTimeout((()=>{e.target.textContent=e.target.dataset.text}),1e3)}catch(s){prompt("Copy to clipboard: Ctrl+C, Enter",text)}finally{document.body.removeChild(i)}}return e.unshift($el("button",{type:"button",textContent:"Copy Selected",onclick:e=>{t(e,[...this.tags.querySelectorAll(".easyuse-model-tag--selected")])}}),$el("button",{type:"button",textContent:"Copy All",onclick:e=>{t(e,[...this.tags.querySelectorAll(".easyuse-model-tag")])}})),e}}const swap={pipe:{category:"Easy Pipe",nodes:["easy pipeIn","easy pipeOut","easy pipeEdit","easy pipeEditPrompt","easy pipeBatchIndex"],input:{pipe:"pipe"},output:{pipe:"pipe"},widget:{optional_positive:"optional_positive",optional_negative:"optional_negative"}},loaders:{category:"Easy Loaders",nodes:["easy fullLoader","easy a1111Loader","easy comfyLoader","easy kolorsLoader","easy hunyuanDiTLoader","easy pixArtLoader","easy fluxLoader"],input:{optional_lora_stack:"optional_lora_stack",optional_controlnet_stack:"optional_controlnet_stack",positive:"positive",negative:"negative"},output:{pipe:"pipe",model:"model",vae:"vae",clip:null,positive:null,negative:null,latent:null},widget:{ckpt_name:"ckpt_name",vae_name:"vae_name",clip_skip:"clip_skip",lora_name:"lora_name",resolution:"resolution",empty_latent_width:"empty_latent_width",empty_latent_height:"empty_latent_height",positive:"positive",negative:"negative",batch_size:"batch_size",a1111_prompt_style:"a1111_prompt_style"}},preSampling:{category:"Easy PreSampling",nodes:["easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG","easy preSamplingNoiseIn","easy preSamplingCustom","easy preSamplingLayerDiffusion","easy fullkSampler"],input:{pipe:"pipe",image_to_latent:"image_to_latent",latent:"latent"},output:{pipe:"pipe"},widget:{steps:"steps",cfg:"cfg",cfg_scale_min:"cfg",sampler_name:"sampler_name",scheduler:"scheduler",denoise:"denoise",seed_num:"seed_num",seed:"seed"}},samplers:{category:"Custom Sampler",nodes:["KSamplerSelect","SamplerEulerAncestral","SamplerEulerAncestralCFG++","SamplerLMS","SamplerDPMPP_3M_SDE","SamplerDPMPP_2M_SDE","SamplerDPMPP_SDE","SamplerDPMAdaptative","SamplerLCMUpscale","SamplerTCD","SamplerTCD EulerA"],output:{SAMPLER:"SAMPLER"}},sigmas:{category:"Custom Sigmas",nodes:["BasicScheduler","KarrasScheduler","ExponentialScheduler","PolyexponentialScheduler","VPScheduler","BetaSamplingScheduler","SDTurboScheduler","SplitSigmas","SplitSigmasDenoise","FlipSigmas","AlignYourStepsScheduler","GITSScheduler"],output:{SIGMAS:"SIGMAS"}},kSampler:{category:"Easy kSampler",nodes:["easy kSampler","easy kSamplerTiled","easy kSamplerCustom","easy kSamplerInpainting","easy kSamplerDownscaleUnet","easy kSamplerLayerDiffusion"],input:{pipe:"pipe",model:"model"},output:{pipe:"pipe",image:"image"},widget:{image_output:"image_output",save_prefix:"save_prefix",link_id:"link_id"}},controlNet:{category:"Easy ControlNet",nodes:["easy controlnetLoader","easy controlnetLoaderADV","easy controlnetLoader++","easy instantIDApply","easy instantIDApplyADV"],input:{pipe:"pipe",image:"image",image_kps:"image_kps",control_net:"control_net",positive:"positive",negative:"negative",mask:"mask"},output:{pipe:"pipe",positive:"positive",negative:"negative"},widget:{control_net_name:"control_net_name",strength:["strength","cn_strength"],scale_soft_weights:["scale_soft_weights","cn_soft_weights"],cn_strength:["strength","cn_strength"],cn_soft_weights:["scale_soft_weights","cn_soft_weights"]}},adapter:{category:"Easy Adapter",nodes:["easy ipadapterApply","easy ipadapterApplyADV","easy ipadapterApplyFaceIDKolors","easy ipadapterStyleComposition","easy ipadapterApplyFromParams","easy pulIDApply","easy pulIDApplyADV"],input:{model:"model",image:"image",image_style:"image",attn_mask:"attn_mask",optional_ipadapter:"optional_ipadapter"},output:{model:"model",tiles:"tiles",masks:"masks",ipadapter:"ipadapter"},widget:{preset:"preset",lora_strength:"lora_strength",provider:"provider",weight:"weight",weight_faceidv2:"weight_faceidv2",start_at:"start_at",end_at:"end_at",cache_mode:"cache_mode",use_tiled:"use_tiled",insightface:"insightface",pulid_file:"pulid_file"}},positive:{category:"Easy Positive",nodes:["easy positive","easy wildcards"],input:{},output:{text:"positive",positive:"text"},widget:{text:"positive",positive:"text"}},loadImage:{category:"Easy LoadImage",nodes:["easy loadImageBase64","LoadImage","LoadImageMask"],input:{pipe:"pipe",image:"image",mask:"mask"},output:{IMAGE:"IMAGE",MASK:"MASK"},widget:{image:"image",base64_data:"base64_data",channel:"channel"}},saveImage:{category:"Save/Preview Image",nodes:["SaveImage","PreviewImage"]},inPaint:{category:"Easy Inpaint",nodes:["easy applyBrushNet","easy applyPowerPaint","easy applyInpaint"],input:{},output:{pipe:"pipe"},widget:{dtype:"dtype",fitting:"fitting",function:"function",scale:"scale",start_at:"start_at",end_at:"end_at"}},showAny:{category:"Show Anything",nodes:["easy showAnything","Preview Any"],input:{anything:"anything"},output:{output:"output"}},saveText:{category:"Save Text",nodes:["easy saveText"],input:{image:"image",text:"text",output_file_path:"output_file_path",file_name:"file_name",file_extension:"file_extension",overwrite:"overwrite"},output:{text:"text",image:"image"},widget:{image:"image",text:"text",output_file_path:"output_file_path",file_name:"file_name",file_extension:"file_extension",overwrite:"overwrite"}},persona:{category:"LLM Party Persona",nodes:["load_persona","classify_persona","classify_persona_plus","custom_persona","translate_persona","flux_persona"],input:{file_content:"file_content"},output:{system_prompt:"system_prompt"},widget:{is_enable:"is_enable"}},llmModelLoader:{category:"LLM Model Loader",nodes:["LLM_api_loader","genai_api_loader","LLM_local_loader"],output:{model:"model"}},llmModelChain:{category:"LLM Model Chain",nodes:["LLM","LLM_local"],input:{model:"model",image:"images",images:"image",extra_parameters:"extra_parameters",system_prompt_input:"system_prompt_input",user_prompt_input:"user_prompt_input",tools:"tools",file_content:"file_content"},output:{assistant_response:"assistant_response",history:"history",tool:"tool",image:"image"},widget:{system_prompt:"system_prompt",user_prompt:"user_prompt",temperature:"temperature",is_memory:"is_memory",is_tools_in_sys_prompt:"is_tools_in_sys_prompt",max_length:"max_length",main_brain:"main_brain",conversation_rounds:"conversation_rounds",history_record:"history_record",is_enable:"is_enable"}},maskModify:{category:"Mask Modify",nodes:["CropMask","ThresholdMask","GrowMask","FeatherMask","LayerMask: MaskGrain","LayerMask: MaskEdgeUltraDetail","LayerMask: MaskEdgeUltraDetail V2"],input:{mask:"mask"},output:{MASK:"MASK",mask:"mask",image:"image"}},maskModifyWAS:{category:"Mask Modify (WAS)",nodes:["Mask Dilate Region","Mask Gaussian Region"],input:{masks:"masks"},output:{MASKS:"MASKS"}},fast_loaders:{category:"Fast Loaders",nodes:["fast ckptLoader","fast unetLoader"],input:{"开始加载":"开始加载"},output:{"模型加载器":"模型加载器",MODEL:"MODEL",VAE:"VAE",CLIP:"CLIP"}},fast_inputs:{category:"Fast Inputs",nodes:["fast sdInput","fast fluxInput","fast hiDreamInput","fast videoInput","fast qwenImageInput"],input:{"模型加载器":"模型加载器","更多Controlnet":"更多Controlnet","图像":"图像","遮罩":"遮罩","功能节点":"功能节点"},output:{"采样":"采样","正面条件":"正面条件","负面条件":"负面条件","潜空间":"潜空间"},widget:{Sigmas:"Sigmas","分离Sigmas步数":"分离Sigmas步数","分离降噪":"分离降噪","降噪":"降噪","添加噪声":"添加噪声",seed:"seed","生成数量":"生成数量"}},fast_outputResult:{category:"Fast Outputs",nodes:["fast outputResult","fast outputResultVideo","fast outputLatent"],input:{"采样":"采样","噪声":"噪声","模型加载器":"模型加载器"},output:{"图像":"图像序列","图像序列":"图像","输出":"输出","降噪输出":"降噪输出",VAE:"VAE"},widget:{"采样预览":"采样预览","VAE解码":"VAE解码","图像输出":"视频输出","视频输出":"图像输出","保存路径":"保存路径"}},fast_loadImage:{category:"Fast LoadImage",nodes:["fast loadImage","fast loadImageList"],output:{"图像":"图像","遮罩":"遮罩","文件名":"文件名"},widget:{"模式":"模式","图像":"图像","路径":"路径","最大张数":"最大张数","开始索引":"开始索引",Base64:"Base64","链接":"链接"}}};function replaceNode(e,t,i){var s;const o=LiteGraph.createNode(t);if(o){if(app$1.graph.add(o),o.pos=e.pos.slice(),o.size=e.size.slice(),(null==(s=e.widgets)?void 0:s.length)>0&&e.widgets.forEach((e=>{var t,s;if(null==(s=null==(t=swap[i])?void 0:t.widget)?void 0:s[e.name]){const t=swap[i].widget[e.name];if(t&&o.widgets){const i=findWidgetByName(o,t);i&&(i.value=e.value,"seed_num"==e.name&&(i.linkedWidgets[0].value=e.linkedWidgets[0].value),"converted-widget"==e.type&&convertToInput(o,i,e))}}})),e.inputs&&e.inputs.forEach(((t,s)=>{var a,n,l;if(t&&t.link&&(null==(n=null==(a=swap[i])?void 0:a.input)?void 0:n[t.name])){const s=null==(l=swap[i])?void 0:l.input[t.name];if(null===s)return;const a=o.findInputSlot(s);if(-1!==a){const i=e.graph.links[t.link];if(i){const t=e.graph.getNodeById(i.origin_id);t&&t.connect(i.origin_slot,o,a)}}}})),e.outputs&&e.outputs.forEach(((t,s)=>{var a,n;if(t&&t.links&&(null==(n=null==(a=swap[i])?void 0:a.output)?void 0:n[t.name])){const s=swap[i].output[t.name];if(null===s)return;const a=o.findOutputSlot(s);-1!==a&&t.links.forEach((t=>{const i=e.graph.links[t];if(i){const t=e.graph.getNodeById(i.target_id);t&&o.connect(a,t,i.target_slot)}}))}})),app$1.graph.remove(e),"easy fullkSampler"==o.type){const e=o.outputs[0].links;if(e&&e[0]){const t=app$1.graph._nodes.find((t=>t.inputs&&t.inputs[0]&&t.inputs[0].link==e[0]));t&&app$1.graph.remove(t)}}else if(swap.preSampling.nodes.includes(o.type)){const e=o.outputs[0].links;if(!e||!e[0]){const e=LiteGraph.createNode("easy kSampler");app$1.graph.add(e),e.pos=o.pos.slice(),e.pos[0]=e.pos[0]+o.size[0]+20;const t=o.findInputSlot("pipe");-1!==t&&o&&o.connect(0,e,t)}}o.setSize([o.size[0],o.computeSize()[1]])}}function findWidgetByName(e,t){return e.widgets.find((e=>"object"==typeof t?t.includes(e.name):e.name===t))}function replaceNodeMenuCallback(e,t,i){return function(){replaceNode(e,t,i)}}const addMenuHandler=(e,t)=>{const i=e.prototype.getExtraMenuOptions;e.prototype.getExtraMenuOptions=function(){const e=i.apply(this,arguments);return t.apply(this,arguments),e}},addMenu=(e,t,i,s,o=!0)=>{addMenuHandler(s,(function(s,a){a.unshift({content:e,has_submenu:o,callback:(e,s,o,a,n)=>showSwapMenu(e,s,o,a,n,t,i)}),"loaders"==t&&(a.unshift({content:$t("💎 View Lora Info..."),callback:(e,t,i,s,o)=>{let a=o.widgets.find((e=>"lora_name"==e.name)).value;a&&"None"!=a&&new LoraInfoDialog(a).show("loras",a)}}),a.unshift({content:$t("💎 View Checkpoint Info..."),callback:(e,t,i,s,o)=>{let a=o.widgets[0].value;a&&"None"!=a&&new CheckpointInfoDialog(a).show("checkpoints",a)}}))}))},showSwapMenu=(e,t,i,s,o,a,n)=>{const l=[];return n.map((e=>{o.type!==e&&l.push({content:`${e}`,callback:replaceNodeMenuCallback(o,e,a)})})),new LiteGraph.ContextMenu(l,{event:i,callback:null,parentMenu:s,node:o}),!1},CONVERTED_TYPE="converted-widget",GET_CONFIG=Symbol();function hideWidget(e,t,i=""){if(t.origType=t.type,t.origComputeSize=t.computeSize,t.origSerializeValue=t.serializeValue,t.computeSize=()=>[0,-4],t.type=CONVERTED_TYPE+i,t.serializeValue=()=>{if(!e.inputs)return;let i=e.inputs.find((e=>{var i;return(null==(i=e.widget)?void 0:i.name)===t.name}));return i&&i.link?t.origSerializeValue?t.origSerializeValue():t.value:void 0},t.linkedWidgets)for(const s of t.linkedWidgets)hideWidget(e,s,":"+t.name)}function convertToInput(e,t,i){hideWidget(e,t);const{type:s}=getWidgetType(i),o=e.size;t.options&&t.options.forceInput||e.addInput(t.name,s,{widget:{name:t.name,[GET_CONFIG]:()=>i}});for(const a of e.widgets)a.last_y+=LiteGraph.NODE_SLOT_HEIGHT;e.setSize([Math.max(o[0],e.size[0]),Math.max(o[1],e.size[1])])}function getWidgetType(e){let t=e[0];return t instanceof Array&&(t="COMBO"),{type:t}}const reloadNode=function(e){var t,i,s,o;const a=e.constructor.type,n=e.properties.origVals||{},l=n.title||e.title,r=n.color||e.color,d=n.bgcolor||e.bgcolor,c=e,u={size:[...e.size],color:r,bgcolor:d,pos:[...e.pos]};let p=[],A=[];if(e.inputs)for(const f of e.inputs)if(f.link){const t=f.name,i=e.findInputSlot(t),s=e.getInputNode(i),o=e.getInputLink(i);p.push([o.origin_slot,s,t])}if(e.outputs)for(const f of e.outputs)if(f.links){const e=f.name;for(const t of f.links){const i=graph.links[t],s=graph._nodes_by_id[i.target_id];A.push([e,s,i.target_slot])}}app$1.graph.remove(e);let g=app$1.graph.add(LiteGraph.createNode(a,l,u));function h(){if(c.widgets)for(let e of c.widgets)if("converted-widget"===e.type){const t=g.widgets.find((t=>t.name===e.name));for(let i of c.inputs)i.name===e.name&&convertToInput(g,t,i.widget)}for(let e of p){const[t,i,s]=e;i.connect(t,g.id,s)}for(let e of A){const[t,i,s]=e;g.connect(t,i,s)}}g.inputs.map(((t,i)=>{g.inputs[i].label=e.inputs[i].label})),g.outputs.map(((t,i)=>{g.outputs[i].label=e.outputs[i].label}));let m=c.widgets_values;if(!m&&(null==(t=g.widgets)?void 0:t.length)>0)return g.widgets.forEach(((e,t)=>{const i=c.widgets[t];e.name===i.name&&e.type===i.type&&(e.value=i.value)})),void h();if(m){let e=function(e,t){var i,s,o,a,n,l;if(!0===e||!1===e){if((null==(i=t.options)?void 0:i.on)&&(null==(s=t.options)?void 0:s.off))return{value:e,pass:!0}}else if("number"==typeof e){if((null==(o=t.options)?void 0:o.min)<=e&&e<=(null==(a=t.options)?void 0:a.max))return{value:e,pass:!0}}else{if(null==(l=null==(n=t.options)?void 0:n.values)?void 0:l.includes(e))return{value:e,pass:!0};if(t.inputEl&&"string"==typeof e)return{value:e,pass:!0}}return{value:t.value,pass:!1}},t=!1;const a=(null==m?void 0:m.length)<=(null==(i=g.widgets)?void 0:i.length);let n=a?0:m.length-1;const l=i=>{var s;const o=c.widgets[i];let l=g.widgets[i];if(l.name===o.name&&l.type===o.type){for(;(a?n=0)&&!t;){let{value:t,pass:i}=e(m[n],l);if(i&&null!==t){l.value=t;break}n+=a?1:-1}n++,a||(n=m.length-((null==(s=g.widgets)?void 0:s.length)-1-i))}};if(a&&(null==(s=g.widgets)?void 0:s.length)>0)for(let i=0;i0)for(let i=g.widgets.length-1;i>=0;i--)l(i)}h()};app$1.registerExtension({name:"Comfy.EasyUse.ExtraMenu",async beforeRegisterNodeDef(e,t,i){addMenuHandler(e,(function(e,i){i.unshift({content:$t("🔃 Reload Node"),callback:(e,t,i,s,o)=>{let a=LGraphCanvas.active_canvas;if(!a.selected_nodes||Object.keys(a.selected_nodes).length<=1)reloadNode(o);else for(let n in a.selected_nodes)reloadNode(a.selected_nodes[n])}}),"easy ckptNames"==t.name&&i.unshift({content:$t("💎 View Checkpoint Info..."),callback:(e,t,i,s,o)=>{o.widgets[0].value}})}));for(const s in swap)swap[s].nodes.includes(t.name)&&addMenu(`↪️ Swap ${swap[s].category}`,s,swap[s].nodes,e)}});const LGraphNode=LiteGraph.LGraphNode,setIcon="➡️",getIcon="⬅️";function globalSeedHandler(e){let t=app.graph._nodes_by_id;for(let i in t){let s=t[i];if("easy globalSeed"==s.type){if(s.widgets){const t=s.widgets.find((e=>"value"==e.name));s.widgets.find((e=>"last_seed"==e.name)).value=t.value,t.value=e.detail.value}}else if(s.widgets){const t=s.widgets.find((e=>"seed_num"==e.name||"seed"==e.name||"noise_seed"==e.name));t&&null!=e.detail.seed_map[s.id]&&(t.value=e.detail.seed_map[s.id])}}}app$1.registerExtension({name:"easy setNode",registerCustomNodes(){class e extends LGraphNode{constructor(t){super("Set"),__publicField(this,"defaultVisibility",!0),__publicField(this,"serialize_widgets",!0),this.properties||(this.properties={previousName:""}),this.properties.showOutputText=e.defaultVisibility;const i=this;i.color=LGraphCanvas.node_colors.blue.color,this.addWidget("text","Constant","",((e,t,s,o,a)=>{i.validateName(i.graph),""!==this.widgets[0].value&&(this.title=setIcon+this.widgets[0].value),this.properties.previousName=this.widgets[0].value,this.update()}),{}),this.addInput("*","*"),this.onConnectionsChange=function(e,t,s,o,a){if(1!=e||s||(this.inputs[t].type="*",this.inputs[t].name="*",this.title="Set"),o&&i.graph&&1==e&&s){const e=i.graph._nodes.find((e=>e.id==o.origin_id)).outputs[o.origin_slot];if(!e)return;const t=e.type,s=i.is_auto_link?this.widgets[0].value:e.name;"Set"===this.title&&(this.title=setIcon+s,this.widgets[0].value=s),"*"===this.widgets[0].value&&(this.widgets[0].value=s),this.validateName(i.graph),this.inputs[0]&&(this.inputs[0].type=t,this.inputs[0].name=s),setTimeout((e=>{this.title=setIcon+this.widgets[0].value,this.properties.previousName=this.widgets[0].value}),1)}this.update()},this.validateName=function(e){let t=i.widgets[0].value;if(""!=t){let s=0,o=[];do{o=e._nodes.filter((e=>e!=this&&("easy setNode"==e.type&&e.widgets[0].value===t))),o.length>0&&(t=i.widgets[0].value+s),s++}while(o.length>0);i.widgets[0].value=t,this.update()}},this.clone=function(){const t=e.prototype.clone.apply(this);return t.inputs[0].name="*",t.inputs[0].type="*",t.properties.previousName="",t.size=t.computeSize(),t},this.onAdded=function(e){this.validateName(e)},this.update=function(){if(i.graph){this.findGetters(i.graph).forEach((e=>{e.setType(this.inputs[0].type)})),this.widgets[0].value&&this.findGetters(i.graph,!0).forEach((e=>{e.setName(this.widgets[0].value)}));i.graph._nodes.filter((e=>"easy getNode"==e.type)).forEach((e=>{e.setComboValues&&e.setComboValues()}))}},this.findGetters=function(e,t){const i=t?this.properties.previousName:this.widgets[0].value;return e._nodes.filter((e=>"easy getNode"==e.type&&e.widgets[0].value===i&&""!=i))},this.isVirtualNode=!0}onRemoved(){this.graph._nodes.filter((e=>"easy getNode"==e.type)).forEach((e=>{e.setComboValues&&e.setComboValues([this])}))}}LiteGraph.registerNodeType("easy setNode",Object.assign(e,{title:"Set"})),e.category="EasyUse/Util"}}),app$1.registerExtension({name:"easy getNode",registerCustomNodes(){class e extends LGraphNode{constructor(t){super("Get"),__publicField(this,"defaultVisibility",!0),__publicField(this,"serialize_widgets",!0),this.properties||(this.properties={}),this.properties.showOutputText=e.defaultVisibility;const i=this;i.color=LGraphCanvas.node_colors.blue.color,this.addWidget("combo","Constant","",(e=>{this.onRename()}),{values:()=>i.graph._nodes.filter((e=>"easy setNode"==e.type)).map((e=>e.widgets[0].value)).sort()}),this.addOutput("*","*"),this.onConnectionsChange=function(e,t,i,s,o){this.validateLinks(),2!=e||i?(this.onRename(),setTimeout((e=>{this.title=getIcon+this.widgets[0].value}),1)):(this.outputs[t].type="*",this.outputs[t].name="*",this.title="Get")},this.setName=function(e){i.widgets[0].value=e,i.onRename(),i.serialize()},this.onRename=function(e=0){const t=this.findSetter(i.graph);if(t){const i=t.inputs[0].type,s=t.inputs[0].name;this.setType(i,s),this.outputs[e].type=i,this.outputs[e].name=s,this.title=getIcon+t.widgets[0].value}else this.setType("*","*"),this.outputs[e].type="*",this.outputs[e].name="*"},this.clone=function(){const t=e.prototype.clone.apply(this);return t.size=t.computeSize(),t},this.validateLinks=function(){"*"!=this.outputs[0].type&&this.outputs[0].links&&this.outputs[0].links.forEach((e=>{const t=i.graph.links[e];t&&t.type!=this.outputs[0].type&&"*"!=t.type&&i.graph.removeLink(e)}))},this.setType=function(e,t){this.outputs[0].name=t,this.outputs[0].type=e,this.validateLinks()},this.findSetter=function(e){const t=this.widgets[0].value;return e._nodes.find((e=>"easy setNode"==e.type&&e.widgets[0].value===t&&""!=t))},this.isVirtualNode=!0}getInputLink(e){const t=this.findSetter(this.graph);if(t){const i=t.inputs[e];return this.graph.links[i.link]}throw new Error("No setter found for "+this.widgets[0].value+"("+this.type+")")}onAdded(e){}}LiteGraph.registerNodeType("easy getNode",Object.assign(e,{title:"Get"})),e.category="EasyUse/Util"}}),api.addEventListener("easyuse-global-seed",globalSeedHandler);const original_queuePrompt=api.queuePrompt;async function queuePrompt_with_seed(e,{output:t,workflow:i},s={}){i.seed_widgets={};for(let o in app.graph._nodes_by_id){let e=app.graph._nodes_by_id[o].widgets;if(e)for(let t in e)"seed_num"!=e[t].name&&"seed"!=e[t].name&&"noise_seed"!=e[t].name||"converted-widget"==e[t].type||(i.seed_widgets[o]=parseInt(t))}return await original_queuePrompt.call(api,e,{output:t,workflow:i},s)}api.queuePrompt=queuePrompt_with_seed;const extraNodes$1=["easy imageSave","easy fullkSampler","easy kSampler","easy kSamplerTiled","easy kSamplerInpainting","easy kSamplerDownscaleUnet","easy kSamplerSDTurbo","easy detailerFix"];app$1.registerExtension({name:"Comfy.EasyUse.SaveImageExtraOutput",async beforeRegisterNodeDef(e,t,i){if(extraNodes$1.includes(t.name)){const t=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const e=t?t.apply(this,arguments):void 0,s=this.widgets.find((e=>"filename_prefix"===e.name||"save_prefix"===e.name));return s.serializeValue=()=>applyTextReplacements(i,s.value),e}}else{const t=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const e=t?t.apply(this,arguments):void 0;return this.properties&&"Node name for S&R"in this.properties||this.addProperty("Node name for S&R",this.constructor.type,"string"),e}}}});const propmts=["easy wildcards","easy positive","easy negative","easy stylesSelector","easy promptConcat","easy promptReplace"],preSamplingNodes=["easy preSampling","easy preSamplingAdvanced","easy preSamplingNoiseIn","easy preSamplingCustom","easy preSamplingDynamicCFG","easy preSamplingSdTurbo","easy preSamplingLayerDiffusion"],kSampler=["easy kSampler","easy kSamplerTiled","easy kSamplerInpainting","easy kSamplerDownscaleUnet","easy kSamplerSDTurbo"],controlNetNodes=["easy controlnetLoader","easy controlnetLoaderADV"],instantIDNodes=["easy instantIDApply","easy instantIDApplyADV"],ipadapterNodes=["easy ipadapterApply","easy ipadapterApplyADV","easy ipadapterApplyFaceIDKolors","easy ipadapterStyleComposition"],pipeNodes=["easy pipeIn","easy pipeOut","easy pipeEdit","easy pipeEditPrompt"],xyNodes=["easy XYPlot","easy XYPlotAdvanced"],extraNodes=["easy setNode"],modelNormalNodes=["RescaleCFG","LoraLoaderModelOnly","LoraLoader","FreeU","FreeU_v2",...ipadapterNodes,...extraNodes],suggestions={"easy seed":{from:{INT:[...preSamplingNodes,"easy fullkSampler"]}},"easy positive":{from:{STRING:[...propmts]}},"easy negative":{from:{STRING:[...propmts]}},"easy wildcards":{from:{STRING:["easy showAnything",...propmts]}},"easy stylesSelector":{from:{STRING:["easy showAnything",...propmts]}},"easy promptConcat":{from:{STRING:["easy showAnything",...propmts]}},"easy promptReplace":{from:{STRING:["easy showAnything",...propmts]}},"easy fullLoader":{from:{PIPE_LINE:[...preSamplingNodes,"easy fullkSampler",...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy a1111Loader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy comfyLoader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy hunyuanDiTLoader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy kolorsLoader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy pixArtLoader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy fluxLoader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy svdLoader":{from:{PIPE_LINE:["easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG",...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy zero123Loader":{from:{PIPE_LINE:["easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG",...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy sv3dLoader":{from:{PIPE_LINE:["easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG",...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{STRING:[...propmts]}},"easy preSampling":{from:{PIPE_LINE:[...kSampler,...pipeNodes,...controlNetNodes,...xyNodes,...extraNodes]}},"easy preSamplingAdvanced":{from:{PIPE_LINE:[...kSampler,...pipeNodes,...controlNetNodes,...xyNodes,...extraNodes]}},"easy preSamplingDynamicCFG":{from:{PIPE_LINE:[...kSampler,...pipeNodes,...controlNetNodes,...xyNodes,...extraNodes]}},"easy preSamplingCustom":{from:{PIPE_LINE:[...kSampler,...pipeNodes,...controlNetNodes,...xyNodes,...extraNodes]}},"easy preSamplingLayerDiffusion":{from:{PIPE_LINE:["easy kSamplerLayerDiffusion",...kSampler,...pipeNodes,...controlNetNodes,...xyNodes,...extraNodes]}},"easy preSamplingNoiseIn":{from:{PIPE_LINE:[...kSampler,...pipeNodes,...controlNetNodes,...xyNodes,...extraNodes]}},"easy fullkSampler":{from:{PIPE_LINE:[...pipeNodes.reverse(),"easy preDetailerFix","easy preMaskDetailerFix",...preSamplingNodes,...extraNodes]}},"easy kSampler":{from:{PIPE_LINE:[...pipeNodes.reverse(),"easy preDetailerFix","easy preMaskDetailerFix","easy hiresFix",...preSamplingNodes,...extraNodes]}},"easy controlnetLoader":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes]}},"easy controlnetLoaderADV":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes]}},"easy instantIDApply":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{COMBO:["easy promptLine"]}},"easy instantIDApplyADV":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes},to:{COMBO:["easy promptLine"]}},"easy ipadapterApply":{to:{COMBO:["easy promptLine"]}},"easy ipadapterApplyADV":{to:{STRING:["easy sliderControl",...propmts],COMBO:["easy promptLine"]}},"easy ipadapterStyleComposition":{to:{COMBO:["easy promptLine"]}},"easy preDetailerFix":{from:{PIPE_LINE:["easy detailerFix",...pipeNodes,...extraNodes]},to:{PIPE_LINE:["easy ultralyticsDetectorPipe","easy samLoaderPipe","easy kSampler","easy fullkSampler"]}},"easy preMaskDetailerFix":{from:{PIPE_LINE:["easy detailerFix",...pipeNodes,...extraNodes]}},"easy samLoaderPipe":{from:{PIPE_LINE:["easy preDetailerFix",...pipeNodes,...extraNodes]}},"easy ultralyticsDetectorPipe":{from:{PIPE_LINE:["easy preDetailerFix",...pipeNodes,...extraNodes]}},"easy cascadeLoader":{from:{PIPE_LINE:["easy fullCascadeKSampler","easy preSamplingCascade",...controlNetNodes,...pipeNodes,...extraNodes],MODEL:modelNormalNodes.filter((e=>!ipadapterNodes.includes(e)))}},"easy fullCascadeKSampler":{from:{PIPE_LINE:["easy preSampling","easy preSamplingAdvanced",...pipeNodes,...extraNodes]}},"easy preSamplingCascade":{from:{PIPE_LINE:["easy cascadeKSampler",...pipeNodes,...extraNodes]}},"easy cascadeKSampler":{from:{PIPE_LINE:["easy preSampling","easy preSamplingAdvanced",...pipeNodes,...extraNodes]}},"easy pipeEdit":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...extraNodes]},to:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes]}},"easy pipeEditPrompt":{from:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...extraNodes]},to:{PIPE_LINE:[...preSamplingNodes,...controlNetNodes,...instantIDNodes,...pipeNodes,...extraNodes]}}};class NullGraphError extends Error{constructor(e="Attempted to access LGraph reference that was null or undefined.",t){super(e,{cause:t}),this.name="NullGraphError"}}function drawTime(e,t){t&&(t=parseFloat(t).toFixed(3)+$t("s"),e.save(),e.fillStyle=LiteGraph.NODE_DEFAULT_BGCOLOR,drawRoundedRect(e,0,-LiteGraph.NODE_TITLE_HEIGHT-20,e.measureText(t).width+10,LiteGraph.NODE_TITLE_HEIGHT-10,4),e.fill(),drawText(e,t,8,-LiteGraph.NODE_TITLE_HEIGHT-6,LiteGraph.NODE_TITLE_COLOR),e.restore())}app$1.registerExtension({name:"Comfy.EasyUse.Suggestions",async setup(e){const t=LGraphCanvas.prototype.createDefaultNodeForSlot;LGraphCanvas.prototype.createDefaultNodeForSlot=function(e){var i;const s=Object.assign({nodeFrom:null,slotFrom:null,nodeTo:null,slotTo:null,position:[],nodeType:null,posAdd:[0,0],posSizeFix:[0,0]},e||{}),o=this,a=s.nodeFrom&&null!==s.slotFrom,n=!a&&s.nodeTo&&null!==s.slotTo,l=a?s.nodeFrom:s.nodeTo;if(!l||!Object.keys(suggestions).includes(l.type))return t.call(this,e);if(!a&&!n)return!1;if(!s.nodeType)return!1;const r=a?s.nodeFrom:s.nodeTo;if(!r)throw new TypeError("nodeX was null when creating default node for slot.");const d=r.type;let c=a?s.slotFrom:s.slotTo,u=!1;switch(typeof c){case"string":u=a?r.findOutputSlot(c,!1):r.findInputSlot(c,!1),c=a?r.outputs[c]:r.inputs[c];break;case"object":if(null===c)return!1;u=a?r.findOutputSlot(c.name):r.findInputSlot(c.name);break;case"number":u=c,c=a?r.outputs[c]:r.inputs[c];break;default:return!1}var p=c.type==LiteGraph.EVENT?"_event_":c.type,A=a?LiteGraph.slot_types_default_out:LiteGraph.slot_types_default_in;if(null==A?void 0:A[p]){let e=!1;const t=a?"from":"to";if(suggestions[d]&&suggestions[d][t]&&(null==(i=suggestions[d][t][p])?void 0:i.length)>0){for(var g in suggestions[d][t][p])if(s.nodeType==suggestions[d][t][p][g]||"AUTO"==s.nodeType){e=suggestions[d][t][p][g];break}}else if("object"==typeof A[p]||"array"==typeof A[p]){for(var g in A[p])if(s.nodeType==A[p][g]||"AUTO"==s.nodeType){e=A[p][g];break}}else s.nodeType!=A[p]&&"AUTO"!=s.nodeType||(e=A[p]);if(e){var h=!1;"object"==typeof e&&e.node&&(h=e,e=e.node);var m=LiteGraph.createNode(e);if(m){if(h){if(h.properties)for(var f in h.properties)m.addProperty(f,h.properties[f]);if(h.inputs)for(var f in m.inputs=[],h.inputs)m.addOutput(h.inputs[f][0],h.inputs[f][1]);if(h.outputs)for(var f in m.outputs=[],h.outputs)m.addOutput(h.outputs[f][0],h.outputs[f][1]);h.title&&(m.title=h.title),h.json&&m.configure(h.json)}o.graph.add(m),m.pos=[s.position[0]+s.posAdd[0]+(s.posSizeFix[0]?s.posSizeFix[0]*m.size[0]:0),s.position[1]+s.posAdd[1]+(s.posSizeFix[1]?s.posSizeFix[1]*m.size[1]:0)];const e={node:m,opts:s};if(!this.canvas.dispatchEvent(new CustomEvent("connect-new-default-node",{detail:e,cancelable:!0})))return!0;if(a){if(!s.nodeFrom)throw new TypeError("createDefaultNodeForSlot - nodeFrom was null");s.nodeFrom.connectByType(u,m,p)}else{if(!s.nodeTo)throw new TypeError("createDefaultNodeForSlot - nodeTo was null");s.nodeTo.connectByTypeOutput(u,m,p)}return!0}}}return!1};let i=LGraphCanvas.prototype.showConnectionMenu;LGraphCanvas.prototype.showConnectionMenu=function(e){var t;const s=Object.assign({nodeFrom:null,slotFrom:null,nodeTo:null,slotTo:null,e:void 0,allow_searchbox:this.allow_searchbox,showSearchBox:this.showSearchBox},e||{}),o=this,{graph:a}=this,{afterRerouteId:n}=s,l=s.nodeFrom&&s.slotFrom,r=!l&&s.nodeTo&&s.slotTo,d=l?s.nodeFrom:s.nodeTo;if(!d||!Object.keys(suggestions).includes(d.type))return i.call(this,e);if(!l&&!r)return!1;const c=l?s.nodeFrom:s.nodeTo;if(!c)throw new TypeError("nodeX was null when creating default node for slot.");let u=l?s.slotFrom:s.slotTo,p=!1;switch(typeof u){case"string":p=l?c.findOutputSlot(u,!1):c.findInputSlot(u,!1),u=l?c.outputs[u]:c.inputs[u];break;case"object":if(null===u)return;p=l?c.findOutputSlot(u.name):c.findInputSlot(u.name);break;case"number":p=u,u=l?c.outputs[u]:c.inputs[u];break;default:return!1}const A=["Add Node","Add Reroute",null];s.allow_searchbox&&A.push("Search",null);var g=u.type==LiteGraph.EVENT?"_event_":u.type,h=l?LiteGraph.slot_types_default_out:LiteGraph.slot_types_default_in,m=c.type;if(h&&h[g]){const e=l?"from":"to";if(suggestions[m]&&suggestions[m][e]&&(null==(t=suggestions[m][e][g])?void 0:t.length)>0)for(var f in suggestions[m][e][g])A.push(suggestions[m][e][g][f]);else if("object"==typeof h[g]||"array"==typeof h[g])for(var f in h[g])A.push(h[g][f]);else A.push(h[g])}var y=new LiteGraph.ContextMenu(A,{event:s.e,extra:u,title:(u&&""!=u.name?u.name+(g?" | ":""):"")+(u&&g?g:""),callback:function(e,t,i){var r,d;switch(e){case"Add Node":LGraphCanvas.onMenuAdd(null,null,i,y,(function(e){var t,i;e&&(l?null==(t=s.nodeFrom)||t.connectByType(p,e,g,{afterRerouteId:n}):null==(i=s.nodeTo)||i.connectByTypeOutput(p,e,g,{afterRerouteId:n}))}));break;case"Add Reroute":const c=l?s.nodeFrom:s.nodeTo,A=t.extra;if(!a)throw new NullGraphError;if(!c)throw new TypeError("Cannot add reroute: node was null");if(!A)throw new TypeError("Cannot add reroute: slot was null");if(!s.e)throw new TypeError("Cannot add reroute: CanvasPointerEvent was null");if(!c.connectFloatingReroute([s.e.canvasX,s.e.canvasY],A,n))throw new Error("Failed to create reroute");o.dirty_canvas=!0,o.dirty_bgcanvas=!0;break;case"Search":l?s.showSearchBox(i,{node_from:s.nodeFrom,slot_from:u,type_filter_in:g}):s.showSearchBox(i,{node_to:s.nodeTo,slot_from:u,type_filter_out:g});break;default:const h={position:[(null==(r=s.e)?void 0:r.canvasX)??0,(null==(d=s.e)?void 0:d.canvasY)??0],nodeType:e,afterRerouteId:n};o.createDefaultNodeForSlot(Object.assign(s,h))}}});return y}}}),app$1.registerExtension({name:"Comfy.EasyUse.TimeTaken",setup(){let e=new Map,t=0;api.addEventListener("execution_start",(e=>{graph&&graph._nodes.forEach((e=>{e.executionDuration&&delete e.executionDuration}))})),api.addEventListener("executing",(i=>{if(!getSetting("EasyUse.Nodes.Runtime",null))return;const s=(null==i?void 0:i.node)||(null==i?void 0:i.detail)||null,o=e.get(t);if(e.delete(t),t&&o){const e=Date.now()-o,i=getNodeById(t);i&&(i.executionDuration||(i.executionDuration=0),i.executionDuration=i.executionDuration+e/1e3)}t=s,e.set(s,Date.now())}))},beforeRegisterNodeDef(e,t){const i=e.prototype.onDrawForeground;e.prototype.onDrawForeground=function(...e){const[t]=e;return drawTime(t,this.executionDuration),null==i?void 0:i.apply(this,e)}}});let nodesStore=null;app$1.registerExtension({name:"Comfy.EasyUse.HotKeys",setup(){if(void 0!==hotkeys){hotkeys("up,down,left,right",(function(e,t){var i,s,o,a,n,l,r,d,c,u,p,A,g,h,m;e.preventDefault();if(!getSetting("EasyUse.Hotkeys.JumpNearestNodes",null))return;const f=getSelectedNodes();if(0===f.length)return;const y=f[0];switch(t.key){case"up":case"left":let e=null;if(isGetNode(y)){const e=null==(i=y.widgets_values)?void 0:i[0],t=null==(s=y.graph)?void 0:s._nodes,o=null==t?void 0:t.find((t=>{var i;if(isSetNode(t)){if((null==(i=t.widgets_values)?void 0:i[0])===e)return t}return null}));o&&jumpToNode(o)}else if((null==(o=y.inputs)?void 0:o.length)>0){for(let t=0;t{var i;if(isGetNode(t)){if((null==(i=t.widgets_values)?void 0:i[0])===e)return t}return null}));i&&jumpToNode(i)}else if((null==(u=y.outputs)?void 0:u.length)>0){for(let e=0;e0&&y.outputs[e].links[0]){t=y.outputs[e].links[0];break}if(t){const e=null==(A=y.graph)?void 0:A.links;if(e[t]){const i=null==(g=e[t])?void 0:g.target_id,s=null==(m=null==(h=y.graph)?void 0:h._nodes_by_id)?void 0:m[i];s&&jumpToNode(s)}}}}})),hotkeys("shift+up,shift+down,shift+left,shift+right,shift+alt+⌘+left,shift+alt+⌘+right,shift+alt+ctrl+left,shift+alt+ctrl+right",(function(e,t){e.preventDefault();if(!getSetting("EasyUse.Hotkeys.AlignSelectedNodes",null))return;const i=getSelectedNodes();if(i.length<=1)return;const s=i;switch(t.key){case"shift+up":LGraphCanvas.alignNodes(s,"top",s[0]);break;case"shift+down":LGraphCanvas.alignNodes(s,"bottom",s[0]);break;case"shift+left":LGraphCanvas.alignNodes(s,"left",s[0]);break;case"shift+right":LGraphCanvas.alignNodes(s,"right",s[0]);break;case"shift+alt+ctrl+left":case"shift+alt+⌘+left":distributeNodes(s,"horizontal");break;case"shift+alt+ctrl+right":case"shift+alt+⌘+right":distributeNodes(s,"vertical")}nodesStore||(nodesStore=useNodesStore()),nodesStore&&nodesStore.update()})),hotkeys("shift+⌘+left,shift+⌘+right,shift+ctrl+left,shift+ctrl+right",(function(e,t){e.preventDefault();if(!getSetting("EasyUse.Hotkeys.NormalizeSelectedNodes",null))return;const i=getSelectedNodes();if(i.length<=1)return;const s=i;switch(t.key){case"shift+ctrl+left":case"shift+⌘+left":setNodesSameSize(s,"width");break;case"shift+ctrl+right":case"shift+⌘+right":setNodesSameSize(s,"height")}nodesStore||(nodesStore=useNodesStore()),nodesStore&&nodesStore.update()})),hotkeys("shift+g",(function(e,t){e.preventDefault();getSetting("EasyUse.Hotkeys.AddGroup",null)&&(addSelectedNodesToGroup(),nodesStore||(nodesStore=useNodesStore()),nodesStore&&nodesStore.update())})),hotkeys("shift+r",(function(e,t){e.preventDefault();getSetting("EasyUse.Hotkeys.cleanVRAMused",null)&&cleanVRAM()})),hotkeys("shift+m",(function(e,t){var i,s,o;if(!getSetting("EasyUse.Hotkeys.toggleNodesMap",null))return;let a=(null==(i=app$1.extensionManager)?void 0:i.sidebarTab)||app$1.extensionManager,n=(null==(s=app$1.extensionManager.sidebarTab)?void 0:s.activeSidebarTabId)||(null==(o=app$1.extensionManager)?void 0:o.activeSidebarTab);a.activeSidebarTabId=n==NODES_MAP_ID?null:NODES_MAP_ID}));const e=[];Array.from(Array(10).keys()).forEach((t=>e.push(`alt+${t}`))),hotkeys(e.join(","),(async function(e,t){e.preventDefault();if(!getSetting("EasyUse.Hotkeys.NodesTemplate",null))return;const i=t.key;let s=parseInt(i.split("+")[1]);const o=await api.getUserData("comfy.templates.json");let a=null;if(200==o.status)try{a=await o.json()}catch(l){toast.error($t("Get Node Templates File Failed"))}else localStorage["Comfy.NodeTemplates"]?a=JSON.parse(localStorage["Comfy.NodeTemplates"]):toast.warn($t("No Node Templates Found"));if(!a)return void toast.warn($t("No Node Templates Found"));s=0===s?9:s-1;const n=a[s];if(n)try{const e=(null==n?void 0:n.name)||"Group",t=(null==n?void 0:n.data)?JSON.parse(n.data):[];clipboardAction((async()=>{await GroupNodeConfig.registerFromWorkflow(t.groupNodes,{}),localStorage.litegrapheditor_clipboard=n.data,app$1.canvas.pasteFromClipboard(),t.groupNodes||addSelectedNodesToGroup(e)}))}catch(l){toast.error(l)}else toast.warn($t("Node template with {key} not set").replace("{key}",i))}));const t=async function(e){if(("b"===e.key||"m"==e.key)&&(e.metaKey||e.ctrlKey)){if(0===getSelectedNodes().length)return;nodesStore||(nodesStore=useNodesStore()),nodesStore&&nodesStore.update()}};window.addEventListener("keydown",t,!0)}}});const clipboardAction=async e=>{const t=localStorage.litegrapheditor_clipboard;await e(),localStorage.litegrapheditor_clipboard=t},addSelectedNodesToGroup=e=>{const t=getSelectedNodes();if(0===t.length)return;const i=t;let s=new LiteGraph.LGraphGroup;s.title=e||"Group",addNodesToGroup(s,i),app$1.canvas.graph.add(s)},chooserClassName="easy imageChooser",isChooserNode=e=>(null==e?void 0:e.comfyClass)===chooserClassName,getPreviewFormatParam=e=>`&type=${e.type}&subfolder=${e.subfolder}&rand=${e.random}`,cancelSelection=e=>{var t;Object.values(null==(t=app$1.graph)?void 0:t._nodes_by_id).forEach((e=>{isChooserNode(e)&&e.cancelSelection("interrupt")}))};app$1.registerExtension({name:"Comfy.EasyUse.imageChooser",setup(){const e=api.interrupt;api.interrupt=function(){var t;(null==(t=app$1.graph)?void 0:t._nodes_by_id)&&cancelSelection(),e.apply(this,arguments)},api.addEventListener("easyuse-image-choose",(e=>{var t;const i=e.detail,s=app$1.graph._nodes_by_id[i.id];if(!s||!isChooserNode(s))return;s.setExecutingState(!1),s.selected_images.clear(),s.anti_selected.clear(),s.isWaitingSelection=["Always Pause","Keep Last Selection"].includes(s.currentMode),s.isCanceling=!1,s.overIndex=null;const o=(null==(t=i.urls)?void 0:t.map(((e,t)=>({index:t,filename:e.filename,subfolder:e.subfolder,type:e.type}))))||[];s.imageData=o,s.imgs=[],o.forEach((e=>{const t=new Image;t.onload=()=>{app$1.graph.setDirtyCanvas(!0)},t.src=`/view?filename=${encodeURIComponent(e.filename)}${getPreviewFormatParam(e)}`,s.imgs.push(t)})),s.update(),"Always Pause"===s.currentMode&&s.setExecutingState(!0)})),api.addEventListener("easyuse-image-keep-selection",(e=>{const t=e.detail,i=app$1.graph._nodes_by_id[t.id];i&&isChooserNode(i)&&(i.isWaitingSelection=!1,i.isCancelling=!1,t.selected&&Array.isArray(t.selected)&&(i.selected_images.clear(),t.selected.forEach((e=>{i.selected_images.add(e)}))),i.update())}))},beforeRegisterNodeDef(e,t){if(t.name==chooserClassName){e.prototype.confirmSelection=function(){api.fetchApi("/easyuse/image_chooser_message",{method:"POST",body:JSON.stringify({node_id:this.id.toString(),action:"select",selected:Array.from(this.selected_images)})}).catch((e=>{})).finally((e=>{this.isWaitingSelection=!1,this.update(),this.setExecutingState(!1)}))},e.prototype.cancelSelection=function(e){api.fetchApi("/easyuse/image_chooser_message",{method:"POST",body:JSON.stringify({node_id:this.id.toString(),action:"cancel",selected:[]})}).catch((e=>{})).finally((e=>{this.isCanceling=!1,this.isWaitingSelection=!1,this.update(),this.setExecutingState(!1)}))},e.prototype.updateWidgets=function(){var e;if(!this.confirm_button_widget||!this.cancel_button_widget)return;const t=this.selected_images.size,i=(null==(e=this.imgs)?void 0:e.length)||0;if(this.isCanceling)this.confirm_button_widget.name=$t("Canceling"),this.cancel_button_widget.name="",this.confirm_button_widget.disabled=!0,this.cancel_button_widget.disabled=!0;else if(this.isWaitingSelection)t>0?(this.confirm_button_widget.name=t>1?`${$t("Progress selected")} (${t}/${i})`:`${$t("Progress selected image")}`,this.confirm_button_widget.disabled=!1):(this.confirm_button_widget.name=$t("Please select images to continue"),this.confirm_button_widget.disabled=!0),this.cancel_button_widget.name=$t("Cancel current run"),this.cancel_button_widget.disabled=!1;else{const e={"Always Pause":$t("Waiting for selection..."),"Keep Last Selection":$t("Using last selection")};this.confirm_button_widget.name=(t>0&&"Always Pause"==this.currentMode?$t("Please run first"):null==e?void 0:e[this.currentMode])||$t("Unknown Mode"),this.cancel_button_widget.name="",this.confirm_button_widget.disabled=!0,this.cancel_button_widget.disabled=!0}this.setDirtyCanvas(!0,!0)},e.prototype.serialize=function(){const e=LiteGraph.LGraphNode.prototype.serialize.call(this);return e.isWaitingSelection=this.isWaitingSelection,e.currentMode=this.currentMode,this.imageData&&this.imageData.length>0&&(e.imageData=this.imageData),this.selected_images&&this.selected_images.size>0&&(e.selected_images=Array.from(this.selected_images)),e.isExecuting=this.isExecuting||!1,e},e.prototype.configure=function(e){LiteGraph.LGraphNode.prototype.configure.call(this,e),this.isWaitingSelection=e.isWaitingSelection||!1,this.currentMode=e.currentMode||"Always Pause",this.imgs=[],this.updateWidgets()},e.prototype.setExecutingState=function(e){this.isExecuting=e,app$1.graph&&app$1.graph.setDirtyCanvas(!0,!1)};const t=e.prototype.update;e.prototype.update=function(){null==t||t.call(this,arguments),this.updateWidgets()};const i=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){null==i||i.call(this,arguments),this.selected_images=new Set,this.anti_selected=new Set,this.currentMode="Always Pause",this.isWaitingSelection=!1,this.isCanceling=!1,this.imageData=[],this.imgs,this.confirm_button_widget=this.addWidget("button","","",(()=>{this.confirmSelection()})),this.cancel_button_widget=this.addWidget("button","","",(()=>{this.cancelSelection()})),this.confirm_button_widget.serialize=!1,this.cancel_button_widget.serialize=!1,setTimeout((e=>{const t=getWidgetByName(this,"mode");t.callback=e=>{requestAnimationFrame((t=>{this.currentMode=e,this.updateWidgets(),this.setDirtyCanvas(!0,!0)}))},this.currentMode=t.value||"Always Pause",this.updateWidgets()}),1),Object.defineProperty(this.confirm_button_widget,"clicked",{get:function(){return this._clicked},set:function(e){this._clicked=e&&""!=this.name}}),Object.defineProperty(this.cancel_button_widget,"clicked",{get:function(){return this._clicked},set:function(e){this._clicked=e&&""!=this.name}}),Object.defineProperty(this,"imageIndex",{get:function(){return null},set:function(e){this.overIndex=e}}),Object.defineProperty(this,"imagey",{get:function(){var e,t;return(null==(t=null==(e=this.widgets)?void 0:e[this.widgets.length-1])?void 0:t.last_y)+LiteGraph.NODE_WIDGET_HEIGHT},set:function(e){this.imagey=e}});const e=this.onMouseDown;this.onMouseDown=function(t,i,s){if(t.isPrimary){const e=click_is_in_image(this,i);e>=0&&this.toggleImageSelection(e)}return e&&e.apply(this,arguments)},this.update()},e.prototype.onDrawBackground,e.prototype.onDrawBackground=function(e){additionalDrawBackground(this,e,this.imagey||0)},e.prototype.toggleImageSelection=function(e){this.selected_images.has(e)?this.selected_images.delete(e):this.selected_images.add(e),this.update()}}}});const click_is_in_image=(e,t)=>{var i,s;if((null==(i=e.imgs)?void 0:i.length)>1)for(var o=0;o0&&i0&&se.imagey)return 0;return-1};function drawRect(e,t,i){var s;if(e.imageRects)s=e.imageRects[t];else{const t=e.imagey;s=[1,t+1,e.size[0]-2,e.size[1]-t-2]}i.strokeRect(s[0]+1,s[1]+1,s[2]-2,s[3]-2)}const is_all_same_aspect_ratio=e=>{if(!e.length||1===e.length)return!0;const t=e[0].naturalWidth/e[0].naturalHeight;for(let i=1;is&&(s=v,l=f,r=y,d=p,c=e,u=p*((A-f)/2))}return{cellWidth:l,cellHeight:r,cols:d,rows:c,shiftX:u}}function additionalDrawBackground(e,t,i=0){var s,o;if(!e.imgs||!e.imgs.length)return;const a=app$1.canvas,n=a.graph_mouse,l=e.size[0];let r=e.size[1]-i-15;if(r<200&&(r=200,requestAnimationFrame((t=>{e.size[1]=i+15+200}))),null==e.imageIndex){let o,d,c,u;if(is_all_same_aspect_ratio(e.imgs))({cellWidth:o,cellHeight:d,cols:u,shiftX:c}=calculateImageGrid(e.imgs,l,r));else{const t=e.imgs.reduce(((e,t)=>Math.max(e,t.naturalWidth,t.naturalHeight)),0),i=[];i.length=null==(s=e.imgs)?void 0:s.length,i[0]={naturalWidth:t,naturalHeight:t},({cellWidth:o,cellHeight:d,cols:u,shiftX:c}=calculateImageGrid(i,l,r))}let p=!1,A=e.imgs.length;e.imageRects=[];for(let s=0;s{drawRect(e,i,t)})),t.strokeStyle="#F88",null==(o=null==e?void 0:e.anti_selected)||o.forEach((i=>{drawRect(e,i,t)}))}function accSub(e,t){let i,s,o,a,n,l;n="string"==typeof e?e:e.toString(),l="string"==typeof t?t:t.toString();try{i=n.split(".")[1].length}catch(r){i=0}try{s=l.split(".")[1].length}catch(r){s=0}return o=Math.pow(10,Math.max(i,s)),a=i>=s?i:s,((e*o-t*o)/o).toFixed(a)}function accDiv(e,t){let i,s,o=0,a=0,n="string"==typeof e?e:e.toString(),l="string"==typeof t?t:t.toString();try{o=n.toString().split(".")[1].length}catch(r){}try{a=l.toString().split(".")[1].length}catch(r){}return i=Number(n.toString().replace(".","")),s=Number(l.toString().replace(".","")),i/s*Math.pow(10,a-o)}Number.prototype.div=function(e){return accDiv(this,e)};let api_keys=[],api_current=0;const api_cost={sd3:6.5,"sd3-turbo":4};class AccountDialog extends ComfyDialog{constructor(){super(),this.lists=[],this.dialog_div=null,this.user_div=null}addItem(e,t){return $el("div.easyuse-account-dialog-item",[$el("input",{type:"text",placeholder:"Enter name",oninput:e=>{const t=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);api_keys[t].name=e.target.value},value:api_keys[e].name}),$el("input.key",{type:"text",oninput:e=>{const t=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);api_keys[t].key=e.target.value},placeholder:"Enter APIKEY",value:api_keys[e].key}),$el("button.choose",{textContent:$t("Choose"),onclick:async e=>{var i,s,o;const a=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);let n=api_keys[a].name,l=api_keys[a].key;if(!n)return void toast.error($t("Please enter the account name"));if(!l)return void toast.error($t("Please enter the APIKEY"));let r=!0;for(let t=0;t{(new AccountDialog).show(t)}},[$el("div.user",[$el("div.avatar",a?[$el("img",{src:a})]:"😀"),$el("div.info",[$el("h5.name",n),$el("h6.remark","Credits: "+l)])]),$el("div.edit",{textContent:$t("Edit")})])),toast.success($t("Save Succeed"))}else toast.success($t("Save Succeed"));this.close()}else toast.error($t("Save Failed"))}}),$el("button.delete",{textContent:$t("Delete"),onclick:e=>{const t=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);api_keys.length<=1?toast.error($t("At least one account is required")):(api_keys.splice(t,1),this.dialog_div.removeChild(e.target.parentNode))}})])}show(e){api_keys.forEach(((t,i)=>{this.lists.push(this.addItem(i,e))})),this.dialog_div=$el("div.easyuse-account-dialog",this.lists),super.show($el("div.easyuse-account-dialog-main",[$el("div",[$el("a",{href:"https://platform.stability.ai/account/keys",target:"_blank",textContent:$t("Getting Your APIKEY")})]),this.dialog_div]))}createButtons(){const e=super.createButtons();return e.unshift($el("button",{type:"button",textContent:$t("Save Account Info"),onclick:e=>{let t=!0;for(let i=0;i{200==e.status?toast.success($t("Save Succeed")):toast.error($t("Save Failed"))}))}else toast.error($t("APIKEY is not Empty"))}})),e.unshift($el("button",{type:"button",textContent:$t("Add Account"),onclick:e=>{const t="Account "+api_keys.length.toString();api_keys.push({name:t,key:""});const i=this.addItem(api_keys.length-1);this.lists.push(i),this.dialog_div.appendChild(i)}})),e}}app$1.registerExtension({name:"Comfy.EasyUse.API.SD3",async beforeRegisterNodeDef(e,t,i){if("easy stableDiffusion3API"==t.name){const t=e.prototype.onNodeCreated;e.prototype.onNodeCreated=async function(){var e,i,s;t&&(null==t||t.apply(this,arguments));const o=this.widgets.find((e=>["seed_num","seed"].includes(e.name))),a=this.widgets.find((e=>["control_before_generate","control_after_generate"].includes(e.name)));let n=this.widgets.find((e=>"model"==e.name));n.callback=e=>{l.value="-"+api_cost[e]};const l=this.addWidget("text","cost_credit","0",(e=>{}),{serialize:!1});l.disabled=!0,a&&setTimeout((e=>{"control before generate"==a.name&&0===o.value&&(o.value=Math.floor(4294967294*Math.random())),l.value="-"+api_cost[n.value]}),100);let r=$el("div.easyuse-account-user",[$t("Loading UserInfo...")]);this.addDOMWidget("account","btn",$el("div.easyuse-account",r)),api.addEventListener("stable-diffusion-api-generate-succeed",(async({detail:e})=>{var t;let i=r.querySelectorAll(".remark");if(i&&i[0]){const t=(null==e?void 0:e.model)?api_cost[e.model]:0;if(t){let e=accSub(parseFloat(i[0].innerText.replace(/Credits: /g,"")),t);e>0&&(i[0].innerText="Credits: "+e.toString())}}await sleep(1e4);const s=await api.fetchApi("/easyuse/stability/balance");if(200==s.status){const e=await s.json();if(null==e?void 0:e.balance){const s=(null==(t=e.balance)?void 0:t.credits)||0;i&&i[0]&&(i[0].innerText="Credits: "+s)}}}));const d=await api.fetchApi("/easyuse/stability/api_keys");if(200==d.status){let t=await d.json();if(api_keys=t.keys,api_current=t.current,api_keys.length>0&&void 0!==api_current){const t=api_keys[api_current].key,o=api_keys[api_current].name;if(t){const t=await api.fetchApi("/easyuse/stability/user_info");if(200==t.status){const o=await t.json();if((null==o?void 0:o.account)&&(null==o?void 0:o.balance)){const t=(null==(e=o.account)?void 0:e.profile_picture)||null,a=(null==(i=o.account)?void 0:i.email)||null,n=(null==(s=o.balance)?void 0:s.credits)||0;r.replaceChildren($el("div.easyuse-account-user-info",{onclick:e=>{(new AccountDialog).show(r)}},[$el("div.user",[$el("div.avatar",t?[$el("img",{src:t})]:"😀"),$el("div.info",[$el("h5.name",a),$el("h6.remark","Credits: "+n)])]),$el("div.edit",{textContent:$t("Edit")})]))}}}else r.replaceChildren($el("div.easyuse-account-user-info",{onclick:e=>{(new AccountDialog).show(r)}},[$el("div.user",[$el("div.avatar","😀"),$el("div.info",[$el("h5.name",o),$el("h6.remark",$t("Click to set the APIKEY first"))])]),$el("div.edit",{textContent:$t("Edit")})]))}}}}}});let activeDropdown=null;function removeDropdown(){activeDropdown&&(activeDropdown.removeEventListeners(),activeDropdown.dropdown.remove(),activeDropdown=null)}function createDropdown(e,t,i,s=!1){removeDropdown(),new Dropdown(e,t,i,s)}class Dropdown{constructor(e,t,i,s=!1){this.dropdown=document.createElement("ul"),this.dropdown.setAttribute("role","listbox"),this.dropdown.classList.add("easy-dropdown"),this.selectedIndex=-1,this.inputEl=e,this.suggestions=t,this.onSelect=i,this.isDict=s,this.focusedDropdown=this.dropdown,this.buildDropdown(),this.onKeyDownBound=this.onKeyDown.bind(this),this.onWheelBound=this.onWheel.bind(this),this.onClickBound=this.onClick.bind(this),this.addEventListeners()}buildDropdown(){this.isDict?this.buildNestedDropdown(this.suggestions,this.dropdown):this.suggestions.forEach(((e,t)=>{this.addListItem(e,t,this.dropdown)}));const e=this.inputEl.getBoundingClientRect();this.dropdown.style.top=e.top+e.height-10+"px",this.dropdown.style.left=e.left+"px",document.body.appendChild(this.dropdown),activeDropdown=this}buildNestedDropdown(e,t){let i=0;Object.keys(e).forEach((s=>{const o=e[s];if("object"==typeof o&&null!==o){const e=document.createElement("ul");e.setAttribute("role","listbox"),e.classList.add("easy-nested-dropdown");const a=document.createElement("li");a.classList.add("folder"),a.textContent=s,a.appendChild(e),a.addEventListener("mouseover",this.onMouseOver.bind(this,i,t)),t.appendChild(a),this.buildNestedDropdown(o,e),i+=1}else{const e=document.createElement("li");e.classList.add("item"),e.setAttribute("role","option"),e.textContent=s,e.addEventListener("mouseover",this.onMouseOver.bind(this,i,t)),e.addEventListener("mousedown",this.onMouseDown.bind(this,s)),t.appendChild(e),i+=1}}))}addListItem(e,t,i){const s=document.createElement("li");s.setAttribute("role","option"),s.textContent=e,s.addEventListener("mouseover",this.onMouseOver.bind(this,t)),s.addEventListener("mousedown",this.onMouseDown.bind(this,e)),i.appendChild(s)}addEventListeners(){document.addEventListener("keydown",this.onKeyDownBound),this.dropdown.addEventListener("wheel",this.onWheelBound),document.addEventListener("click",this.onClickBound)}removeEventListeners(){document.removeEventListener("keydown",this.onKeyDownBound),this.dropdown.removeEventListener("wheel",this.onWheelBound),document.removeEventListener("click",this.onClickBound)}onMouseOver(e,t){t&&(this.focusedDropdown=t),this.selectedIndex=e,this.updateSelection()}onMouseOut(){this.selectedIndex=-1,this.updateSelection()}onMouseDown(e,t){t.preventDefault(),this.onSelect(e),this.dropdown.remove(),this.removeEventListeners()}onKeyDown(e){const t=Array.from(this.focusedDropdown.children),i=t[this.selectedIndex];if(activeDropdown)if(38===e.keyCode)e.preventDefault(),this.selectedIndex=Math.max(0,this.selectedIndex-1),this.updateSelection();else if(40===e.keyCode)e.preventDefault(),this.selectedIndex=Math.min(t.length-1,this.selectedIndex+1),this.updateSelection();else if(39===e.keyCode){if(e.preventDefault(),i&&i.classList.contains("folder")){const e=i.querySelector(".easy-nested-dropdown");e&&(this.focusedDropdown=e,this.selectedIndex=0,this.updateSelection())}}else if(37===e.keyCode&&this.focusedDropdown!==this.dropdown){const e=this.focusedDropdown.closest(".easy-dropdown, .easy-nested-dropdown").parentNode.closest(".easy-dropdown, .easy-nested-dropdown");e&&(this.focusedDropdown=e,this.selectedIndex=Array.from(e.children).indexOf(this.focusedDropdown.parentNode),this.updateSelection())}else if((13===e.keyCode||9===e.keyCode)&&this.selectedIndex>=0){e.preventDefault(),i.classList.contains("item")&&(this.onSelect(t[this.selectedIndex].textContent),this.dropdown.remove(),this.removeEventListeners());const s=i.querySelector(".easy-nested-dropdown");s&&(this.focusedDropdown=s,this.selectedIndex=0,this.updateSelection())}else 27===e.keyCode&&(this.dropdown.remove(),this.removeEventListeners())}onWheel(e){const t=parseInt(this.dropdown.style.top);localStorage.getItem("Comfy.Settings.Comfy.InvertMenuScrolling")?this.dropdown.style.top=t+(e.deltaY<0?10:-10)+"px":this.dropdown.style.top=t+(e.deltaY<0?-10:10)+"px"}onClick(e){this.dropdown.contains(e.target)||e.target===this.inputEl||(this.dropdown.remove(),this.removeEventListeners())}updateSelection(){Array.from(this.focusedDropdown.children).forEach(((e,t)=>{t===this.selectedIndex?e.classList.add("selected"):e.classList.remove("selected")}))}}function generateNumList(e){const t=e.min||0,i=e.max||0,s=e.step||1;if(0===s)return[];const o=[];let a=t;for(;a<=i;){if(Number.isInteger(s))o.push(Math.round(a)+"; ");else{let e=a.toFixed(3);-0==e&&(e="0.000"),/\.\d{3}$/.test(e)||(e+="0"),o.push(e+"; ")}a+=s}return i>=0&&t>=0?o:o.reverse()}let plotDict={},currentOptionsDict={};function getCurrentOptionLists(e,t){String(e.id);const i=t.name,s=t.value.replace(/^(loader|preSampling):\s/,"");currentOptionsDict[i]?currentOptionsDict[i]!=plotDict[s]&&(currentOptionsDict[i]=plotDict[s]):currentOptionsDict={...currentOptionsDict,[i]:plotDict[s]}}function addGetSetters(e){if(e.widgets)for(const t of e.widgets)if("x_axis"===t.name||"y_axis"===t.name){let i=t.value;Object.defineProperty(t,"value",{get:()=>i,set(s){s!==i&&(i=s,getCurrentOptionLists(e,t))}})}}function dropdownCreator(e){if(e.widgets){const t=e.widgets.filter((e=>"customtext"===e.type&&!1!==e.dynamicPrompts||e.dynamicPrompts));for(const e of t){let t=function(e,t,s,o){return e&&(t[s]=e),t.map((e=>i(e,o))).filter((e=>""!==e)).join("")},i=function(e,t){if(e=s(e),o(e,t))return e+"; ";let i=a(e,t);return 1===i.length||2===i.length?i[0]:o(n(e),t)?n(e)+"; ":""},s=function(e){return e.replace(/(\n|;| )/g,"")},o=function(e,t){return t.includes(e+"; ")},a=function(e,t){return t.filter((t=>t.toLowerCase().includes(e.toLowerCase())))},n=function(e){return Number(e)?Number(e).toFixed(3):["0","0.","0.0","0.00","00"].includes(e)?"0.000":e};const l=function(){const i=e.name[0]+"_axis";let s=(null==currentOptionsDict?void 0:currentOptionsDict[i])||[];if(0===s.length)return;const o=e.inputEl.value,a=e.inputEl.selectionStart;let n=o.split("; ");const l=o.substring(0,a).split("; ").length-1,r=n[l].replace(/\n/g,"").toLowerCase(),d=s.filter((e=>e.toLowerCase().includes(r))).map((e=>e.replace(/; /g,"")));if(d.length>0)createDropdown(e.inputEl,d,(i=>{const o=t(i,n,l,s);e.inputEl.value=o}));else{removeDropdown();const i=t(null,n,l,s);e.inputEl.value=i}};e.inputEl.removeEventListener("input",l),e.inputEl.addEventListener("input",l),e.inputEl.removeEventListener("mouseup",l),e.inputEl.addEventListener("mouseup",l)}}}app$1.registerExtension({name:"Comfy.EasyUse.XYPlot",async beforeRegisterNodeDef(e,t,i){if("easy XYPlot"===t.name){plotDict=t.input.hidden.plot_dict[0];for(const e in plotDict){const t=plotDict[e];if(Array.isArray(t)){let i=[];for(const e of t)i.push(e+"; ");plotDict[e]=i}else plotDict[e]="object"==typeof t?"seed"==e?t+"; ":generateNumList(t):t+"; "}plotDict.None=[],plotDict["---------------------"]=[]}},nodeCreated(e){"easy XYPlot"===e.comfyClass&&(addGetSetters(e),dropdownCreator(e))}});const useDomWidgetStore=defineStore("domWidget",(()=>{const e=ref(new Map);return{widgetStates:e,registerWidget:t=>{e.value.set(t.id,{widget:markRaw(t),visible:!0,readonly:!1,zIndex:0,pos:[0,0],size:[0,0]})},unregisterWidget:t=>{e.value.delete(t)}}})),generateUUID=()=>"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})),isDOMWidget=e=>"element"in e&&!!e.element,isComponentWidget=e=>"component"in e&&!!e.component,_BaseDOMWidgetImpl=class e{constructor(e){this.type=e.type,this.name=e.name,this.options=e.options,this.id=generateUUID(),this.node=e.node,this.y=0}get value(){var e,t;return(null==(t=(e=this.options).getValue)?void 0:t.call(e))??""}set value(e){var t,i,s;null==(i=(t=this.options).setValue)||i.call(t,e),null==(s=this.callback)||s.call(this,this.value)}get margin(){return this.options.margin??e.DEFAULT_MARGIN}isVisible(){return!["hidden"].includes(this.type)&&this.node.isWidgetVisible(this)}draw(e,t,i,s,o,a){var n,l;if(this.options.hideOnZoom&&a&&this.isVisible()){const t=e.fillStyle;e.beginPath(),e.fillStyle=LiteGraph.WIDGET_BGCOLOR,e.rect(this.margin,s+this.margin,i-2*this.margin,(this.computedHeight??o)-2*this.margin),e.fill(),e.fillStyle=t}null==(l=(n=this.options).onDraw)||l.call(n,this)}onRemove(){useDomWidgetStore().unregisterWidget(this.id)}};__publicField(_BaseDOMWidgetImpl,"DEFAULT_MARGIN",10);let BaseDOMWidgetImpl=_BaseDOMWidgetImpl;class ComponentWidgetImpl extends BaseDOMWidgetImpl{constructor(e){super({...e,type:"custom"}),this.component=e.component,this.inputSpec=e.inputSpec}computeLayoutSize(){var e,t,i,s;return{minHeight:(null==(t=(e=this.options).getMinHeight)?void 0:t.call(e))??45,maxHeight:(null==(s=(i=this.options).getMaxHeight)?void 0:s.call(i))??45,minWidth:120}}serializeValue(){return toRaw(this.value)}}const _hoisted_1$8={class:"w-full flex justify-between items-center"},_hoisted_2$4={class:"flex justify-start items-center flex-1 gap-2"},_hoisted_3$3={class:"flex justify-end items-center tool ml-2 position-relative"},_sfc_main$8={__name:"promptAwait",props:{widget:{required:!0},widgetModifiers:{}},emits:["update:widget"],setup(e){const t=useModel(e,"widget"),i=ref(!1),s=ref(!1);let o=null;const a=()=>{if(s.value)return;const e=window.SpeechRecognition||window.webkitSpeechRecognition;e&&(s.value=!0,o||(o=new e,o.interimResults=!1),o.start(),o.addEventListener("result",(e=>{var i;const s=e.results[0][0].transcript;let o=null==(i=t.value)?void 0:i.node,a=getWidgetByName(o,"prompt");a&&(a.value+=s)})),o.addEventListener("end",(()=>{s.value=!1,o=null})),o.addEventListener("error",(e=>{})))},n=()=>{s.value&&o&&o.stop()};onMounted((e=>{api.addEventListener("easyuse_prompt_await",(e=>{var s,o,a,n,l,d;const c=e.detail.id,u=-1!==(null==(s=t.value)?void 0:s.node.id).toString().indexOf(":")?(null==(o=t.value)?void 0:o.node.id).toString().split(":")[0]:null==(a=t.value)?void 0:a.node.id;parseInt(c)===parseInt(u)&&(i.value=!0,r("last_seed",(null==(n=t.value.value)?void 0:n.seed)||0),(null==(l=t.value.value)?void 0:l.unlock)?r("seed",Math.floor(Math.random()*MAX_SEED_NUM)):r("seed",(null==(d=t.value.value)?void 0:d.last_seed)||0))}));const s=api.interrupt;api.interrupt=function(){!i.value&&app$1.runningNodeId||(l(JSON.stringify({result:-1,prompt:"",select:"now"}),!0),i.value=!1),s.apply(this,arguments)}}));const l=(e,s)=>{var o,a,n,l,d,c,u,p,A;if(!i.value&&!s)return;const g=new FormData,h=null==(o=t.value)?void 0:o.node,m=-1!==(null==(a=t.value)?void 0:a.node.id).toString().indexOf(":")?(null==(n=t.value)?void 0:n.node.id).toString().split(":")[0]:null==(l=t.value)?void 0:l.node.id,f=(null==(d=getWidgetByName(h,"prompt"))?void 0:d.value)||"";let y=null==(c=t.value.value)?void 0:c.select,v=(null==(u=t.value.value)?void 0:u.last_seed)||0,_=(null==(p=t.value.value)?void 0:p.seed)||0,b=(null==(A=t.value.value)?void 0:A.unlock)||!1;g.append("message",JSON.stringify({result:e,prompt:f,select:y,last_seed:v,seed:_,unlock:b})),g.append("id",m),i.value=!1,api.fetchApi("/easyuse/message_callback",{method:"POST",body:g}).then((e=>{r("select","now")}))},r=(e,i)=>{t.value.value||(t.value.value={}),t.value.value[e]=i};return(e,o)=>(openBlock(),createElementBlock("div",_hoisted_1$8,[createBaseVNode("div",_hoisted_2$4,[createVNode(unref(script),{disabled:!Boolean(i.value),label:unref($t)("Continue"),size:"small",style:{height:"20px","font-size":"12px","white-space":"nowrap",padding:"0 8px"},onClick:o[0]||(o[0]=e=>l(1))},null,8,["disabled","label"]),createVNode(unref(script),{disabled:!Boolean(i.value),label:unref($t)("Stop"),severity:"danger",size:"small",style:{height:"20px","font-size":"12px","white-space":"nowrap",padding:"0 8px"},onClick:o[1]||(o[1]=e=>l(-1))},null,8,["disabled","label"]),createVNode(unref(script$1),{class:"easyuse-prompt-await-select",modelValue:t.value.value.select,"onUpdate:modelValue":o[2]||(o[2]=e=>t.value.value.select=e),options:[{name:unref($t)("now"),value:"now"},{name:unref($t)("prev"),value:"prev"}],optionLabel:"name",optionValue:"value",size:"small",style:{flex:"1",height:"24px","line-height":"10px","min-width":"70px","max-width":"100px"}},null,8,["modelValue","options"])]),createBaseVNode("div",_hoisted_3$3,[withDirectives(createVNode(unref(script),{style:{"--p-button-sm-font-size":"11px"},size:"small",icon:t.value.value.unlock?"pi pi-unlock":"pi pi-lock",severity:t.value.value.unlock?"contrast":"warn",variant:"text",onClick:o[3]||(o[3]=e=>t.value.value.unlock=!t.value.value.unlock),rounded:""},null,8,["icon","severity"]),[[unref(Tooltip),{value:t.value.value.unlock?"随机种子":"锁定种子值",class:"jm-tooltip"},"top"]]),s.value?withDirectives((openBlock(),createBlock(unref(script),{key:0,size:"small",icon:"pi pi-pause-circle",severity:"info",variant:"outlined",onClick:n,rounded:""},null,512)),[[unref(Tooltip),{value:unref($t)("Stop Recording"),class:"jm-tooltip"},"top"]]):withDirectives((openBlock(),createBlock(unref(script),{key:1,size:"small",icon:"pi pi-microphone",severity:"contrast",variant:"text",onClick:a,rounded:""},null,512)),[[unref(Tooltip),{value:unref($t)("Voice input"),class:"jm-tooltip"},"top"]])])]))}},_hoisted_1$7={class:"easyuse-multiselect"},_sfc_main$7={__name:"multiSelectWidget",props:mergeModels(["widget"],{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){var t,i,s,o;const a=Object.keys(HUMAN_SEGMENTATION).reduce(((e,t)=>(Array.isArray(HUMAN_SEGMENTATION[t])?e[t]=HUMAN_SEGMENTATION[t].map(((e,t)=>({label:e,value:t}))):"object"==typeof HUMAN_SEGMENTATION[t]?e[t]=Object.entries(HUMAN_SEGMENTATION[t]).map((([e,t])=>({label:e,value:t}))):e[t]=[],e)),{}),n=useModel(e,"modelValue"),l=e.widget.inputSpec,r=(null==(t=l.multi_select)?void 0:t.max_selected_labels)??3,d=l.optionLabel??"label",c=l.optionValue??"value",u=(null==(i=l.multi_select)?void 0:i.placeholder)?$t(null==(s=l.multi_select)?void 0:s.placeholder):$t("select items"),p=(null==(o=l.multi_select)?void 0:o.chip)?"chip":"comma",A=ref(l.options??[]),g=e=>{e&&a[e]?A.value=a[e].map(((e,t)=>({label:$t(e.label),value:e.value}))):A.value=[]};return onMounted((t=>{if("easy humanSegmentation"==e.widget.node.type){const t=getWidgetByName(e.widget.node,"method");g(t.value),t.callback=e=>{n.value=[],g(e)}}})),(e,t)=>(openBlock(),createElementBlock("div",_hoisted_1$7,[createVNode(unref(script$2),{modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=e=>n.value=e),options:A.value,optionLabel:unref(d),optionValue:unref(c),appendTo:"self",filter:"",placeholder:unref(u),"max-selected-labels":unref(r),display:unref(p),class:"w-full easyuse-multiselect-container"},null,8,["modelValue","options","optionLabel","optionValue","placeholder","max-selected-labels","display"])]))}},_export_sfc=(e,t)=>{const i=e.__vccOpts||e;for(const[s,o]of t)i[s]=o;return i},_hoisted_1$6={class:"relative rounded-t-lg overflow-hidden select-none"},_hoisted_2$3={key:1,class:"w-full h-full flex items-center justify-center"},_sfc_main$6={__name:"baseThumbnail",props:{hoverZoom:{type:"number",default:4},isHovered:{type:Boolean,default:!1}},setup(e){const t=ref(!1),i=ref(null);return onMounted((()=>{var e;Array.from((null==(e=i.value)?void 0:e.getElementsByTagName("img"))??[]).forEach((e=>{useEventListener(e,"error",(()=>{t.value=!0}))}))})),(s,o)=>(openBlock(),createElementBlock("div",_hoisted_1$6,[t.value?(openBlock(),createElementBlock("div",_hoisted_2$3,o[0]||(o[0]=[createBaseVNode("i",{class:"pi pi-file text-4xl"},null,-1)]))):(openBlock(),createElementBlock("div",{key:0,ref_key:"contentRef",ref:i,class:"w-full h-full transform-gpu transition-transform duration-1000 ease-out",style:normalizeStyle(e.isHovered?{transform:`scale(${1+e.hoverZoom/100})`}:void 0)},[renderSlot(s.$slots,"default",{},void 0,!0)],4))]))}},BaseThumbnail=_export_sfc(_sfc_main$6,[["__scopeId","data-v-604a4248"]]),_hoisted_1$5=["src","alt"],_sfc_main$5={__name:"lazyImage",props:{src:{type:String,required:!0},alt:{type:String,default:""},imageClass:{type:[String,Array,Object],default:""},imageStyle:{type:[String,Object],default:()=>({})},placeholderClass:{type:[String,Array,Object],default:""},errorClass:{type:[String,Array,Object],default:""},rootMargin:{type:String,default:"50px"},threshold:{type:Number,default:.1},immediate:{type:Boolean,default:!1}},emits:["load","error","visible"],setup(e,{emit:t}){const i=e,s=t,o=ref(null),a=ref(i.immediate),n=ref(!1),l=ref(!1),r=computed((()=>i.src));watch((()=>i.src),(()=>{n.value=!1,l.value=!1,i.immediate||(a.value=!1)}),{immediate:!0});const{stop:d}=useIntersectionObserver(o,(([e])=>{(null==e?void 0:e.isIntersecting)&&!a.value&&(a.value=!0,s("visible"),d())}),{rootMargin:i.rootMargin,threshold:i.threshold}),c=e=>{n.value=!0,l.value=!1,s("load",e)},u=e=>{l.value=!0,n.value=!1,s("error",e)};return(t,i)=>(openBlock(),createElementBlock("div",{ref_key:"containerRef",ref:o,class:"lazy-image-container"},[l.value?(openBlock(),createElementBlock("div",{key:0,class:normalizeClass(["lazy-image-error","w-full h-full flex items-center justify-center bg-surface-100 dark:bg-surface-800",e.errorClass])},[renderSlot(t.$slots,"error",{},(()=>[i[0]||(i[0]=createBaseVNode("i",{class:"pi pi-exclamation-triangle text-2xl text-surface-400"},null,-1))]),!0)],2)):a.value&&r.value?(openBlock(),createElementBlock("img",{key:1,src:r.value,alt:e.alt,class:normalizeClass(e.imageClass),style:normalizeStyle(e.imageStyle),draggable:"false",onLoad:c,onError:u},null,46,_hoisted_1$5)):a.value?createCommentVNode("",!0):(openBlock(),createElementBlock("div",{key:2,class:normalizeClass(["lazy-image-placeholder","w-full h-full flex items-center justify-center bg-surface-100 dark:bg-surface-800",e.placeholderClass])},[renderSlot(t.$slots,"placeholder",{},(()=>[i[1]||(i[1]=createBaseVNode("i",{class:"pi pi-image text-2xl text-surface-400"},null,-1))]),!0)],2))],512))}},LazyImage=_export_sfc(_sfc_main$5,[["__scopeId","data-v-4bfc03bf"]]),_hoisted_1$4={class:"overflow-hidden w-full h-full flex items-center justify-center"},_sfc_main$4={__name:"defaultThumbnail",props:{src:{type:String,required:!0},alt:{type:String,required:!0},hoverZoom:{type:Number,required:!0},isHovered:{type:Boolean,default:!1},isVideo:{type:Boolean,default:!1},rootMargin:{type:String,default:"50px"},threshold:{type:Number,default:.1},immediate:{type:Boolean,default:!1}},emits:["load","error","visible"],setup(e,{emit:t}){const i=e,{src:s,isVideo:o}=i;return o??(null==s||s.toLowerCase().endsWith(".webp")),(t,i)=>(openBlock(),createBlock(BaseThumbnail,{"hover-zoom":e.hoverZoom,"is-hovered":e.isHovered},{default:withCtx((()=>[createBaseVNode("div",_hoisted_1$4,[createVNode(LazyImage,{src:unref(s),"image-class":["transform-gpu transition-transform duration-300 ease-out","w-full h-full object-cover"],"image-style":e.isHovered?{transform:`scale(${1+e.hoverZoom/100})`}:void 0,"root-margin":e.rootMargin,threshold:e.threshold,immediate:e.immediate,onLoad:i[0]||(i[0]=e=>t.$emit("load",e)),onError:i[1]||(i[1]=e=>t.$emit("error",e)),onVisible:i[2]||(i[2]=e=>t.$emit("visible",e))},{placeholder:withCtx((()=>[renderSlot(t.$slots,"placeholder",{},(()=>[i[3]||(i[3]=createBaseVNode("i",{class:"pi pi-image text-2xl text-surface-400"},null,-1))]))])),error:withCtx((()=>[renderSlot(t.$slots,"error",{},(()=>[i[4]||(i[4]=createBaseVNode("i",{class:"pi pi-exclamation-triangle text-2xl text-surface-400"},null,-1))]))])),_:3},8,["src","image-style","root-margin","threshold","immediate"])])])),_:3},8,["hover-zoom","is-hovered"]))}},_hoisted_1$3={class:"overflow-hidden w-full h-full flex items-center justify-center relative"},SLIDER_START_POSITION=50,_sfc_main$3={__name:"compareSliderThumbnail",props:{baseImageSrc:{type:String,required:!0},overlayImageSrc:{type:String,required:!0},alt:{type:String,required:!0},isHovered:{type:Boolean,default:!1},isVideo:{type:Boolean,default:!1},rootMargin:{type:String,default:"50px"},threshold:{type:Number,default:.1},immediate:{type:Boolean,default:!1}},emits:["load","error","visible"],setup(e,{emit:t}){var i,s;const o=e;o.isVideo||(null==(i=o.baseImageSrc)?void 0:i.toLowerCase().endsWith(".webp"))||null==(s=o.overlayImageSrc)||s.toLowerCase().endsWith(".webp");const a=ref(SLIDER_START_POSITION),n=ref(null),{elementX:l,elementWidth:r,isOutside:d}=useMouseInElement(n);return watch([()=>o.isHovered,l,r,d],(([e,t,i,s])=>{e&&(s||(a.value=t/i*100))})),(t,i)=>(openBlock(),createBlock(BaseThumbnail,{"is-hovered":e.isHovered},{default:withCtx((()=>[createBaseVNode("div",_hoisted_1$3,[createVNode(LazyImage,{src:e.baseImageSrc,"image-class":["transform-gpu transition-transform duration-300 ease-out","w-full h-full object-cover block"],"root-margin":e.rootMargin,threshold:e.threshold,immediate:e.immediate,onLoad:i[0]||(i[0]=e=>t.$emit("load",e)),onError:i[1]||(i[1]=e=>t.$emit("error",e)),onVisible:i[2]||(i[2]=e=>t.$emit("visible",e))},{placeholder:withCtx((()=>[renderSlot(t.$slots,"placeholder",{},(()=>[i[3]||(i[3]=createBaseVNode("i",{class:"pi pi-image text-2xl text-surface-400"},null,-1))]))])),error:withCtx((()=>[renderSlot(t.$slots,"error",{},(()=>[i[4]||(i[4]=createBaseVNode("i",{class:"pi pi-exclamation-triangle text-2xl text-surface-400"},null,-1))]))])),_:3},8,["src","root-margin","threshold","immediate"]),createBaseVNode("div",{ref_key:"containerRef",ref:n,class:"absolute inset-0"},[createVNode(LazyImage,{src:e.overlayImageSrc,"image-class":["transform-gpu transition-transform duration-300 ease-out","w-full h-full object-cover block"],"image-style":{clipPath:`inset(0 ${100-a.value}% 0 0)`},"root-margin":e.rootMargin,threshold:e.threshold,immediate:e.immediate},{placeholder:withCtx((()=>[renderSlot(t.$slots,"placeholder",{},(()=>[i[5]||(i[5]=createBaseVNode("i",{class:"pi pi-image text-2xl text-surface-400"},null,-1))]))])),error:withCtx((()=>[renderSlot(t.$slots,"error",{},(()=>[i[6]||(i[6]=createBaseVNode("i",{class:"pi pi-exclamation-triangle text-2xl text-surface-400"},null,-1))]))])),_:3},8,["src","image-style","root-margin","threshold","immediate"]),createBaseVNode("div",{class:"absolute inset-y-0 bg-white/30 backdrop-blur-sm z-10 pointer-events-none",style:normalizeStyle({left:`${a.value}%`,width:"1px"})},null,4)],512)])])),_:3},8,["is-hovered"]))}},_hoisted_1$2={class:"selector-card-wrapper"},_hoisted_2$2={class:"card-image-container"},_hoisted_3$2={key:2,class:"selection-badge"},_hoisted_4$2={class:"card-content"},_hoisted_5$1={class:"card-title"},_sfc_main$2={__name:"selectorCard",props:{item:{type:Object,required:!0},uniqueKey:{type:String,default:"id"},selectable:{type:Boolean,default:!1},isSelected:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1},showDescription:{type:Boolean,default:!0},showMeta:{type:Boolean,default:!1},showActions:{type:Boolean,default:!1},actions:{type:Array,default:()=>[]},itemFields:{type:Object,default:()=>({id:"id",title:"title",description:"description",image:"image",meta:"meta"})},locale:{type:String,default:"en"}},emits:["select","action","item-hover","item-leave"],setup(e,{emit:t}){const i=e,s=t,o=ref(null),a=useElementHover(o),n=()=>{i.selectable&&s("select",i.item)},l=()=>{s("item-hover",i.item)},r=()=>{s("item-leave",i.item)};return(t,i)=>(openBlock(),createElementBlock("div",_hoisted_1$2,[createBaseVNode("div",{ref_key:"cardRef",ref:o,class:normalizeClass(["card-item",{selected:e.isSelected,clickable:e.selectable}]),onClick:n,onMouseenter:l,onMouseleave:r},[createBaseVNode("div",_hoisted_2$2,["compareSlider"===e.item.thumbnailVariant?(openBlock(),createBlock(_sfc_main$3,{key:0,"base-image-src":e.item.thumbnail[0],"overlay-image-src":e.item.thumbnail[1],alt:t.title,"is-hovered":unref(a),"is-video":"video"===e.item.mediaType||"webp"===e.item.mediaSubtype,class:"card-image"},null,8,["base-image-src","overlay-image-src","alt","is-hovered","is-video"])):(openBlock(),createBlock(_sfc_main$4,{key:1,src:e.item.thumbnail||"",alt:"zh"==e.locale?e.item.name_cn:e.item.name,"hover-zoom":4,"is-hovered":!1,class:"card-image"},null,8,["src","alt"])),e.selectable&&e.isSelected?(openBlock(),createElementBlock("div",_hoisted_3$2,i[0]||(i[0]=[createBaseVNode("i",{class:"pi pi-check text-white"},null,-1)]))):createCommentVNode("",!0)]),createBaseVNode("div",_hoisted_4$2,[createBaseVNode("div",_hoisted_5$1,toDisplayString("zh"==e.locale?e.item.name_cn:e.item.name),1)])],34)]))}},SelectorCard=_export_sfc(_sfc_main$2,[["__scopeId","data-v-88af28b0"]]),_hoisted_1$1={class:"list-item"},_hoisted_2$1=["name","checked"],_hoisted_3$1={class:"list-item-content"},_hoisted_4$1={class:"list-title"},_sfc_main$1={__name:"selectorList",props:{item:{type:Object,required:!0},uniqueKey:{type:String,default:"id"},selectable:{type:Boolean,default:!1},isSelected:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1},showDescription:{type:Boolean,default:!0},showActions:{type:Boolean,default:!1},actions:{type:Array,default:()=>[]},itemFields:{type:Object,default:()=>({id:"id",title:"title",description:"description"})},locale:{type:String,default:"en"}},emits:["select","action","item-hover","item-leave"],setup(e,{emit:t}){const i=e,s=t,o=()=>{i.selectable&&s("select",i.item)},a=()=>{s("item-hover",i.item)},n=()=>{s("item-leave",i.item)};return(t,i)=>(openBlock(),createElementBlock("div",_hoisted_1$1,[createBaseVNode("span",{class:normalizeClass(["list-item__tag",{selected:e.isSelected}]),onClick:o,onMouseenter:a,onMouseleave:n},[e.selectable?(openBlock(),createElementBlock("input",{key:0,type:"checkbox",name:e.item.name,checked:e.isSelected,onClick:i[0]||(i[0]=withModifiers((()=>{}),["stop"]))},null,8,_hoisted_2$1)):createCommentVNode("",!0),createBaseVNode("span",_hoisted_3$1,[createBaseVNode("div",_hoisted_4$1,toDisplayString("zh"==e.locale?e.item.name_cn:e.item.name),1)])],34)]))}},SelectorList=_export_sfc(_sfc_main$1,[["__scopeId","data-v-c93b1734"]]),useGraphStore=defineStore("graphStore",{state:e=>({selectors:[],selectors_styles:{},seg_selectors:[],slider_controls:[]}),actions:{setSelectors(e){this.selectors=cloneDeep(e)},setStyles(e,t){this.selectors_styles[e]||(this.selectors_styles[e]=t)},setSegSelectors(e){this.seg_selectors=cloneDeep(e)},setSliderControls(e){this.slider_controls=cloneDeep(e)}}}),_hoisted_1={class:"easyuse-styles-selector"},_hoisted_2={class:"easyuse-styles-selector-header flex justify-between gap-2"},_hoisted_3={class:"flex align-center gap-1"},_hoisted_4={class:"flex-1"},_hoisted_5={key:0,class:"grid-container gap-2"},_hoisted_6={key:1,class:"list-container"},_hoisted_7={key:0,class:"easyuse-styles-selector-previewer"},_hoisted_8={class:"easyuse-styles-selector-previewer__text"},_hoisted_9=["src"],_hoisted_10={class:"title"},_hoisted_11={class:"easyuse-styles-selector-previewer__prompt"},_hoisted_12={key:0},_hoisted_13={class:"comfyui-easyuse-success"},_hoisted_14={key:1},_hoisted_15={class:"comfyui-easyuse-error"},_sfc_main={__name:"stylesSelector",props:mergeModels(["widget"],{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=useGraphStore(),{selectors_styles:i}=storeToRefs(t),s=ref(""),o=useModel(e,"modelValue");e.widget.inputSpec;const a=computed((e=>getSetting("Comfy.Locale")||"en")),n=ref(getSetting("EasyUse.StylesSelector.DisplayType")||"Gird"),l=ref([]),r=ref("");watch((e=>n.value),(e=>{setSetting("EasyUse.StylesSelector.DisplayType",e)}));const d=computed((()=>{if(!r.value.trim())return l.value;const e=o.value||[],t=r.value.toLowerCase(),i=[],s=[];return l.value.forEach((o=>{if(e.includes(o.name))i.push(o);else{const e="zh"===a.value&&o.name_cn?o.name_cn:o.name,i=o.prompt||"",n=o.negative_prompt||"";(e.toLowerCase().includes(t)||i.toLowerCase().includes(t)||n.toLowerCase().includes(t))&&s.push(o)}})),[...i,...s]})),c=reactive({name:"",positive:"",negative:"",src:""}),u=async e=>{if(i.value[e])return!0;const s=await api.fetchApi(`/easyuse/prompt/styles?name=${e}`);if(200===s.status){let i=(await s.json()).map(((e,t)=>(e.index=t,e)));return await t.setStyles(e,i),!0}return toast.error($t("Get styles list Failed")),!1},p=e=>{var t,i;c.name="zh"==a.value&&e.name_cn?e.name_cn:e.name,c.src=e.thumbnailVariant&&"default"!=e.thumbnailVariant?(null==(t=e.thumbnail)?void 0:t[1])||(null==(i=e.thumbnail)?void 0:i[0]):e.thumbnail,c.positive=e.prompt,c.negative=e.negative_prompt},A=()=>{c.name="",c.src="",c.positive="",c.negative=""},g=e=>{const t=o.value||[],a=cloneDeep(i.value[s.value]);l.value=[...a.sort(((e,t)=>e.index-t.index)).sort(((e,i)=>t.includes(i.name)-t.includes(e.name)))]},h=e=>(o.value||[]).includes(e.name),m=e=>{let t=[...o.value||[]];const i=e.name,s=t.findIndex((e=>e===i));s>-1?t.splice(s,1):t.push(i),o.value=t},f=()=>{o.value=[]};return onMounted((t=>{const i=getWidgetByName(e.widget.node,"styles");let o=i.value;s.value=o,u(o).then((e=>e&&g())),i.callback=e=>{s.value=e,f(),u(e).then((e=>e&&g()))}})),(t,i)=>(openBlock(),createElementBlock("div",_hoisted_1,[createBaseVNode("div",_hoisted_2,[createBaseVNode("div",_hoisted_3,[withDirectives(createVNode(unref(script),{icon:"pi pi-trash",severity:"secondary",outlined:"",size:"small",onClick:f},null,512),[[unref(Tooltip),unref($t)("Reset")]])]),createBaseVNode("div",_hoisted_4,[createVNode(unref(script$5),null,{default:withCtx((()=>[createVNode(unref(script$3),{class:"pi pi-search"}),createVNode(unref(script$4),{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=e=>r.value=e),placeholder:unref($t)("Search styles..."),class:"w-full"},null,8,["modelValue","placeholder"])])),_:1})]),createVNode(unref(script$6),{modelValue:n.value,"onUpdate:modelValue":i[1]||(i[1]=e=>n.value=e),options:["Gird","List"],"allow-empty":!1},{option:withCtx((({option:e})=>[createBaseVNode("i",{class:normalizeClass(["List"===e?"pi pi-bars":"pi pi-table"])},null,2)])),_:1},8,["modelValue"])]),createBaseVNode("div",{class:"easyuse-styles-selector-content",onMouseleave:i[2]||(i[2]=t=>g(e.widget.node.name))},["Gird"===n.value?(openBlock(),createElementBlock("div",_hoisted_5,[(openBlock(!0),createElementBlock(Fragment,null,renderList(d.value,((e,t)=>(openBlock(),createBlock(SelectorCard,{key:`${e.name}-${t}`,item:e,"unique-key":"name",locale:a.value,selectable:!0,"is-selected":h(e),"show-description":!0,"preview-enabled":!0,onSelect:m,onItemHover:p,onItemLeave:A},null,8,["item","locale","is-selected"])))),128))])):(openBlock(),createElementBlock("div",_hoisted_6,[(openBlock(!0),createElementBlock(Fragment,null,renderList(d.value,((e,t)=>(openBlock(),createBlock(SelectorList,{key:`${e.name}-${t}`,item:e,"unique-key":"name",locale:a.value,selectable:!0,"is-selected":h(e),"show-description":!0,onSelect:m,onItemHover:p,onItemLeave:A},null,8,["item","locale","is-selected"])))),128))]))],32),(null==c?void 0:c.positive)||(null==c?void 0:c.negative)?(openBlock(),createElementBlock("div",_hoisted_7,[createBaseVNode("div",_hoisted_8,[createBaseVNode("img",{src:c.src,alt:"",style:{width:"100%",height:"auto","object-fit":"contain","border-radius":"6px"}},null,8,_hoisted_9),createBaseVNode("span",_hoisted_10,toDisplayString(c.name),1),createBaseVNode("div",_hoisted_11,[c.positive?(openBlock(),createElementBlock("h6",_hoisted_12,[createBaseVNode("span",_hoisted_13,toDisplayString(unref($t)("Positive"))+":",1),createBaseVNode("span",null,toDisplayString(c.positive),1)])):createCommentVNode("",!0),c.negative?(openBlock(),createElementBlock("h6",_hoisted_14,[createBaseVNode("span",_hoisted_15,toDisplayString(unref($t)("Negative"))+":",1),createBaseVNode("span",null,toDisplayString(c.negative),1)])):createCommentVNode("",!0)])])])):createCommentVNode("",!0)]))}};app$1.registerExtension({name:"Comfy.EasyUse.CustomWidget",getCustomWidgets:e=>({EASY_PROMPT_AWAIT_BAR:(e,t,i,s)=>{const o=ref({select:"now",unlock:!0,last_seed:0,seed:0}),a=new ComponentWidgetImpl({node:e,name:t,component:_sfc_main$8,inputSpec:{type:"custom",name:t},options:{getValue:()=>o.value,setValue:e=>{e&&(o.value=e)}}});return e.addCustomWidget(a),e.onRemoved=useChainCallback(e.onRemoved,(()=>{var e;null==(e=a.onRemove)||e.call(a)})),e.onResize=useChainCallback(e.onResize,(()=>{var t,i;null==(t=a.options.beforeResize)||t.call(a,e),null==(i=a.options.afterResize)||i.call(a,e)})),useDomWidgetStore().registerWidget(a),a},EASY_COMBO:(e,t,i,s)=>{const o=ref([]),a={type:"custom",name:t,options:null==i?void 0:i[1].options,multi_select:null==i?void 0:i[1].multi_select},n=!!["obsidian","obsidian_dark","milk_white"].includes(getSetting("Comfy.ColorPalette"))?22:26,l=new ComponentWidgetImpl({node:e,name:t,component:_sfc_main$7,inputSpec:a,options:{margin:0,getMinHeight:()=>n,getMaxHeight:()=>n,getValue:()=>o.value,setValue:e=>{e&&(Array.isArray(e)?o.value=e:o.value=e.split(",").map((e=>parseInt(e))))}}});return e.addCustomWidget(l),e.onRemoved=useChainCallback(e.onRemoved,(()=>{var e;null==(e=l.onRemove)||e.call(l)})),e.onResize=useChainCallback(e.onResize,(()=>{var t,i;null==(t=l.options.beforeResize)||t.call(l,e),null==(i=l.options.afterResize)||i.call(l,e)})),useDomWidgetStore().registerWidget(l),l},EASY_PROMPT_STYLES:(e,t,i,s)=>{const o=ref([]),a=new ComponentWidgetImpl({node:e,name:t,component:_sfc_main,inputSpec:{type:"custom",name:t},options:{margin:10,getMinHeight:()=>180,getMaxHeight:()=>e.size[1]-75,getValue:()=>o.value,setValue:e=>{e&&(Array.isArray(e)?o.value=e:o.value=e.split(","))}}});return e.addCustomWidget(a),e.onRemoved=useChainCallback(e.onRemoved,(()=>{var e;null==(e=a.onRemove)||e.call(a)})),e.onResize=useChainCallback(e.onResize,(()=>{var t,i;null==(t=a.options.beforeResize)||t.call(a,e),null==(i=a.options.afterResize)||i.call(a,e)})),useDomWidgetStore().registerWidget(a),a}})});export{$t as $,NODE_MODE as N,_export_sfc as _,app$1 as a,useNodesStore as b,getSetting as c,cleanVRAM as d,isComponentWidget as e,useDomWidgetStore as f,getWidgetByName as g,useChainCallback as h,isDOMWidget as i,jumpToNodeId as j,NODES_MAP_ID as k,api as l,getSettingsLookup as m,sleep as s,toast as t,useGraphStore as u};