diff options
author | AUTOMATIC <16777216c@gmail.com> | 2022-09-20 06:53:37 +0000 |
---|---|---|
committer | AUTOMATIC <16777216c@gmail.com> | 2022-09-20 06:53:37 +0000 |
commit | 54a097a8186222ba193d1abaaec6b3c65670313d (patch) | |
tree | 30e215492b39db93fe1d6ed85be21f66ab955936 | |
parent | ab38392119e9c37c7a9c3f921e0c237deb42b205 (diff) | |
parent | d7f36dac21857dbcedb0303a5c80c35deae26592 (diff) | |
download | stable-diffusion-webui-gfx803-54a097a8186222ba193d1abaaec6b3c65670313d.tar.gz stable-diffusion-webui-gfx803-54a097a8186222ba193d1abaaec6b3c65670313d.tar.bz2 stable-diffusion-webui-gfx803-54a097a8186222ba193d1abaaec6b3c65670313d.zip |
Merge remote-tracking branch 'origin/master'
-rw-r--r-- | javascript/notification.js | 34 | ||||
-rw-r--r-- | modules/images.py | 18 | ||||
-rw-r--r-- | modules/ui.py | 8 |
3 files changed, 55 insertions, 5 deletions
diff --git a/javascript/notification.js b/javascript/notification.js new file mode 100644 index 00000000..4711c279 --- /dev/null +++ b/javascript/notification.js @@ -0,0 +1,34 @@ +// Monitors the gallery and sends a browser notification when the leading image is new. + +let lastHeadImg = null; + +onUiUpdate(function(){ + const galleryPreviews = gradioApp().querySelectorAll('img.h-full.w-full.overflow-hidden'); + + if (galleryPreviews == null) return; + + const headImg = galleryPreviews[0]?.src; + + if (headImg == null || headImg == lastHeadImg) return; + + lastHeadImg = headImg; + + if (document.hasFocus()) return; + + // Multiple copies of the images are in the DOM when one is selected. Dedup with a Set to get the real number generated. + const imgs = new Set(Array.from(galleryPreviews).map(img => img.src)); + + const notification = new Notification( + 'Stable Diffusion', + { + body: `Generated ${imgs.size > 1 ? imgs.size - 1 : 1} image${imgs.size > 1 ? 's' : ''}`, + icon: headImg, + image: headImg, + } + ); + + notification.onclick = function(_){ + parent.focus(); + this.close(); + }; +}); diff --git a/modules/images.py b/modules/images.py index 530a8440..d1707263 100644 --- a/modules/images.py +++ b/modules/images.py @@ -245,34 +245,42 @@ def resize_image(resize_mode, im, width, height): invalid_filename_chars = '<>:"/\\|?*\n'
+invalid_filename_prefix = ' '
+invalid_filename_postfix = ' .'
re_nonletters = re.compile(r'[\s'+string.punctuation+']+')
+max_filename_part_length = 128
+max_prompt_words = 8
def sanitize_filename_part(text, replace_spaces=True):
if replace_spaces:
text = text.replace(' ', '_')
- return text.translate({ord(x): '_' for x in invalid_filename_chars})[:128]
+ text = text.translate({ord(x): '_' for x in invalid_filename_chars})
+ text = text.lstrip(invalid_filename_prefix)[:max_filename_part_length]
+ text = text.rstrip(invalid_filename_postfix)
+ return text
def apply_filename_pattern(x, p, seed, prompt):
if seed is not None:
x = x.replace("[seed]", str(seed))
+
if prompt is not None:
- x = x.replace("[prompt]", sanitize_filename_part(prompt)[:128])
- x = x.replace("[prompt_spaces]", sanitize_filename_part(prompt, replace_spaces=False)[:128])
+ x = x.replace("[prompt]", sanitize_filename_part(prompt))
+ x = x.replace("[prompt_spaces]", sanitize_filename_part(prompt, replace_spaces=False))
if "[prompt_words]" in x:
words = [x for x in re_nonletters.split(prompt or "") if len(x) > 0]
if len(words) == 0:
words = ["empty"]
+ x = x.replace("[prompt_words]", sanitize_filename_part(" ".join(words[0:max_prompt_words]), replace_spaces=False))
- x = x.replace("[prompt_words]", " ".join(words[0:8]).strip())
if p is not None:
x = x.replace("[steps]", str(p.steps))
x = x.replace("[cfg]", str(p.cfg_scale))
x = x.replace("[width]", str(p.width))
x = x.replace("[height]", str(p.height))
- x = x.replace("[sampler]", sd_samplers.samplers[p.sampler_index].name)
+ x = x.replace("[sampler]", sanitize_filename_part(sd_samplers.samplers[p.sampler_index].name, replace_spaces=False))
x = x.replace("[model_hash]", shared.sd_model.sd_model_hash)
x = x.replace("[date]", datetime.date.today().isoformat())
diff --git a/modules/ui.py b/modules/ui.py index 2c5422c7..ec6f247e 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -875,6 +875,14 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): outputs=[result]
)
+ request_notifications = gr.Button(value='Request browser notifications')
+ request_notifications.click(
+ fn=lambda: None,
+ inputs=[],
+ outputs=[],
+ _js='() => Notification.requestPermission()'
+ )
+
interfaces = [
(txt2img_interface, "txt2img", "txt2img"),
(img2img_interface, "img2img", "img2img"),
|