diff --git a/CHANGELOG.md b/CHANGELOG.md
index d78943f42..b989132f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -58,6 +58,7 @@ This release can be considered an LTS release before we kick off the next round
- create video from generated grid images
supports all standard video types and interpolation
- UI:
+ - better gallery and networks sidebar sizing
- add additional [hotkeys](https://github.com/vladmandic/automatic/wiki/Hotkeys)
- add show networks on startup setting
- better mapping of networks previews
@@ -68,6 +69,8 @@ This release can be considered an LTS release before we kick off the next round
- Auto-remove invalid packages from `venv/site-packages`
e.g. packages starting with `~` which are left-over due to windows access violation
- Requirements: update
+ - Scripts:
+ - More verbose descriptions for all scripts
- Model loader:
- Report modules included in safetensors when attempting to load a model
- CLI:
diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js
index 9a33baa86..77fe125f3 100644
--- a/javascript/extraNetworks.js
+++ b/javascript/extraNetworks.js
@@ -481,11 +481,13 @@ function setupExtraNetworksForTab(tabname) {
en.style.position = 'absolute';
en.style.height = 'auto';
en.style.width = `${window.opts.extra_networks_sidebar_width}vw`;
+ en.style.maxWidth = '655px';
en.style.right = '0';
en.style.top = '13em';
en.style.transition = 'width 0.3s ease';
en.style.zIndex = 100;
- gradioApp().getElementById(`${tabname}_settings`).parentNode.style.width = `${100 - 2 - window.opts.extra_networks_sidebar_width}vw`;
+ // gradioApp().getElementById(`${tabname}_settings`).parentNode.style.width = `${100 - 2 - window.opts.extra_networks_sidebar_width}vw`;
+ gradioApp().getElementById(`${tabname}_settings`).parentNode.style.width = `calc(100vw - 2em - min(${window.opts.extra_networks_sidebar_width}vw, 655px))`;
} else {
en.style.position = 'relative';
en.style.height = 'unset';
diff --git a/modules/face/__init__.py b/modules/face/__init__.py
index aae3cdaa2..19af6d01b 100644
--- a/modules/face/__init__.py
+++ b/modules/face/__init__.py
@@ -9,7 +9,7 @@ debug = shared.log.trace if os.environ.get('SD_FACE_DEBUG', None) is not None el
class Script(scripts.Script):
def title(self):
- return 'Face'
+ return 'Face: Multiple ID Transfers'
def show(self, is_img2img):
return True if shared.native else False
@@ -45,7 +45,7 @@ class Script(scripts.Script):
# return signature is array of gradio components
def ui(self, _is_img2img):
with gr.Row():
- gr.HTML("  Face module
")
+ gr.HTML("  Face: Multiple ID Transfers
")
with gr.Row():
mode = gr.Dropdown(label='Mode', choices=['None', 'FaceID', 'FaceSwap', 'InstantID', 'PhotoMaker'], value='None')
with gr.Group(visible=False) as cfg_faceid:
diff --git a/modules/scripts.py b/modules/scripts.py
index 8a67d0a50..cf2cf25b9 100644
--- a/modules/scripts.py
+++ b/modules/scripts.py
@@ -352,7 +352,9 @@ class ScriptRunner:
self.selectable_scripts.clear()
auto_processing_scripts = scripts_auto_postprocessing.create_auto_preprocessing_script_data()
- for script_class, path, _basedir, _script_module in auto_processing_scripts + scripts_data:
+ all_scripts = auto_processing_scripts + scripts_data
+ sorted_scripts = sorted(all_scripts, key=lambda x: x.script_class().title().lower())
+ for script_class, path, _basedir, _script_module in sorted_scripts:
try:
script = script_class()
script.filename = path
diff --git a/modules/ui_common.py b/modules/ui_common.py
index 9ad87c17f..9c4bb5cdc 100644
--- a/modules/ui_common.py
+++ b/modules/ui_common.py
@@ -246,7 +246,7 @@ def create_output_panel(tabname, preview=True, prompt=None, height=None):
# columns are for <576px, <768px, <992px, <1200px, <1400px, >1400px
result_gallery = gr.Gallery(value=[],
label='Output', show_label=False, show_download_button=True, allow_preview=True, container=False, preview=preview,
- columns=5, object_fit='scale-down', height=height,
+ columns=4, object_fit='scale-down', height=height,
elem_id=f"{tabname}_gallery",
)
if prompt is not None:
diff --git a/scripts/animatediff.py b/scripts/animatediff.py
index fca09424b..4c50f9cf6 100644
--- a/scripts/animatediff.py
+++ b/scripts/animatediff.py
@@ -189,7 +189,7 @@ def set_free_noise(frames):
class Script(scripts.Script):
def title(self):
- return 'AnimateDiff'
+ return 'Video AnimateDiff'
def show(self, is_img2img):
# return scripts.AlwaysVisible if shared.native else False
diff --git a/scripts/apg.py b/scripts/apg.py
index 6a3020c38..0476da246 100644
--- a/scripts/apg.py
+++ b/scripts/apg.py
@@ -9,14 +9,14 @@ class Script(scripts.Script):
self.register()
def title(self):
- return 'APG'
+ return 'APG: Adaptive Projected Guidance'
def show(self, is_img2img):
return not is_img2img if shared.native else False
def ui(self, _is_img2img): # ui elements
with gr.Row():
- gr.HTML('  APG: Adaptive projected guidance
')
+ gr.HTML('  APG: Adaptive Projected Guidance
')
with gr.Row():
eta = gr.Slider(label="ETA", value=1.0, minimum=0, maximum=2.0, step=0.05)
momentum = gr.Slider(label="Momentum", value=-0.50, minimum=-1.0, maximum=1.0, step=0.05)
diff --git a/scripts/blipdiffusion.py b/scripts/blipdiffusion.py
index 39d8974e1..0acc80929 100644
--- a/scripts/blipdiffusion.py
+++ b/scripts/blipdiffusion.py
@@ -2,19 +2,16 @@ import gradio as gr
from modules import scripts, processing, shared, sd_models
-title = 'BLIP Diffusion'
-
-
class Script(scripts.Script):
def title(self):
- return title
+ return 'BLIP Diffusion: Controllable Generation and Editing'
def show(self, is_img2img):
return is_img2img if shared.native else False
def ui(self, _is_img2img):
with gr.Row():
- gr.HTML('  BLIP Diffusion
')
+ gr.HTML('  BLIP Diffusion: Controllable Generation and Editing
')
with gr.Row():
source_subject = gr.Textbox(value='', label='Source subject')
with gr.Row():
@@ -26,7 +23,7 @@ class Script(scripts.Script):
def run(self, p: processing.StableDiffusionProcessing, source_subject, target_subject, prompt_strength): # pylint: disable=arguments-differ, unused-argument
c = shared.sd_model.__class__.__name__ if shared.sd_loaded else ''
if c != 'BlipDiffusionPipeline':
- shared.log.error(f'{title}: model selected={c} required=BLIPDiffusion')
+ shared.log.error(f'BLIP: model selected={c} required=BLIPDiffusion')
return None
if hasattr(p, 'init_images') and len(p.init_images) > 0:
p.task_args['reference_image'] = p.init_images[0]
@@ -41,5 +38,5 @@ class Script(scripts.Script):
processed = processing.process_images(p)
return processed
else:
- shared.log.error(f'{title}: no init_images')
+ shared.log.error('BLIP: no init_images')
return None
diff --git a/scripts/cogvideo.py b/scripts/cogvideo.py
index a4a3141d4..7f2c7225e 100644
--- a/scripts/cogvideo.py
+++ b/scripts/cogvideo.py
@@ -22,7 +22,7 @@ debug = (os.environ.get('SD_LOAD_DEBUG', None) is not None) or (os.environ.get('
class Script(scripts.Script):
def title(self):
- return 'CogVideoX'
+ return 'Video CogVideoX'
def show(self, is_img2img):
return shared.native
diff --git a/scripts/consistory_ext.py b/scripts/consistory_ext.py
index b7454aa75..45de1ea6c 100644
--- a/scripts/consistory_ext.py
+++ b/scripts/consistory_ext.py
@@ -22,7 +22,7 @@ class Script(scripts.Script):
self.anchor_cache_second_stage = None
def title(self):
- return 'ConsiStory'
+ return 'ConsiStory: Consistent Image Generation'
def show(self, is_img2img):
return not is_img2img if shared.native and shared.cmd_opts.experimental else False
diff --git a/scripts/ctrlx.py b/scripts/ctrlx.py
index 69d5994df..f372e2a94 100644
--- a/scripts/ctrlx.py
+++ b/scripts/ctrlx.py
@@ -7,14 +7,14 @@ from modules import shared, scripts, processing, processing_helpers, sd_models,
class Script(scripts.Script):
def title(self):
- return 'Ctrl-X'
+ return 'Ctrl-X: Controlling Structure and Appearance'
def show(self, is_img2img):
return shared.native
def ui(self, _is_img2img):
with gr.Row():
- gr.HTML('  Ctrl-X
')
+ gr.HTML('  Ctrl-X: Controlling Structure and Appearance
')
with gr.Accordion(label='Structure', open=True):
with gr.Row():
struct_prompt = gr.Textbox(label='Prompt', value='', rows=1)
diff --git a/scripts/demofusion.py b/scripts/demofusion.py
index f7cdfe543..6625c0c79 100644
--- a/scripts/demofusion.py
+++ b/scripts/demofusion.py
@@ -1221,7 +1221,7 @@ class DemoFusionSDXLPipeline(DiffusionPipeline, FromSingleFileMixin, LoraLoaderM
class Script(scripts.Script):
def title(self):
- return 'DemoFusion'
+ return 'DemoFusion: High-Resolution Image Generation'
def show(self, is_img2img):
return not is_img2img if shared.native else False
@@ -1229,7 +1229,7 @@ class Script(scripts.Script):
# return signature is array of gradio components
def ui(self, _is_img2img):
with gr.Row():
- gr.HTML('  DemoFusion
')
+ gr.HTML('  DemoFusion: High-Resolution Image Generation
')
with gr.Row():
cosine_scale_1 = gr.Slider(minimum=0, maximum=5, step=0.1, value=3, label="Cosine scale 1")
cosine_scale_2 = gr.Slider(minimum=0, maximum=5, step=0.1, value=1, label="Cosine scale 2")
diff --git a/scripts/differential_diffusion.py b/scripts/differential_diffusion.py
index 705242987..da4ae0e2e 100644
--- a/scripts/differential_diffusion.py
+++ b/scripts/differential_diffusion.py
@@ -1858,14 +1858,14 @@ MODELS = {
class Script(scripts.Script):
def title(self):
- return 'Differential diffusion'
+ return 'Differential diffusion: Individual Pixel Strength'
def show(self, is_img2img):
return is_img2img if shared.native else False
def ui(self, _is_img2img):
with gr.Row():
- gr.HTML('  Differential diffusion
Select a model for auto-preprocess or upload an image map
')
+ gr.HTML('  Differential diffusion: Individual Pixel Strength
Select a model for auto-preprocess or upload an image map
')
with gr.Row():
enabled = gr.Checkbox(label='Enabled', value=True)
invert = gr.Checkbox(label='Mask invert', value=False)
diff --git a/scripts/hdr.py b/scripts/hdr.py
index 788c0add2..9afc3673b 100644
--- a/scripts/hdr.py
+++ b/scripts/hdr.py
@@ -11,14 +11,14 @@ from modules.shared import opts, state
class Script(scripts.Script):
def title(self):
- return "HDR"
+ return "HDR: High Dynamic Range"
def show(self, is_img2img):
return True
def ui(self, is_img2img):
with gr.Row():
- gr.HTML("  High Dynamic Range
")
+ gr.HTML("  HDR: High Dynamic Range
")
with gr.Row():
save_hdr = gr.Checkbox(label="Save HDR image", value=True)
hdr_range = gr.Slider(minimum=0, maximum=1, step=0.05, value=0.65, label='HDR range')
diff --git a/scripts/image2video.py b/scripts/image2video.py
index 332972a6d..876ed3193 100644
--- a/scripts/image2video.py
+++ b/scripts/image2video.py
@@ -13,7 +13,7 @@ MODELS = [
class Script(scripts.Script):
def title(self):
- return 'Image-to-Video'
+ return 'Video VGen Image-to-Video'
def show(self, is_img2img):
return is_img2img if shared.native else False
@@ -102,6 +102,7 @@ class Script(scripts.Script):
processed = processing.process_images(p)
shared.sd_model.motion_adapter = None
+ processed = None
if model_name == 'VGen':
if not isinstance(shared.sd_model, diffusers.I2VGenXLPipeline):
shared.log.info(f'Image2Video VGen load: model={repo_id}')
diff --git a/scripts/instantir.py b/scripts/instantir.py
index 4c7ce77b7..5eb7d503a 100644
--- a/scripts/instantir.py
+++ b/scripts/instantir.py
@@ -12,7 +12,7 @@ class Script(scripts.Script):
self.orig_ip_unapply = None
def title(self):
- return 'InstantIR'
+ return 'InstantIR: Image Restoration'
def show(self, is_img2img):
return is_img2img if shared.native else False
diff --git a/scripts/k_diff.py b/scripts/k_diff.py
index 354df5d4b..92b43149d 100644
--- a/scripts/k_diff.py
+++ b/scripts/k_diff.py
@@ -9,14 +9,14 @@ class Script(scripts.Script):
orig_pipe = None
def title(self):
- return 'K-Diffusion'
+ return 'K-Diffusion Samplers'
def show(self, is_img2img):
return not is_img2img if shared.native else False
def ui(self, _is_img2img): # ui elements
with gr.Row():
- gr.HTML('  K-Diffusion samplers
')
+ gr.HTML('  K-Diffusion Samplers
')
with gr.Row():
sampler = gr.Dropdown(label="Sampler", choices=self.samplers())
return [sampler]
diff --git a/scripts/layerdiffuse.py b/scripts/layerdiffuse.py
index a1e15aa8b..ecf7da1d3 100644
--- a/scripts/layerdiffuse.py
+++ b/scripts/layerdiffuse.py
@@ -5,7 +5,7 @@ from modules import shared, scripts, sd_models
class Script(scripts.Script):
def title(self):
- return 'LayerDiffuse'
+ return 'LayerDiffuse: Transparent Image'
def show(self, is_img2img):
return True if shared.native else False
@@ -40,7 +40,7 @@ class Script(scripts.Script):
def ui(self, _is_img2img):
with gr.Row():
gr.HTML("""
-   LayerDiffuse
+   LayerDiffuse: Transparent Image