From 78e69a3c2ef1156eab964510477ea7a7dca67321 Mon Sep 17 00:00:00 2001 From: JohanK66 Date: Fri, 28 Feb 2025 20:21:40 +0100 Subject: [PATCH] Added readme instructions --- .DS_Store | Bin 6148 -> 10244 bytes .gitignore | 3 + README.md | 17 ++++- __init__.py | 11 ++++ assets/webhookimage_node.png | Bin 0 -> 62758 bytes nodes/util.py | 5 ++ nodes/webhook.py | 120 +++++++++++++++++++++++++++++++++++ requirements.txt | 1 + util.js | 52 +++++++++++++++ util.py | 5 ++ 10 files changed, 212 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 __init__.py create mode 100644 assets/webhookimage_node.png create mode 100644 nodes/util.py create mode 100644 nodes/webhook.py create mode 100644 requirements.txt create mode 100644 util.js create mode 100644 util.py diff --git a/.DS_Store b/.DS_Store index bc41a65b3bedbcca3005c83cf85a6e116681c22d..eb004667b7613c4c838f911af3d3de799eba8ace 100644 GIT binary patch literal 10244 zcmeHM&2Jk;6n~SXjh!^aGzp~~nw27?3Wdf_8lASpKi8T84j=ZY1l(d>{+2uTEz2qY0mB9KHN ziNK2z0j$})rA7moJd+3{5lA9%76G0gG~68KC2R*!qz*hp2>>_*vS`3F90AlM%uCn~ zAUJ3&Pz4NBnJh6_pbokwSU6y*6;P#qP&K)x~f}_4jP|o#cNM~x})-|&*V3EBWDBbcc{`Rm2jD4^LGpU z1~uup>Fe*eJl}=H63tN&yfW!zkwL4Ftl?^r2h4%y9Iem>y+iZBDuV8V-av0QU==!^ zkm0l%9n(j&PH)mZ&~@5{ghP9vH1LKxXmiiB>H}$254+EF;R9?b^`Pk5 zmSfi;!N=($2GGN0;PdnJL$4`6{wI3VGCe<={e=w-4qdo7Je(dL9ez~Ybq8D; zvipGl+QxwEAzs$+n#N%%Gr8i}e%Z7QS16cO10oOanReAVEI2K@>IvOqz(}W4=~CwE z$;qw7?5uWk`E*u0na?fWn$>c-+`{Q;IyE&jcYCX}XEki+3mA>YxbeJ=1>o%YB{0RQ z=vS#QYT$&QtHLlV2Qm!oaTtc*WEfKEkN|GIq?0V;9ZOj2+)N@;Oq zR`U#hCxYL9=wS@jeWS5%*BtbJfcS4VebceMyN2rl-Y>gu*{&Of<40CmH>^#&;P}4N zC}qZlE{y!pHMpMWx7aLKOuIhw_MbsWXYxlOay>vYG!r05k&_`NA=|bc+eoKp^6yDX zie9JN$Y>kLMEmqPJ*KbeJNl7+reEm~`in6(!Y0@hyT+zjmMyTi*kYhL5RNd<&ygm! zI?8w{NrjEQ0bzw7OC?(}mBeI}1kzPTNgGV#HYt7dIa$PQ2~&hZkJ}te2P4Sle7&h* z-Kk@}6suOB{pw{?=wDYp{Je0!HugKQEiEh|nJvuo%$Cb8FU)GoON;*^u|-^prnLw; zn$#j>Ws1h#&a$tX>zM;>bP{fnS+8Lp$*2X49nzm?- z?uaC|hDp(&YM=e-Zc#WPx^UrNhFq-j``A310&C!x%~ySRETv_-# z3{QRdYQeux$?LOsoz{fD#5k~gkPb06dUS?MQgn7pk}|W|#`L*|X3|bbrXu$Iv0c-~l7}|gS zXFyW_i(@TyBh>C%+pF85?lS78NaI7Q)Yg688pUl1H%JOSZgZ^E=~_$o*{@zUh5mKr J!%tD(Jq7G>n^6D& delta 100 zcmZn(XfcprU|?W$DortDU=RQ@Ie-{MGqg`k6q~50$jCA=z?zX|GLJy@!c_Lf>>M0| r%phr?DsCX*3dHRj6TdT0=2tOfWSDHjBRx4mg`E{-D#PY@o;l0_Omq>6 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..556b5dc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__/.DS_Store +assets/.DS_Store +.DS_Store diff --git a/README.md b/README.md index 2df6439..86f40d6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,15 @@ -# WebhookImage -# WebhookImage +# ComfyUI WebhookImage + +This package provides a custom node to ComfyUI to send a message and image by means of a webhook + +## WebhookImage + +Send a webhook to the specified URL. +If you are using this on a local installation, the webhook could be generate by using ngrok https://ngrok.com/ + + + +## Further details + +Will be added soon + diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..ec5e0f0 --- /dev/null +++ b/__init__.py @@ -0,0 +1,11 @@ +from .nodes.webhook import WebhookImage + +NODE_CLASS_MAPPINGS = { + "Notif-Webhook": WebhookImage, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "Notif-Webhook": "WebhookImage", +} + +WEB_DIRECTORY = "./web" diff --git a/assets/webhookimage_node.png b/assets/webhookimage_node.png new file mode 100644 index 0000000000000000000000000000000000000000..85298986edd5486ff48eef09155d5f4ff5512f8e GIT binary patch literal 62758 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%0DpQa}sp8{rJ58UhW(R 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 S%P9~7d`t|Ek_z<5H~tUE{Y<$4 literal 0 HcmV?d00001 diff --git a/nodes/util.py b/nodes/util.py new file mode 100644 index 0000000..cc986b3 --- /dev/null +++ b/nodes/util.py @@ -0,0 +1,5 @@ +# Hack: string type that is always equal in not equal comparisons +# Thanks to https://github.com/pythongosssss/ComfyUI-Custom-Scripts +class ComfyAnyType(str): + def __ne__(self, __value: object) -> bool: + return False diff --git a/nodes/webhook.py b/nodes/webhook.py new file mode 100644 index 0000000..4e5931a --- /dev/null +++ b/nodes/webhook.py @@ -0,0 +1,120 @@ +import requests +import json +import os +from PIL import Image +from PIL.PngImagePlugin import PngInfo +import numpy as np + +from datetime import datetime +import folder_paths + +class WebhookImage: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + self.type = 'output' + self.prefix_append = '' + + + @classmethod + def INPUT_TYPES(cls): + """ + Defines the input types for the node. + + Returns: + dict: A dictionary specifying required and hidden inputs. + """ + return { + "required": { + 'images': ('IMAGE', ), + "webhook_url": ("STRING", {'default': ''}), + "verify_ssl": ("BOOLEAN", {"default": True}), + "safe_prompt": (["enable", "disable"], {"default": "disable"}), + "notification_text": ('STRING', {'default': 'Your image is ready.'}), + "json_format": ('STRING', {'default': '{"text": ""}'}), + "send_notification": (["enable", "disable"], {"default": "disable"}), + "timeout": ('FLOAT', {'default': 3, 'min': 0, 'max': 60}), + 'image_preview': (['disabled', 'enabled'], {'default': 'enabled'}), + }, + "optional": { + "positive_text_opt": ("STRING", {"forceInput": True}), + "negative_text_opt": ("STRING", {"forceInput": True}), + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + FUNCTION = 'hookImage' + OUTPUT_NODE = True + RETURN_TYPES = tuple() + CATEGORY = "notifications" + + @staticmethod + def sendTxtMessage( webhook_url, notification_text, json_format, timeout, verify_ssl ): + """ + handles sending text message to the webhook + + Args: + notification_text (str): + """ + payload = json_format.replace("", notification_text) + payload = json.loads(payload) + res = requests.post( webhook_url, json=payload, timeout=timeout, verify=verify_ssl) + res.raise_for_status() + + def hookImage(self, images, webhook_url, notification_text, json_format, timeout, verify_ssl, negative_text_opt=None, positive_text_opt=None, extra_pnginfo=None, prompt=None, safe_prompt="disable", image_preview="disable", send_notification="disable" ): + counter = 1 + + + results = list() + + for image in images: + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + + metadata = PngInfo() + metadata.add_text("webhook_url", webhook_url ) + metadata.add_text("notification_text", notification_text) + + if prompt is not None: + if safe_prompt == 'enable': + metadata.add_text("prompt", json.dumps(prompt)) + + if positive_text_opt is not None: + metadata.add_text("positive_text_opt", json.dumps(positive_text_opt)) + if negative_text_opt is not None: + metadata.add_text("negative_text_opt", json.dumps(negative_text_opt)) + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata.add_text(x, json.dumps(extra_pnginfo[x])) + + timestamp = datetime.now().strftime('%c') + file = f"telegram_notification_{counter:05}_{timestamp}.png" + + image_path = os.path.join(self.output_dir, file) + img.save(image_path, format="PNG", pnginfo=metadata) + + results.append({ 'filename': file, 'subfolder': '', 'type': self.type}) + counter += 1 + + try: + with open(image_path, 'rb') as image_file: + files = { + 'file': ('photo', image_file, 'image/png') + } + + res = requests.post( webhook_url, files=files, timeout=timeout, verify=verify_ssl) + res.raise_for_status() + + if res.status_code == 200: + print("Image posted successfully!") + else: + print(f"Failed to post image. Status code: {res.status_code}") + + except OSError as e: + print(f'An error occurred while sending: {e}') + else: + if send_notification == 'enable': + WebhookImage.sendTxtMessage( webhook_url, notification_text, json_format, timeout, verify_ssl) + + if image_preview == 'disabled': + results = list() + return { 'ui': { 'images': results } } diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bffa19b --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +numpy diff --git a/util.js b/util.js new file mode 100644 index 0000000..ff223ae --- /dev/null +++ b/util.js @@ -0,0 +1,52 @@ +export const notificationSetup = () => { + if (!('Notification' in window)) { + console.log('This browser does not support notifications.') + alert('This browser does not support notifications.') + return + } + if (Notification.permission === 'denied') { + console.log('Notifications are blocked. Please enable them in your browser settings.') + alert('Notifications are blocked. Please enable them in your browser settings.') + return + } + if (Notification.permission !== 'granted') { + Notification.requestPermission() + } + return true +} + +export const sendNotification = (title, body) => { + if (!notificationSetup()) return + const notification = new Notification(title, { body }) + return notification +} + +export const getNotificationTextFromArguments = (args) => { + return args[0]?.notification_text[0] ?? 'Your notification has triggered.' +} + +export const playSound = (file, volume) => { + if (!file) { + file = 'notify.mp3' + } + if (!file.startsWith('http')) { + if (!file.includes('/')) { + file = 'assets/' + file + } + file = new URL(file, import.meta.url) + } + const url = new URL(file) + const audio = new Audio(url) + audio.volume = volume + audio.play() +} + +export const appQueueIsEmpty = async (app) => { + if (app.ui.lastQueueSize !== 0) { + await new Promise((r) => setTimeout(r, 500)) + } + if (app.ui.lastQueueSize !== 0) { + return false + } + return true +} diff --git a/util.py b/util.py new file mode 100644 index 0000000..cc986b3 --- /dev/null +++ b/util.py @@ -0,0 +1,5 @@ +# Hack: string type that is always equal in not equal comparisons +# Thanks to https://github.com/pythongosssss/ComfyUI-Custom-Scripts +class ComfyAnyType(str): + def __ne__(self, __value: object) -> bool: + return False