i guess the dynamic prompts stuff wasn't worthless after all now that i figured out how i was using it wrong

This commit is contained in:
tim h 2023-07-08 12:54:17 -05:00
parent 20f0eb921e
commit de915b33a3
4 changed files with 107 additions and 40 deletions

View file

@ -198,13 +198,13 @@
<!-- Extensions section --> <!-- Extensions section -->
<button type="button" class="collapsible">Extensions</button> <button type="button" class="collapsible">Extensions</button>
<div class="content"> <div class="content">
<!-- <input <input
type="checkbox" type="checkbox"
id="cbxDynPrompts" id="cbxDynPrompts"
onchange="changeDynamicPromptsExtension()" onchange="changeDynamicPromptsExtension()"
disabled="disabled" /> disabled="disabled" />
<label for="cbxDynPrompts">Dynamic Prompts</label> <label for="cbxDynPrompts">Dynamic Prompts</label>
<br /> --> <br />
<input <input
type="checkbox" type="checkbox"
id="cbxControlNet" id="cbxControlNet"
@ -213,11 +213,19 @@
<label for="cbxControlNet">ControlNet In/Outpainting</label> <label for="cbxControlNet">ControlNet In/Outpainting</label>
<br class="controlnetElement" /> <br class="controlnetElement" />
<label id="cnModuleLabel" class="controlnetElement"> <label id="cnModuleLabel" class="controlnetElement">
CN Preprocessor Preprocessor
</label> </label>
<div id="controlNetModule" class="controlnetElement"></div> <div id="controlNetModule-ac-select" class="controlnetElement"></div>
<label id="cnModelLabel" class="controlnetElement">CN Model</label> <label id="cnModelLabel" class="controlnetElement">Model</label>
<div id="controlNetModel" class="controlnetElement"></div> <div id="controlNetModel-ac-select" class="controlnetElement"></div>
<label id="cnModelLabel" class="controlnetElement">
Control Mode
</label>
<select id="controlNetMode-select" class="controlnetElement">
<option value="Balanced">prompt &Equal; CN</option>
<option value="My prompt is more important">prompt &GT; CN</option>
<option value="ControlNet is more important">prompt &LT; CN</option>
</select>
<!-- <div id="referenceStyleFidelity" class="controlnetElement"></div> --> <!-- <div id="referenceStyleFidelity" class="controlnetElement"></div> -->
</div> </div>
<!-- Save/load image section --> <!-- Save/load image section -->
@ -268,7 +276,8 @@
<br /> <br />
<span id="version"> <span id="version">
<a href="https://github.com/zero01101/openOutpaint" target="_blank"> <a href="https://github.com/zero01101/openOutpaint" target="_blank">
Alpha release v0.0.15.3 (20230410.001) <s>Alpha release v0.0.16</s>
v20230708.001
</a> </a>
<br /> <br />
<a <a

View file

@ -14,7 +14,10 @@ const extensions = {
controlNetModels: null, controlNetModels: null,
controlNetModules: null, controlNetModules: null,
async getExtensions() { async getExtensions(
controlNetModelAutoComplete,
controlNetModuleAutoComplete
) {
const allowedExtensions = [ const allowedExtensions = [
"controlnet", "controlnet",
// "none", // "none",
@ -44,31 +47,37 @@ const extensions = {
console.warn(e); console.warn(e);
} }
this.checkForDynamicPrompts(); this.checkForDynamicPrompts();
this.checkForControlNet(); this.checkForControlNet(
controlNetModelAutoComplete,
controlNetModuleAutoComplete
);
//checkForSAM(); //or inpaintAnything or something i dunno //checkForSAM(); //or inpaintAnything or something i dunno
//checkForADetailer(); //? this one seems iffy //checkForADetailer(); //? this one seems iffy
//checkForSAG(); //?? //checkForSAG(); //??
}, },
async checkForDynamicPrompts() { async checkForDynamicPrompts() {
// if ( if (
// this.enabledExtensions.filter((e) => e.includes("dynamic prompts")) this.enabledExtensions.filter((e) => e.includes("dynamic prompts"))
// .length > 0 .length > 0
// ) { ) {
// // Dynamic Prompts found, enable checkbox // Dynamic Prompts found, enable checkbox
// this.alwaysOnScripts = true; this.alwaysOnScripts = true;
// this.dynamicPromptsAlwaysonScriptName = this.dynamicPromptsAlwaysonScriptName =
// this.enabledExtensions[ this.enabledExtensions[
// this.enabledExtensions.findIndex((e) => e.includes("dynamic prompts")) this.enabledExtensions.findIndex((e) => e.includes("dynamic prompts"))
// ]; ];
// // this.alwaysOnScriptsData[this.dynamicPromptsAlwaysonScriptName] = {}; // this.alwaysOnScriptsData[this.dynamicPromptsAlwaysonScriptName] = {};
// this.dynamicPromptsEnabled = true; this.dynamicPromptsEnabled = true;
// document.getElementById("cbxDynPrompts").disabled = false; document.getElementById("cbxDynPrompts").disabled = false;
// } }
// basically param 0 is true for on, false for off, that's it // 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"; var url = document.getElementById("host").value + "/controlnet/version";
try { try {
@ -85,15 +94,15 @@ const extensions = {
this.controlNetEnabled = true; this.controlNetEnabled = true;
document.getElementById("cbxControlNet").disabled = false; document.getElementById("cbxControlNet").disabled = false;
// ok cool so now we can get the models and modules // ok cool so now we can get the models and modules
this.getModels(); this.getModels(controlNetModelAutoComplete);
this.getModules(); this.getModules(controlNetModuleAutoComplete);
} }
} catch (e) { } catch (e) {
// ?? // ??
global.controlnetAPI = false; global.controlnetAPI = false;
} }
}, },
async getModels() { async getModels(controlNetModelAutoComplete) {
// only worry about inpaint models for now // only worry about inpaint models for now
var url = document.getElementById("host").value + "/controlnet/model_list"; 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("[extensions] Failed to fetch controlnet models");
console.warn(e); 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"]; const allowedModules = ["reference", "inpaint"];
var url = document.getElementById("host").value + "/controlnet/module_list"; 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("[extensions] Failed to fetch controlnet modules");
console.warn(e); 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;
}, },
}; };

View file

@ -422,7 +422,10 @@ async function testHostConnection() {
getSamplers(); getSamplers();
getUpscalers(); getUpscalers();
getModels(); getModels();
extensions.getExtensions(); extensions.getExtensions(
controlNetModelAutoComplete,
controlNetModuleAutoComplete
);
// getLoras(); // getLoras();
// getTIEmbeddings(); // getTIEmbeddings();
// getHypernets(); // getHypernets();
@ -664,6 +667,16 @@ const hrFixUpscalerAutoComplete = createAutoComplete(
document.getElementById("hrFixUpscaler") 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( // const extensionsAutoComplete = createAutoComplete(
// "Extension", // "Extension",
// document.getElementById("extension-ac-select") // document.getElementById("extension-ac-select")
@ -809,8 +822,8 @@ function changeHRFY() {
} }
function changeDynamicPromptsExtension() { function changeDynamicPromptsExtension() {
// extensions.dynamicPromptsActive = extensions.dynamicPromptsActive =
// document.getElementById("cbxDynPrompts").checked; document.getElementById("cbxDynPrompts").checked;
} }
function changeControlNetExtension() { function changeControlNetExtension() {

View file

@ -1313,6 +1313,18 @@ const dream_generate_callback = async (bb, resolution, state) => {
request.inpainting_fill = stableDiffusionData.outpainting_fill; request.inpainting_fill = stableDiffusionData.outpainting_fill;
request.image_cfg_scale = stableDiffusionData.image_cfg_scale; 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 // Dream
_generate("img2img", request, bb, { _generate("img2img", request, bb, {
keepUnmask: state.keepUnmasked ? bbCanvas : null, keepUnmask: state.keepUnmasked ? bbCanvas : null,
@ -2778,6 +2790,8 @@ const sendSeed = (seed) => {
function buildAlwaysOnScripts(state) { function buildAlwaysOnScripts(state) {
if (extensions.alwaysOnScripts) { if (extensions.alwaysOnScripts) {
state.alwayson_scripts = {}; state.alwayson_scripts = {};
addControlNetToAlwaysOnScripts(state);
addDynamicPromptsToAlwaysOnScripts(state);
} }
//TODO find way to remove alwayson_scripts if not active? //TODO find way to remove alwayson_scripts if not active?
@ -2785,15 +2799,12 @@ function buildAlwaysOnScripts(state) {
function addDynamicPromptsToAlwaysOnScripts(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... //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) { if (extensions.dynamicPromptsEnabled) {
// state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName] = {}; state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName] = {};
// var dynval = document.getElementById("cbxDynPrompts").checked; state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName].args = [
// state.alwayson_scripts[extensions.dynamicPromptsAlwaysonScriptName].args = [ extensions.dynamicPromptsActive,
// { ];
// 0: dynval, }
// },
// ];
// }
} }
function addControlNetToAlwaysOnScripts(state) { function addControlNetToAlwaysOnScripts(state) {