diff --git a/javascript/active.js b/javascript/active.js index e35e4c3..5af4cc9 100644 --- a/javascript/active.js +++ b/javascript/active.js @@ -1,63 +1,53 @@ (function(){ -var accordions = {}; -var enabled = {}; -onUiUpdate(() => { - var accordion_id_prefix = "#dynthres_"; - var extension_checkbox_class = ".dynthres-enabled"; + let accordions = {}; + let enabled = {}; + onUiUpdate(() => { + let accordion_id_prefix = "#dynthres_"; + let extension_checkbox_class = ".dynthres-enabled"; - function triggerEvent(element, eventName) { - var event = document.createEvent("HTMLEvents"); - event.initEvent(eventName, false, true); - element.dispatchEvent(event); - } + function attachEnabledButtonListener(checkbox, accordion) { + let span = accordion.querySelector('.label-wrap span'); + let badge = document.createElement('input'); + badge.type = "checkbox"; + badge.checked = checkbox.checked; + badge.addEventListener('click', (e) => { + checkbox.checked = !checkbox.checked; + checkbox.dispatchEvent(new Event('change')); + e.stopPropagation(); + }); - function updateActiveState(checkbox, accordion) { - // change checkbox state - const badge = accordion.querySelector('.label-wrap span input'); - badge.checked = checkbox.checked; - } + badge.className = checkbox.className; + badge.classList.add('primary'); + span.insertBefore(badge, span.firstChild); + let space = document.createElement('span'); + space.innerHTML = " "; + span.insertBefore(space, badge.nextSibling); - function attachEnabledButtonListener(checkbox, accordion) { - // add checkbox - const span = accordion.querySelector('.label-wrap span'); - const badge = document.createElement('input'); - badge.type = "checkbox"; - badge.checked = checkbox.checked; - badge.addEventListener('click', (e) => { - checkbox.checked = !checkbox.checked; - triggerEvent(checkbox, 'change'); - e.stopPropagation(); - }); + checkbox.addEventListener('click', () => { + let badge = accordion.querySelector('.label-wrap span input'); + badge.checked = checkbox.checked; + }); + checkbox.parentNode.style.display = "none"; + } - badge.className = checkbox.className; - badge.classList.add('primary'); - span.insertBefore(badge, span.firstChild); - var space = document.createElement('span'); - space.innerHTML = " "; - span.insertBefore(space, badge.nextSibling); + if (Object.keys(accordions).length < 2) { + let accordion = gradioApp().querySelector(accordion_id_prefix + 'txt2img'); + if (accordion) { + accordions.txt2img = accordion; + } + accordion = gradioApp().querySelector(accordion_id_prefix + 'img2img'); + if (accordion) { + accordions.img2img = accordion; + } + } - checkbox.addEventListener('click', () => { - updateActiveState(checkbox, accordion); - }); - checkbox.parentNode.style.display = "none"; - } - - if (Object.keys(accordions).length < 2) { - var accordion = gradioApp().querySelector(accordion_id_prefix + 'txt2img'); - if (accordion) - accordions.txt2img = accordion; - accordion = gradioApp().querySelector(accordion_id_prefix + 'img2img'); - if (accordion) - accordions.img2img = accordion; - } - - if (Object.keys(accordions).length > 0 && accordions.txt2img && !enabled.txt2img) { - enabled.txt2img = accordions.txt2img.querySelector(extension_checkbox_class + ' input'); - attachEnabledButtonListener(enabled.txt2img, accordions.txt2img); - } - if (Object.keys(accordions).length > 0 && accordions.img2img && !enabled.img2img) { - enabled.img2img = accordions.img2img.querySelector(extension_checkbox_class + ' input'); - attachEnabledButtonListener(enabled.img2img, accordions.img2img); - } -}); + if (Object.keys(accordions).length > 0 && accordions.txt2img && !enabled.txt2img) { + enabled.txt2img = accordions.txt2img.querySelector(extension_checkbox_class + ' input'); + attachEnabledButtonListener(enabled.txt2img, accordions.txt2img); + } + if (Object.keys(accordions).length > 0 && accordions.img2img && !enabled.img2img) { + enabled.img2img = accordions.img2img.querySelector(extension_checkbox_class + ' input'); + attachEnabledButtonListener(enabled.img2img, accordions.img2img); + } + }); })(); diff --git a/scripts/dynamic_thresholding.py b/scripts/dynamic_thresholding.py index 7aff373..b88246b 100644 --- a/scripts/dynamic_thresholding.py +++ b/scripts/dynamic_thresholding.py @@ -44,24 +44,24 @@ class Script(scripts.Script): # "Dynamic Thresholding (CFG Scale Fix)" with gr.Accordion("Dynamic Thresholding (CFG Scale Fix)", open=False, elem_id="dynthres_" + ("img2img" if is_img2img else "txt2img")): with gr.Row(): - enabled = gr.Checkbox(value=False, label="Dynamic Thresholding Enable", elem_classes=["dynthres-enabled"]) - gr.HTML(value=f"View the wiki for usage tips.

", elem_id='dynthres_wiki_link') + enabled = gr.Checkbox(value=False, label="Enable Dynamic Thresholding (CFG Scale Fix)", elem_classes=["dynthres-enabled"]) with gr.Group(visible=False) as accordion: + gr.HTML(value=f"View the wiki for usage tips.

", elem_id='dynthres_wiki_link') 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') - with gr.Accordion("Advanced Options", open=False, elem_id='dynthres_advanced_opts'): - with gr.Row(): - 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') - interpolate_phi = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="Interpolate Phi", value=1.0, elem_id='dynthres_interpolate_phi') - with gr.Row(): - mimic_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="Mimic Scale Scheduler", elem_id='dynthres_mimic_mode') - cfg_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="CFG Scale Scheduler", elem_id='dynthres_cfg_mode') - 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') - 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') - 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') - with gr.Row(): - separate_feature_channels = gr.Checkbox(value=True, label="Separate Feature Channels", elem_id='dynthres_separate_feature_channels') - scaling_startpoint = gr.Radio(["ZERO", "MEAN"], value="MEAN", label="Scaling Startpoint") - variability_measure = gr.Radio(["STD", "AD"], value="AD", label="Variability Measure") + with gr.Accordion("Advanced Options", open=False, elem_id='dynthres_advanced_opts'): + with gr.Row(): + 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') + interpolate_phi = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="Interpolate Phi", value=1.0, elem_id='dynthres_interpolate_phi') + with gr.Row(): + mimic_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="Mimic Scale Scheduler", elem_id='dynthres_mimic_mode') + cfg_mode = gr.Dropdown(dynthres_core.DynThresh.Modes, value="Constant", label="CFG Scale Scheduler", elem_id='dynthres_cfg_mode') + 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') + 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') + 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') + with gr.Row(): + separate_feature_channels = gr.Checkbox(value=True, label="Separate Feature Channels", elem_id='dynthres_separate_feature_channels') + scaling_startpoint = gr.Radio(["ZERO", "MEAN"], value="MEAN", label="Scaling Startpoint") + variability_measure = gr.Radio(["STD", "AD"], value="AD", label="Variability Measure") def shouldShowSchedulerValue(cfgMode, mimicMode): sched_vis = cfgMode in MODES_WITH_VALUE or mimicMode in MODES_WITH_VALUE return vis_change(sched_vis), vis_change(mimicMode != "Constant"), vis_change(cfgMode != "Constant")