63 lines
2.2 KiB
JavaScript
63 lines
2.2 KiB
JavaScript
async function sendToControlnet(img, tab, index) {
|
|
const response = await fetch(img);
|
|
const blob = await response.blob();
|
|
const file = new File([blob], "image.png", { type: "image/png" });
|
|
const dt = new DataTransfer();
|
|
dt.items.add(file);
|
|
const list = dt.files;
|
|
|
|
const selector = `#${tab}_script_container`;
|
|
|
|
if (tab === "txt2img"){
|
|
switch_to_txt2img();
|
|
} else if (tab === "img2img") {
|
|
switch_to_img2img();
|
|
}
|
|
|
|
const accordion = gradioApp().querySelector(selector).querySelector("#controlnet > .label-wrap > .icon")
|
|
if (accordion.style.transform == "rotate(90deg)") {
|
|
accordion.click();
|
|
}
|
|
|
|
const controlnetDiv = gradioApp().querySelector(selector).querySelector("#controlnet");
|
|
const tabs = controlnetDiv.querySelectorAll("div.tab-nav > button");
|
|
|
|
if (tabs !== null && tabs.length > 1) {
|
|
tabs[index].click();
|
|
}
|
|
|
|
let input = gradioApp().querySelector(selector).querySelector("#controlnet").querySelectorAll("input[type='file']")[index * 2];
|
|
|
|
if (input == null) {
|
|
const callback = (observer) => {
|
|
input = gradioApp().querySelector(selector).querySelector("#controlnet").querySelector("input[type='file']");
|
|
if (input == null) {
|
|
console.error('input[type=file] NOT exists');
|
|
return;
|
|
} else {
|
|
setImage(input, list);
|
|
observer.disconnect();
|
|
}
|
|
}
|
|
const observer = new MutationObserver(callback);
|
|
observer.observe(gradioApp().querySelector(selector).querySelector("#controlnet"), { childList: true });
|
|
} else {
|
|
setImage(input, list);
|
|
}
|
|
}
|
|
|
|
function setImage(input, list) {
|
|
try {
|
|
if (input.previousElementSibling
|
|
&& input.previousElementSibling.previousElementSibling
|
|
&& input.previousElementSibling.previousElementSibling.querySelector("button[aria-label='Clear']")) {
|
|
input.previousElementSibling.previousElementSibling.querySelector("button[aria-label='Clear']").click()
|
|
}
|
|
} catch (e) {
|
|
console.error(e)
|
|
}
|
|
input.value = "";
|
|
input.files = list;
|
|
const event = new Event('change', { 'bubbles': true, "composed": true });
|
|
input.dispatchEvent(event);
|
|
} |