From b8435e632f7ba0da12a2c8e9c788dda519279d24 Mon Sep 17 00:00:00 2001
From: evshiron
Date: Sat, 5 Nov 2022 02:36:47 +0800
Subject: [PATCH 30/52] add --cors-allow-origins cmd opt
---
modules/shared.py | 7 ++++---
webui.py | 9 +++++++++
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/modules/shared.py b/modules/shared.py
index a9e28b9c4..e83cbcdff 100644
--- a/modules/shared.py
+++ b/modules/shared.py
@@ -86,6 +86,7 @@ parser.add_argument("--nowebui", action='store_true', help="use api=True to laun
parser.add_argument("--ui-debug-mode", action='store_true', help="Don't load model to quickly launch UI")
parser.add_argument("--device-id", type=str, help="Select the default CUDA device to use (export CUDA_VISIBLE_DEVICES=0,1,etc might be needed before)", default=None)
parser.add_argument("--administrator", action='store_true', help="Administrator rights", default=False)
+parser.add_argument("--cors-allow-origins", type=str, help="Allowed CORS origins", default=None)
cmd_opts = parser.parse_args()
restricted_opts = {
@@ -147,9 +148,9 @@ class State:
self.interrupted = True
def nextjob(self):
- if opts.show_progress_every_n_steps == -1:
+ if opts.show_progress_every_n_steps == -1:
self.do_set_current_image()
-
+
self.job_no += 1
self.sampling_step = 0
self.current_image_sampling_step = 0
@@ -198,7 +199,7 @@ class State:
return
if self.current_latent is None:
return
-
+
if opts.show_progress_grid:
self.current_image = sd_samplers.samples_to_image_grid(self.current_latent)
else:
diff --git a/webui.py b/webui.py
index 81df09dd2..3788af0ba 100644
--- a/webui.py
+++ b/webui.py
@@ -5,6 +5,7 @@ import importlib
import signal
import threading
from fastapi import FastAPI
+from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
from modules.paths import script_path
@@ -93,6 +94,11 @@ def initialize():
signal.signal(signal.SIGINT, sigint_handler)
+def setup_cors(app):
+ if cmd_opts.cors_allow_origins:
+ app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_methods=['*'])
+
+
def create_api(app):
from modules.api.api import Api
api = Api(app, queue_lock)
@@ -114,6 +120,7 @@ def api_only():
initialize()
app = FastAPI()
+ setup_cors(app)
app.add_middleware(GZipMiddleware, minimum_size=1000)
api = create_api(app)
@@ -147,6 +154,8 @@ def webui():
# runnnig its code. We disable this here. Suggested by RyotaK.
app.user_middleware = [x for x in app.user_middleware if x.cls.__name__ != 'CORSMiddleware']
+ setup_cors(app)
+
app.add_middleware(GZipMiddleware, minimum_size=1000)
if launch_api:
From 467d8b967b5d1b1984ab113bec3fff217736e7ac Mon Sep 17 00:00:00 2001
From: AngelBottomless <35677394+aria1th@users.noreply.github.com>
Date: Sat, 5 Nov 2022 04:24:42 +0900
Subject: [PATCH 31/52] Fix errors from commit f2b697 with --hide-ui-dir-config
https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/f2b69709eaff88fc3a2bd49585556ec0883bf5ea
---
modules/ui.py | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/modules/ui.py b/modules/ui.py
index 4c2829af9..76ca9b071 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1446,17 +1446,19 @@ def create_ui(wrap_gradio_gpu_call):
continue
oldval = opts.data.get(key, None)
-
- setattr(opts, key, value)
-
+ try:
+ setattr(opts, key, value)
+ except RuntimeError:
+ continue
if oldval != value:
if opts.data_labels[key].onchange is not None:
opts.data_labels[key].onchange()
changed += 1
-
- opts.save(shared.config_filename)
-
+ try:
+ opts.save(shared.config_filename)
+ except RuntimeError:
+ return opts.dumpjson(), f'{changed} settings changed without save.'
return opts.dumpjson(), f'{changed} settings changed.'
def run_settings_single(value, key):
From 30b1bcc64e67ad50c5d3af3a6fe1bd1e9553f34e Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Fri, 4 Nov 2022 22:56:18 +0300
Subject: [PATCH 32/52] fix upscale loop erroneously applied multiple times
---
modules/upscaler.py | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/modules/upscaler.py b/modules/upscaler.py
index 83fde7ca9..c4e6e6bd6 100644
--- a/modules/upscaler.py
+++ b/modules/upscaler.py
@@ -57,10 +57,18 @@ class Upscaler:
self.scale = scale
dest_w = img.width * scale
dest_h = img.height * scale
+
for i in range(3):
- if img.width > dest_w and img.height > dest_h:
- break
+ shape = (img.width, img.height)
+
img = self.do_upscale(img, selected_model)
+
+ if shape == (img.width, img.height):
+ break
+
+ if img.width >= dest_w and img.height >= dest_h:
+ break
+
if img.width != dest_w or img.height != dest_h:
img = img.resize((int(dest_w), int(dest_h)), resample=LANCZOS)
From c0f7dbda3361daaa3e315e747fe5bebb75ea55d0 Mon Sep 17 00:00:00 2001
From: hentailord85ez <112723046+hentailord85ez@users.noreply.github.com>
Date: Fri, 4 Nov 2022 23:01:58 +0000
Subject: [PATCH 33/52] Update k-diffusion to release 0.0.10
---
launch.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launch.py b/launch.py
index 2a51f20ee..5fa115606 100644
--- a/launch.py
+++ b/launch.py
@@ -142,7 +142,7 @@ def prepare_enviroment():
stable_diffusion_commit_hash = os.environ.get('STABLE_DIFFUSION_COMMIT_HASH', "69ae4b35e0a0f6ee1af8bb9a5d0016ccb27e36dc")
taming_transformers_commit_hash = os.environ.get('TAMING_TRANSFORMERS_COMMIT_HASH', "24268930bf1dce879235a7fddd0b2355b84d7ea6")
- k_diffusion_commit_hash = os.environ.get('K_DIFFUSION_COMMIT_HASH', "f4e99857772fc3a126ba886aadf795a332774878")
+ k_diffusion_commit_hash = os.environ.get('K_DIFFUSION_COMMIT_HASH', "60e5042ca0da89c14d1dd59d73883280f8fce991")
codeformer_commit_hash = os.environ.get('CODEFORMER_COMMIT_HASH', "c5b4593074ba6214284d6acd5f1719b6c5d739af")
blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9")
From 6008c0773ea575353f9b87da8a58454e20cc7857 Mon Sep 17 00:00:00 2001
From: hentailord85ez <112723046+hentailord85ez@users.noreply.github.com>
Date: Fri, 4 Nov 2022 23:03:05 +0000
Subject: [PATCH 34/52] Add support for new DPM-Solver++ samplers
---
modules/sd_samplers.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py
index c7c414ef5..7ece65567 100644
--- a/modules/sd_samplers.py
+++ b/modules/sd_samplers.py
@@ -29,6 +29,10 @@ samplers_k_diffusion = [
('LMS Karras', 'sample_lms', ['k_lms_ka'], {'scheduler': 'karras'}),
('DPM2 Karras', 'sample_dpm_2', ['k_dpm_2_ka'], {'scheduler': 'karras'}),
('DPM2 a Karras', 'sample_dpm_2_ancestral', ['k_dpm_2_a_ka'], {'scheduler': 'karras'}),
+ ('DPM-Solver++(2S) a', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a'], {}),
+ ('DPM-Solver++(2M)', 'sample_dpmpp_2m', ['k_dpmpp_2m'], {}),
+ ('DPM-Solver++(2S) Karras', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a_ka'], {'scheduler': 'karras'}),
+ ('DPM-Solver++(2M) Karras', 'sample_dpmpp_2m', ['k_dpmpp_2m_ka'], {'scheduler': 'karras'}),
]
samplers_data_k_diffusion = [
From f92dc505a013af9e385c7edbdf97539be62503d6 Mon Sep 17 00:00:00 2001
From: hentailord85ez <112723046+hentailord85ez@users.noreply.github.com>
Date: Fri, 4 Nov 2022 23:12:48 +0000
Subject: [PATCH 35/52] Fix name
---
modules/sd_samplers.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py
index 7ece65567..b28a2e4cc 100644
--- a/modules/sd_samplers.py
+++ b/modules/sd_samplers.py
@@ -31,7 +31,7 @@ samplers_k_diffusion = [
('DPM2 a Karras', 'sample_dpm_2_ancestral', ['k_dpm_2_a_ka'], {'scheduler': 'karras'}),
('DPM-Solver++(2S) a', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a'], {}),
('DPM-Solver++(2M)', 'sample_dpmpp_2m', ['k_dpmpp_2m'], {}),
- ('DPM-Solver++(2S) Karras', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a_ka'], {'scheduler': 'karras'}),
+ ('DPM-Solver++(2S) a Karras', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a_ka'], {'scheduler': 'karras'}),
('DPM-Solver++(2M) Karras', 'sample_dpmpp_2m', ['k_dpmpp_2m_ka'], {'scheduler': 'karras'}),
]
From 1b6c2fc749e12f12bbee4705e65f217d23fa9072 Mon Sep 17 00:00:00 2001
From: hentailord85ez <112723046+hentailord85ez@users.noreply.github.com>
Date: Fri, 4 Nov 2022 23:28:13 +0000
Subject: [PATCH 36/52] Reorder samplers
---
modules/sd_samplers.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py
index b28a2e4cc..1e88f7eeb 100644
--- a/modules/sd_samplers.py
+++ b/modules/sd_samplers.py
@@ -24,13 +24,13 @@ samplers_k_diffusion = [
('Heun', 'sample_heun', ['k_heun'], {}),
('DPM2', 'sample_dpm_2', ['k_dpm_2'], {}),
('DPM2 a', 'sample_dpm_2_ancestral', ['k_dpm_2_a'], {}),
+ ('DPM-Solver++(2S) a', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a'], {}),
+ ('DPM-Solver++(2M)', 'sample_dpmpp_2m', ['k_dpmpp_2m'], {}),
('DPM fast', 'sample_dpm_fast', ['k_dpm_fast'], {}),
('DPM adaptive', 'sample_dpm_adaptive', ['k_dpm_ad'], {}),
('LMS Karras', 'sample_lms', ['k_lms_ka'], {'scheduler': 'karras'}),
('DPM2 Karras', 'sample_dpm_2', ['k_dpm_2_ka'], {'scheduler': 'karras'}),
('DPM2 a Karras', 'sample_dpm_2_ancestral', ['k_dpm_2_a_ka'], {'scheduler': 'karras'}),
- ('DPM-Solver++(2S) a', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a'], {}),
- ('DPM-Solver++(2M)', 'sample_dpmpp_2m', ['k_dpmpp_2m'], {}),
('DPM-Solver++(2S) a Karras', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a_ka'], {'scheduler': 'karras'}),
('DPM-Solver++(2M) Karras', 'sample_dpmpp_2m', ['k_dpmpp_2m_ka'], {'scheduler': 'karras'}),
]
From ebce0c57c78a3f22178e3a38938d19ec0dfb703d Mon Sep 17 00:00:00 2001
From: Billy Cao
Date: Sat, 5 Nov 2022 11:38:24 +0800
Subject: [PATCH 37/52] Use typing.Optional instead of | to add support for
Python 3.9 and below.
---
modules/api/models.py | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/modules/api/models.py b/modules/api/models.py
index 2ae75f435..a44c5ddd0 100644
--- a/modules/api/models.py
+++ b/modules/api/models.py
@@ -1,6 +1,6 @@
import inspect
from pydantic import BaseModel, Field, create_model
-from typing import Any, Optional, Union
+from typing import Any, Optional
from typing_extensions import Literal
from inflection import underscore
from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img
@@ -185,22 +185,22 @@ _options = vars(parser)['_option_string_actions']
for key in _options:
if(_options[key].dest != 'help'):
flag = _options[key]
- _type = str
- if(_options[key].default != None): _type = type(_options[key].default)
+ _type = str
+ if _options[key].default is not None: _type = type(_options[key].default)
flags.update({flag.dest: (_type,Field(default=flag.default, description=flag.help))})
FlagsModel = create_model("Flags", **flags)
class SamplerItem(BaseModel):
name: str = Field(title="Name")
- aliases: list[str] = Field(title="Aliases")
+ aliases: list[str] = Field(title="Aliases")
options: dict[str, str] = Field(title="Options")
class UpscalerItem(BaseModel):
name: str = Field(title="Name")
- model_name: str | None = Field(title="Model Name")
- model_path: str | None = Field(title="Path")
- model_url: str | None = Field(title="URL")
+ model_name: Optional[str] = Field(title="Model Name")
+ model_path: Optional[str] = Field(title="Path")
+ model_url: Optional[str] = Field(title="URL")
class SDModelItem(BaseModel):
title: str = Field(title="Title")
@@ -211,21 +211,21 @@ class SDModelItem(BaseModel):
class HypernetworkItem(BaseModel):
name: str = Field(title="Name")
- path: str | None = Field(title="Path")
+ path: Optional[str] = Field(title="Path")
class FaceRestorerItem(BaseModel):
name: str = Field(title="Name")
- cmd_dir: str | None = Field(title="Path")
+ cmd_dir: Optional[str] = Field(title="Path")
class RealesrganItem(BaseModel):
name: str = Field(title="Name")
- path: str | None = Field(title="Path")
- scale: int | None = Field(title="Scale")
+ path: Optional[str] = Field(title="Path")
+ scale: Optional[int] = Field(title="Scale")
class PromptStyleItem(BaseModel):
name: str = Field(title="Name")
- prompt: str | None = Field(title="Prompt")
- negative_prompt: str | None = Field(title="Negative Prompt")
+ prompt: Optional[str] = Field(title="Prompt")
+ negative_prompt: Optional[str] = Field(title="Negative Prompt")
class ArtistItem(BaseModel):
name: str = Field(title="Name")
From e9a5562b9b27a1a4f9c282637b111cefd9727a41 Mon Sep 17 00:00:00 2001
From: papuSpartan
Date: Sat, 5 Nov 2022 04:06:51 -0500
Subject: [PATCH 38/52] add support for tls (gradio tls options)
---
modules/shared.py | 3 +++
webui.py | 22 ++++++++++++++++++++--
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/modules/shared.py b/modules/shared.py
index 962115f61..7a20c3afa 100644
--- a/modules/shared.py
+++ b/modules/shared.py
@@ -86,6 +86,9 @@ parser.add_argument("--nowebui", action='store_true', help="use api=True to laun
parser.add_argument("--ui-debug-mode", action='store_true', help="Don't load model to quickly launch UI")
parser.add_argument("--device-id", type=str, help="Select the default CUDA device to use (export CUDA_VISIBLE_DEVICES=0,1,etc might be needed before)", default=None)
parser.add_argument("--administrator", action='store_true', help="Administrator rights", default=False)
+parser.add_argument("--tls-keyfile", type=str, help="Partially enables TLS, requires --tls-certfile to fully function", default=None)
+parser.add_argument("--tls-certfile", type=str, help="Partially enables TLS, requires --tls-keyfile to fully function", default=None)
+parser.add_argument("--server-name", type=str, help="Sets hostname of server", default=None)
cmd_opts = parser.parse_args()
restricted_opts = {
diff --git a/webui.py b/webui.py
index 81df09dd2..d366f4ca2 100644
--- a/webui.py
+++ b/webui.py
@@ -34,7 +34,7 @@ from modules.shared import cmd_opts
import modules.hypernetworks.hypernetwork
queue_lock = threading.Lock()
-
+server_name = "0.0.0.0" if cmd_opts.listen else cmd_opts.server_name
def wrap_queued_call(func):
def f(*args, **kwargs):
@@ -85,6 +85,22 @@ def initialize():
shared.opts.onchange("sd_hypernetwork", wrap_queued_call(lambda: modules.hypernetworks.hypernetwork.load_hypernetwork(shared.opts.sd_hypernetwork)))
shared.opts.onchange("sd_hypernetwork_strength", modules.hypernetworks.hypernetwork.apply_strength)
+ if cmd_opts.tls_keyfile is not None and cmd_opts.tls_keyfile is not None:
+
+ try:
+ if not os.path.exists(cmd_opts.tls_keyfile):
+ print("Invalid path to TLS keyfile given")
+ if not os.path.exists(cmd_opts.tls_certfile):
+ print(f"Invalid path to TLS certfile: '{cmd_opts.tls_certfile}'")
+ except TypeError:
+ cmd_opts.tls_keyfile = cmd_opts.tls_certfile = None
+ print(f"path: '{cmd_opts.tls_keyfile}' {type(cmd_opts.tls_keyfile)}")
+ print(f"path: '{cmd_opts.tls_certfile}' {type(cmd_opts.tls_certfile)}")
+ print("TLS setup invalid, running webui without TLS")
+ else:
+ print("Running with TLS")
+
+
# make the program just exit at ctrl+c without waiting for anything
def sigint_handler(sig, frame):
print(f'Interrupted with signal {sig} in {frame}')
@@ -131,8 +147,10 @@ def webui():
app, local_url, share_url = demo.launch(
share=cmd_opts.share,
- server_name="0.0.0.0" if cmd_opts.listen else None,
+ server_name=server_name,
server_port=cmd_opts.port,
+ ssl_keyfile=cmd_opts.tls_keyfile,
+ ssl_certfile=cmd_opts.tls_certfile,
debug=cmd_opts.gradio_debug,
auth=[tuple(cred.split(':')) for cred in cmd_opts.gradio_auth.strip('"').split(',')] if cmd_opts.gradio_auth else None,
inbrowser=cmd_opts.autolaunch,
From a02bad570ef7718436369bb4e4aa5b8e0f1f5689 Mon Sep 17 00:00:00 2001
From: papuSpartan
Date: Sat, 5 Nov 2022 04:14:21 -0500
Subject: [PATCH 39/52] rm dbg
---
webui.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/webui.py b/webui.py
index d366f4ca2..222dbeee7 100644
--- a/webui.py
+++ b/webui.py
@@ -94,8 +94,6 @@ def initialize():
print(f"Invalid path to TLS certfile: '{cmd_opts.tls_certfile}'")
except TypeError:
cmd_opts.tls_keyfile = cmd_opts.tls_certfile = None
- print(f"path: '{cmd_opts.tls_keyfile}' {type(cmd_opts.tls_keyfile)}")
- print(f"path: '{cmd_opts.tls_certfile}' {type(cmd_opts.tls_certfile)}")
print("TLS setup invalid, running webui without TLS")
else:
print("Running with TLS")
From 03b08c4a6b0609f24ec789d40100529b92ef0612 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sat, 5 Nov 2022 15:04:48 +0300
Subject: [PATCH 40/52] do not die when an extension's repo has no remote
---
modules/extensions.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/modules/extensions.py b/modules/extensions.py
index 897af96e1..8e0977fdf 100644
--- a/modules/extensions.py
+++ b/modules/extensions.py
@@ -34,8 +34,11 @@ class Extension:
if repo is None or repo.bare:
self.remote = None
else:
- self.remote = next(repo.remote().urls, None)
- self.status = 'unknown'
+ try:
+ self.remote = next(repo.remote().urls, None)
+ self.status = 'unknown'
+ except Exception:
+ self.remote = None
def list_files(self, subdir, extension):
from modules import scripts
From a170e3d22231e145f42bb878a76ae5f76fdca230 Mon Sep 17 00:00:00 2001
From: Evgeniy
Date: Sat, 5 Nov 2022 17:06:56 +0300
Subject: [PATCH 41/52] Python 3.8 typing compatibility
Solves problems with
```Traceback (most recent call last):
File "webui.py", line 201, in
webui()
File "webui.py", line 178, in webui
create_api(app)
File "webui.py", line 117, in create_api
from modules.api.api import Api
File "H:\AIart\stable-diffusion\stable-diffusion-webui\modules\api\api.py", line 9, in
from modules.api.models import *
File "H:\AIart\stable-diffusion\stable-diffusion-webui\modules\api\models.py", line 194, in
class SamplerItem(BaseModel):
File "H:\AIart\stable-diffusion\stable-diffusion-webui\modules\api\models.py", line 196, in SamplerItem
aliases: list[str] = Field(title="Aliases")
TypeError: 'type' object is not subscriptable```
and
```Traceback (most recent call last):
File "webui.py", line 201, in
webui()
File "webui.py", line 178, in webui
create_api(app)
File "webui.py", line 117, in create_api
from modules.api.api import Api
File "H:\AIart\stable-diffusion\stable-diffusion-webui\modules\api\api.py", line 9, in
from modules.api.models import *
File "H:\AIart\stable-diffusion\stable-diffusion-webui\modules\api\models.py", line 194, in
class SamplerItem(BaseModel):
File "H:\AIart\stable-diffusion\stable-diffusion-webui\modules\api\models.py", line 197, in SamplerItem
options: dict[str, str] = Field(title="Options")
TypeError: 'type' object is not subscriptable```
---
modules/api/models.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/modules/api/models.py b/modules/api/models.py
index a44c5ddd0..f89da1ffb 100644
--- a/modules/api/models.py
+++ b/modules/api/models.py
@@ -5,7 +5,7 @@ from typing_extensions import Literal
from inflection import underscore
from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img
from modules.shared import sd_upscalers, opts, parser
-from typing import List
+from typing import Dict, List
API_NOT_ALLOWED = [
"self",
@@ -193,8 +193,8 @@ FlagsModel = create_model("Flags", **flags)
class SamplerItem(BaseModel):
name: str = Field(title="Name")
- aliases: list[str] = Field(title="Aliases")
- options: dict[str, str] = Field(title="Options")
+ aliases: List[str] = Field(title="Aliases")
+ options: Dict[str, str] = Field(title="Options")
class UpscalerItem(BaseModel):
name: str = Field(title="Name")
@@ -230,4 +230,4 @@ class PromptStyleItem(BaseModel):
class ArtistItem(BaseModel):
name: str = Field(title="Name")
score: float = Field(title="Score")
- category: str = Field(title="Category")
\ No newline at end of file
+ category: str = Field(title="Category")
From 62e3d71aa778928d63cab81d9d8cde33e55bebb3 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sat, 5 Nov 2022 17:09:42 +0300
Subject: [PATCH 42/52] rework the code to not use the walrus operator because
colab's 3.7 does not support it
---
modules/hypernetworks/hypernetwork.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/modules/hypernetworks/hypernetwork.py b/modules/hypernetworks/hypernetwork.py
index 5ceed6ee3..7f182712b 100644
--- a/modules/hypernetworks/hypernetwork.py
+++ b/modules/hypernetworks/hypernetwork.py
@@ -429,13 +429,16 @@ def train_hypernetwork(hypernetwork_name, learn_rate, batch_size, data_root, log
weights = hypernetwork.weights()
for weight in weights:
weight.requires_grad = True
+
# Here we use optimizer from saved HN, or we can specify as UI option.
- if (optimizer_name := hypernetwork.optimizer_name) in optimizer_dict:
+ if hypernetwork.optimizer_name in optimizer_dict:
optimizer = optimizer_dict[hypernetwork.optimizer_name](params=weights, lr=scheduler.learn_rate)
+ optimizer_name = hypernetwork.optimizer_name
else:
- print(f"Optimizer type {optimizer_name} is not defined!")
+ print(f"Optimizer type {hypernetwork.optimizer_name} is not defined!")
optimizer = torch.optim.AdamW(params=weights, lr=scheduler.learn_rate)
optimizer_name = 'AdamW'
+
if hypernetwork.optimizer_state_dict: # This line must be changed if Optimizer type can be different from saved optimizer.
try:
optimizer.load_state_dict(hypernetwork.optimizer_state_dict)
From 159475e072f2ed3db8235aab9c3fa18640b93b80 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sat, 5 Nov 2022 18:32:22 +0300
Subject: [PATCH 43/52] tweak names a bit for new samplers
---
modules/sd_samplers.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py
index 1e88f7eeb..783992d2b 100644
--- a/modules/sd_samplers.py
+++ b/modules/sd_samplers.py
@@ -24,15 +24,15 @@ samplers_k_diffusion = [
('Heun', 'sample_heun', ['k_heun'], {}),
('DPM2', 'sample_dpm_2', ['k_dpm_2'], {}),
('DPM2 a', 'sample_dpm_2_ancestral', ['k_dpm_2_a'], {}),
- ('DPM-Solver++(2S) a', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a'], {}),
- ('DPM-Solver++(2M)', 'sample_dpmpp_2m', ['k_dpmpp_2m'], {}),
+ ('DPM++ 2S a', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a'], {}),
+ ('DPM++ 2M', 'sample_dpmpp_2m', ['k_dpmpp_2m'], {}),
('DPM fast', 'sample_dpm_fast', ['k_dpm_fast'], {}),
('DPM adaptive', 'sample_dpm_adaptive', ['k_dpm_ad'], {}),
('LMS Karras', 'sample_lms', ['k_lms_ka'], {'scheduler': 'karras'}),
('DPM2 Karras', 'sample_dpm_2', ['k_dpm_2_ka'], {'scheduler': 'karras'}),
('DPM2 a Karras', 'sample_dpm_2_ancestral', ['k_dpm_2_a_ka'], {'scheduler': 'karras'}),
- ('DPM-Solver++(2S) a Karras', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a_ka'], {'scheduler': 'karras'}),
- ('DPM-Solver++(2M) Karras', 'sample_dpmpp_2m', ['k_dpmpp_2m_ka'], {'scheduler': 'karras'}),
+ ('DPM++ 2S a Karras', 'sample_dpmpp_2s_ancestral', ['k_dpmpp_2s_a_ka'], {'scheduler': 'karras'}),
+ ('DPM++ 2M Karras', 'sample_dpmpp_2m', ['k_dpmpp_2m_ka'], {'scheduler': 'karras'}),
]
samplers_data_k_diffusion = [
From 29f48b7803dd0890cb5328fa290ab12045706316 Mon Sep 17 00:00:00 2001
From: Dynamic
Date: Sun, 6 Nov 2022 00:37:37 +0900
Subject: [PATCH 44/52] Update ko_KR.json
New setting option and some additional extension index strings
---
localizations/ko_KR.json | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index 29e10075b..cf302aafd 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -16,6 +16,7 @@
"A merger of the two checkpoints will be generated in your": "체크포인트들이 병합된 결과물이 당신의",
"A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
"Action": "작업",
+ "Add a button to convert the prompts used in NovelAI for use in the WebUI. In addition, add a button that allows you to recall a previously used prompt.": "NovelAI에서 사용되는 프롬프트를 WebUI에서 사용할 수 있게 변환하는 버튼을 추가합니다. 덤으로 이전에 사용한 프롬프트를 불러오는 버튼도 추가됩니다.",
"Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
"Add a second progress bar to the console that shows progress for an entire job.": "콘솔에 전체 작업의 진행도를 보여주는 2번째 프로그레스 바 추가하기",
"Add difference": "차이점 추가",
@@ -24,6 +25,7 @@
"Add model hash to generation information": "생성 정보에 모델 해시 추가",
"Add model name to generation information": "생성 정보에 모델 이름 추가",
"Add number to filename when saving": "이미지를 저장할 때 파일명에 숫자 추가하기",
+ "Adds a tab that lets you preview how CLIP model would tokenize your text.": "CLIP 모델이 텍스트를 어떻게 토큰화할지 미리 보여주는 탭을 추가합니다.",
"Adds a tab to the webui that allows the user to automatically extract keyframes from video, and manually extract 512x512 crops of those frames for use in model training.": "WebUI에 비디오로부터 자동으로 키프레임을 추출하고, 그 키프레임으로부터 모델 훈련에 사용될 512x512 이미지를 잘라낼 수 있는 탭을 추가합니다.",
"Aesthetic Gradients": "스타일 그라디언트",
"Aesthetic Image Scorer": "스타일 이미지 스코어러",
@@ -33,6 +35,7 @@
"Aesthetic text for imgs": "스타일 텍스트",
"Aesthetic weight": "스타일 가중치",
"Allowed categories for random artists selection when using the Roll button": "랜덤 버튼을 눌러 무작위 작가를 선택할 때 허용된 카테고리",
+ "Allows you to include various shortcodes in your prompts. You can pull text from files, set up your own variables, process text through conditional functions, and so much more - it's like wildcards on steroids.": "프롬프트에 다양한 숏코드를 추가할 수 있게 해줍니다. 파일로부터 텍스트 추출, 변수 설정, 조건 함수로 텍스트 처리 등등 - 스테로이드를 맞은 와일드카드라 할 수 있죠.",
"Always print all generation info to standard output": "기본 아웃풋에 모든 생성 정보 항상 출력하기",
"Always save all generated image grids": "생성된 이미지 그리드 항상 저장하기",
"Always save all generated images": "생성된 이미지 항상 저장하기",
@@ -54,6 +57,7 @@
"Batch Process": "이미지 여러장 처리",
"Batch size": "배치 크기",
"behind": "최신 아님",
+ "Booru tag autocompletion": "Booru 태그 자동완성",
"BSRGAN 4x": "BSRGAN 4x",
"built with gradio": "gradio로 제작되었습니다",
"Calculates aesthetic score for generated images using CLIP+MLP Aesthetic Score Predictor based on Chad Scorer": "Chad 스코어러를 기반으로 한 CLIP+MLP 스타일 점수 예측기를 이용해 생성된 이미지의 스타일 점수를 계산합니다.",
@@ -114,6 +118,7 @@
"Directory for saving images using the Save button": "저장 버튼을 이용해 저장하는 이미지들의 저장 경로",
"Directory name pattern": "디렉토리명 패턴",
"directory.": "저장 경로에 저장됩니다.",
+ "Displays autocompletion hints for tags from image booru boards such as Danbooru. Uses local tag CSV files and includes a config for customization.": "Danbooru 같은 이미지 booru 보드의 태그에 대한 자동완성 힌트를 보여줍니다. 로컬 환경에 저장된 CSV 파일을 사용하고 조정 가능한 설정 파일이 포함되어 있습니다.",
"Do not add watermark to images": "이미지에 워터마크 추가하지 않기",
"Do not do anything special": "아무것도 하지 않기",
"Do not save grids consisting of one picture": "이미지가 1개뿐인 그리드는 저장하지 않기",
@@ -317,6 +322,7 @@
"None": "없음",
"Nothing": "없음",
"Nothing found in the image.": "Nothing found in the image.",
+ "novelai-2-local-prompt": "NovelAI 프롬프트 변환기",
"Number of columns on the page": "각 페이지마다 표시할 가로줄 수",
"Number of grids in each row": "각 세로줄마다 표시될 그리드 수",
"number of images to delete consecutively next": "연속적으로 삭제할 이미지 수",
@@ -431,6 +437,7 @@
"Save images with embedding in PNG chunks": "PNG 청크로 이미지에 임베딩을 포함시켜 저장",
"Save style": "스타일 저장",
"Save text information about generation parameters as chunks to png files": "이미지 생성 설정값을 PNG 청크에 텍스트로 저장",
+ "Saves Optimizer state as separate *.optim file. Training can be resumed with HN itself and matching optim file.": "옵티마이저 상태를 별개의 *.optim 파일로 저장하기. 하이퍼네트워크 파일과 일치하는 optim 파일로부터 훈련을 재개할 수 있습니다.",
"Saving images/grids": "이미지/그리드 저장",
"Saving to a directory": "디렉토리에 저장",
"Scale by": "스케일링 배수 지정",
@@ -515,6 +522,7 @@
"Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 업스케일러들의 타일 사이즈. 0 = 타일링 없음.",
"Tiling": "타일링",
"Time taken:": "소요 시간 : ",
+ "tokenizer": "토크나이저",
"Torch active/reserved:": "활성화/예약된 Torch 양 : ",
"Torch active: Peak amount of VRAM used by Torch during generation, excluding cached data.\nTorch reserved: Peak amount of VRAM allocated by Torch, including all active and cached data.\nSys VRAM: Peak amount of VRAM allocation across all applications / total GPU VRAM (peak utilization%).": "활성화된 Torch : 생성 도중 캐시된 데이터를 포함해 사용된 VRAM의 최대량\n예약된 Torch : 활성화되고 캐시된 모든 데이터를 포함해 Torch에게 할당된 VRAM의 최대량\n시스템 VRAM : 모든 어플리케이션에 할당된 VRAM 최대량 / 총 GPU VRAM (최고 이용도%)",
"Train": "훈련",
From 0b028c84ab8a8edcf9648622ed3fe4b8ca013334 Mon Sep 17 00:00:00 2001
From: Riccardo Giovanetti <29801031+Harvester62@users.noreply.github.com>
Date: Sat, 5 Nov 2022 18:12:06 +0100
Subject: [PATCH 45/52] Italian localization - Additions and updates
Updated localization with the latest version of these Scripts/Extensions:
SD-Chad - Stable Diffusion Aesthetic Scorer (added)
AlphaCanvas
StylePile
Alternate Sampler Noise Schedules
SD Latent Mirroring (new)
SD Dynamic Prompts
Dataset Tag Editor
Depth Maps (new)
Improved prompt matrix (new)
New Extensions:
Auto-sd-paint-ext (new)
training-picker (new)
Unprompted
NovelAI-2-local-prompt (new)
tokenizer (new)
Hope there aren't too many mistakes or wrong translations, in case let me know.
---
localizations/it_IT.json | 514 ++++++++++++++++++++++++++++++++-------
1 file changed, 423 insertions(+), 91 deletions(-)
diff --git a/localizations/it_IT.json b/localizations/it_IT.json
index 83d0cccee..22a6f5462 100644
--- a/localizations/it_IT.json
+++ b/localizations/it_IT.json
@@ -17,11 +17,14 @@
"Checkpoint Merger": "Miscelatore di Checkpoint",
"Train": "Addestramento",
"Create aesthetic embedding": "Crea incorporamento estetico",
+ "auto-sd-paint-ext Guide/Panel": "KRITA Plugin Guida",
"Dataset Tag Editor": "Dataset Tag Editor",
"Deforum": "Deforum",
"Artists To Study": "Artisti per studiare",
"Image Browser": "Galleria immagini",
"Inspiration": "Ispirazione",
+ "Tokenizer": "Tokenizzatore",
+ "Training Picker": "Training Picker",
"Settings": "Impostazioni",
"Extensions": "Estensioni",
"Prompt": "Prompt",
@@ -49,11 +52,15 @@
"Heun": "Heun",
"DPM2": "DPM2",
"DPM2 a": "DPM2 a",
+ "DPM++ 2S a": "DPM++ 2S a",
+ "DPM++ 2M": "DPM++ 2M",
"DPM fast": "DPM fast",
"DPM adaptive": "DPM adaptive",
"LMS Karras": "LMS Karras",
"DPM2 Karras": "DPM2 Karras",
"DPM2 a Karras": "DPM2 a Karras",
+ "DPM++ 2S a Karras": "DPM++ 2S a Karras",
+ "DPM++ 2M Karras": "DPM++ 2M Karras",
"DDIM": "DDIM",
"PLMS": "PLMS",
"Width": "Larghezza",
@@ -84,18 +91,30 @@
"Aesthetic text for imgs": "Estetica - Testo per le immagini",
"Slerp angle": "Angolo Slerp",
"Is negative text": "È un testo negativo",
+ "Unprompted": "Unprompted",
+ "Dry Run": "Esecuzione a vuoto (Debug)",
+ "NEW!": "NUOVO!",
+ "Premium Fantasy Card Template": "Premium Fantasy Card Template",
+ "is now available.": "è ora disponibile.",
+ "Generate a wide variety of creatures and characters in the style of a fantasy card game. Perfect for heroes, animals, monsters, and even crazy hybrids.": "Genera un'ampia varietà di creature e personaggi nello stile di un gioco di carte fantasy. Perfetto per eroi, animali, mostri e persino ibridi incredibili.",
+ "Learn More ➜": "Per saperne di più ➜",
+ "Purchases help fund the continued development of Unprompted. Thank you for your support!": "Gli acquisti aiutano a finanziare il continuo sviluppo di Unprompted. Grazie per il vostro sostegno!",
+ "Dismiss": "Rimuovi",
"Script": "Script",
"Random grid": "Generaz. casuale (griglia)",
"Random": "Generaz. casuale (no griglia)",
"StylePile": "StylePile",
- "Advanced prompt matrix": "Matrice di prompt avanzata",
"Advanced Seed Blending": "Miscelazione Semi Avanzata",
"Alternate Sampler Noise Schedules": "Metodi alternativi di campionamento del rumore",
"Animator v6": "Animator v6",
"Asymmetric tiling": "Piastrellatura asimmetrica",
+ "SD Chad - Stable Diffusion Aesthetic Scorer": "SD Chad - Assegna Punteggio Estetica",
"Custom code": "Codice personalizzato",
- "Embedding to Shareable PNG": "Incorporamento convertito in PNG condivisibile",
+ "DepthMap v0.1.0": "DepthMap v0.1.0",
+ "Embedding to Shareable PNG": "Converte Incorporamento in PNG condivisibile",
"Force symmetry": "Forza la simmetria",
+ "Improved prompt matrix": "Improved prompt matrix",
+ "Latent Mirroring": "Rispecchia e capovolge l'immagine latente",
"Prompts interpolation": "Interpola Prompt",
"Prompt matrix": "Matrice dei prompt",
"Prompt morph": "Metamorfosi del prompt",
@@ -104,7 +123,6 @@
"Seed travel": "Interpolazione semi",
"Shift attention": "Sposta l'attenzione",
"Text to Vector Graphics": "Da testo a grafica vettoriale",
- "Unprompted": "Unprompted",
"X/Y plot": "Grafico X/Y",
"X/Y/Z plot": "Grafico X/Y/Z",
"Dynamic Prompting v0.13.6": "Prompt dinamici v0.13.6",
@@ -120,70 +138,186 @@
"Keep -1 for seeds": "Mantieni sempre il seme a -1",
"x/y change": "Inverti ordine assi X/Y (Passi/CFG)",
"Loops": "Cicli",
- "Focus on:": "Focus su:",
- "No focus": "Nessun Focus",
- "Portraits (tick Restore faces above for best results)": "Ritratti (selezionare 'Restaura volti' in alto per ottenere i migliori risultati)",
- "Feminine and extra attractive (tick Restore faces above for best results)": "Femminile ed estremamente attraente (selezionare 'Restaura volti' per ottenere i migliori risultati)",
- "Masculine and extra attractive (tick Restore faces above for best results)": "Maschile ed estremamente attraente (selezionare 'Restaura volti' per ottenere i migliori risultati)",
- "Monsters": "Mostri",
- "Robots": "Robot",
- "Retrofuturistic": "Retrofuturistico",
- "Propaganda": "Propaganda",
- "Landscapes": "Paesaggi",
- "Hints": "Suggerimenti",
+ "Set Batch count to Sequential prompt count": "Imposta il lotto di immagini sul numero di prompt sequenziali",
+ "Sequential prompts [X]": "Prompt sequenziali [X]",
+ "Random prompts [R]": "Prompt randomici [R]",
+ "Image type strength": "Intensità del tipo di immagine",
"Image type": "Tipo di immagine",
"Not set": "Non impostato",
"Photography": "Fotografia",
"Digital art": "Arte digitale",
- "3D Rendering": "3D Rendering",
+ "3D Rendering": "Rendering 3D",
"Painting": "Dipinto",
- "Sketch": "Schizzo",
- "Classic Comics": "Fumetti classici",
- "Modern Comics": "Fumetti moderni",
- "Manga": "Manga",
- "Vector art": "Arte vettoriale",
- "Visual style": "Stile visivo",
- "Realism": "Realismo",
- "Photorealism": "Fotorealismo",
- "Hyperrealism": "Iperrealismo",
- "Surrealism": "Surrealismo",
- "Modern Art": "Arte moderna",
- "Fauvism": "Fauvismo",
- "Futurism": "Futurismo",
- "Painterly": "Pittorico",
- "Pointillisme": "Puntinismo",
- "Abstract": "Astratto",
- "Pop Art": "Pop Art",
- "Impressionist": "Impressionista",
- "Cubism": "Cubismo",
- "Linocut": "Linoleografia",
- "Fantasy": "Fantasia",
+ "Vector Art": "Arte vettoriale",
+ "Mood": "Stato d'animo",
+ "Amusing": "Amusing",
+ "Angry": "Angry",
+ "Cosy": "Cosy",
+ "Depressing": "Depressing",
+ "Disgusting": "Disgusting",
+ "Embarrassing": "Embarrassing",
+ "Energetic": "Energetic",
+ "Evil": "Evil",
+ "Fearful": "Fearful",
+ "Frightening": "Frightening",
+ "Grim": "Grim",
+ "Guilty": "Guilty",
+ "Happy": "Happy",
+ "Hopeful": "Hopeful",
+ "Hopeless": "Hopeless",
+ "Lonely": "Lonely",
+ "Lustful": "Lustful",
+ "Peaceful": "Peaceful",
+ "Proud": "Proud",
+ "Relieving": "Relieving",
+ "Romantic": "Romantic",
+ "Sad": "Sad",
+ "Satisfying": "Satisfying",
+ "Shameful": "Shameful",
+ "Surprising": "Surprising",
"Colors": "Colori",
- "Chaotic": "Caotico",
- "Primary colors": "Colori primari",
- "Colorful": "Colorato",
+ "Primary Colors": "Primary Colors",
"Vivid": "Vivido",
- "Muted colors": "Colori tenui",
- "Low contrast": "Basso contrasto",
- "Desaturated": "Desaturato",
- "Grayscale": "Scala di grigi",
- "Black and white": "Bianco e nero",
- "Infrared": "Infrarosso",
- "Complementary": "Colori complementari",
- "Non-complementary": "Colori non complementari",
+ "Pastel Colors": "Pastel Colors",
+ "Muted Colors": "Muted Colors",
+ "Grayscale": "Grayscale",
+ "Black and white": "Black and white",
+ "Infrared": "Infrared",
"View": "Visuale",
- "Tilt shift": "Tilt shift",
- "Wide-angle": "Angolo ampio",
+ "Symmetrical": "Symmetrical",
+ "Tilt-shift": "Tilt-shift",
+ "Long shot angle": "Long shot angle",
+ "Medium shot angle": "Medium shot angle",
+ "Wide shot angle": "Wide shot angle",
"Portrait": "Ritratto",
+ "Extreme close-up angle": "Extreme close-up angle",
"Macro": "Macro",
"Microscopic": "Microscopico",
"Isometric": "Isometrico",
"Panorama": "Panorama",
- "Aerial photograph": "Fotografia aerea",
- "Artist focus (not quite finished, not sure it helps)": "Focus sull'artista (non del tutto finito, non è sicuro che aiuti)",
- "B/W Photograpy": "Fotografia B/N",
- "Portrait photo": "Foto ritratto",
- "Usage: a wearing ": "Utilizzo: a wearing ",
+ "Fisheye lens": "Fisheye lens",
+ "Overhead-angle": "Overhead-angle",
+ "Birds eye view": "Birds eye view",
+ "Focus on (unfinished)": "Focus su (incompleto)",
+ "No focus": "Nessun focus",
+ "Portraits": "Portraits",
+ "Feminine portrait": "Ritratto femminile",
+ "Masculine portrait": "Ritratto maschile",
+ "WaiFusion": "WaiFusion",
+ "Horrible Monsters": "Horrible Monsters",
+ "Robots": "Robot",
+ "Retrofuturism": "Retrofuturism",
+ "Propaganda": "Propaganda",
+ "Landscapes": "Paesaggi",
+ "Visual style strength": "Forza dello stile visivo",
+ "Visual style": "Stile visivo",
+ "Abstract": "Abstract",
+ "Acidwave": "Acidwave",
+ "Acrylic": "Acrylic",
+ "Aestheticism": "Aestheticism",
+ "Art Deco": "Art Deco",
+ "Nouveau": "Nouveau",
+ "Ashcan School Style": "Ashcan School Style",
+ "Avant-garde": "Avant-garde",
+ "Ballpoint Pen": "Ballpoint Pen",
+ "Baroque": "Baroque",
+ "Classicism": "Classicism",
+ "CoBrA": "CoBrA",
+ "Colored Pencil": "Colored Pencil",
+ "Constructivism": "Constructivism",
+ "Cubism": "Cubism",
+ "Dreamcore": "Dreamcore",
+ "Drip": "Drip",
+ "Encaustic": "Encaustic",
+ "Expressionism": "Expressionism",
+ "Fauvism": "Fauvism",
+ "Finger Painting": "Finger Painting",
+ "Futurism": "Futurism",
+ "Gouache": "Gouache",
+ "Hot Wax": "Hot Wax",
+ "Impressionism": "Impressionism",
+ "Ink Wash": "Ink Wash",
+ "Japanese": "Japanese",
+ "Korean": "Korean",
+ "Line Art": "Line Art",
+ "Linocut": "Linocut",
+ "Lowpoly": "Lowpoly",
+ "Manga": "Manga",
+ "Marker": "Marker",
+ "Modern Comics": "Fumetti moderni",
+ "Mural": "Mural",
+ "Neoclassicism": "Neoclassicism",
+ "Oil Painting": "Oil Painting",
+ "Pastel": "Pastel",
+ "Pencil": "Pencil",
+ "Photorealism": "Photorealism",
+ "Pixel Art": "Pixel Art",
+ "Pop Art": "Pop Art",
+ "Pop Surrealism": "Pop Surrealism",
+ "Psychedelic": "Psychedelic",
+ "Realism": "Realism",
+ "Renaissance": "Renaissance",
+ "Rococo": "Rococo",
+ "Sprite Artwork": "Sprite Artwork",
+ "Street Art": "Street Art",
+ "Suprematism": "Suprematism",
+ "Vaporwave": "Vaporwave",
+ "Vintage Comics": "Vintage Comics",
+ "Watercolor": "Watercolor",
+ "Artist influence": "Influenza dell'Artista",
+ "Artist": "Artista",
+ "Examples, Help and Tips": "Esempi, aiuto e suggerimenti",
+ "Style examples": "Esempi di Stile",
+ "Artist examples": "Esempi di Artisti",
+ "Mood examples": "Esempi di stato d'animo",
+ "Help": "Aiuto",
+ "Hello, StylePile here": "Ciao, questo è StylePile",
+ "Introduction": "Introduzione",
+ "is a mix and match system for adding elements to prompts that affect the style of the result. Hence the name. By default, these elements are placed in a specific order and given strength values. Which means the result sort-of evolves. I have generated thousands of images for each main": "è un sistema mescola e abbina per aggiungere elementi ai prompt che influiscono sullo stile del risultato. Da qui il nome. Per impostazione predefinita, questi elementi vengono inseriti in un ordine specifico e vengono assegnati valori di forza. Il che significa che il risultato si evolve. Ho generato migliaia di immagini per ogni principale",
+ "and tweaked the keywords to attempt giving expected results most of the time. Certainly, your suggestions for improvements are very welcome.": "e ottimizzato le parole chiave per tentare di fornire i risultati attesi per la maggior parte del tempo. Certamente, i tuoi suggerimenti per miglioramenti sono molto graditi.",
+ "Base workflow": "Flusso di lavoro di base",
+ "For example, if you select the": "Ad esempio, se si seleziona il",
+ "image type, then almost all results will look like Paintings. Selecting": "tipo di immagine, quindi quasi tutti i risultati sembreranno Dipinti. Selezione",
+ "will have a certain influence on the overall look in some way (if it's something humanoid it may show emotion, but also colors and overall feel may change). Setting": "avrà una certa influenza sull'aspetto generale in qualche modo (se è qualcosa di umanoide può mostrare emozioni, ma anche i colori e la sensazione generale possono cambiare). Ambientazione",
+ "will change the general tonality of the result. And setting": "cambierà la tonalità generale del risultato. E ambientazione",
+ "will attempt to change how the subject is viewed. Attempt, because view appears to be the least reliable keyword. These elements are placed in order of influence and supported by certain strength values. These basic settings produce very quick results close to the general look you want.": "tenterà di cambiare la modalità di visualizzazione dell'oggetto. Tentativo, perché view sembra essere la parola chiave meno affidabile. Questi elementi sono posti in ordine di influenza e supportati da determinati valori di forza. Queste impostazioni di base producono risultati molto rapidi vicini all'aspetto generale desiderato.",
+ "Moving on, adding a": "Andando avanti, aggiungendo a",
+ "will combine with": "si combinerà con",
+ "to influence how the result generally looks. These styles are based on classic and modern Painting/Art/design movements (which I picked after hours and thousands of samples of testing) and can have a strong influence on the end result. Either it will be more realistic or artistic, or look like a comic book etc. In general, this is a really strong element for getting the look you want. Its influence can be adjusted with the slider above. Experiment with the values, keeping in mind that anything above 1.5 will start becoming a mess. In a similar way, but more focused, you can select an": "per influenzare l'aspetto generale del risultato. Questi stili si basano su movimenti Pittura/Arte/design classici e moderni (che ho scelto dopo ore e migliaia di campioni di test) e possono avere una forte influenza sul risultato finale. O sarà più realistico o artistico, o assomiglierà a un fumetto, ecc. In generale, questo è un elemento davvero forte per ottenere l'aspetto che desideri. La sua influenza può essere regolata con il cursore in alto. Sperimenta con i valori, tenendo presente che qualsiasi cosa al di sopra di 1,5 inizierà a diventare un pasticcio. In modo simile, ma più mirato, puoi selezionare un",
+ "and, of course, that will have a very visible effect on the result as well. Currently there are 135 artists, 55 art styles and 25 emotions available for selection and represented with preview images.": "e, naturalmente, anche questo avrà un effetto molto visibile sul risultato. Attualmente ci sono 135 artisti, 55 stili artistici e 25 emozioni disponibili per la selezione e rappresentate con immagini di anteprima.",
+ "Strength of these settings has been preset at 1.3, as that appears to be the golden ratio for getting good results. Sometimes very low settings have an interesting result as well. You can, and should, freely mix and match these settings to get different results. Classic Painting styles affected or affecting 3D look quite interesting. Photography can look cool with some of the brighter, more artistic styles etc. Sometimes raising CFG scale to 15,20 or more also helps to REALLY push the style onto the image.": "La forza di queste impostazioni è stata preimpostata a 1,3, poiché sembra essere il rapporto aureo per ottenere buoni risultati. A volte anche impostazioni molto basse hanno un risultato interessante. Puoi, e dovresti, mescolare e abbinare liberamente queste impostazioni per ottenere risultati diversi. Gli stili di pittura classica influenzati o influenzati dal 3D sembrano piuttosto interessanti. La fotografia può sembrare interessante con alcuni degli stili più luminosi, più artistici, ecc. A volte aumentare la scala CFG a 15,20 o più aiuta anche a spingere VERAMENTE lo stile sull'immagine.",
+ "Advanced workflow": "Flusso di lavoro avanzato",
+ "StylePile can overtake the generation process, allowing you to generate a large amount of different results with very little extra work. There are two types of variables you can use: [X] and [R]. When you add an [X] to your prompt, it sequentially takes values from the": "StylePile può prendere il controllo del processo di generazione, consentendoti di generare una grande quantità di risultati diversi con pochissimo lavoro extra. Ci sono due tipi di variabili che puoi usare: [X] e [R]. Quando aggiungi una [X] al tuo prompt, prende in sequenza i valori da",
+ "Sequential prompts": "Prompt sequenziali",
+ "text area. You can have dozens of lines there and they will be processed in sequence. When you add [R] to the prompt a value from the": "area di testo. Puoi avere dozzine di righe lì e verranno elaborate in sequenza. Quando si aggiunge [R] al prompt un valore da",
+ "Random prompts": "Prompt casuali",
+ "text area will be inserted in its place. By combining these a huge variety in prompts is very easy to do.": "l'area di testo verrà inserita al suo posto. Combinando questi un'enorme varietà di prompt è molto facile da fare.",
+ "When using this,": "Quando si utilizza questo,",
+ "will move through the prompts and": "si sposterà attraverso i prompt e",
+ "will set how many copies with the given prompt to make. If the seed is not random, it will increase with each batch size step. Any random elements will still be picked randomly.": "imposterà quante copie fare con il prompt dato. Se il seme non è casuale, aumenterà ad ogni passaggio della dimensione del batch. Eventuali elementi casuali verranno comunque selezionati casualmente.",
+ "Tips and tricks": "Suggerimenti e trucchi",
+ "If you add your own Artist, I would recommend having \"by Artist\" in front of their name. Depending on Artist's popularity (or lack thereof) this appears to have a very tangible influence on the result.": "Se aggiungi il tuo artista, ti consiglio di avere \"per artista\" davanti al suo nome. A seconda della popolarità dell'artista (o della sua mancanza) questo sembra avere un'influenza molto tangibile sul risultato.",
+ "Parenthesis can be added to make pArts of the prompt stronger. So": "È possibile aggiungere parentesi per rendere più forti parti del prompt. Così",
+ "((cute kitten))": "((cute kitten))",
+ "will make it extra cute (try it out). This is also important if a style is affecting your original prompt too much. Make that prompt stronger by adding parenthesis around it, like this:": "lo renderà molto carino (provalo). Questo è importante anche se uno stile influisce troppo sul prompt originale. Rendi più forte quel prompt aggiungendo parentesi attorno ad esso, in questo modo:",
+ "((promt))": "((promt))",
+ ". A strength modifier value can also be used, like this": ". È anche possibile utilizzare un valore modificatore di forza, in questo modo",
+ "(prompt:1.1)": "(prompt:1.1)",
+ ". To save some typing you can select the line you want to make stronger and use": ". Per salvare un po' di digitazione puoi selezionare la linea che vuoi rendere più forte e utilizzare",
+ "Ctrl+Shift+Arrow keys up": "Ctrl+Shift+Freccia su",
+ "to add these parenthesis and change the value. As you can see by default values on most sliders, 1.3 seems like a good stArting point if you want to see some impact.": "per aggiungere queste parentesi e modificare il valore. Come puoi vedere per i valori predefiniti sulla maggior parte dei cursori, 1.3 sembra un buon punto di partenza se vuoi vedere un certo impatto.",
+ "Prompts can be split like": "I prompt possono essere divisi come",
+ "[A|B]": "[A|B]",
+ "to sequentially use terms, one after another on each step. For example": "per utilizzare in sequenza i termini, uno dopo l'altro in ogni passaggio. Per esempio",
+ "[cat|dog]": "[cat|dog]",
+ "will produce a hybrid catdog.": "produrrà un cane-gatto ibrido.",
+ "Using": "Usando",
+ "[A:B:0.4]": "[A:B:0.4]",
+ "will switch to other terms after the first one has been active for a certain percentage of steps. So": "passerà ad altri termini dopo che il primo è stato attivo per una certa percentuale di passaggi. Così",
+ "[cat:dog:0.4]": "[cat:dog:0.4]",
+ "will build a cat 40% of the time and then stArt turning it into a dog. Usually this needs more steps to work properly.": "costruirà un gatto il 40% delle volte e poi inizierà a trasformarlo in un cane. Di solito questo richiede più passaggi per funzionare correttamente.",
+ "In conclusion": "In conclusione",
+ "I made this because manually changing keywords, looking up possible styles, etc was a pain. It is meant as a fun tool to explore possibilities and make learning Stable Diffusion easier. If you have some ideas or, better yet, would like to contribute in some way*, just visit https://github.com/some9000/StylePile\n*Hey, if you have a 12Gb graphics card just laying around I'm happy to take it (:": "L'ho fatto perché cambiare manualmente le parole chiave, cercare possibili stili, ecc. era una seccatura. È inteso come uno strumento divertente per esplorare le possibilità e rendere più facile l'apprendimento della Diffusione stabile. Se hai qualche idea o, meglio ancora, vorresti contribuire in qualche modo*, visita pure https://github.com/some9000/StylePile\n*Hey, se hai una scheda grafica da 12 Gb in giro, sono felice di prenderla (:",
"Seeds": "Semi",
"Noise Scheduler": "Pianificazione del rumore",
"Default": "Predefinito",
@@ -217,7 +351,7 @@
"Prompt Template, applied to each keyframe below": "Modello di prompt, applicato a ciascun fotogramma chiave qui di seguito",
"Positive Prompts": "Prompt positivi",
"Negative Prompts": "Prompt negativi",
- "Props, Stamps": "Immagini Clipart da diffondere (prop), o da applicare in post elaborazione e non essere diffuse (stamp).",
+ "Props, Stamps": "Immagini Clipart da diffondere (prop), o da applicare in post elaborazione e non essere diffuse (stamp)",
"Poper_Folder:": "Cartella Immagini Clipart (PNG trasparenti):",
"Supported Keyframes:": "Fotogrammi chiave supportati:",
"time_s | source | video, images, img2img | path": "time_s | source | video, images, img2img | path",
@@ -239,7 +373,22 @@
"Keyframes:": "Fotogrammi chiave:",
"Tile X": "Piastrella asse X",
"Tile Y": "Piastrella asse Y",
+ "Number of images to generate": "Numero di immagini da generare",
"Python code": "Codice Python",
+ "Model": "Modello",
+ "dpt_large": "Depth large",
+ "dpt_hybrid": "Depth hybrid",
+ "midas_v21": "MIDAS v21",
+ "midas_v21_small": "MIDAS v21 small",
+ "Compute on": "Calcola",
+ "GPU": "GPU",
+ "CPU": "CPU",
+ "Save DepthMap": "Salva DepthMap",
+ "Show DepthMap": "Mostra DepthMap",
+ "Combine into one image.": "Combina in un'unica immagine.",
+ "Combine axis": "Combina gli assi",
+ "Vertical": "Verticale",
+ "Horizontal": "Orizzontale",
"Source embedding to convert": "Incorporamento sorgente da convertire",
"Embedding token": "Token Incorporamento",
"Output directory": "Cartella di output",
@@ -248,6 +397,16 @@
"Alt. symmetry method (blending)": "Metodo di simmetria alternativo (miscelazione)",
"Apply every n steps": "Applica ogni n passi",
"Skip last n steps": "Salta gli ultimi n passi",
+ "Usage: a wearing ": "Utilizzo: a wearing ",
+ "Mirror application mode": "modalità di applicazione specchiatura",
+ "Alternate Steps": "Passaggi alternati",
+ "Blend Average": "Miscelazione media",
+ "Mirror style": "Stile specchiatura",
+ "Vertical Mirroring": "Specchiatura verticale",
+ "Horizontal Mirroring": "Specchiatura orizzontale",
+ "90 Degree Rotation": "Rotazione 90 gradi",
+ "180 Degree Rotation": "Rotazione 180 gradi",
+ "Maximum steps fraction to mirror at": "Frazione di passi massima su cui eseguire la specchiatura",
"Interpolation prompt": "Prompt di interpolazione",
"Number of images": "Numero di immagini",
"Make a gif": "Crea GIF",
@@ -263,7 +422,7 @@
"Use same random seed for all lines": "Usa lo stesso seme casuale per tutte le righe",
"List of prompt inputs": "Elenco di prompt di input",
"Upload prompt inputs": "Carica un file contenente i prompt di input",
- "n": "Esegui n volte",
+ "n": "n",
"Destination seed(s) (Comma separated)": "Seme/i di destinazione (separati da virgola)",
"Only use Random seeds (Unless comparing paths)": "Usa solo semi casuali (a meno che non si confrontino i percorsi)",
"Number of random seed(s)": "Numero di semi casuali",
@@ -296,13 +455,6 @@
"Transparent PNG": "PNG trasparente",
"Noise Tolerance": "Tolleranza al rumore",
"Quantize": "Quantizzare",
- "Dry Run": "Esecuzione a vuoto (Debug)",
- "NEW!": "NUOVO!",
- "Premium Fantasy Card Template": "Premium Fantasy Card Template",
- "is now available.": "è ora disponibile.",
- "Generate a wide variety of creatures and characters in the style of a fantasy card game. Perfect for heroes, animals, monsters, and even crazy hybrids.": "Genera un'ampia varietà di creature e personaggi nello stile di un gioco di carte fantasy. Perfetto per eroi, animali, mostri e persino ibridi incredibili.",
- "Learn More ➜": "Per saperne di più ➜",
- "Purchases help fund the continued development of Unprompted. Thank you for your support!": "Gli acquisti aiutano a finanziare il continuo sviluppo di Unprompted. Grazie per il vostro sostegno!",
"X type": "Parametro asse X",
"Nothing": "Niente",
"Var. seed": "Seme della variazione",
@@ -347,8 +499,8 @@
"Prompt words after artist or style name": "Parole chiave dopo il nome dell'artista o dello stile",
"Negative Prompt": "Prompt negativo",
"Save": "Salva",
- "Send to img2img": "Invia a img2img",
- "Send to inpaint": "Invia a Inpaint",
+ "Send to img2img": "Invia a\nimg2img",
+ "Send to inpaint": "Invia a\nInpaint",
"Send to extras": "Invia a Extra",
"Make Zip when Save?": "Crea un file ZIP quando si usa 'Salva'",
"Textbox": "Casella di testo",
@@ -381,7 +533,7 @@
"Just resize": "Ridimensiona solamente",
"Crop and resize": "Ritaglia e ridimensiona",
"Resize and fill": "Ridimensiona e riempie",
- "Advanced loopback": "Advanced loopback",
+ "Advanced loopback": "Elaborazione ricorsiva avanzata",
"External Image Masking": "Immagine esterna per la mascheratura",
"img2img alternative test": "Test alternativo per img2img",
"img2tiles": "img2tiles",
@@ -408,9 +560,9 @@
"Saturation enhancement per image": "Miglioramento della saturazione per ciascuna immagine",
"Use sine denoising strength variation": "Utilizzare la variazione sinusoidale dell'intensità di riduzione del rumore",
"Phase difference": "Differenza di Fase",
- "Denoising strength exponentiation": "Esponenziazione dell'intensità di riduzione del rumore",
+ "Denoising strength exponentiation": "Esponente intensità denoising",
"Use sine zoom variation": "Usa la variazione sinusoidale dello zoom",
- "Zoom exponentiation": "Esponeniazione dello Zoom",
+ "Zoom exponentiation": "Esponente Zoom",
"Use multiple prompts": "Usa prompt multipli",
"Same seed per prompt": "Stesso seme per ogni prompt",
"Same seed for everything": "Stesso seme per tutto",
@@ -460,7 +612,7 @@
"right": "destra",
"up": "sopra",
"down": "sotto",
- "Fall-off exponent (lower=higher detail)": "Esponente di decremento (più basso=maggior dettaglio)",
+ "Fall-off exponent (lower=higher detail)": "Esponente di decremento (più basso = maggior dettaglio)",
"Color variation": "Variazione di colore",
"Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Aumenterà l'immagine al doppio delle dimensioni; utilizzare i cursori di larghezza e altezza per impostare la dimensione della piastrella",
"Upscaler": "Ampliamento immagine",
@@ -523,7 +675,7 @@
"CodeFormer visibility": "Visibilità CodeFormer",
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "Peso di CodeFormer (0 = effetto massimo, 1 = effetto minimo)",
"Upscale Before Restoring Faces": "Amplia prima di restaurare i volti",
- "Send to txt2img": "Invia a txt2img",
+ "Send to txt2img": "Invia a\ntxt2img",
"A merger of the two checkpoints will be generated in your": "I due checkpoint verranno fusi nella cartella dei",
"checkpoint": "checkpoint",
"directory.": ".",
@@ -623,20 +775,75 @@
"Train Embedding": "Addestra Incorporamento",
"Create an aesthetic embedding out of any number of images": "Crea un'incorporamento estetico da qualsiasi numero di immagini",
"Create images embedding": "Crea incorporamento di immagini",
+ "Generate Krita Plugin Symlink Command": "Genera comando per creare collegamento simbolico del plugin Krita",
+ "Launch Krita.": "Avvia Krita.",
+ "On the menubar, go to": "Sulla barra dei menu, vai a",
+ "Settings > Manage Resources...": "Settings > Manage Resources...",
+ "In the window that appears, click": "Nella finestra che appare, fai clic su",
+ "Open Resource Folder": "Open Resource Folder",
+ "In the file explorer that appears, look for a folder called": "In Esplora file, una volta aperto, cerca una cartella chiamata",
+ "pykrita": "pykrita",
+ "or create it.": "o creala.",
+ "Enter the": "Entra nella",
+ "folder and copy the folder location from the address bar.": "cartella e copia il percorso della cartella dalla barra degli indirizzi.",
+ "Paste the folder location below.": "Incolla il percorso della cartella qui di seguito.",
+ "Pykrita Folder Location": "Posizione della cartella Pykrita",
+ "Search for \"Command Prompt\" in the Start Menu, right-click and click \"Run as Administrator...\", paste the follow commands and hit Enter:": "Cerca \"Prompt dei comandi\" nel menu Start, fai clic con il pulsante destro del mouse e fai clic su \"Esegui come amministratore...\", incolla i seguenti comandi e premi Invio:",
+ "mklink /j \"\\krita_diff\" \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff\"\nmklink \"\\krita_diff.desktop\" \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff.desktop\"": "mklink /j \"\\krita_diff\" \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff\"\nmklink \"\\krita_diff.desktop\" \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff.desktop\"",
+ "Linux command:": "comando Linux:",
+ "ln -s \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff\" \"/krita_diff\"\nln -s \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff.desktop\" \"/krita_diff.desktop\"": "ln -s \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff\" \"/krita_diff\"\nln -s \"C:\\stable-diffusion-webui\\extensions\\auto-sd-paint-ext\\frontends\\krita\\krita_diff.desktop\" \"/krita_diff.desktop\"",
+ "NOTE": "NOTE",
+ ": Symlinks will break if you move or rename the repository or any\nof its parent folders or otherwise change the path such that the symlink\nbecomes invalid. In which case, repeat the above steps with the new": ": I collegamenti simbolici si interrompono se si sposta o si rinomina il repository o una qualsiasi\n delle sue cartelle principali o si modifica in altro modo il percorso in modo tale che il collegamento simbolico\ndiventi non valido. In tal caso, ripetere i passaggi precedenti con il nuovo ",
+ "folder location and (auto-detected) repository location.": "percorso della cartella e percorso del repository (rilevato automaticamente).",
+ ": Ensure": ": Assicurarsi che",
+ "webui-user.bat": "webui-user.bat",
+ "/": "/",
+ "webui-user.sh": "webui-user.sh",
+ "contains": "contenga",
+ "--api": "--api",
+ "in": "in",
+ "COMMANDLINE_ARGS": "COMMANDLINE_ARGS",
+ "!": "!",
+ "Enabling the Krita Plugin": "Abilitazione del plugin Krita",
+ "Restart Krita.": "Riavvia Krita.",
+ "Settings > Configure Krita...": "Settings > Configure Krita...",
+ "On the left sidebar, go to": "Nella barra laterale sinistra, vai a",
+ "Python Plugin Manager": "Python Plugin Manager",
+ "Look for": "Cerca",
+ "Stable Diffusion Plugin": "Stable Diffusion Plugin",
+ "and tick the checkbox.": "e spunta la casella.",
+ "Restart Krita again for changes to take effect.": "Riavvia Krita per rendere effettive le modifiche.",
+ "The": "Il",
+ "SD Plugin": "SD Plugin",
+ "docked window should appear on the left of the Krita window. If it does not, look on the menubar under": "dovrebbe apparire come finestra ancorata a sinistra della finestra di Krita. In caso contrario, guarda nella barra dei menu sotto",
+ "Settings > Dockers": "Settings > Dockers",
+ "for": "per",
+ "Next Steps": "Prossimi passi",
+ "Troubleshooting": "Risoluzione dei problemi",
+ "Update Guide": "Guida all'aggiornamento",
+ "Usage Guide": "Guida all'uso",
+ "TODO: Control/status panel": "TODO: pannello di controllo/stato",
"-1": "-1",
"This extension works well with text captions in comma-separated style (such as the tags generated by DeepBooru interrogator).": "Questa estensione funziona bene con i sottotitoli di testo in stile separato da virgole (come i tag generati dall'interrogatore DeepBooru).",
"Save all changes": "Salva tutte le modifiche",
"Backup original text file (original file will be renamed like filename.000, .001, .002, ...)": "Backup del file di testo originale (il file originale verrà rinominato come nomefile.000, .001, .002, ...)",
"Note:": "Note:",
- "New text file will be created if you are using filename as captions.": "Verrà creato un nuovo file di testo se si utilizza il nome del file come didascalia.",
+ "New text file will be created if you are using filename as captions.": " Verrà creato un nuovo file di testo se si utilizza il nome del file come didascalia.",
"Results": "Risultati",
"Load": "Carica",
+ "Load from subdirectories": "Carica da sotto cartella",
"Dataset Images": "Immagini del Dataset",
+ "Displayed Images : 0 / 0 total": "Immagini mostrate : 0 / 0 totali",
+ "Current Tag Filter :": "Filtro Tag corrente :",
+ "Current Selection Filter : 0 images": "Filtro di selezione corrente : 0 immagini",
+ "Selected Image :": "Immagine selezionata :",
"Filter and Edit Tags": "Filtra e modifica i tag",
+ "Filter by Selection": "Filtra per selezione",
"Edit Caption of Selected Image": "Modifica la didascalia dell'immagine selezionata",
"Search tags / Filter images by tags": "Cerca tag / Filtra le immagini per tag",
"Search Tags": "Cerca tag",
- "Clear all filters": "Rimuovi tutti i filtri",
+ "Clear tag filters": "Cancella i filtri dei tag",
+ "Clear ALL filters": "Rimuovi tutti i filtri",
"Sort by": "Ordina per",
"Alphabetical Order": "Ordine alfabetico",
"Frequency": "Frequenza",
@@ -664,6 +871,13 @@
"ex C.": "esempio C.",
"Original Text = \"A, B, C, D, E\" Selected Tags = \"A, B, D\" Edit Tags = \", X, \"": "Testo originale = \"A, B, C, D, E\" Tag selezionati = \"A, B, D\" Modifica tag = \", X, \"",
"Result = \"X, C, E\" (A->\"\", B->X, D->\"\")": "Risultato = \"X, C, E\" (A->\"\", B->X, D->\"\")",
+ "Select images from the left gallery.": "Seleziona le immagini dalla galleria di sinistra.",
+ "Add selection [Enter]": "Aggiungi selezione [Invio]",
+ "Filter Images": "Filtra le immagini",
+ "Remove selection [Delete]": "Rimuovi selezione [Canc]",
+ "Invert selection": "Inverti selezione",
+ "Clear selection": "Cancella selezione",
+ "Apply selection filter": "Applica il filtro di selezione",
"Caption of Selected Image": "Didascalia dell'immagine selezionata",
"Copy caption": "Copia didascalia",
"Edit Caption": "Modifica didascalia",
@@ -768,7 +982,7 @@
"bilinear": "bilinear",
"nearest": "nearest",
"save_depth_maps": "Salva le mappe di profondità",
- "`animation_mode: None` batches on list of *prompts*. (Batch mode disabled atm, only animation_prompts are working)": "`modalità animazione: Nessuno` si inserisce nell'elenco di *prompt*. (Modalità batch disabilitata atm, funzionano solo i prompt di animazione)",
+ "`animation_mode: None` batches on list of *prompts*. (Batch mode disabled atm, only animation_prompts are working)": "`modalità animazione: Nessuno` si inserisce nell'elenco di *prompt*. (Modalità batch al momento disabilitata, funzionano solo i prompt di animazione)",
"*Important change from vanilla Deforum!*": "*Importante cambiamento rispetto alla versione originale di Deforum!*",
"This script uses the built-in webui weighting settings.": "Questo script utilizza le impostazioni di pesatura webui integrate.",
"So if you want to use math functions as prompt weights,": "Quindi, se vuoi usare le funzioni matematiche come pesi dei prompt,",
@@ -783,12 +997,16 @@
"strength": "Intensità",
"init_image": "Immagine di inizializzazione",
"use_mask": "Usa maschera",
- "use_alpha_as_mask": "Usa alpha come maschera",
+ "use_alpha_as_mask": "Usa Alpha come maschera",
"invert_mask": "Inverti la maschera",
"overlay_mask": "Sovrapponi la maschera",
"mask_file": "File della maschera",
+ "mask_contrast_adjust": "regolazione contrasto maschera",
"mask_brightness_adjust": "Regola la luminosità della maschera",
"mask_overlay_blur": "Sfocatura della sovrapposizione della maschera",
+ "mask_fill": "riempimento maschera",
+ "full_res_mask": "maschera a piena risoluzione",
+ "full_res_mask_padding": "riempimento maschera a piena risoluzione",
"Video Input:": "Ingresso video:",
"video_init_path": "Percorso del video di inizializzazione",
"extract_nth_frame": "Estrai ogni ennesimo fotogramma",
@@ -819,6 +1037,7 @@
"image_path": "Percorso immagine",
"mp4_path": "Percorso MP4",
"Click here after the generation to show the video": "Clicca qui dopo la generazione per mostrare il video",
+ "Close the video": "Chiudi il video",
"NOTE: If the 'Generate' button doesn't work, go in Settings and click 'Restart Gradio and Refresh...'.": "NOTA: se il pulsante 'Genera' non funziona, vai in Impostazioni e fai clic su 'Riavvia Gradio e Aggiorna...'.",
"Save Settings": "Salva le impostazioni",
"Load Settings": "Carica le impostazioni",
@@ -829,7 +1048,6 @@
"house": "casa",
"portrait": "ritratto",
"spaceship": "nave spaziale",
- "anime": "anime",
"cartoon": "cartoon",
"digipa-high-impact": "digipa-high-impact",
"digipa-med-impact": "digipa-med-impact",
@@ -936,8 +1154,8 @@
"set_index": "Imposta indice",
"load_switch": "Carica",
"turn_page_switch": "Volta pagina",
- "Checkbox": "Casella di controllo",
- "Checkbox Group": "Seleziona immagini per",
+ "Checkbox": "Selezione",
+ "Checkbox Group": "Seleziona per",
"artists": "Artisti",
"flavors": "Stili",
"mediums": "Tecniche",
@@ -947,12 +1165,24 @@
"Abandoned": "Scartati",
"Key word": "Parola chiave",
"Get inspiration": "Ispirami",
- "to txt2img": "Invia a txt2img",
- "to img2img": "Invia a img2img",
+ "to txt2img": "Invia a\ntxt2img",
+ "to img2img": "Invia a\nimg2img",
"Collect": "Salva nei preferiti",
"Don't show again": "Scarta",
"Move out": "Rimuovi",
- "set button": "Pulsante imposta",
+ "set button": "Pulsante imposta",
+ "Before your text is sent to the neural network, it gets turned into numbers in a process called tokenization. These tokens are how the neural network reads and interprets text. Thanks to our great friends at Shousetsu愛 for inspiration for this feature.": "Prima che il tuo testo venga inviato alla rete neurale, verrà trasformato in numeri in un processo chiamato tokenizzazione. Questi token sono il modo in cui la rete neurale legge e interpreta il testo. Grazie ai nostri grandi amici di Shousetsu愛 per l'ispirazione per questa funzione.",
+ "Tokenize": "Tokenizzare",
+ "Text": "Testo",
+ "Tokens": "Token",
+ "Video to extract frames from:": "Video da cui estrarre fotogrammi:",
+ "Only extract keyframes (recommended)": "Estrae solo fotogrammi chiave (consigliato)",
+ "Extract Frames": "Estrai fotogrammi",
+ "Extracted Frame Set": "Set di fotogrammi estratti",
+ "Resize crops to 512x512": "Ridimensiona i ritagli a 512x512",
+ "Save crops to:": "Salva ritagli in:",
+ "<": "<",
+ ">": ">",
"Apply settings": "Applica le impostazioni",
"Saving images/grids": "Salva immagini/griglie",
"Always save all generated images": "Salva sempre tutte le immagini generate",
@@ -1007,6 +1237,7 @@
"Add a second progress bar to the console that shows progress for an entire job.": "Aggiungi una seconda barra di avanzamento alla console che mostra l'avanzamento complessivo del lavoro.",
"Training": "Addestramento",
"Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "Sposta VAE e CLIP nella RAM durante l'addestramento di Iperreti. Risparmia VRAM.",
+ "Saves Optimizer state as separate *.optim file. Training can be resumed with HN itself and matching optim file.": "Salva lo stato dell'ottimizzatore come file *.optim separato. L'addestramento può essere ripreso con lo stesso HN e il file optim corrispondente.",
"Filename word regex": "Espressione regolare per estrarre parole dal nome del file",
"Filename join string": "Stringa per unire le parole estratte dal nome del file",
"Number of repeats for a single input image per epoch; used only for displaying epoch number": "Numero di ripetizioni per una singola immagine di input per epoca; utilizzato solo per visualizzare il numero di epoca",
@@ -1111,10 +1342,14 @@
"aesthetic-gradients": "Gradienti Estetici (CLIP)",
"https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients": "https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients",
"unknown": "sconosciuto",
+ "auto-sd-paint-ext": "KRITA Plugin",
+ "https://github.com/Interpause/auto-sd-paint-ext": "https://github.com/Interpause/auto-sd-paint-ext",
"dataset-tag-editor": "Dataset Tag Editor",
"https://github.com/toshiaki1729/stable-diffusion-webui-dataset-tag-editor.git": "https://github.com/toshiaki1729/stable-diffusion-webui-dataset-tag-editor.git",
"deforum-for-automatic1111-webui": "Deforum",
"https://github.com/deforum-art/deforum-for-automatic1111-webui": "https://github.com/deforum-art/deforum-for-automatic1111-webui",
+ "novelai-2-local-prompt": "Converti NovelAI",
+ "https://github.com/animerl/novelai-2-local-prompt": "https://github.com/animerl/novelai-2-local-prompt",
"sd-dynamic-prompts": "Prompt dinamici",
"https://github.com/adieyal/sd-dynamic-prompts": "https://github.com/adieyal/sd-dynamic-prompts",
"stable-diffusion-webui-aesthetic-image-scorer": "Punteggio immagini estetiche",
@@ -1125,8 +1360,14 @@
"https://github.com/yfszzx/stable-diffusion-webui-images-browser": "https://github.com/yfszzx/stable-diffusion-webui-images-browser",
"stable-diffusion-webui-inspiration": "Ispirazione",
"https://github.com/yfszzx/stable-diffusion-webui-inspiration": "https://github.com/yfszzx/stable-diffusion-webui-inspiration",
+ "stable-diffusion-webui-tokenizer": "Tokenizzatore",
+ "https://github.com/AUTOMATIC1111/stable-diffusion-webui-tokenizer.git": "https://github.com/AUTOMATIC1111/stable-diffusion-webui-tokenizer.git",
"tag-autocomplete": "Autocompletamento etichette",
"https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git": "https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git",
+ "training-picker": "Selezionatore per l'addestramento",
+ "https://github.com/Maurdekye/training-picker.git": "https://github.com/Maurdekye/training-picker.git",
+ "unprompted": "Unprompted",
+ "https://github.com/ThereforeGames/unprompted": "https://github.com/ThereforeGames/unprompted",
"wildcards": "Termini Jolly",
"https://github.com/AUTOMATIC1111/stable-diffusion-webui-wildcards.git": "https://github.com/AUTOMATIC1111/stable-diffusion-webui-wildcards.git",
"Load from:": "Carica da:",
@@ -1161,7 +1402,8 @@
"Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Prova a produrre un'immagine simile a quella che sarebbe stata prodotta con lo stesso seme alla risoluzione specificata",
"This text is used to rotate the feature space of the imgs embs": "Questo testo viene utilizzato per ruotare lo spazio delle funzioni delle immagini incorporate",
"How many times to repeat processing an image and using it as input for the next iteration": "Quante volte ripetere l'elaborazione di un'immagine e utilizzarla come input per l'iterazione successiva",
- "Hello, StylePile here.\nUntil some weird bug gets fixed you will see this even if the script itself is not active. Meanwhile, some hints to take your artwork to new heights:\nUse the 'Focus on' dropdown to select complex presets. Toggle selections below (with or without Focus) to affect your results. Mix and match to get some interesting results. \nAnd some general Stable Diffusion tips that will take your designs to next level:\nYou can add parenthesis to make parts of the prompt stronger. So (((cute))) kitten will make it extra cute (try it out). This is alsow important if a style is affecting your original prompt too much. Make that prompt stronger by adding parenthesis around it, like this: ((promt)).\nYou can type promts like [A|B] to sequentially use terms one after another on each step. So, like [cat|dog] will produce a hybrid catdog. And [A:B:0.4] to switch to other terms after the first one has been active for a certain percentage of steps. So [cat:dog:0.4] will build a cat 40% of the time and then start turning it into a dog. This needs more steps to work properly.": "Salve, qui è StylePile.\nFinché qualche strano bug non verrà risolto, vedrai questo testo anche se lo script non è attivo. Nel frattempo, alcuni suggerimenti per portare la tua grafica a nuovi livelli:\nUtilizza il menu a discesa 'Focus on' per selezionare valori predefiniti complessi. Attiva o disattiva le selezioni seguenti (con o senza Focus) per influire sui risultati. Mescola e abbina per ottenere risultati interessanti. \nE alcuni suggerimenti generali su Stable Diffusion che porteranno i tuoi risultati a un livello superiore:\nPuoi aggiungere parentesi per aumentare l'influenza di certe parti del prompt. Quindi '(((cute))) kitten' lo renderà molto carino (fai delle prove). Questo è importante quando uno stile influisce troppo sul prompt originale. Rendi più forte quel prompt aggiungendo delle parentesi intorno ad esso, così: ((promt)).\nPuoi digitare prompt nel formato [A|B] per usare in sequenza i termini uno dopo l'altro in ogni passaggio. Quindi, come [cat|dog] produrrà un 'canegatto' ibrido. E [A:B:0.4] per passare ad altri termini dopo che il primo è stato attivo per una certa percentuale di passaggi. Quindi [cat:dog:0.4] genererà un gatto il 40% dei passaggi e poi inizierà a trasformarlo in un cane. Sono richiesti più passaggi perchè funzioni correttamente.",
+ "Insert [X] anywhere in main prompt to sequentially insert values from here.": "Inserisci [X] ovunque nel prompt principale per inserire in sequenza i valori da qui.",
+ "Insert [R] anywhere in main prompt to randomly insert values from here.": "Inserisci [R] ovunque nel prompt principale per inserire i valori in modo casuale da qui.",
"Enter one prompt per line. Blank lines will be ignored.": "Immettere un prompt per riga. Le righe vuote verranno ignorate.",
"Separate values for X axis using commas.": "Separare i valori per l'asse X usando le virgole.",
"Separate values for Y axis using commas.": "Separare i valori per l'asse Y usando le virgole.",
@@ -1188,8 +1430,10 @@
"1st and last digit must be 1. ex:'1, 2, 1'": "La prima e l'ultima cifra devono essere 1. Es.:'1, 2, 1'",
"Path to directory with input images": "Percorso della cartella con immagini di input",
"Path to directory where to write outputs": "Percorso della cartella in cui scrivere i risultati",
+ "C:\\\\...\\pykrita": "C:\\\\...\\pykrita",
"C:\\directory\\of\\datasets": "C:\\cartella\\del\\dataset",
"Input images directory": "Cartella di input delle immagini",
+ "Prompt for tokenization": "Prompt for tokenization",
"Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Usa i seguenti tag per definire come vengono scelti i nomi dei file per le immagini: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed ], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; lasciare vuoto per usare l'impostazione predefinita.",
"If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "Se questa opzione è abilitata, la filigrana non verrà aggiunta alle immagini create. Attenzione: se non aggiungi la filigrana, potresti comportarti in modo non etico.",
"Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Utilizzare i seguenti tag per definire come vengono scelte le sottodirectory per le immagini e le griglie: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; lasciare vuoto per usare l'impostazione predefinita.",
@@ -1200,24 +1444,103 @@
"List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "Elenco dei nomi delle impostazioni, separati da virgole, per le impostazioni che dovrebbero essere visualizzate nella barra di accesso rapido in alto, anziché nella normale scheda delle impostazioni. Vedi modules/shared.py per impostare i nomi. Richiede il riavvio per applicare.",
"If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "Se questo valore è diverso da zero, verrà aggiunto al seed e utilizzato per inizializzare il generatore di numeri casuali per il rumore quando si utilizzano campionatori con ETA. Puoi usarlo per produrre ancora più variazioni di immagini, oppure puoi usarlo per abbinare le immagini di altri software se sai cosa stai facendo.",
"Leave empty for auto": "Lasciare vuoto per automatico",
+ "NAIConvert": "Converti\nNovelAI",
+ "History": "Crononolgia",
+ "specify a custom settings file and ignore settings displayed in the interface": "specificare un file di impostazioni personalizzate e ignorare le impostazioni visualizzate nell'interfaccia",
+ "the path to a custom settings file": "il percorso di un file delle impostazioni personalizzate",
+ "The width of the output images, in pixels (must be a multiple of 64)": "La larghezza delle immagini di output, in pixel (deve essere un multiplo di 64)",
+ "The height of the output images, in pixels (must be a multiple of 64)": "L'altezza delle immagini di output, in pixel (deve essere un multiplo di 64)",
+ "enable additional seed settings": "abilitare impostazioni seme aggiuntive",
+ "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "Quante volte migliorare l'immagine generata in modo iterativo; valori più alti richiedono più tempo; valori molto bassi possono produrre risultati negativi",
+ "output images will be placed in a folder with this name, inside of the img2img output folder": "le immagini di output verranno collocate in una cartella con questo nome, all'interno della cartella di output img2img",
+ "specify the format of the filename for output images": "specificare il formato del nome file per le immagini di output",
+ "defines the seed behavior that is used for animations": "definisce il comportamento del seme utilizzato per le animazioni",
+ "the seed value will increment by 1 for each subsequent frame of the animation": "il valore del seme aumenterà di 1 per ogni fotogramma successivo dell'animazione",
+ "selects the type of animation": "seleziona il tipo di animazione",
+ "only 2D motion parameters will be used, but this mode uses the least amount of VRAM. You can optionally enable flip_2d_perspective to enable some psuedo-3d animation parameters while in 2D mode.": "verranno utilizzati solo i parametri di movimento 2D, ma questa modalità utilizza la quantità minima di VRAM. Puoi facoltativamente abilitare flip_2d_perspective per abilitare alcuni parametri di animazione psuedo-3d mentre sei in modalità 2D.",
+ "the maximum number of output images to be created": "il numero massimo di immagini di output da creare",
+ "controls handling method of pixels to be generated when the image is smaller than the frame.": "controlla il metodo di gestione dei pixel da generare quando l'immagine è più piccola del fotogramma.",
+ "repeats the edge of the pixels, and extends them. Animations with quick motion may yield lines where this border function was attempting to populate pixels into the empty space created.": "ripete il bordo dei pixel e li estende. Le animazioni con movimento rapido possono produrre linee in cui questa funzione di bordo stava tentando di popolare i pixel nello spazio vuoto creato.",
+ "2D operator to rotate canvas clockwise/anticlockwise in degrees per frame": "Operatore 2D per ruotare la tela in senso orario/antiorario in gradi per fotogramma",
+ "2D operator that scales the canvas size, multiplicatively. [static = 1.0]": "Operatore 2D che ridimensiona le dimensioni della tela, in modo moltiplicativo. [statico = 1.0]",
+ "2D & 3D operator to move canvas left/right in pixels per frame": "Operatore 2D e 3D per spostare la tela a sinistra/destra in pixel per fotogramma",
+ "2D & 3D operator to move canvas up/down in pixels per frame": "Operatore 2D e 3D per spostare la tela su/giù in pixel per fotogramma",
+ "3D operator to move canvas towards/away from view [speed set by FOV]": "Operatore 3D per spostare la tela da/verso la visuale [velocità impostata da FOV]",
+ "3D operator to tilt canvas up/down in degrees per frame": "Operatore 3D per inclinare la tela su/giù in gradi per fotogramma",
+ "3D operator to pan canvas left/right in degrees per frame": "Operatore 3D per eseguire una panoramica della tela a sinistra/destra in gradi per fotogramma",
+ "3D operator to roll canvas clockwise/anticlockwise": "Operatore 3D per ruotare la tela in senso orario/antiorario",
+ "enables 2D mode functions to simulate faux 3D movement": "abilita le funzioni della modalità 2D per simulare falsi movimenti 3D",
+ "the roll effect angle": "l'angolo dell'effetto di rollio",
+ "the tilt effect angle": "l'angolo dell'effetto di inclinazione",
+ "the pan effect angle": "l'angolo dell'effetto panoramica",
+ "the 2D vanishing point of perspective (recommended range 30-160)": "il punto di fuga prospettico 2D (intervallo consigliato 30-160)",
+ "amount of graininess to add per frame for diffusion diversity": "quantità di granulosità da aggiungere per fotogramma per la diversità di diffusione",
+ "amount of presence of previous frame to influence next frame, also controls steps in the following formula [steps - (strength_schedule * steps)]": "quantità di presenza del fotogramma precedente per influenzare il fotogramma successivo, controlla anche i passaggi nella seguente formula [passi - (forza pianificazione * steps)]",
+ "adjusts the overall contrast per frame [default neutral at 1.0]": "regola il contrasto generale per fotogramma [neutro predefinito a 1.0]",
+ "how closely the image should conform to the prompt. Lower values produce more creative results. (recommended range 5-15)": "quanto l'immagine deve essere conforme al prompt. Valori più bassi producono risultati più creativi. (intervallo consigliato 5-15)",
+ "adjusts the scale at which the canvas is moved in 3D by the translation_z value. [maximum range -180 to +180, with 0 being undefined. Values closer to 180 will make the image have less depth, while values closer to 0 will allow more depth]": "regola la scala alla quale la tela viene spostata in 3D in base al valore traslazione_z. [intervallo massimo da -180 a +180, con 0 non definito. Valori più vicini a 180 renderanno l'immagine meno profonda, mentre valori più vicini a 0 consentiranno una maggiore profondità]",
+ "allows you to specify seeds at a specific schedule, if seed_behavior is set to schedule.": "ti consente di specificare i semi in base a una pianificazione specifica, se seed_behavior è impostato su pianificazione.",
+ "The color coherence will attempt to sample the overall pixel color information, and trend those values analyzed in the first frame to be applied to future frames.": "La coerenza del colore tenterà di campionare le informazioni complessive sul colore dei pixel e tendere quei valori analizzati nel primo fotogramma da applicare ai fotogrammi futuri.",
+ "LAB is a more linear approach to mimic human perception of color space - a good default setting for most users.": "LAB è un approccio più lineare per imitare la percezione umana dello spazio colore, una buona impostazione predefinita per la maggior parte degli utenti.",
+ "The default setting of 1 will cause every frame to receive diffusion in the sequence of image outputs. A setting of 2 will only diffuse on every other frame, yet motion will still be in effect. The output of images during the cadence sequence will be automatically blended, additively and saved to the specified drive. This may improve the illusion of coherence in some workflows as the content and context of an image will not change or diffuse during frames that were skipped. Higher values of 4-8 cadence will skip over a larger amount of frames and only diffuse the “Nth” frame as set by the diffusion_cadence value. This may produce more continuity in an animation, at the cost of little opportunity to add more diffused content. In extreme examples, motion within a frame will fail to produce diverse prompt context, and the space will be filled with lines or approximations of content - resulting in unexpected animation patterns and artifacts. Video Input & Interpolation modes are not affected by diffusion_cadence.": "L'impostazione predefinita di 1 farà sì che ogni fotogramma riceva la diffusione nella sequenza di output delle immagini. Un'impostazione di 2 si diffonderà solo su ogni altro fotogramma, ma il movimento sarà comunque attivo. L'output delle immagini durante la sequenza di cadenza verrà automaticamente miscelato, additivato e salvato nell'unità specificata. Ciò può migliorare l'illusione di coerenza in alcuni flussi di lavoro poiché il contenuto e il contesto di un'immagine non cambiano o si diffondono durante i fotogrammi che sono stati ignorati. Valori più alti di 4-8 cadenza salteranno una quantità maggiore di fotogrammi e diffonderanno solo il fotogramma 'Nth' come impostato dal valore di diffusione_cadenza. Ciò può produrre più continuità in un'animazione, a costo di poche opportunità di aggiungere contenuti più diffusi. In esempi estremi, il movimento all'interno di un fotogramma non riuscirà a produrre un contesto di richiesta diverso e lo spazio sarà riempito con linee o approssimazioni di contenuto, risultando in modelli di animazione e artefatti inaspettati. Le modalità di ingresso video e interpolazione non sono influenzate da diffusion_cadence.",
+ "enables instructions to warp an image dynamically in 3D mode only.": "abilita le istruzioni per deformare un'immagine dinamicamente solo in modalità 3D.",
+ "sets a midpoint at which a depthmap is to be drawn: range [-1 to +1]": "imposta un punto medio in cui deve essere disegnata una mappa di profondità: range [da -1 a +1]",
+ "instructs the handling of pixels outside the field of view as they come into the scene.": "indica la gestione dei pixel al di fuori del campo visivo quando entrano nella scena.",
+ "choose from Bicubic, Bilinear or Nearest modes. (Recommended: Bicubic)": "scegliere tra le modalità Bicubico, Bilineare o Più vicino. (Consigliato: Bicubico)",
+ "will output a greyscale depth map image alongside the output images.": "produrrà un'immagine della mappa di profondità in scala di grigi insieme alle immagini di output.",
+ "Diffuse the first frame based on an image, similar to img2img.": "Diffondi il primo fotogramma in base a un'immagine, simile a img2img.",
+ "Set the strength to 0 automatically when no init image is used": "Imposta automaticamente l'intensità su 0 quando non viene utilizzata alcuna immagine iniziale",
+ "Controls the strength of the diffusion on the init image. 0 = disabled": "Controlla l'intensità della diffusione sull'immagine iniziale 0 = disabilitato",
+ "the path to your init image": "il percorso alla tua immagine iniziale",
+ "Use a grayscale image as a mask on your init image. Whiter areas of the mask are areas that change more.": "Usa un'immagine in scala di grigi come maschera sull'immagine iniziale. Le aree più bianche della maschera sono aree che cambiano di più.",
+ "use the alpha channel of the init image as the mask": "usa il canale alfa dell'immagine iniziale come maschera",
+ "Inverts the colors of the mask": "Inverte i colori della maschera",
+ "Overlay the masked image at the end of the generation so it does not get degraded by encoding and decoding": "Sovrapponi l'immagine mascherata alla fine della generazione in modo che non venga degradata dalla codifica e dalla decodifica",
+ "the path to your mask image": "il percorso per l'immagine della maschera",
+ "adjust the brightness of the mask. Should be a positive number, with 1.0 meaning no adjustment.": "regola la luminosità della maschera. Dovrebbe essere un numero positivo, con 1.0 che significa nessuna correzione.",
+ "Blur edges of final overlay mask, if used. Minimum = 0 (no blur)": "Sfoca i bordi della maschera di sovrapposizione finale, se utilizzata. Minimo = 0 (nessuna sfocatura)",
+ "the directory at which your video file is located for Video Input mode only.": "la cartella in cui si trova il file video per la modalità solo Ingresso video.",
+ "during the run sequence, only frames specified by this value will be extracted, saved, and diffused upon. A value of 1 indicates that every frame is to be accounted for. Values of 2 will use every other frame for the sequence. Higher values will skip that number of frames respectively.": "durante la sequenza di esecuzione, verranno estratti, salvati e diffusi solo i frame specificati da questo valore. Un valore di 1 indica che deve essere contabilizzato ogni frame. I valori di 2 utilizzeranno ogni altro fotogramma per la sequenza. Valori più alti salteranno rispettivamente quel numero di fotogrammi.",
+ "when enabled, will re-extract video frames each run. When using video_input mode, the run will be instructed to write video frames to the drive. If you’ve already populated the frames needed, uncheck this box to skip past redundant extraction, and immediately start the render. If you have not extracted frames, you must run at least once with this box checked to write the necessary frames.": "quando abilitato, estrarrà nuovamente i fotogrammi video ad ogni esecuzione. Quando si utilizza la modalità Ingresso video, all'esecuzione verrà richiesto di scrivere fotogrammi video sull'unità. Se avete già popolato i fotogrammi necessari, deselezionate questa casella per saltare l'estrazione ridondante e avviare immediatamente il rendering. Se non sono stati estratti i frame, è necessario eseguire almeno una volta l'operazione con questa casella selezionata per scrivere i fotogrammi necessari.",
+ "video_input mode only, enables the extraction and use of a separate video file intended for use as a mask. White areas of the extracted video frames will not be affected by diffusion, while black areas will be fully effected. Lighter/darker areas are affected dynamically.": "in modalità solo video Input, consente l'estrazione e l'utilizzo di un file video separato destinato all'uso come maschera. Le aree bianche dei fotogrammi video estratti non saranno interessate dalla diffusione, mentre le aree nere saranno interamente interessate. Le aree più chiare/scure sono interessate in modo dinamico.",
+ "the directory in which your mask video is located.": "la cartella in cui si trova il video della maschera.",
+ "selects whether to ignore prompt schedule or _x_frames.": "seleziona se ignorare la pianificazione dei prompt o _x_frames.",
+ "the number of frames to transition thru between prompts (when interpolate_key_frames = true, then the numbers in front of the animation prompts will dynamically guide the images based on their value. If set to false, will ignore the prompt numbers and force interpole_x_frames value regardless of prompt number)": "il numero di fotogrammi per la transizione tra i prompt (quando interpola fotogrammi chiave = true, i numeri davanti ai prompt dell'animazione guideranno dinamicamente le immagini in base al loro valore. Se impostato su false, ignorerà i numeri dei prompt e forzerà il valore di interpola x fotogrammi indipendentemente da numero di richiesta)",
+ "instructs the run to start from a specified point": "avvia l'esecuzione da un punto specificato",
+ "the required timestamp to reference when resuming. Currently only available in 2D & 3D mode, the timestamp is saved as the settings .txt file name as well as images produced during your previous run. The format follows: yyyymmddhhmmss - a timestamp of when the run was started to diffuse.": "l'orario a cui fare riferimento quando si riprende. Attualmente disponibile solo in modalità 2D e 3D, l'orario viene salvato come nome del file .txt delle impostazioni e come immagini prodotte durante la corsa precedente. Il formato segue: yyyymmddhhmmss - l'orario di quando è stata avviata la diffusione dell'esecuzione.",
+ "when checked, do not output a video": "se selezionato, non produce un video",
+ "The frames per second that the video will run at": "I fotogrammi al secondo a cui verrà eseguito il video",
+ "select the type of video file to output": "selezionare il tipo di file video da produrre",
+ "create an animated GIF": "crea una GIF animata",
+ "the path to where ffmpeg is located": "il percorso in cui si trova ffmpeg",
+ "when this box is checked, and FFMPEG mp4 is selected as the output format, an audio file will be multiplexed with the video.": "quando questa casella è selezionata e FFMPEG mp4 è selezionato come formato di output, un file audio verrà multiplexato con il video.",
+ "the path to an audio file to accompany the video": "tIl percorso di un file audio per accompagnare il video",
+ "when this is unchecked, the video will automatically be created in the same output folder as the images. Check this box to specify different settings for the creation of the video, specified by the following options": "quando questo è deselezionato, il video verrà creato automaticamente nella stessa cartella di output delle immagini. Selezionare questa casella per specificare impostazioni diverse per la creazione del video, specificate dalle seguenti opzioni",
+ "render each step of diffusion as a separate frame": "renderizzare ogni fase di diffusione come fotogramma separato",
+ "the maximum number of frames to include in the video, when use_manual_settings is checked": "il numero massimo di fotogrammi da includere nel video, quando è selezionato 'Usa impostazioni manuali'",
+ "the location of images to create the video from, when use_manual_settings is checked": "la posizione delle immagini da cui creare il video, quando è selezionato 'Usa impostazioni manuali'",
+ "the output location of the mp4 file, when use_manual_settings is checked": "il percorso di output del file mp4, quando è selezionato 'Usa impostazioni manuali'",
"Autocomplete options": "Opzioni di autocompletamento",
"Enable Autocomplete": "Abilita autocompletamento",
"Append commas": "Aggiungi virgole",
+ "Error": "Errore",
+ "F": "F",
+ "Time taken:": "Tempo impiegato:",
+ "latest": "aggiornato",
+ "behind": "da aggiornare",
"AlphaCanvas": "AlphaCanvas",
- "Close": "Chiudi",
- "Grab Results": "Ottieni risultati",
- "Apply Patch": "Applica Patch",
"Hue:0": "Hue:0",
"S:0": "S:0",
"L:0": "L:0",
"Load Canvas": "Carica Canvas",
"Save Canvas": "Salva Canvas",
- "latest": "aggiornato",
- "behind": "da aggiornare",
+ "Close": "Chiudi",
+ "Grab Results": "Ottieni risultati",
+ "Apply Patch": "Applica Patch",
"Description": "Descrizione",
"Action": "Azione",
"Aesthetic Gradients": "Gradienti estetici",
- "Create an embedding from one or few pictures and use it to apply their style to generated images.": "Crea un incorporamento da una o poche immagini e usalo per applicare il loro stile alle immagini generate.",
+ "Create an embedding from one or few pictures and use it to apply their style to generated images.": "Crea un incorporamento da una o poche immagini e lo usa per applicare il loro stile alle immagini generate.",
"Sample extension. Allows you to use __name__ syntax in your prompt to get a random line from a file named name.txt in the wildcards directory. Also see Dynamic Prompts for similar functionality.": "Estensione del campione. Consente di utilizzare la sintassi __name__ nel prompt per ottenere una riga casuale da un file denominato name.txt nella cartella dei termini jolly. Vedi anche 'Prompt dinamici' per funzionalità simili.",
"Dynamic Prompts": "Prompt dinamici",
"Implements an expressive template language for random or combinatorial prompt generation along with features to support deep wildcard directory structures.": "Implementa un modello di linguaggio espressivo per la generazione di prompt casuale o combinatoria insieme a funzionalità per supportare cartelle strutturate contenenti termini jolly.",
@@ -1226,8 +1549,17 @@
"Randomly display the pictures of the artist's or artistic genres typical style, more pictures of this artist or genre is displayed after selecting. So you don't have to worry about how hard it is to choose the right style of art when you create.": "Visualizza in modo casuale le immagini dello stile tipico dell'artista o dei generi artistici, dopo la selezione vengono visualizzate più immagini di questo artista o genere. Così non dovete preoccuparvi della difficoltà di scegliere lo stile artistico giusto quando create.",
"The official port of Deforum, an extensive script for 2D and 3D animations, supporting keyframable sequences, dynamic math parameters (even inside the prompts), dynamic masking, depth estimation and warping.": "Il porting ufficiale di Deforum, uno script completo per animazioni 2D e 3D, che supporta sequenze di fotogrammi chiave, parametri matematici dinamici (anche all'interno dei prompt), mascheramento dinamico, stima della profondità e warping.",
"Artists to study": "Artisti per studiare",
- "Shows a gallery of generated pictures by artists separated into categories.": "Mostra una galleria di immagini generate dagli artisti suddivise in categorie.",
+ "Shows a gallery of generated pictures by artists separated into categories.": "Mostra una galleria di immagini generate in base agli artisti e suddivise in categorie.",
"Calculates aesthetic score for generated images using CLIP+MLP Aesthetic Score Predictor based on Chad Scorer": "Calcola il punteggio estetico per le immagini generate utilizzando il predittore del punteggio estetico CLIP+MLP basato su Chad Scorer",
- "Lets you edit captions in training datasets.": "Consente di modificare i sottotitoli nei set di dati di addestramento.",
- "Time taken:": "Tempo impiegato:"
-}
+ "Lets you edit captions in training datasets.": "Consente di modificare le didascalie nei set di dati di addestramento.",
+ "Krita Plugin.": "Krita Plugin.",
+ "Adds a tab to the webui that allows the user to automatically extract keyframes from video, and manually extract 512x512 crops of those frames for use in model training.": "Aggiunge una scheda all'interfaccia Web che consente all'utente di estrarre automaticamente i fotogrammi chiave dal video ed estrarre manualmente ritagli 512x512 di quei fotogrammi da utilizzare nell'addestramento del modello.",
+ "Allows you to include various shortcodes in your prompts. You can pull text from files, set up your own variables, process text through conditional functions, and so much more - it's like wildcards on steroids..": "Consente di includere vari codici brevi nei prompt. Puoi estrarre il testo dai file, impostare le tue variabili, elaborare il testo tramite funzioni condizionali e molto altro ancora: è come i termini jolly ma potenziato.",
+ "Booru tag autocompletion": "Completamento automatico del tag Booru",
+ "Displays autocompletion hints for tags from image booru boards such as Danbooru. Uses local tag CSV files and includes a config for customization.": "Visualizza suggerimenti per il completamento automatico dei tag dalle schede di immagini Booru, come Danbooru. Utilizza file CSV di tag locali e include una configurazione per la personalizzazione.",
+ "Add a button to convert the prompts used in NovelAI for use in the WebUI. In addition, add a button that allows you to recall a previously used prompt.": "Aggiunge un pulsante per convertire i prompt utilizzati in NovelAI per l'uso in Stable Diffusion Web UI. Inoltre, aggiunge un pulsante che permette di richiamare un prompt utilizzato in precedenza.",
+ "tokenizer": "Tokenizzatore",
+ "Adds a tab that lets you preview how CLIP model would tokenize your text.": "Aggiunge una scheda che consente di visualizzare in anteprima il modo in cui il modello CLIP tokenizzerebbe il vostro testo.",
+ "parameters": "Parametri",
+ "The directory does not exist": "La cartella non esiste"
+}
\ No newline at end of file
From 6603f63b7b8af39ab815091460c5c2a12d3f253e Mon Sep 17 00:00:00 2001
From: Han Lin
Date: Sun, 6 Nov 2022 11:08:20 +0800
Subject: [PATCH 46/52] Fixes LDSR upscaler producing black bars
---
modules/ldsr_model_arch.py | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/modules/ldsr_model_arch.py b/modules/ldsr_model_arch.py
index 14db50766..90e0a2f06 100644
--- a/modules/ldsr_model_arch.py
+++ b/modules/ldsr_model_arch.py
@@ -101,8 +101,8 @@ class LDSR:
down_sample_rate = target_scale / 4
wd = width_og * down_sample_rate
hd = height_og * down_sample_rate
- width_downsampled_pre = int(wd)
- height_downsampled_pre = int(hd)
+ width_downsampled_pre = int(np.ceil(wd))
+ height_downsampled_pre = int(np.ceil(hd))
if down_sample_rate != 1:
print(
@@ -110,7 +110,12 @@ class LDSR:
im_og = im_og.resize((width_downsampled_pre, height_downsampled_pre), Image.LANCZOS)
else:
print(f"Down sample rate is 1 from {target_scale} / 4 (Not downsampling)")
- logs = self.run(model["model"], im_og, diffusion_steps, eta)
+
+ # pad width and height to multiples of 64, pads with the edge values of image to avoid artifacts
+ pad_w, pad_h = np.max(((2, 2), np.ceil(np.array(im_og.size) / 64).astype(int)), axis=0) * 64 - im_og.size
+ im_padded = Image.fromarray(np.pad(np.array(im_og), ((0, pad_h), (0, pad_w), (0, 0)), mode='edge'))
+
+ logs = self.run(model["model"], im_padded, diffusion_steps, eta)
sample = logs["sample"]
sample = sample.detach().cpu()
@@ -120,6 +125,9 @@ class LDSR:
sample = np.transpose(sample, (0, 2, 3, 1))
a = Image.fromarray(sample[0])
+ # remove padding
+ a = a.crop((0, 0) + tuple(np.array(im_og.size) * 4))
+
del model
gc.collect()
torch.cuda.empty_cache()
From a2a1a2f7270a865175f64475229838a8d64509ea Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sun, 6 Nov 2022 09:02:25 +0300
Subject: [PATCH 47/52] add ability to create extensions that add localizations
---
javascript/ui.js | 2 ++
modules/localization.py | 6 ++++++
modules/scripts.py | 1 -
modules/shared.py | 2 --
modules/ui.py | 3 +--
webui.py | 9 +++++----
6 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/javascript/ui.js b/javascript/ui.js
index 7e1164658..95cfd106f 100644
--- a/javascript/ui.js
+++ b/javascript/ui.js
@@ -208,4 +208,6 @@ function update_token_counter(button_id) {
function restart_reload(){
document.body.innerHTML='
Reloading...
';
setTimeout(function(){location.reload()},2000)
+
+ return []
}
diff --git a/modules/localization.py b/modules/localization.py
index b1810cda2..f6a6f2fbd 100644
--- a/modules/localization.py
+++ b/modules/localization.py
@@ -3,6 +3,7 @@ import os
import sys
import traceback
+
localizations = {}
@@ -16,6 +17,11 @@ def list_localizations(dirname):
localizations[fn] = os.path.join(dirname, file)
+ from modules import scripts
+ for file in scripts.list_scripts("localizations", ".json"):
+ fn, ext = os.path.splitext(file.filename)
+ localizations[fn] = file.path
+
def localization_js(current_localization_name):
fn = localizations.get(current_localization_name, None)
diff --git a/modules/scripts.py b/modules/scripts.py
index 366c90d7c..637b23292 100644
--- a/modules/scripts.py
+++ b/modules/scripts.py
@@ -3,7 +3,6 @@ import sys
import traceback
from collections import namedtuple
-import modules.ui as ui
import gradio as gr
from modules.processing import StableDiffusionProcessing
diff --git a/modules/shared.py b/modules/shared.py
index 70b998ff3..e8bacd3c9 100644
--- a/modules/shared.py
+++ b/modules/shared.py
@@ -221,8 +221,6 @@ interrogator = modules.interrogate.InterrogateModels("interrogate")
face_restorers = []
-localization.list_localizations(cmd_opts.localizations_dir)
-
def realesrgan_models_names():
import modules.realesrgan_model
diff --git a/modules/ui.py b/modules/ui.py
index 76ca9b071..23643c22d 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1563,11 +1563,10 @@ def create_ui(wrap_gradio_gpu_call):
shared.state.need_restart = True
restart_gradio.click(
-
fn=request_restart,
+ _js='restart_reload',
inputs=[],
outputs=[],
- _js='restart_reload'
)
if column is not None:
diff --git a/webui.py b/webui.py
index a5a520f0c..4342a962c 100644
--- a/webui.py
+++ b/webui.py
@@ -10,7 +10,7 @@ from fastapi.middleware.gzip import GZipMiddleware
from modules.paths import script_path
-from modules import devices, sd_samplers, upscaler, extensions
+from modules import devices, sd_samplers, upscaler, extensions, localization
import modules.codeformer_model as codeformer
import modules.extras
import modules.face_restoration
@@ -28,9 +28,7 @@ import modules.txt2img
import modules.script_callbacks
import modules.ui
-from modules import devices
from modules import modelloader
-from modules.paths import script_path
from modules.shared import cmd_opts
import modules.hypernetworks.hypernetwork
@@ -64,6 +62,7 @@ def wrap_gradio_gpu_call(func, extra_outputs=None):
def initialize():
extensions.list_extensions()
+ localization.list_localizations(cmd_opts.localizations_dir)
if cmd_opts.ui_debug_mode:
shared.sd_upscalers = upscaler.UpscalerLanczos().scalers
@@ -99,7 +98,6 @@ def initialize():
else:
print("Running with TLS")
-
# make the program just exit at ctrl+c without waiting for anything
def sigint_handler(sig, frame):
print(f'Interrupted with signal {sig} in {frame}')
@@ -185,6 +183,9 @@ def webui():
print('Reloading extensions')
extensions.list_extensions()
+
+ localization.list_localizations(cmd_opts.localizations_dir)
+
print('Reloading custom scripts')
modules.scripts.reload_scripts()
print('Reloading modules: modules.ui')
From e5b4e3f820cd09e751f1d168ab05d606d078a0d9 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sun, 6 Nov 2022 10:12:53 +0300
Subject: [PATCH 48/52] add tags to extensions, and ability to filter out tags
list changed Settings keys in UI do not print VRAM/etc stats everywhere but
in calls that use GPU
---
modules/ui.py | 25 ++++++++++--------
modules/ui_extensions.py | 55 ++++++++++++++++++++++++++++++++--------
style.css | 5 ++++
webui.py | 2 +-
4 files changed, 64 insertions(+), 23 deletions(-)
diff --git a/modules/ui.py b/modules/ui.py
index 23643c22d..c946ad592 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -174,9 +174,9 @@ def save_pil_to_file(pil_image, dir=None):
gr.processing_utils.save_pil_to_file = save_pil_to_file
-def wrap_gradio_call(func, extra_outputs=None):
+def wrap_gradio_call(func, extra_outputs=None, add_stats=False):
def f(*args, extra_outputs_array=extra_outputs, **kwargs):
- run_memmon = opts.memmon_poll_rate > 0 and not shared.mem_mon.disabled
+ run_memmon = opts.memmon_poll_rate > 0 and not shared.mem_mon.disabled and add_stats
if run_memmon:
shared.mem_mon.monitor()
t = time.perf_counter()
@@ -203,11 +203,18 @@ def wrap_gradio_call(func, extra_outputs=None):
res = extra_outputs_array + [f"
{plaintext_to_html(type(e).__name__+': '+str(e))}
"]
+ shared.state.skipped = False
+ shared.state.interrupted = False
+ shared.state.job_count = 0
+
+ if not add_stats:
+ return tuple(res)
+
elapsed = time.perf_counter() - t
elapsed_m = int(elapsed // 60)
elapsed_s = elapsed % 60
elapsed_text = f"{elapsed_s:.2f}s"
- if (elapsed_m > 0):
+ if elapsed_m > 0:
elapsed_text = f"{elapsed_m}m "+elapsed_text
if run_memmon:
@@ -225,10 +232,6 @@ def wrap_gradio_call(func, extra_outputs=None):
# last item is always HTML
res[-1] += f"
"
+
+ return code, list(tags)
def create_ui():
@@ -238,21 +262,30 @@ def create_ui():
extension_to_install = gr.Text(elem_id="extension_to_install", visible=False)
install_extension_button = gr.Button(elem_id="install_extension_button", visible=False)
+ with gr.Row():
+ hide_tags = gr.CheckboxGroup(value=["ads", "localization"], label="Hide extensions with tags", choices=["script", "ads", "localization"])
+
install_result = gr.HTML()
available_extensions_table = gr.HTML()
refresh_available_extensions_button.click(
- fn=modules.ui.wrap_gradio_call(refresh_available_extensions, extra_outputs=[gr.update(), gr.update()]),
- inputs=[available_extensions_index],
- outputs=[available_extensions_index, available_extensions_table, install_result],
+ fn=modules.ui.wrap_gradio_call(refresh_available_extensions, extra_outputs=[gr.update(), gr.update(), gr.update()]),
+ inputs=[available_extensions_index, hide_tags],
+ outputs=[available_extensions_index, available_extensions_table, hide_tags, install_result],
)
install_extension_button.click(
fn=modules.ui.wrap_gradio_call(install_extension_from_index, extra_outputs=[gr.update(), gr.update()]),
- inputs=[extension_to_install],
+ inputs=[extension_to_install, hide_tags],
outputs=[available_extensions_table, extensions_table, install_result],
)
+ hide_tags.change(
+ fn=modules.ui.wrap_gradio_call(refresh_available_extensions_for_tags, extra_outputs=[gr.update()]),
+ inputs=[hide_tags],
+ outputs=[available_extensions_table, install_result]
+ )
+
with gr.TabItem("Install from URL"):
install_url = gr.Text(label="URL for extension's git repository")
install_dirname = gr.Text(label="Local directory name", placeholder="Leave empty for auto")
diff --git a/style.css b/style.css
index a0382a8cc..e2b71f253 100644
--- a/style.css
+++ b/style.css
@@ -563,6 +563,11 @@ img2maskimg, #img2maskimg > .h-60, #img2maskimg > .h-60 > div, #img2maskimg > .h
opacity: 0.5;
}
+.extension-tag{
+ font-weight: bold;
+ font-size: 95%;
+}
+
/* The following handles localization for right-to-left (RTL) languages like Arabic.
The rtl media type will only be activated by the logic in javascript/localization.js.
If you change anything above, you need to make sure it is RTL compliant by just running
diff --git a/webui.py b/webui.py
index 4342a962c..f4f1d74d1 100644
--- a/webui.py
+++ b/webui.py
@@ -57,7 +57,7 @@ def wrap_gradio_gpu_call(func, extra_outputs=None):
return res
- return modules.ui.wrap_gradio_call(f, extra_outputs=extra_outputs)
+ return modules.ui.wrap_gradio_call(f, extra_outputs=extra_outputs, add_stats=True)
def initialize():
From 9cd1a66648b4c19136687100f9705d442f31e7f9 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sun, 6 Nov 2022 10:37:08 +0300
Subject: [PATCH 49/52] remove localization people from CODEOWNERS add a note
---
CODEOWNERS | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/CODEOWNERS b/CODEOWNERS
index a48d80121..7438c9bc6 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -1,13 +1,12 @@
* @AUTOMATIC1111
-/localizations/ar_AR.json @xmodar @blackneoo
-/localizations/de_DE.json @LunixWasTaken
-/localizations/es_ES.json @innovaciones
-/localizations/fr_FR.json @tumbly
-/localizations/it_IT.json @EugenioBuffo
-/localizations/ja_JP.json @yuuki76
-/localizations/ko_KR.json @36DB
-/localizations/pt_BR.json @M-art-ucci
-/localizations/ru_RU.json @kabachuha
-/localizations/tr_TR.json @camenduru
-/localizations/zh_CN.json @dtlnor @bgluminous
-/localizations/zh_TW.json @benlisquare
+
+# if you were managing a localization and were removed from this file, this is because
+# the intended way to do localizations now is via extensions. See:
+# https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Developing-extensions
+# Make a repo with your localization and since you are still listed as a collaborator
+# you can add it to the wiki page yourself. This change is because some people complained
+# the git commit log is cluttered with things unrelated to almost everyone and
+# because I believe this is the best overall for the project to handle localizations almost
+# entirely without my oversight.
+
+
From 6e4de5b4422dfc0d45063b2c8c78b19f00321615 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sun, 6 Nov 2022 11:20:23 +0300
Subject: [PATCH 50/52] add load_with_extra function for modules to load
checkpoints with extended whitelist
---
modules/safe.py | 40 +++++++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
diff --git a/modules/safe.py b/modules/safe.py
index 348a24fcd..a9209e385 100644
--- a/modules/safe.py
+++ b/modules/safe.py
@@ -23,11 +23,18 @@ def encode(*args):
class RestrictedUnpickler(pickle.Unpickler):
+ extra_handler = None
+
def persistent_load(self, saved_id):
assert saved_id[0] == 'storage'
return TypedStorage()
def find_class(self, module, name):
+ if self.extra_handler is not None:
+ res = self.extra_handler(module, name)
+ if res is not None:
+ return res
+
if module == 'collections' and name == 'OrderedDict':
return getattr(collections, name)
if module == 'torch._utils' and name in ['_rebuild_tensor_v2', '_rebuild_parameter']:
@@ -52,7 +59,7 @@ class RestrictedUnpickler(pickle.Unpickler):
return set
# Forbid everything else.
- raise pickle.UnpicklingError(f"global '{module}/{name}' is forbidden")
+ raise Exception(f"global '{module}/{name}' is forbidden")
allowed_zip_names = ["archive/data.pkl", "archive/version"]
@@ -69,7 +76,7 @@ def check_zip_filenames(filename, names):
raise Exception(f"bad file inside {filename}: {name}")
-def check_pt(filename):
+def check_pt(filename, extra_handler):
try:
# new pytorch format is a zip file
@@ -78,6 +85,7 @@ def check_pt(filename):
with z.open('archive/data.pkl') as file:
unpickler = RestrictedUnpickler(file)
+ unpickler.extra_handler = extra_handler
unpickler.load()
except zipfile.BadZipfile:
@@ -85,16 +93,42 @@ def check_pt(filename):
# if it's not a zip file, it's an olf pytorch format, with five objects written to pickle
with open(filename, "rb") as file:
unpickler = RestrictedUnpickler(file)
+ unpickler.extra_handler = extra_handler
for i in range(5):
unpickler.load()
def load(filename, *args, **kwargs):
+ return load_with_extra(filename, *args, **kwargs)
+
+
+def load_with_extra(filename, extra_handler=None, *args, **kwargs):
+ """
+ this functon is intended to be used by extensions that want to load models with
+ some extra classes in them that the usual unpickler would find suspicious.
+
+ Use the extra_handler argument to specify a function that takes module and field name as text,
+ and returns that field's value:
+
+ ```python
+ def extra(module, name):
+ if module == 'collections' and name == 'OrderedDict':
+ return collections.OrderedDict
+
+ return None
+
+ safe.load_with_extra('model.pt', extra_handler=extra)
+ ```
+
+ The alternative to this is just to use safe.unsafe_torch_load('model.pt'), which as the name implies is
+ definitely unsafe.
+ """
+
from modules import shared
try:
if not shared.cmd_opts.disable_safe_unpickle:
- check_pt(filename)
+ check_pt(filename, extra_handler)
except pickle.UnpicklingError:
print(f"Error verifying pickled file from {filename}:", file=sys.stderr)
From 32c0eab89538ba3900bf499291720f80ae4b43e5 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sun, 6 Nov 2022 14:39:41 +0300
Subject: [PATCH 51/52] load all settings in one call instead of one by one
when the page loads
---
modules/ui.py | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/modules/ui.py b/modules/ui.py
index c946ad592..34c31ef1f 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1141,7 +1141,7 @@ def create_ui(wrap_gradio_gpu_call):
outputs=[html, generation_info, html2],
)
- with gr.Blocks() as modelmerger_interface:
+ with gr.Blocks(analytics_enabled=False) as modelmerger_interface:
with gr.Row().style(equal_height=False):
with gr.Column(variant='panel'):
gr.HTML(value="
A merger of the two checkpoints will be generated in your checkpoint directory.
")
@@ -1161,7 +1161,7 @@ def create_ui(wrap_gradio_gpu_call):
sd_hijack.model_hijack.embedding_db.load_textual_inversion_embeddings()
- with gr.Blocks() as train_interface:
+ with gr.Blocks(analytics_enabled=False) as train_interface:
with gr.Row().style(equal_height=False):
gr.HTML(value="