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:
parent
20f0eb921e
commit
de915b33a3
4 changed files with 107 additions and 40 deletions
23
index.html
23
index.html
|
@ -198,13 +198,13 @@
|
|||
<!-- Extensions section -->
|
||||
<button type="button" class="collapsible">Extensions</button>
|
||||
<div class="content">
|
||||
<!-- <input
|
||||
<input
|
||||
type="checkbox"
|
||||
id="cbxDynPrompts"
|
||||
onchange="changeDynamicPromptsExtension()"
|
||||
disabled="disabled" />
|
||||
<label for="cbxDynPrompts">Dynamic Prompts</label>
|
||||
<br /> -->
|
||||
<br />
|
||||
<input
|
||||
type="checkbox"
|
||||
id="cbxControlNet"
|
||||
|
@ -213,11 +213,19 @@
|
|||
<label for="cbxControlNet">ControlNet In/Outpainting</label>
|
||||
<br class="controlnetElement" />
|
||||
<label id="cnModuleLabel" class="controlnetElement">
|
||||
CN Preprocessor
|
||||
Preprocessor
|
||||
</label>
|
||||
<div id="controlNetModule" class="controlnetElement"></div>
|
||||
<label id="cnModelLabel" class="controlnetElement">CN Model</label>
|
||||
<div id="controlNetModel" class="controlnetElement"></div>
|
||||
<div id="controlNetModule-ac-select" class="controlnetElement"></div>
|
||||
<label id="cnModelLabel" class="controlnetElement">Model</label>
|
||||
<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 ⩵ CN</option>
|
||||
<option value="My prompt is more important">prompt > CN</option>
|
||||
<option value="ControlNet is more important">prompt < CN</option>
|
||||
</select>
|
||||
<!-- <div id="referenceStyleFidelity" class="controlnetElement"></div> -->
|
||||
</div>
|
||||
<!-- Save/load image section -->
|
||||
|
@ -268,7 +276,8 @@
|
|||
<br />
|
||||
<span id="version">
|
||||
<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>
|
||||
<br />
|
||||
<a
|
||||
|
|
|
@ -14,7 +14,10 @@ const extensions = {
|
|||
controlNetModels: null,
|
||||
controlNetModules: null,
|
||||
|
||||
async getExtensions() {
|
||||
async getExtensions(
|
||||
controlNetModelAutoComplete,
|
||||
controlNetModuleAutoComplete
|
||||
) {
|
||||
const allowedExtensions = [
|
||||
"controlnet",
|
||||
// "none",
|
||||
|
@ -44,31 +47,37 @@ const extensions = {
|
|||
console.warn(e);
|
||||
}
|
||||
this.checkForDynamicPrompts();
|
||||
this.checkForControlNet();
|
||||
this.checkForControlNet(
|
||||
controlNetModelAutoComplete,
|
||||
controlNetModuleAutoComplete
|
||||
);
|
||||
//checkForSAM(); //or inpaintAnything or something i dunno
|
||||
//checkForADetailer(); //? this one seems iffy
|
||||
//checkForSAG(); //??
|
||||
},
|
||||
|
||||
async checkForDynamicPrompts() {
|
||||
// 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;
|
||||
// }
|
||||
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;
|
||||
},
|
||||
};
|
||||
|
|
19
js/index.js
19
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() {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue