diff --git a/CHANGELOG.md b/CHANGELOG.md
index dba84a637..330e9f4b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -79,6 +79,7 @@ But also many smaller quality-of-life improvements - for full details, see [Chan
- legacy panels **T2I** and **I2I** are disabled by default
you can re-enable them in *settings -> ui -> hide legacy tabs*
- new panel: **Server Info** with detailed runtime informaton
+ - rename **Scripts** to **Extras** and reorganize to split internal functionality vs external extensions
- **Networks** add **UNet/DiT**
- **Localization** improved translation quality and new translations locales:
*en, en1, en2, en3, en4, hr, es, it, fr, de, pt, ru, zh, ja, ko, hi, ar, bn, ur, id, vi, tr, sr, po, he, xx, yy, qq, tlh*
@@ -103,6 +104,7 @@ But also many smaller quality-of-life improvements - for full details, see [Chan
- **Obsoleted**
- removed support for additional quantization engines: *BitsAndBytes, TorchAO, Optimum-Quanto, NNCF*
*note*: SDNQ is quantization engine of choice for SD.Next
+ - removed `flux_enhance` script
- **Internal**
- `python==3.13` full support
- `python==3.14` initial support
diff --git a/html/locale_en.json b/html/locale_en.json
index 84d715fcf..6c6c2a662 100644
--- a/html/locale_en.json
+++ b/html/locale_en.json
@@ -424,6 +424,7 @@
"e": [
{"id":"component-883","label":"Enhance prompt","localized":"","hint":"","ui":"script_flux_prompt_enhance_(legacy)"},
{"id":"prompt_enhance_apply","label":"Enhance now","localized":"","hint":"Run prompt enhancement using the selected LLM model","ui":"script_prompt_enhance"},
+ {"id":"","label":"Extras","localized":"","hint":"Additional functionality that can be enabled during generate"},
{"id":"btn_extensions","label":"Extensions","localized":"","hint":"Application extensions"},
{"id":"","label":"Extract LoRA","localized":"","hint":""},
{"id":"","label":"Embedded metadata","localized":"","hint":""},
@@ -1242,7 +1243,7 @@
],
"s": [
{"id":"txt2img_sampler","label":"Sampler","localized":"","hint":"Settings related to sampler and seed selection and configuration. Samplers guide the process of turning noise into an image over multiple steps.","ui":"txt2img"},
- {"id":"txt2img_scripts","label":"Scripts","localized":"","hint":"Enable additional features by using selected scripts during generate process","ui":"txt2img"},
+ {"id":"","label":"Scripts","localized":"","hint":"Enable additional features by using selected scripts during generate process","ui":"txt2img"},
{"id":"","label":"Scale","localized":"","hint":"Resize image to target scale. If resize fixed width/height are set this option is ignored","ui":"txt2img"},
{"id":"xy_grid_swap_axes_button","label":"Swap X/Y","localized":"","hint":"","ui":"script_xyz_grid_script"},
{"id":"yz_grid_swap_axes_button","label":"Swap Y/Z","localized":"","hint":"","ui":"script_xyz_grid_script"},
diff --git a/installer.py b/installer.py
index 188acb767..a701cb644 100644
--- a/installer.py
+++ b/installer.py
@@ -527,7 +527,7 @@ def check_transformers():
else:
# Git commit-pinned version
current = opts.get('transformers_version', '')
- if (pkg_transformers is None) or (current != target_commit):
+ if (pkg_transformers is None) or (pkg_transformers.version.startswith('4')) or (current != target_commit):
if pkg_transformers is None:
log.info(f'Install: package="transformers" commit={target_commit}')
else:
diff --git a/modules/face/__init__.py b/modules/face/__init__.py
index 7cde0a06c..e42150c9c 100644
--- a/modules/face/__init__.py
+++ b/modules/face/__init__.py
@@ -8,7 +8,7 @@ from modules.logger import log
debug = log.trace if os.environ.get('SD_FACE_DEBUG', None) is not None else lambda *args, **kwargs: None
-class Script(scripts_manager.Script):
+class FaceScript(scripts_manager.Script):
original_pipeline = None
original_prompt_attention = None
diff --git a/modules/loader.py b/modules/loader.py
index 6e5c7adf2..d57bfd3b7 100644
--- a/modules/loader.py
+++ b/modules/loader.py
@@ -16,10 +16,14 @@ errors.install()
logging.getLogger("DeepSpeed").disabled = True
timer.startup.record("loader")
log.debug('Initializing: libraries')
+debug = os.environ.get('SD_LOAD_DEBUG')
+
def report(msg: str, e: Exception):
log.error(f'Loader: {msg} {e}')
log.error('Please restart the app to fix this issue')
+ if debug:
+ errors.display(e, msg)
sys.exit(1)
diff --git a/modules/scripts_manager.py b/modules/scripts_manager.py
index 044614f37..e9381f53b 100644
--- a/modules/scripts_manager.py
+++ b/modules/scripts_manager.py
@@ -46,9 +46,13 @@ class Script:
paste_field_names = None
section = None
standalone = False
+ external = False
on_before_component_elem_id = [] # list of callbacks to be called before a component with an elem_id is created
on_after_component_elem_id = [] # list of callbacks to be called after a component with an elem_id is created
+ def __str__(self):
+ return f'Script: name="{self.name}" filename="{self.filename}" external={self.external} parent="{self.parent}" args_from={self.args_from} args_to={self.args_to} alwayson={self.alwayson} is_txt2img={self.is_txt2img} is_img2img={self.is_img2img}'
+
def title(self):
"""this function should return the title of the script. This is what will be displayed in the dropdown menu."""
raise NotImplementedError
@@ -226,11 +230,11 @@ def list_scripts(scriptdirname, extension):
if os.path.splitext(script.path)[1].lower() == extension and os.path.isfile(script.path):
if script.basedir == paths.script_path:
priority = '0'
- elif script.basedir.startswith(os.path.join(paths.script_path, 'scripts')):
+ elif script.basedir.startswith(os.path.join(paths.script_path, 'scripts')) or script.basedir.startswith('scripts'):
priority = '1'
- elif script.basedir.startswith(os.path.join(paths.script_path, 'extensions-builtin')):
+ elif script.basedir.startswith(os.path.join(paths.script_path, 'extensions-builtin')) or script.basedir.startswith('extensions-builtin'):
priority = '2'
- elif script.basedir.startswith(os.path.join(paths.script_path, 'extensions')):
+ elif script.basedir.startswith(os.path.join(paths.script_path, 'extensions')) or script.basedir.startswith('extensions'):
priority = '3'
else:
priority = '9'
@@ -351,6 +355,8 @@ class ScriptRunner:
script.filename = path
script.is_txt2img = not is_img2img
script.is_img2img = is_img2img
+ if path.startswith(paths.extensions_dir) and not path.startswith(paths.extensions_builtin_dir):
+ script.external = True
if is_control: # this is messy but show is a legacy function that is not aware of control tab
v1 = script.show(script.is_txt2img)
v2 = script.show(script.is_img2img)
@@ -458,6 +464,7 @@ class ScriptRunner:
dropdown = gr.Dropdown(label="Script", elem_id=f'{parent}_script_list', choices=["None"] + self.titles, value="None", type="index")
inputs.insert(0, dropdown)
+ # internal
with gr.Row():
for script in self.alwayson_scripts:
if not script.standalone:
@@ -471,10 +478,11 @@ class ScriptRunner:
script.group = group
time_setup[script.title()] = time_setup.get(script.title(), 0) + (time.time()-t0)
+ # extensions-builtin
with gr.Row():
- with gr.Accordion(label="Extensions", elem_id=f'{parent}_script_alwayson') if accordion else gr.Group():
+ with gr.Group(label="Extras", elem_id=f'{parent}_extras_alwayson'):
for script in self.alwayson_scripts:
- if script.standalone:
+ if script.standalone or script.external:
continue
if (self.name == 'control') and (paths.extensions_dir in script.filename) and (script.title() not in control_extensions):
log.debug(f'Script: fn="{script.filename}" type={self.name} skip')
@@ -485,6 +493,22 @@ class ScriptRunner:
script.group = group
time_setup[script.title()] = time_setup.get(script.title(), 0) + (time.time()-t0)
+ # extensions
+ with gr.Row():
+ with gr.Accordion(label="Extensions", elem_id=f'{parent}_script_alwayson') if accordion else gr.Group():
+ for script in self.alwayson_scripts:
+ if script.standalone or not script.external:
+ continue
+ if (self.name == 'control') and (paths.extensions_dir in script.filename) and (script.title() not in control_extensions):
+ log.debug(f'Script: fn="{script.filename}" type={self.name} skip')
+ continue
+ t0 = time.time()
+ with gr.Group(elem_id=f'{parent}_script_{script.title().lower().replace(" ", "_")}', elem_classes=['group-extension']) as group:
+ create_script_ui(script, inputs, inputs_alwayson)
+ script.group = group
+ time_setup[script.title()] = time_setup.get(script.title(), 0) + (time.time()-t0)
+
+
for script in self.selectable_scripts:
if (self.name == 'control') and (paths.extensions_dir in script.filename) and (script.title() not in control_extensions):
log.debug(f'Script: fn="{script.filename}" type={self.name} skip')
diff --git a/modules/ui_extensions.py b/modules/ui_extensions.py
index ef773a378..a77b1a296 100644
--- a/modules/ui_extensions.py
+++ b/modules/ui_extensions.py
@@ -393,28 +393,29 @@ def create_html(search_text, sort_column):
tags_text = ", ".join([f"{x}" for x in tags])
if ext.get('status', None) is None or type(ext['status']) == str: # old format
ext['status'] = 0
+ style = "style='cursor: help;width: 1rem;margin: 0.2em;'"
if ext['url'] is None or ext['url'] == '':
- status = f"
{ui_symbols.svg_bullet.style('#00C0FD')}
"
+ status = f"{ui_symbols.svg_bullet.style('#00C0FD')}
"
elif ext['status'] > 0:
if ext['status'] == 1:
- status = f"{ui_symbols.svg_bullet.style('#00FD9C')}
"
+ status = f"{ui_symbols.svg_bullet.style('#00FD9C')}
"
elif ext['status'] == 2:
- status = f"{ui_symbols.svg_bullet.style('#FFC300')}
"
+ status = f"{ui_symbols.svg_bullet.style('#FFC300')}
"
elif ext['status'] == 3:
- status = f"{ui_symbols.svg_bullet.style('#FFC300')}
"
+ status = f"{ui_symbols.svg_bullet.style('#FFC300')}
"
elif ext['status'] == 4:
- status = f"{ui_symbols.svg_bullet.style('#4E22FF')}
"
+ status = f"{ui_symbols.svg_bullet.style('#4E22FF')}
"
elif ext['status'] == 5:
- status = f"{ui_symbols.svg_bullet.style('#CE0000')}
"
+ status = f"{ui_symbols.svg_bullet.style('#CE0000')}
"
elif ext['status'] == 6:
- status = f"{ui_symbols.svg_bullet.style('#AEAEAE')}
"
+ status = f"{ui_symbols.svg_bullet.style('#AEAEAE')}
"
else:
- status = f"{ui_symbols.svg_bullet.style('#008EBC')}
"
+ status = f"{ui_symbols.svg_bullet.style('#008EBC')}
"
else:
if updated < datetime.now(timezone.utc) - timedelta(6*30): # TZ-aware
- status = f"{ui_symbols.svg_bullet.style('#C000CF')}
"
+ status = f"{ui_symbols.svg_bullet.style('#C000CF')}
"
else:
- status = f"{ui_symbols.svg_bullet.style('#7C7C7C')}
"
+ status = f"{ui_symbols.svg_bullet.style('#7C7C7C')}
"
code += f"""
diff --git a/scripts/animatediff.py b/scripts/animatediff.py
index ee23187b6..12df8c3e3 100644
--- a/scripts/animatediff.py
+++ b/scripts/animatediff.py
@@ -198,7 +198,7 @@ def set_free_noise(frames):
shared.sd_model.enable_free_noise(context_length=context_length, context_stride=context_stride)
-class Script(scripts_manager.Script):
+class AnimateDiffScript(scripts_manager.Script):
def title(self):
return 'Video: AnimateDiff'
diff --git a/scripts/apg.py b/scripts/apg.py
index 35f083457..29d4d5ecd 100644
--- a/scripts/apg.py
+++ b/scripts/apg.py
@@ -6,7 +6,7 @@ from modules.logger import log
registered = False
-class Script(scripts_manager.Script):
+class APGScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/automatic_color_inpaint.py b/scripts/automatic_color_inpaint.py
index 83885824c..aab406934 100644
--- a/scripts/automatic_color_inpaint.py
+++ b/scripts/automatic_color_inpaint.py
@@ -29,7 +29,7 @@ img2img = True
### Script definition
-class Script(scripts_manager.Script):
+class AutoColorInpaintScript(scripts_manager.Script):
def title(self):
return title
diff --git a/scripts/blipdiffusion.py b/scripts/blipdiffusion.py
index 4376ba3f0..118120021 100644
--- a/scripts/blipdiffusion.py
+++ b/scripts/blipdiffusion.py
@@ -3,7 +3,7 @@ from modules import scripts_manager, processing, shared, sd_models
from modules.logger import log
-class Script(scripts_manager.Script):
+class BLIPDiffusionScript(scripts_manager.Script):
def title(self):
return 'BLIP Diffusion: Controllable Generation and Editing'
diff --git a/scripts/consistory_ext.py b/scripts/consistory_ext.py
index 4d1d4dd06..e0de9f1d4 100644
--- a/scripts/consistory_ext.py
+++ b/scripts/consistory_ext.py
@@ -16,7 +16,7 @@ from modules import scripts_manager, devices, errors, processing, shared, sd_mod
from modules.logger import log
-class Script(scripts_manager.Script):
+class ConsiStoryScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.anchor_cache_first_stage = None
diff --git a/scripts/ctrlx_ext.py b/scripts/ctrlx_ext.py
index dced80c77..41a2bcef0 100644
--- a/scripts/ctrlx_ext.py
+++ b/scripts/ctrlx_ext.py
@@ -6,7 +6,7 @@ from modules import shared, scripts_manager, processing, processing_helpers, sd_
from modules.logger import log
-class Script(scripts_manager.Script):
+class CtrlXScript(scripts_manager.Script):
def title(self):
return 'Ctrl-X: Controlling Structure and Appearance'
diff --git a/scripts/custom_code.py b/scripts/custom_code.py
index 30ad81cf2..7c45d2f7c 100644
--- a/scripts/custom_code.py
+++ b/scripts/custom_code.py
@@ -35,7 +35,7 @@ def exec_with_return(code, module):
return None
-class Script(scripts_manager.Script):
+class CustomCodeScript(scripts_manager.Script):
def title(self):
return "Custom code"
diff --git a/scripts/daam_ext.py b/scripts/daam_ext.py
index 602cf975d..af8ca3add 100644
--- a/scripts/daam_ext.py
+++ b/scripts/daam_ext.py
@@ -9,7 +9,7 @@ from modules.logger import log
COLORMAP = ['autumn', 'bone', 'jet', 'winter', 'rainbow', 'ocean', 'summer', 'spring', 'cool', 'hsv', 'pink', 'hot', 'parula', 'magma', 'inferno', 'plasma', 'viridis', 'cividis', 'twilight', 'shifted', 'turbo', 'deepgreen']
-class Script(scripts_manager.Script):
+class DAAMScript(scripts_manager.Script):
def title(self):
return 'DAAM: Diffusion Attentive Attribution Maps'
diff --git a/scripts/demofusion.py b/scripts/demofusion.py
index c6bdb046f..4f1c47925 100644
--- a/scripts/demofusion.py
+++ b/scripts/demofusion.py
@@ -1220,7 +1220,7 @@ class DemoFusionSDXLPipeline(DiffusionPipeline, FromSingleFileMixin, LoraLoaderM
### Script definition
-class Script(scripts_manager.Script):
+class DemoFusionScript(scripts_manager.Script):
def title(self):
return 'DemoFusion: High-Resolution Image Generation'
diff --git a/scripts/differential_diffusion.py b/scripts/differential_diffusion.py
index 24aa844b6..d0f13a078 100644
--- a/scripts/differential_diffusion.py
+++ b/scripts/differential_diffusion.py
@@ -1847,7 +1847,7 @@ MODELS = {
}
-class Script(scripts_manager.Script):
+class DifferentialDiffusionScript(scripts_manager.Script):
def title(self):
return 'Differential diffusion: Individual Pixel Strength'
diff --git a/scripts/flux_enhance.py b/scripts/flux_enhance.py
deleted file mode 100644
index 6ce2d3e9a..000000000
--- a/scripts/flux_enhance.py
+++ /dev/null
@@ -1,104 +0,0 @@
-# repo: https://huggingface.co/gokaygokay/Flux-Prompt-Enhance
-
-import time
-import random
-import threading
-from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
-import gradio as gr
-from modules import shared, scripts_manager, devices, processing
-from modules.logger import log
-
-
-repo_id = "gokaygokay/Flux-Prompt-Enhance"
-num_return_sequences = 5
-load_lock = threading.Lock()
-
-
-class Script(scripts_manager.Script):
- prompts = [['']]
- tokenizer: AutoTokenizer = None
- model: AutoModelForSeq2SeqLM = None
- prefix: str = "enhance prompt: "
- button: gr.Button = None
- auto_apply: gr.Checkbox = None
- max_length: gr.Slider = None
- temperature: gr.Slider = None
- repetition_penalty: gr.Slider = None
- table: gr.DataFrame = None
- prompt: gr.Textbox = None
-
- def title(self):
- return 'Flux Prompt enhance (Legacy)'
-
- def show(self, is_img2img):
- return True
-
- def load(self):
- with load_lock:
- if self.tokenizer is None:
- self.tokenizer = AutoTokenizer.from_pretrained('gokaygokay/Flux-Prompt-Enhance', cache_dir=shared.opts.hfcache_dir)
- if self.model is None:
- log.info(f'Prompt enhance: model="{repo_id}"')
- self.model = AutoModelForSeq2SeqLM.from_pretrained('gokaygokay/Flux-Prompt-Enhance', cache_dir=shared.opts.hfcache_dir).to(device=devices.cpu, dtype=devices.dtype)
-
- def enhance(self, prompt, auto_apply: bool = False, temperature: float = 0.7, repetition_penalty: float = 1.2, max_length: int = 128):
- self.load()
- t0 = time.time()
- input_text = self.prefix + prompt
- input_ids = self.tokenizer(input_text, return_tensors="pt").input_ids.to(devices.device)
- self.model = self.model.to(devices.device)
- kwargs = {
- 'max_length': int(max_length),
- 'num_return_sequences': int(num_return_sequences),
- 'do_sample': True,
- 'temperature': float(temperature),
- 'repetition_penalty': float(repetition_penalty),
- }
- try:
- outputs = self.model.generate(input_ids, **kwargs)
- except Exception as e:
- log.error(f'Prompt enhance: error="{e}"')
- return [['']]
- self.model = self.model.to(devices.cpu)
- prompts = self.tokenizer.batch_decode(outputs, skip_special_tokens=True)
- prompts = [[p] for p in prompts]
- t1 = time.time()
- log.info(f'Prompt enhance: temperature={temperature} repetition={repetition_penalty} length={max_length} sequences={num_return_sequences} apply={auto_apply} time={t1-t0:.2f}s')
- return prompts
-
- def select(self, cell: gr.SelectData, _table):
- prompt = cell.value if hasattr(cell, 'value') else cell
- log.info(f'Prompt enhance: prompt="{prompt}"')
- return prompt
-
- def ui(self, _is_img2img):
- with gr.Row():
- self.button = gr.Button(value='Enhance prompt')
- self.auto_apply = gr.Checkbox(label='Auto apply', value=False)
- with gr.Row():
- self.max_length = gr.Slider(label='Length', minimum=64, maximum=512, step=1, value=128)
- self.temperature = gr.Slider(label='Temperature', minimum=0.1, maximum=2.0, step=0.05, value=0.7)
- self.repetition_penalty = gr.Slider(label='Penalty', minimum=0.1, maximum=2.0, step=0.05, value=1.2)
- with gr.Row():
- self.table = gr.DataFrame(self.prompts, label='', show_label=False, interactive=False, wrap=True, datatype="str", col_count=1, headers=['Prompts'])
-
- if self.prompt is not None:
- self.button.click(fn=self.enhance, inputs=[self.prompt, self.auto_apply, self.temperature, self.repetition_penalty, self.max_length], outputs=[self.table])
- self.table.select(fn=self.select, inputs=[self.table], outputs=[self.prompt])
- return [self.auto_apply, self.temperature, self.repetition_penalty, self.max_length]
-
- def run(self, p: processing.StableDiffusionProcessing, auto_apply, temperature, repetition_penalty, max_length): # pylint: disable=arguments-differ
- if auto_apply:
- p.prompt = shared.prompt_styles.apply_styles_to_prompt(p.prompt, p.styles)
- p.negative_prompt = shared.prompt_styles.apply_negative_styles_to_prompt(p.negative_prompt, p.styles)
- shared.prompt_styles.apply_styles_to_extra(p)
- p.styles = []
- log.debug(f'Prompt enhance: source="{p.prompt}"')
- prompts = self.enhance(p.prompt, auto_apply, temperature, repetition_penalty, max_length)
- p.prompt = random.choice(prompts)[0]
- log.debug(f'Prompt enhance: prompt="{p.prompt}"')
-
- def after_component(self, component, **kwargs): # searching for actual ui prompt components
- if getattr(component, 'elem_id', '') in ['txt2img_prompt', 'img2img_prompt', 'control_prompt', 'video_prompt']:
- self.prompt = component
- self.prompt.use_original = True
diff --git a/scripts/flux_tools.py b/scripts/flux_tools.py
index dc59954b2..6b4401670 100644
--- a/scripts/flux_tools.py
+++ b/scripts/flux_tools.py
@@ -15,7 +15,7 @@ processor_depth = None
title = 'Flux Tools'
-class Script(scripts_manager.Script):
+class FluxToolsScript(scripts_manager.Script):
def title(self):
return f'{title}'
diff --git a/scripts/freescale_ext.py b/scripts/freescale_ext.py
index 74e3e9df0..4068620ef 100644
--- a/scripts/freescale_ext.py
+++ b/scripts/freescale_ext.py
@@ -6,7 +6,7 @@ from modules.logger import log
registered = False
-class Script(scripts_manager.Script):
+class FreeScaleScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/hdr.py b/scripts/hdr.py
index fb330d0a2..651527449 100644
--- a/scripts/hdr.py
+++ b/scripts/hdr.py
@@ -9,7 +9,7 @@ from modules.processing import get_processed
from modules.shared import opts, state
-class Script(scripts_manager.Script):
+class HDRScript(scripts_manager.Script):
def title(self):
return "HDR: High Dynamic Range"
diff --git a/scripts/i2i_folder.py b/scripts/i2i_folder.py
index 905c8530f..e616915b0 100644
--- a/scripts/i2i_folder.py
+++ b/scripts/i2i_folder.py
@@ -7,7 +7,7 @@ from modules.logger import log
from modules.files_cache import list_files
-class Script(scripts_manager.Script):
+class I2IFolderScript(scripts_manager.Script):
def title(self):
return "CeeTeeDees I2I folder batch inference"
diff --git a/scripts/image2video.py b/scripts/image2video.py
index 1ef7a1c3f..2ec56cacf 100644
--- a/scripts/image2video.py
+++ b/scripts/image2video.py
@@ -12,7 +12,7 @@ MODELS = [
]
-class Script(scripts_manager.Script):
+class VGenI2VScript(scripts_manager.Script):
def title(self):
return 'Video: VGen Image-to-Video'
diff --git a/scripts/infiniteyou_ext.py b/scripts/infiniteyou_ext.py
index af844f1da..733141c5d 100644
--- a/scripts/infiniteyou_ext.py
+++ b/scripts/infiniteyou_ext.py
@@ -30,7 +30,7 @@ def load_infiniteyou(model: str):
sd_models.set_diffuser_options(shared.sd_model)
-class Script(scripts_manager.Script):
+class InfiniteYouScript(scripts_manager.Script):
def title(self):
return f'{prefix}: Flexible Photo Recrafting'
diff --git a/scripts/init_latents.py b/scripts/init_latents.py
index a54ae95bb..9925eb070 100644
--- a/scripts/init_latents.py
+++ b/scripts/init_latents.py
@@ -2,7 +2,7 @@ from modules.logger import log
from modules import scripts_manager, processing, shared, devices
-class Script(scripts_manager.Script):
+class InitLatentsScript(scripts_manager.Script):
standalone = False
def title(self):
diff --git a/scripts/instantir_ext.py b/scripts/instantir_ext.py
index e4ee6e8cb..01b9befe5 100644
--- a/scripts/instantir_ext.py
+++ b/scripts/instantir_ext.py
@@ -6,7 +6,7 @@ from modules import scripts_manager, processing, shared, sd_models, devices, ipa
from modules.logger import log
-class Script(scripts_manager.Script):
+class InstantIRScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/ipadapter.py b/scripts/ipadapter.py
index d7bae8bad..0bb866dad 100644
--- a/scripts/ipadapter.py
+++ b/scripts/ipadapter.py
@@ -8,7 +8,7 @@ from modules.logger import log
MAX_ADAPTERS = 4
-class Script(scripts_manager.Script):
+class IPAdapterScript(scripts_manager.Script):
standalone = True
def title(self):
diff --git a/scripts/ipinstruct.py b/scripts/ipinstruct.py
index b789f8756..b6ce43c96 100644
--- a/scripts/ipinstruct.py
+++ b/scripts/ipinstruct.py
@@ -17,7 +17,7 @@ encoder = "laion/CLIP-ViT-H-14-laion2B-s32B-b79K"
folder = os.path.join('repositories', 'ip_instruct')
-class Script(scripts_manager.Script):
+class IPInstructScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/kohya_hires_fix.py b/scripts/kohya_hires_fix.py
index 0eced514e..69336d63c 100644
--- a/scripts/kohya_hires_fix.py
+++ b/scripts/kohya_hires_fix.py
@@ -4,7 +4,7 @@ from modules import scripts_manager, processing, shared, sd_models, devices
from modules.logger import log
-class Script(scripts_manager.Script):
+class KohyaHiResFixScript(scripts_manager.Script):
def title(self):
return 'Kohya HiRes Fix'
diff --git a/scripts/layerdiffuse_ext.py b/scripts/layerdiffuse_ext.py
index 3c2ec43d6..37d26f7fb 100644
--- a/scripts/layerdiffuse_ext.py
+++ b/scripts/layerdiffuse_ext.py
@@ -3,7 +3,7 @@ from modules import shared, scripts_manager, sd_models
from modules.logger import log
-class Script(scripts_manager.Script):
+class LayerDiffuseScript(scripts_manager.Script):
def title(self):
return 'LayerDiffuse: Transparent Image'
diff --git a/scripts/lbm_ext.py b/scripts/lbm_ext.py
index bd0142e86..02d0675a7 100644
--- a/scripts/lbm_ext.py
+++ b/scripts/lbm_ext.py
@@ -30,7 +30,7 @@ ASPECT_RATIOS = {
}
-class Script(scripts_manager.Script):
+class LBMScript(scripts_manager.Script):
def title(self):
return 'LBM: Latent Bridge Matching'
diff --git a/scripts/ledits.py b/scripts/ledits.py
index b77a1110f..2ebe428e8 100644
--- a/scripts/ledits.py
+++ b/scripts/ledits.py
@@ -4,7 +4,7 @@ from modules import scripts_manager, processing, shared, devices, sd_models
from modules.logger import log
-class Script(scripts_manager.Script):
+class LEditsScript(scripts_manager.Script):
def title(self):
return 'LEdits: Limitless Image Editing'
diff --git a/scripts/loopback.py b/scripts/loopback.py
index e24683ce6..31c2af7a8 100644
--- a/scripts/loopback.py
+++ b/scripts/loopback.py
@@ -7,7 +7,7 @@ from modules.processing import Processed
from modules.shared import opts, state, log
-class Script(scripts_manager.Script):
+class LoopbackScript(scripts_manager.Script):
def title(self):
return "Loopback"
diff --git a/scripts/mixture_of_diffusers.py b/scripts/mixture_of_diffusers.py
index 7021c8ef8..601133590 100644
--- a/scripts/mixture_of_diffusers.py
+++ b/scripts/mixture_of_diffusers.py
@@ -8,7 +8,7 @@ max_xtiles = 4
max_ytiles = 4
-class Script(scripts_manager.Script):
+class MoDScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/mixture_tiling.py b/scripts/mixture_tiling.py
index 5b95e694b..fcf7b7cf1 100644
--- a/scripts/mixture_tiling.py
+++ b/scripts/mixture_tiling.py
@@ -25,7 +25,7 @@ def check_dependencies():
return False
-class Script(scripts_manager.Script):
+class MixtureTilingScript(scripts_manager.Script):
def title(self):
return 'Mixture Tiling: Scene Composition'
diff --git a/scripts/mulan.py b/scripts/mulan.py
index 652233cfc..b8e8a8c68 100644
--- a/scripts/mulan.py
+++ b/scripts/mulan.py
@@ -45,7 +45,7 @@ tokenizer = None
text_encoder_path = None
-class Script(scripts_manager.Script):
+class MuLanScript(scripts_manager.Script):
def title(self):
return 'MuLan: Multi Language Prompts'
diff --git a/scripts/outpainting_mk_2.py b/scripts/outpainting_mk_2.py
index b9288fc22..6a08247a2 100644
--- a/scripts/outpainting_mk_2.py
+++ b/scripts/outpainting_mk_2.py
@@ -99,7 +99,7 @@ def get_matched_noise(_np_src_image, np_mask_rgb, noise_q=1, color_variation=0.0
return np.clip(matched_noise, 0., 1.)
-class Script(scripts_manager.Script):
+class OutpaintingScript(scripts_manager.Script):
def title(self):
return "Outpainting"
diff --git a/scripts/pixelsmith_ext.py b/scripts/pixelsmith_ext.py
index d88d340c5..bc73d1e4b 100644
--- a/scripts/pixelsmith_ext.py
+++ b/scripts/pixelsmith_ext.py
@@ -4,7 +4,7 @@ from modules import scripts_manager, processing, shared, sd_models, devices, ima
from modules.logger import log
-class Script(scripts_manager.Script):
+class PixelSmithScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/poor_mans_outpainting.py b/scripts/poor_mans_outpainting.py
index 7f2d68c85..968684a8f 100644
--- a/scripts/poor_mans_outpainting.py
+++ b/scripts/poor_mans_outpainting.py
@@ -7,7 +7,7 @@ from modules.shared import opts, state, log
from modules.image.grid import split_grid
-class Script(scripts_manager.Script):
+class OutpaintingAltScript(scripts_manager.Script):
def title(self):
return "Outpainting alternative"
diff --git a/scripts/prompt_enhance.py b/scripts/prompt_enhance.py
index b702eb3b7..b0d46bac8 100644
--- a/scripts/prompt_enhance.py
+++ b/scripts/prompt_enhance.py
@@ -300,7 +300,7 @@ class Options:
return get_model_display_name(Options.default)
-class Script(scripts_manager.Script):
+class PromptEnhanceScript(scripts_manager.Script):
prompt: gr.Textbox = None
image: gr.Image = None
model: str = None
diff --git a/scripts/prompt_matrix.py b/scripts/prompt_matrix.py
index 1fbf95768..2b758b0d3 100644
--- a/scripts/prompt_matrix.py
+++ b/scripts/prompt_matrix.py
@@ -6,7 +6,7 @@ from modules.shared import opts, log
import modules.sd_samplers
-class Script(scripts_manager.Script):
+class PromptMatrixScript(scripts_manager.Script):
def title(self):
return "Prompt matrix"
diff --git a/scripts/prompts_from_file.py b/scripts/prompts_from_file.py
index fae363131..0ec86998a 100644
--- a/scripts/prompts_from_file.py
+++ b/scripts/prompts_from_file.py
@@ -93,7 +93,7 @@ def load_prompt_file(file):
return None, "\n".join(lines), gr.update(lines=7)
-class Script(scripts_manager.Script):
+class PromptsFromFileScript(scripts_manager.Script):
def title(self):
return "Prompts from file"
diff --git a/scripts/pulid_ext.py b/scripts/pulid_ext.py
index bce6c6f50..638e859dc 100644
--- a/scripts/pulid_ext.py
+++ b/scripts/pulid_ext.py
@@ -14,7 +14,7 @@ registered = False
uploaded_images = []
-class Script(scripts_manager.Script):
+class PulIDScript(scripts_manager.Script):
def __init__(self):
self.pulid = None
self.cache = None
diff --git a/scripts/regional_prompting.py b/scripts/regional_prompting.py
index 9e0641aef..c0762c5a7 100644
--- a/scripts/regional_prompting.py
+++ b/scripts/regional_prompting.py
@@ -22,7 +22,7 @@ def hijack_register_modules(self, **kwargs):
setattr(self, name, module)
-class Script(scripts_manager.Script):
+class RegionalPromptingScript(scripts_manager.Script):
def title(self):
return 'Regional prompting'
diff --git a/scripts/resadapter.py b/scripts/resadapter.py
index e3da7922c..2ffebf02c 100644
--- a/scripts/resadapter.py
+++ b/scripts/resadapter.py
@@ -18,7 +18,7 @@ models = {
'SDXL v1 interpolation': 'resadapter_v1_sdxl_interpolation',
}
-class Script(scripts_manager.Script):
+class ResAdapterScript(scripts_manager.Script):
def title(self):
return 'ResAdapter: Domain Consistent Resolution'
diff --git a/scripts/rocm_ext.py b/scripts/rocm_ext.py
index 6563387ce..4d89f7e42 100644
--- a/scripts/rocm_ext.py
+++ b/scripts/rocm_ext.py
@@ -6,7 +6,7 @@ from modules import scripts_manager, shared
# pylint: disable=protected-access
-class Script(scripts_manager.Script):
+class ROCmScript(scripts_manager.Script):
def title(self):
return "ROCm: Advanced Config"
diff --git a/scripts/sd_upscale.py b/scripts/sd_upscale.py
index 14f565f87..e6f614d41 100644
--- a/scripts/sd_upscale.py
+++ b/scripts/sd_upscale.py
@@ -8,7 +8,7 @@ from modules.image.util import flatten
from modules.image.grid import split_grid
-class Script(scripts_manager.Script):
+class SDUpscaleScript(scripts_manager.Script):
def title(self):
return "SD Upscale"
diff --git a/scripts/skip_layer_guidance.py b/scripts/skip_layer_guidance.py
index f457894a2..b50608d88 100644
--- a/scripts/skip_layer_guidance.py
+++ b/scripts/skip_layer_guidance.py
@@ -7,7 +7,7 @@ from modules.logger import log
registered = False
-class Script(scripts_manager.Script):
+class SLGScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.register()
diff --git a/scripts/softfill.py b/scripts/softfill.py
index 6eb8c0fe2..ba5a9bc81 100644
--- a/scripts/softfill.py
+++ b/scripts/softfill.py
@@ -1608,7 +1608,7 @@ from modules import shared, scripts_manager, processing, sd_models
from modules.logger import log
-class Script(scripts_manager.Script):
+class SoftFillScript(scripts_manager.Script):
orig_pipeline = None
def title(self):
diff --git a/scripts/stablevideodiffusion.py b/scripts/stablevideodiffusion.py
index 6ea267256..5da5b50b1 100644
--- a/scripts/stablevideodiffusion.py
+++ b/scripts/stablevideodiffusion.py
@@ -15,7 +15,7 @@ models = {
"SVD XT 1.1": "stabilityai/stable-video-diffusion-img2vid-xt-1-1",
}
-class Script(scripts_manager.Script):
+class SVDScript(scripts_manager.Script):
def title(self):
return 'Video: Stable Video Diffusion'
diff --git a/scripts/style_aligned_ext.py b/scripts/style_aligned_ext.py
index 8b130e068..6236dac9e 100644
--- a/scripts/style_aligned_ext.py
+++ b/scripts/style_aligned_ext.py
@@ -12,7 +12,7 @@ supported_model_list = ['sdxl']
orig_prompt_attention = None
-class Script(scripts_manager.Script):
+class StyleAlignedScript(scripts_manager.Script):
def title(self):
return 'Style Aligned Image Generation'
diff --git a/scripts/t_gate.py b/scripts/t_gate.py
index 7ce281709..82567df67 100644
--- a/scripts/t_gate.py
+++ b/scripts/t_gate.py
@@ -4,7 +4,7 @@ from modules.logger import log
from installer import install
-class Script(scripts_manager.Script):
+class TGateScript(scripts_manager.Script):
def title(self):
return 'T-Gate: Accelerate via Gating Attention'
diff --git a/scripts/text2video.py b/scripts/text2video.py
index 7c8068c03..42543bfd5 100644
--- a/scripts/text2video.py
+++ b/scripts/text2video.py
@@ -22,7 +22,7 @@ MODELS = [
]
-class Script(scripts_manager.Script):
+class ModelScopeScript(scripts_manager.Script):
def title(self):
return 'Video: ModelScope'
diff --git a/scripts/tiling.py b/scripts/tiling.py
index ed77b6272..57d50c8a9 100644
--- a/scripts/tiling.py
+++ b/scripts/tiling.py
@@ -22,7 +22,7 @@ def asymmetricConv2DConvForward(self, input: Tensor, weight: Tensor, bias: Optio
return F.conv2d(working, weight, bias, self.stride, _pair(0), self.dilation, self.groups)
-class Script(scripts_manager.Script):
+class TilingScript(scripts_manager.Script):
def __init__(self):
super().__init__()
self.orig_pipe = None
diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py
index c8681229a..19e41b695 100644
--- a/scripts/xyz_grid.py
+++ b/scripts/xyz_grid.py
@@ -22,7 +22,7 @@ from modules.logger import log
debug = log.trace if os.environ.get('SD_XYZ_DEBUG', None) is not None else lambda *args, **kwargs: None
-class Script(scripts_manager.Script):
+class XYZGridScript(scripts_manager.Script):
current_axis_options = []
def title(self):
diff --git a/scripts/xyz_grid_on.py b/scripts/xyz_grid_on.py
index 9439f7c00..bac0ad8ea 100644
--- a/scripts/xyz_grid_on.py
+++ b/scripts/xyz_grid_on.py
@@ -23,7 +23,7 @@ xyz_results_cache = None
debug = log.trace if os.environ.get('SD_XYZ_DEBUG', None) is not None else lambda *args, **kwargs: None
-class Script(scripts_manager.Script):
+class XYZGridScript(scripts_manager.Script):
current_axis_options = []
def show(self, is_img2img):