diff --git a/index.html b/index.html index c46a12d..c5cac9b 100644 --- a/index.html +++ b/index.html @@ -198,13 +198,13 @@
- +
ControlNet In/Outpainting
-
- -
+
+ +
+ +
@@ -268,7 +276,8 @@
- Alpha release v0.0.15.3 (20230410.001) + Alpha release v0.0.16 + v20230708.001
e.includes("dynamic prompts")) - // .length > 0 - // ) { - // // Dynamic Prompts found, enable checkbox - // this.alwaysOnScripts = true; - // this.dynamicPromptsAlwaysonScriptName = - // this.enabledExtensions[ - // this.enabledExtensions.findIndex((e) => e.includes("dynamic prompts")) - // ]; - // // this.alwaysOnScriptsData[this.dynamicPromptsAlwaysonScriptName] = {}; - // this.dynamicPromptsEnabled = true; - // document.getElementById("cbxDynPrompts").disabled = false; - // } + if ( + this.enabledExtensions.filter((e) => e.includes("dynamic prompts")) + .length > 0 + ) { + // Dynamic Prompts found, enable checkbox + this.alwaysOnScripts = true; + this.dynamicPromptsAlwaysonScriptName = + this.enabledExtensions[ + this.enabledExtensions.findIndex((e) => e.includes("dynamic prompts")) + ]; + // this.alwaysOnScriptsData[this.dynamicPromptsAlwaysonScriptName] = {}; + this.dynamicPromptsEnabled = true; + document.getElementById("cbxDynPrompts").disabled = false; + } // basically param 0 is true for on, false for off, that's it }, - async checkForControlNet() { + async checkForControlNet( + controlNetModelAutoComplete, + controlNetModuleAutoComplete + ) { var url = document.getElementById("host").value + "/controlnet/version"; try { @@ -85,15 +94,15 @@ const extensions = { this.controlNetEnabled = true; document.getElementById("cbxControlNet").disabled = false; // ok cool so now we can get the models and modules - this.getModels(); - this.getModules(); + this.getModels(controlNetModelAutoComplete); + this.getModules(controlNetModuleAutoComplete); } } catch (e) { // ?? global.controlnetAPI = false; } }, - async getModels() { + async getModels(controlNetModelAutoComplete) { // only worry about inpaint models for now var url = document.getElementById("host").value + "/controlnet/model_list"; @@ -106,8 +115,18 @@ const extensions = { console.warn("[extensions] Failed to fetch controlnet models"); console.warn(e); } + + let opt = null; + opt = this.controlNetModels + .filter((m) => m.includes("inpaint")) + .map((option) => ({ + name: option, + value: option, + })); + + controlNetModelAutoComplete.options = opt; }, - async getModules() { + async getModules(controlNetModuleAutoComplete) { const allowedModules = ["reference", "inpaint"]; var url = document.getElementById("host").value + "/controlnet/module_list"; @@ -120,5 +139,20 @@ const extensions = { console.warn("[extensions] Failed to fetch controlnet modules"); console.warn(e); } + + let opt = null; + opt = this.controlNetModules.module_list + .filter((m) => m.includes("inpaint_")) // why is there just "inpaint" in the modules + .map((option) => ({ + name: option, + value: option, + })); + + opt.push({ + name: "inpaint_global_harmonious", + value: "inpaint_global_harmonious", // WTF WHY IS THIS ONE NOT LISTED IN MODULES BUT DISTINCT IN THE API CALL?!?!?!??!??! + }); + + controlNetModuleAutoComplete.options = opt; }, }; diff --git a/js/index.js b/js/index.js index 23f8ba7..d0a722c 100644 --- a/js/index.js +++ b/js/index.js @@ -422,7 +422,10 @@ async function testHostConnection() { getSamplers(); getUpscalers(); getModels(); - extensions.getExtensions(); + extensions.getExtensions( + controlNetModelAutoComplete, + controlNetModuleAutoComplete + ); // getLoras(); // getTIEmbeddings(); // getHypernets(); @@ -664,6 +667,16 @@ const hrFixUpscalerAutoComplete = createAutoComplete( document.getElementById("hrFixUpscaler") ); +const controlNetModelAutoComplete = createAutoComplete( + "ControlNet Model", + document.getElementById("controlNetModel-ac-select") +); + +const controlNetModuleAutoComplete = createAutoComplete( + "ControlNet Module", + document.getElementById("controlNetModule-ac-select") +); + // const extensionsAutoComplete = createAutoComplete( // "Extension", // document.getElementById("extension-ac-select") @@ -809,8 +822,8 @@ function changeHRFY() { } function changeDynamicPromptsExtension() { - // extensions.dynamicPromptsActive = - // document.getElementById("cbxDynPrompts").checked; + extensions.dynamicPromptsActive = + document.getElementById("cbxDynPrompts").checked; } function changeControlNetExtension() { diff --git a/js/ui/tool/dream.js b/js/ui/tool/dream.js index d04d948..be872f9 100644 --- a/js/ui/tool/dream.js +++ b/js/ui/tool/dream.js @@ -1313,6 +1313,18 @@ const dream_generate_callback = async (bb, resolution, state) => { request.inpainting_fill = stableDiffusionData.outpainting_fill; request.image_cfg_scale = stableDiffusionData.image_cfg_scale; + // add dynamic prompts stuff if it's enabled + if (extensions.dynamicPromptsActive) { + addDynamicPromptsToAlwaysOnScripts(state); + } + if (extensions.controlNetActive) { + addControlNetToAlwaysOnScripts(state); + } + if (extensions.alwaysOnScripts) { + // check again just to be sure because i'm an idiot? + request.alwayson_scripts = state.alwayson_scripts; + } + // Dream _generate("img2img", request, bb, { keepUnmask: state.keepUnmasked ? bbCanvas : null, @@ -2778,6 +2790,8 @@ const sendSeed = (seed) => { function buildAlwaysOnScripts(state) { if (extensions.alwaysOnScripts) { state.alwayson_scripts = {}; + addControlNetToAlwaysOnScripts(state); + addDynamicPromptsToAlwaysOnScripts(state); } //TODO find way to remove alwayson_scripts if not active? @@ -2785,15 +2799,12 @@ function buildAlwaysOnScripts(state) { function addDynamicPromptsToAlwaysOnScripts(state) { //TODO ok seriously does this even NEED TO BE HERE?!?!?! it's like dynamic scripts is always on no matter what i fucking say... - // if (extensions.dynamicPromptsActive) { - // state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName] = {}; - // var dynval = document.getElementById("cbxDynPrompts").checked; - // state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName].args = [ - // { - // 0: dynval, - // }, - // ]; - // } + if (extensions.dynamicPromptsEnabled) { + state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName] = {}; + state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName].args = [ + extensions.dynamicPromptsActive, + ]; + } } function addControlNetToAlwaysOnScripts(state) {