From b5e9fbc7b386067d1b505c5ffde2e796f1fa6e86 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Fri, 27 Mar 2026 14:00:23 +0100 Subject: [PATCH] reorganize scripts/extensions Signed-off-by: vladmandic --- CHANGELOG.md | 2 + html/locale_en.json | 3 +- installer.py | 2 +- modules/face/__init__.py | 2 +- modules/loader.py | 4 ++ modules/scripts_manager.py | 34 ++++++++-- modules/ui_extensions.py | 21 +++--- scripts/animatediff.py | 2 +- scripts/apg.py | 2 +- scripts/automatic_color_inpaint.py | 2 +- scripts/blipdiffusion.py | 2 +- scripts/consistory_ext.py | 2 +- scripts/ctrlx_ext.py | 2 +- scripts/custom_code.py | 2 +- scripts/daam_ext.py | 2 +- scripts/demofusion.py | 2 +- scripts/differential_diffusion.py | 2 +- scripts/flux_enhance.py | 104 ----------------------------- scripts/flux_tools.py | 2 +- scripts/freescale_ext.py | 2 +- scripts/hdr.py | 2 +- scripts/i2i_folder.py | 2 +- scripts/image2video.py | 2 +- scripts/infiniteyou_ext.py | 2 +- scripts/init_latents.py | 2 +- scripts/instantir_ext.py | 2 +- scripts/ipadapter.py | 2 +- scripts/ipinstruct.py | 2 +- scripts/kohya_hires_fix.py | 2 +- scripts/layerdiffuse_ext.py | 2 +- scripts/lbm_ext.py | 2 +- scripts/ledits.py | 2 +- scripts/loopback.py | 2 +- scripts/mixture_of_diffusers.py | 2 +- scripts/mixture_tiling.py | 2 +- scripts/mulan.py | 2 +- scripts/outpainting_mk_2.py | 2 +- scripts/pixelsmith_ext.py | 2 +- scripts/poor_mans_outpainting.py | 2 +- scripts/prompt_enhance.py | 2 +- scripts/prompt_matrix.py | 2 +- scripts/prompts_from_file.py | 2 +- scripts/pulid_ext.py | 2 +- scripts/regional_prompting.py | 2 +- scripts/resadapter.py | 2 +- scripts/rocm_ext.py | 2 +- scripts/sd_upscale.py | 2 +- scripts/skip_layer_guidance.py | 2 +- scripts/softfill.py | 2 +- scripts/stablevideodiffusion.py | 2 +- scripts/style_aligned_ext.py | 2 +- scripts/t_gate.py | 2 +- scripts/text2video.py | 2 +- scripts/tiling.py | 2 +- scripts/xyz_grid.py | 2 +- scripts/xyz_grid_on.py | 2 +- 56 files changed, 98 insertions(+), 170 deletions(-) delete mode 100644 scripts/flux_enhance.py 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):