From fa1bc15e642c2a535b49deb856496cd01bedbe83 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sat, 28 Mar 2026 03:14:44 +0000 Subject: [PATCH 01/16] fix(installer): remove duplicate pip prefix from CUDA torch command --- installer.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/installer.py b/installer.py index a701cb644..b07e75db8 100644 --- a/installer.py +++ b/installer.py @@ -559,8 +559,7 @@ def install_cuda(): if args.use_nightly: cmd = os.environ.get('TORCH_COMMAND', '--upgrade --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cu128 --extra-index-url https://download.pytorch.org/whl/nightly/cu130') else: - # cmd = os.environ.get('TORCH_COMMAND', 'torch==2.10.0+cu128 torchvision==0.25.0+cu128 --index-url https://download.pytorch.org/whl/cu128') - cmd = os.environ.get("TORCH_COMMAND", "pip install -U torch==2.11.0+cu130 torchvision==0.26.0+cu130 --index-url https://download.pytorch.org/whl/cu130") + cmd = os.environ.get('TORCH_COMMAND', 'torch==2.11.0+cu130 torchvision==0.26.0+cu130 --index-url https://download.pytorch.org/whl/cu130') return cmd From 611dfe43015d3aeda595aa8fc3edde51c143242e Mon Sep 17 00:00:00 2001 From: vladmandic Date: Sat, 28 Mar 2026 08:57:23 +0100 Subject: [PATCH 02/16] update nunchaku installer Signed-off-by: vladmandic --- CHANGELOG.md | 7 +-- installer.py | 15 ++++--- modules/mit_nunchaku.py | 96 +++++++++++++++++++++++------------------ 3 files changed, 65 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e709c954b..051361715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-03-27 +## Update for 2026-03-28 -### Highlights for 2026-03-27 +### Highlights for 2026-03-28 This release brings massive code refactoring to modernize codebase and removal of some obsolete features. Leaner & Faster! And since its a bit quieter period when it comes to new models, notable additions would be : *FireRed-Image-Edit*, *SkyWorks-UniPic-3* and new versions of *Anima-Preview*, *Flux-Klein-KV* @@ -20,7 +20,7 @@ Just how big? Some stats: *~530 commits over 880 files* [ReadMe](https://github.com/vladmandic/automatic/blob/master/README.md) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [WiKi](https://github.com/vladmandic/automatic/wiki) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-03-27 +### Details for 2026-03-28 - **Models** - [Google Flash 3.1 Image](https://ai.google.dev/gemini-api/docs/models/gemini-3-flash-preview) a.k.a. *Nano Banana 2* @@ -77,6 +77,7 @@ Just how big? Some stats: *~530 commits over 880 files* - *note* **Cuda** `torch==2.10` removed support for `rtx1000` series and older GPUs use following before first startup to force installation of `torch==2.9.1` with `cuda==12.6`: > `set TORCH_COMMAND='torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu126'` + - update installer and support `nunchaku==1.2.1` - **UI** - legacy panels **T2I** and **I2I** are disabled by default you can re-enable them in *settings -> ui -> hide legacy tabs* diff --git a/installer.py b/installer.py index b07e75db8..0b7c491ad 100644 --- a/installer.py +++ b/installer.py @@ -197,14 +197,15 @@ def installed(package, friendly: str | None = None, quiet = False): # pylint: di def uninstall(package, quiet = False): t_start = time.time() packages = package if isinstance(package, list) else [package] - res = '' + txt = '' for p in packages: if installed(p, p, quiet=True): if not quiet: log.warning(f'Package: {p} uninstall') - res += pip(f"uninstall {p} --yes --quiet", ignore=True, quiet=True, uv=False) + _result, _txt = pip(f"uninstall {p} --yes --quiet", ignore=True, quiet=True, uv=False) + txt += _txt ts('uninstall', t_start) - return res + return txt def run(cmd: str, *nargs: str, **kwargs): @@ -259,20 +260,20 @@ def pip(arg: str, ignore: bool = False, quiet: bool = True, uv = True): all_args = f'{pip_log}{arg} {env_args}'.strip() if not quiet: log.debug(f'Running: {pipCmd}="{all_args}"') - result, txt = run(sys.executable, "-m", pipCmd, all_args) + result, output = run(sys.executable, "-m", pipCmd, all_args) if len(result.stderr) > 0: if uv and result.returncode != 0: log.warning(f'Install: cmd="{pipCmd}" args="{all_args}" cannot use uv, fallback to pip') debug(f'Install: uv pip error: {result.stderr}') cleanup_broken_packages() return pip(originalArg, ignore, quiet, uv=False) - debug(f'Install {pipCmd}: {txt}') + debug(f'Install {pipCmd}: {output}') if result.returncode != 0 and not ignore: errors.append(f'pip: {package}') log.error(f'Install: {pipCmd}: {arg}') - log.debug(f'Install: pip output {txt}') + log.debug(f'Install: pip code={result.returncode} stdout={result.stdout} stderr={result.stderr} output={output}') ts('pip', t_start) - return txt + return result, output # install package using pip if not already installed diff --git a/modules/mit_nunchaku.py b/modules/mit_nunchaku.py index aa8eb228b..f9501e36c 100644 --- a/modules/mit_nunchaku.py +++ b/modules/mit_nunchaku.py @@ -2,43 +2,20 @@ from installer import pip from modules.logger import log -from modules import devices -nunchaku_versions = { - '2.5': '1.0.1', - '2.6': '1.0.1', - '2.7': '1.1.0', - '2.8': '1.1.0', - '2.9': '1.1.0', - '2.10': '1.0.2', - '2.11': '1.1.0', -} ok = False -def _expected_ver(): - try: - import torch - torch_ver = '.'.join(torch.__version__.split('+')[0].split('.')[:2]) - return nunchaku_versions.get(torch_ver) - except Exception: - return None - - def check(): global ok # pylint: disable=global-statement if ok: return True try: import nunchaku - import nunchaku.utils - from nunchaku import __version__ - expected = _expected_ver() + import nunchaku.utils # pylint: disable=no-name-in-module, no-member + from nunchaku import __version__ # pylint: disable=no-name-in-module log.info(f'Nunchaku: path={nunchaku.__path__} version={__version__.__version__} precision={nunchaku.utils.get_precision()}') - if expected is not None and __version__.__version__ != expected: - ok = False - return False ok = True return True except Exception as e: @@ -47,14 +24,15 @@ def check(): return False -def install_nunchaku(): - if devices.backend is None: - return False # too early +def install_nunchaku(force=False): + if not force: + from modules import devices + if devices.backend is None: + return False # too early if not check(): import os import sys import platform - import torch python_ver = f'{sys.version_info.major}{sys.version_info.minor}' if python_ver not in ['311', '312', '313']: log.error(f'Nunchaku: python={sys.version_info} unsupported') @@ -63,24 +41,56 @@ def install_nunchaku(): if arch not in ['linux', 'windows']: log.error(f'Nunchaku: platform={arch} unsupported') return False - if devices.backend not in ['cuda']: + if not force and devices.backend not in ['cuda']: log.error(f'Nunchaku: backend={devices.backend} unsupported') return False - torch_ver = '.'.join(torch.__version__.split('+')[0].split('.')[:2]) - nunchaku_ver = nunchaku_versions.get(torch_ver) - if nunchaku_ver is None: - log.error(f'Nunchaku: torch={torch.__version__} unsupported') - return False - suffix = 'x86_64' if arch == 'linux' else 'win_amd64' + url = os.environ.get('NUNCHAKU_COMMAND', None) - if url is None: - arch = f'{arch}_' if arch == 'linux' else '' - url = f'https://huggingface.co/nunchaku-ai/nunchaku/resolve/main/nunchaku-{nunchaku_ver}' - url += f'+torch{torch_ver}-cp{python_ver}-cp{python_ver}-{arch}{suffix}.whl' - cmd = f'install --upgrade {url}' - log.debug(f'Nunchaku: install="{url}"') - pip(cmd, ignore=False, uv=False) + if url is not None: + cmd = f'install --upgrade {url}' + log.debug(f'Nunchaku: install="{url}"') + result, _output = pip(cmd, uv=False, ignore=not force, quiet=not force) + return result.returncode == 0 + else: + import torch + torch_ver = '.'.join(torch.__version__.split('+')[0].split('.')[:2]) + cuda_ver = torch.__version__.split('+')[1]if '+' in torch.__version__ else None + cuda_ver = cuda_ver[:4] + '.' + cuda_ver[-1] if cuda_ver and len(cuda_ver) >= 4 else None + suffix = 'linux_x86_64' if arch == 'linux' else 'win_amd64' + if cuda_ver is None: + log.error(f'Nunchaku: torch={torch.__version__} cuda="unknown"') + return False + if cuda_ver.startswith('cu13'): + nunchaku_versions = ['1.2.1', '1.2.0', '1.1.0', '1.0.2', '1.0.1'] + else: + nunchaku_versions = ['1.2.1', '1.0.2', '1.0.1'] # 1.2.0 and 1.1.0 imply cu13 but do not specify it + for v in nunchaku_versions: + url = f'https://github.com/nunchaku-ai/nunchaku/releases/download/v{v}/' + fn = f'nunchaku-{v}+{cuda_ver}torch{torch_ver}-cp{python_ver}-cp{python_ver}-{suffix}.whl' + result, _output = pip(f'install --upgrade {url+fn}', uv=False, ignore=True, quiet=True) + if force: + log.debug(f'Nunchaku: url="{fn}" code={result.returncode} stdout={result.stdout} stderr={result.stderr} output={_output}') + if result.returncode == 0: + log.info(f'Nunchaku: install url="{url}"') + return True + fn = f'nunchaku-{v}+torch{torch_ver}-cp{python_ver}-cp{python_ver}-{suffix}.whl' + result, _output = pip(f'install --upgrade {url+fn}', uv=False, ignore=True, quiet=True) + if force: + log.debug(f'Nunchaku: url="{fn}" code={result.returncode} stdout={result.stdout} stderr={result.stderr} output={_output}') + if result.returncode == 0: + log.info(f'Nunchaku: install version={v} url="{url+fn}"') + return True + log.error(f'Nunchaku install failed: torch={torch.__version__} cuda={cuda_ver} python={python_ver} platform={arch}') + return False + if not check(): log.error('Nunchaku: install failed') return False return True + + +if __name__ == '__main__': + from modules.logger import setup_logging + setup_logging() + log.info('Nunchaku: manual install') + install_nunchaku(force=True) From b86e357b8eed073d78e714e1e704d8341d001919 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Sat, 28 Mar 2026 09:49:05 +0100 Subject: [PATCH 03/16] update nunchaku code Signed-off-by: vladmandic --- CHANGELOG.md | 1 + extensions-builtin/sdnext-modernui | 2 +- installer.py | 4 ++-- modules/mit_nunchaku.py | 16 +++++++++++++--- pipelines/model_z_image.py | 6 ++++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 051361715..726aa1a1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -129,6 +129,7 @@ Just how big? Some stats: *~530 commits over 880 files* - refactor move `rebmg` to core instead of extensions - remove face restoration - unified command line parsing + - reinstall `nunchaku` with `--reinstall` flag - use explicit icon image references in `gallery`, thanks @awsr - launch use threads to async execute non-critical tasks - switch from deprecated `pkg_resources` to `importlib` diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 488ab401c..c7af727f3 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 488ab401cfaae83da94821c3f92ba718177dc106 +Subproject commit c7af727f31758c9fc96cf0429bcf3608858a15e8 diff --git a/installer.py b/installer.py index 0b7c491ad..77193d0de 100644 --- a/installer.py +++ b/installer.py @@ -244,13 +244,13 @@ def cleanup_broken_packages(): pass -def pip(arg: str, ignore: bool = False, quiet: bool = True, uv = True): +def pip(arg: str, ignore: bool = False, quiet: bool = True, uv = True) -> tuple[subprocess.CompletedProcess, str]: t_start = time.time() originalArg = arg arg = arg.replace('>=', '==') if opts.get('offline_mode', False): log.warning('Offline mode enabled') - return 'offline' + return None, 'offline' package = arg.replace("install", "").replace("--upgrade", "").replace("--no-deps", "").replace("--force-reinstall", "").replace(" ", " ").strip() uv = uv and args.uv and not package.startswith('git+') pipCmd = "uv pip" if uv else "pip" diff --git a/modules/mit_nunchaku.py b/modules/mit_nunchaku.py index f9501e36c..ea616fe5b 100644 --- a/modules/mit_nunchaku.py +++ b/modules/mit_nunchaku.py @@ -7,8 +7,10 @@ from modules.logger import log ok = False -def check(): +def check(force=False): global ok # pylint: disable=global-statement + if force: + return False if ok: return True try: @@ -26,10 +28,12 @@ def check(): def install_nunchaku(force=False): if not force: - from modules import devices + from modules import devices, shared if devices.backend is None: return False # too early - if not check(): + if shared.cmd_opts.reinstall: + force = True + if not check(force): import os import sys import platform @@ -68,6 +72,9 @@ def install_nunchaku(force=False): url = f'https://github.com/nunchaku-ai/nunchaku/releases/download/v{v}/' fn = f'nunchaku-{v}+{cuda_ver}torch{torch_ver}-cp{python_ver}-cp{python_ver}-{suffix}.whl' result, _output = pip(f'install --upgrade {url+fn}', uv=False, ignore=True, quiet=True) + if (result is None) or (_output == 'offline'): + log.error(f'Nunchaku: install url="{url+fn}" offline mode') + return False if force: log.debug(f'Nunchaku: url="{fn}" code={result.returncode} stdout={result.stdout} stderr={result.stderr} output={_output}') if result.returncode == 0: @@ -75,6 +82,9 @@ def install_nunchaku(force=False): return True fn = f'nunchaku-{v}+torch{torch_ver}-cp{python_ver}-cp{python_ver}-{suffix}.whl' result, _output = pip(f'install --upgrade {url+fn}', uv=False, ignore=True, quiet=True) + if (result is None) or (_output == 'offline'): + log.error(f'Nunchaku: install url="{url+fn}" offline mode') + return False if force: log.debug(f'Nunchaku: url="{fn}" code={result.returncode} stdout={result.stdout} stderr={result.stderr} output={_output}') if result.returncode == 0: diff --git a/pipelines/model_z_image.py b/pipelines/model_z_image.py index e145356e6..bb12a5608 100644 --- a/pipelines/model_z_image.py +++ b/pipelines/model_z_image.py @@ -7,11 +7,13 @@ from pipelines import generic def load_nunchaku(): import nunchaku + if not hasattr(nunchaku, 'NunchakuZImageTransformer2DModel'): # not present in older versions of nunchaku + return None nunchaku_precision = nunchaku.utils.get_precision() nunchaku_rank = 128 nunchaku_repo = f"nunchaku-ai/nunchaku-z-image-turbo/svdq-{nunchaku_precision}_r{nunchaku_rank}-z-image-turbo.safetensors" log.debug(f'Load module: quant=Nunchaku module=transformer repo="{nunchaku_repo}" attention={shared.opts.nunchaku_attention}') - transformer = nunchaku.NunchakuZImageTransformer2DModel.from_pretrained( + transformer = nunchaku.NunchakuZImageTransformer2DModel.from_pretrained( # pylint: disable=no-member nunchaku_repo, torch_dtype=devices.dtype, cache_dir=shared.opts.hfcache_dir, @@ -30,7 +32,7 @@ def load_z_image(checkpoint_info, diffusers_load_config=None): if model_quant.check_nunchaku('Model'): # only available model transformer = load_nunchaku() - else: + if transformer is None: transformer = generic.load_transformer(repo_id, cls_name=diffusers.ZImageTransformer2DModel, load_config=diffusers_load_config) text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.Qwen3ForCausalLM, load_config=diffusers_load_config) From ba8f7b06b2e48b025de8dec21137822b712a4696 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Sat, 28 Mar 2026 00:08:39 +0200 Subject: [PATCH 04/16] pre-inference resize save out fix --- scripts/i2i_folder.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/i2i_folder.py b/scripts/i2i_folder.py index e616915b0..e87b6244a 100644 --- a/scripts/i2i_folder.py +++ b/scripts/i2i_folder.py @@ -172,6 +172,9 @@ class I2IFolderScript(scripts_manager.Script): out_dir = (output_dir or "").strip() or os.path.join(folder, "output") os.makedirs(out_dir, exist_ok=True) + pre_resize_out_dir = os.path.join(out_dir, "pre-resize") if pre_resize_enabled else None + if pre_resize_out_dir: + os.makedirs(pre_resize_out_dir, exist_ok=True) resize_out_dir = os.path.join(os.path.dirname(out_dir), "output-resized") if resize_enabled else None if resize_out_dir: os.makedirs(resize_out_dir, exist_ok=True) @@ -229,6 +232,9 @@ class I2IFolderScript(scripts_manager.Script): cp.width = img.width cp.height = img.height log.info(f"Image folder batch: pre-resize to {img.size} mode={shared.resize_modes[pre_resize_mode]!r} method={pre_resize_name!r}") + pre_out_path = os.path.join(pre_resize_out_dir, os.path.basename(filepath)) + img.save(pre_out_path) + log.info(f"Image folder batch: pre-resize saved {pre_out_path!r}") if upscale_only: log.info(f"Image folder batch: [{i + 1}/{len(files)}] upscale-only file={os.path.basename(filepath)} size={img.size}") out_img = img From 133bf81ad0162f75721b421ff14b619eb841b230 Mon Sep 17 00:00:00 2001 From: resonantsky Date: Sat, 28 Mar 2026 00:27:12 +0200 Subject: [PATCH 05/16] faulty pre-inference resize removed --- scripts/i2i_folder.py | 112 +++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/scripts/i2i_folder.py b/scripts/i2i_folder.py index e87b6244a..6b1dded38 100644 --- a/scripts/i2i_folder.py +++ b/scripts/i2i_folder.py @@ -31,7 +31,7 @@ class I2IFolderScript(scripts_manager.Script): ) with gr.Row(): upscale_only = gr.Checkbox( - label="Upscale only (skip inference, apply post-resize directly to inputs)", + label="Upscale only (skip inference, apply post-resize)", value=False, elem_id=self.elem_id("upscale_only"), ) @@ -78,46 +78,46 @@ class I2IFolderScript(scripts_manager.Script): label="Denoising strength (0.0 = use panel)", elem_id=self.elem_id("strength_override"), ) - with gr.Row(): - gr.HTML('Pre-inference resize') + # with gr.Row(): + # gr.HTML('Pre-inference resize') _upscaler_choices = [x.name for x in shared.sd_upscalers] or ["None"] - with gr.Row(): - pre_resize_enabled = gr.Checkbox( - label="Enable pre-inference resize", - value=False, - elem_id=self.elem_id("pre_resize_enabled"), - ) - with gr.Row(): - pre_resize_mode = gr.Dropdown( - label="Resize mode", - choices=shared.resize_modes, - type="index", - value="None", - elem_id=self.elem_id("pre_resize_mode"), - ) - pre_resize_name = gr.Dropdown( - label="Resize method", - choices=_upscaler_choices, - value=_upscaler_choices[0], - elem_id=self.elem_id("pre_resize_name"), - ) - with gr.Row(): - pre_resize_scale = gr.Slider( - minimum=0.25, maximum=4.0, step=0.05, value=1.0, - label="Scale factor (ignored if width/height set)", - elem_id=self.elem_id("pre_resize_scale"), - ) - with gr.Row(): - pre_resize_width = gr.Number( - label="Width (0 = use scale factor)", - value=0, precision=0, - elem_id=self.elem_id("pre_resize_width"), - ) - pre_resize_height = gr.Number( - label="Height (0 = use scale factor)", - value=0, precision=0, - elem_id=self.elem_id("pre_resize_height"), - ) + # with gr.Row(): + # pre_resize_enabled = gr.Checkbox( + # label="Enable pre-inference resize", + # value=False, + # elem_id=self.elem_id("pre_resize_enabled"), + # ) + # with gr.Row(): + # pre_resize_mode = gr.Dropdown( + # label="Resize mode", + # choices=shared.resize_modes, + # type="index", + # value="None", + # elem_id=self.elem_id("pre_resize_mode"), + # ) + # pre_resize_name = gr.Dropdown( + # label="Resize method", + # choices=_upscaler_choices, + # value=_upscaler_choices[0], + # elem_id=self.elem_id("pre_resize_name"), + # ) + # with gr.Row(): + # pre_resize_scale = gr.Slider( + # minimum=0.25, maximum=4.0, step=0.05, value=1.0, + # label="Scale factor (ignored if width/height set)", + # elem_id=self.elem_id("pre_resize_scale"), + # ) + # with gr.Row(): + # pre_resize_width = gr.Number( + # label="Width (0 = use scale factor)", + # value=0, precision=0, + # elem_id=self.elem_id("pre_resize_width"), + # ) + # pre_resize_height = gr.Number( + # label="Height (0 = use scale factor)", + # value=0, precision=0, + # elem_id=self.elem_id("pre_resize_height"), + # ) with gr.Row(): gr.HTML('Post-inference resize') with gr.Row(): @@ -157,9 +157,9 @@ class I2IFolderScript(scripts_manager.Script): value=0, precision=0, elem_id=self.elem_id("resize_height"), ) - return [folder, output_dir, upscale_only, prompt_override, negative_override, seed_override, steps_override, cfg_scale_override, sampler_override, strength_override, pre_resize_enabled, pre_resize_mode, pre_resize_name, pre_resize_scale, pre_resize_width, pre_resize_height, resize_enabled, resize_mode, resize_name, resize_scale, resize_width, resize_height] + return [folder, output_dir, upscale_only, prompt_override, negative_override, seed_override, steps_override, cfg_scale_override, sampler_override, strength_override, resize_enabled, resize_mode, resize_name, resize_scale, resize_width, resize_height] - def run(self, p, folder, output_dir, upscale_only, prompt_override, negative_override, seed_override, steps_override, cfg_scale_override, sampler_override, strength_override, pre_resize_enabled, pre_resize_mode, pre_resize_name, pre_resize_scale, pre_resize_width, pre_resize_height, resize_enabled, resize_mode, resize_name, resize_scale, resize_width, resize_height): # pylint: disable=arguments-differ + def run(self, p, folder, output_dir, upscale_only, prompt_override, negative_override, seed_override, steps_override, cfg_scale_override, sampler_override, strength_override, resize_enabled, resize_mode, resize_name, resize_scale, resize_width, resize_height): # pylint: disable=arguments-differ folder = (folder or "").strip() if not folder or not os.path.isdir(folder): log.error(f"Image folder batch: invalid or missing folder: {folder!r}") @@ -172,9 +172,9 @@ class I2IFolderScript(scripts_manager.Script): out_dir = (output_dir or "").strip() or os.path.join(folder, "output") os.makedirs(out_dir, exist_ok=True) - pre_resize_out_dir = os.path.join(out_dir, "pre-resize") if pre_resize_enabled else None - if pre_resize_out_dir: - os.makedirs(pre_resize_out_dir, exist_ok=True) + # pre_resize_out_dir = os.path.join(out_dir, "pre-resize") if pre_resize_enabled else None + # if pre_resize_out_dir: + # os.makedirs(pre_resize_out_dir, exist_ok=True) resize_out_dir = os.path.join(os.path.dirname(out_dir), "output-resized") if resize_enabled else None if resize_out_dir: os.makedirs(resize_out_dir, exist_ok=True) @@ -224,17 +224,17 @@ class I2IFolderScript(scripts_manager.Script): cp.init_images = [img] cp.width = img.width cp.height = img.height - if pre_resize_enabled and pre_resize_mode != 0 and pre_resize_name not in ('None', '') and shared.sd_upscalers: - pre_w = int(pre_resize_width) if int(pre_resize_width) > 0 else int(img.width * pre_resize_scale) - pre_h = int(pre_resize_height) if int(pre_resize_height) > 0 else int(img.height * pre_resize_scale) - img = images.resize_image(pre_resize_mode, img, pre_w, pre_h, pre_resize_name) - cp.init_images = [img] - cp.width = img.width - cp.height = img.height - log.info(f"Image folder batch: pre-resize to {img.size} mode={shared.resize_modes[pre_resize_mode]!r} method={pre_resize_name!r}") - pre_out_path = os.path.join(pre_resize_out_dir, os.path.basename(filepath)) - img.save(pre_out_path) - log.info(f"Image folder batch: pre-resize saved {pre_out_path!r}") + # if pre_resize_enabled and pre_resize_mode != 0 and pre_resize_name not in ('None', '') and shared.sd_upscalers: + # pre_w = int(pre_resize_width) if int(pre_resize_width) > 0 else int(img.width * pre_resize_scale) + # pre_h = int(pre_resize_height) if int(pre_resize_height) > 0 else int(img.height * pre_resize_scale) + # img = images.resize_image(pre_resize_mode, img, pre_w, pre_h, pre_resize_name) + # cp.init_images = [img] + # cp.width = img.width + # cp.height = img.height + # log.info(f"Image folder batch: pre-resize to {img.size} mode={shared.resize_modes[pre_resize_mode]!r} method={pre_resize_name!r}") + # pre_out_path = os.path.join(pre_resize_out_dir, os.path.basename(filepath)) + # img.save(pre_out_path) + # log.info(f"Image folder batch: pre-resize saved {pre_out_path!r}") if upscale_only: log.info(f"Image folder batch: [{i + 1}/{len(files)}] upscale-only file={os.path.basename(filepath)} size={img.size}") out_img = img From 005eb789a3778e22d9a2aef392a6717b49fc6764 Mon Sep 17 00:00:00 2001 From: Disty0 Date: Sat, 28 Mar 2026 18:02:17 +0300 Subject: [PATCH 06/16] SDNQ use combination config for Triton MM --- modules/sdnq/triton_mm.py | 82 +++++++++++++-------------------------- 1 file changed, 27 insertions(+), 55 deletions(-) diff --git a/modules/sdnq/triton_mm.py b/modules/sdnq/triton_mm.py index 987118d09..c29b6234d 100644 --- a/modules/sdnq/triton_mm.py +++ b/modules/sdnq/triton_mm.py @@ -11,58 +11,28 @@ import triton import triton.language as tl -def get_autotune_config(): - if triton.runtime.driver.active.get_current_target().backend == "cuda": - return [ - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=3, num_warps=8), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 32, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 32, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=5, num_warps=2), - triton.Config({"BLOCK_SIZE_M": 32, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=5, num_warps=2), - # - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=3, num_warps=8), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 32, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 256, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=3, num_warps=8), - triton.Config({"BLOCK_SIZE_M": 256, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=4, num_warps=4), - ] - else: - return [ - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=8), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 32, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 32, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=2), - triton.Config({"BLOCK_SIZE_M": 32, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 32, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=2), - # - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=8), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 256, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 64, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 128, "BLOCK_SIZE_N": 32, "BLOCK_SIZE_K": 64, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - triton.Config({"BLOCK_SIZE_M": 256, "BLOCK_SIZE_N": 128, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=8), - triton.Config({"BLOCK_SIZE_M": 256, "BLOCK_SIZE_N": 64, "BLOCK_SIZE_K": 128, "GROUP_SIZE_M": 8}, num_stages=2, num_warps=4), - ] +matmul_configs = [ + triton.Config({'BLOCK_SIZE_M': BM, 'BLOCK_SIZE_N': BN, "BLOCK_SIZE_K": BK, "GROUP_SIZE_M": GM}, num_warps=w, num_stages=s) + for BM in [32, 64, 128, 256] + for BN in [32, 64, 128, 256] + for BK in [32, 64, 128] + for GM in [8, 16] + for w in [8, 16] + for s in [2] +] -@triton.autotune(configs=get_autotune_config(), key=["M", "N", "K", "stride_bk"]) +@triton.autotune(configs=matmul_configs, key=["M", "N", "K", "stride_bk"]) @triton.jit def int_mm_kernel( a_ptr, b_ptr, c_ptr, - M, N, K, - stride_am, stride_ak, - stride_bk, stride_bn, - stride_cm, stride_cn, - BLOCK_SIZE_M: tl.constexpr, BLOCK_SIZE_N: tl.constexpr, BLOCK_SIZE_K: tl.constexpr, + M: int, N: int, K: int, + stride_am: int, stride_ak: int, + stride_bk: int, stride_bn: int, + stride_cm: int, stride_cn: int, + BLOCK_SIZE_M: tl.constexpr, + BLOCK_SIZE_N: tl.constexpr, + BLOCK_SIZE_K: tl.constexpr, GROUP_SIZE_M: tl.constexpr, ): pid = tl.program_id(axis=0) @@ -105,7 +75,7 @@ def int_mm_kernel( tl.store(c_ptrs, accumulator, mask=c_mask) -def int_mm(a, b): +def int_mm(a: torch.Tensor, b: torch.Tensor) -> torch.Tensor: assert a.shape[1] == b.shape[0], "Incompatible dimensions" assert a.is_contiguous(), "Matrix A must be contiguous" M, K = a.shape @@ -123,15 +93,17 @@ def int_mm(a, b): return c -@triton.autotune(configs=get_autotune_config(), key=["M", "N", "K", "stride_bk"]) +@triton.autotune(configs=matmul_configs, key=["M", "N", "K", "stride_bk"]) @triton.jit def fp_mm_kernel( a_ptr, b_ptr, c_ptr, - M, N, K, - stride_am, stride_ak, - stride_bk, stride_bn, - stride_cm, stride_cn, - BLOCK_SIZE_M: tl.constexpr, BLOCK_SIZE_N: tl.constexpr, BLOCK_SIZE_K: tl.constexpr, + M: int, N: int, K: int, + stride_am: int, stride_ak: int, + stride_bk: int, stride_bn: int, + stride_cm: int, stride_cn: int, + BLOCK_SIZE_M: tl.constexpr, + BLOCK_SIZE_N: tl.constexpr, + BLOCK_SIZE_K: tl.constexpr, GROUP_SIZE_M: tl.constexpr, ): pid = tl.program_id(axis=0) @@ -174,7 +146,7 @@ def fp_mm_kernel( tl.store(c_ptrs, accumulator, mask=c_mask) -def fp_mm(a, b): +def fp_mm(a: torch.FloatTensor, b: torch.FloatTensor) -> torch.FloatTensor: assert a.shape[1] == b.shape[0], "Incompatible dimensions" assert a.is_contiguous(), "Matrix A must be contiguous" M, K = a.shape From 06fe4c7f20f4668cb19913d24e56822ef3a9001e Mon Sep 17 00:00:00 2001 From: Disty0 Date: Sun, 29 Mar 2026 00:44:58 +0300 Subject: [PATCH 07/16] SDNQ cleanup triton_mm --- modules/sdnq/triton_mm.py | 68 ++++++--------------------------------- 1 file changed, 9 insertions(+), 59 deletions(-) diff --git a/modules/sdnq/triton_mm.py b/modules/sdnq/triton_mm.py index c29b6234d..a633a395b 100644 --- a/modules/sdnq/triton_mm.py +++ b/modules/sdnq/triton_mm.py @@ -22,14 +22,15 @@ matmul_configs = [ ] -@triton.autotune(configs=matmul_configs, key=["M", "N", "K", "stride_bk"]) +@triton.autotune(configs=matmul_configs, key=["M", "N", "K", "stride_bk", "ACCUMULATOR_DTYPE"]) @triton.jit -def int_mm_kernel( +def triton_mm_kernel( a_ptr, b_ptr, c_ptr, M: int, N: int, K: int, stride_am: int, stride_ak: int, stride_bk: int, stride_bn: int, stride_cm: int, stride_cn: int, + ACCUMULATOR_DTYPE: tl.constexpr, BLOCK_SIZE_M: tl.constexpr, BLOCK_SIZE_N: tl.constexpr, BLOCK_SIZE_K: tl.constexpr, @@ -60,11 +61,11 @@ def int_mm_kernel( a_ptrs = a_ptr + (offs_am[:, None] * stride_am + offs_k[None, :] * stride_ak) b_ptrs = b_ptr + (offs_k[:, None] * stride_bk + offs_bn[None, :] * stride_bn) - accumulator = tl.zeros((BLOCK_SIZE_M, BLOCK_SIZE_N), dtype=tl.int32) + accumulator = tl.zeros((BLOCK_SIZE_M, BLOCK_SIZE_N), dtype=ACCUMULATOR_DTYPE) for k in range(0, tl.cdiv(K, BLOCK_SIZE_K)): a = tl.load(a_ptrs, mask=offs_k[None, :] < K - k * BLOCK_SIZE_K, other=0.0) b = tl.load(b_ptrs, mask=offs_k[:, None] < K - k * BLOCK_SIZE_K, other=0.0) - accumulator = tl.dot(a, b, accumulator, out_dtype=tl.int32) + accumulator = tl.dot(a, b, accumulator, out_dtype=ACCUMULATOR_DTYPE) a_ptrs += BLOCK_SIZE_K * stride_ak b_ptrs += BLOCK_SIZE_K * stride_bk @@ -83,69 +84,17 @@ def int_mm(a: torch.Tensor, b: torch.Tensor) -> torch.Tensor: c = torch.empty((M, N), device=a.device, dtype=torch.int32) def grid(META): return (triton.cdiv(M, META["BLOCK_SIZE_M"]) * triton.cdiv(N, META["BLOCK_SIZE_N"]), ) - int_mm_kernel[grid]( + triton_mm_kernel[grid]( a, b, c, M, N, K, a.stride(0), a.stride(1), b.stride(0), b.stride(1), c.stride(0), c.stride(1), + tl.int32, ) return c -@triton.autotune(configs=matmul_configs, key=["M", "N", "K", "stride_bk"]) -@triton.jit -def fp_mm_kernel( - a_ptr, b_ptr, c_ptr, - M: int, N: int, K: int, - stride_am: int, stride_ak: int, - stride_bk: int, stride_bn: int, - stride_cm: int, stride_cn: int, - BLOCK_SIZE_M: tl.constexpr, - BLOCK_SIZE_N: tl.constexpr, - BLOCK_SIZE_K: tl.constexpr, - GROUP_SIZE_M: tl.constexpr, -): - pid = tl.program_id(axis=0) - num_pid_m = tl.cdiv(M, BLOCK_SIZE_M) - num_pid_n = tl.cdiv(N, BLOCK_SIZE_N) - num_pid_in_group = GROUP_SIZE_M * num_pid_n - group_id = pid // num_pid_in_group - first_pid_m = group_id * GROUP_SIZE_M - group_size_m = min(num_pid_m - first_pid_m, GROUP_SIZE_M) - pid_m = first_pid_m + ((pid % num_pid_in_group) % group_size_m) - pid_n = (pid % num_pid_in_group) // group_size_m - - tl.assume(pid_m >= 0) - tl.assume(pid_n >= 0) - tl.assume(stride_am > 0) - tl.assume(stride_ak > 0) - tl.assume(stride_bn > 0) - tl.assume(stride_bk > 0) - tl.assume(stride_cm > 0) - tl.assume(stride_cn > 0) - - offs_am = (pid_m * BLOCK_SIZE_M + tl.arange(0, BLOCK_SIZE_M)) % M - offs_bn = (pid_n * BLOCK_SIZE_N + tl.arange(0, BLOCK_SIZE_N)) % N - offs_k = tl.arange(0, BLOCK_SIZE_K) - a_ptrs = a_ptr + (offs_am[:, None] * stride_am + offs_k[None, :] * stride_ak) - b_ptrs = b_ptr + (offs_k[:, None] * stride_bk + offs_bn[None, :] * stride_bn) - - accumulator = tl.zeros((BLOCK_SIZE_M, BLOCK_SIZE_N), dtype=tl.float32) - for k in range(0, tl.cdiv(K, BLOCK_SIZE_K)): - a = tl.load(a_ptrs, mask=offs_k[None, :] < K - k * BLOCK_SIZE_K, other=0.0) - b = tl.load(b_ptrs, mask=offs_k[:, None] < K - k * BLOCK_SIZE_K, other=0.0) - accumulator = tl.dot(a, b, accumulator, out_dtype=tl.float32) - a_ptrs += BLOCK_SIZE_K * stride_ak - b_ptrs += BLOCK_SIZE_K * stride_bk - - offs_cm = pid_m * BLOCK_SIZE_M + tl.arange(0, BLOCK_SIZE_M) - offs_cn = pid_n * BLOCK_SIZE_N + tl.arange(0, BLOCK_SIZE_N) - c_ptrs = c_ptr + stride_cm * offs_cm[:, None] + stride_cn * offs_cn[None, :] - c_mask = (offs_cm[:, None] < M) & (offs_cn[None, :] < N) - tl.store(c_ptrs, accumulator, mask=c_mask) - - def fp_mm(a: torch.FloatTensor, b: torch.FloatTensor) -> torch.FloatTensor: assert a.shape[1] == b.shape[0], "Incompatible dimensions" assert a.is_contiguous(), "Matrix A must be contiguous" @@ -154,11 +103,12 @@ def fp_mm(a: torch.FloatTensor, b: torch.FloatTensor) -> torch.FloatTensor: c = torch.empty((M, N), device=a.device, dtype=torch.float32) def grid(META): return (triton.cdiv(M, META["BLOCK_SIZE_M"]) * triton.cdiv(N, META["BLOCK_SIZE_N"]), ) - fp_mm_kernel[grid]( + triton_mm_kernel[grid]( a, b, c, M, N, K, a.stride(0), a.stride(1), b.stride(0), b.stride(1), c.stride(0), c.stride(1), + tl.float32, ) return c From 61e7663eb3fec4b7ff8c0ba26d95a4a2b949bc01 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Mon, 30 Mar 2026 09:07:47 +0200 Subject: [PATCH 08/16] update chainner Signed-off-by: vladmandic --- extensions-builtin/sd-extension-chainner | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions-builtin/sd-extension-chainner b/extensions-builtin/sd-extension-chainner index b6ddea301..d4eab2166 160000 --- a/extensions-builtin/sd-extension-chainner +++ b/extensions-builtin/sd-extension-chainner @@ -1 +1 @@ -Subproject commit b6ddea3013eef6093d0bf5b605f8628a22213896 +Subproject commit d4eab2166e4d9b52e42924cc942198f9e22eb916 From 849ab8fe1e7814afd432fd06867c8bad597a1228 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Mon, 30 Mar 2026 09:58:42 +0200 Subject: [PATCH 09/16] fix loader Signed-off-by: vladmandic --- modules/sd_models.py | 4 ++-- pipelines/model_z_image.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/sd_models.py b/modules/sd_models.py index db1007126..ae9a47cde 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -509,8 +509,8 @@ def load_diffuser_force(detected_model_type, checkpoint_info, diffusers_load_con allow_post_quant = False except Exception as e: log.error(f'Load {op}: path="{checkpoint_info.path}" {e}') - if debug_load: - errors.display(e, 'Load') + # if debug_load: + errors.display(e, 'Load') return None, True if sd_model is not None: return sd_model, True diff --git a/pipelines/model_z_image.py b/pipelines/model_z_image.py index bb12a5608..6f9b8cf76 100644 --- a/pipelines/model_z_image.py +++ b/pipelines/model_z_image.py @@ -30,6 +30,7 @@ def load_z_image(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) log.debug(f'Load model: type=ZImage repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={diffusers_load_config}') + transformer = None if model_quant.check_nunchaku('Model'): # only available model transformer = load_nunchaku() if transformer is None: From a370bfc9870a3e76c1e96233a75fa523a1854ba6 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Mon, 30 Mar 2026 10:24:26 +0200 Subject: [PATCH 10/16] handle taesd init failures Signed-off-by: vladmandic --- CHANGELOG.md | 7 ++++--- modules/vae/sd_vae_taesd.py | 11 ++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 726aa1a1b..d49c893f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Change Log for SD.Next -## Update for 2026-03-28 +## Update for 2026-03-30 -### Highlights for 2026-03-28 +### Highlights for 2026-03-30 This release brings massive code refactoring to modernize codebase and removal of some obsolete features. Leaner & Faster! And since its a bit quieter period when it comes to new models, notable additions would be : *FireRed-Image-Edit*, *SkyWorks-UniPic-3* and new versions of *Anima-Preview*, *Flux-Klein-KV* @@ -20,7 +20,7 @@ Just how big? Some stats: *~530 commits over 880 files* [ReadMe](https://github.com/vladmandic/automatic/blob/master/README.md) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [WiKi](https://github.com/vladmandic/automatic/wiki) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-03-28 +### Details for 2026-03-30 - **Models** - [Google Flash 3.1 Image](https://ai.google.dev/gemini-api/docs/models/gemini-3-flash-preview) a.k.a. *Nano Banana 2* @@ -185,6 +185,7 @@ Just how big? Some stats: *~530 commits over 880 files* - add `lora` support for flux2-klein - fix `lora` change when used with `sdnq` - multiple `sdnq` fixes + - handle `taesd` init errors ## Update for 2026-02-04 diff --git a/modules/vae/sd_vae_taesd.py b/modules/vae/sd_vae_taesd.py index 8e236f0b3..ea0e22972 100644 --- a/modules/vae/sd_vae_taesd.py +++ b/modules/vae/sd_vae_taesd.py @@ -153,9 +153,14 @@ def get_model(model_type = 'decoder', variant = None): def decode(latents): global first_run # pylint: disable=global-statement with lock: - vae, variant = get_model(model_type='decoder') - if vae is None or max(latents.shape) > 256: # safetey check of large tensors - return latents + try: + vae, variant = get_model(model_type='decoder') + if vae is None or max(latents.shape) > 256: # safetey check of large tensors + return latents + except Exception as e: + # from modules import errors + # errors.display(e, 'taesd"') + return warn_once(f'load: {e}') try: with devices.inference_context(): t0 = time.time() From ca2d49497bb0f17fe85ab7e4d6534f730f466fcc Mon Sep 17 00:00:00 2001 From: vladmandic Date: Mon, 30 Mar 2026 11:16:55 +0200 Subject: [PATCH 11/16] ltx test Signed-off-by: vladmandic --- modules/video_models/models_def.py | 60 ++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index 02aa3bec2..d127a57ae 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -128,30 +128,82 @@ try: ], 'LTX Video': [ Model(name='None'), - Model(name='LTXVideo 2 19B T2V Dev', + + Model(name='LTXVideo 2.3 T2V', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 2.3 I2V', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 2.3 T2V Distilled', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3-Distilled', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 2.3 I2V Distilled', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3-Distilled', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + + Model(name='LTXVideo 2.3 T2V SDNQ-4Bit', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 2.3 I2V SDNQ-4Bit', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 2.3 T2V Distilled SDNQ-4Bit', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 2.3 I2V Distilled SDNQ-4Bit', + url='https://huggingface.co/Lightricks/LTX-2.3', + repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4', + repo_cls=getattr(diffusers, 'LTX2Pipeline', None), + te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + + Model(name='LTXVideo 2.0 19B T2V Dev', url='https://huggingface.co/Lightricks/LTX-2', repo='Lightricks/LTX-2', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2 19B I2V Dev', + Model(name='LTXVideo 2.0 19B I2V Dev', url='https://huggingface.co/Lightricks/LTX-2', repo='Lightricks/LTX-2', repo_cls=getattr(diffusers, 'LTX2ImageToVideoPipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2 19B T2V Dev SDNQ', + Model(name='LTXVideo 2.0 19B T2V Dev SDNQ-4Bit', url='https://huggingface.co/Disty0/LTX-2-SDNQ-4bit-dynamic', repo='Disty0/LTX-2-SDNQ-4bit-dynamic', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2 19B I2V Dev SDNQ', + Model(name='LTXVideo 2.0 19B I2V Dev SDNQ-4Bit', url='https://huggingface.co/Disty0/LTX-2-SDNQ-4bit-dynamic', repo='Disty0/LTX-2-SDNQ-4bit-dynamic', repo_cls=getattr(diffusers, 'LTX2ImageToVideoPipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), + Model(name='LTXVideo 0.9.8 13B Distilled', url='https://huggingface.co/Lightricks/LTX-Video-0.9.8-13B-distilled', repo='Lightricks/LTX-Video-0.9.8-13B-distilled', From ec1341348b71061f61612ed7c189ce2aae580e5a Mon Sep 17 00:00:00 2001 From: vladmandic Date: Mon, 30 Mar 2026 12:19:36 +0200 Subject: [PATCH 12/16] update todo/changelog Signed-off-by: vladmandic --- CHANGELOG.md | 13 ++++++++++--- TODO.md | 4 ++-- modules/api/validate.py | 11 ++++++----- modules/video_models/models_def.py | 16 ++++++++-------- wiki | 2 +- 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d49c893f1..f8703a9d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,16 +5,15 @@ ### Highlights for 2026-03-30 This release brings massive code refactoring to modernize codebase and removal of some obsolete features. Leaner & Faster! -And since its a bit quieter period when it comes to new models, notable additions would be : *FireRed-Image-Edit*, *SkyWorks-UniPic-3* and new versions of *Anima-Preview*, *Flux-Klein-KV* +And since its a bit quieter period when it comes to new models, notable additions would be : *FireRed-Image-Edit*, *SkyWorks-UniPic-3* and new versions of *Anima-Preview*, *Flux-Klein-KV* image models and *LTX 2.3* video model -If you're on Windows platform, we have a brand new [All-in-one Installer & Launcher](https://github.com/vladmandic/sdnext-launcher): simply download [exe or zip](https://github.com/vladmandic/sdnext-launcher/releases) and done! +If you're on Windows platform, we have a brand new [All-in-one Installer & Launcher](https://github.com/vladmandic/sdnext-launcher): simply download [exe or zip](https://github.com/vladmandic/sdnext-launcher/releases) and done! *What else*? Really a lot! New color grading module, updated localization with new languages and improved translations, new civitai integration module, new finetunes loader, several new upscalers, improvements to LLM/VLM in captioning and prompt enhance, a lot of new control preprocessors, new realtime server info panel, some new UI themes And major work on API hardening: security, rate limits, secrets handling, new endpoints, etc. But also many smaller quality-of-life improvements - for full details, see [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) - *Note*: Purely due to size of changes, clean install is recommended! Just how big? Some stats: *~530 commits over 880 files* @@ -30,6 +29,8 @@ Just how big? Some stats: *~530 commits over 880 files* *Note*: UniPic-3 is a fine-tune of Qwen-Image-Edit with new distillation regardless of its claim of major changes - [Anima Preview-v2](https://huggingface.co/circlestone-labs/Anima) - [FLUX.2-Klein-KV](https://huggingface.co/black-forest-labs/FLUX.2-klein-9b-kv), thanks @liutyi + - [LTX-Video 2.3](https://huggingface.co/Lightricks/LTX-2.3) in *Full and Distilled* variants and in both original *FP16 and SDNQ-4bit* quantiztion + *note* ltx-2.3 is a massive 22B parameters and full model is very large (72GB) so use of pre-quantized variant (32GB) is highly recommended - **Image manipulation** - new **Color grading** module apply basic corrections to your images: brightness,contrast,saturation,shadows,highlights @@ -77,6 +78,9 @@ Just how big? Some stats: *~530 commits over 880 files* - *note* **Cuda** `torch==2.10` removed support for `rtx1000` series and older GPUs use following before first startup to force installation of `torch==2.9.1` with `cuda==12.6`: > `set TORCH_COMMAND='torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu126'` + - *note* **Cuda** `cuda==13.0` requires newer nVidia drivers + use following before first startup to force installation of `torch==2.11.0` with `cuda==12.68`: + > `set TORCH_COMMAND='torch torchvision --index-url https://download.pytorch.org/whl/cu128` - update installer and support `nunchaku==1.2.1` - **UI** - legacy panels **T2I** and **I2I** are disabled by default @@ -95,6 +99,9 @@ Just how big? Some stats: *~530 commits over 880 files* - **Themes** add *Vlad-Neomorph* - **Gallery** add option to auto-refresh gallery, thanks @awsr - **Token counters** add per-section display for supported models, thanks @awsr +- **Docs / Wiki** + - updates to to compute sections: *AMD-ROCm, AMD-MIOpen, ZLUDA, OpenVINO, nVidia* + - updates to core sections: *Installation, Python, Schedulers, Launcher, SDNQ, Video* - **API** - **rate limiting**: global for all endpoints, guards against abuse and denial-of-service type of attacks configurable in *settings -> server settings* diff --git a/TODO.md b/TODO.md index 5e2974746..746ffacdd 100644 --- a/TODO.md +++ b/TODO.md @@ -2,7 +2,6 @@ ## Release -- Implement: `unload_auxiliary_models` - Add notes: **Enso** - Tips: **Color Grading** - Regen: **Localization** @@ -10,7 +9,7 @@ ## Internal -- Integrate: [Depth3D](https://github.com/vladmandic/sd-extension-depth3d) +- Feature: implement `unload_auxiliary_models` - Feature: RIFE update - Feature: RIFE in processing - Feature: SeedVR2 in processing @@ -30,6 +29,7 @@ - Refactor: Unify *huggingface* and *diffusers* model folders - Refactor: [GGUF](https://huggingface.co/docs/diffusers/main/en/quantization/gguf) - Reimplement `llama` remover for Kanvas +- Integrate: [Depth3D](https://github.com/vladmandic/sd-extension-depth3d) ## OnHold diff --git a/modules/api/validate.py b/modules/api/validate.py index 2924ed542..29e3c1148 100644 --- a/modules/api/validate.py +++ b/modules/api/validate.py @@ -22,12 +22,13 @@ log_cost = { "/internal/progress": -1, "/sdapi/v1/version": -1, "/sdapi/v1/log": -1, - "/sdapi/v1/torch": 60, - "/sdapi/v1/gpu": 60, + "/sdapi/v1/torch": -1, + "/sdapi/v1/gpu": -1, + "/sdapi/v1/memory": -1, + "/sdapi/v1/platform": -1, + "/sdapi/v1/checkpoint": -1, "/sdapi/v1/status": 60, - "/sdapi/v1/memory": 60, - "/sdapi/v1/platform": 60, - "/sdapi/v1/checkpoint": 60, + "/sdapi/v1/progress": 60, } log_exclude_suffix = ['.css', '.js', '.ico', '.svg'] log_exclude_prefix = ['/assets'] diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index d127a57ae..67ad57d3f 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -129,50 +129,50 @@ try: 'LTX Video': [ Model(name='None'), - Model(name='LTXVideo 2.3 T2V', + Model(name='LTXVideo 2.3 22B T2V', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 I2V', + Model(name='LTXVideo 2.3 22B I2V', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 T2V Distilled', + Model(name='LTXVideo 2.3 22B T2V Distilled', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3-Distilled', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 I2V Distilled', + Model(name='LTXVideo 2.3 22B I2V Distilled', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3-Distilled', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 T2V SDNQ-4Bit', + Model(name='LTXVideo 2.3 22B T2V SDNQ-4Bit', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 I2V SDNQ-4Bit', + Model(name='LTXVideo 2.3 22B I2V SDNQ-4Bit', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 T2V Distilled SDNQ-4Bit', + Model(name='LTXVideo 2.3 22B T2V Distilled SDNQ-4Bit', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), te_cls=getattr(transformers, 'Gemma3ForConditionalGeneration', None), dit_cls=getattr(diffusers, 'LTX2VideoTransformer3DModel', None)), - Model(name='LTXVideo 2.3 I2V Distilled SDNQ-4Bit', + Model(name='LTXVideo 2.3 22B I2V Distilled SDNQ-4Bit', url='https://huggingface.co/Lightricks/LTX-2.3', repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4', repo_cls=getattr(diffusers, 'LTX2Pipeline', None), diff --git a/wiki b/wiki index 7abb07dc9..3dde18b34 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 7abb07dc95bdb2c1869e2901213f5c82b46905c3 +Subproject commit 3dde18b34e2cd61c800cdd748ada69cede612296 From 61c10d6591afd6432dea2742c14358dd53457a94 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Tue, 31 Mar 2026 16:34:28 +0200 Subject: [PATCH 13/16] update diffusers and transformers Signed-off-by: vladmandic --- extensions-builtin/sd-extension-system-info | 2 +- extensions-builtin/sdnext-kanvas | 2 +- installer.py | 4 +-- modules/image/save.py | 29 ++++++++++++++++----- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/extensions-builtin/sd-extension-system-info b/extensions-builtin/sd-extension-system-info index 88d2f12b1..006f08f49 160000 --- a/extensions-builtin/sd-extension-system-info +++ b/extensions-builtin/sd-extension-system-info @@ -1 +1 @@ -Subproject commit 88d2f12b1f2015894224ed7f8f4d3a10c1fa514e +Subproject commit 006f08f499bbe69c484f0f1cc332bbf0e75526c2 diff --git a/extensions-builtin/sdnext-kanvas b/extensions-builtin/sdnext-kanvas index d15b31206..1e840033b 160000 --- a/extensions-builtin/sdnext-kanvas +++ b/extensions-builtin/sdnext-kanvas @@ -1 +1 @@ -Subproject commit d15b31206a581e49d0e8b70b375587c046e7f53f +Subproject commit 1e840033b040d8915ddfb5dbf62c80f411bcec0a diff --git a/installer.py b/installer.py index 77193d0de..71cd3207a 100644 --- a/installer.py +++ b/installer.py @@ -478,7 +478,7 @@ def check_diffusers(): t_start = time.time() if args.skip_all: return - target_commit = "85ffcf1db23c0e981215416abd8e8a748bfd86b6" # diffusers commit hash == 0.37.1.dev-0326 + target_commit = "0325ca4c5938a7e300f3e3b9ee7ec85f52d01bb5" # diffusers commit hash == 0.37.1.dev-0331 # if args.use_rocm or args.use_zluda or args.use_directml: # sha = '043ab2520f6a19fce78e6e060a68dbc947edb9f9' # lock diffusers versions for now pkg = package_spec('diffusers') @@ -507,7 +507,7 @@ def check_transformers(): pkg_tokenizers = package_spec('tokenizers') # target_commit = '753d61104116eefc8ffc977327b441ee0c8d599f' # transformers commit hash == 4.57.6 # target_commit = "aad13b87ed59f2afcfaebc985f403301887a35fc" # transformers commit hash == 5.3.0 - target_commit = "c9faacd7d57459157656bdffe049dabb6293f011" # transformers commit hash == 5.3.0.dev-0326 + target_commit = "2dba8e0495974930af02274d75bd182d22cc1686" # transformers commit hash == 5.3.0.dev-0331 if args.use_directml: target_transformers = '4.52.4' target_tokenizers = '0.21.4' diff --git a/modules/image/save.py b/modules/image/save.py index 79e3ca44f..28e64f488 100644 --- a/modules/image/save.py +++ b/modules/image/save.py @@ -61,38 +61,53 @@ def atomically_save_image(): log.warning(f'Save failed: description={filename_txt} {e}') # actual save + exifinfo_dump = piexif.helper.UserComment.dump(exifinfo, encoding="unicode") if image_format == 'PNG': pnginfo_data = PngImagePlugin.PngInfo() for k, v in params.pnginfo.items(): pnginfo_data.add_text(k, str(v)) debug_save(f'Save pnginfo: {params.pnginfo.items()}') - save_args = { 'compress_level': 6, 'pnginfo': pnginfo_data if shared.opts.image_metadata else None } + save_args = { + 'compress_level': 6, + 'pnginfo': pnginfo_data if shared.opts.image_metadata else None, + } elif image_format == 'JPEG': if image.mode == 'RGBA': log.warning('Save: removing alpha channel') image = image.convert("RGB") elif image.mode == 'I;16': image = image.point(lambda p: p * 0.0038910505836576).convert("L") - save_args = { 'optimize': True, 'quality': shared.opts.jpeg_quality } + save_args = { + 'optimize': True, + 'quality': shared.opts.jpeg_quality, + } if shared.opts.image_metadata: debug_save(f'Save exif: {exifinfo}') - save_args['exif'] = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(exifinfo, encoding="unicode") } }) + save_args['exif'] = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: exifinfo_dump } }) elif image_format == 'WEBP': if image.mode == 'I;16': image = image.point(lambda p: p * 0.0038910505836576).convert("RGB") - save_args = { 'optimize': True, 'quality': shared.opts.jpeg_quality, 'lossless': shared.opts.webp_lossless } + save_args = { + 'optimize': True, + 'quality': shared.opts.jpeg_quality, + 'lossless': shared.opts.webp_lossless, + } if shared.opts.image_metadata: debug_save(f'Save exif: {exifinfo}') - save_args['exif'] = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(exifinfo, encoding="unicode") } }) + save_args['exif'] = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: exifinfo_dump } }) elif image_format == 'JXL': if image.mode == 'I;16': image = image.point(lambda p: p * 0.0038910505836576).convert("RGB") elif image.mode not in {"RGB", "RGBA"}: image = image.convert("RGBA") - save_args = { 'optimize': True, 'quality': shared.opts.jpeg_quality, 'lossless': shared.opts.webp_lossless } + save_args = { + 'optimize': True, + 'quality': shared.opts.jpeg_quality, + 'lossless': shared.opts.webp_lossless, + } if shared.opts.image_metadata: debug_save(f'Save exif: {exifinfo}') - save_args['exif'] = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(exifinfo, encoding="unicode") } }) + save_args['exif'] = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: exifinfo_dump } }) else: save_args = { 'quality': shared.opts.jpeg_quality } try: From 75cc035354de0ef01b76a8b69f77b7ba78925507 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Wed, 1 Apr 2026 03:13:12 +0200 Subject: [PATCH 14/16] add Enso to changelog and wiki, add colour grading hints Add Enso entries to UI and API sections of the changelog. Add colour grading parameter hints to locale_en.json. Update wiki submodule with new Enso page and Home link. --- CHANGELOG.md | 14 +++++++++++--- html/locale_en.json | 40 ++++++++++++++++++++-------------------- wiki | 2 +- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8703a9d9..b35666826 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,7 +83,11 @@ Just how big? Some stats: *~530 commits over 880 files* > `set TORCH_COMMAND='torch torchvision --index-url https://download.pytorch.org/whl/cu128` - update installer and support `nunchaku==1.2.1` - **UI** - - legacy panels **T2I** and **I2I** are disabled by default + - **Enso** new React-based UI with WYSIWYG infinite canvas workspace, command palette, and numerous quality of life improvements across the board *(work-in-progress alpha)*. + enable using `--enso` flag, and use on `/enso` endpoint. + **Separate installation of SD.Next recommended** + see wiki page and Enso repo README for details. + - 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 @@ -99,11 +103,15 @@ Just how big? Some stats: *~530 commits over 880 files* - **Themes** add *Vlad-Neomorph* - **Gallery** add option to auto-refresh gallery, thanks @awsr - **Token counters** add per-section display for supported models, thanks @awsr + - **Colour grading** add hints for all the functions - **Docs / Wiki** - updates to to compute sections: *AMD-ROCm, AMD-MIOpen, ZLUDA, OpenVINO, nVidia* - - updates to core sections: *Installation, Python, Schedulers, Launcher, SDNQ, Video* + - updates to core sections: *Installation, Python, Schedulers, Launcher, SDNQ, Video* + - added Enso page - **API** - - **rate limiting**: global for all endpoints, guards against abuse and denial-of-service type of attacks + - new **v2 API** (`/sdapi/v2/`): job-based generation with queue, per-job WebSocket progress, file uploads with TTL, model/network enumeration, and a plethora of other improvements *(work-in-progress)* + for the time being ships with Enso, which must be enabled wih `--enso` flag on startup for v2 API to be available. + - **rate limiting**: global for all endpoints, guards against abuse and denial-of-service type of attacks configurable in *settings -> server settings* - new `/sdapi/v1/upload` endpoint with support for both POST with form-data or PUT using raw-bytes - new `/sdapi/v1/torch` endpoint for torch info (backend, version, etc.) diff --git a/html/locale_en.json b/html/locale_en.json index 6c6c2a662..88a3d6203 100644 --- a/html/locale_en.json +++ b/html/locale_en.json @@ -161,7 +161,7 @@ {"id":"","label":"Batch size","localized":"","hint":"How many image to create in a single batch (increases generation performance at cost of higher VRAM usage)","ui":"txt2img"}, {"id":"","label":"Beta schedule","localized":"","hint":"Defines how beta (noise strength per step) grows. Options:
- default: the model default
- linear: evenly decays noise per step
- scaled: squared version of linear, used only by Stable Diffusion
- cosine: smoother decay, often better results with fewer steps
- sigmoid: sharp transition, experimental","ui":"txt2img"}, {"id":"","label":"Base shift","localized":"","hint":"Minimum shift value for low resolutions when using dynamic shifting.","ui":"txt2img"}, - {"id":"","label":"Brightness","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Brightness","localized":"","hint":"Adjusts overall image brightness.
Positive values lighten the image, negative values darken it.

Applied uniformly across all pixels in linear space.","ui":"txt2img"}, {"id":"","label":"Block","localized":"","hint":"","ui":"script_kohya_hires_fix"}, {"id":"","label":"Block size","localized":"","hint":"","ui":"script_nudenet"}, {"id":"","label":"Banned words","localized":"","hint":"","ui":"script_nudenet"}, @@ -224,7 +224,7 @@ {"id":"change_vae","label":"Change VAE","localized":"","hint":""}, {"id":"change_unet","label":"Change UNet","localized":"","hint":""}, {"id":"change_reference","label":"Change reference","localized":"","hint":""}, - {"id":"","label":"Color Grading","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Color Grading","localized":"","hint":"Post-generation color adjustments, applied per-image after generation and before mask overlay.","ui":"txt2img"}, {"id":"","label":"Control Methods","localized":"","hint":"","ui":"control"}, {"id":"","label":"Control Media","localized":"","hint":"Add input image as separate initialization image for control processing","ui":"control"}, {"id":"","label":"Create Video","localized":"","hint":"","ui":"extras"}, @@ -238,10 +238,10 @@ {"id":"","label":"Client log","localized":"","hint":""}, {"id":"","label":"CLIP Analysis","localized":"","hint":"","ui":"caption"}, {"id":"","label":"Context","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Contrast","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Color temp","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"CLAHE clip","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"CLAHE grid","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Contrast","localized":"","hint":"Adjusts the difference between light and dark areas.
Positive values increase contrast, making darks darker and lights brighter.
Negative values flatten the tonal range toward a more uniform appearance.","ui":"txt2img"}, + {"id":"","label":"Color temp","localized":"","hint":"Shifts color temperature in Kelvin.
Lower values (e.g., 2000K) produce a warm, amber tone. Higher values (e.g., 12000K) produce a cool, bluish tone.

Default 6500K is neutral daylight. Works by scaling R/G/B channels to simulate the target white point.","ui":"txt2img"}, + {"id":"","label":"CLAHE clip","localized":"","hint":"Clip limit for Contrast Limited Adaptive Histogram Equalization.
Higher values allow more local contrast enhancement, which brings out detail in flat regions.

Set to 0 to disable. Typical values are 1.0–3.0. Very high values can introduce noise amplification.","ui":"txt2img"}, + {"id":"","label":"CLAHE grid","localized":"","hint":"Grid size for CLAHE tile regions.
Smaller grids (e.g., 2–4) produce coarser, more global equalization.
Larger grids (e.g., 12–16) enhance finer local detail but may amplify noise.

Default is 8. Only active when CLAHE clip is above 0.","ui":"txt2img"}, {"id":"","label":"Correction mode","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"Crop to portrait","localized":"","hint":"Crop input image to portrait-only before using it as IP adapter input","ui":"txt2img"}, {"id":"","label":"Concept Tokens","localized":"","hint":"","ui":"script_consistory"}, @@ -619,8 +619,8 @@ {"id":"","label":"Guidance scale","localized":"","hint":"Classifier Free Guidance scale: how strongly the image should conform to prompt. Lower values produce more creative results, higher values make it follow the prompt more strictly; recommended values between 5-10","ui":"txt2img"}, {"id":"","label":"Guidance end","localized":"","hint":"Ends the effect of CFG and PAG early: A value of 1 acts as normal, 0.5 stops guidance at 50% of steps","ui":"txt2img"}, {"id":"","label":"Guidance rescale","localized":"","hint":"Rescale guidance to avoid overexposed images at higher guidance values","ui":"txt2img"}, - {"id":"","label":"Gamma","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Grain","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Gamma","localized":"","hint":"Non-linear brightness curve adjustment.
Values below 1.0 brighten midtones and shadows while preserving highlights.
Values above 1.0 darken midtones and shadows.

Default is 1.0 (no change). Unlike brightness, gamma reshapes the tonal curve rather than shifting it uniformly.","ui":"txt2img"}, + {"id":"","label":"Grain","localized":"","hint":"Adds film-like noise to the image.
Higher values produce more visible grain, simulating analog film texture.

Applied as random noise blended into the final image. Set to 0 to disable.","ui":"txt2img"}, {"id":"","label":"Grid margins","localized":"","hint":"","ui":"script_prompt_matrix"}, {"id":"","label":"Grid sections","localized":"","hint":"","ui":"script_regional_prompting"}, {"id":"","label":"Guidance strength","localized":"","hint":"","ui":"script_slg"}, @@ -657,9 +657,9 @@ {"id":"","label":"HiDiffusion","localized":"","hint":"HiDiffusion allows creation of high-resolution images using your standard models without duplicates/distortions and improved performance","ui":"settings_advanced"}, {"id":"","label":"Height","localized":"","hint":"Image height","ui":"txt2img"}, {"id":"","label":"HiRes steps","localized":"","hint":"Number of sampling steps for upscaled picture. If 0, uses same as for original","ui":"txt2img"}, - {"id":"","label":"Hue","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Highlights","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Highlights tint","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Hue","localized":"","hint":"Rotates all colors around the color wheel.
Small values produce subtle color shifts, while higher values cycle through the full spectrum.

Useful for creative color effects or correcting unwanted color casts.","ui":"txt2img"}, + {"id":"","label":"Highlights","localized":"","hint":"Adjusts the brightness of highlight (bright) regions.
Positive values brighten highlights, negative values pull them down.

Operates on the L channel in Lab color space using a luminance-weighted mask, leaving shadows and midtones largely unaffected.","ui":"txt2img"}, + {"id":"","label":"Highlights tint","localized":"","hint":"Color to blend into highlight regions for split toning.
Works together with Shadows tint and Split tone balance to create cinematic color grading looks.

Default white (#ffffff) applies no tint.","ui":"txt2img"}, {"id":"","label":"HDR range","localized":"","hint":"","ui":"script_hdr"}, {"id":"","label":"HQ init latents","localized":"","hint":"","ui":"script_instantir"}, {"id":"","label":"Height after","localized":"","hint":"","ui":"control"}, @@ -782,7 +782,7 @@ {"id":"","label":"Log Display","localized":"","hint":"","ui":"settings_ui"}, {"id":"","label":"List all locally available models","localized":"","hint":"","ui":"models_list_tab"}, {"id":"","label":"Last Generate","localized":"","hint":""}, - {"id":"","label":"LUT","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"LUT","localized":"","hint":"Look-Up Table color grading section.
Upload a .cube LUT file to apply professional color grading presets.

LUTs remap colors according to a predefined 3D color transform, commonly used in film and photography for consistent color looks.","ui":"txt2img"}, {"id":"","label":"low order","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"LSC layer indices","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"LSC fully qualified name","localized":"","hint":"","ui":"txt2img"}, @@ -790,7 +790,7 @@ {"id":"","label":"LSC skip feed-forward blocks","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"LSC skip attention scores","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"LSC dropout rate","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"LUT strength","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"LUT strength","localized":"","hint":"Controls the intensity of the applied LUT.
1.0 applies the LUT at full strength. Values below 1.0 blend toward the original colors, values above 1.0 amplify the effect.

Only active when a .cube LUT file is loaded.","ui":"txt2img"}, {"id":"","label":"Latent brightness","localized":"","hint":"Increase or deacrease brightness directly in latent space during generation","ui":"txt2img"}, {"id":"","label":"Latent sharpen","localized":"","hint":"Increase or decrease sharpness directly in latent space during generation","ui":"txt2img"}, {"id":"","label":"Latent color","localized":"","hint":"Adjust the color balance directly in latent space during generation","ui":"txt2img"}, @@ -888,7 +888,7 @@ {"id":"","label":"Max overlap","localized":"","hint":"Maximum overlap between two detected items before one is discarded","ui":"txt2img"}, {"id":"","label":"Min size","localized":"","hint":"Minimum size of detected object as percentage of overal image","ui":"txt2img"}, {"id":"","label":"Max size","localized":"","hint":"Maximum size of detected object as percentage of overal image","ui":"txt2img"}, - {"id":"","label":"Midtones","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Midtones","localized":"","hint":"Adjusts the brightness of midtone regions.
Positive values brighten midtones, negative values darken them.

Targets pixels near the middle of the luminance range using a bell-shaped mask in Lab space, leaving shadows and highlights largely untouched.","ui":"txt2img"}, {"id":"","label":"Momentum","localized":"","hint":"","ui":"script_apg"}, {"id":"","label":"Mode x-axis","localized":"","hint":"","ui":"script_asymmetric_tiling"}, {"id":"","label":"Mode y-axis","localized":"","hint":"","ui":"script_asymmetric_tiling"}, @@ -1310,11 +1310,11 @@ {"id":"","label":"SEG config","localized":"","hint":"","ui":"txt2img"}, {"id":"","label":"Strength","localized":"","hint":"Denoising strength of during image operation controls how much of original image is allowed to change during generate","ui":"txt2img"}, {"id":"","label":"Sort detections","localized":"","hint":"Sort detected areas by from left to right instead of detection score","ui":"txt2img"}, - {"id":"","label":"Saturation","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Sharpness","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Shadows","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Shadows tint","localized":"","hint":"","ui":"txt2img"}, - {"id":"","label":"Split tone balance","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Saturation","localized":"","hint":"Controls color intensity.
Positive values make colors more vivid, negative values desaturate toward grayscale.

At -1.0 the image becomes fully monochrome.","ui":"txt2img"}, + {"id":"","label":"Sharpness","localized":"","hint":"Enhances edge detail and fine textures.
Higher values produce crisper edges but may amplify noise or artifacts if pushed too far.

Set to 0 to disable. Operates via an unsharp mask kernel.","ui":"txt2img"}, + {"id":"","label":"Shadows","localized":"","hint":"Adjusts the brightness of shadow (dark) regions.
Positive values lift shadows to reveal detail, negative values deepen them.

Operates on the L channel in Lab color space using a luminance-weighted mask, leaving highlights and midtones largely unaffected.","ui":"txt2img"}, + {"id":"","label":"Shadows tint","localized":"","hint":"Color to blend into shadow regions for split toning.
Works together with Highlights tint and Split tone balance to create cinematic color grading looks.

Default black (#000000) applies no tint.","ui":"txt2img"}, + {"id":"","label":"Split tone balance","localized":"","hint":"Controls the crossover point between shadow and highlight tinting.
Values below 0.5 extend the shadow tint into midtones. Values above 0.5 extend the highlight tint into midtones.

Default 0.5 splits evenly at the midpoint.","ui":"txt2img"}, {"id":"","label":"Subject","localized":"","hint":"","ui":"script_consistory"}, {"id":"","label":"Same latent","localized":"","hint":"","ui":"script_consistory"}, {"id":"","label":"Share queries","localized":"","hint":"","ui":"script_consistory"}, @@ -1587,7 +1587,7 @@ {"id":"","label":"Video Output","localized":"","hint":"","ui":"tab_video"}, {"id":"","label":"Variation","localized":"","hint":"Second seed to be mixed with primary seed","ui":"txt2img"}, {"id":"","label":"Variation strength","localized":"","hint":"How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something)","ui":"txt2img"}, - {"id":"","label":"Vignette","localized":"","hint":"","ui":"txt2img"}, + {"id":"","label":"Vignette","localized":"","hint":"Applies radial edge darkening that draws focus toward the center of the image.
Higher values produce a stronger falloff from center to corners.

Set to 0 to disable. Simulates the natural light falloff seen in vintage and cinematic lenses.","ui":"txt2img"}, {"id":"","label":"VAE type","localized":"","hint":"Choose if you want to run full VAE, reduced quality VAE or attempt to use remote VAE service","ui":"txt2img"}, {"id":"","label":"Version","localized":"","hint":"","ui":"script_pulid"}, {"id":"","label":"Video format","localized":"","hint":"Format and codec of output video","ui":"script_video"}, diff --git a/wiki b/wiki index 3dde18b34..d2ecbe713 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 3dde18b34e2cd61c800cdd748ada69cede612296 +Subproject commit d2ecbe713e25e2a8da3e2f7d6794c82b85e8a0fe From 1310264d432b92fb79d9eeb80d2385670c980bd0 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Wed, 1 Apr 2026 10:29:08 +0200 Subject: [PATCH 15/16] regen all localizations Signed-off-by: vladmandic --- CHANGELOG.md | 29 +- TODO.md | 47 +- html/locale_ar.json | 7420 +++++++-------- html/locale_bn.json | 7852 ++++++++-------- html/locale_de.json | 9384 +++++++++---------- html/locale_es.json | 6548 ++++++------- html/locale_fr.json | 8188 +++++++++-------- html/locale_he.json | 7610 +++++++-------- html/locale_hi.json | 7322 ++++++++------- html/locale_hr.json | 6689 +++++++------- html/locale_id.json | 6452 ++++++------- html/locale_it.json | 9692 ++++++++++---------- html/locale_ja.json | 8179 +++++++++-------- html/locale_ko.json | 7302 ++++++++------- html/locale_nb.json | 10476 ++++++++++----------- html/locale_po.json | 8382 ++++++++--------- html/locale_pt.json | 6338 ++++++------- html/locale_qq.json | 8764 +++++++++--------- html/locale_ru.json | 7332 ++++++++------- html/locale_sr.json | 7908 ++++++++-------- html/locale_tb.json | 11194 ++++++++++++----------- html/locale_tlh.json | 9790 ++++++++++---------- html/locale_tr.json | 7082 +++++++------- html/locale_ur.json | 8028 ++++++++-------- html/locale_vi.json | 6766 +++++++------- html/locale_xx.json | 8700 +++++++++--------- html/locale_zh.json | 6890 +++++++------- javascript/script.js | 2 +- modules/caption/deepbooru.py | 1 - modules/caption/gemini.py | 4 +- modules/caption/waifudiffusion.py | 1 - pyproject.toml | 425 +- test/localize.mjs | 5 +- test/{reformat.js => reformat-json.js} | 2 + wiki | 2 +- 35 files changed, 103207 insertions(+), 97599 deletions(-) mode change 100644 => 100755 test/localize.mjs rename test/{reformat.js => reformat-json.js} (98%) mode change 100644 => 100755 diff --git a/CHANGELOG.md b/CHANGELOG.md index b35666826..00e3bef4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,19 @@ # Change Log for SD.Next -## Update for 2026-03-30 +## Update for 2026-04-01 -### Highlights for 2026-03-30 +### Highlights for 2026-04-01 This release brings massive code refactoring to modernize codebase and removal of some obsolete features. Leaner & Faster! And since its a bit quieter period when it comes to new models, notable additions would be : *FireRed-Image-Edit*, *SkyWorks-UniPic-3* and new versions of *Anima-Preview*, *Flux-Klein-KV* image models and *LTX 2.3* video model If you're on Windows platform, we have a brand new [All-in-one Installer & Launcher](https://github.com/vladmandic/sdnext-launcher): simply download [exe or zip](https://github.com/vladmandic/sdnext-launcher/releases) and done! +And we have a new (optional) React-based **UI** [Enso](https://github.com/CalamitousFelicitousness/enso)! + *What else*? Really a lot! -New color grading module, updated localization with new languages and improved translations, new civitai integration module, new finetunes loader, several new upscalers, improvements to LLM/VLM in captioning and prompt enhance, a lot of new control preprocessors, new realtime server info panel, some new UI themes -And major work on API hardening: security, rate limits, secrets handling, new endpoints, etc. +New color grading module, updated localization with new languages and improved translations, new CivitAI integration module, new finetunes loader, several new upscalers, improvements to LLM/VLM in captioning and prompt enhance, a lot of new control preprocessors, new realtime server info panel, some new UI themes +And major work on API hardening: *security, rate limits, secrets handling, new endpoints*, etc. But also many smaller quality-of-life improvements - for full details, see [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) *Note*: Purely due to size of changes, clean install is recommended! @@ -19,7 +21,7 @@ Just how big? Some stats: *~530 commits over 880 files* [ReadMe](https://github.com/vladmandic/automatic/blob/master/README.md) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [WiKi](https://github.com/vladmandic/automatic/wiki) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic) -### Details for 2026-03-30 +### Details for 2026-04-01 - **Models** - [Google Flash 3.1 Image](https://ai.google.dev/gemini-api/docs/models/gemini-3-flash-preview) a.k.a. *Nano Banana 2* @@ -83,10 +85,11 @@ Just how big? Some stats: *~530 commits over 880 files* > `set TORCH_COMMAND='torch torchvision --index-url https://download.pytorch.org/whl/cu128` - update installer and support `nunchaku==1.2.1` - **UI** - - **Enso** new React-based UI with WYSIWYG infinite canvas workspace, command palette, and numerous quality of life improvements across the board *(work-in-progress alpha)*. - enable using `--enso` flag, and use on `/enso` endpoint. - **Separate installation of SD.Next recommended** - see wiki page and Enso repo README for details. + - **Enso** new React-based UI, developed by @CalamitousFelicitousness! + with WYSIWYG infinite canvas workspace, command palette, and numerous quality of life improvements across the board + enable using `--enso` flag and access using `/enso` endpoint (e.g. ) + see [Enso Docs](https://vladmandic.github.io/sdnext-docs/Enso/) and [Enso Home](https://github.com/CalamitousFelicitousness/enso) for details + *note* Enso is work-in-progress and alpha-ready - 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 @@ -109,15 +112,17 @@ Just how big? Some stats: *~530 commits over 880 files* - updates to core sections: *Installation, Python, Schedulers, Launcher, SDNQ, Video* - added Enso page - **API** - - new **v2 API** (`/sdapi/v2/`): job-based generation with queue, per-job WebSocket progress, file uploads with TTL, model/network enumeration, and a plethora of other improvements *(work-in-progress)* - for the time being ships with Enso, which must be enabled wih `--enso` flag on startup for v2 API to be available. + - prototype **v2 API** (`/sdapi/v2/`) + job-based generation with queue, per-job WebSocket progress, file uploads with TTL, model/network enumeration + and a plethora of other improvements *(work-in-progress)* + for the time being ships with Enso, which must be enabled wih `--enso` flag on startup for v2 API to be available - **rate limiting**: global for all endpoints, guards against abuse and denial-of-service type of attacks configurable in *settings -> server settings* - new `/sdapi/v1/upload` endpoint with support for both POST with form-data or PUT using raw-bytes - new `/sdapi/v1/torch` endpoint for torch info (backend, version, etc.) - new `/sdapi/v1/gpu` endpoint for GPU info - new `/sdapi/v1/rembg` endpoint for background removal - - new `/sdadpi/v1/unet` endpoint to list available unets/dits + - new `/sdapi/v1/unet` endpoint to list available unets/dits - use rate limiting for api logging - **Obsoleted** - removed support for additional quantization engines: *BitsAndBytes, TorchAO, Optimum-Quanto, NNCF* diff --git a/TODO.md b/TODO.md index 746ffacdd..99903bb98 100644 --- a/TODO.md +++ b/TODO.md @@ -1,12 +1,5 @@ # TODO -## Release - -- Add notes: **Enso** -- Tips: **Color Grading** -- Regen: **Localization** -- Rebuild: **Launcher** with `master` - ## Internal - Feature: implement `unload_auxiliary_models` @@ -131,21 +124,25 @@ TODO: Investigate which models are diffusers-compatible and prioritize! > npm run todo -- fc: autodetect distilled based on model -- fc: autodetect tensor format based on model -- hypertile: vae breaks when using non-standard sizes -- install: switch to pytorch source when it becomes available -- loader: load receipe -- loader: save receipe -- lora: add other quantization types -- lora: add t5 key support for sd35/f1 -- lora: maybe force imediate quantization -- model load: force-reloading entire model as loading transformers only leads to massive memory usage -- model load: implement model in-memory caching -- modernui: monkey-patch for missing tabs.select event -- modules/lora/lora_extract.py:188:9: W0511: TODO: lora: support pre-quantized flux -- modules/modular_guiders.py:65:58: W0511: TODO: guiders -- processing: remove duplicate mask params -- resize image: enable full VAE mode for resize-latent - -modules/sd_samplers_diffusers.py:353:31: W0511: TODO enso-required (fixme) +```code +installer.py:TODO rocm: switch to pytorch source when it becomes available +modules/control/run.py:TODO modernui: monkey-patch for missing tabs.select event +modules/history.py:TODO: apply metadata, preview, load/save +modules/image/resize.py:TODO resize image: enable full VAE mode for resize-latent +modules/lora/lora_apply.py:TODO lora: add other quantization types +modules/lora/lora_apply.py:TODO lora: maybe force imediate quantization +modules/lora/lora_extract.py:TODO: lora: support pre-quantized flux +modules/lora/lora_load.py:TODO lora: add t5 key support for sd35/f1 +modules/masking.py:TODO: additional masking algorithms +modules/modular_guiders.py:TODO: guiders +modules/processing_class.py:TODO processing: remove duplicate mask params +modules/sd_hijack_hypertile.py:TODO hypertile: vae breaks when using non-standard sizes +modules/sd_models.py:TODO model load: implement model in-memory caching +modules/sd_samplers_diffusers.py:TODO enso-required +modules/sd_unet.py:TODO model load: force-reloading entire model as loading transformers only leads to massive memory usage +modules/transformer_cache.py:TODO fc: autodetect distilled based on model +modules/transformer_cache.py:TODO fc: autodetect tensor format based on model +modules/ui_models_load.py:TODO loader: load receipe +modules/ui_models_load.py:TODO loader: save receipe +modules/video_models/video_save.py:TODO audio set time-base +``` diff --git a/html/locale_ar.json b/html/locale_ar.json index 25c1667a3..ab13d6d46 100644 --- a/html/locale_ar.json +++ b/html/locale_ar.json @@ -1,74 +1,74 @@ { "0": [ { - "id": 0, + "id": 1, "label": "1st Stage", "localized": "المرحلة الأولى", "reload": "n/a", - "hint": "المرحلة الأولى من عملية التوليد أو المعالجة." + "hint": "تعريف المرحلة الأولى للعملية" }, { - "id": 0, + "id": 2, "label": "2nd Stage", "localized": "المرحلة الثانية", "reload": "n/a", - "hint": "المرحلة الثانية من عملية التوليد أو المعالجة." + "hint": "تعريف المرحلة الثانية للعملية" }, { - "id": 0, + "id": 3, "label": "2nd Scale", - "localized": "المقياس الثاني", + "localized": "مقياس المرحلة الثانية", "reload": "n/a", - "hint": "قيمة المقياس (Scale) المستخدمة في المرحلة الثانية لضبط قوة التوجيه." + "hint": "تحديد مقياس المرحلة الثانية" }, { - "id": 0, + "id": 4, "label": "2nd Restart step", - "localized": "خطوة إعادة التشغيل الثانية", + "localized": "خطوة إعادة البدء الثانية", "reload": "n/a", - "hint": "الخطوة المحددة لإعادة تشغيل عملية أخذ العينات في المرحلة الثانية." + "hint": "تعيين خطوة إعادة البدء للمرحلة الثانية" }, { - "id": 0, + "id": 5, "label": "3rd Stage", "localized": "المرحلة الثالثة", "reload": "n/a", - "hint": "المرحلة الثالثة من عملية التوليد أو المعالجة." + "hint": "تعريف المرحلة الثالثة للعملية" }, { - "id": 0, + "id": 6, "label": "3rd Scale", - "localized": "المقياس الثالث", + "localized": "مقياس المرحلة الثالثة", "reload": "n/a", - "hint": "قيمة المقياس (Scale) المستخدمة في المرحلة الثالثة لضبط قوة التوجيه." + "hint": "تحديد مقياس المرحلة الثالثة" }, { - "id": 0, + "id": 7, "label": "3rd Restart step", - "localized": "خطوة إعادة التشغيل الثالثة", + "localized": "خطوة إعادة البدء الثالثة", "reload": "n/a", - "hint": "الخطوة المحددة لإعادة تشغيل عملية أخذ العينات في المرحلة الثالثة." + "hint": "تعيين خطوة إعادة البدء للمرحلة الثالثة" }, { - "id": 0, + "id": 8, "label": "4th Stage", "localized": "المرحلة الرابعة", "reload": "n/a", - "hint": "المرحلة الرابعة من عملية التوليد أو المعالجة." + "hint": "تعريف المرحلة الرابعة للعملية" }, { - "id": 0, + "id": 9, "label": "4th Scale", - "localized": "المقياس الرابع", + "localized": "مقياس المرحلة الرابعة", "reload": "n/a", - "hint": "قيمة المقياس (Scale) المستخدمة في المرحلة الرابعة لضبط قوة التوجيه." + "hint": "تحديد مقياس المرحلة الرابعة" }, { - "id": 0, + "id": 10, "label": "4th Restart step", - "localized": "خطوة إعادة التشغيل الرابعة", + "localized": "خطوة إعادة البدء الرابعة", "reload": "n/a", - "hint": "الخطوة المحددة لإعادة تشغيل عملية أخذ العينات في المرحلة الرابعة." + "hint": "تعيين خطوة إعادة البدء للمرحلة الرابعة" } ], "_": [ @@ -80,270 +80,298 @@ "hint": "تحديث" }, { - "id": 0, + "id": 1, "label": "↶", "localized": "↶", "reload": "txt2img_styles_apply", - "hint": "تطبيق النمط المختار على الوصف (Prompt)" + "hint": "تطبيق النمط المختار على النص (Prompt)" }, { - "id": 0, + "id": 2, "label": "↷", "localized": "↷", "reload": "txt2img_styles_save", - "hint": "حفظ الوصف الحالي كنمط" + "hint": "حفظ النص الحالي كنمط" }, { - "id": 0, + "id": 3, "label": "⇅", "localized": "⇅", "reload": "txt2img_res_btn_swap", "hint": "تبديل القيم" }, { - "id": 0, + "id": 4, "label": "🎲️", "localized": "🎲️", "reload": "txt2img_seed_random", "hint": "استخدام بذرة (Seed) عشوائية" }, { - "id": 0, + "id": 5, "label": "⬅️", "localized": "⬅️", "reload": "txt2img_seed_reuse", - "hint": "إعادة استخدام البذرة من آخر صورة تم إنشاؤها" + "hint": "إعادة استخدام البذرة (Seed) من آخر صورة تم إنشاؤها" }, { - "id": 0, + "id": 6, "label": "🕮", "localized": "🕮", "reload": "txt2img_guider_docs", - "hint": "حفظ إعدادات آخر صورة تم إنشاؤها كقالب نمط" + "hint": "حفظ المعايير من آخر صورة تم إنشاؤها كنموذج تنسيق" }, { - "id": 0, + "id": 7, "label": "📐", "localized": "📐", "reload": "txt2img_resize_detect_size", - "hint": "قياس الحجم من الصورة الموجودة" + "hint": "قياس الحجم من صورة موجودة" }, { - "id": 0, + "id": 8, "label": "☲", "localized": "☲", "reload": "txt2img_yolo_models_list", "hint": "تغيير نوع العرض" }, { - "id": 0, + "id": 9, "label": "⊜", "localized": "⊜", "reload": "xyz_grid_x_list", "hint": "ملء" }, { - "id": 0, + "id": 10, "label": "", "localized": "", "reload": "txt2img_caption_output", - "hint": "تسمية الصورة (Caption)" + "hint": "وصف الصورة" }, { - "id": 0, + "id": 11, "label": "⁜", "localized": "⁜", "reload": "txt2img_image_fit", "hint": "تبديل طريقة ملاءمة الصورة" }, { - "id": 0, + "id": 12, "label": "➠ Control", - "localized": "تحكم ➠", + "localized": "➠ تحكم", "reload": "", - "hint": "نقل الصورة إلى واجهة التحكم (ControlNet)" + "hint": "نقل الصورة إلى واجهة التحكم" }, { - "id": 0, + "id": 13, "label": "➠ Text", - "localized": "نص ➠", + "localized": "➠ نص", "reload": "", "hint": "نقل الصورة إلى واجهة النص" }, { - "id": 0, + "id": 14, "label": "➠ Image", - "localized": "صورة ➠", + "localized": "➠ صورة", "reload": "", - "hint": "نقل الصورة إلى واجهة صورة-إلى-صورة" + "hint": "نقل الصورة إلى واجهة الصورة" }, { - "id": 0, + "id": 15, "label": "➠ Process", - "localized": "معالجة ➠", + "localized": "➠ معالجة", "reload": "", "hint": "نقل الصورة إلى واجهة المعالجة" }, { - "id": 0, + "id": 16, "label": "➠ Caption", - "localized": "وصف ➠", + "localized": "➠ وصف", "reload": "", - "hint": "نقل الصورة إلى واجهة الوصف (Caption)" + "hint": "نقل الصورة إلى واجهة الوصف" }, { - "id": 0, + "id": 17, "label": "➠ Sketch", - "localized": "رسم ➠", + "localized": "➠ رسم", "reload": "", "hint": "نقل الصورة إلى واجهة الرسم" }, { - "id": 0, + "id": 18, "label": "➠ Inpaint", - "localized": "رسم داخلي ➠", + "localized": "➠ ملء", "reload": "", - "hint": "نقل الصورة إلى واجهة الرسم الداخلي (Inpaint)" + "hint": "نقل الصورة إلى واجهة الملء (Inpaint)" }, { - "id": 0, + "id": 19, "label": "➠ Composite", - "localized": "تركيب ➠", + "localized": "➠ تركيب", "reload": "", - "hint": "نقل الصورة إلى واجهة الرسم الداخلي المركب" + "hint": "نقل الصورة إلى واجهة رسم الملء" }, { - "id": 0, + "id": 20, "label": "⬆️", "localized": "⬆️", "reload": "controlnet_unit-0-upload", "hint": "رفع صورة" }, { - "id": 0, + "id": 21, "label": "🔄", "localized": "🔄", "reload": "controlnet_unit-0-reset", - "hint": "إعادة تعيين القيم" + "hint": "إعادة ضبط القيم" }, { - "id": 0, + "id": 22, "label": "🖼️", "localized": "🖼️", "reload": "controlnet_unit-0-preview", - "hint": "إظهار المعاينة" + "hint": "عرض المعاينة" }, { - "id": 0, + "id": 23, "label": "↺", "localized": "↺", "reload": "video_model_load", "hint": "تطبيق الاختيار فوراً" }, { - "id": 0, + "id": 24, "label": "", "localized": "", - "reload": "component-5772", + "reload": "component-5878", "hint": "ترتيب حسب الاسم، تصاعدي" }, { - "id": 0, + "id": 25, "label": "", "localized": "", - "reload": "component-5773", + "reload": "component-5879", "hint": "ترتيب حسب الاسم، تنازلي" }, { - "id": 0, + "id": 26, "label": "", "localized": "", - "reload": "component-5774", + "reload": "component-5880", "hint": "ترتيب حسب الحجم، تصاعدي" }, { - "id": 0, + "id": 27, "label": "", "localized": "", - "reload": "component-5775", + "reload": "component-5881", "hint": "ترتيب حسب الحجم، تنازلي" }, { - "id": 0, + "id": 28, "label": "", "localized": "", - "reload": "component-5776", + "reload": "component-5882", "hint": "ترتيب حسب الدقة، تصاعدي" }, { - "id": 0, + "id": 29, "label": "", "localized": "", - "reload": "component-5777", + "reload": "component-5883", "hint": "ترتيب حسب الدقة، تنازلي" }, { - "id": 0, + "id": 30, "label": "", "localized": "", - "reload": "component-5778", + "reload": "component-5884", "hint": "ترتيب حسب الوقت، تصاعدي" }, { - "id": 0, + "id": 31, "label": "", "localized": "", - "reload": "component-5779", + "reload": "component-5885", "hint": "ترتيب حسب الوقت، تنازلي" }, { - "id": 0, + "id": 32, "label": "⊗", "localized": "⊗", "reload": "quicksettings_clear", - "hint": "إعادة تعيين القيم" + "hint": "إعادة ضبط القيم" }, { - "id": 0, + "id": 33, "label": "🔍", "localized": "🔍", "reload": "docs_btn_search", "hint": "بحث" }, { - "id": 0, + "id": 34, "label": "⇨", "localized": "⇨", - "reload": "component-5567", + "reload": "component-5667", "hint": "تطبيق الإعداد المسبق" }, { - "id": 0, + "id": 35, "label": "※", "localized": "※", "reload": "txt2img_extra_model", - "hint": "تحميل النموذج كنموذج تكرير (Refiner) عند اختياره، وإلا يتم تحميله كنموذج أساسي" + "hint": "تحميل النموذج كنموذج تحسين (Refiner) عند اختياره، وإلا يتم تحميله كنموذج أساسي" }, { - "id": 0, + "id": 36, "label": "🔎︎", "localized": "🔎︎", "reload": "txt2img_extra_scan", "hint": "فحص CivitAI للبحث عن البيانات الوصفية والمعاينات المفقودة" }, { - "id": 0, + "id": 37, "label": "⇕", "localized": "⇕", "reload": "txt2img_extra_sort", - "hint": "ترتيب حسب: الاسم، الحجم، الوقت" + "hint": "ترتيب حسب: الاسم تصاعدي/تنازلي، الحجم الأكبر/الأصغر، الوقت الأحدث/الأقدم" }, { - "id": 0, + "id": 38, "label": "✕", "localized": "✕", "reload": "txt2img_extra_close", "hint": "إغلاق" + }, + { + "id": 39, + "label": "_Guidance scale", + "localized": "مقياس التوجيه", + "reload": "", + "hint": "مقياس التوجيه" + }, + { + "id": 40, + "label": "_Guidance rescale", + "localized": "إعادة قياس التوجيه", + "reload": "", + "hint": "إعادة قياس التوجيه" + }, + { + "id": 41, + "label": "_Guidance start", + "localized": "بداية التوجيه", + "reload": "", + "hint": "بداية التوجيه" + }, + { + "id": 42, + "label": "_Guidance stop", + "localized": "نهاية التوجيه", + "reload": "", + "hint": "نهاية التوجيه" } ], "a": [ @@ -352,19 +380,19 @@ "label": "Advanced", "localized": "متقدم", "reload": "", - "hint": "الإعدادات المتقدمة المستخدمة لتشغيل توليد الصور" + "hint": "إعدادات متقدمة تستخدم لتشغيل توليد الصور" }, { "id": 0, "label": "Adapters", - "localized": "المهايئات (Adapters)", + "localized": "المكيفات (Adapters)", "reload": "", - "hint": "الإعدادات المتعلقة بمهايئات IP (IP Adapters)" + "hint": "إعدادات متعلقة بـ IP Adapters" }, { "id": 0, "label": "Apply to model", - "localized": "التطبيق على النموذج", + "localized": "تطبيق على النموذج", "reload": "", "hint": "" }, @@ -380,7 +408,7 @@ "label": "Apply changes", "localized": "تطبيق التغييرات", "reload": "", - "hint": "تطبيق كافة التغييرات وإعادة تشغيل الخادم" + "hint": "تطبيق جميع التغييرات وإعادة تشغيل الخادم" }, { "id": 0, @@ -403,17 +431,10 @@ "reload": "", "hint": "" }, - { - "id": 0, - "label": "artist", - "localized": "فنان", - "reload": "", - "hint": "" - }, { "id": 0, "label": "Alpha", - "localized": "ألفا (Alpha)", + "localized": "ألفا", "reload": "", "hint": "" }, @@ -441,21 +462,21 @@ { "id": 0, "label": "Adjust start", - "localized": "تعديل البداية", + "localized": "ضبط البداية", "reload": "", - "hint": "خطوة البداية عند حدوث تعديل سيجما (sigma adjust)" + "hint": "خطوة البداية عند حدوث ضبط سيجما" }, { "id": 0, "label": "Adjust end", - "localized": "تعديل النهاية", + "localized": "ضبط النهاية", "reload": "", - "hint": "خطوة النهاية عند حدوث تعديل سيجما (sigma adjust)" + "hint": "خطوة النهاية عند حدوث ضبط سيجما" }, { "id": 0, "label": "AutoGuidance dropout", - "localized": "إسقاط التوجيه التلقائي", + "localized": "إسقاط التوجيه التلقائي (AutoGuidance dropout)", "reload": "", "hint": "" }, @@ -490,49 +511,56 @@ { "id": 0, "label": "Attention guidance", - "localized": "توجيه الانتباه (Attention guidance)", + "localized": "توجيه الانتباه", "reload": "", - "hint": "مقياس CFG المستخدم مع PAG: توجيه الانتباه المضطرب" + "hint": "مقياس CFG المستخدم مع PAG: توجيه الانتباه المضطرب (Perturbed-Attention Guidance)" }, { "id": 0, "label": "Adaptive scaling", - "localized": "القياس التكيفي", + "localized": "التحجيم التكيفي", "reload": "", "hint": "معدل تكيفي لمقياس توجيه الانتباه" }, { "id": 0, - "label": "Active IP adapters", - "localized": "مهايئات IP النشطة", + "label": "Apply to hires", + "localized": "تطبيق على الدقة العالية (Hires)", "reload": "", - "hint": "عدد مهايئات IP النشطة" + "hint": "" + }, + { + "id": 0, + "label": "Active IP adapters", + "localized": "محولات IP النشطة", + "reload": "", + "hint": "عدد محولات IP النشطة" }, { "id": 0, "label": "Adapter", - "localized": "مهايئ", + "localized": "المحول (Adapter)", "reload": "", - "hint": "نموذج مهايئ IP" + "hint": "نموذج محول IP" }, { "id": 0, "label": "Anchor settings", - "localized": "إعدادات المرساة", + "localized": "إعدادات الربط (Anchor)", "reload": "", "hint": "" }, { "id": 0, "label": "Alpha preset", - "localized": "مسبق ضبط ألفا", + "localized": "إعداد ألفا المسبق", "reload": "", "hint": "" }, { "id": 0, "label": "Append heatmaps to results", - "localized": "إلحاق الخرائط الحرارية بالنتائج", + "localized": "إلحاق خرائط التمثيل الحراري بالنتائج", "reload": "", "hint": "" }, @@ -543,13 +571,6 @@ "reload": "", "hint": "" }, - { - "id": 0, - "label": "Amplify LUT", - "localized": "تضخيم LUT", - "reload": "", - "hint": "" - }, { "id": 0, "label": "Add time info", @@ -567,7 +588,7 @@ { "id": 0, "label": "Add metadata", - "localized": "إضافة البيانات الوصفية", + "localized": "إضافة بيانات وصفية", "reload": "", "hint": "" }, @@ -588,37 +609,37 @@ { "id": 0, "label": "Apply to prompt", - "localized": "تطبيق على المطالبة", + "localized": "تطبيق على النص الوصفي (Prompt)", "reload": "", - "hint": "نسخ النتيجة المحسنة تلقائيًا إلى مربع إدخال المطالبة" + "hint": "نسخ النتيجة المحسنة تلقائيًا إلى مربع إدخال النص الوصفي" }, { "id": 0, "label": "Auto enhance", "localized": "تحسين تلقائي", "reload": "", - "hint": "تحسين المطالبة تلقائيًا قبل كل عملية توليد للصور" + "hint": "تحسين النص الوصفي تلقائيًا قبل كل توليد للصورة" }, { "id": 0, "label": "ACI: Color to Mask", - "localized": "ACI: اللون إلى قناع", + "localized": "ACI: اللون للقناع", "reload": "", - "hint": "اختر اللون الذي تريد إخفاءه وترميمه. انقر على اللون في الصورة لتحديده تلقائيًا.
ينصح باستخدام صور مثل الشاشات الخضراء للحصول على نتائج دقيقة." + "hint": "اختر اللون الذي تريد إخفاءه والطلاء فوقه. انقر على اللون في الصورة لتحديده تلقائيًا.
يُنصح باستخدام صور مثل الشاشات الخضراء للحصول على نتائج دقيقة." }, { "id": 0, "label": "ACI: Color tolerance", - "localized": "ACI: التفاوت اللوني", + "localized": "ACI: تفاوت اللون", "reload": "", - "hint": "اضبط التفاوت لتضمين ألوان مماثلة في القناع. القيم المنخفضة = قناع للألوان المتشابهة جدًا فقط. القيم العالية = قناع لنطاق أوسع من الألوان المماثلة." + "hint": "اضبط التفاوت ليشمل ألوانًا مشابهة في القناع. قيم أقل = قناع للألوان المتشابهة جدًا فقط. قيم أعلى = قناع لنطاق أوسع من الألوان المتشابهة." }, { "id": 0, "label": "ACI: Denoising strength", "localized": "ACI: قوة إزالة الضجيج", "reload": "", - "hint": "قم بتغيير قوة إزالة الضجيج لتحقيق كمية الترميم (inpaint) المطلوبة." + "hint": "قم بتغيير قوة إزالة الضجيج لتحقيق كمية الطلاء المطلوبة." }, { "id": 0, @@ -632,19 +653,19 @@ "label": "ACI: Mask erode", "localized": "ACI: تآكل القناع", "reload": "", - "hint": "اضبط الهوامش لتطبيق إزاحة داخلية على القناع. (القيمة الموصى بها = 2 لإزالة البقايا عند الحواف)" + "hint": "اضبط الحشوة لتطبيق إزاحة داخلية على القناع. (القيمة الموصى بها = 2 لإزالة البقايا عند الحواف)" }, { "id": 0, "label": "ACI: Mask blur", "localized": "ACI: تمويه القناع", "reload": "", - "hint": "اضبط التمويه لتطبيق انتقال سلس بين الصورة ومنطقة الترميم. (القيمة الموصى بها = 0 للحصول على حدة)" + "hint": "اضبط التمويه لتطبيق انتقال سلس بين الصورة والمنطقة المطلية. (القيمة الموصى بها = 0 للحدة)" }, { "id": 0, "label": "Adaptive restore", - "localized": "استعادة تكيفية", + "localized": "الاستعادة التكيفية", "reload": "", "hint": "" }, @@ -658,7 +679,7 @@ { "id": 0, "label": "Auto min score", - "localized": "أدنى درجة تلقائية", + "localized": "الحد الأدنى التلقائي للنتيجة", "reload": "", "hint": "" }, @@ -686,7 +707,7 @@ { "id": 0, "label": "Attention", - "localized": "الانتباه (Attention)", + "localized": "انتباه", "reload": "", "hint": "" }, @@ -707,23 +728,23 @@ { "id": 0, "label": "Apply filter", - "localized": "تطبيق الفلتر", + "localized": "تطبيق مرشح", "reload": "", "hint": "" }, { "id": 0, "label": "Alpha matting", - "localized": "استخراج ألفا (Alpha matting)", + "localized": "تخريج ألفا (Alpha matting)", "reload": "", "hint": "" }, { "id": 0, "label": "Append Caption Files", - "localized": "إلحاق ملفات التعليقات الوصفية", + "localized": "إلحاق ملفات التعليق", "reload": "", - "hint": "الإلحاق بملفات التعليقات الوصفية الموجودة بدلاً من استبدالها.
مفيد لإضافة أوصاف أو وسوم إضافية للصور التي تحتوي بالفعل على تعليقات." + "hint": "الإلحاق بملفات التعليق الموجودة بدلاً من استبدالها.
مفيد لإضافة أوصاف أو وسوم إضافية للصور التي تحتوي بالفعل على تعليقات." }, { "id": 0, @@ -735,7 +756,7 @@ { "id": 0, "label": "Autocast", - "localized": "بث تلقائي (Autocast)", + "localized": "التحويل التلقائي للأنواع (Autocast)", "reload": "", "hint": "تحديد الدقة تلقائيًا أثناء وقت التشغيل" }, @@ -746,6 +767,27 @@ "reload": "", "hint": "" }, + { + "id": 0, + "label": "Automatic server status monitor rate", + "localized": "معدل مراقبة حالة الخادم التلقائي", + "reload": "", + "hint": "" + }, + { + "id": 0, + "label": "Automatic server memory monitor rate", + "localized": "معدل مراقبة ذاكرة الخادم التلقائي", + "reload": "", + "hint": "" + }, + { + "id": 0, + "label": "API base rate limit rate", + "localized": "معدل حد السعر الأساسي للـ API", + "reload": "", + "hint": "" + }, { "id": 0, "label": "accuracy", @@ -756,7 +798,7 @@ { "id": 0, "label": "atiadlxx (AMD only)", - "localized": "atiadlxx (AMD فقط)", + "localized": "atiadlxx (لـ AMD فقط)", "reload": "", "hint": "" }, @@ -784,7 +826,7 @@ { "id": 0, "label": "Autolaunch browser upon startup", - "localized": "تشغيل المتصفح تلقائيًا عند بدء التشغيل", + "localized": "تشغيل المتصفح تلقائيًا عند البدء", "reload": "", "hint": "" }, @@ -800,7 +842,7 @@ "label": "Approximate", "localized": "تقريبي", "reload": "", - "hint": "تقريب عصبي رخيص. سريع جدًا مقارنة بـ VAE، ولكنه ينتج صورًا بدقة أفقية/رأسية أصغر بـ 4 مرات وجودة أقل" + "hint": "تقريب شبكة عصبية رخيص. سريع جدًا مقارنة بـ VAE، لكنه ينتج صورًا بدقة أفقية/رأسية أصغر بـ 4 مرات وجودة أقل" }, { "id": 0, @@ -840,42 +882,42 @@ { "id": 0, "label": "Auto-convert SD15 embeddings to SDXL", - "localized": "تحويل تضمينات SD15 إلى SDXL تلقائيًا", + "localized": "التحويل التلقائي لتضمينات SD15 إلى SDXL", "reload": "", "hint": "" }, { "id": 0, "label": "alias", - "localized": "اسم مستعار", + "localized": "اسم مستعار (alias)", "reload": "", "hint": "" }, { "id": 0, "label": "Attention query chunk size", - "localized": "حجم كتلة استعلام الانتباه", + "localized": "حجم مقطع استعلام الانتباه", "reload": "", "hint": "" }, { "id": 0, "label": "Attention kv chunk size", - "localized": "حجم كتلة kv للانتباه", + "localized": "حجم مقطع KV للانتباه", "reload": "", "hint": "" }, { "id": 0, "label": "Attention chunking threshold", - "localized": "عتبة تقسيم الانتباه إلى كتل", + "localized": "عتبة تقطيع الانتباه", "reload": "", "hint": "" }, { "id": 0, "label": "Attempt VAE roll back for NaN values", - "localized": "محاولة استعادة VAE لقيم NaN", + "localized": "محاولة التراجع عن VAE لقيم NaN", "reload": "", "hint": "يتطلب Torch 2.1 وتمكين فحص NaN" }, @@ -889,7 +931,7 @@ { "id": 0, "label": "Add LoRA to prompt", - "localized": "إضافة LoRA إلى المطالبة", + "localized": "إضافة LoRA إلى النص الوصفي", "reload": "", "hint": "" }, @@ -903,7 +945,7 @@ { "id": 0, "label": "ALPHA Block Weight Preset", - "localized": "مسبق ضبط وزن كتلة ألفا", + "localized": "إعداد مسبق لوزن كتلة ألفا", "reload": "", "hint": "" }, @@ -924,63 +966,42 @@ { "id": 0, "label": "Advanced guidance params", - "localized": "معلمات التوجيه المتقدمة", + "localized": "معاملات التوجيه المتقدمة", "reload": "", "hint": "" }, { "id": 0, "label": "Adapter 1", - "localized": "المهايئ 1", + "localized": "المحول 1", "reload": "", "hint": "" }, { "id": 0, "label": "Adapter 2", - "localized": "المهايئ 2", + "localized": "المحول 2", "reload": "", "hint": "" }, { "id": 0, "label": "Adapter 3", - "localized": "المهايئ 3", + "localized": "المحول 3", "reload": "", "hint": "" }, { "id": 0, "label": "Adapter 4", - "localized": "المهايئ 4", + "localized": "المحول 4", "reload": "", "hint": "" }, { "id": 0, "label": "Audio", - "localized": "الصوت", - "reload": "", - "hint": "" - }, - { - "id": 0, - "label": "Advanced Options", - "localized": "خيارات متقدمة", - "reload": "", - "hint": "" - }, - { - "id": 0, - "label": "Advanced Options", - "localized": "خيارات متقدمة", - "reload": "", - "hint": "" - }, - { - "id": 0, - "label": "Advanced Options", - "localized": "خيارات متقدمة", + "localized": "صوت", "reload": "", "hint": "" } @@ -991,311 +1012,325 @@ "label": "Batch", "localized": "دفعة", "reload": "", - "hint": "إعدادات معالجة الدفعات" + "hint": "إعدادات المعالجة بالدفعة" }, { - "id": 1, - "label": "Batch Caption", - "localized": "تعليق الدفعة", + "id": 0, + "label": "btn_vlm_caption_batch", + "localized": "btn_vlm_caption_batch", "reload": "", "hint": "" }, { - "id": 2, - "label": "Batch Tag", - "localized": "وسم الدفعة", + "id": 0, + "label": "btn_wd_tag_batch", + "localized": "btn_wd_tag_batch", "reload": "", "hint": "" }, { - "id": 3, + "id": 0, "label": "Benchmark", - "localized": "قياس الأداء", + "localized": "اختبار الأداء", "reload": "", - "hint": "تشغيل اختبارات قياس الأداء" + "hint": "تشغيل اختبارات الأداء" }, { - "id": 4, + "id": 0, "label": "Backend Settings", - "localized": "إعدادات الخلفية البرمجية", + "localized": "إعدادات المحرك الخلفي", "reload": "", - "hint": "الإعدادات المتعلقة ببيئات الحوسبة: torch و onnx و olive" + "hint": "الإعدادات المتعلقة بمحركات الحوسبة: torch و onnx و olive" }, { - "id": 5, - "label": "body", - "localized": "الجسم", - "reload": "", - "hint": "" - }, - { - "id": 6, + "id": 0, "label": "Beta", - "localized": "بيتا", + "localized": "بيتا (تجريبي)", "reload": "", "hint": "" }, { - "id": 7, + "id": 0, "label": "Balanced Offload", "localized": "تفريغ متوازن", "reload": "", "hint": "" }, { - "id": 8, + "id": 0, "label": "BitsAndBytes", "localized": "BitsAndBytes", "reload": "", "hint": "" }, { - "id": 9, + "id": 0, "label": "Batch count", "localized": "عدد الدفعات", "reload": "", - "hint": "كمية دفعات الصور المراد إنشاؤها (ليس له تأثير على أداء التوليد أو استهلاك ذاكرة الرام للفيديو VRAM)" + "hint": "كم عدد دفعات الصور المراد إنشاؤها (لا يؤثر على أداء الإنشاء أو استهلاك ذاكرة الفيديو VRAM)" }, { - "id": 10, + "id": 0, "label": "Batch size", "localized": "حجم الدفعة", "reload": "", - "hint": "عدد الصور المراد إنشاؤها في دفعة واحدة (يزيد من أداء التوليد على حساب استهلاك أعلى لذاكرة الرام للفيديو VRAM)" + "hint": "كم عدد الصور التي يتم إنشاؤها في دفعة واحدة (يزيد من أداء الإنشاء على حساب زيادة استهلاك ذاكرة الفيديو VRAM)" }, { - "id": 11, + "id": 0, "label": "Beta schedule", - "localized": "جدولة بيتا", + "localized": "جدول بيتا", "reload": "", - "hint": "يحدد كيفية نمو بيتا (قوة الضجيج لكل خطوة). الخيارات:
- افتراضي: الافتراضي للنموذج
- خطي (linear): يقلل الضجيج بالتساوي لكل خطوة
- متدرج (scaled): نسخة مربعة من الخطي، تستخدم فقط في Stable Diffusion
- جيب التمام (cosine): انخفاض أكثر سلاسة، يعطي نتائج أفضل بخطوات أقل غالباً
- سيني (sigmoid): انتقال حاد، تجريبي" + "hint": "يحدد كيفية نمو بيتا (قوة الضوضاء لكل خطوة). الخيارات:\n- default: الإعداد الافتراضي للنموذج\n- linear: تلاشي الضوضاء بانتظام لكل خطوة\n- scaled: نسخة مربعة من الخطية، تستخدم فقط بواسطة Stable Diffusion\n- cosine: تلاشي أكثر سلاسة، غالباً ما يعطي نتائج أفضل مع خطوات أقل\n- sigmoid: انتقال حاد، تجريبي" }, { - "id": 12, + "id": 0, "label": "Base shift", - "localized": "الإزاحة الأساسية", + "localized": "إزاحة القاعدة", "reload": "", "hint": "قيمة الإزاحة الدنيا للدقات المنخفضة عند استخدام الإزاحة الديناميكية." }, { - "id": 13, + "id": 0, "label": "Brightness", "localized": "السطوع", "reload": "", - "hint": "" + "hint": "يضبط السطوع العام للصورة.\nالقيم الموجبة تفتح الصورة، والقيم السالبة تغمقها.\n\nيطبق بشكل موحد عبر جميع البكسلات في الفضاء الخطي." }, { - "id": 14, + "id": 0, "label": "Block", "localized": "كتلة", "reload": "", "hint": "" }, { - "id": 15, + "id": 0, "label": "Block size", "localized": "حجم الكتلة", "reload": "", "hint": "" }, { - "id": 16, + "id": 0, "label": "Banned words", "localized": "الكلمات المحظورة", "reload": "", "hint": "" }, { - "id": 17, + "id": 0, "label": "Blur", "localized": "تمويه", "reload": "", "hint": "" }, { - "id": 18, + "id": 0, "label": "Batch input directory", - "localized": "مجلد مدخلات الدفعة", + "localized": "دليل إدخال الدفعة", "reload": "", "hint": "" }, { - "id": 19, + "id": 0, "label": "Batch output directory", - "localized": "مجلد مخرجات الدفعة", + "localized": "دليل إخراج الدفعة", "reload": "", "hint": "" }, { - "id": 20, + "id": 0, "label": "Batch mask directory", - "localized": "مجلد أقنعة الدفعة", + "localized": "دليل قناع الدفعة", "reload": "", "hint": "" }, { - "id": 21, + "id": 0, "label": "Background threshold", "localized": "عتبة الخلفية", "reload": "", "hint": "" }, { - "id": 22, + "id": 0, + "label": "Body", + "localized": "الجسم", + "reload": "", + "hint": "" + }, + { + "id": 0, "label": "Boost", "localized": "تعزيز", "reload": "", "hint": "" }, { - "id": 23, + "id": 0, "label": "Base", - "localized": "الأساس", + "localized": "قاعدة", "reload": "", - "hint": "الإعدادات الأساسية المستخدمة لتشغيل توليد الصور" + "hint": "إعدادات أساسية تستخدم لتشغيل عملية إنشاء الصور" }, { - "id": 24, + "id": 0, "label": "Blend strength", - "localized": "قوة الدمج", + "localized": "قوة المزج", "reload": "", "hint": "" }, { - "id": 25, + "id": 0, "label": "Base model", "localized": "النموذج الأساسي", "reload": "", "hint": "النموذج الرئيسي المستخدم لجميع العمليات" }, { - "id": 26, + "id": 0, "label": "Backend", - "localized": "الخلفية البرمجية", + "localized": "المحرك الخلفي", "reload": "", "hint": "" }, { - "id": 27, + "id": 0, "label": "Benchmark steps", - "localized": "خطوات قياس الأداء", + "localized": "خطوات اختبار الأداء", "reload": "", "hint": "" }, { - "id": 28, + "id": 0, "label": "Benchmark level", - "localized": "مستوى قياس الأداء", + "localized": "مستوى اختبار الأداء", "reload": "", "hint": "" }, { - "id": 29, + "id": 0, + "label": "Benchmark Image width", + "localized": "عرض صورة اختبار الأداء", + "reload": "", + "hint": "" + }, + { + "id": 0, + "label": "Benchmark Image height", + "localized": "ارتفاع صورة اختبار الأداء", + "reload": "", + "hint": "" + }, + { + "id": 0, "label": "balanced", "localized": "متوازن", "reload": "", "hint": "" }, { - "id": 30, + "id": 0, "label": "block_level", - "localized": "مستوى_الكتلة", + "localized": "مستوى الكتلة", "reload": "", "hint": "" }, { - "id": 31, + "id": 0, "label": "Backend storage", - "localized": "تخزين الخلفية البرمجية", + "localized": "تخزين المحرك الخلفي", "reload": "", "hint": "" }, { - "id": 32, + "id": 0, "label": "BF16", "localized": "BF16", "reload": "", "hint": "استخدام دقة الفاصلة العائمة المعدلة بـ 16 بت للحسابات" }, { - "id": 33, + "id": 0, "label": "Batch matrix-matrix", - "localized": "ضرب المصفوفات الدفعي", + "localized": "مصفوفة-مصفوفة بالدفعة", "reload": "", - "hint": "ضرب المصفوفات الدفعي القياسي للانتباه (Attention). موثوق ولكنه غير فعال في استهلاك VRAM." + "hint": "عملية ضرب المصفوفات بالدفعة القياسية للانتباه (Attention). موثوقة ولكنها غير فعالة في استهلاك ذاكرة الفيديو VRAM." }, { - "id": 34, + "id": 0, "label": "BCFHW", "localized": "BCFHW", "reload": "", "hint": "" }, { - "id": 35, + "id": 0, "label": "BFCHW", "localized": "BFCHW", "reload": "", "hint": "" }, { - "id": 36, + "id": 0, "label": "BCHW", "localized": "BCHW", "reload": "", "hint": "" }, { - "id": 37, + "id": 0, "label": "Batch mode uses sequential seeds", "localized": "وضع الدفعة يستخدم بذوراً تسلسلية", "reload": "", "hint": "" }, { - "id": 38, + "id": 0, "label": "Batch uses original name", - "localized": "تستخدم الدفعة الاسم الأصلي", + "localized": "الدفعة تستخدم الاسم الأصلي", "reload": "", "hint": "" }, { - "id": 39, + "id": 0, "label": "Base images folder", "localized": "مجلد الصور الأساسي", "reload": "", "hint": "" }, { - "id": 40, + "id": 0, "label": "Base grids folder", "localized": "مجلد الشبكات الأساسي", "reload": "", "hint": "" }, { - "id": 41, + "id": 0, "label": "Build info on first access", "localized": "بناء المعلومات عند أول وصول", "reload": "", - "hint": "يمنع الخادم من بناء صفحة اللغة الإنجليزية عند بدء التشغيل ويقوم ببنائها عند طلبها فقط" + "hint": "يمنع الخادم من بناء صفحة EN عند بدء التشغيل، ويقوم ببنائها بدلاً من ذلك عند طلبها" }, { - "id": 42, + "id": 0, "label": "Beta Ratio", "localized": "نسبة بيتا", "reload": "", "hint": "" }, { - "id": 43, + "id": 0, "label": "BETA Block Weight Preset", - "localized": "الإعداد المسبق لوزن كتلة BETA", + "localized": "إعداد مسبق لأوزان كتلة بيتا", "reload": "", "hint": "" }, { - "id": 44, + "id": 0, "label": "Base model type", "localized": "نوع النموذج الأساسي", "reload": "", @@ -1306,1463 +1341,1540 @@ { "id": 0, "label": "caption_nav", - "localized": "تسمية توضيحية", + "localized": "caption_nav", "reload": "Caption", "hint": "تحليل الصور الموجودة وإنشاء أوصاف نصية" }, { - "id": 1, + "id": 0, "label": "contributors", - "localized": "المساهمون", - "reload": "Contributors", + "localized": "contributors", + "reload": "المساهمون", "hint": "" }, { - "id": 2, + "id": 0, + "label": "txt2img_corrections", + "localized": "txt2img_corrections", + "reload": "تصحيحات", + "hint": "التحكم في تصحيحات اللون/الحدة/السطوع للصورة أثناء عملية التوليد" + }, + { + "id": 0, "label": "txt2img_clear_prompt_btn", - "localized": "مسح", - "reload": "Clear", + "localized": "txt2img_clear_prompt_btn", + "reload": "مسح", "hint": "مسح المطالبات النصية" }, { - "id": 3, - "label": "component-940", - "localized": "التحقق من الحالة", - "reload": "Check status", + "id": 0, + "label": "component-980", + "localized": "component-980", + "reload": "تحقق من الحالة", "hint": "" }, { - "id": 4, + "id": 0, "label": "", - "localized": "تجميع (Composite)", - "reload": "Composite", + "localized": "", + "reload": "نسخ", "hint": "" }, { - "id": 5, + "id": 0, + "label": "", + "localized": "", + "reload": "تركيب (Composite)", + "hint": "" + }, + { + "id": 0, "label": "control_params_elements", - "localized": "التحكم", - "reload": "Control", - "hint": "إنشاء صورة بتوجيه كامل" + "localized": "control_params_elements", + "reload": "تحكم", + "hint": "إنشاء صورة مع توجيه كامل" }, { - "id": 6, + "id": 0, "label": "", - "localized": "ControlNet", + "localized": "", "reload": "ControlNet", - "hint": "تعتبر ControlNet نموذج توجيه متقدم" + "hint": "ControlNet هو نموذج توجيه متقدم" }, { - "id": 7, + "id": 0, "label": "caption_tab_controls", - "localized": "عناصر التحكم", - "reload": "Controls", + "localized": "caption_tab_controls", + "reload": "عناصر التحكم", "hint": "" }, { - "id": 8, + "id": 0, "label": "", - "localized": "تسمية توضيحية", + "localized": "", "reload": "CaptionCaption", "hint": "" }, { - "id": 9, + "id": 0, "label": "btn_console", - "localized": "منصة الأوامر (Console)", - "reload": "Console", + "localized": "btn_console", + "reload": "وحدة التحكم (Console)", "hint": "" }, { - "id": 10, + "id": 0, "label": "ui_update_check", - "localized": "التحقق من التحديثات", - "reload": "Check for updates", + "localized": "ui_update_check", + "reload": "التحقق من وجود تحديثات", "hint": "" }, { - "id": 11, + "id": 0, "label": "", - "localized": "سجل التغييرات", - "reload": "Change log", + "localized": "", + "reload": "سجل التغييرات", "hint": "" }, { - "id": 12, + "id": 0, "label": "", - "localized": "إعدادات الحوسبة", - "reload": "Compute Settings", - "hint": "الإعدادات المتعلقة بدقة الحوسبة، والانتباه المتقاطع (cross attention)، والتحسينات لمنصات الحوسبة" + "localized": "", + "reload": "إعدادات الحوسبة", + "hint": "إعدادات متعلقة بدقة الحوسبة، والانتباه المتقاطع (cross attention)، والتحسينات لمنصات الحوسبة" }, { - "id": 13, + "id": 0, "label": "", - "localized": "الحالي", - "reload": "Current", - "hint": "تحليل الوحدات داخل النموذج المحمل حالياً" + "localized": "", + "reload": "الحالي", + "hint": "تحليل الوحدات داخل النموذج المحمل حاليًا" }, { - "id": 14, + "id": 0, "label": "", - "localized": "CivitAI", + "localized": "", "reload": "CivitAI", "hint": "البحث عن النماذج وتنزيلها من CivitAI" }, { - "id": 15, - "label": "component-5503", - "localized": "حساب الهاش المفقود", - "reload": "Calculate missing hashes", + "id": 0, + "label": "component-5603", + "localized": "component-5603", + "reload": "حساب التجزئات (hashes) المفقودة", "hint": "" }, { - "id": 16, + "id": 0, "label": "", - "localized": "المجتمع", - "reload": "Community", + "localized": "", + "reload": "المجتمع", "hint": "" }, { - "id": 17, + "id": 0, "label": "", - "localized": "سحابي", - "reload": "Cloud", + "localized": "", + "reload": "السحابة", "hint": "" }, { - "id": 18, + "id": 0, "label": "txt2img_extra_details_close_desc", - "localized": "إغلاق", - "reload": "Close", + "localized": "txt2img_extra_details_close_desc", + "reload": "إغلاق", "hint": "" }, { - "id": 19, + "id": 0, "label": "change_checkpoint", - "localized": "تغيير النموذج", - "reload": "Change model", + "localized": "change_checkpoint", + "reload": "تغيير النموذج", "hint": "" }, { - "id": 20, + "id": 0, "label": "change_refiner", - "localized": "تغيير المنقي (Refiner)", - "reload": "Change refiner", + "localized": "change_refiner", + "reload": "تغيير المُنقّي (Refiner)", "hint": "" }, { - "id": 21, + "id": 0, "label": "change_vae", - "localized": "تغيير VAE", - "reload": "Change VAE", + "localized": "change_vae", + "reload": "تغيير VAE", "hint": "" }, { - "id": 22, + "id": 0, + "label": "change_unet", + "localized": "change_unet", + "reload": "تغيير UNet", + "hint": "" + }, + { + "id": 0, "label": "change_reference", - "localized": "تغيير المرجع", - "reload": "Change reference", + "localized": "change_reference", + "reload": "تغيير المرجع", "hint": "" }, { - "id": 23, + "id": 0, "label": "", - "localized": "تصحيحات", - "reload": "Corrections", - "hint": "التحكم في تصحيحات لون الصورة/الحدة/السطوع أثناء عملية الإنشاء" + "localized": "", + "reload": "تدرج الألوان (Color Grading)", + "hint": "تعديلات الألوان بعد التوليد، تُطبق لكل صورة بعد عملية التوليد وقبل تراكب القناع." }, { - "id": 24, + "id": 0, "label": "", - "localized": "طرق التحكم", - "reload": "Control Methods", + "localized": "", + "reload": "طرق التحكم", "hint": "" }, { - "id": 25, + "id": 0, "label": "", - "localized": "وسائط التحكم", - "reload": "Control Media", - "hint": "إضافة صورة الإدخال كصورة تهيئة منفصلة لمعالجة التحكم" + "localized": "", + "reload": "وسائط التحكم", + "hint": "إضافة صورة إدخال كصورة تهيئة منفصلة لمعالجة التحكم" }, { - "id": 26, + "id": 0, "label": "", - "localized": "ChronoEdit", + "localized": "", + "reload": "إنشاء فيديو", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", "reload": "ChronoEdit", "hint": "" }, { - "id": 27, + "id": 0, "label": "", - "localized": "الانتباه المتقاطع (Cross Attention)", - "reload": "Cross Attention", + "localized": "", + "reload": "الانتباه المتقاطع (Cross Attention)", "hint": "" }, { - "id": 28, + "id": 0, "label": "", - "localized": "تخطي CLIP", - "reload": "CLiP Skip", - "hint": "بارامتر التوقف المبكر لنموذج CLIP؛ 1 هو التوقف عند الطبقة الأخيرة كالمعتاد، 2 هو التوقف عند الطبقة قبل الأخيرة، وهكذا" + "localized": "", + "reload": "تخطي CLiP", + "hint": "معامل إيقاف مبكر لنموذج CLIP؛ 1 يعني التوقف عند الطبقة الأخيرة كالمعتاد، 2 يعني التوقف عند الطبقة قبل الأخيرة، وهكذا" }, { - "id": 29, + "id": 0, "label": "", - "localized": "Cache-DiT", + "localized": "", "reload": "Cache-DiT", "hint": "" }, { - "id": 30, + "id": 0, "label": "", - "localized": "CFG-Zero", + "localized": "", "reload": "CFG-Zero", "hint": "" }, { - "id": 31, + "id": 0, "label": "", - "localized": "مجلدات التخزين المؤقت", - "reload": "Cache folders", + "localized": "", + "reload": "مجلدات التخزين المؤقت", "hint": "" }, { - "id": 32, + "id": 0, "label": "", - "localized": "محمل نماذج مخصص", - "reload": "Custom model loader", + "localized": "", + "reload": "محمل نماذج مخصص", "hint": "" }, { - "id": 33, + "id": 0, "label": "", - "localized": "سجل العميل", - "reload": "Client log", + "localized": "", + "reload": "سجل العميل", "hint": "" }, { - "id": 34, + "id": 0, "label": "", - "localized": "تحليل CLIP", - "reload": "CLIP Analysis", + "localized": "", + "reload": "تحليل CLIP", "hint": "" }, { - "id": 35, + "id": 0, "label": "", - "localized": "السياق", - "reload": "Context", + "localized": "", + "reload": "السياق (Context)", "hint": "" }, { - "id": 36, + "id": 0, "label": "", - "localized": "وضع التصحيح", - "reload": "Correction mode", + "localized": "", + "reload": "التباين (Contrast)", + "hint": "يعدل الفرق بين المناطق المضيئة والمظلمة.
القيم الموجبة تزيد التباين، مما يجعل الداكن أكثر قتامة والفاتح أكثر سطوعاً.
القيم السالبة تجعل المدى النغمي أكثر تسطحاً نحو مظهر موحد." + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "درجة حرارة اللون", + "hint": "يغير درجة حرارة اللون بالكلفن.
القيم المنخفضة (مثل 2000K) تنتج نغمة دافئة كهرمانية. القيم الأعلى (مثل 12000K) تنتج نغمة باردة مزرقة.

القيمة الافتراضية 6500K هي ضوء النهار المحايد. تعمل عن طريق تغيير مقياس قنوات R/G/B لمحاكاة نقطة اللون الأبيض المستهدفة." + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "قص CLAHE", + "hint": "حد القص لموازنة الرسم البياني التكيفي المحدود بالتباين (CLAHE).
القيم الأعلى تسمح بمزيد من تعزيز التباين المحلي، مما يبرز التفاصيل في المناطق المسطحة.

اضبط على 0 للتعطيل. القيم النموذجية هي 1.0–3.0. القيم العالية جداً قد تؤدي إلى تضخيم الضوضاء." + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "شبكة CLAHE", + "hint": "حجم الشبكة لمناطق بلاط CLAHE.
الشبكات الأصغر (مثل 2–4) تنتج موازنة أكثر خشونة وعالمية.
الشبكات الأكبر (مثل 12–16) تعزز التفاصيل المحلية الدقيقة ولكن قد تضخم الضوضاء.

الافتراضي هو 8. نشط فقط عندما يكون قص CLAHE أكبر من 0." + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "وضع التصحيح", "hint": "" }, { - "id": 37, + "id": 0, "label": "", - "localized": "اللون", - "reload": "Color", + "localized": "", + "reload": "قص إلى بورتريه", + "hint": "قص صورة الإدخال إلى الوضع الطولي فقط قبل استخدامها كإدخال لـ IP adapter" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "رموز المفاهيم (Concept Tokens)", "hint": "" }, { - "id": 38, + "id": 0, "label": "", - "localized": "المركز", - "reload": "Center", + "localized": "", + "reload": "خريطة الألوان", "hint": "" }, { - "id": 39, + "id": 0, "label": "", - "localized": "تدرج الألوان", - "reload": "Color grading", + "localized": "", + "reload": "مقياس جيب التمام 1", "hint": "" }, { - "id": 40, + "id": 0, "label": "", - "localized": "قص بوضعية عمودية", - "reload": "Crop to portrait", - "hint": "قص صورة الإدخال لتكون عمودية فقط قبل استخدامها كمدخل لـ IP adapter" - }, - { - "id": 41, - "label": "", - "localized": "رموز المفاهيم (Concept Tokens)", - "reload": "Concept Tokens", + "localized": "", + "reload": "مقياس جيب التمام 2", "hint": "" }, { - "id": 42, + "id": 0, "label": "", - "localized": "خريطة الألوان", - "reload": "Colormap", + "localized": "", + "reload": "مقياس جيب التمام 3", "hint": "" }, { - "id": 43, + "id": 0, "label": "", - "localized": "مقياس جيب التمام 1", - "reload": "Cosine scale 1", + "localized": "", + "reload": "نموذج التخزين المؤقت", "hint": "" }, { - "id": 44, + "id": 0, "label": "", - "localized": "مقياس جيب التمام 2", - "reload": "Cosine scale 2", + "localized": "", + "reload": "مقياس جيب التمام", "hint": "" }, { - "id": 45, + "id": 0, "label": "", - "localized": "مقياس جيب التمام 3", - "reload": "Cosine scale 3", + "localized": "", + "reload": "خلفية جيب التمام", "hint": "" }, { - "id": 46, + "id": 0, "label": "", - "localized": "تخزين النموذج مؤقتاً", - "reload": "Cache model", + "localized": "", + "reload": "توجيه التحكم", "hint": "" }, { - "id": 47, + "id": 0, "label": "", - "localized": "مقياس جيب التمام", - "reload": "Cosine scale", + "localized": "", + "reload": "فاصلة", "hint": "" }, { - "id": 48, + "id": 0, "label": "", - "localized": "خلفية جيب التمام", - "reload": "Cosine Background", + "localized": "", + "reload": "الأعمدة", "hint": "" }, { - "id": 49, + "id": 0, "label": "", - "localized": "توجيه التحكم", - "reload": "Control guidance", + "localized": "", + "reload": "رقابة", "hint": "" }, { - "id": 50, + "id": 0, "label": "", - "localized": "التباين", - "reload": "Contrast", + "localized": "", + "reload": "التحقق من اللغة", "hint": "" }, { - "id": 51, + "id": 0, "label": "", - "localized": "فاصلة", - "reload": "comma", + "localized": "", + "reload": "التحقق من انتهاكات السياسة", "hint": "" }, { - "id": 52, + "id": 0, "label": "", - "localized": "أعمدة", - "reload": "Columns", + "localized": "", + "reload": "التحقق من الكلمات المحظورة", "hint": "" }, { - "id": 53, + "id": 0, "label": "", - "localized": "إنشاء فيديو", - "reload": "Create video", + "localized": "", + "reload": "التحكم في صور إدخال المعالجة المسبقة", "hint": "" }, { - "id": 54, + "id": 0, "label": "", - "localized": "رقابة", - "reload": "Censor", + "localized": "", + "reload": "التحكم في تجاوز قوة إزالة الضوضاء", "hint": "" }, { - "id": 55, + "id": 0, "label": "", - "localized": "التحقق من اللغة", - "reload": "Check language", + "localized": "", + "reload": "تغير الألوان", "hint": "" }, { - "id": 56, + "id": 0, "label": "", - "localized": "التحقق من انتهاكات السياسة", - "reload": "Check policy violations", + "localized": "", + "reload": "معدل التغيير", "hint": "" }, { - "id": 57, + "id": 0, "label": "", - "localized": "التحقق من الكلمات المحظورة", - "reload": "Check banned words", + "localized": "", + "reload": "السياق اللاحق", "hint": "" }, { - "id": 58, + "id": 0, "label": "", - "localized": "معالجة مسبقة لصور إدخال التحكم", - "reload": "Control preprocess input images", + "localized": "", + "reload": "قناع السياق", "hint": "" }, { - "id": 59, + "id": 0, "label": "", - "localized": "تجاوز قوة تقليل الضوضاء للتحكم", - "reload": "Control override denoise strength", + "localized": "", + "reload": "التحكم فقط", + "hint": "يستخدم هذا فقط مدخلات التحكم أدناه كمصدر لأي مهام ControlNet أو IP Adapter بناءً على خياراتنا المختلفة." + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "وضع CN", "hint": "" }, { - "id": 60, + "id": 0, "label": "", - "localized": "تباين الألوان", - "reload": "Color variation", + "localized": "", + "reload": "قوة CN", "hint": "" }, { - "id": 61, + "id": 0, "label": "", - "localized": "معدل التغيير", - "reload": "Change rate", + "localized": "", + "reload": "بداية CN", "hint": "" }, { - "id": 62, + "id": 0, "label": "", - "localized": "السياق بعد", - "reload": "Context after", + "localized": "", + "reload": "نهاية CN", "hint": "" }, { - "id": 63, + "id": 0, "label": "", - "localized": "قناع السياق", - "reload": "Context mask", + "localized": "", + "reload": "بلاطات CN", "hint": "" }, { - "id": 64, + "id": 0, "label": "", - "localized": "التحكم فقط", - "reload": "Control only", - "hint": "يستخدم هذا فقط إدخال التحكم أدناه كمصدر لأي مهام من نوع ControlNet أو IP Adapter بناءً على خياراتنا المتنوعة." - }, - { - "id": 65, - "label": "", - "localized": "وضع CN", - "reload": "CN Mode", + "localized": "", + "reload": "عامل التحكم", "hint": "" }, { - "id": 66, + "id": 0, "label": "", - "localized": "قوة CN", - "reload": "CN Strength", - "hint": "" - }, - { - "id": 67, - "label": "", - "localized": "بداية CN", - "reload": "CN Start", - "hint": "" - }, - { - "id": 68, - "label": "", - "localized": "نهاية CN", - "reload": "CN End", - "hint": "" - }, - { - "id": 69, - "label": "", - "localized": "مربعات CN", - "reload": "CN Tiles", - "hint": "" - }, - { - "id": 70, - "label": "", - "localized": "معامل التحكم", - "reload": "Control factor", - "hint": "" - }, - { - "id": 71, - "label": "", - "localized": "ControlNet-XS", + "localized": "", "reload": "ControlNet-XS", "hint": "" }, { - "id": 72, + "id": 0, "label": "", - "localized": "خشن", - "reload": "Coarse", + "localized": "", + "reload": "خشن", "hint": "" }, { - "id": 73, + "id": 0, "label": "", - "localized": "خريطة الألوان", - "reload": "Color map", + "localized": "", + "reload": "خريطة الألوان", "hint": "" }, { - "id": 74, + "id": 0, "label": "", - "localized": "قص للملاءمة", - "reload": "Crop to fit", - "hint": "إذا كانت أبعاد صورتك المصدر تختلف عن الأبعاد المستهدفة، ستقوم هذه الوظيفة بملاءمة صورتك المكبرة داخل صورة الحجم المستهدف. سيتم قص الأجزاء الزائدة." + "localized": "", + "reload": "القص للملاءمة", + "hint": "إذا كانت أبعاد صورتك المصدر (مثلاً 512x510) تختلف عن أبعادك المستهدفة (مثلاً 1024x768)، فستقوم هذه الوظيفة بملاءمة صورتك المكبرة داخل حجم صورتك المستهدف. سيتم قص الأجزاء الزائدة." }, { - "id": 75, + "id": 0, "label": "", - "localized": "نموذج CLIP", - "reload": "CLiP Model", - "hint": "نموذج CLIP المستخدم لمطابقة تشابه الصورة والنص. النماذج الأكبر (ViT-L، ViT-H) أكثر دقة ولكنها أبطأ وتستهلك ذاكرة فيديو أكبر." + "localized": "", + "reload": "نموذج CLiP", + "hint": "نموذج CLIP المستخدم لمطابقة التشابه بين الصورة والنص.
النماذج الأكبر (ViT-L, ViT-H) أكثر دقة ولكنها أبطأ وتستهلك المزيد من ذاكرة الفيديو (VRAM)." }, { - "id": 76, + "id": 0, "label": "", - "localized": "نموذج التسمية التوضيحية", - "reload": "Caption Model", - "hint": "نموذج BLIP المستخدم لإنشاء التسمية التوضيحية الأولية للصورة. يصف نموذج التسمية محتوى الصورة الذي يقوم CLIP بعد ذلك بإثرائه بمصطلحات النمط والنكهة." + "localized": "", + "reload": "نموذج التعليق (Caption Model)", + "hint": "نموذج BLIP المستخدم لإنشاء تعليق الصورة الأولي.
يصف نموذج التعليق محتوى الصورة الذي يقوم CLiP بعد ذلك بإثرائه بمصطلحات النمط والنكهة." }, { - "id": 77, + "id": 0, "label": "", - "localized": "حجم المجموعة (Chunk)", - "reload": "Chunk Size", - "hint": "حجم الدفعة لمعالجة مرشحي الوصف. القيم الأعلى تسرع الاستجواب ولكنها تزيد من استخدام ذاكرة الفيديو." - }, - { - "id": 78, - "label": "", - "localized": "عدد حزم CLIP (Beams)", - "reload": "CLiP Num Beams", - "hint": "عدد الحزم للبحث أثناء إنشاء التسمية التوضيحية. القيم الأعلى تبحث في احتمالات أكثر ولكنها أبطأ." - }, - { - "id": 79, - "label": "", - "localized": "عتبة الشخصية", - "reload": "Character threshold", - "hint": "عتبة الثقة للوسوم الخاصة بالشخصيات. يتم تضمين الوسوم التي تزيد ثقتها عن هذه العتبة فقط. القيم الأعلى أكثر انتقائية، والقيم الأقل تتضمن مطابقات محتملة أكثر." - }, - { - "id": 80, - "label": "", - "localized": "الانتباه المتقاطع", - "reload": "Cross-attention", + "localized": "", + "reload": "clip: الطول الأقصى", "hint": "" }, { - "id": 81, + "id": 0, "label": "", - "localized": "cpu", - "reload": "cpu", - "hint": "يستخدم المعالج والرام فقط: الأبطأ ولكن الأقل عرضة لنفاد الذاكرة" - }, - { - "id": 82, - "label": "", - "localized": "النماذج المخزنة مؤقتاً", - "reload": "Cached models", - "hint": "عدد النماذج التي سيتم تخزينها في الرام للوصول السريع" - }, - { - "id": 83, - "label": "", - "localized": "مدمج", - "reload": "combined", + "localized": "", + "reload": "clip: حجم المقطع", "hint": "" }, { - "id": 84, + "id": 0, "label": "", - "localized": "نسبة الضغط", - "reload": "Compress ratio", + "localized": "", + "reload": "clip: الحد الأدنى للنكهات", "hint": "" }, { - "id": 85, + "id": 0, "label": "", - "localized": "compel", + "localized": "", + "reload": "clip: الحد الأقصى للنكهات", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "clip: الوسائط", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "clip: عدد الحزم (beams)", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "عتبة الشخصية", + "hint": "عتبة الثقة للوسوم الخاصة بالشخصيات (مثل أسماء الشخصيات، سمات معينة).
يتم تضمين الوسوم التي تزيد ثقتها عن هذه العتبة فقط.
القيم الأعلى تكون أكثر انتقائية، والقيم الأقل تتضمن المزيد من التطابقات المحتملة.
غير مدعوم بواسطة نماذج DeepBooru." + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "الانتباه المتقاطع (Cross-attention)", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "وحدة المعالجة المركزية (CPU)", + "hint": "يستخدم المعالج وذاكرة الوصول العشوائي فقط: الأبطأ ولكنه الأقل عرضة لنفاد الذاكرة (OOM)" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "النماذج المخزنة مؤقتاً", + "hint": "عدد النماذج المراد تخزينها في الذاكرة للوصول السريع" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "مدمج", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "نسبة الضغط", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", "reload": "compel", "hint": "" }, { - "id": 86, + "id": 0, "label": "", - "localized": "القنوات أخيراً", - "reload": "Channels last", + "localized": "", + "reload": "القنوات الأخيرة", "hint": "" }, { - "id": 87, + "id": 0, "label": "", - "localized": "اختبار cuDNN للعمق الكامل", - "reload": "cuDNN full-depth benchmark", + "localized": "", + "reload": "قياس cuDNN للعمق الكامل", "hint": "" }, { - "id": 88, + "id": 0, "label": "", - "localized": "حد اختبار cuDNN", - "reload": "cuDNN benchmark limit", + "localized": "", + "reload": "حد قياس cuDNN", "hint": "" }, { - "id": 89, + "id": 0, "label": "", - "localized": "cudaMallocAsync", + "localized": "", "reload": "cudaMallocAsync", - "hint": "يستخدم مخصص ذاكرة CUDA غير المتزامن. يحسن الأداء وتجزئة ذاكرة الفيديو، ولكنه قد يسبب عدم استقرار في بعض المعالجات الرسومية." + "hint": "يستخدم مخصص الذاكرة غير المتزامن لـ CUDA. يحسن الأداء وتجزئة ذاكرة الفيديو (VRAM)، ولكنه قد يسبب عدم استقرار في بعض كروت الشاشة." }, { - "id": 90, + "id": 0, "label": "", - "localized": "تفعيل تخطي CLIP", - "reload": "CLiP skip enabled", + "localized": "", + "reload": "تمكين تخطي CLiP", "hint": "" }, { - "id": 91, + "id": 0, "label": "", - "localized": "تفعيل Cache-DiT", - "reload": "Cache-DiT enabled", + "localized": "", + "reload": "تمكين Cache-DiT", "hint": "" }, { - "id": 92, + "id": 0, "label": "", - "localized": "كتل حساب Cache-DiT F", - "reload": "Cache-DiT F-compute blocks", + "localized": "", + "reload": "كتل الحوسبة الأمامية Cache-DiT", "hint": "" }, { - "id": 93, + "id": 0, "label": "", - "localized": "كتل حساب Cache-DiT B", - "reload": "Cache-DiT B-compute blocks", + "localized": "", + "reload": "كتل الحوسبة الخلفية Cache-DiT", "hint": "" }, { - "id": 94, + "id": 0, "label": "", - "localized": "عتبة فرق بقايا Cache-DiT", - "reload": "Cache-DiT residual diff threshold", + "localized": "", + "reload": "عتبة اختلاف البواقي لـ Cache-DiT", "hint": "" }, { - "id": 95, + "id": 0, "label": "", - "localized": "خطوات إحماء Cache-DiT", - "reload": "Cache-DiT warmup steps", + "localized": "", + "reload": "خطوات الإحماء لـ Cache-DiT", "hint": "" }, { - "id": 96, + "id": 0, "label": "", - "localized": "تفعيل CFG-Zero", - "reload": "CFG-Zero enabled", + "localized": "", + "reload": "تمكين CFG-Zero", "hint": "" }, { - "id": 97, + "id": 0, "label": "", - "localized": "CFG-Zero star", + "localized": "", "reload": "CFG-Zero star", "hint": "" }, { - "id": 98, + "id": 0, "label": "", - "localized": "خطوات CFG-Zero", - "reload": "CFG-Zero steps", + "localized": "", + "reload": "خطوات CFG-Zero", "hint": "" }, { - "id": 99, + "id": 0, "label": "", - "localized": "cudagraphs", + "localized": "", "reload": "cudagraphs", "hint": "" }, { - "id": 100, + "id": 0, "label": "", - "localized": "تنظيف المجلد المؤقت عند بدء التشغيل", - "reload": "Cleanup temporary folder on startup", + "localized": "", + "reload": "تنظيف المجلد المؤقت عند البدء", "hint": "" }, { - "id": 101, + "id": 0, "label": "", - "localized": "إنشاء أرشيف ZIP لصور متعددة", - "reload": "Create ZIP archive for multiple images", + "localized": "", + "reload": "إنشاء أرشيف ZIP للصور المتعددة", "hint": "" }, { - "id": 102, + "id": 0, "label": "", - "localized": "تغطية (cover)", - "reload": "cover", - "hint": "تغطية كامل المساحة" + "localized": "", + "reload": "تغطية (cover)", + "hint": "تغطية كامل المنطقة" }, { - "id": 103, + "id": 0, "label": "", - "localized": "عرض مدمج", - "reload": "Compact view", + "localized": "", + "reload": "عرض مضغوط", "hint": "" }, { - "id": 104, + "id": 0, "label": "", - "localized": "تخزين نتائج مشفر النصوص مؤقتاً", - "reload": "Cache text encoder results", + "localized": "", + "reload": "رمز CivitAI", "hint": "" }, { - "id": 105, + "id": 0, "label": "", - "localized": "احتواء (contain)", - "reload": "contain", + "localized": "", + "reload": "حفظ CivitAI في مجلدات فرعية", "hint": "" }, { - "id": 106, + "id": 0, "label": "", - "localized": "محددات كلمات Ctrl+سهم", - "reload": "Ctrl+up/down word delimiters", + "localized": "", + "reload": "قالب المجلد الفرعي لـ CivitAI", "hint": "" }, { - "id": 107, + "id": 0, "label": "", - "localized": "دقة Ctrl+سهم عند التحرير (attention:1.1)", - "reload": "Ctrl+up/down precision when editing (attention:1.1)", + "localized": "", + "reload": "تجاهل تنزيلات CivitAI في حال عدم تطابق التجزئة", "hint": "" }, { - "id": 108, + "id": 0, "label": "", - "localized": "دقة Ctrl+سهم عند التحرير ", - "reload": "Ctrl+up/down precision when editing ", + "localized": "", + "reload": "تخزين نتائج مشفر النص (text encoder) مؤقتاً", "hint": "" }, { - "id": 109, + "id": 0, "label": "", - "localized": "VAEs المخزنة مؤقتاً", - "reload": "Cached VAEs", + "localized": "", + "reload": "احتواء (contain)", "hint": "" }, { - "id": 110, + "id": 0, "label": "", - "localized": "ckpt", + "localized": "", + "reload": "فواصل الكلمات Ctrl+أعلى/أسفل", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "دقة Ctrl+أعلى/أسفل عند التحرير (attention:1.1)", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "دقة Ctrl+أعلى/أسفل عند التحرير ", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "VAEs المخزنة مؤقتاً", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", "reload": "ckpt", "hint": "" }, { - "id": 111, + "id": 0, "label": "", - "localized": "قائمة مفصولة بفاصلة مع قوة اختيارية لكل LoRA", - "reload": "Comma separated list with optional strength per LoRA", + "localized": "", + "reload": "قائمة مفصولة بفواصل مع قوة اختيارية لكل LoRA", "hint": "" }, { - "id": 112, + "id": 0, "label": "", - "localized": "رمز CivitAI", - "reload": "CivitAI token", + "localized": "", + "reload": "خط أنابيب مخصص", "hint": "" }, { - "id": 113, + "id": 0, "label": "", - "localized": "خط أنابيب مخصص", - "reload": "Custom pipeline", + "localized": "", + "reload": "نموذج مخصص", "hint": "" }, { - "id": 114, + "id": 0, "label": "", - "localized": "نموذج مخصص", - "reload": "Custom model", + "localized": "", + "reload": "وحدة ControlNet 1", "hint": "" }, { - "id": 115, + "id": 0, "label": "", - "localized": "وحدة ControlNet 1", - "reload": "ControlNet unit 1", + "localized": "", + "reload": "وحدة ControlNet 2", "hint": "" }, { - "id": 116, + "id": 0, "label": "", - "localized": "وحدة ControlNet 2", - "reload": "ControlNet unit 2", + "localized": "", + "reload": "وحدة ControlNet 3", "hint": "" }, { - "id": 117, + "id": 0, "label": "", - "localized": "وحدة ControlNet 3", - "reload": "ControlNet unit 3", + "localized": "", + "reload": "وحدة ControlNet 4", "hint": "" }, { - "id": 118, + "id": 0, "label": "", - "localized": "وحدة ControlNet 4", - "reload": "ControlNet unit 4", + "localized": "", + "reload": "وحدة ControlNet-XS 1", "hint": "" }, { - "id": 119, + "id": 0, "label": "", - "localized": "وحدة ControlNet-XS 1", - "reload": "ControlNet-XS unit 1", + "localized": "", + "reload": "وحدة ControlNet-XS 2", "hint": "" }, { - "id": 120, + "id": 0, "label": "", - "localized": "وحدة ControlNet-XS 2", - "reload": "ControlNet-XS unit 2", + "localized": "", + "reload": "وحدة ControlNet-XS 3", "hint": "" }, { - "id": 121, + "id": 0, "label": "", - "localized": "وحدة ControlNet-XS 3", - "reload": "ControlNet-XS unit 3", + "localized": "", + "reload": "وحدة ControlNet-XS 4", "hint": "" }, { - "id": 122, + "id": 0, "label": "", - "localized": "وحدة ControlNet-XS 4", - "reload": "ControlNet-XS unit 4", + "localized": "", + "reload": "وحدة Control-LLLite 1", "hint": "" }, { - "id": 123, + "id": 0, "label": "", - "localized": "وحدة Control-LLLite 1", - "reload": "Control-LLLite unit 1", + "localized": "", + "reload": "وحدة Control-LLLite 2", "hint": "" }, { - "id": 124, + "id": 0, "label": "", - "localized": "وحدة Control-LLLite 2", - "reload": "Control-LLLite unit 2", + "localized": "", + "reload": "وحدة Control-LLLite 3", "hint": "" }, { - "id": 125, + "id": 0, "label": "", - "localized": "وحدة Control-LLLite 3", - "reload": "Control-LLLite unit 3", + "localized": "", + "reload": "وحدة Control-LLLite 4", "hint": "" }, { - "id": 126, + "id": 0, "label": "", - "localized": "وحدة Control-LLLite 4", - "reload": "Control-LLLite unit 4", + "localized": "", + "reload": "إعدادات التحكم", "hint": "" }, { - "id": 127, + "id": 0, "label": "", - "localized": "إعدادات التحكم", - "reload": "Control settings", - "hint": "" - }, - { - "id": 128, - "label": "", - "localized": "كاني (Canny)", + "localized": "", "reload": "Canny", "hint": "" }, { - "id": 129, + "id": 0, "label": "", - "localized": "شرط (Condition)", - "reload": "Condition", + "localized": "", + "reload": "الشرط (Condition)", "hint": "" }, { - "id": 130, + "id": 0, "label": "", - "localized": "تسمية توضيحية: دفعة", - "reload": "Caption: Batch", + "localized": "", + "reload": "التعليق: خيارات متقدمة", "hint": "" }, { - "id": 131, + "id": 0, "label": "", - "localized": "عناصر التحكم", - "reload": "Control elements", - "hint": "عناصر التحكم هي نماذج متقدمة يمكنها توجيه عملية الإنشاء نحو النتيجة المرجوة" + "localized": "", + "reload": "التعليق: دفعة (Batch)", + "hint": "" + }, + { + "id": 0, + "label": "", + "localized": "", + "reload": "عناصر التحكم", + "hint": "عناصر التحكم هي نماذج متقدمة يمكنها توجيه عملية التوليد نحو النتيجة المرغوبة" } ], "d": [ { - "id": -1, + "id": 0, "label": "Docs", - "localized": "الوثائق", + "localized": "وثائق", "reload": "", - "hint": "الوثائق والمستندات التعليمية" + "hint": "" }, { - "id": -1, + "id": 0, "label": "Discord", "localized": "ديسكورد", "reload": "", - "hint": "رابط مجتمع ديسكورد" + "hint": "" }, { - "id": -1, + "id": 1, "label": "Detail", - "localized": "التفاصيل", + "localized": "تفاصيل", "reload": "", - "hint": "يقوم المحسن (Detailer) بتشغيل عملية توليد إضافية بدقة أعلى للأجسام المكتشفة" + "hint": "يقوم الـ Detailer بإجراء عملية توليد إضافية بدقة أعلى للكائنات المكتشفة" }, { - "id": -1, + "id": 2, "label": "Delete", "localized": "حذف", "reload": "", "hint": "حذف الصورة" }, { - "id": -1, + "id": 3, "label": "Default", "localized": "افتراضي", "reload": "", "hint": "" }, { - "id": -1, + "id": 4, "label": "Download updates", "localized": "تنزيل التحديثات", "reload": "", "hint": "" }, { - "id": -1, + "id": 5, "label": "Download model", "localized": "تنزيل النموذج", "reload": "", "hint": "" }, { - "id": -1, + "id": 6, "label": "Diffusers", - "localized": "Diffusers", + "localized": "ناشرات (Diffusers)", "reload": "", "hint": "" }, { - "id": -1, + "id": 7, "label": "Distilled", "localized": "مقطر (Distilled)", "reload": "", "hint": "" }, { - "id": -1, + "id": 8, "label": "Description", - "localized": "الوصف", + "localized": "وصف", "reload": "", "hint": "" }, { - "id": -1, + "id": 9, "label": "Details", - "localized": "التفاصيل", + "localized": "تفاصيل", "reload": "", "hint": "" }, { - "id": -1, + "id": 10, "label": "Detailer", - "localized": "المحسن (Detailer)", + "localized": "المفصل (Detailer)", "reload": "", - "hint": "يقوم المحسن بتشغيل عملية توليد إضافية بدقة أعلى للأجسام المكتشفة" + "hint": "يقوم الـ Detailer بإجراء عملية توليد إضافية بدقة أعلى للكائنات المكتشفة" }, { - "id": -1, + "id": 11, "label": "Denoise", "localized": "إزالة الضجيج", "reload": "", - "hint": "إعدادات إزالة الضجيج (Denoising). تعني القيمة الأعلى السماح بتغيير المزيد من محتوى الصورة الحالي أثناء التوليد" + "hint": "إعدادات إزالة الضجيج. تعني قيمة إزالة ضجيج أعلى أن هناك مجالاً أكبر لتغيير محتوى الصورة الحالي أثناء التوليد" }, { - "id": -1, + "id": 12, "label": "DirectML", "localized": "DirectML", "reload": "", "hint": "" }, { - "id": -1, + "id": 13, "label": "Download model from huggingface", - "localized": "تنزيل النموذج من Hugging Face", + "localized": "تنزيل النموذج من Huggingface", "reload": "", "hint": "" }, { - "id": -1, + "id": 14, "label": "Dropdown", "localized": "قائمة منسدلة", "reload": "", "hint": "" }, { - "id": -1, + "id": 15, "label": "dynamic", "localized": "ديناميكي", "reload": "", - "hint": "يقوم الإزاحة الديناميكية بضبط جدول إزالة الضجيج تلقائياً بناءً على دقة صورتك. يقوم المجدول بالاستكمال بين الإزاحة الأساسية والقصوى بناءً على دقة الصورة الفعلية. التمكين يعطل إزاحة التدفق الثابتة." + "hint": "يقوم التغيير الديناميكي (Dynamic shifting) بضبط جدول إزالة الضجيج تلقائياً بناءً على دقة صورتك. يقوم المجدول بالاستيفاء بين base_shift و max_shift بناءً على دقة الصورة الفعلية. تفعيل هذا الخيار يعطل إزاحة التدفق الثابت (Static Flow shift)." }, { - "id": -1, + "id": 16, "label": "Detailer models", - "localized": "نماذج المحسن", + "localized": "نماذج المفصل", "reload": "", - "hint": "اختر نماذج الكشف لاستخدامها في التحسين" + "hint": "اختر نماذج الكشف لاستخدامها في عملية التفصيل" }, { - "id": -1, + "id": 17, "label": "Detailer list", - "localized": "قائمة المحسن", + "localized": "قائمة المفصل", "reload": "", "hint": "" }, { - "id": -1, + "id": 18, "label": "Detailer classes", - "localized": "فئات المحسن", + "localized": "فئات المفصل", "reload": "", - "hint": "حدد فئات معينة للاستخدام إذا كان نموذج المحسن المختار متعدد الفئات" + "hint": "حدد فئات معينة لاستخدامها إذا كان نموذج المفصل المختار نموذجاً متعدد الفئات" }, { - "id": -1, + "id": 19, "label": "Detailer prompt", - "localized": "وصف المحسن", + "localized": "مطالبة المفصل", "reload": "", - "hint": "استخدم وصفاً منفصلاً للمحسن. إذا لم يتوفر، فسيستخدم الوصف الأساسي" + "hint": "استخدم مطالبة منفصلة للمفصل. إذا لم يتم تحديدها، سيتم استخدام المطالبة الأساسية" }, { - "id": -1, + "id": 20, "label": "Detailer negative prompt", - "localized": "الوصف السلبي للمحسن", + "localized": "المطالبة السلبية للمفصل", "reload": "", - "hint": "استخدم وصفاً سلبياً منفصلاً للمحسن. إذا لم يتوفر، فسيستخدم الوصف السلبي الأساسي" + "hint": "استخدم مطالبة سلبية منفصلة للمفصل. إذا لم يتم تحديدها، سيتم استخدام المطالبة السلبية الأساسية" }, { - "id": -1, + "id": 21, "label": "Detailer steps", - "localized": "خطوات المحسن", + "localized": "خطوات المفصل", "reload": "", - "hint": "عدد الخطوات لتشغيل عملية المحسن" + "hint": "عدد الخطوات المطلوب تنفيذها لعملية التفصيل" }, { - "id": -1, + "id": 22, "label": "Detailer strength", - "localized": "قوة المحسن", + "localized": "قوة المفصل", "reload": "", - "hint": "قوة إزالة الضجيج لعملية المحسن" + "hint": "قوة إزالة الضجيج لعملية التفصيل" }, { - "id": -1, + "id": 23, "label": "Detailer resolution", - "localized": "دقة المحسن", + "localized": "دقة المفصل", "reload": "", "hint": "" }, { - "id": -1, + "id": 24, "label": "Denoising batch size", "localized": "حجم دفعة إزالة الضجيج", "reload": "", "hint": "" }, { - "id": -1, + "id": 25, "label": "Dilate tau", - "localized": "توسيع تاو (Dilate tau)", + "localized": "معامل التمدد (Dilate tau)", "reload": "", "hint": "" }, { - "id": -1, + "id": 26, "label": "Draw legend", - "localized": "رسم وسيلة الإيضاح", + "localized": "رسم المفتاح", "reload": "", "hint": "" }, { - "id": -1, + "id": 27, "label": "Denoising strength", "localized": "قوة إزالة الضجيج", "reload": "", - "hint": "تحدد مدى احترام الخوارزمية لمحتوى الصورة. عند القيمة 0، لن يتغير شيء، وعند 1 ستحصل على صورة غير ذات صلة. مع قيم أقل من 1.0، ستستغرق المعالجة خطوات أقل مما يحدده منزلق خطوات أخذ العينات." + "hint": "يحدد مدى تجاهل الخوارزمية لمحتوى الصورة. عند 0، لن يتغير شيء، وعند 1 ستحصل على صورة غير مرتبطة. مع قيم أقل من 1.0، ستستغرق المعالجة خطوات أقل مما يحدده شريط تمرير خطوات العينة (Sampling Steps)" }, { - "id": -1, + "id": 28, "label": "Denoise start", - "localized": "بدء إزالة الضجيج", + "localized": "بداية إزالة الضجيج", "reload": "", - "hint": "تجاوز قوة إزالة الضجيج من خلال تحديد متى يجب أن ينتهي النموذج الأساسي ومتى يبدأ المنقح (refiner). ينطبق فقط عند استخدام المنقح. إذا تم ضبطه على 0 أو 1، فسيتم استخدام قوة إزالة الضجيج العادية." + "hint": "تجاوز قوة إزالة الضجيج من خلال تحديد متى يجب أن ينتهي النموذج الأساسي ومتى يجب أن يبدأ النموذج المحسّن (refiner). ينطبق فقط عند استخدام المحسّن. إذا تم ضبطه على 0 أو 1، فسيتم استخدام قوة إزالة الضجيج" }, { - "id": -1, + "id": 29, "label": "down", "localized": "أسفل", "reload": "", "hint": "" }, { - "id": -1, + "id": 30, "label": "Decode chunks", "localized": "فك تشفير الأجزاء", "reload": "", "hint": "" }, { - "id": -1, + "id": 31, "label": "Dilate", - "localized": "توسيع", + "localized": "تمدد", "reload": "", "hint": "" }, { - "id": -1, + "id": 32, "label": "Depth and normal", - "localized": "العمق والخرائط الطبيعية (Normal)", + "localized": "العمق والعادي", "reload": "", "hint": "" }, { - "id": -1, + "id": 33, "label": "Distance threshold", "localized": "عتبة المسافة", "reload": "", "hint": "" }, { - "id": -1, + "id": 34, "label": "Depth threshold", "localized": "عتبة العمق", "reload": "", "hint": "" }, { - "id": -1, + "id": 35, "label": "Denoising steps", "localized": "خطوات إزالة الضجيج", "reload": "", "hint": "" }, { - "id": -1, + "id": 36, "label": "Depth map", "localized": "خريطة العمق", "reload": "", "hint": "" }, { - "id": -1, + "id": 37, "label": "Dynamic shift", "localized": "إزاحة ديناميكية", "reload": "", "hint": "" }, { - "id": -1, + "id": 38, "label": "Duration", "localized": "المدة", "reload": "", "hint": "" }, { - "id": -1, + "id": 39, "label": "Device Info", "localized": "معلومات الجهاز", "reload": "", "hint": "" }, { - "id": -1, + "id": 40, "label": "Diffusers load using Run:ai streamer", - "localized": "تحميل Diffusers باستخدام Run:ai streamer", + "localized": "تحميل الناشرات باستخدام Run:ai streamer", "reload": "", "hint": "" }, { - "id": -1, + "id": 41, "label": "Disable accelerate", - "localized": "تعطيل التسريع (accelerate)", + "localized": "تعطيل التسريع (Accelerate)", "reload": "", "hint": "" }, { - "id": -1, + "id": 42, "label": "Disable T5 text encoder", - "localized": "تعطيل مشفر النصوص T5", + "localized": "تعطيل مشفر نصوص T5", "reload": "", "hint": "" }, { - "id": -1, + "id": 43, "label": "Dynamic loss threshold", - "localized": "عتبة الفقد الديناميكية", + "localized": "عتبة الخسارة الديناميكية", "reload": "", "hint": "" }, { - "id": -1, + "id": 44, "label": "Dequantize using torch.compile", "localized": "إلغاء التكميم باستخدام torch.compile", "reload": "", "hint": "" }, { - "id": -1, + "id": 45, "label": "Dequantize using full precision", "localized": "إلغاء التكميم باستخدام الدقة الكاملة", "reload": "", "hint": "" }, { - "id": -1, + "id": 46, "label": "Disabled", "localized": "معطل", "reload": "", "hint": "" }, { - "id": -1, + "id": 47, "label": "Dynamic Attention BMM", "localized": "انتباه ديناميكي BMM", "reload": "", - "hint": "يجري حسابات الانتباه (Attention) في خطوات بدلاً من دفعة واحدة. زمن استدلال أبطأ، ولكن تقليل كبير في استهلاك الذاكرة." + "hint": "يقوم بحساب الانتباه على خطوات بدلاً من القيام به دفعة واحدة. أوقات استنتاج أبطأ، ولكن تقليل كبير في استخدام الذاكرة" }, { - "id": -1, + "id": 48, "label": "Dynamic attention", "localized": "انتباه ديناميكي", "reload": "", - "hint": "يضبط حساب الانتباه ديناميكياً لكل خطوة. يوفر ذاكرة كرت الشاشة (VRAM) ولكنه يبطئ التوليد." + "hint": "يضبط حساب الانتباه ديناميكياً لكل خطوة. يوفر في ذاكرة الفيديو (VRAM) ولكنه يبطئ التوليد." }, { - "id": -1, + "id": 49, "label": "Dynamic Attention slicing rate", - "localized": "معدل تقسيم الانتباه الديناميكي", + "localized": "معدل تقطيع الانتباه الديناميكي", "reload": "", "hint": "" }, { - "id": -1, + "id": 50, "label": "Dynamic Attention trigger rate", - "localized": "معدل تفعيل الانتباه الديناميكي", + "localized": "معدل تشغيل الانتباه الديناميكي", "reload": "", "hint": "" }, { - "id": -1, + "id": 51, "label": "Deterministic mode", - "localized": "الوضع الحتمي", + "localized": "وضع حتمي", "reload": "", - "hint": "يفرض مخرجات متطابقة عبر عمليات التوليد المختلفة. مفيد لإعادة الإنتاج، ولكنه قد يعطل بعض التحسينات." + "hint": "يجبر المخرجات على أن تكون حتمية عبر التشغيلات. مفيد لإمكانية التكرار، ولكنه قد يعطل بعض التحسينات." }, { - "id": -1, + "id": 52, "label": "DirectML retry ops for NaN", - "localized": "محاولة عمليات DirectML للقيم غير الرقمية (NaN)", + "localized": "إعادة محاولة عمليات DirectML في حالة NaN", "reload": "", "hint": "" }, { - "id": -1, + "id": 53, "label": "deep-cache", - "localized": "deep-cache", + "localized": "الذاكرة المؤقتة العميقة (Deep-cache)", "reload": "", "hint": "" }, { - "id": -1, + "id": 54, "label": "DeepCache cache interval", - "localized": "فترة تخزين DeepCache المؤقت", + "localized": "فاصل الذاكرة المؤقتة DeepCache", "reload": "", "hint": "" }, { - "id": -1, + "id": 55, "label": "Directory for temporary images; leave empty for default", - "localized": "مجلد الصور المؤقتة؛ اتركه فارغاً للافتراضي", + "localized": "دليل الصور المؤقتة؛ اترك فارغاً للافترضي", "reload": "", "hint": "" }, { - "id": -1, + "id": 56, "label": "Do not display video output in UI", - "localized": "عدم عرض مخرجات الفيديو في الواجهة", + "localized": "لا تعرض مخرجات الفيديو في واجهة المستخدم", "reload": "", "hint": "" }, { - "id": -1, + "id": 57, "label": "Directory name pattern", - "localized": "نمط اسم المجلد", + "localized": "نمط اسم الدليل", "reload": "", - "hint": "استخدم التاغات التالية لتحديد كيفية اختيار المجلدات الفرعية للصور والشبكات: [steps], [cfg], [prompt_hash], إلخ. اتركه فارغاً للافتراضي." + "hint": "استخدم الوسوم التالية لتحديد كيفية اختيار المجلدات الفرعية للصور والشبكات: [steps], [cfg], [prompt_hash], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [model_name], [prompt_words], [date], [datetime], [datetime], [datetime