Spaces:
Configuration error
Configuration error
import {app} from "../../../../scripts/app.js"; | |
import {$el} from "../../../../scripts/ui.js"; | |
import {$t} from "../common/i18n.js"; | |
import {findWidgetByName, toggleWidget} from "../common/utils.js"; | |
const tags = { | |
"selfie_multiclass_256x256": ["Background", "Hair", "Body", "Face", "Clothes", "Others",], | |
"human_parsing_lip":["Background","Hat","Hair","Glove","Sunglasses","Upper-clothes","Dress","Coat","Socks","Pants","Jumpsuits","Scarf","Skirt","Face","Left-arm","Right-arm","Left-leg","Right-leg","Left-shoe","Right-shoe"], | |
} | |
function getTagList(tags) { | |
let rlist=[] | |
tags.forEach((k,i) => { | |
rlist.push($el( | |
"label.easyuse-prompt-styles-tag", | |
{ | |
dataset: { | |
tag: i, | |
name: $t(k), | |
index: i | |
}, | |
$: (el) => { | |
el.children[0].onclick = () => { | |
el.classList.toggle("easyuse-prompt-styles-tag-selected"); | |
}; | |
}, | |
}, | |
[ | |
$el("input",{ | |
type: 'checkbox', | |
name: i | |
}), | |
$el("span",{ | |
textContent: $t(k), | |
}) | |
] | |
)) | |
}); | |
return rlist | |
} | |
app.registerExtension({ | |
name: 'comfy.easyUse.seg', | |
async beforeRegisterNodeDef(nodeType, nodeData, app) { | |
if (nodeData.name == 'easy humanSegmentation') { | |
// 创建时 | |
const onNodeCreated = nodeType.prototype.onNodeCreated; | |
nodeType.prototype.onNodeCreated = function () { | |
onNodeCreated ? onNodeCreated?.apply(this, arguments) : undefined; | |
const method = this.widgets.findIndex((w) => w.name == 'method'); | |
const list = $el("ul.easyuse-prompt-styles-list.no-top", []); | |
let method_values = '' | |
this.setProperty("values", []) | |
let selector = this.addDOMWidget('mask_components',"btn",$el('div.easyuse-prompt-styles',[list])) | |
Object.defineProperty(this.widgets[method],'value',{ | |
set:(value)=>{ | |
method_values = value | |
if(method_values){ | |
selector.element.children[0].innerHTML = '' | |
if(method_values == 'selfie_multiclass_256x256'){ | |
toggleWidget(this, findWidgetByName(this, 'confidence'), true) | |
this.setSize([300, 260]); | |
}else{ | |
toggleWidget(this, findWidgetByName(this, 'confidence')) | |
this.setSize([300, 500]); | |
} | |
let list = getTagList(tags[method_values]); | |
selector.element.children[0].append(...list) | |
} | |
}, | |
get: () => { | |
return method_values | |
} | |
}) | |
let mask_select_values = '' | |
Object.defineProperty(selector, "value", { | |
set: (value) => { | |
setTimeout(_=>{ | |
selector.element.children[0].querySelectorAll(".easyuse-prompt-styles-tag").forEach(el => { | |
let arr = value.split(',') | |
if (arr.includes(el.dataset.tag)) { | |
el.classList.add("easyuse-prompt-styles-tag-selected"); | |
el.children[0].checked = true | |
} | |
}) | |
},100) | |
}, | |
get: () => { | |
selector.element.children[0].querySelectorAll(".easyuse-prompt-styles-tag").forEach(el => { | |
if(el.classList.value.indexOf("easyuse-prompt-styles-tag-selected")>=0){ | |
if(!this.properties["values"].includes(el.dataset.tag)){ | |
this.properties["values"].push(el.dataset.tag); | |
} | |
}else{ | |
if(this.properties["values"].includes(el.dataset.tag)){ | |
this.properties["values"]= this.properties["values"].filter(v=>v!=el.dataset.tag); | |
} | |
} | |
}); | |
mask_select_values = this.properties["values"].join(','); | |
return mask_select_values; | |
} | |
}); | |
let old_values = '' | |
let mask_lists_dom = selector.element.children[0] | |
// 初始化 | |
setTimeout(_=>{ | |
if(!method_values) { | |
method_values = 'selfie_multiclass_256x256' | |
selector.element.children[0].innerHTML = '' | |
// 重新排序 | |
let list = getTagList(tags[method_values]); | |
selector.element.children[0].append(...list) | |
} | |
if(method_values == 'selfie_multiclass_256x256'){ | |
toggleWidget(this, findWidgetByName(this, 'confidence'), true) | |
this.setSize([300, 260]); | |
}else{ | |
toggleWidget(this, findWidgetByName(this, 'confidence')) | |
this.setSize([300, 500]); | |
} | |
},1) | |
return onNodeCreated; | |
} | |
} | |
} | |
}) |