From f3da44539758077617f8cb3a1959cd68c1921f44 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 28 Aug 2025 12:52:49 +1000 Subject: [PATCH] #345 --- README.md | 14 +++++- __init__.py | 2 +- docs/connectable.png | Bin 13336 -> 13179 bytes docs/connectable2.png | Bin 0 -> 20276 bytes docs/connectable3.png | Bin 0 -> 22644 bytes js/ue_properties.js | 5 +- js/use_everywhere_graph_analysis.js | 4 +- js/use_everywhere_settings.js | 73 ++++++++++++++++------------ js/use_everywhere_ui.js | 23 ++++----- js/use_everywhere_utilities.js | 2 +- pyproject.toml | 2 +- 11 files changed, 74 insertions(+), 51 deletions(-) create mode 100644 docs/connectable2.png create mode 100644 docs/connectable3.png diff --git a/README.md b/README.md index a0b11b3..efea5d8 100644 --- a/README.md +++ b/README.md @@ -68,12 +68,22 @@ You will _not_ be able to use workflows saved using v7 with older versions of Co The `Anything Everywhere` node takes one or more inputs (currently limited to one input of any data type) and sends the data to other nodes that need it. When you connect an input, a new one automatically appears. -By default the data will be sent to any `input` of the same data type which does not have a connection. +By default the data will be sent to any input of the same data type which does not have a connection, and does not have a widget providing the value. -`Anything Everywhere` does _not_ send to `widgets` by default, but if you right-click on the node that you want to receive the data you can specify which widgets should accept UE connections. +You can specify that an input should not accept data, or that one with a widget should, via the `UE Connectable Inputs` menu: +the green bar indicates an input is connectable. The `Reject UE links` option can be used to make this node completely reject UE links, regardless of other settings. ![uec](docs/connectable.png) +The node also has visual indications: a black ring and a glow on the input dot indicates it is connectable. +In the image below, `positive` has been set to not accept UE inputs, `steps` has been set to accept them, and `model` has a UE connection. + +![uec](docs/connectable2.png) + +If a widget is getting data from a UE connection, it is grayed out, like `steps` below: + +![uec](docs/connectable3.png) + You can also constrain where the data gets send through _restrictions_ applied to the `Anything Everywhere` node. These restrictions can be accessed by double-clicking the body of the node, or through the right-click menu. diff --git a/__init__.py b/__init__.py index 43d5995..f004ddf 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,6 @@ from .use_everywhere import SeedEverywhere, AnythingEverywherePrompts -UE_VERSION = "7.0.1" +UE_VERSION = "7.1" NODE_CLASS_MAPPINGS = { "Seed Everywhere": SeedEverywhere } diff --git a/docs/connectable.png b/docs/connectable.png index 3e56444df88c9d118ca8269af64f376b1f4b0448..19cf11fc5e48f71c855ad1b04a3de4b7c81d5fcc 100644 GIT binary patch literal 13179 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 literal 13336 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 diff --git a/docs/connectable2.png b/docs/connectable2.png new file mode 100644 index 0000000000000000000000000000000000000000..791a5ca08309efa589f340a765363d5e03775b7c GIT binary patch literal 20276 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 KcS#+dQSleC?WkD* literal 0 HcmV?d00001 diff --git a/js/ue_properties.js b/js/ue_properties.js index a27f41d..f26ea24 100644 --- a/js/ue_properties.js +++ b/js/ue_properties.js @@ -55,6 +55,7 @@ const DEFAULT_PROPERTIES = { group_restricted : 0, color_restricted : 0, widget_ue_connectable : {}, + input_ue_unconnectable : {}, title_regex : null, input_regex : null, group_regex : null, @@ -90,6 +91,7 @@ export function setup_ue_properties_onload(node) { group_restricted : node.properties.group_restricted, color_restricted : node.properties.color_restricted, widget_ue_connectable : node.properties.widget_ue_connectable, + input_ue_unconnectable: {}, title_regex : node.widgets_values?.[0], input_regex : node.widgets_values?.[1], group_regex : node.widgets_values?.[2], @@ -102,7 +104,8 @@ export function setup_ue_properties_onload(node) { node.properties.ue_properties.version = VERSION node.properties.ue_properties.widget_ue_connectable = node.properties.ue_properties.widget_ue_connectable || node.properties.widget_ue_connectable || - [] + {} + node.properties.ue_properties.input_ue_unconnectable = {} if (node.properties.widget_ue_connectable) delete node.properties.widget_ue_connectable } } diff --git a/js/use_everywhere_graph_analysis.js b/js/use_everywhere_graph_analysis.js index 10d0635..00de9b5 100644 --- a/js/use_everywhere_graph_analysis.js +++ b/js/use_everywhere_graph_analysis.js @@ -4,6 +4,7 @@ import { convert_to_links } from "./use_everywhere_apply.js"; import { app } from "../../scripts/app.js"; import { settingsCache } from "./use_everywhere_cache.js"; import { master_graph, node_graph, visible_graph } from "./use_everywhere_subgraph_utils.js"; +import { is_connectable } from "./use_everywhere_settings.js"; class GraphAnalyser extends Pausable { static _instance; @@ -101,8 +102,7 @@ class GraphAnalyser extends Pausable { node.inputs?.forEach((input,index) => { if (is_connected(input, treat_bypassed_as_live, node_graph(node))) return; if (node.reject_ue_connection && node.reject_ue_connection(input)) return; - if (node._getWidgetByName(input.name) && !(node.properties?.ue_properties?.widget_ue_connectable && node.properties.ue_properties.widget_ue_connectable[input.name])) return; - connectable.push({node, input, index}); + if (is_connectable(node, input.name)) connectable.push({node, input, index}); }) } }) diff --git a/js/use_everywhere_settings.js b/js/use_everywhere_settings.js index 48ae404..f9a9db8 100644 --- a/js/use_everywhere_settings.js +++ b/js/use_everywhere_settings.js @@ -2,7 +2,7 @@ import { app } from "../../scripts/app.js"; import { GraphAnalyser } from "./use_everywhere_graph_analysis.js"; import { LinkRenderController } from "./use_everywhere_ui.js"; import { convert_to_links, remove_all_ues } from "./use_everywhere_apply.js"; -import { VERSION } from "./use_everywhere_utilities.js"; +import { Logger, VERSION } from "./use_everywhere_utilities.js"; import { settingsCache } from "./use_everywhere_cache.js"; import { visible_graph } from "./use_everywhere_subgraph_utils.js"; import { edit_restrictions } from "./ue_properties_editor.js"; @@ -130,52 +130,61 @@ function submenu(properties, property, options, e, menu, node) { } } -function highlight_selected(submenu_root, node, names) { - names.forEach((name, i) => { +function show_connectable(submenu_root, node) { + node.inputs.forEach((input, i) => { const current_element = submenu_root?.querySelector(`:nth-child(${i+1})`); - if (current_element) { - if (node.properties.ue_properties['widget_ue_connectable'][name]) { - current_element.style.borderLeft = "2px solid #484"; - } else { - current_element.style.borderLeft = ""; - } - } else { - let a; - } + if (current_element) current_element.style.borderLeft = (is_connectable(node,input.name)) ? "2px solid #484" : ""; }) } +export function is_connectable(node, input_name){ + const input = node.inputs.find(i => i.name==input_name); + if (!input) { + Logger.log_error(`Can't find input ${label} on node ${node.title}`); + return false; + } + if (input.widget) { + return !!(node.properties?.ue_properties?.widget_ue_connectable?.[input_name]) + } else { + return ! (node.properties?.ue_properties?.input_ue_unconnectable?.[input_name]) + } +} + +function toggle_connectable(node, input_name){ + const input = node.inputs.find(i => i.name==input_name); + const p = node.properties.ue_properties + if (input.widget) { + p.widget_ue_connectable[input_name] = !!!p.widget_ue_connectable[input_name]; + } else { + p.input_ue_unconnectable[input_name] = !!!p.input_ue_unconnectable[input_name]; + } +} + function widget_ue_submenu(value, options, e, menu, node) { if (!(node.properties.ue_properties)) node.properties.ue_properties = {} if (!(node.properties.ue_properties.widget_ue_connectable)) node.properties.ue_properties.widget_ue_connectable = {}; - - const linkedWidgets = new Set() - node.widgets - .filter(w => w.linkedWidgets) - .forEach((widget) => { widget.linkedWidgets.forEach((lw)=>{linkedWidgets.add(lw)}) }); + if (!(node.properties.ue_properties.input_ue_unconnectable)) node.properties.ue_properties.input_ue_unconnectable = {}; - const label_name_map = {} - node.widgets - .filter(w => !linkedWidgets.has(w)) - .filter(w => !w.hidden) - .filter(w => !w.name?.includes('$$')) - .forEach((widget) => { label_name_map[widget.label || widget.name] = widget.name }); - - const labels = Array.from(Object.keys(label_name_map)) - const names = Array.from(Object.values(label_name_map)) + const label_to_name = {} + node.inputs + .filter(i => !i.hidden) + .filter(i => !i.name?.includes('$$')) + .forEach((input) => { + label_to_name[input.label || input.name] = input.name + }); const submenu = new LiteGraph.ContextMenu( - labels, + Object.keys(label_to_name), { event: e, callback: function (label) { - const name = label_name_map[label]; - node.properties.ue_properties.widget_ue_connectable[name] = !!!node.properties.ue_properties.widget_ue_connectable[name]; + const name = label_to_name[label]; + toggle_connectable(node, name); LinkRenderController.instance().mark_link_list_outdated(); - highlight_selected(this.parentElement, node, names) + show_connectable(this.parentElement, node) return true; // keep open }, parentMenu: menu, node:node} ) - highlight_selected(submenu.root, node, names) + show_connectable(submenu.root, node) } export function add_extra_menu_items(node_or_node_type, ioio) { @@ -205,7 +214,7 @@ export function non_ue_menu_settings(options, node) { if (node.widgets?.length) { options.push( { - content: "UE Connectable Widgets", + content: "UE Connectable Inputs", has_submenu: true, callback: widget_ue_submenu, } diff --git a/js/use_everywhere_ui.js b/js/use_everywhere_ui.js index ab94e9d..af4b0f9 100644 --- a/js/use_everywhere_ui.js +++ b/js/use_everywhere_ui.js @@ -3,6 +3,7 @@ import { app } from "../../scripts/app.js"; import { settingsCache } from "./use_everywhere_cache.js"; import { in_visible_graph, node_graph } from "./use_everywhere_subgraph_utils.js"; import { maybe_show_tooltip } from "./tooltip_window.js"; +import { is_connectable } from "./use_everywhere_settings.js"; function nodes_in_my_group(node) { const nodes_in = new Set(); @@ -195,24 +196,24 @@ class LinkRenderController extends Pausable { highlight_ue_connections(node, ctx) { if (!settingsCache.getSettingValue('Use Everywhere.Graphics.highlight')) return; + if (!node.inputs) return; try { this.pause('highlight_ue_connections') if (!this._list_ready()) return; - const unconnected_connectables = node.properties?.ue_properties?.widget_ue_connectable ? new Set(Object.keys(node.properties.ue_properties.widget_ue_connectable).filter((name) => (node.properties.ue_properties.widget_ue_connectable[name]))) : new Set() - node.inputs.filter((input)=>(input.link)).forEach((input) => { unconnected_connectables.delete(input.name) }); + const unconnected_connectable_names = new Set(node.inputs + .filter((input)=>is_connectable(node,input.name)) + .filter((input)=>(!input.link)) + .map((input)=>input.name) || []) + if (this.ue_list.all_connected_inputs) { this.ue_list.all_connected_inputs(node).forEach((ue_connection) => { - if (!ue_connection.control_node) { // control node deleted... - this.mark_link_list_outdated(); - return; - } - if (!node.inputs[ue_connection.input_index]) { - return - } + if (!ue_connection.control_node) return; + if (!node.inputs[ue_connection.input_index]) return + const name_sent_to = node.inputs[ue_connection.input_index].name; - unconnected_connectables.delete(name_sent_to); // remove the name from the list of connectables + unconnected_connectable_names.delete(name_sent_to); // remove the name from the list of connectables var pos2 = node.getConnectionPos(true, ue_connection.input_index, this.slot_pos1); pos2[0] -= node.pos[0]; pos2[1] -= node.pos[1]; @@ -239,7 +240,7 @@ class LinkRenderController extends Pausable { }); } - unconnected_connectables.forEach((name) => { + unconnected_connectable_names.forEach((name) => { const index = node.inputs.findIndex((i) => i.name == name); var pos2 = node.getConnectionPos(true, index, this.slot_pos1); pos2[0] -= node.pos[0]; diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index 2a856b5..e008968 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -2,7 +2,7 @@ import { app } from "../../scripts/app.js"; import { settingsCache } from "./use_everywhere_cache.js"; import { link_is_from_subgraph_input, node_graph, visible_graph, wrap_input } from "./use_everywhere_subgraph_utils.js"; -export const VERSION = "7.0.1" +export const VERSION = "7.1" export function create( tag, clss, parent, properties ) { const nd = document.createElement(tag); diff --git a/pyproject.toml b/pyproject.toml index abd71b4..802d48d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "cg-use-everywhere" description = "A set of nodes that allow data to be 'broadcast' to some or all unconnected inputs. Greatly reduces link spaghetti." -version = "7.0.1" +version = "7.1" license = { file = "LICENSE" } [project.urls]