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 -->
|
<!-- 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 ⩵ 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 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
|
||||||
|
|
|
@ -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;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
19
js/index.js
19
js/index.js
|
@ -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() {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue