diff --git a/ui/easydiffusion/backends/sdkit_common.py b/ui/easydiffusion/backends/sdkit_common.py
index 4c7eba59..bda1414c 100644
--- a/ui/easydiffusion/backends/sdkit_common.py
+++ b/ui/easydiffusion/backends/sdkit_common.py
@@ -81,6 +81,7 @@ def generate_images(
context: Context,
callback=None,
controlnet_filter=None,
+ distilled_guidance_scale: float = 3.5,
output_type="pil",
**req,
):
diff --git a/ui/easydiffusion/backends/webui/impl.py b/ui/easydiffusion/backends/webui/impl.py
index e0adae96..6c8c66bd 100644
--- a/ui/easydiffusion/backends/webui/impl.py
+++ b/ui/easydiffusion/backends/webui/impl.py
@@ -150,6 +150,7 @@ def generate_images(
num_outputs: int = 1,
num_inference_steps: int = 25,
guidance_scale: float = 7.5,
+ distilled_guidance_scale: float = 3.5,
init_image=None,
init_image_mask=None,
control_image=None,
@@ -181,6 +182,7 @@ def generate_images(
"steps": num_inference_steps,
"seed": seed,
"cfg_scale": guidance_scale,
+ "distilled_cfg_scale": distilled_guidance_scale,
"batch_size": num_outputs,
"width": width,
"height": height,
diff --git a/ui/easydiffusion/types.py b/ui/easydiffusion/types.py
index 93bfe08f..c26e4fbc 100644
--- a/ui/easydiffusion/types.py
+++ b/ui/easydiffusion/types.py
@@ -14,6 +14,7 @@ class GenerateImageRequest(BaseModel):
num_outputs: int = 1
num_inference_steps: int = 50
guidance_scale: float = 7.5
+ distilled_guidance_scale: float = 3.5
init_image: Any = None
init_image_mask: Any = None
diff --git a/ui/index.html b/ui/index.html
index 74f07984..1284d785 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -336,6 +336,7 @@
Click to learn more about samplers
+
| Please avoid 'Euler Ancestral' with Flux! |
|
|
| |
| |
- | |
+ | |
|
|
+ | |
diff --git a/ui/media/css/main.css b/ui/media/css/main.css
index aabdccf9..39b7b6e4 100644
--- a/ui/media/css/main.css
+++ b/ui/media/css/main.css
@@ -670,9 +670,9 @@ div.img-preview img {
display: none;
}
-#guidanceWarningText {
+.warning-label {
+ font-size: smaller;
color: var(--status-orange);
- font-size: 9pt;
}
.display-settings {
@@ -1477,11 +1477,6 @@ div.top-right {
margin-top: 6px;
}
-#small_image_warning {
- font-size: smaller;
- color: var(--status-orange);
-}
-
button#save-system-settings-btn {
padding: 4pt 8pt;
}
diff --git a/ui/media/js/main.js b/ui/media/js/main.js
index a1023286..3f372911 100644
--- a/ui/media/js/main.js
+++ b/ui/media/js/main.js
@@ -14,6 +14,10 @@ const taskConfigSetup = {
sampler_name: "Sampler",
num_inference_steps: "Inference Steps",
guidance_scale: "Guidance Scale",
+ distilled_guidance_scale: {
+ label: "Distilled Guidance Scale",
+ visible: ({ reqBody }) => reqBody?.distilled_guidance_scale,
+ },
use_stable_diffusion_model: "Model",
clip_skip: {
label: "Clip Skip",
@@ -76,6 +80,8 @@ let numOutputsParallelField = document.querySelector("#num_outputs_parallel")
let numInferenceStepsField = document.querySelector("#num_inference_steps")
let guidanceScaleSlider = document.querySelector("#guidance_scale_slider")
let guidanceScaleField = document.querySelector("#guidance_scale")
+let distilledGuidanceScaleSlider = document.querySelector("#distilled_guidance_scale_slider")
+let distilledGuidanceScaleField = document.querySelector("#distilled_guidance_scale")
let outputQualitySlider = document.querySelector("#output_quality_slider")
let outputQualityField = document.querySelector("#output_quality")
let outputQualityRow = document.querySelector("#output_quality_row")
@@ -1051,6 +1057,9 @@ function makeImage() {
if (guidanceScaleField.value == "") {
guidanceScaleField.value = guidanceScaleSlider.value / 10
}
+ if (distilledGuidanceScaleField.value == "") {
+ distilledGuidanceScaleField.value = distilledGuidanceScaleSlider.value / 10
+ }
if (hypernetworkStrengthField.value == "") {
hypernetworkStrengthField.value = hypernetworkStrengthSlider.value / 100
}
@@ -1419,6 +1428,9 @@ function getCurrentUserRequest() {
newTask.reqBody.control_filter_to_apply = controlImageFilterField.value
}
}
+ if (stableDiffusionModelField.value.toLowerCase().includes("flux")) {
+ newTask.reqBody.distilled_guidance_scale = parseFloat(distilledGuidanceScaleField.value)
+ }
return newTask
}
@@ -1866,14 +1878,14 @@ function checkGuidanceValue() {
let guidanceWarningText = document.querySelector("#guidanceWarningText")
if (sdModelField.value.toLowerCase().includes("flux")) {
if (guidance > 1.5) {
- guidanceWarningText.innerText = "Flux recommends a guidance scale of 1"
+ guidanceWarningText.innerText = "Flux recommends a 'Guidance Scale' of 1"
guidanceWarning.classList.remove("displayNone")
} else {
guidanceWarning.classList.add("displayNone")
}
} else {
if (guidance < 2) {
- guidanceWarningText.innerText = "A higher Guidance Scale is recommended!"
+ guidanceWarningText.innerText = "A higher 'Guidance Scale' is recommended!"
guidanceWarning.classList.remove("displayNone")
} else {
guidanceWarning.classList.add("displayNone")
@@ -1884,6 +1896,37 @@ sdModelField.addEventListener("change", checkGuidanceValue)
guidanceScaleField.addEventListener("change", checkGuidanceValue)
guidanceScaleSlider.addEventListener("change", checkGuidanceValue)
+function checkGuidanceScaleVisibility() {
+ let guidanceScaleContainer = document.querySelector("#distilled_guidance_scale_container")
+ if (sdModelField.value.toLowerCase().includes("flux")) {
+ guidanceScaleContainer.classList.remove("displayNone")
+ } else {
+ guidanceScaleContainer.classList.add("displayNone")
+ }
+}
+sdModelField.addEventListener("change", checkGuidanceScaleVisibility)
+
+function checkFluxSampler() {
+ let samplerWarning = document.querySelector("#fluxSamplerWarning")
+ if (sdModelField.value.toLowerCase().includes("flux")) {
+ if (samplerField.value == "euler_a") {
+ samplerWarning.classList.remove("displayNone")
+ } else {
+ samplerWarning.classList.add("displayNone")
+ }
+ } else {
+ samplerWarning.classList.add("displayNone")
+ }
+}
+sdModelField.addEventListener("change", checkFluxSampler)
+samplerField.addEventListener("change", checkFluxSampler)
+
+document.addEventListener("refreshModels", function() {
+ checkGuidanceValue()
+ checkGuidanceScaleVisibility()
+ checkFluxSampler()
+})
+
// function onControlImageFilterChange() {
// let filterId = controlImageFilterField.value
// if (filterId.includes("openpose")) {
@@ -2012,6 +2055,27 @@ guidanceScaleSlider.addEventListener("input", updateGuidanceScale)
guidanceScaleField.addEventListener("input", updateGuidanceScaleSlider)
updateGuidanceScale()
+/********************* Distilled Guidance **************************/
+function updateDistilledGuidanceScale() {
+ distilledGuidanceScaleField.value = distilledGuidanceScaleSlider.value / 10
+ distilledGuidanceScaleField.dispatchEvent(new Event("change"))
+}
+
+function updateDistilledGuidanceScaleSlider() {
+ if (distilledGuidanceScaleField.value < 0) {
+ distilledGuidanceScaleField.value = 0
+ } else if (distilledGuidanceScaleField.value > 50) {
+ distilledGuidanceScaleField.value = 50
+ }
+
+ distilledGuidanceScaleSlider.value = distilledGuidanceScaleField.value * 10
+ distilledGuidanceScaleSlider.dispatchEvent(new Event("change"))
+}
+
+distilledGuidanceScaleSlider.addEventListener("input", updateDistilledGuidanceScale)
+distilledGuidanceScaleField.addEventListener("input", updateDistilledGuidanceScaleSlider)
+updateDistilledGuidanceScale()
+
/********************* Prompt Strength *******************/
function updatePromptStrength() {
promptStrengthField.value = promptStrengthSlider.value / 100
|