From 5b3c2e1708684ceadbc98bba838d714431b71b2d Mon Sep 17 00:00:00 2001 From: kk8bit Date: Mon, 31 Mar 2025 19:35:26 +0800 Subject: [PATCH] v0.51.0 --- CHANGELOG.md | 4 ++++ locales/zh/settings.json | 18 ++++++++++++------ pyproject.toml | 4 ++-- web/nodealign.js | 41 +++++++++++++++++++++++++++++++++++----- web/settings.js | 15 ++++++++++++--- 5 files changed, 66 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dcb20e..d7af22a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Changelog +## [0.51.0] - 2025-03-31 +- node align 新增快捷键`Shift+WASD` + # Changelog ## [0.50.5] - 2025-03-27 - node align bar可吸附菜单栏 diff --git a/locales/zh/settings.json b/locales/zh/settings.json index edc833c..6908c1f 100644 --- a/locales/zh/settings.json +++ b/locales/zh/settings.json @@ -1,12 +1,12 @@ { "KayTool_ShowRunOption": { - "name": "在'节点右键'菜单中显示 '▶️ Run' 选项" + "name": "在'节点右键菜单'中显示 '▶️ Run' 选项" }, "KayTool_ShowSetGetOptions": { - "name": "在'节点右键'菜单中显示 '🛜 Set/Get' 选项" + "name": "在'节点右键菜单'中显示 '🛜 Set/Get' 选项" }, "KayTool_ShiftR": { - "name": "使用 'Shift+R' 快捷键在选中的节点上快速执行 '▶️ Run' " + "name": "使用 'Shift+R' 快捷键在选中的节点上快速执行 '▶️ Run'" }, "KayTool_ShowWorkflowPNG": { "name": "在KayTool菜单中显示 'Workflow PNG' 选项" @@ -19,15 +19,21 @@ "tooltip": "建议设置 100" }, "KayTool_SetGetForegroundColor": { - "name": "调整 '🛜 Set/Get' 节点颜色" + "name": " '🛜 Set/Get' 节点颜色" }, "KayTool_SetGetBackgroundColor": { - "name": "调整 '🛜 Set/Get' 标题颜色" + "name": " '🛜 Set/Get' 标题颜色" }, "KayTool_CustomWebLogo": { "name": "文件必须 < 1MB", - "tooltip": "这是一个测试功能,文件必须 < 1MB ,否则可能无法显示" + "tooltip": "这是一个测试功能,文件最好 <1MB ,否则可能无法显示" }, + + "KayTool_EnableAlignmentShortcuts": { + "name": "启用快捷键'Shift+W/A/S/D'", + "tooltip": "W/A/S/D对应上、左、下、右对齐" + }, + "KayTool_NodeAlignDisplayMode": { "name": "工具栏显示模式", "options": { diff --git a/pyproject.toml b/pyproject.toml index 8d7dccc..54aaaae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "kaytool" description ="KayTool enhances ComfyUI workflow efficiency with practical tools, including: image processing (resize, color, blur, expand, merge, crop), background/mask tasks via BiRefNet/RemBG, wireless data transfer (Get & Out), AI translation (Tencent/Baidu), dynamic math operations, flexible text handling, precision sliders, metadata/color profile-supported image saving, batch processing via image folder loading, canvas workflow node map export as PNG with embedded metadata, quick Run options via right-click (Run Group/Node), node alignment toolbar with custom styled styles, and custom ComfyUI logo integration." -version = "0.50.8" +version = "0.51.0" license = {file = "LICENSE"} dependencies = ["rembg, timm"] @@ -12,4 +12,4 @@ Repository = "https://github.com/kk8bit/KayTool" [tool.comfy] PublisherId = "kk8bit" DisplayName = "KayTool" -Icon = "" +Icon = "" \ No newline at end of file diff --git a/web/nodealign.js b/web/nodealign.js index 277e186..4709065 100644 --- a/web/nodealign.js +++ b/web/nodealign.js @@ -1,6 +1,7 @@ import { app } from "../../../scripts/app.js"; -// SVG 定义(已包含你的现有 SVG,新增参考代码中的两个) +// Based on NodeAligner by Tenney95 GitHub:https://github.com/Tenney95/ComfyUI-NodeAligner + const kayAlignBottomSvg = ``; const kayAlignCenterHorizontallySvg = ``; const kayAlignCenterVerticallySvg = ``; @@ -12,6 +13,7 @@ const kayEqualHeightSvg = ``; const kayVerticalDistributionSvg = ``; + let stylesInjected = false; const KayNodeAlignmentManager = { @@ -34,8 +36,9 @@ const KayNodeAlignmentManager = { this.setupToolbar(); this.restorePosition(); this.bindCanvasEvents(); + this.bindKeyboardShortcuts(); - const displayMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent"; + const displayMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode"); this.updateDisplayMode(displayMode); }, @@ -204,7 +207,6 @@ const KayNodeAlignmentManager = { document.addEventListener('mousemove', this.onDragging.bind(this)); document.addEventListener('mouseup', this.onDragEnd.bind(this)); document.addEventListener('selectstart', e => this.dragState.isDragging && e.preventDefault()); - this.addTooltip(); }, @@ -558,9 +560,38 @@ const KayNodeAlignmentManager = { bindCanvasEvents() { if (!this.canvas) return; this.canvas.addEventListener('click', () => { - const currentMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent"; + const currentMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode"); this.updateDisplayMode(currentMode); }); + }, + + bindKeyboardShortcuts() { + document.addEventListener('keydown', (e) => { + // 只在 Shift 键按下且没有其他修饰键(如 Ctrl、Alt)时检查 WASD + if (!e.shiftKey || e.ctrlKey || e.altKey || e.metaKey) return; + + const enableShortcuts = app.ui.settings.getSettingValue("KayTool.EnableAlignmentShortcuts"); + if (!enableShortcuts || this.getSelectedNodes().length < 2) return; + + switch (e.key.toLowerCase()) { + case 'w': + e.preventDefault(); + this.alignTop(); + break; + case 'a': + e.preventDefault(); + this.alignLeft(); + break; + case 's': + e.preventDefault(); + this.alignBottom(); + break; + case 'd': + e.preventDefault(); + this.alignRight(); + break; + } + }); } }; @@ -568,7 +599,7 @@ function initializeKayNodeAlignment() { if (!KayNodeAlignmentManager.isInitialized) { KayNodeAlignmentManager.init(); } else { - const displayMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode") || "permanent"; + const displayMode = app.ui.settings.getSettingValue("KayTool.NodeAlignDisplayMode"); KayNodeAlignmentManager.updateDisplayMode(displayMode); } } diff --git a/web/settings.js b/web/settings.js index 45ca678..217a735 100644 --- a/web/settings.js +++ b/web/settings.js @@ -99,12 +99,21 @@ app.registerExtension({ if (!manager || !initFn) return; if (!manager.isInitialized) { - initFn(); // 始终初始化,确保事件绑定 + initFn(); } - manager.updateDisplayMode(value); // 直接更新模式,“disabled”仅隐藏 + manager.updateDisplayMode(value); // } }); + app.ui.settings.addSetting({ + id: "KayTool.EnableAlignmentShortcuts", + name: "Enable Shift+WASD for Quick Alignment (Up/Left/Down/Right)", + type: "boolean", + defaultValue: true, + category: ["KayTool", "NodeAlignment", "Shortcuts"], + tooltip: "Use Shift+W (Up), Shift+A (Left), Shift+S (Down), Shift+D (Right) to align selected nodes." + }); + app.ui.settings.addSetting({ id: "KayTool.NodeAlignBackgroundOpacity", name: "Node Alignment Toolbar Background Opacity", @@ -213,7 +222,7 @@ function updateSetGetNodeColors() { if (node.type === "KaySetNode" || node.type === "KayGetNode" || node.type === "KayGet多元Node") { node.color = fgColor; node.bgcolor = bgColor; - if (node.updateColors) node.updateColors(); + node.updateColors(); } }); app.graph.setDirtyCanvas(true, true);