Send a browser notification when the images are ready

This commit is contained in:
Dave Sescleifer 2022-09-18 21:41:57 -04:00 committed by AUTOMATIC1111
parent a8a75ec43a
commit d7f36dac21
2 changed files with 42 additions and 0 deletions

View file

@ -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();
};
});

View file

@ -875,6 +875,14 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo):
outputs=[result] outputs=[result]
) )
request_notifications = gr.Button(value='Request browser notifications')
request_notifications.click(
fn=lambda: None,
inputs=[],
outputs=[],
_js='() => Notification.requestPermission()'
)
interfaces = [ interfaces = [
(txt2img_interface, "txt2img", "txt2img"), (txt2img_interface, "txt2img", "txt2img"),
(img2img_interface, "img2img", "img2img"), (img2img_interface, "img2img", "img2img"),