From 1e3a7bf0e7dde91c342a6003fb28a3a640ea5030 Mon Sep 17 00:00:00 2001 From: AlekPet Date: Thu, 24 Sep 2026 23:34:42 +0300 Subject: [PATCH] update + PainterNode, added inset image (as background or as image), when select image in the COMBO + added highlight mousemove items media in extension extras_preview_media + update version --- pyproject.toml | 2 +- .../css/extrasnode/extras_node_styles.css | 5 ++++ web_alekpet_nodes/extras_preview_media.js | 15 ++++++++++ web_alekpet_nodes/painter_node.js | 30 ++++++++++++++++++- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fbf15fb..18e0790 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui_custom_nodes_alekpet" description = "Nodes: PoseNode, PainterNode, TranslateTextNode, TranslateCLIPTextEncodeNode, DeepTranslatorTextNode, DeepTranslatorCLIPTextEncodeNode, ArgosTranslateTextNode, ArgosTranslateCLIPTextEncodeNode, ChatGLM4TranslateCLIPTextEncodeNode, ChatGLM4TranslateTextNode, ChatGLM4InstructNode, ChatGLM4InstructMediaNode, ChatGLMImageGenerateNode, ChatGLMVideoGenerateNode, PreviewTextNode, HexToHueNode, ColorsCorrectNode, IDENode." -version = "1.1.10" +version = "1.1.11" license = { file = "LICENSE" } [project.urls] diff --git a/web_alekpet_nodes/css/extrasnode/extras_node_styles.css b/web_alekpet_nodes/css/extrasnode/extras_node_styles.css index 6b719f4..5aff036 100644 --- a/web_alekpet_nodes/css/extrasnode/extras_node_styles.css +++ b/web_alekpet_nodes/css/extrasnode/extras_node_styles.css @@ -13,3 +13,8 @@ background-blend-mode: multiply; background-color: white; } + +.alekpet_preview_media_higlight { + background-color: rgb(204, 204, 204) !important; + color: rgb(0, 0, 0) !important; +} diff --git a/web_alekpet_nodes/extras_preview_media.js b/web_alekpet_nodes/extras_preview_media.js index be637ba..1b62362 100644 --- a/web_alekpet_nodes/extras_preview_media.js +++ b/web_alekpet_nodes/extras_preview_media.js @@ -312,6 +312,8 @@ app.registerExtension({ const el = e.target.closest("[data-value]"); if (!el) return; + el.classList.toggle("alekpet_preview_media_higlight"); + const valueItem = el.dataset.value; const ext = valueItem .slice(valueItem.lastIndexOf(".") + 1) @@ -334,6 +336,19 @@ app.registerExtension({ true ); + // Pointer leave from item + document.addEventListener( + "pointerleave", + (e) => { + try { + const el = e.target.closest("[data-value]"); + if (!el) return; + el.classList.toggle("alekpet_preview_media_higlight"); + } catch (e) {} + }, + true + ); + // Find node name on pointerdown app.canvas.canvas.addEventListener( "pointerdown", diff --git a/web_alekpet_nodes/painter_node.js b/web_alekpet_nodes/painter_node.js index 2d88c02..79d2b5c 100644 --- a/web_alekpet_nodes/painter_node.js +++ b/web_alekpet_nodes/painter_node.js @@ -167,8 +167,36 @@ class Painter { const self = this; const callb = this.node.callback; - this.image.callback = function () { + this.image.callback = function (image_name) { self.image.value = self.node.name; + + // Insert image + self.getImageByName(image_name).then(async (image) => { + if (image?.tagName !== "IMG") { + createWindowModal({ + textTitle: "ERROR", + textBody: [ + makeElement("div", { + innerHTML: image ?? "Error load image", + }), + ], + ...THEMES_MODAL_WINDOW.error, + options: { + auto: { autohide: true, autoshow: true, autoremove: true }, + close: { showClose: false }, + parent: self.canvas.wrapperEl, + }, + }); + return; + } + + if (await comfyuiDesktopConfirm("Past as background?")) { + self.pastAsBackground(image); + } else if (await comfyuiDesktopConfirm("Past as image?")) { + self.pastAsImage(image); + } + }); + if (callb) { return callb.apply(this, arguments); }