| console.log('[3D Model Loader] loading...'); | |
| async function _import() { | |
| if (!globalThis.threeDModelLoader || !globalThis.threeDModelLoader.import) { | |
| return await import('threeDModelLoader'); | |
| } else { | |
| return await globalThis.threeDModelLoader.imports.threeDModelLoader(); | |
| } | |
| } | |
| await _import(); | |
| (async function () { | |
| const container = gradioApp().querySelector('#threeDModelLoader-container'); | |
| const parent = container.parentNode; | |
| parent.classList.remove("prose"); | |
| const controlNetNumInput = gradioApp().querySelector('#threeDModelLoader-control-net-num'); | |
| const controlNetNum = controlNetNumInput.value; | |
| async function init_canvas() { | |
| create3dmodelLoaderApp({container: container, controlNetNum: controlNetNum}); | |
| setSendImageFunc3dmodel(sendImage); | |
| } | |
| await init_canvas(); | |
| function sendImage(type, index, dt) { | |
| const selector = type === "txt2img" ? "#txt2img_script_container" : "#img2img_script_container"; | |
| if (type === "txt2img") { | |
| switch_to_txt2img(); | |
| } else if (type === "img2img") { | |
| switch_to_img2img(); | |
| } | |
| let container = gradioApp().querySelector(selector); | |
| let element = container.querySelector('#controlnet'); | |
| if (!element) { | |
| for (const spans of container.querySelectorAll < HTMLSpanElement > ( | |
| '.cursor-pointer > span' | |
| )) { | |
| if (!spans.textContent?.includes('ControlNet')) { | |
| continue | |
| } | |
| if (spans.textContent?.includes('M2M')) { | |
| continue | |
| } | |
| element = spans.parentElement?.parentElement | |
| } | |
| if (!element) { | |
| console.error('ControlNet element not found') | |
| return | |
| } | |
| } | |
| const imageElems = element.querySelectorAll('div[data-testid="image"]') | |
| if (!imageElems[Number(index)]) { | |
| let accordion = element.querySelector('.icon'); | |
| if (accordion) { | |
| accordion.click(); | |
| let controlNetAppeared = false; | |
| let observer = new MutationObserver(function (mutations) { | |
| mutations.forEach(function (mutation) { | |
| if (mutation.type === "childList" && mutation.addedNodes.length > 0) { | |
| for (let i = 0; i < mutation.addedNodes.length; i++) { | |
| if (mutation.addedNodes[i].tagName === "INPUT") { | |
| controlNetAppeared = true; | |
| const imageElems2 = element.querySelectorAll('div[data-testid="image"]'); | |
| updateGradioImage(imageElems2[Number(index)], dt); | |
| observer.disconnect(); | |
| return; | |
| } | |
| } | |
| } | |
| }); | |
| }); | |
| observer.observe(element, {childList: true, subtree: true}); | |
| } | |
| } else { | |
| updateGradioImage(imageElems[Number(index)], dt); | |
| } | |
| } | |
| function updateGradioImage(element, dt) { | |
| let clearButton = element.querySelector("button[aria-label='Clear']"); | |
| if (clearButton) { | |
| clearButton.click(); | |
| } | |
| const input = element.querySelector("input[type='file']"); | |
| input.value = '' | |
| input.files = dt.files | |
| input.dispatchEvent( | |
| new Event('change', { | |
| bubbles: true, | |
| composed: true, | |
| }) | |
| ) | |
| } | |
| })(); | |