Skip to content

Commit 223c0f7

Browse files
committed
cleanup code in pr #75
JS formatting, fix the visibility toggle to make slightly more sense, reinstate a few standardized labels
1 parent ecdac7f commit 223c0f7

File tree

2 files changed

+62
-72
lines changed

2 files changed

+62
-72
lines changed

javascript/active.js

Lines changed: 46 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,53 @@
11
(function(){
2-
var accordions = {};
3-
var enabled = {};
4-
onUiUpdate(() => {
5-
var accordion_id_prefix = "#dynthres_";
6-
var extension_checkbox_class = ".dynthres-enabled";
2+
let accordions = {};
3+
let enabled = {};
4+
onUiUpdate(() => {
5+
let accordion_id_prefix = "#dynthres_";
6+
let extension_checkbox_class = ".dynthres-enabled";
77

8-
function triggerEvent(element, eventName) {
9-
var event = document.createEvent("HTMLEvents");
10-
event.initEvent(eventName, false, true);
11-
element.dispatchEvent(event);
12-
}
8+
function attachEnabledButtonListener(checkbox, accordion) {
9+
let span = accordion.querySelector('.label-wrap span');
10+
let badge = document.createElement('input');
11+
badge.type = "checkbox";
12+
badge.checked = checkbox.checked;
13+
badge.addEventListener('click', (e) => {
14+
checkbox.checked = !checkbox.checked;
15+
checkbox.dispatchEvent(new Event('change'));
16+
e.stopPropagation();
17+
});
1318

14-
function updateActiveState(checkbox, accordion) {
15-
// change checkbox state
16-
const badge = accordion.querySelector('.label-wrap span input');
17-
badge.checked = checkbox.checked;
18-
}
19+
badge.className = checkbox.className;
20+
badge.classList.add('primary');
21+
span.insertBefore(badge, span.firstChild);
22+
let space = document.createElement('span');
23+
space.innerHTML = " ";
24+
span.insertBefore(space, badge.nextSibling);
1925

20-
function attachEnabledButtonListener(checkbox, accordion) {
21-
// add checkbox
22-
const span = accordion.querySelector('.label-wrap span');
23-
const badge = document.createElement('input');
24-
badge.type = "checkbox";
25-
badge.checked = checkbox.checked;
26-
badge.addEventListener('click', (e) => {
27-
checkbox.checked = !checkbox.checked;
28-
triggerEvent(checkbox, 'change');
29-
e.stopPropagation();
30-
});
26+
checkbox.addEventListener('click', () => {
27+
let badge = accordion.querySelector('.label-wrap span input');
28+
badge.checked = checkbox.checked;
29+
});
30+
checkbox.parentNode.style.display = "none";
31+
}
3132

32-
badge.className = checkbox.className;
33-
badge.classList.add('primary');
34-
span.insertBefore(badge, span.firstChild);
35-
var space = document.createElement('span');
36-
space.innerHTML = " ";
37-
span.insertBefore(space, badge.nextSibling);
33+
if (Object.keys(accordions).length < 2) {
34+
let accordion = gradioApp().querySelector(accordion_id_prefix + 'txt2img');
35+
if (accordion) {
36+
accordions.txt2img = accordion;
37+
}
38+
accordion = gradioApp().querySelector(accordion_id_prefix + 'img2img');
39+
if (accordion) {
40+
accordions.img2img = accordion;
41+
}
42+
}
3843

39-
checkbox.addEventListener('click', () => {
40-
updateActiveState(checkbox, accordion);
41-
});
42-
checkbox.parentNode.style.display = "none";
43-
}
44-
45-
if (Object.keys(accordions).length < 2) {
46-
var accordion = gradioApp().querySelector(accordion_id_prefix + 'txt2img');
47-
if (accordion)
48-
accordions.txt2img = accordion;
49-
accordion = gradioApp().querySelector(accordion_id_prefix + 'img2img');
50-
if (accordion)
51-
accordions.img2img = accordion;
52-
}
53-
54-
if (Object.keys(accordions).length > 0 && accordions.txt2img && !enabled.txt2img) {
55-
enabled.txt2img = accordions.txt2img.querySelector(extension_checkbox_class + ' input');
56-
attachEnabledButtonListener(enabled.txt2img, accordions.txt2img);
57-
}
58-
if (Object.keys(accordions).length > 0 && accordions.img2img && !enabled.img2img) {
59-
enabled.img2img = accordions.img2img.querySelector(extension_checkbox_class + ' input');
60-
attachEnabledButtonListener(enabled.img2img, accordions.img2img);
61-
}
62-
});
44+
if (Object.keys(accordions).length > 0 && accordions.txt2img && !enabled.txt2img) {
45+
enabled.txt2img = accordions.txt2img.querySelector(extension_checkbox_class + ' input');
46+
attachEnabledButtonListener(enabled.txt2img, accordions.txt2img);
47+
}
48+
if (Object.keys(accordions).length > 0 && accordions.img2img && !enabled.img2img) {
49+
enabled.img2img = accordions.img2img.querySelector(extension_checkbox_class + ' input');
50+
attachEnabledButtonListener(enabled.img2img, accordions.img2img);
51+
}
52+
});
6353
})();

scripts/dynamic_thresholding.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,24 @@ def vis_change(isVis):
4444
# "Dynamic Thresholding (CFG Scale Fix)"
4545
with gr.Accordion("Dynamic Thresholding (CFG Scale Fix)", open=False, elem_id="dynthres_" + ("img2img" if is_img2img else "txt2img")):
4646
with gr.Row():
47-
enabled = gr.Checkbox(value=False, label="Dynamic Thresholding Enable", elem_classes=["dynthres-enabled"])
48-
gr.HTML(value=f"View <a style=\"border-bottom: 1px #00ffff dotted;\" href=\"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding/wiki/Usage-Tips\">the wiki for usage tips.</a><br><br>", elem_id='dynthres_wiki_link')
47+
enabled = gr.Checkbox(value=False, label="Enable Dynamic Thresholding (CFG Scale Fix)", elem_classes=["dynthres-enabled"])
4948
with gr.Group(visible=False) as accordion:
49+
gr.HTML(value=f"View <a style=\"border-bottom: 1px #00ffff dotted;\" href=\"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding/wiki/Usage-Tips\">the wiki for usage tips.</a><br><br>", elem_id='dynthres_wiki_link')
5050
mimic_scale = gr.Slider(minimum=1.0, maximum=30.0, step=0.5, label='Mimic CFG Scale', value=7.0, elem_id='dynthres_mimic_scale')
51-
with gr.Accordion("Advanced Options", open=False, elem_id='dynthres_advanced_opts'):
52-
with gr.Row():
53-
threshold_percentile = gr.Slider(minimum=90.0, value=100.0, maximum=100.0, step=0.05, label='Top percentile of latents to clamp', elem_id='dynthres_threshold_percentile')
54-
interpolate_phi = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="Interpolate Phi", value=1.0, elem_id='dynthres_interpolate_phi')
55-
with gr.Row():
56-
mimic_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="Mimic Scale Scheduler", elem_id='dynthres_mimic_mode')
57-
cfg_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="CFG Scale Scheduler", elem_id='dynthres_cfg_mode')
58-
mimic_scale_min = gr.Slider(minimum=0.0, maximum=30.0, step=0.5, visible=False, label="Minimum value of the Mimic Scale Scheduler", elem_id='dynthres_mimic_scale_min')
59-
cfg_scale_min = gr.Slider(minimum=0.0, maximum=30.0, step=0.5, visible=False, label="Minimum value of the CFG Scale Scheduler", elem_id='dynthres_cfg_scale_min')
60-
sched_val = gr.Slider(minimum=0.0, maximum=40.0, step=0.5, value=4.0, visible=False, label="Scheduler Value", info="Value unique to the scheduler mode - for Power Up/Down, this is the power. For Linear/Cosine Repeating, this is the number of repeats per image.", elem_id='dynthres_sched_val')
61-
with gr.Row():
62-
separate_feature_channels = gr.Checkbox(value=True, label="Separate Feature Channels", elem_id='dynthres_separate_feature_channels')
63-
scaling_startpoint = gr.Radio(["ZERO", "MEAN"], value="MEAN", label="Scaling Startpoint")
64-
variability_measure = gr.Radio(["STD", "AD"], value="AD", label="Variability Measure")
51+
with gr.Accordion("Advanced Options", open=False, elem_id='dynthres_advanced_opts'):
52+
with gr.Row():
53+
threshold_percentile = gr.Slider(minimum=90.0, value=100.0, maximum=100.0, step=0.05, label='Top percentile of latents to clamp', elem_id='dynthres_threshold_percentile')
54+
interpolate_phi = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="Interpolate Phi", value=1.0, elem_id='dynthres_interpolate_phi')
55+
with gr.Row():
56+
mimic_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="Mimic Scale Scheduler", elem_id='dynthres_mimic_mode')
57+
cfg_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="CFG Scale Scheduler", elem_id='dynthres_cfg_mode')
58+
mimic_scale_min = gr.Slider(minimum=0.0, maximum=30.0, step=0.5, visible=False, label="Minimum value of the Mimic Scale Scheduler", elem_id='dynthres_mimic_scale_min')
59+
cfg_scale_min = gr.Slider(minimum=0.0, maximum=30.0, step=0.5, visible=False, label="Minimum value of the CFG Scale Scheduler", elem_id='dynthres_cfg_scale_min')
60+
sched_val = gr.Slider(minimum=0.0, maximum=40.0, step=0.5, value=4.0, visible=False, label="Scheduler Value", info="Value unique to the scheduler mode - for Power Up/Down, this is the power. For Linear/Cosine Repeating, this is the number of repeats per image.", elem_id='dynthres_sched_val')
61+
with gr.Row():
62+
separate_feature_channels = gr.Checkbox(value=True, label="Separate Feature Channels", elem_id='dynthres_separate_feature_channels')
63+
scaling_startpoint = gr.Radio(["ZERO", "MEAN"], value="MEAN", label="Scaling Startpoint")
64+
variability_measure = gr.Radio(["STD", "AD"], value="AD", label="Variability Measure")
6565
def shouldShowSchedulerValue(cfgMode, mimicMode):
6666
sched_vis = cfgMode in MODES_WITH_VALUE or mimicMode in MODES_WITH_VALUE
6767
return vis_change(sched_vis), vis_change(mimicMode != "Constant"), vis_change(cfgMode != "Constant")

0 commit comments

Comments
 (0)