From 06b038e0ea02e731af8cdaf1c3452ee9b3aa073f Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 4 Sep 2025 13:15:58 +1000 Subject: [PATCH 01/19] improved i18n --- js/i18n.js | 100 +++++++++++------------------------ js/use_everywhere_classes.js | 6 +-- 2 files changed, 34 insertions(+), 72 deletions(-) diff --git a/js/i18n.js b/js/i18n.js index 357849e..9546394 100644 --- a/js/i18n.js +++ b/js/i18n.js @@ -4,13 +4,9 @@ export var REPEATED_TYPE_OPTIONS; export var GROUP_RESTRICTION_OPTIONS; export var COLOR_RESTRICTION_OPTIONS; -const _FUNCTIONAL = { - 'en':{ - seed_input_regex : "seed|随机种", - prompt_regex : "(_|\\b)pos(itive|_|\\b)|^prompt|正面", - negative_regex : "(_|\\b)neg(ative|_|\\b)|负面", - }, -} + +var _FUNCTIONAL = null +var _FUNCTIONAL_REGEX = null const _DISPLAY = { 'en' : { @@ -28,16 +24,8 @@ function current_language() { } export function language_changed(is_now, was_before) { - if (was_before) { - app.graph.nodes.filter((node)=>node.IS_UE).forEach((node)=>{ - // translate node inputs - node.inputs?.forEach((input)=>{ - if (input.label && input.label.startsWith(i18n('anything', was_before))) { - input.label = input.label.replace(i18n('anything', {language:was_before}), i18n('anything', {language:is_now})) - } - }) - }) - } + _FUNCTIONAL = null + REPEATED_TYPE_OPTIONS = [ i18n("Exact match of input names"), i18n("Match start of input names"), @@ -58,8 +46,33 @@ export function language_changed(is_now, was_before) { ] } +function get_functional() { + const nd = LiteGraph.createNode('KSampler') + if (nd) { + _FUNCTIONAL = { + seed_input_regex : `seed|${nd.inputs.find((i)=>(i.name=='positive')).localized_name}`, + prompt_regex : `(_|\\b)pos(itive|_|\\b)|${nd.inputs.find((i)=>(i.name=='positive')).localized_name}`, + negative_regex : `(_|\\b)neg(ative|_|\\b)|${nd.inputs.find((i)=>(i.name=='negative')).localized_name}`, + } + } +} + +function get_functional_regex() { + if (!_FUNCTIONAL) get_functional() + _FUNCTIONAL_REGEX = { + prompt_regex : new RegExp(_FUNCTIONAL.prompt_regex), + negative_regex : new RegExp(_FUNCTIONAL.negative_regex), + } +} + export function i18n_functional(v) { - return _FUNCTIONAL[current_language()]?.[v] || _FUNCTIONAL['en'][v] + if (!_FUNCTIONAL) get_functional() + return _FUNCTIONAL?.[v] || v +} + +export function i18n_functional_regex(v) { + if (!_FUNCTIONAL_REGEX) get_functional_regex() + return _FUNCTIONAL_REGEX[v] } const all_requested_stings = new Set() @@ -86,54 +99,3 @@ const toTitleCase = (phrase) => { .map(word => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); }; - -/* -"Version 7.1" -"Show links" -"All off" -"Selected nodes" -"Mouseover node" -"Selected and mouseover nodes" -"All on" -"Statically distinguish UE links" -"Render UE links, when shown, differently from normal links. Much lower performance cost than animation." -"Animate UE links" -"Animating links may have a negative impact on UI performance. Consider using Statically distinguish UE links instead." -"Off" -"Dots" -"Pulse" -"Both" -"Turn animation off when workflow is running" -"Highlight connected and connectable inputs" -"Save restrictions edit window position" -"If off, the edit window appears where the mouse is" -"Show restrictions as tooltip" -"Connect to bypassed nodes" -"By default UE links are made to the node downstream of bypassed nodes." -"Check for loops before submitting" -"Check to see if UE links have created a loop that wasn't there before" -"Logging" -"Errors Only" -"Problems" -"Information" -"Detail" -"Block workflow validation" -"Turn off workflow validation (which tends to replace UE links with real ones)" -"Exact match of input names" -"Match start of input names" -"Match end of input names" -"Inputs matches target node name" -"No restrictions" -"Send only within group" -"Send only not within group" -"Send only to same color" -"Send only to different color" -"anything" -"title" -"input" -"group" -"Group" -"Color" -"Repeated Types" -"Priority" -*/ \ No newline at end of file diff --git a/js/use_everywhere_classes.js b/js/use_everywhere_classes.js index ecc01ad..9635db8 100644 --- a/js/use_everywhere_classes.js +++ b/js/use_everywhere_classes.js @@ -1,4 +1,4 @@ -import { i18n_functional } from "./i18n.js"; +import { i18n_functional, i18n_functional_regex } from "./i18n.js"; import { default_priority } from "./ue_properties.js"; import { node_graph, visible_graph } from "./use_everywhere_subgraph_utils.js"; import { nodes_in_my_group, nodes_not_in_my_group, nodes_my_color, nodes_not_my_color, nodes_in_groups_matching } from "./use_everywhere_ui.js"; @@ -83,7 +83,7 @@ class UseEverywhere { if (this.output[0] == node.id) return false; if (this.restrict_to && !this.restrict_to.includes(node.id)) return false; - const input_label = input.label ? input.label : input.name; + const input_label = input.label || input.localized_name || input.name; const node_label = node.title ? node.title : (node.properties['Node name for S&R'] ? node.properties['Node name for S&R'] : node.type); if (this.title_regex) { if (!(this.title_regex.test(node_label))) return false; @@ -303,6 +303,6 @@ const PROMPT_REGEXES = [new RegExp(i18n_functional('prompt_regex')), new RegExp( function prompt_regex(node, i) { const reg = node.properties.ue_properties[`${P_REGEXES[i]}_regex`] if (reg) return new RegExp(reg) - else return PROMPT_REGEXES[i] + else return i18n_functional_regex(`${P_REGEXES[i]}_regex`) } From 5041712dc581f6758de79c5612394bef471f02df Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 4 Sep 2025 13:31:33 +1000 Subject: [PATCH 02/19] i18n --- js/i18n.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/i18n.js b/js/i18n.js index 9546394..c28323e 100644 --- a/js/i18n.js +++ b/js/i18n.js @@ -25,6 +25,7 @@ function current_language() { export function language_changed(is_now, was_before) { _FUNCTIONAL = null + _FUNCTIONAL_REGEX = null REPEATED_TYPE_OPTIONS = [ i18n("Exact match of input names"), From f2a0c34679404794ae7fb9b626abcb5921f6a485 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 10 Sep 2025 17:57:39 +1000 Subject: [PATCH 03/19] #369 --- README.md | 2 +- docs/options.png | Bin 46427 -> 47972 bytes js/use_everywhere.js | 33 +++++++++++++++++++++------- js/use_everywhere_graph_analysis.js | 16 -------------- js/use_everywhere_settings.js | 16 +++++++------- js/use_everywhere_ui.js | 13 +---------- 6 files changed, 35 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index e07b2b7..861f20f 100644 --- a/README.md +++ b/README.md @@ -155,9 +155,9 @@ The top set, `Graphics`, modify the visual appearance only. The bottom set, `Options`, modify behaviour: +- When connecting, use the output slot's name as the input name. When a new connection is made to a UE node, the default is to name the input with the type. Select this option to use the output name of the node the link is from. - Block workflow validation. This prevents other nodes from complaining about the lack of connections, or creating them. If you turn this off, there may be unexpected consequences. - Logging. Increase the logging level if you are asked to help debug. -- Check loops before submitting will attempt to check for loops in the workflow created by Use Everywhere links. Comfy is much better at handling this now, so I would recommend leaving it off. - Connect to bypassed nodes. When off, Use Everywhere will not connect to a bypassed node, and will attempt to work out whether an input is connected when upstream nodes are bypassed. I recommend turning this on. --- diff --git a/docs/options.png b/docs/options.png index 81ffc523aeef6f6b8edaefa0b66f745f0646e14a..7220072b8524a0246a4d7cdc5761aa528b30205e 100644 GIT binary patch literal 47972 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�FW{l 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 0){ - alert(`Loop (${e.stack}) with broadcast (${e.ues}) - not submitting workflow`); - } else { - alert(`Loop (${e.stack}) - not submitting workflow`); - } - throw new Error(`Loop Detected ${e.stack}, ${e.ues}`, {"cause":e}); - } - } - } - analyse_graph(graph) { this.ambiguity_messages = []; const treat_bypassed_as_live = settingsCache.getSettingValue("Use Everywhere.Options.connect_to_bypassed") || this.connect_to_bypassed diff --git a/js/use_everywhere_settings.js b/js/use_everywhere_settings.js index f00f876..7e4c097 100644 --- a/js/use_everywhere_settings.js +++ b/js/use_everywhere_settings.js @@ -77,14 +77,6 @@ const _SETTINGS = [ onChange: settingsCache.onSettingChange, tooltip: "By default UE links are made to the node downstream of bypassed nodes." }, - { - id: "Use Everywhere.Options.checkloops", - name: "Check for loops before submitting", - type: "boolean", - defaultValue: true, - onChange: settingsCache.onSettingChange, - tooltip: "Check to see if UE links have created a loop that wasn't there before" - }, { id: "Use Everywhere.Options.logging", name: "Logging", @@ -101,6 +93,14 @@ const _SETTINGS = [ tooltip: "Turn off workflow validation (which tends to replace UE links with real ones)", onChange: settingsCache.onSettingChange, }, + { + id: "Use Everywhere.Options.use_output_name", + name: "When connecting, use the output slot's name as the input name", + type: "boolean", + defaultValue: false, + tooltip: "By default the link type is used as the name", + onChange: settingsCache.onSettingChange, + }, ] export const SETTINGS = i18ify_settings(_SETTINGS) diff --git a/js/use_everywhere_ui.js b/js/use_everywhere_ui.js index c32ad0d..1c29d18 100644 --- a/js/use_everywhere_ui.js +++ b/js/use_everywhere_ui.js @@ -86,17 +86,6 @@ function indicate_restriction(ctx, title_height) { ctx.restore(); } -function update_input_label(node, slot, app) { - const type = node.inputs[slot].type - if (type) { - if (!node.inputs[slot].label || node.inputs[slot].label==i18n('anything')) node.inputs[slot].label = type; - node.inputs[slot].color_on = app.canvas.default_connection_color_byType[type]; - } else { - node.inputs[slot].label = i18n('anything'); - node.inputs[slot].color_on = undefined; - } -} - class LinkRenderController extends Pausable { static _instance; static instance(tga) { @@ -417,5 +406,5 @@ function modify(c) { -export {update_input_label, nodes_in_my_group, nodes_not_in_my_group, nodes_in_groups_matching, nodes_my_color, nodes_not_my_color, indicate_restriction} +export {/*update_input_label,*/ nodes_in_my_group, nodes_not_in_my_group, nodes_in_groups_matching, nodes_my_color, nodes_not_my_color, indicate_restriction} export{ LinkRenderController} From 36087e015230d9c3e46dc16b32ff317e481f7ac9 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 10 Sep 2025 18:18:51 +1000 Subject: [PATCH 04/19] much old code removal --- js/use_everywhere.js | 14 +---- js/use_everywhere_graph_analysis.js | 2 +- js/use_everywhere_utilities.js | 96 ++++------------------------- 3 files changed, 13 insertions(+), 99 deletions(-) diff --git a/js/use_everywhere.js b/js/use_everywhere.js index 545b42d..4a8bff7 100644 --- a/js/use_everywhere.js +++ b/js/use_everywhere.js @@ -1,7 +1,7 @@ import { app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; -import { is_UEnode, is_helper, inject, Logger, get_real_node, defineProperty, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js"; +import { is_UEnode, inject, Logger, get_real_node, defineProperty, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js"; import { indicate_restriction } from "./use_everywhere_ui.js"; import { LinkRenderController } from "./use_everywhere_ui.js"; import { GraphAnalyser } from "./use_everywhere_graph_analysis.js"; @@ -127,14 +127,6 @@ app.registerExtension({ }, async nodeCreated(node) { - /* TODO see if we still need this - if (!node.__mode) { - node.__mode = node.mode - defineProperty(node, "mode", { - get: ( )=>{return node.__mode}, - set: (v)=>{node.__mode = v; node.afterChangeMade?.('mode', v);} - }) - }*/ const original_afterChangeMade = node.afterChangeMade node.afterChangeMade = (p, v) => { @@ -145,10 +137,6 @@ app.registerExtension({ } } - if (is_helper(node)) { // editing a helper node makes the list dirty - inject_outdating_into_objects(node.widgets,'callback',`widget callback on ${this.id}`); - } - // removing a node makes the list dirty inject_outdating_into_object_method(node, 'onRemoved', `node ${node.id} removed`) diff --git a/js/use_everywhere_graph_analysis.js b/js/use_everywhere_graph_analysis.js index 407c1b2..f542be1 100644 --- a/js/use_everywhere_graph_analysis.js +++ b/js/use_everywhere_graph_analysis.js @@ -1,5 +1,5 @@ import { UseEverywhereList } from "./use_everywhere_classes.js"; -import { node_in_loop, node_is_live, is_connected, is_UEnode, Logger, get_real_node, Pausable } from "./use_everywhere_utilities.js"; +import { node_is_live, is_connected, is_UEnode, Logger, Pausable } from "./use_everywhere_utilities.js"; import { convert_to_links } from "./use_everywhere_apply.js"; import { app } from "../../scripts/app.js"; import { settingsCache } from "./use_everywhere_cache.js"; diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index 3088960..fa1fb2a 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -43,14 +43,14 @@ export function version_at_least(x,y) { /* Return the node object for this node_id. */ -function get_real_node(node_id, graph) { +export function get_real_node(node_id, graph) { if (!graph) graph = visible_graph() const nid = node_id.toString(); if (nid==-10) return wrap_input(graph.inputNode); // special case for subgraph input return graph._nodes_by_id[nid]; } -class Logger { +export class Logger { static LIMITED_LOG_BLOCKED = false; static LIMITED_LOG_MS = 5000; static level; // 0 for errors only, 1 activates 'log_problem', 2 activates 'log_info', 3 activates 'log_detail' @@ -200,72 +200,10 @@ class GraphConverter { export const graphConverter = GraphConverter.instance(); -class LoopError extends Error { - constructor(id, stack, ues) { - super("Loop detected"); - this.id = id; - this.stack = [...stack]; - this.ues = [...ues]; - } -} - -function find_all_upstream(node, links_added) { - const all_upstream = []; - node?.inputs?.forEach((input) => { // normal links - const link_id = input.link; - if (link_id) { - const link = app.graph.links[link_id]; - if (link) all_upstream.push({id:link.origin_id, slot:link.origin_slot}); - } - }); - links_added.forEach((la)=>{ // UE links - if (la.downstream==node.id) { - all_upstream.push({id:la.upstream, slot:la.upstream_slot, ue:la.controller.toString()}) - } - }); - - return all_upstream; -} - -function recursive_follow(node, links_added, stack, nodes_cleared, ues, count, slot) { - count += 1; - if (stack.includes(node.id.toString())) throw new LoopError(node.id, new Set(stack), new Set(ues)); - if (nodes_cleared.has(node.id.toString())) return; - stack.push(node.id.toString()); - - find_all_upstream(node, links_added).forEach((upstream) => { - if (upstream.ue) ues.push(upstream.ue); - count = recursive_follow(upstream, links_added, stack, nodes_cleared, ues, count, upstream.slot); - if (upstream.ue) ues.pop(); - }) - - nodes_cleared.add(node.id.toString()); - stack.pop(); - return count; -} - -/* -Throw a LoopError if there is a loop. -live_nodes is a list of all live (ie not bypassed) nodes in the graph -links_added is a list of the UE virtuals links -*/ -function node_in_loop(live_nodes, links_added) { - var nodes_to_check = []; - const nodes_cleared = new Set(); - live_nodes.forEach((n)=>nodes_to_check.push(n)); - var count = 0; - while (nodes_to_check.length>0) { - const node = nodes_to_check.pop(); - count += recursive_follow(node, links_added, [], nodes_cleared, [], 0, -1); - nodes_to_check = nodes_to_check.filter((nid)=>!nodes_cleared.has(nid.toString())); - } - console.log(`node_in_loop made ${count} checks`) -} - /* Is a node alive (ie not bypassed or set to never) */ -function node_is_live(node, treat_bypassed_as_live){ +export function node_is_live(node, treat_bypassed_as_live){ if (!node) return false; if (node.mode===0) return true; if (node.mode===2 || node.mode===4) return !!treat_bypassed_as_live; @@ -301,12 +239,10 @@ function handle_bypass(original_link, type, graph) { } - - /* Does this input connect upstream to a live node? */ -function is_connected(input, treat_bypassed_as_live, graph) { +export function is_connected(input, treat_bypassed_as_live, graph) { const link_id = input.link; if (link_id === null) return false; // no connection var the_link = graph.links[link_id]; @@ -320,22 +256,17 @@ function is_connected(input, treat_bypassed_as_live, graph) { /* Is this a UE node? */ -function is_UEnode(node_or_nodeType) { +export function is_UEnode(node_or_nodeType) { const title = node_or_nodeType.type || node_or_nodeType.comfyClass; return ((title) && (title.startsWith("Anything Everywhere") || title==="Seed Everywhere" || title==="Prompts Everywhere")) } -function is_helper(node_or_nodeType) { - const title = node_or_nodeType.type || node_or_nodeType.comfyClass; - return ((title) && (title.startsWith("Simple String"))) -} - /* Inject a call into a method on object with name methodname. The injection is added at the end of the existing method (if the method didn't exist, it is created) injectionthis and injectionarguments are passed into the apply call (as the this and the arguments) */ -function inject(object, methodname, tracetext, injection, injectionthis, injectionarguments) { +export function inject(object, methodname, tracetext, injection, injectionthis, injectionarguments) { const original = object[methodname]; object[methodname] = function() { original?.apply(this, arguments); @@ -343,9 +274,6 @@ function inject(object, methodname, tracetext, injection, injectionthis, injecti } } - -export { node_in_loop, handle_bypass, node_is_live, is_connected, is_UEnode, is_helper, inject, Logger, get_real_node } - export function defineProperty(instance, property, desc) { const existingDesc = Object.getOwnPropertyDescriptor(instance, property); if (existingDesc?.configurable === false) { @@ -401,16 +329,14 @@ export class Pausable { on_unpause(){} } -export function get_connection(node, i, override_type) { +export function get_connection(node, i) { const graph = node_graph(node) const in_link = node?.inputs[i]?.link; - var type = override_type; - var link = undefined; if (in_link) { - if (!override_type) type = node.inputs[i].type; - link = handle_bypass(graph.links[in_link], type, graph); - } - return { link:link, type:type } + return { link:handle_bypass(graph.links[in_link], node.inputs[i].type, graph), type:node.inputs[i].type } + } else { + return { link:undefined, type:undefined } + } } From 6828a2d5ad693cde8fa65336b69f67ceffe47d61 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 11 Sep 2025 09:36:59 +1000 Subject: [PATCH 05/19] gray our widgets in correct subgraphs --- js/use_everywhere_ui.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/js/use_everywhere_ui.js b/js/use_everywhere_ui.js index 1c29d18..909c3b0 100644 --- a/js/use_everywhere_ui.js +++ b/js/use_everywhere_ui.js @@ -156,26 +156,35 @@ class LinkRenderController extends Pausable { } disable_all_connected_widgets( disable ) { + const graph = app.canvas.graph if (disable) { - app.graph.extra['ue_links']?.forEach((uel) => { - const node = app.graph._nodes_by_id[uel.downstream] + graph.extra['ue_links']?.forEach((uel) => { + const node = graph._nodes_by_id[uel.downstream] if (node) { try { - const name = node.inputs[uel.downstream_slot].name; - const widget = node._getWidgetByName(name) - if (widget && !widget.disabled) { - this.widgets_disabled.push(widget) - widget.disabled = true; + const name = node.inputs[uel.downstream_slot]?.name; + if (name) { + const widget = node._getWidgetByName(name) + if (widget) { + if (!widget.disabled) { + this.widgets_disabled.push(widget) + widget.disabled = true; + } + widget.linkedWidgets?.filter((w)=>!w.disabled).forEach((w)=>{ + this.widgets_disabled.push(w) + w.disabled = true; + }) + } else { + // it's an input not a widget, so ignore + } + } else { + Logger.log_problem(`In disable_all_connected_widgets, for downstream node ${node.id}, slot ${uel.downstream_slot} did not return a name`) } - widget?.linkedWidgets?.filter((w)=>!w.disabled).forEach((w)=>{ - this.widgets_disabled.push(w) - w.disabled = true; - }) } catch(e) { Logger.log_error(e); } } else { - Logger.log_info(`Couldn't find node ${uel.downstream}`) + Logger.log_problem(`In disable_all_connected_widgets, couldn't find downstream node ${uel.downstream}`) } }) } else { From e15e39942fda40d28aa7963015953506a3a00fea Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 11 Sep 2025 10:46:01 +1000 Subject: [PATCH 06/19] string to combo --- README.md | 2 ++ docs/restrictions.png | Bin 21864 -> 23594 bytes js/connections.js | 37 +++++++++++++++++++++++++++++++++ js/ue_properties.js | 1 + js/ue_properties_editor.js | 7 +++++++ js/use_everywhere.js | 39 ++++++----------------------------- js/use_everywhere_classes.js | 11 +++++++++- 7 files changed, 63 insertions(+), 34 deletions(-) create mode 100644 js/connections.js diff --git a/README.md b/README.md index 861f20f..8946e03 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,8 @@ so you can match `seed` to `seed` or `noise_seed` by naming the `Anything Everyw You can rename input slots by right-clicking on the input dot - but you can't rename widget inputs - this is a limitation imposed by ComfyUI ([discussion](https://github.com/Comfy-Org/ComfyUI_frontend/issues/3654)). The work-around is to rename the target node (or use multiple `Anything Everywhere` nodes with other constraints, especially color matching). +`String to Combos` (default `no`) can be used to allow a `STRING` input to be sent to a `COMBO` widget. Since there may be a lot of combo widgets, this should be used with care - you will almost certainly want to use other restrictions (such as an `input regex`, or the `Repeated Types` constraint withj multiple strings (eg `sampler_name` and `scheduler`)) + ## Resolving clashes What if two or more `Anything Everywhere` nodes can send to the same input? diff --git a/docs/restrictions.png b/docs/restrictions.png index b2bcfde6fcaeb87712fc493ecc9a4bcdd3859b19..6c8b32055a533fbaa61ec603cf6407accc77ed09 100644 GIT binary patch literal 23594 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 E0bZckA^-pY literal 21864 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 diff --git a/js/connections.js b/js/connections.js new file mode 100644 index 0000000..65b8ead --- /dev/null +++ b/js/connections.js @@ -0,0 +1,37 @@ +import { link_is_from_subgraph_input, get_subgraph_input_type, node_graph } from "./use_everywhere_subgraph_utils.js" +import { get_real_node } from "./use_everywhere_utilities.js"; +import { app } from "../../scripts/app.js"; +import { i18n } from "./i18n.js"; +/* +Called by onConnectionsChange for a UE_Node when side == 1 (input). + +*/ +export function input_changed(node, slot, connect, link_info) { + var type = null + if (connect && link_info) { + if (link_is_from_subgraph_input(link_info)) { // input slot of subgraph + type = get_subgraph_input_type(node_graph(node), link_info.origin_slot) + } else { + type = get_real_node(link_info.origin_id, node_graph(node))?.outputs[link_info.origin_slot]?.type + } + }; + type = type || '*' + + node.inputs[slot].type = type; + if (link_info) link_info.type = type + + if (type=='*') { + node.inputs[slot].label = i18n('anything'); + node.inputs[slot].color_on = undefined; + } else { + if (app.ui.settings.getSettingValue("Use Everywhere.Options.use_output_name") && link_info) { + if (!node.inputs[slot].label || node.inputs[slot].label==i18n('anything')) { + const out_slot = app.graph.getNodeById(link_info.origin_id)?.outputs[link_info.origin_slot] + node.inputs[slot].label = out_slot?.label || out_slot?.localized_name || out_slot?.name || type; + } + } else { + node.inputs[slot].label = type; + } + node.inputs[slot].color_on = app.canvas.default_connection_color_byType[type]; + } +} \ No newline at end of file diff --git a/js/ue_properties.js b/js/ue_properties.js index 4fb68c7..bcb9092 100644 --- a/js/ue_properties.js +++ b/js/ue_properties.js @@ -61,6 +61,7 @@ const DEFAULT_PROPERTIES = { group_regex : null, priority : undefined, repeated_type_rule : 0, + string_to_combo : 0, } /* diff --git a/js/ue_properties_editor.js b/js/ue_properties_editor.js index dc8c508..c34fd9d 100644 --- a/js/ue_properties_editor.js +++ b/js/ue_properties_editor.js @@ -97,6 +97,13 @@ function create_editor_html(node) { add_select_options(node, repeated_type_select, REPEATED_TYPE_OPTIONS, `repeated_type_rule`) } + if (node.inputs.find((i)=>(i.type=="STRING"))) { + const send_to_combos_row = add_row(table, i18n("String to Combos")) + const send_to_combos_select = document.createElement('select') + add_cell(send_to_combos_row, send_to_combos_select) + add_select_options(node, send_to_combos_select, ["no", "yes"], `string_to_combo`) + } + const priority_row = add_row(table, i18n("Priority")) const priority_edit = document.createElement("input") priority_edit.value = `${node.properties.ue_properties.priority || default_priority(node)}` diff --git a/js/use_everywhere.js b/js/use_everywhere.js index 4a8bff7..7dbbf1b 100644 --- a/js/use_everywhere.js +++ b/js/use_everywhere.js @@ -1,7 +1,7 @@ import { app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; -import { is_UEnode, inject, Logger, get_real_node, defineProperty, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js"; +import { is_UEnode, inject, Logger, defineProperty, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js"; import { indicate_restriction } from "./use_everywhere_ui.js"; import { LinkRenderController } from "./use_everywhere_ui.js"; import { GraphAnalyser } from "./use_everywhere_graph_analysis.js"; @@ -9,10 +9,11 @@ import { canvas_menu_settings, SETTINGS, add_extra_menu_items } from "./use_ever import { add_debug } from "./ue_debug.js"; import { settingsCache } from "./use_everywhere_cache.js"; import { convert_to_links } from "./use_everywhere_apply.js"; -import { get_subgraph_input_type, link_is_from_subgraph_input, node_graph, visible_graph } from "./use_everywhere_subgraph_utils.js"; +import { visible_graph } from "./use_everywhere_subgraph_utils.js"; import { any_restrictions, setup_ue_properties_oncreate, setup_ue_properties_onload } from "./ue_properties.js"; import { edit_restrictions } from "./ue_properties_editor.js"; -import { language_changed, i18n } from "./i18n.js"; +import { language_changed } from "./i18n.js"; +import { input_changed } from "./connections.js"; /* The ui component that looks after the link rendering @@ -60,35 +61,7 @@ app.registerExtension({ const onConnectionsChange = nodeType.prototype.onConnectionsChange; nodeType.prototype.onConnectionsChange = function (side,slot,connect,link_info,output) { if (this.IS_UE && side==1) { // side 1 is input - var type = null - if (connect && link_info) { - if (link_is_from_subgraph_input(link_info)) { // input slot of subgraph - type = get_subgraph_input_type(node_graph(this), link_info.origin_slot) - } else { - type = get_real_node(link_info.origin_id, node_graph(this))?.outputs[link_info.origin_slot]?.type - } - }; - type = type || '*' - - this.inputs[slot].type = type; - if (link_info) link_info.type = type - - if (type=='*') { - this.inputs[slot].label = i18n('anything'); - this.inputs[slot].color_on = undefined; - } else { - if (app.ui.settings.getSettingValue("Use Everywhere.Options.use_output_name") && link_info) { - if (!this.inputs[slot].label || this.inputs[slot].label==i18n('anything')) { - const out_slot = app.graph.getNodeById(link_info.origin_id)?.outputs[link_info.origin_slot] - this.inputs[slot].label = out_slot?.label || out_slot?.localized_name || out_slot?.name || type; - } - } else { - this.inputs[slot].label = type; - } - this.inputs[slot].color_on = app.canvas.default_connection_color_byType[type]; - } - - //update_input_label(this, slot); + input_changed(this, slot, connect, link_info) if (!graphConverter.graph_being_configured) { // do the fix at the end of graph change @@ -249,7 +222,7 @@ app.registerExtension({ return options; } - /* + /* Finding a widget by it's name is something done a lot of times in rendering, so add a method that caches the names that can be used deep in the rendering code. diff --git a/js/use_everywhere_classes.js b/js/use_everywhere_classes.js index 9635db8..c03961c 100644 --- a/js/use_everywhere_classes.js +++ b/js/use_everywhere_classes.js @@ -37,6 +37,7 @@ class UseEverywhere { Object.assign(this, arguments[0]); if (this.priority === undefined) this.priority = 0; if (this.graph === undefined) this.graph = visible_graph(); + this.string_to_combo = (this.controller.properties.ue_properties.string_to_combo > 0) const from_node = get_real_node(this?.output[0], this.graph); const to_node = get_real_node(this?.controller.id, this.graph) @@ -102,7 +103,15 @@ class UseEverywhere { return false; } } - if (this.type != input.type) return false; + if (this.type != input.type) { + if (this.type=="STRING" && + input.type=="COMBO" && + this.string_to_combo) { + // allow a string to be sent to a COMBO + } else { + return false + } + } if (this.input_regex && typeof this.input_regex==='string') return false; // input_regex started '+', which targets Highway nodes only if (this.input_regex && !this.input_regex.test(input_label)) return false; From cdbe14e2070bee92febf91bfd17537c227687b17 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 11 Sep 2025 11:09:05 +1000 Subject: [PATCH 07/19] docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8946e03..67863aa 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ so you can match `seed` to `seed` or `noise_seed` by naming the `Anything Everyw You can rename input slots by right-clicking on the input dot - but you can't rename widget inputs - this is a limitation imposed by ComfyUI ([discussion](https://github.com/Comfy-Org/ComfyUI_frontend/issues/3654)). The work-around is to rename the target node (or use multiple `Anything Everywhere` nodes with other constraints, especially color matching). -`String to Combos` (default `no`) can be used to allow a `STRING` input to be sent to a `COMBO` widget. Since there may be a lot of combo widgets, this should be used with care - you will almost certainly want to use other restrictions (such as an `input regex`, or the `Repeated Types` constraint withj multiple strings (eg `sampler_name` and `scheduler`)) +`String to Combos` (default `no`) can be used to allow a `STRING` input to be sent to a `COMBO` widget. Since there may be a lot of combo widgets, this should be used with care - you will almost certainly want to use other restrictions (such as an `input regex`, or the `Repeated Types` constraint withj multiple strings (eg `sampler_name` and `scheduler`)). *No validation takes place* to ensure that the string sent is one of the combo options! ## Resolving clashes From 9daad92353e1ff891b4459d3d4d30b398fdc6c6a Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 12 Sep 2025 09:38:53 +1000 Subject: [PATCH 08/19] Combo Clone --- __init__.py | 17 ++--------------- js/combo_clone.js | 22 ++++++++++++++++++++++ js/shared.js | 6 ++++++ js/ue_properties.js | 15 +++++++-------- js/use_everywhere.js | 25 ++++++++++++++++++------- js/use_everywhere_utilities.js | 1 - use_everywhere.py | 9 +++++++++ 7 files changed, 64 insertions(+), 31 deletions(-) create mode 100644 js/combo_clone.js create mode 100644 js/shared.js diff --git a/__init__.py b/__init__.py index c68f83c..41aaef5 100644 --- a/__init__.py +++ b/__init__.py @@ -5,27 +5,14 @@ UE_VERSION = "7.1" NODE_CLASS_MAPPINGS:dict[str,Any] = { "Seed Everywhere": SeedEverywhere } -from .use_everywhere import AnythingEverywhere, AnythingSomewhere, AnythingEverywhereTriplet, SimpleString +from .use_everywhere import AnythingEverywhere, AnythingSomewhere, AnythingEverywhereTriplet, SimpleString, ComboClone NODE_CLASS_MAPPINGS["Anything Everywhere"] = AnythingEverywhere NODE_CLASS_MAPPINGS["Anything Everywhere3"] = AnythingEverywhereTriplet NODE_CLASS_MAPPINGS["Anything Everywhere?"] = AnythingSomewhere NODE_CLASS_MAPPINGS["Prompts Everywhere"] = AnythingEverywherePrompts NODE_CLASS_MAPPINGS["Simple String"] = SimpleString +NODE_CLASS_MAPPINGS["Combo Clone"] = ComboClone -import os, shutil -import folder_paths - -# temporary code to remove old javascript installs -module_js_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)), "js") -application_root_directory = os.path.dirname(folder_paths.__file__) -old_code_location = os.path.join(application_root_directory, "web", "extensions", "use_everywhere") -if os.path.exists(old_code_location): - shutil.rmtree(old_code_location) - -old_code_location = os.path.join(application_root_directory, "web", "extensions", "cg-nodes", "use_everywhere.js") -if os.path.exists(old_code_location): - os.remove(old_code_location) -# end of temporary code WEB_DIRECTORY = "./js" __all__ = ["NODE_CLASS_MAPPINGS", "WEB_DIRECTORY"] diff --git a/js/combo_clone.js b/js/combo_clone.js new file mode 100644 index 0000000..7becb08 --- /dev/null +++ b/js/combo_clone.js @@ -0,0 +1,22 @@ +import { shared } from "./shared.js" + +function update_my_widget(node) { + node.widgets[0].options.values = [...node.properties.comboclone] +} + +export function reset_comboclone_on_load(node) { + if (node.properties?.comboclone) update_my_widget(node) +} + +export function comboclone_on_connection(node, link_info) { + if (shared.graph_being_configured) return + const target_node = app.graph.getNodeById(link_info.target_id) + const input_name = target_node?.inputs[link_info.target_slot].name + const widget = target_node?.widgets?.find((w)=>(w.name==input_name)) + + if (widget?.type=="combo" && widget?.options?.values) { + node.properties.comboclone = [...widget.options.values]; + update_my_widget(node) + node.widgets[0].value = widget.value + } +} \ No newline at end of file diff --git a/js/shared.js b/js/shared.js new file mode 100644 index 0000000..28442ae --- /dev/null +++ b/js/shared.js @@ -0,0 +1,6 @@ + +class Shared { + graph_being_configured = false +} + +export const shared = new Shared() \ No newline at end of file diff --git a/js/ue_properties.js b/js/ue_properties.js index bcb9092..539d995 100644 --- a/js/ue_properties.js +++ b/js/ue_properties.js @@ -1,5 +1,6 @@ -import { VERSION, version_at_least, is_UEnode, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js" +import { VERSION, version_at_least, fix_inputs, create } from "./use_everywhere_utilities.js" import { i18n, i18n_functional, GROUP_RESTRICTION_OPTIONS, COLOR_RESTRICTION_OPTIONS } from "./i18n.js"; +import { shared } from "./shared.js"; const ALL_REGEXES = ['title', 'input', 'prompt', 'negative', 'group'] @@ -71,13 +72,11 @@ If the graph is still being configured, then that means the node is being create In that case the properties need to be set later, in setup_ue_properties_onload */ export function setup_ue_properties_oncreate(node) { - node.IS_UE = is_UEnode(node) - if (graphConverter.graph_being_configured) return - if (node.IS_UE) { - if (!node.properties) node.properties = {} - node.properties.ue_properties = {...DEFAULT_PROPERTIES} - convert_node_types(node) - } + node.IS_UE = true + if (shared.graph_being_configured) return + if (!node.properties) node.properties = {} + node.properties.ue_properties = {...DEFAULT_PROPERTIES} + convert_node_types(node) } /* diff --git a/js/use_everywhere.js b/js/use_everywhere.js index 7dbbf1b..882ee21 100644 --- a/js/use_everywhere.js +++ b/js/use_everywhere.js @@ -1,6 +1,8 @@ import { app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; +import { shared } from "./shared.js"; + import { is_UEnode, inject, Logger, defineProperty, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js"; import { indicate_restriction } from "./use_everywhere_ui.js"; import { LinkRenderController } from "./use_everywhere_ui.js"; @@ -14,6 +16,7 @@ import { any_restrictions, setup_ue_properties_oncreate, setup_ue_properties_onl import { edit_restrictions } from "./ue_properties_editor.js"; import { language_changed } from "./i18n.js"; import { input_changed } from "./connections.js"; +import { reset_comboclone_on_load, comboclone_on_connection } from "./combo_clone.js"; /* The ui component that looks after the link rendering @@ -54,16 +57,20 @@ app.registerExtension({ settings: SETTINGS, async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name=="Combo Clone") { + nodeType.prototype.IS_COMBO_CLONE = true + } /* When a node is connected or unconnected, the link list is dirty. If it is a UE node, we need to update it as well */ const onConnectionsChange = nodeType.prototype.onConnectionsChange; - nodeType.prototype.onConnectionsChange = function (side,slot,connect,link_info,output) { + nodeType.prototype.onConnectionsChange = function (side,slot,connect,link_info,output) { + if (this.IS_COMBO_CLONE && connect) comboclone_on_connection(this, link_info) if (this.IS_UE && side==1) { // side 1 is input input_changed(this, slot, connect, link_info) - if (!graphConverter.graph_being_configured) { + if (!shared.graph_being_configured) { // do the fix at the end of graph change deferred_actions.push( { fn:fix_inputs, args:[this,]} ) // disconnecting doesn't trigger graphChange call? @@ -100,7 +107,9 @@ app.registerExtension({ }, async nodeCreated(node) { - + if (!node.properties.ue_properties && !is_UEnode(node) && !shared.graph_being_configured) { + node.properties.ue_properties = { widget_ue_connectable : {}, input_ue_unconnectable : {} } + } const original_afterChangeMade = node.afterChangeMade node.afterChangeMade = (p, v) => { original_afterChangeMade?.(p,v) @@ -129,8 +138,10 @@ app.registerExtension({ graphConverter.convert_if_pre_116(n); }) } - } - setup_ue_properties_onload(node) + } + setup_ue_properties_onload(node) + + if (node.IS_COMBO_CLONE) reset_comboclone_on_load(node) }, async setup() { @@ -346,13 +357,13 @@ app.registerExtension({ beforeConfigureGraph() { linkRenderController.pause("before configure", 1000) graphAnalyser.pause("before configure", 1000) - graphConverter.graph_being_configured = true + shared.graph_being_configured = true }, afterConfigureGraph() { graphConverter.remove_saved_ue_links_recursively(app.graph) //convert_old_nodes(app.graph) - graphConverter.graph_being_configured = false + shared.graph_being_configured = false } }); diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index fa1fb2a..e4faf1d 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -102,7 +102,6 @@ class GraphConverter { this.node_input_map = {}; this.given_message = false; this.did_conversion = false; - this.graph_being_configured = false; } running_116_plus() { diff --git a/use_everywhere.py b/use_everywhere.py index 741a920..ca83012 100644 --- a/use_everywhere.py +++ b/use_everywhere.py @@ -6,6 +6,15 @@ class Base(): CATEGORY = "everywhere" RETURN_TYPES = () +class ComboClone(Base): + @classmethod + def INPUT_TYPES(s): + return {"required":{ "combo": (['connect me to a combo widget'], {}) }} + RETURN_TYPES = ("COMBO",) + + def func(self,combo): + return (combo,) + class SimpleString(Base): @classmethod def INPUT_TYPES(s): From aff730c875939db57c4361453435aee83e46e9eb Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 13 Sep 2025 12:04:36 +1000 Subject: [PATCH 09/19] 362 --- use_everywhere.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/use_everywhere.py b/use_everywhere.py index ca83012..a43eafc 100644 --- a/use_everywhere.py +++ b/use_everywhere.py @@ -10,7 +10,12 @@ class ComboClone(Base): @classmethod def INPUT_TYPES(s): return {"required":{ "combo": (['connect me to a combo widget'], {}) }} - RETURN_TYPES = ("COMBO",) + + @classmethod + def VALIDATE_INPUTS(cls, combo): + return isinstance(combo,str) + + RETURN_TYPES = (IO.ANY,) def func(self,combo): return (combo,) From d429d366dd514f8b4a5ac01389c045d70770febf Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 13 Sep 2025 18:20:39 +1000 Subject: [PATCH 10/19] connections --- js/combo_clone.js | 17 ++++++++++++----- js/connections.js | 1 + js/use_everywhere_utilities.js | 10 ++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/js/combo_clone.js b/js/combo_clone.js index 7becb08..c3f6698 100644 --- a/js/combo_clone.js +++ b/js/combo_clone.js @@ -1,11 +1,14 @@ import { shared } from "./shared.js" +import { app } from "../../scripts/app.js"; -function update_my_widget(node) { - node.widgets[0].options.values = [...node.properties.comboclone] +function update_me(node) { + node.widgets[0].options.values = [...node.properties.comboclone.options] + node.outputs[0].type = "COMBO" + node.outputs[0].label = node.properties.comboclone.name } export function reset_comboclone_on_load(node) { - if (node.properties?.comboclone) update_my_widget(node) + if (node.properties?.comboclone) update_me(node) } export function comboclone_on_connection(node, link_info) { @@ -15,8 +18,12 @@ export function comboclone_on_connection(node, link_info) { const widget = target_node?.widgets?.find((w)=>(w.name==input_name)) if (widget?.type=="combo" && widget?.options?.values) { - node.properties.comboclone = [...widget.options.values]; - update_my_widget(node) + node.properties.comboclone = { + options : [...widget.options.values], + name : input_name + } + update_me(node) node.widgets[0].value = widget.value + link_info.type = "COMBO" } } \ No newline at end of file diff --git a/js/connections.js b/js/connections.js index 65b8ead..acb9351 100644 --- a/js/connections.js +++ b/js/connections.js @@ -16,6 +16,7 @@ export function input_changed(node, slot, connect, link_info) { } }; type = type || '*' + if (type=='*' && link_info && connect) type = link_info.type node.inputs[slot].type = type; if (link_info) link_info.type = type diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index e4faf1d..b0a0f86 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -2,6 +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"; import { i18n } from "./i18n.js"; +import { shared } from "./shared.js"; export const VERSION = "7.1" @@ -163,11 +164,15 @@ class GraphConverter { convert_if_pre_116(node) { if (!node) return; - if (node.IS_UE) this.clean_ue_node(node) - if (node.properties?.ue_properties?.widget_ue_connectable) return if (node.properties?.widget_ue_connectable) return // pre 7.0 node which will be converted + if (node.IS_UE) { + if (node.properties?.ue_properties?.version) return + } else { + this.clean_ue_node(node) + } + if (!this.given_message) { Logger.log_info(`Graph was saved with a version of ComfyUI before 1.16, so Anything Everywhere will try to work out which widgets are connectable`); this.given_message = true; @@ -345,6 +350,7 @@ This is called in various places (node load, creation, link change) to ensure th export function fix_inputs(node) { if (!node.graph) return // node has been deleted prior to the fix if (node.properties.ue_properties.fixed_inputs) return + if (shared.graph_being_configured) return const empty_inputs = node.inputs.filter((inputslot)=>(inputslot.type=='*')) var excess_inputs = empty_inputs.length - 1 From 44e074cb12fe63fd1af279e71e50383d5196d877 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 14 Sep 2025 11:19:53 +1000 Subject: [PATCH 11/19] combo in subgrapoh --- js/combo_clone.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/combo_clone.js b/js/combo_clone.js index c3f6698..9c84664 100644 --- a/js/combo_clone.js +++ b/js/combo_clone.js @@ -1,5 +1,4 @@ import { shared } from "./shared.js" -import { app } from "../../scripts/app.js"; function update_me(node) { node.widgets[0].options.values = [...node.properties.comboclone.options] @@ -13,7 +12,8 @@ export function reset_comboclone_on_load(node) { export function comboclone_on_connection(node, link_info) { if (shared.graph_being_configured) return - const target_node = app.graph.getNodeById(link_info.target_id) + if (!link_info) return + const target_node = node.graph.getNodeById(link_info.target_id) const input_name = target_node?.inputs[link_info.target_slot].name const widget = target_node?.widgets?.find((w)=>(w.name==input_name)) From 35fd8a4a8ea7e929d636ddb0da33c59a3e285325 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 14 Sep 2025 13:11:44 +1000 Subject: [PATCH 12/19] all a mess --- js/combo_clone.js | 33 ++++---- js/connections.js | 135 ++++++++++++++++++++++++++++----- js/ue_properties.js | 3 +- js/use_everywhere.js | 11 ++- js/use_everywhere_utilities.js | 39 +--------- 5 files changed, 144 insertions(+), 77 deletions(-) diff --git a/js/combo_clone.js b/js/combo_clone.js index 9c84664..5d63618 100644 --- a/js/combo_clone.js +++ b/js/combo_clone.js @@ -1,6 +1,9 @@ import { shared } from "./shared.js" +import { Logger } from "./use_everywhere_utilities.js" function update_me(node) { + Logger.log_problem(`Reseting combo clone node ${node.id}`) + node.IS_COMBO_CLONE = true node.widgets[0].options.values = [...node.properties.comboclone.options] node.outputs[0].type = "COMBO" node.outputs[0].label = node.properties.comboclone.name @@ -10,20 +13,24 @@ export function reset_comboclone_on_load(node) { if (node.properties?.comboclone) update_me(node) } -export function comboclone_on_connection(node, link_info) { +export function comboclone_on_connection(node, link_info, connect) { if (shared.graph_being_configured) return - if (!link_info) return - const target_node = node.graph.getNodeById(link_info.target_id) - const input_name = target_node?.inputs[link_info.target_slot].name - const widget = target_node?.widgets?.find((w)=>(w.name==input_name)) - - if (widget?.type=="combo" && widget?.options?.values) { - node.properties.comboclone = { - options : [...widget.options.values], - name : input_name + if (connect) { + if (!link_info) return + const target_node = node.graph.getNodeById(link_info.target_id) + const input_name = target_node?.inputs[link_info.target_slot].name + const widget = target_node?.widgets?.find((w)=>(w.name==input_name)) + + if (widget?.type=="combo" && widget?.options?.values) { + node.properties.comboclone = { + options : [...widget.options.values], + name : input_name + } + update_me(node) + node.widgets[0].value = widget.value + link_info.type = "COMBO" } - update_me(node) - node.widgets[0].value = widget.value - link_info.type = "COMBO" + } else { + let a; } } \ No newline at end of file diff --git a/js/connections.js b/js/connections.js index acb9351..b2539b0 100644 --- a/js/connections.js +++ b/js/connections.js @@ -1,38 +1,131 @@ import { link_is_from_subgraph_input, get_subgraph_input_type, node_graph } from "./use_everywhere_subgraph_utils.js" -import { get_real_node } from "./use_everywhere_utilities.js"; +import { get_real_node, is_UEnode, Logger } from "./use_everywhere_utilities.js"; import { app } from "../../scripts/app.js"; import { i18n } from "./i18n.js"; -/* -Called by onConnectionsChange for a UE_Node when side == 1 (input). +import { shared } from "./shared.js"; +import { reset_comboclone_on_load } from "./combo_clone.js"; -*/ -export function input_changed(node, slot, connect, link_info) { +function get_type(node, link_info) { var type = null - if (connect && link_info) { + if (link_info) { if (link_is_from_subgraph_input(link_info)) { // input slot of subgraph type = get_subgraph_input_type(node_graph(node), link_info.origin_slot) } else { type = get_real_node(link_info.origin_id, node_graph(node))?.outputs[link_info.origin_slot]?.type } - }; - type = type || '*' - if (type=='*' && link_info && connect) type = link_info.type - - node.inputs[slot].type = type; - if (link_info) link_info.type = type - - if (type=='*') { - node.inputs[slot].label = i18n('anything'); - node.inputs[slot].color_on = undefined; + if (type != link_info.type && link_info.type != '*') { + Logger.log_problem(`Type detected from upstream, ${type} != type on link_info ${link_info.type}`) + } } else { + Logger.log_problem(`input_changed with connect true, graph_being_configured false, and no link_info`) + } + type = type || '*' + if (type!='*' && link_info) link_info.type = type + if (type=='*' && link_info) type = link_info.type + return type +} + +/* +Called by onConnectionsChange for a UE_Node when side == 1 (input). +*/ + +export function input_changed(node, slot, connect, link_info) { + if (shared.graph_being_configured) return + + if (connect) { + const type = get_type(node, link_info) if (app.ui.settings.getSettingValue("Use Everywhere.Options.use_output_name") && link_info) { - if (!node.inputs[slot].label || node.inputs[slot].label==i18n('anything')) { - const out_slot = app.graph.getNodeById(link_info.origin_id)?.outputs[link_info.origin_slot] - node.inputs[slot].label = out_slot?.label || out_slot?.localized_name || out_slot?.name || type; - } + const out_slot = node.graph.getNodeById(link_info.origin_id)?.outputs[link_info.origin_slot] + node.inputs[slot].label = out_slot?.label || out_slot?.localized_name || out_slot?.name || i18n(type); } else { - node.inputs[slot].label = type; + node.inputs[slot].label = i18n(type); } node.inputs[slot].color_on = app.canvas.default_connection_color_byType[type]; + node.inputs[slot].type = type + } else { + node.inputs[slot].label = i18n('anything'); + node.inputs[slot].color_on = undefined; + node.inputs[slot].type = '*' } + fix_inputs(node) +} + +function store_input_state(node) { + return + node.properties.ue_properties.input_state = [] + node.inputs.filter((inputslot)=>(inputslot.type!='*')).forEach((input)=>{ + node.properties.ue_properties.input_state.push( { + type : input.type, + label : input.label, + color_on : input.color_on + } ) + }) +} + +function restore_input_state(node) { + return + if (node.properties.ue_properties.input_state) { + while (node.inputs.length < node.properties.ue_properties.input_state.length+1) add_new_input(node) + while (node.inputs.length > node.properties.ue_properties.input_state.length+1) { + if (!remove_excess_input(node)) return + } + node.properties.ue_properties.input_state.forEach((state, i) => { + Object.assign(node.inputs[i], state) + }) + } else { + Logger.log_problem(`restore_input_state called for a node with no stored input state`) + } +} + +export function restore_input_states(graph) { + graph.nodes.forEach((node) => { + reset_comboclone_on_load(node) + if (node.properties.ue_properties?.input_state) restore_input_state(node) + if (is_UEnode(node)) fix_inputs(node) + if (node.subgraph) restore_input_states(node.subgraph) + }) +} + +function add_new_input(node) { + node.properties.ue_properties.next_input_index = (node.properties.ue_properties.next_input_index || 10) + 1 + node.addInput(`anything${node.properties.ue_properties.next_input_index}`, "*", {label:i18n('anything')}) +} + +function remove_excess_input(node) { + const idx = node.inputs.findIndex((inputslot)=>(inputslot.type=='*')) + if (idx>=0) { + try { + Logger.log_info(`Removing excess anything input from node ${node.id}`) + node.removeInput(idx) + return true + } catch (e) { Logger.log_error(e) } + } else { Logger.log_problem(`Something very odd happened in fix_inputs for ${node.id}`) } + return false +} + +/* +This is called in various places (node load, creation, link change) to ensure there is exactly one empty input +*/ +export function fix_inputs(node) { + if (!node.graph) return // node has been deleted prior to the fix + if (shared.graph_being_configured) return + if (node.properties.ue_properties.fixed_inputs) return store_input_state(node) + + + const empty_inputs = node.inputs.filter((inputslot)=>(inputslot.type=='*')) + var excess_inputs = empty_inputs.length - 1 + + if (excess_inputs<0) { + try { + Logger.log_info(`Adding new anything input to node ${node.id}`) + add_new_input(node) + fix_inputs(node) + } catch (e) { + Logger.log_error(e) + } + } else if (excess_inputs>0) { + if (remove_excess_input(node)) fix_inputs(node) + } + + store_input_state(node) } \ No newline at end of file diff --git a/js/ue_properties.js b/js/ue_properties.js index 539d995..0b75177 100644 --- a/js/ue_properties.js +++ b/js/ue_properties.js @@ -1,6 +1,7 @@ -import { VERSION, version_at_least, fix_inputs, create } from "./use_everywhere_utilities.js" +import { VERSION, version_at_least, create } from "./use_everywhere_utilities.js" import { i18n, i18n_functional, GROUP_RESTRICTION_OPTIONS, COLOR_RESTRICTION_OPTIONS } from "./i18n.js"; import { shared } from "./shared.js"; +import { fix_inputs } from "./connections.js"; const ALL_REGEXES = ['title', 'input', 'prompt', 'negative', 'group'] diff --git a/js/use_everywhere.js b/js/use_everywhere.js index 882ee21..2ced502 100644 --- a/js/use_everywhere.js +++ b/js/use_everywhere.js @@ -3,7 +3,7 @@ import { api } from "../../scripts/api.js"; import { shared } from "./shared.js"; -import { is_UEnode, inject, Logger, defineProperty, graphConverter, fix_inputs, create } from "./use_everywhere_utilities.js"; +import { is_UEnode, inject, Logger, defineProperty, graphConverter, create } from "./use_everywhere_utilities.js"; import { indicate_restriction } from "./use_everywhere_ui.js"; import { LinkRenderController } from "./use_everywhere_ui.js"; import { GraphAnalyser } from "./use_everywhere_graph_analysis.js"; @@ -11,11 +11,11 @@ import { canvas_menu_settings, SETTINGS, add_extra_menu_items } from "./use_ever import { add_debug } from "./ue_debug.js"; import { settingsCache } from "./use_everywhere_cache.js"; import { convert_to_links } from "./use_everywhere_apply.js"; -import { visible_graph } from "./use_everywhere_subgraph_utils.js"; +import { master_graph, visible_graph } from "./use_everywhere_subgraph_utils.js"; import { any_restrictions, setup_ue_properties_oncreate, setup_ue_properties_onload } from "./ue_properties.js"; import { edit_restrictions } from "./ue_properties_editor.js"; import { language_changed } from "./i18n.js"; -import { input_changed } from "./connections.js"; +import { input_changed, fix_inputs, restore_input_states } from "./connections.js"; import { reset_comboclone_on_load, comboclone_on_connection } from "./combo_clone.js"; /* @@ -66,7 +66,7 @@ app.registerExtension({ */ const onConnectionsChange = nodeType.prototype.onConnectionsChange; nodeType.prototype.onConnectionsChange = function (side,slot,connect,link_info,output) { - if (this.IS_COMBO_CLONE && connect) comboclone_on_connection(this, link_info) + if (this.IS_COMBO_CLONE) comboclone_on_connection(this, link_info, connect) if (this.IS_UE && side==1) { // side 1 is input input_changed(this, slot, connect, link_info) @@ -140,8 +140,6 @@ app.registerExtension({ } } setup_ue_properties_onload(node) - - if (node.IS_COMBO_CLONE) reset_comboclone_on_load(node) }, async setup() { @@ -364,6 +362,7 @@ app.registerExtension({ graphConverter.remove_saved_ue_links_recursively(app.graph) //convert_old_nodes(app.graph) shared.graph_being_configured = false + restore_input_states(master_graph()) } }); diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index b0a0f86..75d4dec 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -337,43 +337,10 @@ export function get_connection(node, i) { const graph = node_graph(node) const in_link = node?.inputs[i]?.link; if (in_link) { - return { link:handle_bypass(graph.links[in_link], node.inputs[i].type, graph), type:node.inputs[i].type } + var llink = graph.links[in_link] + llink = handle_bypass(llink, llink.type) + return { link:llink, type:llink.type } } else { return { link:undefined, type:undefined } } } - - -/* -This is called in various places (node load, creation, link change) to ensure there is exactly one empty input -*/ -export function fix_inputs(node) { - if (!node.graph) return // node has been deleted prior to the fix - if (node.properties.ue_properties.fixed_inputs) return - if (shared.graph_being_configured) return - - const empty_inputs = node.inputs.filter((inputslot)=>(inputslot.type=='*')) - var excess_inputs = empty_inputs.length - 1 - - if (excess_inputs<0) { - try { - node.properties.ue_properties.next_input_index = (node.properties.ue_properties.next_input_index || 10) + 1 - node.addInput(`anything${node.properties.ue_properties.next_input_index}`, "*", {label:i18n('anything')}) - fix_inputs(node) - } catch (e) { - Logger.log_error(e) - } - } else if (excess_inputs>0) { - const idx = node.inputs.findIndex((inputslot)=>(inputslot.type=='*')) - if (idx>=0) { - try { - node.removeInput(idx) - fix_inputs(node) - } catch (e) { - Logger.log_error(e) - } - } else { - Logger.log_problem(`Something very odd happened in fix_inputs for ${node.id}`) - } - } -} \ No newline at end of file From 3724ddeafec10ef2f79554ddb3cefc26f17b4de4 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 14 Sep 2025 20:52:06 +1000 Subject: [PATCH 13/19] cleaning up --- js/combo_clone.js | 20 ++++++++----- js/connections.js | 68 ++++++++++++++------------------------------ js/ue_properties.js | 2 +- js/use_everywhere.js | 26 +++++++++++------ 4 files changed, 53 insertions(+), 63 deletions(-) diff --git a/js/combo_clone.js b/js/combo_clone.js index 5d63618..0edaea7 100644 --- a/js/combo_clone.js +++ b/js/combo_clone.js @@ -2,18 +2,24 @@ import { shared } from "./shared.js" import { Logger } from "./use_everywhere_utilities.js" function update_me(node) { - Logger.log_problem(`Reseting combo clone node ${node.id}`) - node.IS_COMBO_CLONE = true - node.widgets[0].options.values = [...node.properties.comboclone.options] - node.outputs[0].type = "COMBO" - node.outputs[0].label = node.properties.comboclone.name + if (node.properties.comboclone) { + Logger.log_problem(`Reseting combo clone node ${node.id}`) + node.widgets[0].options.values = [...node.properties.comboclone.options] + node.outputs[0].type = "COMBO" + node.outputs[0].label = node.properties.comboclone.name + } +} + +export function is_combo_clone(node) { + return (node.type == "Combo Clone") } export function reset_comboclone_on_load(node) { - if (node.properties?.comboclone) update_me(node) + if (is_combo_clone(node)) update_me(node) } export function comboclone_on_connection(node, link_info, connect) { + if (!is_combo_clone(node)) return Logger.log_problem(`comboclone_on_connection called for node ${node.id} of type ${node.type}`) if (shared.graph_being_configured) return if (connect) { if (!link_info) return @@ -31,6 +37,6 @@ export function comboclone_on_connection(node, link_info, connect) { link_info.type = "COMBO" } } else { - let a; + // no action when we disconnect } } \ No newline at end of file diff --git a/js/connections.js b/js/connections.js index b2539b0..3410dbc 100644 --- a/js/connections.js +++ b/js/connections.js @@ -3,7 +3,7 @@ import { get_real_node, is_UEnode, Logger } from "./use_everywhere_utilities.js" import { app } from "../../scripts/app.js"; import { i18n } from "./i18n.js"; import { shared } from "./shared.js"; -import { reset_comboclone_on_load } from "./combo_clone.js"; +import { reset_comboclone_on_load, is_combo_clone } from "./combo_clone.js"; function get_type(node, link_info) { var type = null @@ -47,55 +47,33 @@ export function input_changed(node, slot, connect, link_info) { node.inputs[slot].color_on = undefined; node.inputs[slot].type = '*' } - fix_inputs(node) + fix_inputs(node, "input_changed") } -function store_input_state(node) { - return - node.properties.ue_properties.input_state = [] - node.inputs.filter((inputslot)=>(inputslot.type!='*')).forEach((input)=>{ - node.properties.ue_properties.input_state.push( { - type : input.type, - label : input.label, - color_on : input.color_on - } ) - }) -} -function restore_input_state(node) { - return - if (node.properties.ue_properties.input_state) { - while (node.inputs.length < node.properties.ue_properties.input_state.length+1) add_new_input(node) - while (node.inputs.length > node.properties.ue_properties.input_state.length+1) { - if (!remove_excess_input(node)) return - } - node.properties.ue_properties.input_state.forEach((state, i) => { - Object.assign(node.inputs[i], state) - }) - } else { - Logger.log_problem(`restore_input_state called for a node with no stored input state`) - } -} - -export function restore_input_states(graph) { +export function post_configure_fixes(graph) { graph.nodes.forEach((node) => { - reset_comboclone_on_load(node) - if (node.properties.ue_properties?.input_state) restore_input_state(node) - if (is_UEnode(node)) fix_inputs(node) - if (node.subgraph) restore_input_states(node.subgraph) + if (is_combo_clone(node)) reset_comboclone_on_load(node) + if (is_UEnode(node)) fix_inputs(node, "post_configure_fixes") + if (node.subgraph) post_configure_fixes(node.subgraph) }) } function add_new_input(node) { - node.properties.ue_properties.next_input_index = (node.properties.ue_properties.next_input_index || 10) + 1 - node.addInput(`anything${node.properties.ue_properties.next_input_index}`, "*", {label:i18n('anything')}) + Logger.log_info(`Adding new anything input to node ${node.id} (${fix_call_message})`) + try { + node.properties.ue_properties.next_input_index = (node.properties.ue_properties.next_input_index || 10) + 1 + node.addInput(`anything${node.properties.ue_properties.next_input_index}`, "*", {label:i18n('anything')}) + return true + } catch (e) { Logger.log_error(e) } + return false } function remove_excess_input(node) { const idx = node.inputs.findIndex((inputslot)=>(inputslot.type=='*')) if (idx>=0) { try { - Logger.log_info(`Removing excess anything input from node ${node.id}`) + Logger.log_info(`Removing excess anything input from node ${node.id} (${fix_call_message})`) node.removeInput(idx) return true } catch (e) { Logger.log_error(e) } @@ -106,26 +84,22 @@ function remove_excess_input(node) { /* This is called in various places (node load, creation, link change) to ensure there is exactly one empty input */ -export function fix_inputs(node) { + +var fix_call_message; + +export function fix_inputs(node, message) { + fix_call_message = message if (!node.graph) return // node has been deleted prior to the fix if (shared.graph_being_configured) return - if (node.properties.ue_properties.fixed_inputs) return store_input_state(node) - + if (node.properties.ue_properties.fixed_inputs) return const empty_inputs = node.inputs.filter((inputslot)=>(inputslot.type=='*')) var excess_inputs = empty_inputs.length - 1 if (excess_inputs<0) { - try { - Logger.log_info(`Adding new anything input to node ${node.id}`) - add_new_input(node) - fix_inputs(node) - } catch (e) { - Logger.log_error(e) - } + if (add_new_input(node)) fix_inputs(node) } else if (excess_inputs>0) { if (remove_excess_input(node)) fix_inputs(node) } - store_input_state(node) } \ No newline at end of file diff --git a/js/ue_properties.js b/js/ue_properties.js index 0b75177..dafd8f9 100644 --- a/js/ue_properties.js +++ b/js/ue_properties.js @@ -139,5 +139,5 @@ function convert_node_types(node) { if (node.properties.ue_properties[rname]==".*") node.properties.ue_properties[rname] = undefined }) - fix_inputs(node) + fix_inputs(node, "convert_node_types") } diff --git a/js/use_everywhere.js b/js/use_everywhere.js index 2ced502..3759356 100644 --- a/js/use_everywhere.js +++ b/js/use_everywhere.js @@ -15,8 +15,8 @@ import { master_graph, visible_graph } from "./use_everywhere_subgraph_utils.js" import { any_restrictions, setup_ue_properties_oncreate, setup_ue_properties_onload } from "./ue_properties.js"; import { edit_restrictions } from "./ue_properties_editor.js"; import { language_changed } from "./i18n.js"; -import { input_changed, fix_inputs, restore_input_states } from "./connections.js"; -import { reset_comboclone_on_load, comboclone_on_connection } from "./combo_clone.js"; +import { input_changed, fix_inputs, post_configure_fixes } from "./connections.js"; +import { reset_comboclone_on_load, comboclone_on_connection, is_combo_clone } from "./combo_clone.js"; /* The ui component that looks after the link rendering @@ -57,29 +57,39 @@ app.registerExtension({ settings: SETTINGS, async beforeRegisterNodeDef(nodeType, nodeData, app) { - if (nodeData.name=="Combo Clone") { - nodeType.prototype.IS_COMBO_CLONE = true - } /* When a node is connected or unconnected, the link list is dirty. If it is a UE node, we need to update it as well */ const onConnectionsChange = nodeType.prototype.onConnectionsChange; nodeType.prototype.onConnectionsChange = function (side,slot,connect,link_info,output) { - if (this.IS_COMBO_CLONE) comboclone_on_connection(this, link_info, connect) + if (is_combo_clone(this)) comboclone_on_connection(this, link_info, connect) if (this.IS_UE && side==1) { // side 1 is input input_changed(this, slot, connect, link_info) + // I suspect this is no longer needed... in which case the whole Deferred can be dumped! if (!shared.graph_being_configured) { // do the fix at the end of graph change - deferred_actions.push( { fn:fix_inputs, args:[this,]} ) + deferred_actions.push( { fn:fix_inputs, args:[this,"deferred",]} ) // disconnecting doesn't trigger graphChange call? setTimeout(deferred_actions.execute.bind(deferred_actions), 100) } + // ...to here } linkRenderController?.mark_link_list_outdated(); onConnectionsChange?.apply(this, arguments); }; + + /* Combo Clone can connect to COMBO or to UE nodes */ + if (nodeData.name=="Combo Clone") { + const onConnectOutput = nodeType.prototype.onConnectOutput + nodeType.prototype.onConnectOutput = function(outputIndex, type, input, inputNode, inputIndex) { + if (!(type=="COMBO" || is_UEnode(inputNode))) return false; + return onConnectOutput?.apply(this,arguments) + } + } + + /* Extra menu options are the node right click menu. @@ -362,7 +372,7 @@ app.registerExtension({ graphConverter.remove_saved_ue_links_recursively(app.graph) //convert_old_nodes(app.graph) shared.graph_being_configured = false - restore_input_states(master_graph()) + post_configure_fixes(master_graph()) } }); From 88a0acff1a03889e512ed13f51cc72b38b1132a7 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 15 Sep 2025 07:51:54 +1000 Subject: [PATCH 14/19] debug llink --- js/use_everywhere_utilities.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index 75d4dec..98a9c71 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -339,6 +339,10 @@ export function get_connection(node, i) { if (in_link) { var llink = graph.links[in_link] llink = handle_bypass(llink, llink.type) + if (!llink) { + Logger.log_problem(`handle_bypass failing - subgraph issue?`) + llink = graph.links[in_link] + } return { link:llink, type:llink.type } } else { return { link:undefined, type:undefined } From 1f1223f6ec0fdea2159b1308f1bd82f3599c7fc1 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 17 Sep 2025 11:49:42 +1000 Subject: [PATCH 15/19] avoid some load errors --- js/connections.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/js/connections.js b/js/connections.js index 3410dbc..af04d34 100644 --- a/js/connections.js +++ b/js/connections.js @@ -87,12 +87,21 @@ This is called in various places (node load, creation, link change) to ensure th var fix_call_message; +function fix_star_inputs(node) { + node.inputs.filter((input)=>(input.type=='*' && input.link)).forEach((input)=>{ + const llink = node.graph.links[input.link] + if (llink.type) input.type = llink + }) +} + export function fix_inputs(node, message) { fix_call_message = message if (!node.graph) return // node has been deleted prior to the fix if (shared.graph_being_configured) return if (node.properties.ue_properties.fixed_inputs) return + fix_star_inputs(node) + const empty_inputs = node.inputs.filter((inputslot)=>(inputslot.type=='*')) var excess_inputs = empty_inputs.length - 1 From c5e1cc80a01fdd7888be2f8e41a9849e271c411f Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 17 Sep 2025 13:12:08 +1000 Subject: [PATCH 16/19] 7.2 --- __init__.py | 2 +- js/shared.js | 4 +++- js/ue_properties.js | 3 ++- js/use_everywhere_settings.js | 3 ++- js/use_everywhere_utilities.js | 3 --- pyproject.toml | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/__init__.py b/__init__.py index 41aaef5..1deb80b 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ from .use_everywhere import SeedEverywhere, AnythingEverywherePrompts from typing import Any -UE_VERSION = "7.1" +UE_VERSION = "7.2" NODE_CLASS_MAPPINGS:dict[str,Any] = { "Seed Everywhere": SeedEverywhere } diff --git a/js/shared.js b/js/shared.js index 28442ae..4bed157 100644 --- a/js/shared.js +++ b/js/shared.js @@ -3,4 +3,6 @@ class Shared { graph_being_configured = false } -export const shared = new Shared() \ No newline at end of file +export const shared = new Shared() + +export const VERSION = "7.2" \ No newline at end of file diff --git a/js/ue_properties.js b/js/ue_properties.js index dafd8f9..6cf5229 100644 --- a/js/ue_properties.js +++ b/js/ue_properties.js @@ -1,7 +1,8 @@ -import { VERSION, version_at_least, create } from "./use_everywhere_utilities.js" +import { version_at_least, create } from "./use_everywhere_utilities.js" import { i18n, i18n_functional, GROUP_RESTRICTION_OPTIONS, COLOR_RESTRICTION_OPTIONS } from "./i18n.js"; import { shared } from "./shared.js"; import { fix_inputs } from "./connections.js"; +import { VERSION } from "./shared.js"; const ALL_REGEXES = ['title', 'input', 'prompt', 'negative', 'group'] diff --git a/js/use_everywhere_settings.js b/js/use_everywhere_settings.js index 7e4c097..4384caa 100644 --- a/js/use_everywhere_settings.js +++ b/js/use_everywhere_settings.js @@ -2,12 +2,13 @@ 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 { Logger, VERSION } from "./use_everywhere_utilities.js"; +import { Logger } 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"; import { is_UEnode } from "./use_everywhere_utilities.js"; import { i18ify_settings } from "./i18n.js"; +import { VERSION } from "./shared.js"; const _SETTINGS = [ { diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index 98a9c71..c7e10be 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -2,9 +2,6 @@ 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"; import { i18n } from "./i18n.js"; -import { shared } from "./shared.js"; - -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 95309c9..0aa7c0e 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.1" +version = "7.2" license = { file = "LICENSE" } dependencies = [ "comfyui-frontend-package>=1.25.0" From 3bbcea179be8155ba52eaf89fd64e1897980c845 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 25 Sep 2025 09:55:57 +1000 Subject: [PATCH 17/19] bugs --- .vscode/settings.json | 5 ++++ js/connections.js | 14 ++++++++--- js/use_everywhere.js | 4 +-- js/use_everywhere_graph_analysis.js | 1 + js/use_everywhere_utilities.js | 39 ++++++++++++++++------------- 5 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a8c2003 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python-envs.defaultEnvManager": "ms-python.python:conda", + "python-envs.defaultPackageManager": "ms-python.python:conda", + "python-envs.pythonProjects": [] +} \ No newline at end of file diff --git a/js/connections.js b/js/connections.js index af04d34..eaf0238 100644 --- a/js/connections.js +++ b/js/connections.js @@ -35,7 +35,12 @@ export function input_changed(node, slot, connect, link_info) { if (connect) { const type = get_type(node, link_info) if (app.ui.settings.getSettingValue("Use Everywhere.Options.use_output_name") && link_info) { - const out_slot = node.graph.getNodeById(link_info.origin_id)?.outputs[link_info.origin_slot] + var out_slot + if (link_info.origin_id==-10) { + out_slot = node.graph.inputNode?.allSlots[link_info.origin_slot] + } else { + out_slot = node.graph.getNodeById(link_info.origin_id)?.outputs[link_info.origin_slot] + } node.inputs[slot].label = out_slot?.label || out_slot?.localized_name || out_slot?.name || i18n(type); } else { node.inputs[slot].label = i18n(type); @@ -47,7 +52,7 @@ export function input_changed(node, slot, connect, link_info) { node.inputs[slot].color_on = undefined; node.inputs[slot].type = '*' } - fix_inputs(node, "input_changed") + } @@ -88,9 +93,12 @@ This is called in various places (node load, creation, link change) to ensure th var fix_call_message; function fix_star_inputs(node) { + node.inputs.filter((input)=>(!input.link)).forEach((input)=>{ + input.type = '*' + }) node.inputs.filter((input)=>(input.type=='*' && input.link)).forEach((input)=>{ const llink = node.graph.links[input.link] - if (llink.type) input.type = llink + if (llink.type) input.type = llink.type }) } diff --git a/js/use_everywhere.js b/js/use_everywhere.js index 3759356..952911d 100644 --- a/js/use_everywhere.js +++ b/js/use_everywhere.js @@ -67,14 +67,12 @@ app.registerExtension({ if (this.IS_UE && side==1) { // side 1 is input input_changed(this, slot, connect, link_info) - // I suspect this is no longer needed... in which case the whole Deferred can be dumped! if (!shared.graph_being_configured) { // do the fix at the end of graph change - deferred_actions.push( { fn:fix_inputs, args:[this,"deferred",]} ) + deferred_actions.push( { fn:fix_inputs, args:[this,"deferred onConnectionsChange",]} ) // disconnecting doesn't trigger graphChange call? setTimeout(deferred_actions.execute.bind(deferred_actions), 100) } - // ...to here } linkRenderController?.mark_link_list_outdated(); onConnectionsChange?.apply(this, arguments); diff --git a/js/use_everywhere_graph_analysis.js b/js/use_everywhere_graph_analysis.js index f542be1..c9d82ce 100644 --- a/js/use_everywhere_graph_analysis.js +++ b/js/use_everywhere_graph_analysis.js @@ -84,6 +84,7 @@ class GraphAnalyser extends Pausable { if (node && !node.properties.rejects_ue_links) { //if (!real_node._widget_name_map) real_node._widget_name_map = real_node.widgets?.map(w => w.name) || []; node.inputs?.forEach((input,index) => { + if (!input) return; // NoteNode has input = [undefined,] ! if (is_connected(input, treat_bypassed_as_live, node_graph(node))) return; if (node.reject_ue_connection && node.reject_ue_connection(input)) return; if (is_connectable(node, input.name)) connectable.push({node, input, index}); diff --git a/js/use_everywhere_utilities.js b/js/use_everywhere_utilities.js index c7e10be..7fd793e 100644 --- a/js/use_everywhere_utilities.js +++ b/js/use_everywhere_utilities.js @@ -133,29 +133,34 @@ class GraphConverter { } } // fix the localized names - node.inputs = node.inputs.map((input) => { - if (!input.localized_name || input.localized_name.startsWith(i18n('anything'))) input.localized_name = input.name - return input; + node.inputs = node.inputs.forEach((input) => { + if (input) { + if (!input.localized_name || input.localized_name.startsWith(i18n('anything'))) input.localized_name = input.name + } else { + let brteakpoint; + } }) // set types to match - node.inputs.forEach((input) => { - if (input.type=='*') { - const graph = node_graph(node); - if (input.link) { - const llink = graph.links[input.link]; - if (link_is_from_subgraph_input(llink)) { - input.type = get_subgraph_input_type(graph, llink.origin_slot); + if (node.inputs) { + node.inputs.forEach((input) => { + if (input.type=='*') { + const graph = node_graph(node); + if (input.link) { + const llink = graph.links[input.link]; + if (link_is_from_subgraph_input(llink)) { + input.type = get_subgraph_input_type(graph, llink.origin_slot); + } else { + input.type = llink.type; + } } else { - input.type = llink.type; + input.type = (input.label && input.label!=i18n('anything')) ? input.label : input.name } - } else { - input.type = (input.label && input.label!=i18n('anything')) ? input.label : input.name } - } - }); + }); - Logger.log_detail(`clean_ue_node ${node.id} (${node.type})`, node.inputs); + Logger.log_detail(`clean_ue_node ${node.id} (${node.type})`, node.inputs); + } } convert_if_pre_116(node) { @@ -335,7 +340,7 @@ export function get_connection(node, i) { const in_link = node?.inputs[i]?.link; if (in_link) { var llink = graph.links[in_link] - llink = handle_bypass(llink, llink.type) + llink = handle_bypass(llink, llink.type, graph) if (!llink) { Logger.log_problem(`handle_bypass failing - subgraph issue?`) llink = graph.links[in_link] From 21e1e0e17666251648a2af2c8a8d952df2b2bb56 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 1 Oct 2025 14:16:57 +1000 Subject: [PATCH 18/19] 7.2 docs --- README.md | 61 ++++++++++++++++++++++++++++++++++--------- docs/ComboClone1.png | Bin 0 -> 32544 bytes docs/ComboClone2.png | Bin 0 -> 33520 bytes docs/ComboClone3.png | Bin 0 -> 22431 bytes 4 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 docs/ComboClone1.png create mode 100644 docs/ComboClone2.png create mode 100644 docs/ComboClone3.png diff --git a/README.md b/README.md index 67863aa..a1bc935 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,25 @@ This is what the default wan 2.2 s2v video workflow looks like: --- +# 7.x Updates + +## 7.2 + +- Added support for Combo inputs via the `Combo Clone` helper node +- Fixed a number of issues related to subgraphs +- Improved handling of disconnect +- Added new options for handling multiple inputs of same type +- Added internationalisation options + +## 7.1 + +- Allowed individual inputs to block UE connections +- Added support for multiple inputs of the same type +- Fixed a number of minor subgraph issues +- Fixed a serious bug with UE on Safari [details](https://github.com/chrisgoringe/cg-use-everywhere/issues/359) + +--- + # Anything Everywhere v7 Version 7 is a major update to the Anything Everywhere nodes, so the documentation below is all new. If you are looking for the old docs, you can find them [here](https://github.com/chrisgoringe/cg-use-everywhere/README-old). @@ -162,6 +181,36 @@ The bottom set, `Options`, modify behaviour: - Logging. Increase the logging level if you are asked to help debug. - Connect to bypassed nodes. When off, Use Everywhere will not connect to a bypassed node, and will attempt to work out whether an input is connected when upstream nodes are bypassed. I recommend turning this on. +--- + +# Primitives and COMBOs and the like + +![primitives](docs/primitives.png) + +UE nodes work with the primitives added in more recent versions of Comfy (in the `primitive` submenu), +but not the old-style `Primitive`, or reroute nodes. + +It is very unlikely this will ever change, as it relates to some issues deep within Comfy. + +As of version 7.2, Combo inputs are now supported via a new helper node, `Combo Clone`. + +## Combo Clone + +For each Combo type you want to use, add a Combo Clone node. Here we want to be able to broadcast `sampler_name` and `scheduler`. + +![CC1](docs/ComboClone1.png) + +Connect the `Combo Clone` output to a widget you want it to replicate. The `Combo Clone` copies the options from that widget, and the widget name. + +![CC2](docs/ComboClone2.png) + +Disconnect the `Combo Clone` and connect it to an `Anything Everywhere` node. The name copying means you can connect multiple Combos to a single `Anything Everywhere` node. + +![CC3](docs/ComboClone3.png) + +It can now broadcast to any node with the same input type (but remember you will have to mark the Combo widget as UE Connectable, since widgets are not connectable by default). + + --- # Other features @@ -197,18 +246,6 @@ If you want to share a workflow without UE nodes being required, or to save an A This can be done for a single node by right-clicking on it and selecting `Convert to real links`, or for all UE nodes in a workflow by right-clicking the background and selecting `Convert all UEs to real links`. ---- - -# Primitives and COMBOs and the like - -![primitives](docs/primitives.png) - -UE nodes work with the primitives added in more recent versions of Comfy (in the `primitive` submenu), but not the old-style `Primitive`. -They also do not work with COMBOs (the data type used for dropdown lists, which are also a type of primitive within Comfy), or reroute nodes. - -It is very unlikely this will ever change, as it relates to some issues deep within Comfy... - -For more on this, see [this discussion](https://github.com/chrisgoringe/cg-use-everywhere/issues/69) --- diff --git a/docs/ComboClone1.png b/docs/ComboClone1.png new file mode 100644 index 0000000000000000000000000000000000000000..937eb2825cd0bdc34ffbf7baeb5deb60ccf90a09 GIT binary patch literal 32544 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 L!SJHKeaL?SDM;4; literal 0 HcmV?d00001 diff --git a/docs/ComboClone2.png b/docs/ComboClone2.png new file mode 100644 index 0000000000000000000000000000000000000000..b04370882c68859b77df0aea3d4ec18a97b8ad44 GIT binary patch literal 33520 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 MM-PWuyNJ|(0fA+X+5i9m literal 0 HcmV?d00001 From 4f21dd86dfbf8fa1d20b7e4d2d34c996966d66a3 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 1 Oct 2025 14:18:47 +1000 Subject: [PATCH 19/19] #376 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a1bc935..9f4b617 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ This is what the default wan 2.2 s2v video workflow looks like: ## 7.2 -- Added support for Combo inputs via the `Combo Clone` helper node +- Added support for [Combo inputs](#combo-clone) via the `Combo Clone` helper node - Fixed a number of issues related to subgraphs - Improved handling of disconnect - Added new options for handling multiple inputs of same type @@ -54,7 +54,7 @@ This is what the default wan 2.2 s2v video workflow looks like: Version 7 is a major update to the Anything Everywhere nodes, so the documentation below is all new. If you are looking for the old docs, you can find them [here](https://github.com/chrisgoringe/cg-use-everywhere/README-old). -If you are new to Anything Everywhere, skip to [Anything Everywhere](). +If you are new to Anything Everywhere, skip to [Anything Everywhere](#anything-everywhere). ## Major changes