JasonSmithSO's picture
Upload 578 files
8866644 verified
var e,t,n,s,o,i,a,l,r,d,u,c,p,h,m,g=Object.defineProperty,f=(e,t,n)=>((e,t,n)=>t in e?g(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n)(e,"symbol"!=typeof t?t+"":t,n);import{d as y,h as _}from"./vendor-DT1J-jWa.js";import{c as v}from"./lodash-CZi7izHi.js";let w=(null==(t=null==(e=window.comfyAPI)?void 0:e.app)?void 0:t.app)||null,b=(null==(s=null==(n=window.comfyAPI)?void 0:n.api)?void 0:s.api)||null,L=(null==(i=null==(o=window.comfyAPI)?void 0:o.ui)?void 0:i.$el)||null,E=(null==(l=null==(a=window.comfyAPI)?void 0:a.dialog)?void 0:l.ComfyDialog)||null,S=(null==(d=null==(r=window.comfyAPI)?void 0:r.widgets)?void 0:d.ComfyWidgets)||null,C=(null==(c=null==(u=window.comfyAPI)?void 0:u.utils)?void 0:c.applyTextReplacements)||null,A=(null==(h=null==(p=window.comfyAPI)?void 0:p.groupNode)?void 0:h.GroupNodeConfig)||null;const k=(e,t=void 0)=>{var n,s;return e?null==(s=null==(n=null==w?void 0:w.ui)?void 0:n.settings)?void 0:s.getSettingValue(e,t):null};function I(e,t=null,n=void 0){try{let s=e?k(e,n):null;return void 0===s&&t&&(s=localStorage[e]),s}catch(s){return null}}function x(e,t=e=>{}){var n;const s=null==(n=w.ui.settings.settingsLookup)?void 0:n[e];s&&(s.onChange=e=>t(e))}async function N(e,t,n=null){var s,o;try{(null==(o=null==(s=null==w?void 0:w.ui)?void 0:s.settings)?void 0:o.setSettingValue)?w.ui.settings.setSettingValue(e,t):await b.storeSetting(e,t),n&&(localStorage[n]="object"==typeof t?JSON.stringify(t):t)}catch(i){}}function T(e){w.ui.settings.addSetting(e)}function O(e,t){if(e="number"==typeof e?e:e instanceof Date?e.getTime():parseInt(e),isNaN(e))return null;let n=new Date(e);(e=n.toString().split(/[\s\:]/g).slice(0,-2))[1]=["01","02","03","04","05","06","07","08","09","10","11","12"][n.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]]))}const D="comfyui-easyuse-",G="dark-theme",R="#236692",M={PIPE_LINE:"#7737AA",PIPE_LINE_SDXL:"#7737AA",INT:"#29699C",X_Y:"#38291f",XYPLOT:"#74DA5D",LORA_STACK:"#94dccd",CONTROL_NET_STACK:"#94dccd",FLOW_CONTROL:"#373780"},P=0x4000000000000,F=["loaders","latent","image","mask","sampling","_for_testing","advanced","utils","api"],U={ALWAYS:0,NEVER:2,BYPASS:4},B="easyuse_nodes_map",W=LGraphCanvas.node_colors.bgcolor,z={ColorPalette:{version:105,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"},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:"box",NODE_BOX_OUTLINE_COLOR:R,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:W,groupcolor:"#A88"},brown:{color:"#38291f",bgcolor:W,groupcolor:"#b06634"},green:{color:"#346434",bgcolor:W,groupcolor:"#8A8"},blue:{color:"#1f1f48",bgcolor:W,groupcolor:"#88A"},pale_blue:{color:"#006691",bgcolor:W,groupcolor:"#3f789e"},cyan:{color:"#008181",bgcolor:W,groupcolor:"#8AA"},purple:{color:"#422342",bgcolor:W,groupcolor:"#a1309b"},yellow:{color:"#c09430",bgcolor:W,groupcolor:"#b58b2a"},black:{color:"rgba(0,0,0,.8)",bgcolor:W,groupcolor:"#444"}}};let j=JSON.parse(JSON.stringify(z));delete j.NODE_COLORS,j.ColorPalette.id="obsidian_dark",j.ColorPalette.name="Obsidian Dark",j.ColorPalette.colors.litegraph_base.BACKGROUND_IMAGE="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGlmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuMTQ2Mjg5OSwgMjAyMy8wNi8yNS0yMDowMTo1NSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjEgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0xMS0xM1QwMDoxODowMiswMTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMTEtMTVUMDI6MDQ6NTkrMDE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMTEtMTVUMDI6MDQ6NTkrMDE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmIyYzRhNjA5LWJmYTctYTg0MC1iOGFlLTk3MzE2ZjM1ZGIyNyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk0ZmNlZGU4LTE1MTctZmQ0MC04ZGU3LWYzOTgxM2E3ODk5ZiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjIzMWIxMGIwLWI0ZmItMDI0ZS1iMTJlLTMwNTMwM2NkMDdjOCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjMxYjEwYjAtYjRmYi0wMjRlLWIxMmUtMzA1MzAzY2QwN2M4IiBzdEV2dDp3aGVuPSIyMDIzLTExLTEzVDAwOjE4OjAyKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4OWY1NzlmLTJkNjUtZWQ0Zi04OTg0LTA4NGE2MGE1ZTMzNSIgc3RFdnQ6d2hlbj0iMjAyMy0xMS0xNVQwMjowNDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjEgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiMmM0YTYwOS1iZmE3LWE4NDAtYjhhZS05NzMxNmYzNWRiMjciIHN0RXZ0OndoZW49IjIwMjMtMTEtMTVUMDI6MDQ6NTkrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4OTe6GAAAAx0lEQVR42u3WMQoAIQxFwRzJys77X8vSLiRgITif7bYbgrwYc/mKXyBoY4VVBgsWLFiwYFmOlTv+9jfDOjHmr8u6eVkGCxYsWLBgmc5S8ApewXvgYRksWLBgKXidpeBdloL3wMOCBctgwVLwCl7BuyyDBQsWLFiwTGcpeAWv4D3wsAwWLFiwFLzOUvAuS8F74GHBgmWwYCl4Ba/gXZbBggULFixYprMUvIJX8B54WAYLFixYCl5nKXiXpeA98LBgwTJYsGC9tg1o8f4TTtqzNQAAAABJRU5ErkJggg==",j.ColorPalette.colors.litegraph_base.CLEAR_BACKGROUND_COLOR="#09090b";const V=LGraphCanvas.node_colors.bgcolor,Y={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"},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:"box",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:V,groupcolor:"#A88"},brown:{color:"#38291f",bgcolor:V,groupcolor:"#b06634"},green:{color:"#346434",bgcolor:V,groupcolor:"#8A8"},blue:{color:"#1f1f48",bgcolor:V,groupcolor:"#88A"},pale_blue:{color:"#006691",bgcolor:V,groupcolor:"#3f789e"},cyan:{color:"#008181",bgcolor:V,groupcolor:"#8AA"},purple:{color:"#422342",bgcolor:V,groupcolor:"#a1309b"},yellow:{color:"#c09430",bgcolor:V,groupcolor:"#b58b2a"},black:{color:"rgba(0,0,0,.8)",bgcolor:V,groupcolor:"#444"}}},H={"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":"管理节点组","Nodes map sorting mode":"管理节点组排序模式","No Nodes":"未找到节点","No nodes found in the map":"在工作流程中没有找到节点","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 to align selected nodes":"启用 `Shift+上/下/左/右` 键对齐选中的节点","Enable Shift+g to add selected nodes to a group":"启用 `Shift+g` 键将选中的节点添加一个组","Enable Shift+r to unload models and node cache":"启用 `Shift+r` 键卸载模型和节点缓存","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":"模型缩略图太多啦,为您关闭了显示","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","Choose Selected Images":"选择选中的图片","Choose images to continue":"选择图片以继续",Background:"背景",Hat:"帽子",Hair:"头发",Body:"身体",Face:"脸部",Clothes:"衣服",Others:"其他",Glove:"手套",Sunglasses:"太阳镜","Upper-clothes":"上衣",Dress:"连衣裙",Coat:"外套",Socks:"袜子",Pants:"裤子",Jumpsuits:"连体衣",Scarf:"围巾",Skirt:"裙子","Left-arm":"左臂","Right-arm":"右臂","Left-leg":"左腿","Right-leg":"右腿","Left-shoe":"左鞋","Right-shoe":"右鞋",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"},X=I("AGL.Locale"),Z=(e,t=!1)=>"zh-CN"===(t?navigator.language:X)&&H[e]||e,K={addGroup:{id:"EasyUse.Hotkeys.AddGroup",name:Z("Enable Shift+g to add selected nodes to a group"),type:"boolean",defaultValue:!0},cleanVRAMUsed:{id:"EasyUse.Hotkeys.cleanVRAMUsed",name:Z("Enable Shift+r to unload models and node cache"),type:"boolean",defaultValue:!0},alignSelectedNodes:{id:"EasyUse.Hotkeys.AlignSelectedNodes",name:Z("Enable Shift+Up/Down/Left/Right key to align selected nodes"),type:"boolean",defaultValue:!0},nodesTemplate:{id:"EasyUse.Hotkeys.NodesTemplate",name:Z("Enable ALT+1~9 to paste nodes from nodes template"),type:"boolean",defaultValue:!0},jumpNearestNodes:{id:"EasyUse.Hotkeys.JumpNearestNodes",name:Z("Enable Up/Down/Left/Right key to jump nearest nodes"),type:"boolean",defaultValue:!0},subDirectories:{id:"EasyUse.ContextMenu.SubDirectories",name:Z("Enable contextMenu auto nest subdirectories"),type:"boolean",defaultValue:!1},modelsThumbnails:{id:"EasyUse.ContextMenu.ModelsThumbnails",name:Z("Enable model thumbnails display"),type:"boolean",defaultValue:!1},modelsThumbnailsLimit:{id:"EasyUse.ContextMenu.ModelsThumbnailsLimit",name:Z("Maximum number of model thumbnails displayed"),tooltip:Z("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"),type:"slider",attrs:{min:0,max:5e3,step:100},defaultValue:500},rightMenuNodesSort:{id:"EasyUse.ContextMenu.NodesSort",name:Z("Enable right-click menu to add node A~Z sorting"),type:"boolean",defaultValue:!0},nodesRuntime:{id:"EasyUse.Nodes.Runtime",name:Z("Enable nodes runtime display"),type:"boolean",defaultValue:!0},chainGetSet:{id:"EasyUse.Nodes.ChainGetSet",name:Z("Enable chain get node and set node with parent nodes"),type:"boolean",defaultValue:!0},nodesMap:{id:"EasyUse.NodesMap.Sorting",name:Z("Nodes map sorting mode"),tooltip:Z("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"}};function J(e=100,t){return new Promise((n=>{setTimeout((()=>{n(t)}),e)}))}const $=y("groups",{state:e=>({groups:[],nodes:[],isWatching:!1}),getters:{groups_nodes(){var e;let t=[],n=[];if((null==(e=this.nodes)?void 0:e.length)>0){this.nodes.map((e=>{let s=e.pos,o=!1;for(let n=0;n<this.groups.length;n++){let i=this.groups[n];if(s[0]>i.pos[0]&&s[0]<i.pos[0]+i.size[0]&&s[1]>i.pos[1]&&s[1]<i.pos[1]+i.size[1]){t[n]||(t[n]={info:i,children:[]}),t[n].children.push(e),o=!0;break}}o||n.push({info:e})}));for(let e=0;e<this.groups.length;e++)t[e]||(t[e]={info:this.groups[e],children:[]})}return[...t,...n]}},actions:{setGroups(e){this.groups="Manual drag&drop sorting"==I("EasyUse.NodesMap.Sorting")?v(e):v(e.sort(((e,t)=>e.pos[0]-t.pos[0])).sort(((e,t)=>e.pos[1]-t.pos[1])))},setNodes(e){this.nodes=v(e)},update(){(w.extensionManager.activeSidebarTab===B||this.isWatching)&&setTimeout((e=>{this.setGroups(w.canvas.graph._groups),this.setNodes(w.canvas.graph._nodes)}),1)},watchGraph(e=!1){e&&(this.isWatching=!0);let t=this;this.update();const n=w.graph.onNodeAdded;w.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==n?void 0:n.apply(this,arguments)},w.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 i=LGraphCanvas.onGroupAlign;LGraphCanvas.onGroupAlign=function(e){return t.update(),null==i?void 0:i.apply(this,arguments)};const a=LGraphCanvas.onMenuNodeRemove;LGraphCanvas.onMenuNodeRemove=function(e){return t.update(),null==a?void 0:a.apply(this,arguments)}},unwatchGraph(){this.isWatching=!1}}});let q=null;const Q=["custom_obsidian","custom_obsidian_dark","custom_milk_white"],ee={"easy positive":"green","easy negative":"red","easy promptList":"cyan","easy promptLine":"cyan","easy promptConcat":"cyan","easy promptReplace":"cyan","easy forLoopStart":"blue","easy forLoopEnd":"blue"};let te=LGraphCanvas.node_colors,ne=null,se=null,oe=null,ie=null;for(let dn in K)"Disabled"==I("Comfy.UseNewMenu")?T({...K[dn],name:"👽 "+K[dn].name}):T(K[dn]);function ae(e,t=!1){let n="after",s="before";t&&([s,n]=[n,s]),e.label=(e.label??e.name).replace(s,n),e.name=e.label}function le(e,t,n,s,o,i,a){t.strokeStyle=s,t.fillStyle=o;let l=LiteGraph.NODE_TITLE_HEIGHT,r=this.ds.scale<.5,d=e._shape||e.constructor.shape||LiteGraph.ROUND_SHAPE,u=e.constructor.title_mode,c=!0;u==LiteGraph.TRANSPARENT_TITLE||u==LiteGraph.NO_TITLE?c=!1:u==LiteGraph.AUTOHIDE_TITLE&&mouse_over&&(c=!0);let p=new Float32Array(4);p=[0,c?-l:0,n[0]+1,c?n[1]+l:n[1]];let h=t.globalAlpha;if(t.lineWidth=1,t.beginPath(),d==LiteGraph.BOX_SHAPE||r?t.fillRect(p[0],p[1],p[2],p[3]):d==LiteGraph.ROUND_SHAPE||d==LiteGraph.CARD_SHAPE?t.roundRect(p[0],p[1],p[2],p[3],d==LiteGraph.CARD_SHAPE?[this.round_radius,this.round_radius,0,0]:[this.round_radius]):d==LiteGraph.CIRCLE_SHAPE&&t.arc(.5*n[0],.5*n[1],.5*n[0],0,2*Math.PI),t.strokeStyle=LiteGraph.WIDGET_OUTLINE_COLOR,t.stroke(),t.strokeStyle=s,t.fill(),!e.flags.collapsed&&c&&(t.shadowColor="transparent",t.fillStyle="rgba(0,0,0,0.2)",t.fillRect(0,-1,p[2],2)),t.shadowColor="transparent",e.onDrawBackground&&e.onDrawBackground(t,this,this.canvas,this.graph_mouse),c||u==LiteGraph.TRANSPARENT_TITLE){const o="dark"==function(e){let t=e.replace("#","");return n=parseInt(t.substring(0,2),16),s=parseInt(t.substring(2,4),16),o=parseInt(t.substring(4,6),16),.299*n+.587*s+.114*o>127.5?"light":"dark";var n,s,o}((null==e?void 0:e.color)||"#ffffff");if(e.onDrawTitleBar)e.onDrawTitleBar(t,l,n,this.ds.scale,s);else if(u!=LiteGraph.TRANSPARENT_TITLE&&(e.constructor.title_color||this.render_title_colored)){let o=e.constructor.title_color||s;if(e.flags.collapsed&&(t.shadowColor=LiteGraph.DEFAULT_SHADOW_COLOR),this.use_gradients){let e=LGraphCanvas.gradients[o];e||(e=LGraphCanvas.gradients[o]=t.createLinearGradient(0,0,400,0),e.addColorStop(0,o),e.addColorStop(1,"#000")),t.fillStyle=e}else t.fillStyle=o;t.beginPath(),d==LiteGraph.BOX_SHAPE||r?t.rect(0,-l,n[0]+1,l):d!=LiteGraph.ROUND_SHAPE&&d!=LiteGraph.CARD_SHAPE||t.roundRect(0,-l,n[0]+1,l,e.flags.collapsed?[this.round_radius]:[this.round_radius,this.round_radius,0,0]),t.fill(),t.shadowColor="transparent"}let a=!1;LiteGraph.node_box_coloured_by_mode&&LiteGraph.NODE_MODES_COLORS[e.mode]&&(a=LiteGraph.NODE_MODES_COLORS[e.mode]),LiteGraph.node_box_coloured_when_on&&(a=e.action_triggered?"#FFF":e.execute_triggered?"#AAA":a);let c=10;if(e.onDrawTitleBox)e.onDrawTitleBox(t,l,n,this.ds.scale);else if(d==LiteGraph.ROUND_SHAPE||d==LiteGraph.CIRCLE_SHAPE||d==LiteGraph.CARD_SHAPE){const n=o?"#ffffff":LiteGraph.NODE_SELECTED_TITLE_COLOR,s=o?"#eeeeee":e.boxcolor||a||LiteGraph.NODE_DEFAULT_BOXCOLOR;t.fillStyle=i?n:s,t.beginPath(),t.fillRect(10,0-1.05*c-1,1.1*c,.125*c),t.fillRect(10,0-1.45*c-1,1.1*c,.125*c),t.fillRect(10,0-1.85*c-1,1.1*c,.125*c)}else t.fillStyle=e.boxcolor||a||LiteGraph.NODE_DEFAULT_BOXCOLOR,t.fillRect(.5*(l-c),-.5*(l+c),c,c);if(t.globalAlpha=h,e.onDrawTitleText&&e.onDrawTitleText(t,l,n,this.ds.scale,this.title_text_font,i),!r){t.font=this.title_text_font;let n=String(e.getTitle());n&&(t.fillStyle=i?o?"#ffffff":LiteGraph.NODE_SELECTED_TITLE_COLOR:o?"#ffffff":e.constructor.title_text_color||this.node_title_color,e.flags.collapsed?(t.textAlign="left",t.measureText(n),t.fillText(n.substr(0,20),l,LiteGraph.NODE_TITLE_TEXT_Y-l),t.textAlign="left"):(t.textAlign="left",t.fillText(n,l,LiteGraph.NODE_TITLE_TEXT_Y-l)))}if(!e.flags.collapsed&&e.subgraph&&!e.skip_subgraph_button){let n=LiteGraph.NODE_TITLE_HEIGHT,s=e.size[0]-n,o=LiteGraph.isInsideRectangle(this.graph_mouse[0]-e.pos[0],this.graph_mouse[1]-e.pos[1],s+2,2-n,n-4,n-4);t.fillStyle=o?"#888":"#555",d==LiteGraph.BOX_SHAPE||r?t.fillRect(s+2,2-n,n-4,n-4):(t.beginPath(),t.roundRect(s+2,2-n,n-4,n-4,[4]),t.fill()),t.fillStyle="#333",t.beginPath(),t.moveTo(s+.2*n,.6*-n),t.lineTo(s+.8*n,.6*-n),t.lineTo(s+.5*n,.3*-n),t.fill()}e.onDrawTitle&&e.onDrawTitle(t)}if(i){e.onBounding&&e.onBounding(p),u==LiteGraph.TRANSPARENT_TITLE&&(p[1]-=l,p[3]+=l),t.lineWidth=2,t.globalAlpha=.8,t.beginPath();let o=0,i=0,a=1;d==LiteGraph.BOX_SHAPE?t.rect(o+p[0],o+p[1],i+p[2],i+p[3]):d==LiteGraph.ROUND_SHAPE||d==LiteGraph.CARD_SHAPE&&e.flags.collapsed?t.roundRect(o+p[0],o+p[1],i+p[2],i+p[3],[this.round_radius*a]):d==LiteGraph.CARD_SHAPE?t.roundRect(o+p[0],o+p[1],i+p[2],i+p[3],[this.round_radius*a,a,this.round_radius*a,a]):d==LiteGraph.CIRCLE_SHAPE&&t.arc(.5*n[0],.5*n[1],.5*n[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 re(e,t,n,s){if(!e.widgets||!e.widgets.length)return 0;let o=e.size[0],i=e.widgets;t+=2;let a=LiteGraph.NODE_WIDGET_HEIGHT,l=this.ds.scale>.5;n.save(),n.globalAlpha=this.editor_alpha;let r=LiteGraph.WIDGET_OUTLINE_COLOR,d=LiteGraph.WIDGET_BGCOLOR,u=LiteGraph.WIDGET_TEXT_COLOR,c=LiteGraph.WIDGET_SECONDARY_TEXT_COLOR,p=12;for(let h=0;h<i.length;++h){let m=i[h],g=t;m.y&&(g=m.y),m.last_y=g,n.strokeStyle=r,n.fillStyle=d,n.textAlign="left",n.lineWidth=1,m.disabled&&(n.globalAlpha*=.5);let f=m.width||o;switch(m.type){case"button":n.font="10px Inter",n.fillStyle=d,m.clicked&&(n.fillStyle="#AAA",m.clicked=!1,this.dirty_canvas=!0),n.beginPath(),n.roundRect(p,g,f-24,a,[.25*a]),n.fill(),l&&!m.disabled&&n.stroke(),l&&(n.textAlign="center",n.fillStyle=u,n.fillText(m.label||m.name,.5*f,g+.7*a));break;case"toggle":if(n.font="10px Inter",n.textAlign="left",n.strokeStyle=r,n.fillStyle=d,n.beginPath(),l?n.roundRect(p,g,f-24,a,[.25*a]):n.rect(p,g,f-24,a),n.fill(),l&&!m.disabled&&n.stroke(),n.fillStyle=m.value?R:r,n.beginPath(),n.arc(f-24,g+.5*a,.25*a,0,2*Math.PI),n.fill(),l){n.fillStyle=c;const e=m.label||m.name;null!=e&&n.fillText(e,1.6*p,g+.7*a),n.font="10px Inter",n.fillStyle=m.value?u:c,n.textAlign="right",n.fillText(m.value?m.options.on||"true":m.options.off||"false",f-35,g+.7*a)}break;case"slider":n.font="10px Inter",n.fillStyle=d,n.strokeStyle=r,n.beginPath(),n.roundRect(p,g,f-24,a,[.25*a]),n.fill(),n.stroke();let t=m.options.max-m.options.min,o=(m.value-m.options.min)/t;if(o<0&&(o=0),o>1&&(o=1),n.fillStyle=m.options.hasOwnProperty("slider_color")?m.options.slider_color:s==m?r:R,n.beginPath(),n.roundRect(p,g,o*(f-24),a,[.25*a]),n.fill(),m.marker){let e=(m.marker-m.options.min)/t;e<0&&(e=0),e>1&&(e=1),n.fillStyle=m.options.hasOwnProperty("marker_color")?m.options.marker_color:"#AA9",n.roundRect(p+e*(f-24),g,2,a,[.25*a])}if(l){n.textAlign="center",n.fillStyle=u;let e=(m.label||m.name)+": "+Number(m.value).toFixed(null!=m.options.precision?m.options.precision:3).toString();n.fillText(e,.5*f,g+.7*a)}break;case"number":case"combo":if(n.textAlign="left",n.strokeStyle=r,n.fillStyle=d,n.beginPath(),l?n.roundRect(p,g,f-24,a,[.25*a]):n.rect(p,g,f-24,a),n.fill(),l){m.disabled||n.stroke(),n.fillStyle=u,m.disabled||(n.beginPath(),n.moveTo(24,g+6.5),n.lineTo(18,g+.5*a),n.lineTo(24,g+a-6.5),n.fill(),n.beginPath(),n.moveTo(f-p-12,g+6.5),n.lineTo(f-p-6,g+.5*a),n.lineTo(f-p-12,g+a-6.5),n.fill()),n.fillStyle=c,n.font="10px Inter",n.fillText(m.label||m.name,29,g+.7*a),n.fillStyle=u,n.textAlign="right";let e=6;if("number"==m.type)n.font="10px Inter",n.fillText(Number(m.value).toFixed(void 0!==m.options.precision?m.options.precision:3),f-24-e,g+.7*a);else{let t=m.value;if(m.options.values){let e=m.options.values;e.constructor===Function&&(e=e()),e&&e.constructor!==Array&&(t=e[m.value])}n.fillText(t,f-24-e,g+.7*a)}}break;case"string":case"text":if(n.textAlign="left",n.strokeStyle=r,n.fillStyle=d,n.beginPath(),l?n.roundRect(p,g,f-24,a,[.25*a]):n.rect(p,g,f-24,a),n.fill(),l){m.disabled||n.stroke(),n.save(),n.beginPath(),n.rect(p,g,f-24,a),n.clip(),n.fillStyle=c;const e=m.label||m.name;n.font="10px Inter",null!=e&&n.fillText(e,24,g+.7*a),n.fillStyle=u,n.textAlign="right",n.fillText(String(m.value).substr(0,30),f-24,g+.7*a),n.restore()}break;default:m.draw&&m.draw(n,e,f,g,a)}t+=(m.computeSize?m.computeSize(f)[1]:a)+4,n.globalAlpha=this.editor_alpha}n.restore(),n.textAlign="left"}function de(e,t,n,s,o){return new LiteGraph.ContextMenu(LiteGraph.NODE_MODES,{event:n,callback:function(e){if(!o)return;var t=Object.values(LiteGraph.NODE_MODES).indexOf(e),n=function(e){t>=0&&LiteGraph.NODE_MODES[t]?e.changeMode(t):e.changeMode(LiteGraph.ALWAYS),q||(q=$()),q.update()},s=LGraphCanvas.active_canvas;if(!s.selected_nodes||Object.keys(s.selected_nodes).length<=1)n(o);else for(var i in s.selected_nodes)n(s.selected_nodes[i])},parentMenu:s,node:o}),!1}function ue(e,t,n,s,o){if(!o)throw"no node for color";var i=[];for(var a in i.push({value:null,content:"<span style='display: block; padding-left: 4px;'>No color</span>"}),LGraphCanvas.node_colors){var l=LGraphCanvas.node_colors[a];e={value:a,content:"<span style='display: block; color: #999; padding-left: 4px; border-left: 8px solid "+l.color+"; background-color:"+l.bgcolor+"'>"+a+"</span>"};i.push(e)}return new LiteGraph.ContextMenu(i,{event:n,callback:function(e){if(!o)return;var t=e.value?LGraphCanvas.node_colors[e.value]:null,n=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),q||(q=$()),q.update()},s=LGraphCanvas.active_canvas;if(!s.selected_nodes||Object.keys(s.selected_nodes).length<=1)n(o);else for(var i in s.selected_nodes)n(s.selected_nodes[i]);o.setDirtyCanvas(!0,!0)},parentMenu:s,node:o}),!1}function ce(e,t,n,s,o){var i=e.property||"title",a=o[i],l=document.createElement("div");l.is_modified=!1,l.className="graphdialog",l.innerHTML="<span class='name'></span><input autofocus type='text' class='value'/><button>OK</button>",l.close=function(){l.parentNode&&l.parentNode.removeChild(l)},l.querySelector(".name").innerText=i;var r=l.querySelector(".value");r&&(r.value=a,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)m();else if(13!=e.keyCode&&"textarea"!=e.target.localName)return;e.preventDefault(),e.stopPropagation()})));var d=LGraphCanvas.active_canvas.canvas,u=d.getBoundingClientRect(),c=-20,p=-20;u&&(c-=u.left,p-=u.top),event?(l.style.left=event.clientX+c+"px",l.style.top=event.clientY+p+"px"):(l.style.left=.5*d.width+c+"px",l.style.top=.5*d.height+p+"px"),l.querySelector("button").addEventListener("click",m),d.parentNode.appendChild(l),r&&r.focus();var h=null;function m(){r&&function(t){"Number"==e.type?t=Number(t):"Boolean"==e.type&&(t=Boolean(t));o[i]=t,l.parentNode&&l.parentNode.removeChild(l);o.setDirtyCanvas(!0,!0),q||(q=$());q.update()}(r.value)}l.addEventListener("mouseleave",(function(e){LiteGraph.dialog_close_on_mouse_leave&&!l.is_modified&&LiteGraph.dialog_close_on_mouse_leave&&(h=setTimeout(l.close,LiteGraph.dialog_close_on_mouse_leave_delay))})),l.addEventListener("mouseenter",(function(e){LiteGraph.dialog_close_on_mouse_leave&&h&&clearTimeout(h)}))}w.registerExtension({name:"Comfy.EasyUse.UI",init(){var e,t;const n="Comfy.CustomColorPalettes",s="Comfy.Settings.Comfy.CustomColorPalettes";if(se||(se=I(n,s)),oe||(oe=I("Comfy.ColorPalette","Comfy.Settings.Comfy.ColorPalette")||"dark"),(!(null==(e=null==se?void 0:se.obsidian)?void 0:e.version)||se.obsidian.version<z.ColorPalette.version)&&(se.obsidian=z.ColorPalette,se.obsidian_dark=j.ColorPalette,N(n,se,s)),(!(null==(t=null==se?void 0:se.milk_white)?void 0:t.version)||se.milk_white.version<Y.ColorPalette.version)&&(se.milk_white=Y.ColorPalette,N(n,se,s)),Q.includes(oe)){switch(document.body.classList+=" comfyui-easyuse",function(e,t=!1){const n=document.createElement("link");n.rel="preconnect",n.href=e,t&&(n.crossorigin=""),document.head.appendChild(n)}("https://fonts.googleapis.com",!0),function(e,t=!0,n="ComfyUI-Easy-Use"){const s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.href=t?`extensions/${n}/${e}`:e,document.head.appendChild(s)}("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700&amp;family=JetBrains+Mono&amp;display=swap",!1),oe){case"custom_obsidian":case"custom_obsidian_dark":case"dark":LGraphCanvas.node_colors=z.NODE_COLORS;break;case"custom_milk_white":case"light":LGraphCanvas.node_colors=Y.NODE_COLORS}te=LGraphCanvas.node_colors,LiteGraph.NODE_TEXT_SIZE=13,LGraphCanvas.prototype.drawNodeShape=le,LGraphCanvas.prototype.drawNodeWidgets=re}else document.body.classList.remove("comfyui-easyuse");LGraphCanvas.onMenuNodeMode=de,LGraphCanvas.onMenuNodeColors=ue,LGraphCanvas.onShowPropertyEditor=ce},async setup(){Object.assign(w.canvas.default_connection_color_byType,M),Object.assign(LGraphCanvas.link_type_colors,M),"custom_milk_white"==oe&&document.body.classList.remove(G),w.ui.settings.addEventListener("Comfy.ColorPalette.change",(async({detail:e})=>{(null==e?void 0:e.value)&&(null==e?void 0:e.oldValue)&&(await J(1),Object.assign(w.canvas.default_connection_color_byType,M),Object.assign(LGraphCanvas.link_type_colors,M)),"custom_milk_white"==e.value&&document.body.classList.remove(G)})),setTimeout((e=>he(I("Comfy.UseNewMenu")||"Disabled")),1)},async nodeCreated(e){var t;if(ee.hasOwnProperty(e.comfyClass)){const t=ee[e.comfyClass],n=te[t];if(!n)return;n.color&&(e.color=n.color),n.bgcolor&&(e.bgcolor=n.bgcolor)}if(ne||(ne=I("Comfy.WidgetControlMode")),"before"==ne){const n="before"==ne;if((null==(t=e.widgets)?void 0:t.length)>0)for(const t of e.widgets)if(["control_before_generate","control_after_generate"].includes(t.name)&&(await ae(t,n),t.linkedWidgets))for(const e of t.linkedWidgets)await ae(e,n)}}});const pe=null==(m=w.ui.settings.settingsLookup)?void 0:m["Comfy.UseNewMenu"];pe&&(pe.onChange=e=>he(e));const he=e=>{var t;const n=(null==(t=document.getElementById("crystools-root"))?void 0:t.children)||null;if((null==n?void 0:n.length)>0){if(!ie)for(let e=0;e<n.length;e++)if("crystools-monitor-container"===n[e].id){ie=n[e];break}if(ie)if("Disabled"==e){for(let e=0;e<n.length&&"crystools-monitor-container"!==n[e].id;e++);document.getElementById("crystools-root").appendChild(ie)}else{let e=document.getElementById("comfyui-menu-monitor");e?e.appendChild(ie):w.menu.settingsGroup.element.before(L("div",{id:"comfyui-menu-monitor"},ie))}}};let me={};const ge=(e,t)=>e.widgets.find((e=>e.name===t)),fe=(e,t,n=!1,s="")=>{var o;if(!t||((e,t)=>!!e.inputs&&e.inputs.some((e=>e.name===t)))(e,t.name))return;me[t.name]||(me[t.name]={origType:t.type,origComputeSize:t.computeSize});const i=e.size;t.type=n?me[t.name].origType:"easyHidden"+s,t.computeSize=n?me[t.name].origComputeSize:()=>[0,-4],null==(o=t.linkedWidgets)||o.forEach((s=>fe(e,s,":"+t.name,n)));const a=n?Math.max(e.computeSize()[1],i[1]):e.size[1];e.setSize([e.size[0],a])},ye=(e,t=0)=>{var n,s;if(e)return(null==(n=e.widgets)?void 0:n[t])?e.widgets[t].value:e.widgets_values?null==(s=e.widgets_values)?void 0:s[t]:void 0},_e=e=>e.setSize([e.size[0],e.computeSize()[1]]),ve=(e,t)=>graph.getNodeById(e),we=e=>{var t;try{return Object.values(null==(t=null==graph?void 0:graph.list_of_graphcanvas[0])?void 0:t.selected_nodes)}catch(n){return[]}};function be(e,t,n){return e+(s=n,(.5-.5*Math.cos(Math.PI*s))*(t-e));var s}const Le=(e,t=!0)=>{var n,s;const o=(null==(s=null==(n=e.graph)?void 0:n.list_of_graphcanvas)?void 0:s[0])||null;if(!o)return;const[i,a]=e.pos,[l,r]=e.size;(([e,t],n)=>{const s=n.ds,o=document.body.clientWidth,i=document.body.clientHeight,a=s.scale,l=.5*o/a-e,r=.5*i/a-t,d=Date.now()+250,u=s.offset[0],c=s.offset[1],p=()=>{const e=d-Date.now();if(!(Date.now()<d))return s.offset[0]=l,s.offset[1]=r,void n.setDirty(!0,!0);requestAnimationFrame(p);const t=1-e/250;s.offset[0]=be(u,l,t),s.offset[1]=be(c,r,t),n.setDirty(!0,!0)};requestAnimationFrame(p)})([i+l/2,a+r/2],o),t&&o.selectNode(e)},Ee=e=>{const t=ve(e);t&&Le(t)},Se=(e,t=(()=>graph.links??[])())=>t[e],Ce=e=>e.toLowerCase().replace(/_./g,(e=>e.replace("_","").toUpperCase())),Ae=e=>"easy getNode"===e.type,ke=e=>"easy setNode"===e.type,Ie=e=>Ae(e)||ke(e),xe=(e=(()=>graph._nodes??[])())=>e.filter((e=>Ie(e))),Ne=(e,t,n=0)=>{e.widgets_values||(e.widgets_values=[]),e.widgets_values[n]=t,e.widgets[n].value=t},Te=e=>graph.add(e),Oe=e=>graph.remove(e),De=(e,t=0)=>{var n,s;if("Reroute"!==e.type)return[e,t];const o=e,i=null==(s=null==(n=o.inputs)?void 0:n[0])?void 0:s.link;if(!i)return[o,t];const a=Se(i);if(!a)return[o,t];const l=ve(a.origin_id);return l?(setTimeout((()=>{Oe(o)})),De(l,a.origin_slot)):[o,t]},Ge=e=>{var t,n,s;if("Reroute"!==e.type)return e;const o=e,i=null==(n=null==(t=o.outputs)?void 0:t[0])?void 0:n.links;if(!i)return o;const a=i[0];if(!a)return o;const l=Se(a);if(!l)return o;const r=ve(l.target_id);return r?(1===(null==(s=o.outputs[0].links)?void 0:s.length)&&setTimeout((()=>{Oe(o)})),Ge(r)):o};const Re=new class{constructor(){f(this,"element",L(`div.${D}toast`)),f(this,"children",HTMLElement),f(this,"container",document.body),this.container.appendChild(this.element)}async show(e){let t=L(`div.${D}toast-container`,[L("div",[L("span",[...e.icon?[L("i",{className:e.icon})]:[],L("span",e.content)])])]);t.setAttribute("toast-id",e.id),this.element.replaceChildren(t),this.container.appendChild(this.element),await J(64),t.style.marginTop=`-${t.offsetHeight}px`,await J(64),t.classList.add("show"),e.duration&&(await J(e.duration),this.hide(e.id))}async hide(e){const t=document.querySelector(`.${D}toast > [toast-id="${e}"]`);(null==t?void 0:t.classList.contains("show"))&&(t.classList.remove("show"),await J(750)),t&&t.remove()}async clearAllMessages(){let e=document.querySelector(`.${D}container`);e&&(e.innerHTML="")}async info(e,t=3e3,n=[]){this.show({id:"toast-info",icon:`mdi mdi-information ${D}theme`,content:e,duration:t})}async success(e,t=3e3){this.show({id:"toast-success",icon:`mdi mdi-check-circle ${D}success`,content:e,duration:t})}async error(e,t=3e3){this.show({id:"toast-error",icon:`mdi mdi-close-circle ${D}error`,content:e,duration:t})}async warn(e,t=3e3){this.show({id:"toast-warn",icon:`mdi mdi-alert-circle ${D}warning`,content:e,duration:t})}async showLoading(e,t=0){this.show({id:"toast-loading",icon:"mdi mdi-rotate-right loading",content:e,duration:t})}async hideLoading(){this.hide("toast-loading")}},Me=["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"],Pe=["LIGHT - SD1.5 only (low strength)","STANDARD (medium strength)","VIT-G (medium strength)","PLUS (high strength)","PLUS FACE (portraits)","FULL FACE - SD1.5 only (portraits stronger)"],Fe=["FACEID","FACEID PLUS - SD1.5 only","FACEID PLUS V2","FACEID PLUS KOLORS","FACEID PORTRAIT (style transfer)","FACEID PORTRAIT UNNORM - SDXL only (strong)"],Ue=["easy seed","easy latentNoisy","easy wildcards","easy preSampling","easy preSamplingAdvanced","easy preSamplingNoiseIn","easy preSamplingSdTurbo","easy preSamplingCascade","easy preSamplingDynamicCFG","easy preSamplingLayerDiffusion","easy fullkSampler","easy fullCascadeKSampler"],Be=["easy fullLoader","easy a1111Loader","easy comfyLoader","easy hyditLoader","easy pixArtLoader"],We=["easy imageSize","easy imageSizeBySide","easy imageSizeByLongerSide","easy imageSizeShow","easy imageRatio","easy imagePixelPerfect"],ze=["easy forLoopStart","easy forLoopEnd","easy whileLoopStart","easy whileLoopEnd"],je=["easy anythingIndexSwitch","easy imageIndexSwitch","easy textIndexSwitch","easy conditioningIndexSwitch"],Ve=[...ze,...je],Ye={"easy anythingIndexSwitch":"value","easy imageIndexSwitch":"image","easy textIndexSwitch":"text","easy conditioningIndexSwitch":"cond"};function He(e,t){const n=e.comfyClass,s=t.value;switch(t.name){case"range_mode":fe(e,ge(e,"step"),"step"==s),fe(e,ge(e,"num_steps"),"num_steps"==s),_e(e);break;case"text_combine_mode":fe(e,ge(e,"replace_text"),"replace"==s);break;case"lora_name":["lora_model_strength","lora_clip_strength"].map((t=>fe(e,ge(e,t),"None"!==s)));break;case"resolution":"自定义 x 自定义"===s&&(t.value="width x height (custom)"),["empty_latent_width","empty_latent_height"].map((t=>fe(e,ge(e,t),"width x height (custom)"===s)));break;case"ratio":["empty_latent_width","empty_latent_height"].map((t=>fe(e,ge(e,t),"custom"===s)));break;case"num_loras":var o=s+1,i=ge(e,"mode").value;for(let t=0;t<o;t++)fe(e,ge(e,"lora_"+t+"_name"),!0),fe(e,ge(e,"lora_"+t+"_strength"),"simple"===i),["lora_"+t+"_model_strength","lora_"+t+"_clip_strength"].map((t=>fe(e,ge(e,t),"simple"!==i)));for(let t=o;t<21;t++)["lora_"+t+"_name","lora_"+t+"_strength","lora_"+t+"_model_strength","lora_"+t+"_clip_strength"].map((t=>fe(e,ge(e,t),!1)));_e(e);break;case"num_controlnet":o=s+1,i=ge(e,"mode").value;for(let t=0;t<o;t++)["controlnet_"+t,"controlnet_"+t+"_strength","scale_soft_weight_"+t].map((t=>fe(e,ge(e,t),!0))),["start_percent_"+t,"end_percent_"+t].map((t=>fe(e,ge(e,t),"simple"!==i)));for(let t=o;t<21;t++)["controlnet_"+t,"controlnet_"+t+"_strength","scale_soft_weight_"+t,"start_percent_"+t,"end_percent_"+t].map((t=>fe(e,ge(e,t),!1)));_e(e);break;case"mode":switch(null==e?void 0:e.comfyClass){case"easy loraStack":o=ge(e,"num_loras").value+1,i=s;for(let t=0;t<o;t++)fe(e,ge(e,"lora_"+t+"_strength"),"simple"===i),["lora_"+t+"_model_strength","lora_"+t+"_clip_strength"].map((t=>fe(e,ge(e,t),"simple"!==i)));_e(e);break;case"easy controlnetStack":o=ge(e,"num_controlnet").value+1,i=s;for(let t=0;t<o;t++)["start_percent_"+t,"end_percent_"+t].map((t=>fe(e,ge(e,t),"simple"!==i)));_e(e);break;case"easy icLightApply":i=s;["lighting","remove_bg"].map((t=>fe(e,ge(e,t),"Foreground"===i))),fe(e,ge(e,"source"),"Foreground"!==i),_e(e)}break;case"toggle":t.type="toggle",t.options={on:"Enabled",off:"Disabled"};break;case"t5_type":["clip_name","padding"].map((t=>fe(e,ge(e,t),"sd3"==s))),["t5_name","device","dtype"].map((t=>fe(e,ge(e,t),"t5v11"==s))),_e(e);break;case"preset":if(Pe.includes(s)){let t=ge(e,"use_tiled");fe(e,ge(e,"lora_strength")),fe(e,ge(e,"provider")),fe(e,ge(e,"weight_faceidv2")),fe(e,ge(e,"weight_kolors")),fe(e,ge(e,"use_tiled"),!0),fe(e,ge(e,"sharpening"),t&&t.value)}else Fe.includes(s)&&(fe(e,ge(e,"weight_faceidv2"),!!["FACEID PLUS V2","FACEID PLUS KOLORS"].includes(s)),fe(e,ge(e,"weight_kolors"),!!["FACEID PLUS KOLORS"].includes(t.value)),["FACEID PLUS KOLORS","FACEID PORTRAIT (style transfer)","FACEID PORTRAIT UNNORM - SDXL only (strong)"].includes(s)?fe(e,ge(e,"lora_strength"),!1):fe(e,ge(e,"lora_strength"),!0),fe(e,ge(e,"provider"),!0),fe(e,ge(e,"use_tiled")),fe(e,ge(e,"sharpening")));_e(e);break;case"use_tiled":fe(e,ge(e,"sharpening"),!!s),_e(e);break;case"num_embeds":o=s+1;for(let t=0;t<o;t++)fe(e,ge(e,"weight"+t),!0);for(let t=o;t<6;t++)fe(e,ge(e,"weight"+t));_e(e);break;case"inpaint_mode":switch(s){case"normal":case"fooocus_inpaint":["dtype","fitting","function","scale","start_at","end_at"].map((t=>fe(e,ge(e,t),!1)));break;case"brushnet_random":case"brushnet_segmentation":["dtype","scale","start_at","end_at"].map((t=>fe(e,ge(e,t),!0))),["fitting","function"].map((t=>fe(e,ge(e,t),!1)));break;case"powerpaint":["dtype","fitting","function","scale","start_at","end_at"].map((t=>fe(e,ge(e,t),!0)))}_e(e);break;case"image_output":fe(e,ge(e,"link_id"),!!["Sender","Sender&Save"].includes(s)),fe(e,ge(e,"decode_vae_name"),!!["Hide","Hide&Save"].includes(s)),["save_prefix","output_path","embed_workflow","number_padding","overwrite_existing"].map((t=>fe(e,ge(e,t),!!["Save","Hide&Save","Sender&Save"].includes(s))));break;case"add_noise":var a=ge(e,"control_before_generate"),l=ge(e,"control_after_generate")||a;"disable"===s?(fe(e,ge(e,"seed")),l&&(l.last_value=l.value,l.value="fixed",fe(e,l))):(fe(e,ge(e,"seed"),!0),l&&((null==l?void 0:l.last_value)&&(l.value=l.last_value),fe(e,l,!0))),_e(e);break;case"guider":switch(s){case"Basic":["cfg","cfg_negative"].map((t=>fe(e,ge(e,t))));break;case"CFG":fe(e,ge(e,"cfg"),!0),fe(e,ge(e,"cfg_negative"));break;case"IP2P+DualCFG":case"DualCFG":["cfg","cfg_negative"].map((t=>fe(e,ge(e,t),!0)))}_e(e);break;case"scheduler":["karrasADV","exponentialADV","polyExponential"].includes(s)?(["sigma_max","sigma_min"].map((t=>fe(e,ge(e,t),!0))),["denoise","beta_d","beta_min","eps_s","coeff"].map((t=>fe(e,ge(e,t))),!1),fe(e,ge(e,"rho"),"exponentialADV"!=s)):"vp"==s?(["sigma_max","sigma_min","denoise","rho","coeff"].map((t=>fe(e,ge(e,t)))),["beta_d","beta_min","eps_s"].map((t=>fe(e,ge(e,t),!0)))):(["sigma_max","sigma_min","beta_d","beta_min","eps_s","rho"].map((t=>fe(e,ge(e,t)))),fe(e,ge(e,"coeff"),"gits"==s),fe(e,ge(e,"denoise"),!0)),_e(e);break;case"conditioning_mode":["replace","concat","combine"].includes(s)?["average_strength","old_cond_start","old_cond_end","new_cond_start","new_cond_end"].map((t=>fe(e,ge(e,t)))):"average"==s?(fe(e,ge(e,"average_strength"),!0),["old_cond_start","old_cond_end","new_cond_start","new_cond_end"].map((t=>fe(e,ge(e,t),!1)))):"timestep"==s&&(["average_strength"].map((t=>fe(e,ge(e,t),!1))),["old_cond_start","old_cond_end","new_cond_start","new_cond_end"].map((t=>fe(e,ge(e,t)))));break;case"rescale":ge(e,"rescale_after_model").value,fe(e,ge(e,"width"),"to Width/Height"===s),fe(e,ge(e,"height"),"to Width/Height"===s),fe(e,ge(e,"percent"),"by percentage"===s),fe(e,ge(e,"longer_side"),"to longer side - maintain aspect"===s),_e(e);break;case"upscale_method":["factor","crop"].map((t=>fe(e,ge(e,t),"None"!==s)));break;case"target_parameter":switch(n){case"easy XYInputs: Steps":["first_step","last_step"].map((t=>fe(e,ge(e,t),"steps"==s))),["first_start_step","last_start_step"].map((t=>fe(e,ge(e,t),"start_at_step"==s))),["first_end_step","last_end_step"].map((t=>fe(e,ge(e,t),"end_at_step"==s)));break;case"easy XYInputs: Sampler/Scheduler":let t=ge(e,"input_count").value+1;for(let n=0;n<t;n++)fe(e,ge(e,"sampler_"+n),"scheduler"!==s),fe(e,ge(e,"scheduler_"+n),"sampler"!==s);_e(e);break;case"easy XYInputs: ControlNet":["first_strength","last_strength"].map((t=>fe(e,ge(e,t),"strength"==s))),["first_start_percent","last_start_percent"].map((t=>fe(e,ge(e,t),"start_percent"==s))),["first_end_percent","last_end_percent"].map((t=>fe(e,ge(e,t),"end_percent"==s))),["strength","start_percent","end_percent"].map((t=>fe(e,ge(e,t),s!=t))),_e(e)}case"replace_count":o=s+1;for(let t=0;t<o;t++)fe(e,ge(e,"replace_"+t),!0);for(let t=o;t<31;t++)fe(e,ge(e,"replace_"+t));_e(e);break;case"lora_count":o=s+1;var r=-1==ge(e,"input_mode").value.indexOf("Weights");for(let t=0;t<o;t++)fe(e,ge(e,"lora_name_"+t),!0)["clip_str_"+t].map((t=>fe(e,ge(e,t),!r)));for(let t=o;t<11;t++)["lora_name_"+t,"model_str_"+t,"clip_str_"+t].map((t=>fe(e,ge(e,t),!1)));_e(e);break;case"ckpt_count":o=s+1;var d=-1!=ge(e,"input_mode").value.indexOf("ClipSkip"),u=-1!=ge(e,"input_mode").value.indexOf("VAE");for(let t=0;t<o;t++)fe(e,ge(e,"ckpt_name_"+t),!0),fe(e,ge(e,"clip_skip_"+t),!!d),fe(e,ge(e,"vae_name_"+t),!!u);for(let t=o;t<11;t++)["ckpt_name_"+t,"clip_skip_"+t,"vae_name_"+t].map((t=>fe(e,ge(e,t),!1)));_e(e);break;case"input_count":o=s+1;var c=ge(e,"target_parameter").value;for(let t=0;t<o;t++)fe(e,ge(e,"sampler_"+t),"scheduler"!==c),fe(e,ge(e,"scheduler_"+t),"sampler"!==c);for(let t=o;t<31;t++)fe(e,ge(e,"sampler_"+t)),fe(e,ge(e,"scheduler_"+t));_e(e);break;case"input_mode":switch(n){case"easy XYInputs: Lora":o=ge(e,"lora_count").value+1;const t=-1!=s.indexOf("Weights");for(let n=0;n<o;n++)fe(e,ge(e,"lora_name_"+n),!0),["model_str_"+n,"clip_str_"+n].map((n=>fe(e,ge(e,n),!t)));["model_strength","clip_strength"].map((n=>fe(e,ge(e,n),!t)));break;case"easy XYInputs: Checkpoint":o=ge(e,"ckpt_count").value+1,d=-1!=ge(e,"input_mode").value.indexOf("ClipSkip"),u=-1!=ge(e,"input_mode").value.indexOf("VAE");for(let n=0;n<o;n++)fe(e,ge(e,"ckpt_name_"+n),!0),fe(e,ge(e,"clip_skip_"+n),!!d),fe(e,ge(e,"vae_name_"+n),!!u)}_e(e);break;case"rem_mode":fe(e,ge(e,"torchscript_jit"),"Inspyrenet"===s),_e(e)}}w.registerExtension({name:"Comfy.EasyUse.Widget",async beforeRegisterNodeDef(e,t,n){const s=t.name,o=e.prototype.onAdded,i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onExecuted;if(e.prototype.onConnectionsChange,["easy showAnything","easy showTensorShape","easy showSpentTime","easy imageInterrogator","easy showLoaderSettingsNames"].includes(s)){let o=function(e,t="text"){var s,o;if(this.widgets){const e=this.widgets.findIndex((e=>e.name===t));if(-1!==e){for(let t=e;t<this.widgets.length;t++)null==(o=(s=this.widgets[t]).onRemove)||o.call(s);this.widgets.length=e}}for(const i of e){const e=S.STRING(this,"text",["STRING",{multiline:!0}],n).widget;e.inputEl.readOnly=!0,e.inputEl.style.opacity=.6,e.value=i}requestAnimationFrame((()=>{var e;const t=this.computeSize();t[0]<this.size[0]&&(t[0]=this.size[0]),t[1]<this.size[1]&&(t[1]=this.size[1]),null==(e=this.onResize)||e.call(this,t),n.graph.setDirtyCanvas(!0,!1)}))};e.prototype.onExecuted=function(e){null==l||l.apply(this,arguments),o.call(this,e.text,"text")},["easy imageInterrogator"].includes(t.name)||(e.prototype.onConfigure=function(){var e;null==a||a.apply(this,arguments);let t="text";switch(s){case"easy showLoaderSettingsNames":t="names";break;case"easy showSpentTime":t="spent_time";break;default:t="text"}(null==(e=this.widgets_values)?void 0:e.length)&&o.call(this,this.widgets_values,t)})}if(We.includes(s)){let t=function(e){var t="";for(let n=0;n<e.length;n++)t+=e[n];if(this.widgets){const e=this.widgets.findIndex((e=>"info"===e.name));if(-1!==e&&this.widgets[e]){this.widgets[e].value=t}}requestAnimationFrame((()=>{var e;const t=this.computeSize();t[0]<this.size[0]&&(t[0]=this.size[0]),t[1]<this.size[1]&&(t[1]=this.size[1]),null==(e=this.onResize)||e.call(this,t),n.graph.setDirtyCanvas(!0,!1)}))};e.prototype.onExecuted=function(e){null==l||l.apply(this,arguments),t.call(this,e.text)}}if("easy promptLine"==s&&(e.prototype.onAdded=async function(){o&&o.apply(this,[]);let e=this.widgets.find((e=>"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,i=n.graph._nodes.find((e=>{var t;return null==(t=e.inputs)?void 0:t.find((e=>e.link==o))}));if(o&&i){const t=i.inputs.find((e=>e.link==o)).widget.name,n=i.widgets.find((e=>e.name==t));let s=(null==n?void 0:n.options.values)||null;s&&(s=s.join("\n"),e.value=s)}else Re.error(Z("No COMBO link"),3e3)}),{serialize:!1})}),Be.includes(t.name)){let t=function(e){var t="";for(let n=0;n<e.length;n++)t+=e[n];return t},n=function(e,t="positive"){if(this.widgets){const n=this.widgets.findIndex((e=>e.name===t+"_prompt")),s="comfy-multiline-input wildcard_"+t+"_"+this.id.toString();if(-1==n&&e){const n=document.createElement("textarea");n.className=s,n.placeholder="Wildcard Prompt ("+t+")";const o=this.addDOMWidget(t+"_prompt","customtext",n,{getValue:e=>n.value,setValue(e){n.value=e},serialize:!1});o.inputEl=n,o.inputEl.readOnly=!0,n.addEventListener("input",(()=>{var e;null==(e=o.callback)||e.call(o,o.value)})),o.value=e}else if(this.widgets[n])if(e){this.widgets[n].value=e}else{this.widgets.splice(n,1);const e=document.getElementsByClassName(s);e&&e[0]&&e[0].remove()}}};e.prototype.onExecuted=function(e){null==l||l.apply(this,arguments);const s=t(e.positive),o=t(e.negative);n.call(this,s,"positive"),n.call(this,o,"negative")}}if(["easy sv3dLoader"].includes(t.name)){let t=function(e,t,n){switch(e){case"azimuth":return n.readOnly=!0,n.style.opacity=.6,"0:(0.0,0.0)"+(t>1?`\n${t-1}:(360.0,0.0)`:"");case"elevation":return n.readOnly=!0,n.style.opacity=.6,"0:(-90.0,0.0)"+(t>1?`\n${t-1}:(90.0,0.0)`:"");case"custom":return n.readOnly=!1,n.style.opacity=1,"0:(0.0,0.0)\n9:(180.0,0.0)\n20:(360.0,0.0)"}};e.prototype.onNodeCreated=async function(){i&&i.apply(this,[]);const e=this.widgets.find((e=>"easing_mode"==e.name)),n=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,n.value,s.inputEl))}),1),e.callback=e=>{s.value=t(e,n.value,s.inputEl)},n.callback=n=>{s.value=t(e.value,n,s.inputEl)}}}if(Ue.includes(s)&&(e.prototype.onNodeCreated=async function(){i&&i.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"].includes(e.name)));if("easy seed"==t.name){const t=this.addWidget("button","🎲 Manual Random Seed",null,(t=>{"fixed"!=s.value&&(s.value="fixed"),e.value=Math.floor(Math.random()*P),n.queuePrompt(0,1)}),{serialize:!1});e.linkedWidgets=[t,s]}},e.prototype.onAdded=async function(){o&&o.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"].includes(e.name)));setTimeout((n=>{"control_before_generate"==t.name&&0===e.value&&(e.value=Math.floor(Math.random()*P))}),1)}),"easy convertAnything"==s&&(e.prototype.onNodeCreated=async function(){i&&i.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"==s){let t=function(e){const t=e.widgets[0];for(let n=1;n<=4;n++)"Pixels"===t.value?(e.widgets[n].options.step=80,e.widgets[n].options.max=8192):(e.widgets[n].options.step=10,e.widgets[n].options.max=99)};e.prototype.onAdded=async function(e){const n=this.widgets[0];let s=n.callback;n.callback=(...e)=>{t(this),s&&s.apply(n,[...e])},setTimeout((e=>{t(this)}),1)}}if(Ve.includes(s)){const t=e=>{switch(s){case"easy forLoopStart":return 0;case"easy forLoopEnd":return 1}},n=e=>{switch(s){case"easy forLoopStart":return 2;case"easy forLoopEnd":return 0}};e.prototype.onNodeCreated=async function(){if(ze.includes(s)){const e=this.inputs.findIndex((e=>"flow"===e.name)),o=this.outputs.findIndex((e=>"flow"===e.name));if(-1!==e&&(this.inputs[e].shape=5),-1!==o&&(this.outputs[o].shape=5),"easy whileLoopStart"==s||"easy whileLoopEnd"==s)return;this.inputs=this.inputs.filter(((e,n)=>n<=t())),this.outputs=this.outputs.filter(((e,t)=>t<=n())),_e(this)}return null==i?void 0:i.apply(this,arguments)},e.prototype.onConnectionsChange=function(e,o,i,a){var l;if("easy whileLoopStart"!=s&&"easy whileLoopEnd"!=s&&a)if(1==e){let e=this.inputs.every((e=>null!==e.link)),n=this.inputs.filter((e=>!["condition","index","total"].includes(e.name)));if(ze.includes(s)){if(e){if(n.length>=10)return void Re.warn(Z("The maximum number of inputs is 10"));let e=n[n.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(!i){const e=t();let n=this.inputs.findLastIndex((e=>e.link));if(o>=e&&(-1===n||o>=n)){let e=this.inputs[o];if(!e.name||["condition","total"].includes(e.name))return;let t=parseInt(e.name.split("initial_value")[1])+1,n=this.inputs.findIndex((e=>e.name==="initial_value"+t)),s=this.outputs.findIndex((e=>e.name==="value"+t));-1!==n&&this.removeInput(n),-1!==s&&this.removeOutput(s)}}}else if(je.includes(s))if(e){if(n.length>=10)return void Re.warn(Z("The maximum number of inputs is 10"));let e=Ye[s]+n.length;this.addInput(e,"*")}else i||o==this.inputs.length-2&&this.removeInput(o+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(ze.includes(s))if(t){if(e.length>=10)return void Re.warn(Z("The maximum number of inputs is 10"));let t=e[e.length-1],n=parseInt(t.name.split("value")[1])+1;if(this.inputs.find((e=>e.name==="initial_value"+n)))return;if(this.outputs.find((e=>e.name==="value"+n)))return;let s="initial_value"+n,o="value"+n;this.addInput(s,"*"),this.addOutput(o,"*")}else if(!i){const e=n();let t=a.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 n=parseInt(e.name.split("value")[1])+1,s=this.inputs.findIndex((e=>e.name==="initial_value"+n)),o=this.outputs.findIndex((e=>e.name==="value"+n));if(-1!==s&&(null==(l=this.inputs[s])?void 0:l.link))return;-1!==s&&this.removeInput(s),-1!==o&&this.removeOutput(o)}}}}}},nodeCreated(e){if(e.comfyClass.startsWith("easy ")){if(e.widgets)for(const n of e.widgets){if(!Me.includes(n.name))continue;let t=n.value;He(e,n),Object.defineProperty(n,"value",{get:e=>t,set(s){s!==t&&(t=s,He(e,n))}})}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"==t){const t=e.widgets.find((e=>"text"==e.name));let n=1;Object.defineProperty(e.widgets[n],"value",{set:e=>{if((new Error).stack.includes("inner_value_change")&&"Select the LoRA to add to the text"!=e){let n=e;n.endsWith(".safetensors")&&(n=n.slice(0,-12)),t.value+=`<lora:${n}>`}},get:e=>"Select the LoRA to add to the text"}),Object.defineProperty(e.widgets[n+1],"value",{set:e=>{(new Error).stack.includes("inner_value_change")&&"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[n].serializeValue=e=>"Select the LoRA to add to the text",e.widgets[n+1].serializeValue=e=>"Select the Wildcard to add to the text"}if(We.includes(t)){const t=document.createElement("textarea");t.className="comfy-multiline-input",t.readOnly=!0;const n=e.addDOMWidget("info","customtext",t,{getValue:e=>t.value,setValue:e=>t.value=e,serialize:!1});n.inputEl=t,t.addEventListener("input",(()=>{var e;null==(e=n.callback)||e.call(n,n.value)}))}}}});const Xe=LiteGraph.LGraphNode;w.registerExtension({name:"easy bookmark",registerCustomNodes(){class e extends Xe{constructor(){super("🔖"),f(this,"type","easy bookmark"),f(this,"title","🔖"),f(this,"slot_start_y",-20),f(this,"___collapsed_width",0),f(this,"isVirtualNode",!0),f(this,"serialize_widgets",!0),f(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=w.canvas,n=t.canvas.getContext("2d");if(n){const e=n.font;n.font=t.title_text_font,this.___collapsed_width=40+n.measureText(this.title).width,n.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 n=w.canvas;(null==(e=null==n?void 0:n.ds)?void 0:e.offset)&&(n.ds.offset[0]=16-this.pos[0],n.ds.offset[1]=40-this.pos[1]),null!=(null==(t=null==n?void 0:n.ds)?void 0:t.scale)&&(n.ds.scale=Number(this.widgets[1].value||1)),n.setDirty(!0,!0)}}LiteGraph.registerNodeType("easy bookmark",Object.assign(e,{title:"Bookmark 🔖"})),e.category="EasyUse/Util"}}),w.registerExtension({name:"Comfy.EasyUse.ChainNode",init(){w.canvas._mousemove_callback=e=>{if(!I("EasyUse.Nodes.ChainGetSet",null,!0))return;((e,t=!1,n={})=>{var s,o,i,a,l;if(0===e.length)return;const r=n.inputX||160,d=n.ouputX||60;if(e.filter((e=>Ie(e))).length>1)return;for(const c of e){let a=0,l=0;const u=n.inputY||10,p=n.outputY||30,h=[];if(c.graph){for(const e of c.inputs??[]){const t=e.link;if(!t)continue;const{origin_id:n,target_slot:s}=Se(t),o=ve(n);if(!o)continue;if(!Ie(o))continue;const i=c.getConnectionPos(!0,s);o.pos=[i[0]-r,i[1]+15+a*u],a+=1,h.push(o),o.flags.collapsed=!0}for(const e of c.outputs??[])if(e.links&&c.graph)for(const t of e.links){const{target_id:e}=Se(t),n=ve(e);if(!n)continue;if(!Ie(n))continue;const o=null==(s=n.outputs)?void 0:s.links;if((null==o?void 0:o.length)>1)return;const i=c.getConnectionPos(!1,0);n.pos=[i[0]+d,i[1]+15+l*p],l+=1,h.push(n),n.flags.collapsed=!0}if(t&&1===e.length){const e=[c,...h];(null==(i=null==(o=c.graph)?void 0:o.list_of_graphcanvas)?void 0:i[0]).selectNodes(e)}}}const u=e[0];if(!u)return;(null==(l=null==(a=u.graph)?void 0:a.list_of_graphcanvas)?void 0:l[0]).setDirty(!0,!0)})(we())};const e=LGraphCanvas.prototype.showLinkMenu;LGraphCanvas.prototype.showLinkMenu=function(t,n){return n.shiftKey?(((e,t=!1)=>{var n,s,o,i,a,l,r,d,u,c;const{type:p}=e;if("*"===p)return;let{origin_id:h,target_id:m,origin_slot:g,target_slot:f}=e,y=ve(h),_=ve(m);if(!y||!_)return!1;if("Reroute"===y.type){let e=0;[y,e]=De(y),h=null==y?void 0:y.id,g=e,void 0!==g&&-1!==g||(g=0)}if("Reroute"===_.type&&(_=Ge(_),m=null==_?void 0:_.id,f=null==_?void 0:_.inputs.findIndex((e=>e.type===p)),void 0!==f&&-1!==f||(f=0)),void 0===h||void 0===m||!y||!_)return!1;if(t&&(Ie(y)||Ie(_)))return!1;let v=Ce((null==(n=_.getInputInfo(f))?void 0:n.name)??p.toLowerCase());v||(v=Ce((null==(o=null==(s=null==y?void 0:y.outputs)?void 0:s[g])?void 0:o.name)??(null==(a=null==(i=null==y?void 0:y.outputs)?void 0:i[g])?void 0:a.type.toString())??v+`_from_${h}_to_${m}`));let w,b=!1,L=!1;if(Ie(y))v=ye(y),L=!0;else{const e=null==(r=null==(l=y.outputs)?void 0:l[g])?void 0:r.links;if(e)for(const t of e){const e=ve((null==(d=Se(t))?void 0:d.target_id)??-1);e&&Ie(e)&&ke(e)&&(v=ye(e),L=!0)}if(!L){for(const e of xe()){if(v!==ye(e)||!ke(e))continue;const t=null==(u=e.inputs[0])?void 0:u.link;(null==(c=Se(t))?void 0:c.origin_id)===y.id?L=!0:b=!0}b&&(v+=`_from_${h}_to_${m}`)}}if(!L){w=LiteGraph.createNode("easy setNode"),w.is_auto_link=!0;const e=y.getConnectionPos(!1,g);w.pos=[e[0]+20,e[1]],w.inputs[0].name=v,w.inputs[0].type=p,w.inputs[0].widget=_.inputs[f].widget,Ne(w,v),Te(w),w.flags.collapsed=!0;let t=[];y.widgets?t=Object.values(y.widgets).map((e=>e.value)):y.widgets_values&&(t=JSON.parse(JSON.stringify(y.widgets_values))),y.connect(g,w,0),y.widgets_values=t,"PrimitiveNode"===y.type&&setTimeout((()=>{if(y){y.connect(g,w,0);for(const[e,n]of t.entries())Ne(y,n,e);null!==w&&w.setSize(w.computeSize())}}))}const E=LiteGraph.createNode("easy getNode"),S=_.getConnectionPos(!0,f);E.pos=[S[0]-150,S[1]],E.outputs[0].name=v,E.outputs[0].type=p,E.outputs[0].widget=_.inputs[f].widget,Te(E),Ne(E,v),null===E||(E.flags.collapsed=!0,E.setSize(E.computeSize()),E.connect(0,_,f))})(t),!1):(e.apply(this,[t,n]),!1)}}});const Ze=async()=>{try{const{Running:e,Pending:t}=await b.getQueue();if(e.length>0||t.length>0)return void Re.error(Z("Clean Failed")+":"+Z("Please stop all running tasks before cleaning GPU"));200==(await b.fetchApi("/easyuse/cleangpu",{method:"POST"})).status?Re.success(Z("Clean SuccessFully")):Re.error(Z("Clean Failed"))}catch(e){}};let Ke=[];function Je(e,t,n,s,o){var i=LGraphCanvas.active_canvas,a=i.getCanvasWindow(),l=i.graph;if(l)return function e(t,s){var r=LiteGraph.getNodeTypesCategories(i.filter||l.filter).filter((function(e){return e.startsWith(t)})),d=[];r.map((function(n){if(n){var s=new RegExp("^("+t+")"),o=n.replace(s,"").split("/")[0],i=""===t?o+"/":t+o+"/",a=o;-1!=a.indexOf("::")&&(a=a.split("::")[1]),-1===d.findIndex((function(e){return e.value===i}))&&d.push({value:i,content:a,has_submenu:!0,callback:function(t,n,s,o){e(t.value,o)}})}})),LiteGraph.getNodeTypesInCategory(t.slice(0,-1),i.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,n,s){var a=s.getFirstEvent();i.graph.beforeChange();var l=LiteGraph.createNode(e.value);l&&(l.pos=i.convertEventToCanvasOffset(a),i.graph.add(l)),o&&o(l),i.graph.afterChange()}};d.push(t)}}));const u=I("EasyUse.ContextMenu.NodesSort",null,!0);""===t&&u&&(d=function(e){let t=[],n=[];return e.forEach((e=>{(null==e?void 0:e.value)&&F.includes(e.value.split("/")[0])?t.push(e):n.push(e)})),[{title:Z("ComfyUI Basic"),is_category_title:!0},...t,{title:Z("Others A~Z"),is_category_title:!0},...n.sort(((e,t)=>e.content.localeCompare(t.content)))]}(d)),new LiteGraph.ContextMenu(d,{event:n,parentMenu:s},a)}("",s),!1}w.registerExtension({name:"Comfy.EasyUse.ContextMenu",async setup(){LGraphCanvas.onMenuAdd=Je;const e=I("EasyUse.ContextMenu.ModelsThumbnailsLimit",null,500),t=await b.fetchApi(`/easyuse/models/thumbnail?limit=${e}`);if(200===t.status){let e=await t.json();Ke=e}else Re.error(Z("Too many thumbnails, have closed the display"));const n=LiteGraph.ContextMenu;LiteGraph.ContextMenu=function(e,t){if(I("EasyUse.ContextMenu.SubDirectories",null,!1)&&(null==t?void 0:t.callback)&&!e.some((e=>"string"!=typeof e))){const s=function(e,t){const n=e,s=[...n],o={},i=[],a=[],l=["ckpt","pt","bin","pth","safetensors"];if((null==e?void 0:e.length)>0){const t=et(e[e.length-1]);if(!l.includes(t))return null}for(const r of n){const e=r.indexOf("/")>-1?"/":"\\",t=r.split(e);if(t.length>1){const n=t.shift();o[n]=o[n]||[],o[n].push(t.join(e))}else"CHOOSE"===r||r.startsWith("DISABLE ")?i.push(r):a.push(r)}if(Object.values(o).length>0){const e=t.callback;t.callback=null;const n=(t,n)=>{["None","无","無","なし"].includes(t.content)?e("None",n):e(s.find((e=>e.endsWith(t.content)),n))},r=(e,t="")=>{const s=t?t+"\\"+Qe(e):Qe(e),o=et(e),i=(new Date).getTime();let a,r="";if(l.includes(o))for(let n=0;n<Ke.length;n++){let e=Ke[n];if(s&&e&&-1!=e.indexOf(s)){r=Ke[n];break}}const d=I("EasyUse.ContextMenu.ModelsThumbnails",null,!1);if(r&&d){const t=`${window.location.protocol}//${window.location.host}`,n=r.replace(":","%3A").replace(/\\/g,"/");a=L("div.comfyui-easyuse-contextmenu-model",{},[L("span",{},e+" *"),L("img",{src:`${t}/${n}?t=${i}`})])}else a=L("div.comfyui-easyuse-contextmenu-model",{},[L("span",{},e)]);return{content:e,title:a.outerHTML,callback:n}},d=[],u=(e,t)=>{let n=[],s=[];const i=e.map((e=>{const i={},a=e.indexOf("/")>-1?"/":"\\",l=e.split(a);if(l.length>1){const e=l.shift();i[e]=i[e]||[],i[e].push(l.join(a))}if(Object.values(o).length>0){let t=Object.keys(i)[0];t&&i[t]?n.push({key:t,value:i[t][0]}):s.push(r(e,t))}return r(e,t)}));if(n.length>0){let e={};return n.forEach((t=>{e[t.key]=e[t.key]||[],e[t.key].push(t.value)})),[...Object.entries(e).map((e=>({content:e[0],has_submenu:!0,callback:()=>{},submenu:{options:u(e[1],e[0])}}))),...s]}return i};for(const[t,s]of Object.entries(o))d.push({content:t,has_submenu:!0,callback:()=>{},submenu:{options:u(s,t)}});return d.push(...a.map((e=>r(e,"")))),i.length>0&&d.push(...i.map((e=>r(e,"")))),d}return null}(e,t);return s?n.call(this,s,t):n.apply(this,[...arguments])}return t.parentMenu||t.extra||t.scale||t.hasOwnProperty("extra")&&(e.unshift(null),s=window.location.host,["192.168.","10.","127.",/^172\.((1[6-9]|2[0-9]|3[0-1])\.)/].some((e=>"string"==typeof e?s.startsWith(e):e.test(s)))&&e.unshift({content:`<i class="mdi mdi-refresh-circle comfyui-easyuse-error" style="margin-right:2px;font-size:16px"></i>${Z("Reboot ComfyUI")}`,callback:e=>(async()=>{if(confirm(Z("Are you sure you'd like to reboot the server?")))try{b.fetchApi("/easyuse/reboot")}catch(e){}})()}),e.unshift({content:`<i class="mdi mdi-rocket comfyui-easyuse-theme" style="margin-right:2px;font-size:16px"></i>${Z("Cleanup Of VRAM Usage")}`,callback:e=>Ze()})),n.apply(this,[...arguments]);var s},LiteGraph.ContextMenu.prototype=n.prototype,I("EasyUse.ContextMenu.NodesSort",null,!0)&&(LiteGraph.ContextMenu.prototype.addItem=qe)}});const $e=e=>e&&"object"==typeof e&&"image"in e&&e.content;function qe(e,t,n){var s=this;n=n||{};var o=document.createElement("div");o.className="litemenu-entry submenu";var i,a=!1;function l(e){var t=this.value,o=!0;(s.current_submenu&&s.current_submenu.close(e),n.callback)&&(!0===n.callback.call(this,t,n,e,s,n.node)&&(o=!1));if(t){if(t.callback&&!n.ignore_item_callbacks&&!0!==t.disabled)!0===t.callback.call(this,t,n,e,s,n.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:n.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&&$e(t)&&(null==t?void 0:t.image)&&!t.submenu&&(o.textContent+=" *",L("div.pysssss-combo-image",{parent:o,style:{backgroundImage:`url(/pysssss/view/${i=t.image,encodeURIComponent(i).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`))})`}})),this.root.appendChild(o),a||o.addEventListener("click",l),!a&&n.autoopen&&LiteGraph.pointerListenerAdd(o,"enter",(function(e){var t=this.value;if(!t||!t.has_submenu)return;l.call(this,e)})),o}function Qe(e){return null==e?void 0:e.substring(0,e.lastIndexOf("."))}function et(e){return null==e?void 0:e.substring(e.lastIndexOf(".")+1)}class tt extends E{constructor(){super(),this.element.classList.add("easyuse-model-metadata")}show(e){super.show(L("div",Object.keys(e).map((t=>L("div",[L("label",{textContent:t}),L("span",{textContent:e[t]})])))))}}class nt extends E{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 n=b.fetchApi("/easyuse/metadata/"+encodeURIComponent(`${e}/${t}`));this.info=L("div",{style:{flex:"auto"}}),this.imgCurrent=0,this.imgList=L("div.easyuse-preview-list",{style:{display:"none"}}),this.imgWrapper=L("div.easyuse-preview",[L("div.easyuse-preview-group",[this.imgList])]),this.main=L("main",{style:{display:"flex"}},[this.imgWrapper,this.info]),this.content=L("div.easyuse-model-content",[L("div.easyuse-model-header",[L("h2",{textContent:this.name})]),this.main]);const s=L("div",{textContent:"ℹ️ Loading...",parent:this.content});super.show(this.content),this.metadata=await(await n).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=L("button",{type:"button",textContent:"View raw metadata",disabled:"disabled",style:{opacity:.5,cursor:"not-allowed"},onclick:e=>{this.metadata&&(new tt).show(this.metadata)}}),e.unshift(this.viewMetadata),e}parseNote(){if(!this.customNotes)return[];let e=[];const t=new RegExp("(\\bhttps?:\\/\\/[^\\s]+)","g");let n,s=0;do{let o;n=t.exec(this.customNotes);let i=0;n?(o=n.index,i=n.index+n[0].length):o=this.customNotes.length;let a=this.customNotes.substring(s,o);a&&(a=a.replaceAll("\n","<br>"),e.push(L("span",{innerHTML:a}))),n&&e.push(L("a",{href:n[0],textContent:n[0],target:"_blank"})),s=i}while(n);return e}addInfoEntry(e,t){return L("p",{parent:this.info},["string"==typeof e?L("label",{textContent:e+": "}):e,"string"==typeof t?L("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=L("span",{textContent:"ℹ️ Loading..."});return this.addInfoEntry(L("label",[L("img",{style:{width:"18px",position:"relative",top:"3px",margin:"0 5px 0 0"},src:"https://civitai.com/favicon.ico"}),L("span",{textContent:"Civitai: "})]),t),e.then((e=>{var t,n;this.imgWrapper.style.display="block";let s=this.element.querySelector(".easyuse-model-header");s&&s.replaceChildren(L("h2",{textContent:this.name}),L("div.easyuse-model-header-remark",[L("h5",{textContent:Z("Updated At:")+O(new Date(e.updatedAt),"yyyy/MM/dd")}),L("h5",{textContent:Z("Created At:")+O(new Date(e.updatedAt),"yyyy/MM/dd")})]));let o=null,i=this.parseNote.call(this),a=Z("✏️ Edit"),l=L("div.easyuse-model-detail-textarea",[L("p",(null==i?void 0:i.length)>0?i:{textContent:Z("No notes")})]);if(i&&0!=i.length?l.classList.remove("empty"):l.classList.add("empty"),this.info.replaceChildren(L("div.easyuse-model-detail",[L("div.easyuse-model-detail-head.flex-b",[L("span",Z("Notes")),L("a",{textContent:a,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(Z("Saving Notes...")),this.customNotes=o.value;const e=await b.fetchApi("/easyuse/metadata/notes/"+encodeURIComponent(`${this.type}/${this.name}`),{method:"POST",body:this.customNotes});if(toast.hideLoading(),200!==e.status)return toast.error(Z("Saving Failed")),void alert(`Error saving notes (${e.status}) ${e.statusText}`);toast.success(Z("Saving Succeed")),i=this.parseNote.call(this),l.replaceChildren(L("p",(null==i?void 0:i.length)>0?i:{textContent:Z("No notes")})),o.value?l.classList.remove("empty"):l.classList.add("empty")}else l.replaceChildren(L("p",{textContent:Z("No notes")})),l.classList.add("empty");e.target.textContent=a,o.remove(),o=null}else e.target.textContent="💾 Save",o=L("textarea",{placeholder:Z("Type your notes here"),style:{width:"100%",minWidth:"200px",minHeight:"50px",height:"100px"},textContent:this.customNotes}),l.replaceChildren(o),o.focus()}})]),l]),L("div.easyuse-model-detail",[L("div.easyuse-model-detail-head",{textContent:Z("Details")}),L("div.easyuse-model-detail-body",[L("div.easyuse-model-detail-item",[L("div.easyuse-model-detail-item-label",{textContent:Z("Type")}),L("div.easyuse-model-detail-item-value",{textContent:e.model.type})]),L("div.easyuse-model-detail-item",[L("div.easyuse-model-detail-item-label",{textContent:Z("BaseModel")}),L("div.easyuse-model-detail-item-value",{textContent:e.baseModel})]),L("div.easyuse-model-detail-item",[L("div.easyuse-model-detail-item-label",{textContent:Z("Download")}),L("div.easyuse-model-detail-item-value",{textContent:(null==(t=e.stats)?void 0:t.downloadCount)||0})]),L("div.easyuse-model-detail-item",[L("div.easyuse-model-detail-item-label",{textContent:Z("Trained Words")}),L("div.easyuse-model-detail-item-value",{textContent:(null==e?void 0:e.trainedWords.join(","))||"-"})]),L("div.easyuse-model-detail-item",[L("div.easyuse-model-detail-item-label",{textContent:Z("Source")}),L("div.easyuse-model-detail-item-value",[L("label",[L("img",{style:{width:"14px",position:"relative",top:"3px",margin:"0 5px 0 0"},src:"https://civitai.com/favicon.ico"}),L("a",{href:"https://civitai.com/models/"+e.modelId,textContent:"View "+e.model.name,target:"_blank"})])])])])])),null==(n=e.images)?void 0:n.length){this.imgCurrent=0,this.isSaving=!1,e.images.map((e=>e.url&&this.imgList.appendChild(L("div.easyuse-preview-slide",[L("div.easyuse-preview-slide-content",[L("img",{src:e.url}),L("div.save",{textContent:"Save as preview",onclick:async()=>{if(this.isSaving)return;this.isSaving=!0,toast.showLoading(Z("Saving Preview..."));const t=await(await fetch(e.url)).blob(),n="temp_preview."+new URL(e.url).pathname.split(".")[1],s=new FormData;s.append("image",new File([t],n)),s.append("overwrite","true"),s.append("type","temp");if(200!==(await b.fetchApi("/upload/image",{method:"POST",body:s})).status)return this.isSaving=!1,toast.error(Z("Saving Failed")),toast.hideLoading(),void alert(`Error saving preview (${req.status}) ${req.statusText}`);await b.fetchApi("/easyuse/save/"+encodeURIComponent(`${this.type}/${this.name}`),{method:"POST",body:JSON.stringify({filename:n,type:"temp"}),headers:{"content-type":"application/json"}}).then((e=>{toast.success(Z("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=L("button.left",{parent:this.imgWrapper,style:{display:e.images.length<=2?"none":"block"},innerHTML:'<svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" width="16" height="16" style="transform: rotate(90deg);"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg>',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=L("button.right",{parent:this.imgWrapper,style:{display:e.images.length<=2?"none":"block"},innerHTML:'<svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" width="16" height="16" style="transform: rotate(-90deg);"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg>',onclick:()=>{if(!(e.images.length<=2))if(t.imgList.classList.remove("no-transition"),t.imgCurrent>=e.images.length/2-1){t.imgCurrent=0;const n=e.images.length/2;this.slides[0].style.transform="translate3d("+(660*n).toString()+"px, 0px, 0px)",this.slides[1].style.transform="translate3d("+(660*n).toString()+"px, 0px, 0px)",t.imgList.style.transform="translate3d("+(-660*n).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&&L("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 st extends nt{async addInfo(){await this.addCivitaiInfo()}}class ot extends nt{getTagFrequency(){if(!this.metadata.ss_tag_frequency)return[];const e=JSON.parse(this.metadata.ss_tag_frequency),t={};for(const n in e){const s=e[n];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:n,count:s}of Object.values(t.buckets))e.push([s,`${n.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 n=t.split(","),s=n[0].replace("(",""),o=n[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=>L("li.easyuse-model-tag",{dataset:{tag:e[0]},$:e=>{e.onclick=()=>{e.classList.toggle("easyuse-model-tag--selected")}}},[L("p",{textContent:e[0]}),L("span",{textContent:e[1]})])))}addTags(){let e,t=this.getTagFrequency();if(null==t?void 0:t.length){const n=t.length;let s;n>500&&(t=t.slice(0,500),e=L("p",[L("span",{textContent:"⚠️ Only showing first 500 tags "}),L("a",{href:"#",textContent:`Show all ${n}`,onclick:()=>{s.replaceChildren(...this.getTagList(this.getTagFrequency())),e.remove()}})])),s=L("ol.easyuse-model-tags-list",this.getTagList(t)),this.tags=L("div",[s])}else this.tags=L("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&&L("div",{parent:this.content,innerHTML:t.description,style:{maxHeight:"250px",overflow:"auto"}})}createButtons(){const e=super.createButtons();function t(e,t){const n=L("textarea",{parent:document.body,style:{position:"fixed"},textContent:t.map((e=>e.dataset.tag)).join(", ")});n.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(n)}}return e.unshift(L("button",{type:"button",textContent:"Copy Selected",onclick:e=>{t(e,[...this.tags.querySelectorAll(".easyuse-model-tag--selected")])}}),L("button",{type:"button",textContent:"Copy All",onclick:e=>{t(e,[...this.tags.querySelectorAll(".easyuse-model-tag")])}})),e}}const it={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 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","easy loadImage","easy 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"}},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"}}};function at(e,t,n){return function(){!function(e,t,n){var s;const o=LiteGraph.createNode(t);if(o){if(w.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,i;if(null==(s=null==(t=it[n])?void 0:t.widget)?void 0:s[e.name]){const t=it[n].widget[e.name];if(t&&o.widgets){const n=(i=t,o.widgets.find((e=>"object"==typeof i?i.includes(e.name):e.name===i)));n&&(n.value=e.value,"seed_num"==e.name&&(n.linkedWidgets[0].value=e.linkedWidgets[0].value),"converted-widget"==e.type&&ht(o,n,e))}}})),e.inputs&&e.inputs.forEach(((t,s)=>{var i,a,l;if(t&&t.link&&(null==(a=null==(i=it[n])?void 0:i.input)?void 0:a[t.name])){const s=null==(l=it[n])?void 0:l.input[t.name];if(null===s)return;const i=o.findInputSlot(s);if(-1!==i){const n=e.graph.links[t.link];if(n){const t=e.graph.getNodeById(n.origin_id);t&&t.connect(n.origin_slot,o,i)}}}})),e.outputs&&e.outputs.forEach(((t,s)=>{var i,a;if(t&&t.links&&(null==(a=null==(i=it[n])?void 0:i.output)?void 0:a[t.name])){const s=it[n].output[t.name];if(null===s)return;const i=o.findOutputSlot(s);-1!==i&&t.links.forEach((t=>{const n=e.graph.links[t];if(n){const t=e.graph.getNodeById(n.target_id);t&&o.connect(i,t,n.target_slot)}}))}})),w.graph.remove(e),"easy fullkSampler"==o.type){const e=o.outputs[0].links;if(e&&e[0]){const t=w.graph._nodes.find((t=>t.inputs&&t.inputs[0]&&t.inputs[0].link==e[0]));t&&w.graph.remove(t)}}else if(it.preSampling.nodes.includes(o.type)){const e=o.outputs[0].links;if(!e||!e[0]){const e=LiteGraph.createNode("easy kSampler");w.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]])}}(e,t,n)}}const lt=(e,t)=>{const n=e.prototype.getExtraMenuOptions;e.prototype.getExtraMenuOptions=function(){const e=n.apply(this,arguments);return t.apply(this,arguments),e}},rt=(e,t,n,s,o=!0)=>{lt(s,(function(s,i){i.unshift({content:e,has_submenu:o,callback:(e,s,o,i,a)=>dt(e,s,o,i,a,t,n)}),"loaders"==t&&(i.unshift({content:Z("💎 View Lora Info..."),callback:(e,t,n,s,o)=>{let i=o.widgets.find((e=>"lora_name"==e.name)).value;i&&"None"!=i&&new ot(i).show("loras",i)}}),i.unshift({content:Z("💎 View Checkpoint Info..."),callback:(e,t,n,s,o)=>{let i=o.widgets[0].value;i&&"None"!=i&&new st(i).show("checkpoints",i)}}))}))},dt=(e,t,n,s,o,i,a)=>{const l=[];return a.map((e=>{o.type!==e&&l.push({content:`${e}`,callback:at(o,e,i)})})),new LiteGraph.ContextMenu(l,{event:n,callback:null,parentMenu:s,node:o}),!1},ut="converted-widget",ct=Symbol();function pt(e,t,n=""){if(t.origType=t.type,t.origComputeSize=t.computeSize,t.origSerializeValue=t.serializeValue,t.computeSize=()=>[0,-4],t.type=ut+n,t.serializeValue=()=>{if(!e.inputs)return;let n=e.inputs.find((e=>{var n;return(null==(n=e.widget)?void 0:n.name)===t.name}));return n&&n.link?t.origSerializeValue?t.origSerializeValue():t.value:void 0},t.linkedWidgets)for(const s of t.linkedWidgets)pt(e,s,":"+t.name)}function ht(e,t,n){pt(e,t);const{type:s}=function(e){let t=e[0];t instanceof Array&&(t="COMBO");return{type:t}}(n),o=e.size;t.options&&t.options.forceInput||e.addInput(t.name,s,{widget:{name:t.name,[ct]:()=>n}});for(const i of e.widgets)i.last_y+=LiteGraph.NODE_SLOT_HEIGHT;e.setSize([Math.max(o[0],e.size[0]),Math.max(o[1],e.size[1])])}const mt=function(e){var t,n,s,o;const i=e.constructor.type,a=e.properties.origVals||{},l=a.title||e.title,r=a.color||e.color,d=a.bgcolor||e.bgcolor,u=e,c={size:[...e.size],color:r,bgcolor:d,pos:[...e.pos]};let p=[],h=[];if(e.inputs)for(const y of e.inputs)if(y.link){const t=y.name,n=e.findInputSlot(t),s=e.getInputNode(n),o=e.getInputLink(n);p.push([o.origin_slot,s,t])}if(e.outputs)for(const y of e.outputs)if(y.links){const e=y.name;for(const t of y.links){const n=graph.links[t],s=graph._nodes_by_id[n.target_id];h.push([e,s,n.target_slot])}}w.graph.remove(e);const m=w.graph.add(LiteGraph.createNode(i,l,c));function g(){if(u.widgets)for(let e of u.widgets)if("converted-widget"===e.type){const t=m.widgets.find((t=>t.name===e.name));for(let n of u.inputs)n.name===e.name&&ht(m,t,n.widget)}for(let e of p){const[t,n,s]=e;n.connect(t,m.id,s)}for(let e of h){const[t,n,s]=e;m.connect(t,n,s)}}let f=u.widgets_values;if(!f&&(null==(t=m.widgets)?void 0:t.length)>0)return m.widgets.forEach(((e,t)=>{const n=u.widgets[t];e.name===n.name&&e.type===n.type&&(e.value=n.value)})),void g();if(f){let e=function(e,t){var n,s,o,i,a,l;if(!0===e||!1===e){if((null==(n=t.options)?void 0:n.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==(i=t.options)?void 0:i.max))return{value:e,pass:!0}}else{if(null==(l=null==(a=t.options)?void 0:a.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 i=(null==f?void 0:f.length)<=(null==(n=m.widgets)?void 0:n.length);let a=i?0:f.length-1;const l=n=>{var s;const o=u.widgets[n];let l=m.widgets[n];if(l.name===o.name&&l.type===o.type){for(;(i?a<f.length:a>=0)&&!t;){let{value:t,pass:n}=e(f[a],l);if(n&&null!==t){l.value=t;break}a+=i?1:-1}a++,i||(a=f.length-((null==(s=m.widgets)?void 0:s.length)-1-n))}};if(i&&(null==(s=m.widgets)?void 0:s.length)>0)for(let n=0;n<m.widgets.length;n++)l(n);else if((null==(o=m.widgets)?void 0:o.length)>0)for(let n=m.widgets.length-1;n>=0;n--)l(n)}g()};w.registerExtension({name:"Comfy.EasyUse.ExtraMenu",async beforeRegisterNodeDef(e,t,n){lt(e,(function(e,n){n.unshift({content:Z("🔃 Reload Node"),callback:(e,t,n,s,o)=>{let i=LGraphCanvas.active_canvas;if(!i.selected_nodes||Object.keys(i.selected_nodes).length<=1)mt(o);else for(let a in i.selected_nodes)mt(i.selected_nodes[a])}}),"easy ckptNames"==t.name&&n.unshift({content:Z("💎 View Checkpoint Info..."),callback:(e,t,n,s,o)=>{o.widgets[0].value}})}));for(const s in it)it[s].nodes.includes(t.name)&&rt(`↪️ Swap ${it[s].category}`,s,it[s].nodes,e)}});const gt=LiteGraph.LGraphNode,ft="➡️";w.registerExtension({name:"easy setNode",registerCustomNodes(){class e extends gt{constructor(t){super("Set"),f(this,"defaultVisibility",!0),f(this,"serialize_widgets",!0),this.properties||(this.properties={previousName:""}),this.properties.showOutputText=e.defaultVisibility;const n=this;n.color=LGraphCanvas.node_colors.blue.color,this.addWidget("text","Constant","",((e,t,s,o,i)=>{n.validateName(n.graph),""!==this.widgets[0].value&&(this.title=ft+this.widgets[0].value),this.update(),this.properties.previousName=this.widgets[0].value}),{}),this.addInput("*","*"),this.onConnectionsChange=function(e,t,s,o,i){if(1!=e||s||(this.inputs[t].type="*",this.inputs[t].name="*",this.title="Set"),o&&n.graph&&1==e&&s){const e=n.graph._nodes.find((e=>e.id==o.origin_id)).outputs[o.origin_slot],t=e.type,s=n.is_auto_link?this.widgets[0].value:e.name;"Set"===this.title&&(this.title=ft+s,this.widgets[0].value=s),"*"===this.widgets[0].value&&(this.widgets[0].value=s),this.validateName(n.graph),this.inputs[0].type=t,this.inputs[0].name=s,setTimeout((e=>{this.title=ft+this.widgets[0].value}),1)}this.update()},this.validateName=function(e){let t=n.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=n.widgets[0].value+s),s++}while(o.length>0);n.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(n.graph){this.findGetters(n.graph).forEach((e=>{e.setType(this.inputs[0].type)})),this.widgets[0].value&&this.findGetters(n.graph,!0).forEach((e=>{e.setName(this.widgets[0].value)}));n.graph._nodes.filter((e=>"easy getNode"==e.type)).forEach((e=>{e.setComboValues&&e.setComboValues()}))}},this.findGetters=function(e,t){const n=t?this.properties.previousName:this.widgets[0].value;return e._nodes.filter((e=>"easy getNode"==e.type&&e.widgets[0].value===n&&""!=n))},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"}}),w.registerExtension({name:"easy getNode",registerCustomNodes(){class e extends gt{constructor(t){super("Get"),f(this,"defaultVisibility",!0),f(this,"serialize_widgets",!0),this.properties||(this.properties={}),this.properties.showOutputText=e.defaultVisibility;const n=this;n.color=LGraphCanvas.node_colors.blue.color,this.addWidget("combo","Constant","",(e=>{this.onRename()}),{values:()=>n.graph._nodes.filter((e=>"easy setNode"==e.type)).map((e=>e.widgets[0].value)).sort()}),this.addOutput("*","*"),this.onConnectionsChange=function(e,t,n,s,o){this.validateLinks(),2!=e||n?(this.onRename(),setTimeout((e=>{this.title="⬅️"+this.widgets[0].value}),1)):(this.outputs[t].type="*",this.outputs[t].name="*",this.title="Get")},this.setName=function(e){n.widgets[0].value=e,n.onRename(),n.serialize()},this.onRename=function(e=0){const t=this.findSetter(n.graph);if(t){const n=t.inputs[0].type,s=t.inputs[0].name;this.setType(n,s),this.outputs[e].type=n,this.outputs[e].name=s,this.title="⬅️"+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=n.graph.links[e];t&&t.type!=this.outputs[0].type&&"*"!=t.type&&n.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 n=t.inputs[e];return this.graph.links[n.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"}}),b.addEventListener("easyuse-global-seed",(function(e){let t=app.graph._nodes_by_id;for(let n in t){let s=t[n];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])}}}));const yt=b.queuePrompt;b.queuePrompt=async function(e,{output:t,workflow:n}){n.seed_widgets={};for(let s in app.graph._nodes_by_id){let e=app.graph._nodes_by_id[s].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||(n.seed_widgets[s]=parseInt(t))}return await yt.call(b,e,{output:t,workflow:n})};const _t=["easy imageSave","easy fullkSampler","easy kSampler","easy kSamplerTiled","easy kSamplerInpainting","easy kSamplerDownscaleUnet","easy kSamplerSDTurbo","easy detailerFix"];w.registerExtension({name:"Comfy.EasyUse.SaveImageExtraOutput",async beforeRegisterNodeDef(e,t,n){if(_t.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=()=>C(n,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 vt=["easy wildcards","easy positive","easy negative","easy stylesSelector","easy promptConcat","easy promptReplace"],wt=["easy preSampling","easy preSamplingAdvanced","easy preSamplingNoiseIn","easy preSamplingCustom","easy preSamplingDynamicCFG","easy preSamplingSdTurbo","easy preSamplingLayerDiffusion"],bt=["easy kSampler","easy kSamplerTiled","easy kSamplerInpainting","easy kSamplerDownscaleUnet","easy kSamplerSDTurbo"],Lt=["easy controlnetLoader","easy controlnetLoaderADV"],Et=["easy instantIDApply","easy instantIDApplyADV"],St=["easy ipadapterApply","easy ipadapterApplyADV","easy ipadapterApplyFaceIDKolors","easy ipadapterStyleComposition"],Ct=["easy pipeIn","easy pipeOut","easy pipeEdit"],At=["easy XYPlot","easy XYPlotAdvanced"],kt=["easy setNode"],It=["Reroute","RescaleCFG","LoraLoaderModelOnly","LoraLoader","FreeU","FreeU_v2",...St,...kt],xt={"easy seed":{from:{INT:["Reroute",...wt,"easy fullkSampler"]}},"easy positive":{from:{STRING:["Reroute",...vt]}},"easy negative":{from:{STRING:["Reroute",...vt]}},"easy wildcards":{from:{STRING:["Reroute","easy showAnything",...vt]}},"easy stylesSelector":{from:{STRING:["Reroute","easy showAnything",...vt]}},"easy promptConcat":{from:{STRING:["Reroute","easy showAnything",...vt]}},"easy promptReplace":{from:{STRING:["Reroute","easy showAnything",...vt]}},"easy fullLoader":{from:{PIPE_LINE:["Reroute",...wt,"easy fullkSampler",...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy a1111Loader":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy comfyLoader":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy hunyuanDiTLoader":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy kolorsLoader":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy pixArtLoader":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy svdLoader":{from:{PIPE_LINE:["Reroute","easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG",...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy zero123Loader":{from:{PIPE_LINE:["Reroute","easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG",...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy sv3dLoader":{from:{PIPE_LINE:["Reroute","easy preSampling","easy preSamplingAdvanced","easy preSamplingDynamicCFG",...Ct,...kt],MODEL:It},to:{STRING:["Reroute",...vt]}},"easy preSampling":{from:{PIPE_LINE:["Reroute",...bt,...Ct,...Lt,...At,...kt]}},"easy preSamplingAdvanced":{from:{PIPE_LINE:["Reroute",...bt,...Ct,...Lt,...At,...kt]}},"easy preSamplingDynamicCFG":{from:{PIPE_LINE:["Reroute",...bt,...Ct,...Lt,...At,...kt]}},"easy preSamplingCustom":{from:{PIPE_LINE:["Reroute",...bt,...Ct,...Lt,...At,...kt]}},"easy preSamplingLayerDiffusion":{from:{PIPE_LINE:["Reroute","easy kSamplerLayerDiffusion",...bt,...Ct,...Lt,...At,...kt]}},"easy preSamplingNoiseIn":{from:{PIPE_LINE:["Reroute",...bt,...Ct,...Lt,...At,...kt]}},"easy fullkSampler":{from:{PIPE_LINE:["Reroute",...Ct.reverse(),"easy preDetailerFix","easy preMaskDetailerFix",...wt,...kt]}},"easy kSampler":{from:{PIPE_LINE:["Reroute",...Ct.reverse(),"easy preDetailerFix","easy preMaskDetailerFix","easy hiresFix",...wt,...kt]}},"easy controlnetLoader":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt]}},"easy controlnetLoaderADV":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt]}},"easy instantIDApply":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{COMBO:["Reroute","easy promptLine"]}},"easy instantIDApplyADV":{from:{PIPE_LINE:["Reroute",...wt,...Lt,...Et,...Ct,...kt],MODEL:It},to:{COMBO:["Reroute","easy promptLine"]}},"easy ipadapterApply":{to:{COMBO:["Reroute","easy promptLine"]}},"easy ipadapterApplyADV":{to:{STRING:["Reroute","easy sliderControl",...vt],COMBO:["Reroute","easy promptLine"]}},"easy ipadapterStyleComposition":{to:{COMBO:["Reroute","easy promptLine"]}},"easy preDetailerFix":{from:{PIPE_LINE:["Reroute","easy detailerFix",...Ct,...kt]},to:{PIPE_LINE:["Reroute","easy ultralyticsDetectorPipe","easy samLoaderPipe","easy kSampler","easy fullkSampler"]}},"easy preMaskDetailerFix":{from:{PIPE_LINE:["Reroute","easy detailerFix",...Ct,...kt]}},"easy samLoaderPipe":{from:{PIPE_LINE:["Reroute","easy preDetailerFix",...Ct,...kt]}},"easy ultralyticsDetectorPipe":{from:{PIPE_LINE:["Reroute","easy preDetailerFix",...Ct,...kt]}},"easy cascadeLoader":{from:{PIPE_LINE:["Reroute","easy fullCascadeKSampler","easy preSamplingCascade",...Lt,...Ct,...kt],MODEL:It.filter((e=>!St.includes(e)))}},"easy fullCascadeKSampler":{from:{PIPE_LINE:["Reroute","easy preSampling","easy preSamplingAdvanced",...Ct,...kt]}},"easy preSamplingCascade":{from:{PIPE_LINE:["Reroute","easy cascadeKSampler",...Ct,...kt]}},"easy cascadeKSampler":{from:{PIPE_LINE:["Reroute","easy preSampling","easy preSamplingAdvanced",...Ct,...kt]}}};w.registerExtension({name:"Comfy.EasyUse.Suggestions",async setup(e){LGraphCanvas.prototype.createDefaultNodeForSlot=function(e){e=e||{};var t,n=Object.assign({nodeFrom:null,slotFrom:null,nodeTo:null,slotTo:null,position:[],nodeType:null,posAdd:[0,0],posSizeFix:[0,0]},e),s=n.nodeFrom&&null!==n.slotFrom,o=!s&&n.nodeTo&&null!==n.slotTo;if(!s&&!o)return!1;if(!n.nodeType)return!1;var i=s?n.nodeFrom:n.nodeTo,a=s?n.slotFrom:n.slotTo,l=i.type,r=!1;switch(typeof a){case"string":r=s?i.findOutputSlot(a,!1):i.findInputSlot(a,!1),a=s?i.outputs[a]:i.inputs[a];break;case"object":r=s?i.findOutputSlot(a.name):i.findInputSlot(a.name);break;case"number":r=a,a=s?i.outputs[a]:i.inputs[a];break;default:return!1}var d=a.type==LiteGraph.EVENT?"_event_":a.type,u=s?LiteGraph.slot_types_default_out:LiteGraph.slot_types_default_in;if(u&&u[d]){a.link;let e=!1;const o=s?"from":"to";if(xt[l]&&xt[l][o]&&(null==(t=xt[l][o][d])?void 0:t.length)>0){for(var c in xt[l][o][d])if(n.nodeType==xt[l][o][d][c]||"AUTO"==n.nodeType){e=xt[l][o][d][c];break}}else if("object"==typeof u[d]||"array"==typeof u[d]){for(var c in u[d])if(n.nodeType==u[d][c]||"AUTO"==n.nodeType){e=u[d][c];break}}else n.nodeType!=u[d]&&"AUTO"!=n.nodeType||(e=u[d]);if(e){var p=!1;"object"==typeof e&&e.node&&(p=e,e=e.node);var h=LiteGraph.createNode(e);if(h){if(p){if(p.properties)for(var m in p.properties)h.addProperty(m,p.properties[m]);if(p.inputs)for(var m in h.inputs=[],p.inputs)h.addOutput(p.inputs[m][0],p.inputs[m][1]);if(p.outputs)for(var m in h.outputs=[],p.outputs)h.addOutput(p.outputs[m][0],p.outputs[m][1]);p.title&&(h.title=p.title),p.json&&h.configure(p.json)}return this.graph.add(h),h.pos=[n.position[0]+n.posAdd[0]+(n.posSizeFix[0]?n.posSizeFix[0]*h.size[0]:0),n.position[1]+n.posAdd[1]+(n.posSizeFix[1]?n.posSizeFix[1]*h.size[1]:0)],s?n.nodeFrom.connectByType(r,h,d):n.nodeTo.connectByTypeOutput(r,h,d),!0}}}return!1},LGraphCanvas.prototype.showConnectionMenu=function(e){e=e||{};var t,n=Object.assign({nodeFrom:null,slotFrom:null,nodeTo:null,slotTo:null,e:null},e),s=this,o=n.nodeFrom&&n.slotFrom,i=!o&&n.nodeTo&&n.slotTo;if(!o&&!i)return!1;var a=o?n.nodeFrom:n.nodeTo,l=o?n.slotFrom:n.slotTo,r=!1;switch(typeof l){case"string":r=o?a.findOutputSlot(l,!1):a.findInputSlot(l,!1),l=o?a.outputs[l]:a.inputs[l];break;case"object":r=o?a.findOutputSlot(l.name):a.findInputSlot(l.name);break;case"number":r=l,l=o?a.outputs[l]:a.inputs[l];break;default:return!1}var d=["Add Node",null];s.allow_searchbox&&(d.push("Search"),d.push(null));var u=l.type==LiteGraph.EVENT?"_event_":l.type,c=o?LiteGraph.slot_types_default_out:LiteGraph.slot_types_default_in,p=a.type;if(c&&c[u]){const e=o?"from":"to";if(xt[p]&&xt[p][e]&&(null==(t=xt[p][e][u])?void 0:t.length)>0)for(var h in xt[p][e][u])d.push(xt[p][e][u][h]);else if("object"==typeof c[u]||"array"==typeof c[u])for(var h in c[u])d.push(c[u][h]);else d.push(c[u])}var m=new LiteGraph.ContextMenu(d,{event:n.e,title:(l&&""!=l.name?l.name+(u?" | ":""):"")+(l&&u?u:""),callback:function(e,t,i){switch(e){case"Add Node":LGraphCanvas.onMenuAdd(null,null,i,m,(function(e){o?n.nodeFrom.connectByType(r,e,u):n.nodeTo.connectByTypeOutput(r,e,u)}));break;case"Search":o?s.showSearchBox(i,{node_from:n.nodeFrom,slot_from:l,type_filter_in:u}):s.showSearchBox(i,{node_to:n.nodeTo,slot_from:l,type_filter_out:u});break;default:s.createDefaultNodeForSlot(Object.assign(n,{position:[n.e.canvasX,n.e.canvasY],nodeType:e}))}}});return!1}}}),w.registerExtension({name:"Comfy.EasyUse.TimeTaken",setup(){const e=new Map;let t=0;b.addEventListener("executing",(n=>{if(!I("EasyUse.Nodes.Runtime",null,!0))return;const s=(null==n?void 0:n.node)||(null==n?void 0:n.detail)||null,o=ve(s);o&&(o.executionDuration="");const i=e.get(t);if(e.delete(t),t&&i){const e=Date.now()-i,n=ve(t);n&&(n.executionDuration=`${(e/1e3).toFixed(2)}${Z("s")}`)}t=s,e.set(s,Date.now())}))},beforeRegisterNodeDef(e,t){const n=e.prototype.onDrawForeground;e.prototype.onDrawForeground=function(...e){const[t]=e;return function(e,t){if(!t)return;e.save(),e.fillStyle=LiteGraph.NODE_DEFAULT_BGCOLOR,function(e,t,n,s,o,i){e.beginPath(),e.moveTo(t+i,n),e.lineTo(t+s-i,n),e.arcTo(t+s,n,t+s,n+i,i),e.lineTo(t+s,n+o-i),e.arcTo(t+s,n+o,t+s-i,n+o,i),e.lineTo(t+i,n+o),e.arcTo(t,n+o,t,n+o-i,i),e.lineTo(t,n+i),e.arcTo(t,n,t+i,n,i),e.closePath()}(e,0,-LiteGraph.NODE_TITLE_HEIGHT-20,e.measureText(t).width+10,LiteGraph.NODE_TITLE_HEIGHT-10,4),e.fill(),function(e,t,n,s,o="#000",i=12,a="Inter"){e.font=`${i}px ${a}`,e.fillStyle=o,e.fillText(t,n,s)}(e,t,8,-LiteGraph.NODE_TITLE_HEIGHT-6,LiteGraph.NODE_TITLE_COLOR),e.restore()}(t,this.executionDuration||""),null==n?void 0:n.apply(this,e)}}});let Nt=null;w.registerExtension({name:"Comfy.EasyUse.HotKeys",setup(){if(void 0!==_){_("up,down,left,right",(function(e,t){var n,s,o,i,a,l,r,d,u,c,p,h,m,g,f;e.preventDefault();if(!I("EasyUse.Hotkeys.JumpNearestNodes",null,!0))return;const y=we();if(0===y.length)return;const _=y[0];switch(t.key){case"up":case"left":let e=null;if(Ae(_)){const e=null==(n=_.widgets_values)?void 0:n[0],t=null==(s=_.graph)?void 0:s._nodes,o=null==t?void 0:t.find((t=>{var n;if(ke(t)){if((null==(n=t.widgets_values)?void 0:n[0])===e)return t}return null}));o&&Le(o)}else if((null==(o=_.inputs)?void 0:o.length)>0){for(let t=0;t<_.inputs.length;t++)if(_.inputs[t].link){e=_.inputs[t].link;break}if(e){const t=null==(i=_.graph)?void 0:i.links;if(t[e]){const n=null==(a=t[e])?void 0:a.origin_id,s=null==(r=null==(l=_.graph)?void 0:l._nodes_by_id)?void 0:r[n];s&&Le(s)}}}break;case"down":case"right":let t=null;if(ke(_)){const e=null==(d=_.widgets_values)?void 0:d[0],t=null==(u=_.graph)?void 0:u._nodes,n=null==t?void 0:t.find((t=>{var n;if(Ae(t)){if((null==(n=t.widgets_values)?void 0:n[0])===e)return t}return null}));n&&Le(n)}else if((null==(c=_.outputs)?void 0:c.length)>0){for(let e=0;e<_.outputs.length;e++)if((null==(p=_.outputs[e].links)?void 0:p.length)>0&&_.outputs[e].links[0]){t=_.outputs[e].links[0];break}if(t){const e=null==(h=_.graph)?void 0:h.links;if(e[t]){const n=null==(m=e[t])?void 0:m.target_id,s=null==(f=null==(g=_.graph)?void 0:g._nodes_by_id)?void 0:f[n];s&&Le(s)}}}}})),_("shift+up,shift+down,shift+left,shift+right",(function(e,t){e.preventDefault();if(!I("EasyUse.Hotkeys.AlignSelectedNodes",null,!0))return;const n=we();if(n.length<=1)return;const s=n;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])}Nt||(Nt=$()),Nt&&Nt.update()})),_("shift+g",(function(e,t){e.preventDefault();I("EasyUse.Hotkeys.AddGroup",null,!0)&&(Ot(),Nt||(Nt=$()),Nt&&Nt.update())})),_("shift+r",(function(e,t){e.preventDefault();I("EasyUse.Hotkeys.cleanVRAMused",null,!0)&&Ze()}));const e=[];Array.from(Array(10).keys()).forEach((t=>e.push(`alt+${t}`))),_(e.join(","),(async function(e,t){e.preventDefault();if(!I("EasyUse.Hotkeys.NodesTemplate",null,!0))return;const n=t.key;let s=parseInt(n.split("+")[1]);const o=await b.getUserData("comfy.templates.json");let i=null;if(200==o.status)try{i=await o.json()}catch(l){Re.error(Z("Get Node Templates File Failed"))}else localStorage["Comfy.NodeTemplates"]?i=JSON.parse(localStorage["Comfy.NodeTemplates"]):Re.warn(Z("No Node Templates Found"));if(!i)return void Re.warn(Z("No Node Templates Found"));s=0===s?9:s-1;const a=i[s];if(a)try{const e=(null==a?void 0:a.name)||"Group",t=(null==a?void 0:a.data)?JSON.parse(a.data):[];Tt((async()=>{await A.registerFromWorkflow(t.groupNodes,{}),localStorage.litegrapheditor_clipboard=a.data,w.canvas.pasteFromClipboard(),t.groupNodes||Ot(e)}))}catch(l){Re.error(l)}else Re.warn(Z("Node template with {key} not set").replace("{key}",n))}));const t=async function(e){if(("b"===e.key||"m"==e.key)&&(e.metaKey||e.ctrlKey)){if(0===we().length)return;Nt||(Nt=$()),Nt&&Nt.update()}};window.addEventListener("keydown",t,!0)}}});const Tt=async e=>{const t=localStorage.litegrapheditor_clipboard;await e(),localStorage.litegrapheditor_clipboard=t},Ot=e=>{const t=we();if(0===t.length)return;const n=t;let s=new LiteGraph.LGraphGroup;s.title=e||"Group",((e,t=[],n=20)=>{var s,o,i,a,l,r,d,u,c,p;for(var h of(o=i=a=l=-1,r=d=u=c=-1,[e._nodes,t]))for(var m in h)r=(p=h[m]).pos[0],d=p.pos[1],u=p.pos[0]+p.size[0],c=p.pos[1]+p.size[1],"Reroute"!=p.type&&(d-=LiteGraph.NODE_TITLE_HEIGHT),(null==(s=p.flags)?void 0:s.collapsed)&&(c=d+LiteGraph.NODE_TITLE_HEIGHT,(null==p?void 0:p._collapsed_width)&&(u=r+Math.round(p._collapsed_width))),(-1==o||r<o)&&(o=r),(-1==i||d<i)&&(i=d),(-1==a||u>a)&&(a=u),(-1==l||c>l)&&(l=c);i-=Math.round(1.4*e.font_size),e.pos=[o-n,i-n],e.size=[a-o+2*n,l-i+2*n]})(s,n),w.canvas.graph.add(s)};function Dt(e,t,n,s){const o=[];return e.workflow.links.forEach((e=>{n&&e[1]===t&&!o.includes(e[3])&&o.push(e[3]),s&&e[3]===t&&!o.includes(e[1])&&o.push(e[1])})),o}async function Gt(e,t=!1){const n=structuredClone(await w.graphToPrompt()),s=[];if(n.workflow.nodes.forEach((e=>{s.push(e.id)})),n.workflow.links=n.workflow.links.filter((e=>s.includes(e[1])&&s.includes(e[3]))),t)for(;!w.graph._nodes_by_id[e].isChooser;)e=Dt(n,e,!0,!1)[0];const o=function(e,t){const n=[],s=[t];for(;s.length>0;){const t=s.pop();n.push(t),s.push(...Dt(e,t,!0,!1).filter((e=>!(n.includes(e)||s.includes(e)))))}s.push(...n.filter((e=>e!=t)));const o=[t];for(;s.length>0;){const t=s.pop();o.push(t),s.push(...Dt(e,t,!1,!0).filter((e=>!(o.includes(e)||s.includes(e)))))}const i=[];return i.push(...n),i.push(...o.filter((e=>!i.includes(e)))),i}(n,e);n.workflow.nodes=n.workflow.nodes.filter((t=>(t.id===e&&t.inputs.forEach((e=>{e.link=null})),o.includes(t.id)))),n.workflow.links=n.workflow.links.filter((e=>o.includes(e[1])&&o.includes(e[3])));const i={};for(const[r,d]of Object.entries(n.output))o.includes(parseInt(r))&&(i[r]=d);const a={};for(const[r,d]of Object.entries(i[e.toString()].inputs))Array.isArray(d)||(a[r]=d);i[e.toString()].inputs=a,n.output=i;const l=w.graphToPrompt;w.graphToPrompt=()=>(w.graphToPrompt=l,n),w.queuePrompt(0)}const Rt=new class{constructor(){this.current_node_id=void 0,this.class_of_current_node=null,this.current_node_is_chooser=!1}update(){var e,t;return w.runningNodeId!=this.current_node_id&&(this.current_node_id=w.runningNodeId,this.current_node_id?(this.class_of_current_node=null==(t=null==(e=w.graph)?void 0:e._nodes_by_id[w.runningNodeId.toString()])?void 0:t.comfyClass,this.current_node_is_chooser="easy imageChooser"===this.class_of_current_node):(this.class_of_current_node=void 0,this.current_node_is_chooser=!1),!0)}},Mt=class e{constructor(){}static idle(){return!w.runningNodeId}static paused(){return!0}static paused_here(t){return e.here(t)}static running(){return!e.idle()}static here(e){return w.runningNodeId==e}static state(){return"Paused"}};f(Mt,"cancelling",!1);let Pt=Mt;function Ft(e,t){const n=new FormData;n.append("message",t),n.append("id",e),b.fetchApi("/easyuse/image_chooser_message",{method:"POST",body:n})}function Ut(){Ft(-1,"__cancel__"),Pt.cancelling=!0,b.interrupt(),Pt.cancelling=!1}var Bt=0;function Wt(){Bt+=1}const zt=["easy kSampler","easy kSamplerTiled","easy fullkSampler"];function jt(e){const t=w.graph._nodes_by_id[e.detail.id];if(t){t.selected=new Set,t.anti_selected=new Set;const n=function(e,t){var n;return e.imgs=[],t.forEach((t=>{const n=new Image;e.imgs.push(n),n.onload=()=>{w.graph.setDirtyCanvas(!0)},n.src=`/view?filename=${encodeURIComponent(t.filename)}&type=temp&subfolder=${w.getPreviewFormatParam()}`})),null==(n=e.setSizeForImage)||n.call(e),e.imgs}(t,e.detail.urls);return{node:t,image:n,isKSampler:zt.includes(t.type)}}}function Vt(e,t,n){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]}n.strokeRect(s[0]+1,s[1]+1,s[2]-2,s[3]-2)}class Yt extends E{constructor(){super(),this.node=null,this.select_index=[],this.dialog_div=null}show(e,t){this.select_index=[],this.node=t;const n=e.map(((e,n)=>{const s=L("img",{src:e.src,onclick:e=>{this.select_index.includes(n)?(this.select_index=this.select_index.filter((e=>e!==n)),s.classList.remove("selected")):(this.select_index.push(n),s.classList.add("selected")),t.selected.has(n)?t.selected.delete(n):t.selected.add(n)}});return s}));super.show(L("div.comfyui-easyuse-chooser-dialog",[L("h5.comfyui-easyuse-chooser-dialog-title",Z("Choose images to continue")),L("div.comfyui-easyuse-chooser-dialog-images",n)]))}createButtons(){const e=super.createButtons();return e[0].onclick=e=>{Pt.running()&&Ut(),super.close()},e.unshift(L("button",{type:"button",textContent:Z("Choose Selected Images"),onclick:e=>{Ft(this.node.id,[...this.node.selected,-1,...this.node.anti_selected]),Pt.idle()&&(Wt(),Gt(this.node.id).then((()=>{Ft(this.node.id,[...this.node.selected,-1,...this.node.anti_selected])}))),super.close()}})),e}}function Ht(){const e=w.graph._nodes_by_id[this.node_id];if(e){const t=[...e.selected];(null==t?void 0:t.length)>0&&e.setProperty("values",t),Ft(e.id,[...e.selected,-1,...e.anti_selected]),Pt.idle()&&(Wt(),Gt(e.id).then((()=>{Ft(e.id,[...e.selected,-1,...e.anti_selected])})))}}function Xt(){Pt.running()&&Ut()}function Zt(e){Object.defineProperty(e,"clicked",{get:function(){return this._clicked},set:function(e){this._clicked=e&&""!=this.name}})}function Kt(e){e.options||(e.options={}),e.options.serialize=!1}w.registerExtension({name:"Comfy.EasyUse.imageChooser",init(){window.addEventListener("beforeunload",Ut,!0)},setup(e){const t=LGraphCanvas.prototype.draw;LGraphCanvas.prototype.draw=function(){Rt.update()&&e.graph._nodes.forEach((e=>{e.update&&e.update()})),t.apply(this,arguments)},b.addEventListener("easyuse-image-choose",(function(e){const{node:t,image:n,isKSampler:s}=jt(e);if(s){(new Yt).show(n,t)}}));const n=b.interrupt;b.interrupt=function(){Pt.cancelling||Ut(),n.apply(this,arguments)},b.addEventListener("execution_start",(function(){(Bt>0?(Bt-=1,0):(Ft(-1,"__start__"),1))&&e.graph._nodes.forEach((e=>{(e.selected||e.anti_selected)&&(e.selected.clear(),e.anti_selected.clear(),e.update())}))}))},async nodeCreated(e,t){if("easy imageChooser"==e.comfyClass){e.setProperty("values",[]),void 0===(null==e?void 0:e.imageIndex)&&Object.defineProperty(e,"imageIndex",{get:function(){return null},set:function(t){e.overIndex=t}}),void 0===(null==e?void 0:e.imagey)&&Object.defineProperty(e,"imagey",{get:function(){return null},set:function(t){return e.widgets[e.widgets.length-1].last_y+LiteGraph.NODE_WIDGET_HEIGHT}});const t=e.onMouseDown;e.onMouseDown=function(n,s,o){if(n.isPrimary){const t=function(e,t){var n,s;if((null==(n=e.imgs)?void 0:n.length)>1)for(var o=0;o<e.imageRects.length;o++){const n=t[0]-e.imageRects[o][0],s=t[1]-e.imageRects[o][1];if(n>0&&n<e.imageRects[o][2]&&s>0&&s<e.imageRects[o][3])return o}else if(1==(null==(s=e.imgs)?void 0:s.length)&&t[1]>e.imagey)return 0;return-1}(e,s);t>=0&&this.imageClicked(t)}return t&&t.apply(this,arguments)},e.send_button_widget=e.addWidget("button","","",Ht),e.cancel_button_widget=e.addWidget("button","","",Xt),Zt(e.cancel_button_widget),Zt(e.send_button_widget),Kt(e.cancel_button_widget),Kt(e.send_button_widget)}},beforeRegisterNodeDef(e,t,n){if("easy imageChooser"==(null==t?void 0:t.name)){const t=e.prototype.onDrawBackground;e.prototype.onDrawBackground=function(e){t.apply(this,arguments),function(e,t){var n,s;if(e.imgs){if(e.imageRects)for(let n=0;n<e.imgs.length;n++){t.fillStyle="#000",t.fillRect(...e.imageRects[n]);const s=e.imgs[n],i=e.imageRects[n][2],a=e.imageRects[n][3];let l=i/s.width,r=a/s.height;var o=Math.min(l,r);let d=o*s.height,u=o*s.width;const c=e.imageRects[n][0]+(i-u)/2,p=e.imageRects[n][1]+(a-d)/2,h=2;t.drawImage(s,c+h,p+h,u-2*h,d-2*h)}t.lineWidth=2,t.strokeStyle="green",null==(n=null==e?void 0:e.selected)||n.forEach((n=>{Vt(e,n,t)})),t.strokeStyle="#F88",null==(s=null==e?void 0:e.anti_selected)||s.forEach((n=>{Vt(e,n,t)}))}}(this,e)},e.prototype.imageClicked=function(t){"easy imageChooser"===(null==e?void 0:e.comfyClass)&&(this.selected.has(t)?this.selected.delete(t):this.selected.add(t),this.update())};const n=e.prototype.update;e.prototype.update=function(){var e;if(n&&n.apply(this,arguments),this.send_button_widget){this.send_button_widget.node_id=this.id;const t=(this.selected?this.selected.size:0)+(this.anti_selected?this.anti_selected.size:0),n=(null==(e=this.imgs)?void 0:e.length)||0;Pt.paused_here(this.id)&&t>0?this.send_button_widget.name=t>1?"Progress selected ("+t+"/"+n+")":"Progress selected image":this.send_button_widget.name=t>0?t>1?"Progress selected ("+t+"/"+n+")":"Progress selected image as restart":""}if(this.cancel_button_widget){const e=Pt.running();this.cancel_button_widget.name=e?"Cancel current run":""}this.setDirtyCanvas(!0,!0)}}}}),Number.prototype.div=function(e){return function(e,t){let n,s,o=0,i=0,a="string"==typeof e?e:e.toString(),l="string"==typeof t?t:t.toString();try{o=a.toString().split(".")[1].length}catch(r){}try{i=l.toString().split(".")[1].length}catch(r){}return n=Number(a.toString().replace(".","")),s=Number(l.toString().replace(".","")),n/s*Math.pow(10,i-o)}(this,e)};let Jt=[],$t=0;const qt={sd3:6.5,"sd3-turbo":4};class Qt extends E{constructor(){super(),this.lists=[],this.dialog_div=null,this.user_div=null}addItem(e,t){return L("div.easyuse-account-dialog-item",[L("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);Jt[t].name=e.target.value},value:Jt[e].name}),L("input.key",{type:"text",oninput:e=>{const t=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);Jt[t].key=e.target.value},placeholder:"Enter APIKEY",value:Jt[e].key}),L("button.choose",{textContent:Z("Choose"),onclick:async e=>{var n,s,o;const i=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);let a=Jt[i].name,l=Jt[i].key;if(!a)return void Re.error(Z("Please enter the account name"));if(!l)return void Re.error(Z("Please enter the APIKEY"));let r=!0;for(let t=0;t<Jt.length;t++)if(!Jt[t].key){r=!1;break}if(!r)return void Re.error(Z("APIKEY is not Empty"));$t=i;const d=new FormData;d.append("api_keys",JSON.stringify(Jt)),d.append("current",$t);const u=await b.fetchApi("/easyuse/stability/set_api_keys",{method:"POST",body:d});if(200==u.status){const e=await u.json();if((null==e?void 0:e.account)&&(null==e?void 0:e.balance)){const i=(null==(n=e.account)?void 0:n.profile_picture)||null,a=(null==(s=e.account)?void 0:s.email)||null,l=(null==(o=e.balance)?void 0:o.credits)||0;t.replaceChildren(L("div.easyuse-account-user-info",{onclick:e=>{(new Qt).show(t)}},[L("div.user",[L("div.avatar",i?[L("img",{src:i})]:"😀"),L("div.info",[L("h5.name",a),L("h6.remark","Credits: "+l)])]),L("div.edit",{textContent:Z("Edit")})])),Re.success(Z("Save Succeed"))}else Re.success(Z("Save Succeed"));this.close()}else Re.error(Z("Save Failed"))}}),L("button.delete",{textContent:Z("Delete"),onclick:e=>{const t=Array.prototype.indexOf.call(this.dialog_div.querySelectorAll(".easyuse-account-dialog-item"),e.target.parentNode);Jt.length<=1?Re.error(Z("At least one account is required")):(Jt.splice(t,1),this.dialog_div.removeChild(e.target.parentNode))}})])}show(e){Jt.forEach(((t,n)=>{this.lists.push(this.addItem(n,e))})),this.dialog_div=L("div.easyuse-account-dialog",this.lists),super.show(L("div.easyuse-account-dialog-main",[L("div",[L("a",{href:"https://platform.stability.ai/account/keys",target:"_blank",textContent:Z("Getting Your APIKEY")})]),this.dialog_div]))}createButtons(){const e=super.createButtons();return e.unshift(L("button",{type:"button",textContent:Z("Save Account Info"),onclick:e=>{let t=!0;for(let n=0;n<Jt.length;n++)if(!Jt[n].key){t=!1;break}if(t){const e=new FormData;e.append("api_keys",JSON.stringify(Jt)),b.fetchApi("/easyuse/stability/set_api_keys",{method:"POST",body:e}).then((e=>{200==e.status?Re.success(Z("Save Succeed")):Re.error(Z("Save Failed"))}))}else Re.error(Z("APIKEY is not Empty"))}})),e.unshift(L("button",{type:"button",textContent:Z("Add Account"),onclick:e=>{const t="Account "+Jt.length.toString();Jt.push({name:t,key:""});const n=this.addItem(Jt.length-1);this.lists.push(n),this.dialog_div.appendChild(n)}})),e}}w.registerExtension({name:"Comfy.EasyUse.API.SD3",async beforeRegisterNodeDef(e,t,n){if("easy stableDiffusion3API"==t.name){const t=e.prototype.onNodeCreated;e.prototype.onNodeCreated=async function(){var e,n,s;t&&(null==t||t.apply(this,arguments));const o=this.widgets.find((e=>["seed_num","seed"].includes(e.name))),i=this.widgets.find((e=>["control_before_generate","control_after_generate"].includes(e.name)));let a=this.widgets.find((e=>"model"==e.name));a.callback=e=>{l.value="-"+qt[e]};const l=this.addWidget("text","cost_credit","0",(e=>{}),{serialize:!1});l.disabled=!0,setTimeout((e=>{"control_before_generate"==i.name&&0===o.value&&(o.value=Math.floor(4294967294*Math.random())),l.value="-"+qt[a.value]}),100);let r=L("div.easyuse-account-user",[Z("Loading UserInfo...")]);this.addDOMWidget("account","btn",L("div.easyuse-account",r)),b.addEventListener("stable-diffusion-api-generate-succeed",(async({detail:e})=>{var t;let n=r.querySelectorAll(".remark");if(n&&n[0]){const t=(null==e?void 0:e.model)?qt[e.model]:0;if(t){let e=function(e,t){let n,s,o,i,a,l;a="string"==typeof e?e:e.toString(),l="string"==typeof t?t:t.toString();try{n=a.split(".")[1].length}catch(r){n=0}try{s=l.split(".")[1].length}catch(r){s=0}return o=Math.pow(10,Math.max(n,s)),i=n>=s?n:s,((e*o-t*o)/o).toFixed(i)}(parseFloat(n[0].innerText.replace(/Credits: /g,"")),t);e>0&&(n[0].innerText="Credits: "+e.toString())}}await J(1e4);const s=await b.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;n&&n[0]&&(n[0].innerText="Credits: "+s)}}}));const d=await b.fetchApi("/easyuse/stability/api_keys");if(200==d.status){let t=await d.json();if(Jt=t.keys,$t=t.current,Jt.length>0&&void 0!==$t){const t=Jt[$t].key,o=Jt[$t].name;if(t){const t=await b.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,i=(null==(n=o.account)?void 0:n.email)||null,a=(null==(s=o.balance)?void 0:s.credits)||0;r.replaceChildren(L("div.easyuse-account-user-info",{onclick:e=>{(new Qt).show(r)}},[L("div.user",[L("div.avatar",t?[L("img",{src:t})]:"😀"),L("div.info",[L("h5.name",i),L("h6.remark","Credits: "+a)])]),L("div.edit",{textContent:Z("Edit")})]))}}}else r.replaceChildren(L("div.easyuse-account-user-info",{onclick:e=>{(new Qt).show(r)}},[L("div.user",[L("div.avatar","😀"),L("div.info",[L("h5.name",o),L("h6.remark",Z("Click to set the APIKEY first"))])]),L("div.edit",{textContent:Z("Edit")})]))}}}}}});let en=null;function tn(){en&&(en.removeEventListeners(),en.dropdown.remove(),en=null)}function nn(e,t,n,s=!1){tn(),new sn(e,t,n,s)}class sn{constructor(e,t,n,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=n,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),en=this}buildNestedDropdown(e,t){let n=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 i=document.createElement("li");i.classList.add("folder"),i.textContent=s,i.appendChild(e),i.addEventListener("mouseover",this.onMouseOver.bind(this,n,t)),t.appendChild(i),this.buildNestedDropdown(o,e),n+=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,n,t)),e.addEventListener("mousedown",this.onMouseDown.bind(this,s)),t.appendChild(e),n+=1}}))}addListItem(e,t,n){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)),n.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),n=t[this.selectedIndex];if(en)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(),n&&n.classList.contains("folder")){const e=n.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(),n.classList.contains("item")&&(this.onSelect(t[this.selectedIndex].textContent),this.dropdown.remove(),this.removeEventListeners());const s=n.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 on(e){const t=e.min||0,n=e.max||0,s=e.step||1;if(0===s)return[];const o=[];let i=t;for(;i<=n;){if(Number.isInteger(s))o.push(Math.round(i)+"; ");else{let e=i.toFixed(3);-0==e&&(e="0.000"),/\.\d{3}$/.test(e)||(e+="0"),o.push(e+"; ")}i+=s}return n>=0&&t>=0?o:o.reverse()}let an={},ln={};function rn(e,t){String(e.id);const n=t.name,s=t.value.replace(/^(loader|preSampling):\s/,"");ln[n]?ln[n]!=an[s]&&(ln[n]=an[s]):ln={...ln,[n]:an[s]}}w.registerExtension({name:"Comfy.EasyUse.XYPlot",async beforeRegisterNodeDef(e,t,n){if("easy XYPlot"===t.name){an=t.input.hidden.plot_dict[0];for(const e in an){const t=an[e];if(Array.isArray(t)){let n=[];for(const e of t)n.push(e+"; ");an[e]=n}else an[e]="object"==typeof t?"seed"==e?t+"; ":on(t):t+"; "}an.None=[],an["---------------------"]=[]}},nodeCreated(e){"easy XYPlot"===e.comfyClass&&(function(e){if(e.widgets)for(const t of e.widgets)if("x_axis"===t.name||"y_axis"===t.name){let n=t.value;Object.defineProperty(t,"value",{get:()=>n,set(s){s!==n&&(n=s,rn(e,t))}})}}(e),function(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=>n(e,o))).filter((e=>""!==e)).join("")},n=function(e,t){if(e=s(e),o(e,t))return e+"; ";let n=i(e,t);return 1===n.length||2===n.length?n[0]:o(a(e),t)?a(e)+"; ":""},s=function(e){return e.replace(/(\n|;| )/g,"")},o=function(e,t){return t.includes(e+"; ")},i=function(e,t){return t.filter((t=>t.toLowerCase().includes(e.toLowerCase())))},a=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 n=e.name[0]+"_axis";let s=(null==ln?void 0:ln[n])||[];if(0===s.length)return;const o=e.inputEl.value,i=e.inputEl.selectionStart;let a=o.split("; ");const l=o.substring(0,i).split("; ").length-1,r=a[l].replace(/\n/g,"").toLowerCase(),d=s.filter((e=>e.toLowerCase().includes(r))).map((e=>e.replace(/; /g,"")));if(d.length>0)nn(e.inputEl,d,(n=>{const o=t(n,a,l,s);e.inputEl.value=o}));else{tn();const n=t(null,a,l,s);e.inputEl.value=n}};e.inputEl.removeEventListener("input",l),e.inputEl.addEventListener("input",l),e.inputEl.removeEventListener("mouseup",l),e.inputEl.addEventListener("mouseup",l)}}}(e))}});export{Z as $,U as N,b as a,w as b,fe as c,I as d,Ze as e,B as f,ge as g,x as h,Ee as j,X as l,J as s,Re as t,$ as u};