From 16f4e93a3a65d9a19470a7588084f0db03c765d4 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Thu, 2 Jul 2026 10:26:30 +0200 Subject: [PATCH] =?UTF-8?q?Initial=20commit:=20UTFCN=20=E2=80=94=20Use=20T?= =?UTF-8?q?he=20(F***ing)=20Core=20Nodes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A ComfyUI companion that suggests core / available equivalents for custom nodes and replaces them in a workflow. - Backend (utfcn_core.py, __init__.py): read-only /utfcn/scan analysis that ranks equivalents in three tiers (curated → exact-signature → partial heuristic) from the live node registry. - Frontend (web/utfcn.js): on-add mode (Off / Suggest / Force auto-replace), bulk "Replace with core / available…" command + Extensions menu with a preview-then-confirm dialog, and a right-click single-node replace. The swap engine only rewires losslessly. - mappings.json: 7 hand-verified curated rules mined from installed packs (essentials, KJNodes, WAS); user_mappings.json for user overrides. - Docs + branding: README, icon and social banner (SVG + PNG), GPL-3.0. Co-Authored-By: Claude Opus 4.8 --- .gitignore | 4 + LICENSE | 17 ++ README.md | 106 +++++++++ __init__.py | 62 +++++ assets/icon.png | Bin 0 -> 34572 bytes assets/icon.svg | 33 +++ assets/social-preview.png | Bin 0 -> 169321 bytes assets/social-preview.svg | 63 +++++ mappings.json | 84 +++++++ pyproject.toml | 15 ++ user_mappings.json | 4 + utfcn_core.py | 264 ++++++++++++++++++++ web/utfcn.js | 489 ++++++++++++++++++++++++++++++++++++++ 13 files changed, 1141 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 __init__.py create mode 100644 assets/icon.png create mode 100644 assets/icon.svg create mode 100644 assets/social-preview.png create mode 100644 assets/social-preview.svg create mode 100644 mappings.json create mode 100644 pyproject.toml create mode 100644 user_mappings.json create mode 100644 utfcn_core.py create mode 100644 web/utfcn.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5f3a7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +*.py[cod] +.DS_Store +*.log diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fd84958 --- /dev/null +++ b/LICENSE @@ -0,0 +1,17 @@ +UTFCN — Use The F***ing Core Nodes +Copyright (C) 2026 ethanfel + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . + +SPDX-License-Identifier: GPL-3.0-or-later +The full license text is available at: https://www.gnu.org/licenses/gpl-3.0.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..782652a --- /dev/null +++ b/README.md @@ -0,0 +1,106 @@ +

+ UTFCN — Use The Core Nodes +

+ +# UTFCN — Use The F***ing Core Nodes + +A ComfyUI companion that nudges your workflows back toward **core nodes**. Over +time a graph accumulates custom nodes that just re-implement things ComfyUI now +ships itself. UTFCN spots those and helps you swap them out — fewer dependencies, +more portable workflows. + +It does three things: + +1. **On add** — drop a custom node that has a core (or otherwise installed) + equivalent and, depending on the mode, UTFCN either shows a quiet tip or + (in **Force mode**) auto-replaces it with the equivalent on the spot. +2. **Replace across a workflow** — `Extensions ▸ UTFCN ▸ Replace custom nodes + with core / available…` (also in the command palette). It scans the open + graph and shows a **preview** of every swap before anything changes. +3. **Replace one node** — right-click any custom node ▸ **Replace with core / + available**. + +Nothing is ever swapped without your say-so, and the engine only rewires slots +it can move *losslessly* — anything it can't map is reported, not guessed. + +## How it decides what's equivalent + +The backend reads the live node registry (real `INPUT_TYPES` / `RETURN_TYPES` +and each node's source module) and ranks candidates in three tiers: + +| Tier | Meaning | Auto-applied? | +|------|---------|---------------| +| **curated** | a hand-written rule in `mappings.json` / `user_mappings.json` | yes (verified) | +| **exact** | identical input names+types and output types to a core/other-pack node | yes (verified) | +| **partial** | can structurally stand in (accepts all inputs, provides all outputs) but names/slots differ | suggestion only | + +"Available" means core is preferred, and if there's no core match it will offer +an equivalent from a **different installed pack** as a fallback. + +## Shipped equivalences + +`mappings.json` ships a small, hand-verified set (each checked lossless against +the real core signatures): + +- `GetImageSize+` (essentials) → core `GetImageSize` +- `MaskPreview+` (essentials) → core `MaskPreview` +- `BOOLConstant` / `INTConstant` / `FloatConstant` (KJNodes) → core + `PrimitiveBoolean` / `PrimitiveInt` / `PrimitiveFloat` +- `Convert Masks to Images` / `Mask Invert` (WAS) → core `MaskToImage` / + `InvertMask` + +Rules for nodes you don't have installed are simply ignored. Everything else is +found live: exact-signature matches auto-apply, looser ones are suggested. + +## Adding your own equivalences + +To bless a partial match as safe, or to fix up slots whose names differ, add a +rule to **`user_mappings.json`** (merged over the shipped `mappings.json`, +survives updates): + +```json +{ + "rules": { + "SomeCustomNode": [ + { + "to": "CoreNode", + "note": "why they're equivalent (shown in the preview)", + "inputs": { "old_input": "new_input" }, + "widgets": { "old_widget": "new_widget" }, + "outputs": { "old_output": "new_output" } + } + ] + } +} +``` + +List targets in preference order (put the core node first). Any slot you don't +list is matched by identical name, then by type + order. After editing, run +`Extensions ▸ UTFCN ▸ Refresh equivalence index` (no restart needed). + +## Settings + +**UTFCN ▸ On add ▸ When adding a custom node that has a core / available +equivalent:** + +- **Off** — do nothing. +- **Suggest** (default) — show a tip pointing at the equivalent. +- **Force (auto-replace with core)** — immediately swap it for the equivalent. + Force only ever applies **verified** matches (curated or exact-signature); it + never auto-applies a heuristic guess, and it never fires while you're opening + or importing a workflow — only on nodes *you* add. Undo with Ctrl+Z. + +## Install + +Clone into `ComfyUI/custom_nodes/` and restart ComfyUI: + +``` +git clone https://github.com/ethanfel/ComfyUI-UTFCN +``` + +No Python dependencies. The node adds a single read-only server route +(`/utfcn/scan`) and a frontend extension. + +## License + +GPL-3.0-or-later. See [LICENSE](LICENSE). diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..0edc859 --- /dev/null +++ b/__init__.py @@ -0,0 +1,62 @@ +""" +UTFCN — Use The F***ing Core Nodes. + +A ComfyUI companion that nudges workflows back toward core nodes: + + 1. Suggests a core (or otherwise-available) equivalent when you add a custom + node that re-implements something ComfyUI already ships. + 2. Adds a "Replace custom nodes with core / available…" command + menu entry + that scans the open graph and, after a preview, swaps in equivalents. + 3. Adds a right-click "Replace with core / available" item on individual nodes. + +All of that is frontend behaviour (see web/utfcn.js). This backend only serves +the *analysis*: it has the live node registry, so it computes — accurately, from +real INPUT_TYPES / RETURN_TYPES — which custom nodes have safe equivalents. + + GET /utfcn/scan[?refresh=1] -> { sources, candidates, stats } + +Curated overrides live in mappings.json (shipped) and user_mappings.json (yours). +""" + +import os + +from aiohttp import web +from server import PromptServer + +from . import utfcn_core + +VERSION = "1.0.0" +_DIR = os.path.dirname(os.path.realpath(__file__)) + +# The scan walks the whole registry, so we cache it and only rebuild on demand. +_INDEX_CACHE = None + + +def _get_index(refresh=False): + global _INDEX_CACHE + if refresh or _INDEX_CACHE is None: + rules = utfcn_core.load_rules(_DIR) + _INDEX_CACHE = utfcn_core.build_index(rules) + return _INDEX_CACHE + + +routes = PromptServer.instance.routes + + +@routes.get("/utfcn/scan") +async def utfcn_scan(request): + refresh = request.query.get("refresh") in ("1", "true", "yes") + try: + return web.json_response(_get_index(refresh)) + except Exception as e: + # never let a scan failure break the editor — the frontend degrades gracefully + print(f"[UTFCN] scan failed: {e}") + return web.json_response({"sources": {}, "candidates": {}, "stats": {}, "error": str(e)}, status=500) + + +WEB_DIRECTORY = "./web" +NODE_CLASS_MAPPINGS = {} +NODE_DISPLAY_NAME_MAPPINGS = {} +__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"] + +print(f"[UTFCN] loaded (v{VERSION}) — Use The F***ing Core Nodes") diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2868b6040c92a512697803d67a9124d7f7432ed2 GIT binary patch literal 34572 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 M07*qoM6N<$f=)EqH2?qr literal 0 HcmV?d00001 diff --git a/assets/icon.svg b/assets/icon.svg new file mode 100644 index 0000000..cedd08b --- /dev/null +++ b/assets/icon.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/social-preview.png b/assets/social-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..e0825252e4c7f422df7b41920a9186f2e0e32624 GIT binary patch literal 169321 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ΠS(ArMZd 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 + + + + + + + + + + + + + + + + + + + + + COMFYUI · CUSTOM NODE + UTFCN + Use The Core Nodes + Spots custom nodes that re-implement core, and + replaces them with the built-in equivalent — safely. + + + + + Suggest + + Replace + + Force mode + + + github.com/ethanfel/ComfyUI-UTFCN + + + + + + + + + + custom + + + + + core + + + + + + + + + + diff --git a/mappings.json b/mappings.json new file mode 100644 index 0000000..c2f3aae --- /dev/null +++ b/mappings.json @@ -0,0 +1,84 @@ +{ + "_readme": [ + "UTFCN curated equivalence rules (the 'verified' tier — safe to auto-apply, incl. Force mode).", + "", + "You rarely NEED rules: UTFCN already auto-detects any custom node whose input", + "name->type map and ordered output types are IDENTICAL to a core node ('exact'", + "tier), and surfaces looser 'partial' matches as suggestions. Add a rule here", + "only to (a) bless a partial match as safe to auto-apply, or (b) fix up slots", + "whose NAMES differ so the swap stays lossless.", + "", + "Schema — 'rules' maps a source node type to ONE target or an ordered list of", + "targets (first installed one wins, so put the core node first):", + "", + " \"rules\": {", + " \"SourceNodeType\": [", + " {", + " \"to\": \"TargetNodeType\",", + " \"note\": \"why this is equivalent (shown in the preview)\",", + " \"inputs\": { \"srcInputName\": \"dstInputName\" },", + " \"widgets\": { \"srcWidgetName\": \"dstWidgetName\" },", + " \"outputs\": { \"srcOutputName\": \"dstOutputName\" }", + " }", + " ]", + " }", + "", + "Any input/widget/output slot you don't list is matched by identical name, then", + "by type+order. Don't edit this file for your own rules — put those in", + "user_mappings.json (same schema); it is merged on top and survives updates.", + "", + "The rules below were mined from installed packs (ComfyUI_essentials, KJNodes,", + "was-node-suite) and verified lossless against the real core signatures. Rules", + "for nodes you don't have installed are simply ignored." + ], + + "rules": { + "GetImageSize+": [ + { + "to": "GetImageSize", + "note": "essentials Get Image Size == core Get Image Size; 'count' is core's 'batch_size'.", + "outputs": { "count": "batch_size" } + } + ], + "MaskPreview+": [ + { + "to": "MaskPreview", + "note": "essentials mask preview == core MaskPreview (same single-MASK preview node)." + } + ], + + "BOOLConstant": [ + { + "to": "PrimitiveBoolean", + "note": "KJ boolean constant == core Primitive Boolean (single BOOLEAN passthrough)." + } + ], + "INTConstant": [ + { + "to": "PrimitiveInt", + "note": "KJ int constant == core Primitive Int. Core adds a (fixed) control_after_generate; value is identical." + } + ], + "FloatConstant": [ + { + "to": "PrimitiveFloat", + "note": "KJ float constant == core Primitive Float. KJ rounds to 6 decimals; negligible for a UI constant." + } + ], + + "Convert Masks to Images": [ + { + "to": "MaskToImage", + "note": "WAS mask->image == core MaskToImage (broadcast MASK to a 3-channel IMAGE).", + "inputs": { "masks": "mask" } + } + ], + "Mask Invert": [ + { + "to": "InvertMask", + "note": "WAS mask invert == core InvertMask (1.0 - mask).", + "inputs": { "masks": "mask" } + } + ] + } +} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0474eb6 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "comfyui-utfcn" +description = "Use The F***ing Core Nodes — suggests core (or otherwise-available) equivalents for custom nodes, and replaces them across a workflow after a preview." +version = "1.0.0" +license = { text = "GPL-3.0-or-later" } +dependencies = [] + +[project.urls] +Repository = "https://github.com/ethanfel/ComfyUI-UTFCN" +Documentation = "https://github.com/ethanfel/ComfyUI-UTFCN#readme" + +[tool.comfy] +PublisherId = "ethanfel" +DisplayName = "UTFCN — Use The Core Nodes" +Icon = "https://raw.githubusercontent.com/ethanfel/ComfyUI-UTFCN/main/assets/icon.png" diff --git a/user_mappings.json b/user_mappings.json new file mode 100644 index 0000000..5e0c14a --- /dev/null +++ b/user_mappings.json @@ -0,0 +1,4 @@ +{ + "_readme": "Your own curated equivalence rules — merged on top of mappings.json (yours win). Same schema; see mappings.json's _readme. This file is safe to keep across updates.", + "rules": {} +} diff --git a/utfcn_core.py b/utfcn_core.py new file mode 100644 index 0000000..5c07cef --- /dev/null +++ b/utfcn_core.py @@ -0,0 +1,264 @@ +""" +UTFCN — Use The F***ing Core Nodes. Backend analysis engine. + +This module runs inside the ComfyUI server process, so it can see the live node +registry (``nodes.NODE_CLASS_MAPPINGS``) with every node's real INPUT_TYPES / +RETURN_TYPES and its source module. That's exactly the ground truth needed to +answer the only interesting question here: + + "This custom node — is there a CORE node (or, failing that, a node from a + DIFFERENT installed pack) that does the same job, and could I swap it in + without breaking the graph?" + +We answer it in three tiers, from most to least trustworthy: + + curated a hand-written rule in mappings.json / user_mappings.json. + Carries explicit input/widget/output name remaps. Verified. + exact the candidate's signature (input name→type map + ordered output + types) is IDENTICAL to the source's. Safe to remap by name. + Verified. + partial the candidate can structurally accept every input the source has + and provides every output type the source has, but names / extra + slots differ. A *suggestion* only — never auto-applied. + +The frontend consumes the result: `verified` candidates power auto-replace, +`partial` ones are shown for the user to confirm. +""" + +import json +import os +from collections import Counter, defaultdict + +# Top-level python modules we consider "core" (shipped with ComfyUI itself). +# server.py exposes each class's origin as RELATIVE_PYTHON_MODULE (default "nodes"). +CORE_TOPLEVEL = ("nodes", "comfy_extras", "comfy_api_nodes", "comfy_api") + +# Widget-ish primitive types. These are values the user types, not graph links, +# so they matter for widget-value transfer but not for link compatibility. +WIDGET_TYPES = frozenset({"INT", "FLOAT", "STRING", "BOOLEAN", "COMBO"}) + + +def _module_of(cls): + return getattr(cls, "RELATIVE_PYTHON_MODULE", "nodes") or "nodes" + + +def _source_kind(module): + top = module.split(".", 1)[0] + if top == "custom_nodes": + return "custom" + if top in CORE_TOPLEVEL: + return "core" + return "core" # anything unexpected is treated as first-party + + +def _pack_of(module): + parts = module.split(".") + if parts[0] == "custom_nodes" and len(parts) > 1: + return parts[1] + return parts[0] + + +def _spec_type(spec): + """Reduce an INPUT_TYPES spec (``("IMAGE",)`` / ``(["a","b"], {...})``) to a type string.""" + t = spec[0] if isinstance(spec, (list, tuple)) and spec else spec + if isinstance(t, list): # a list of choices == a combo/dropdown widget + return "COMBO" + return str(t) + + +def _signature(cls): + """Extract a comparable signature: inputs {name->type}, required names, ordered output types.""" + try: + it = cls.INPUT_TYPES() + except Exception: + it = {} + inputs, required = {}, set() + for section in ("required", "optional"): + for name, spec in (it.get(section) or {}).items(): + try: + inputs[name] = _spec_type(spec) + except Exception: + inputs[name] = "*" + if section == "required": + required.add(name) + outputs = [str(t) for t in (getattr(cls, "RETURN_TYPES", ()) or ())] + out_names = [str(n) for n in (getattr(cls, "RETURN_NAMES", ()) or [])] + return {"inputs": inputs, "required": required, "outputs": outputs, "output_names": out_names} + + +def _first_output_type(sig): + return sig["outputs"][0] if sig["outputs"] else "" + + +def _is_exact(a, b): + """Identical enough that a name-based remap is trivially safe.""" + return a["inputs"] == b["inputs"] and a["outputs"] == b["outputs"] + + +def _feasible(src, cand): + """Can `cand` structurally stand in for `src`? (accepts all its inputs, provides all its outputs)""" + src_in = Counter(src["inputs"].values()) + cand_in = Counter(cand["inputs"].values()) + in_ok = not (src_in - cand_in) # every source input type available on candidate + src_out = Counter(src["outputs"]) + cand_out = Counter(cand["outputs"]) + out_ok = not (src_out - cand_out) # candidate provides every source output type + return in_ok and out_ok + + +def _score(src, cand): + """Signature-overlap score in [0,1]; higher = more alike. Rewards matching names too.""" + src_in, cand_in = Counter(src["inputs"].values()), Counter(cand["inputs"].values()) + src_out, cand_out = Counter(src["outputs"]), Counter(cand["outputs"]) + overlap = sum((src_in & cand_in).values()) + sum((src_out & cand_out).values()) + total = sum(src_in.values()) + sum(src_out.values()) + base = overlap / total if total else 0.0 + # small bonus for shared input names — a strong signal of a deliberate re-implementation + shared_names = len(set(src["inputs"]) & set(cand["inputs"])) + name_bonus = 0.15 * (shared_names / len(src["inputs"])) if src["inputs"] else 0.0 + return min(1.0, base + name_bonus) + + +# score below which a partial match isn't worth surfacing +_PARTIAL_THRESHOLD = 0.5 +# max candidates returned per source node +_MAX_CANDIDATES = 6 + + +def _normalise_rules(raw): + """Accept both {source: {...single...}} and {source: [ {...}, {...} ]} shapes.""" + out = {} + for src, val in (raw.get("rules") or {}).items(): + targets = val if isinstance(val, list) else [val] + out[src] = [t for t in targets if isinstance(t, dict) and t.get("to")] + return out + + +def load_rules(base_dir): + """Load builtin mappings.json, then deep-merge user_mappings.json on top (user wins per source).""" + merged = {} + for fname in ("mappings.json", "user_mappings.json"): + path = os.path.join(base_dir, fname) + if not os.path.isfile(path): + continue + try: + with open(path, "r", encoding="utf-8") as f: + merged.update(_normalise_rules(json.load(f))) + except Exception as e: # a broken user file must never take the server down + print(f"[UTFCN] failed to read {fname}: {e}") + return merged + + +def build_index(rules): + """ + Build the full equivalence index for the current node registry. + + `rules` is the merged curated mapping: {sourceType: [ {to, note, inputs, widgets, outputs}, ... ]}. + + Returns: + { + "sources": {type: {"source": "core"|"custom", "pack": str, "display": str}}, + "candidates": {customType: [candidate, ...]}, # only custom nodes with >=1 candidate + "stats": {...}, + } + """ + import nodes # imported here so the module stays importable outside ComfyUI + + classes = nodes.NODE_CLASS_MAPPINGS + displays = getattr(nodes, "NODE_DISPLAY_NAME_MAPPINGS", {}) + + sources, sigs = {}, {} + for name, cls in classes.items(): + module = _module_of(cls) + kind = _source_kind(module) + sources[name] = {"source": kind, "pack": _pack_of(module), "display": displays.get(name, name)} + sigs[name] = _signature(cls) + + # Bucket every potential *target* by its first output type so a source only + # gets compared against nodes that could plausibly feed the same downstream. + by_out = defaultdict(list) + for name in classes: + by_out[_first_output_type(sigs[name])].append(name) + + candidates = {} + verified_count = 0 + for src_name, meta in sources.items(): + if meta["source"] != "custom": + continue + src_sig = sigs[src_name] + src_pack = meta["pack"] + found, seen = [], set() + + # --- tier 1: curated rules (ordered preference; core-first is the author's job) --- + for rule in rules.get(src_name, []): + to = rule.get("to") + if not to or to == src_name or to not in classes or to in seen: + continue + seen.add(to) + found.append(_candidate(to, sources, "curated", 1.0, rule)) + + # --- tiers 2 & 3: signature matching within the same output bucket --- + bucket = by_out.get(_first_output_type(src_sig), []) + ranked = [] + for cand_name in bucket: + if cand_name in seen or cand_name == src_name: + continue + cand_meta = sources[cand_name] + # target must be core, or a DIFFERENT installed pack (fallback-to-available) + if cand_meta["source"] == "custom" and cand_meta["pack"] == src_pack: + continue + cand_sig = sigs[cand_name] + if not _feasible(src_sig, cand_sig): + continue + if _is_exact(src_sig, cand_sig): + ranked.append((cand_name, "exact", 1.0)) + else: + sc = _score(src_sig, cand_sig) + if sc >= _PARTIAL_THRESHOLD: + ranked.append((cand_name, "partial", sc)) + + # order: core before pack; exact before partial; higher score first + ranked.sort(key=lambda r: ( + 0 if sources[r[0]]["source"] == "core" else 1, + 0 if r[1] == "exact" else 1, + -r[2], + )) + for cand_name, tier, sc in ranked: + if cand_name in seen: + continue + seen.add(cand_name) + found.append(_candidate(cand_name, sources, tier, sc, None)) + + if found: + candidates[src_name] = found[:_MAX_CANDIDATES] + if any(c["verified"] for c in candidates[src_name]): + verified_count += 1 + + stats = { + "nodes": len(sources), + "custom": sum(1 for m in sources.values() if m["source"] == "custom"), + "replaceable": len(candidates), + "verified": verified_count, + } + return {"sources": sources, "candidates": candidates, "stats": stats} + + +def _candidate(to, sources, tier, score, rule): + meta = sources[to] + cand = { + "to": to, + "to_display": meta["display"], + "source": meta["source"], # "core" | "custom" + "pack": meta["pack"], + "tier": tier, # "curated" | "exact" | "partial" + "verified": tier in ("curated", "exact"), + "score": round(float(score), 3), + } + if rule: + # explicit name remaps travel to the frontend so the swap is exact + for key in ("inputs", "widgets", "outputs"): + if isinstance(rule.get(key), dict): + cand[key] = rule[key] + if rule.get("note"): + cand["note"] = rule["note"] + return cand diff --git a/web/utfcn.js b/web/utfcn.js new file mode 100644 index 0000000..88a769d --- /dev/null +++ b/web/utfcn.js @@ -0,0 +1,489 @@ +import { app } from "../../scripts/app.js"; + +/* + * UTFCN — Use The F***ing Core Nodes (frontend). + * + * The backend (/utfcn/scan) tells us, for every custom node type, which core (or + * other-pack) nodes could stand in for it, split into: + * verified — curated rule or an identical signature; safe to auto-apply. + * partial — structurally compatible but looser; a suggestion to confirm. + * + * This file turns that into three things: + * 1. a toast tip when you interactively drop a replaceable custom node; + * 2. a "Replace custom nodes with core / available…" command + Extensions menu + * entry that previews every swap in the open graph before applying; + * 3. a right-click "Replace with core / available" item on individual nodes. + * + * Every actual swap goes through the same engine (planSwap → applySwap): it only + * touches slots it can rewire losslessly and reports anything it can't. + */ + +const EXT = "UTFCN"; +let INDEX = null; // { sources, candidates, stats } +const shapeCache = new Map(); // targetType -> { inputs, outputs, widgetNames } | null + +/* -------------------------------------------------------------------------- */ +/* data */ +/* -------------------------------------------------------------------------- */ + +async function loadIndex(refresh = false) { + try { + const r = await app.api.fetchApi("/utfcn/scan" + (refresh ? "?refresh=1" : "")); + INDEX = await r.json(); + } catch (e) { + INDEX = { sources: {}, candidates: {}, stats: {} }; + console.error("[UTFCN] scan failed:", e); + } + if (refresh) shapeCache.clear(); + return INDEX; +} + +const sourceInfo = (type) => INDEX?.sources?.[type]; +const isCustom = (type) => sourceInfo(type)?.source === "custom"; +const candidatesFor = (type) => INDEX?.candidates?.[type] || []; + +function toast(severity, detail, life = 5000) { + try { app.extensionManager?.toast?.add?.({ severity, summary: EXT, detail, life }); } + catch { /* older ComfyUI: no toast API */ } + if (severity === "error") console.error("[UTFCN]", detail); +} + +/* -------------------------------------------------------------------------- */ +/* swap engine */ +/* -------------------------------------------------------------------------- */ + +/** True if two slot type strings can be connected (handles "*" and "A,B" unions). */ +function typeOk(a, b) { + if (a == null || b == null) return false; + if (a === "*" || b === "*" || a === "" || b === "") return true; + const A = String(a).split(","), B = String(b).split(","); + return A.some((x) => B.includes(x)); +} + +/** A widget the user converted into an input slot — its value lives on the input, not the widget. */ +const isConvertedWidget = (w) => w?.type === "converted-widget" || w?.type === "hidden"; + +/** Inspect a target type's slot/widget layout once (creating a throwaway node) and cache it. */ +function targetShape(type) { + if (shapeCache.has(type)) return shapeCache.get(type); + let node = null; + try { node = window.LiteGraph.createNode(type); } catch { /* unregistered */ } + const shape = node && { + inputs: (node.inputs || []).map((s) => ({ name: s.name, type: s.type })), + outputs: (node.outputs || []).map((s) => ({ name: s.name, type: s.type })), + widgetNames: (node.widgets || []).map((w) => w.name), + }; + shapeCache.set(type, shape || null); + return shape || null; +} + +/** + * Work out exactly how `node` would map onto `targetType`, honouring an optional + * curated `rule` (name remaps). Only *connected* inputs and *linked* outputs must + * map — an unmappable one is a hard problem; a dropped widget value is a warning. + */ +function planSwap(node, targetType, rule) { + const shape = targetShape(targetType); + if (!shape) return { ok: false, problems: [`“${targetType}” is not available`], warns: [], targetType }; + + const problems = [], warns = [], inMap = [], outMap = [], wMap = []; + const usedIn = new Set(), usedOut = new Set(); + + (node.inputs || []).forEach((inp, i) => { + if (inp.link == null) return; // unconnected → nothing to carry + const want = rule?.inputs?.[inp.name] ?? inp.name; + let j = shape.inputs.findIndex((s, k) => !usedIn.has(k) && s.name === want); + if (j < 0) j = shape.inputs.findIndex((s, k) => !usedIn.has(k) && typeOk(inp.type, s.type)); + if (j < 0) { problems.push(`input “${inp.name}” (${inp.type}) has no match`); return; } + if (!typeOk(inp.type, shape.inputs[j].type)) { problems.push(`input “${inp.name}”: ${inp.type} ≠ ${shape.inputs[j].type}`); return; } + usedIn.add(j); inMap.push({ src: i, dst: j }); + }); + + (node.outputs || []).forEach((out, i) => { + const links = (out.links || []).length; + if (!links) return; // no downstream → nothing to carry + const want = rule?.outputs?.[out.name] ?? out.name; + let j = shape.outputs.findIndex((s, k) => !usedOut.has(k) && s.name === want); + if (j < 0) j = shape.outputs.findIndex((s, k) => !usedOut.has(k) && typeOk(out.type, s.type)); + if (j < 0) { problems.push(`output “${out.name}” (${out.type}, ${links} link${links > 1 ? "s" : ""}) has no match`); return; } + if (!typeOk(shape.outputs[j].type, out.type)) { problems.push(`output “${out.name}”: ${out.type} ≠ ${shape.outputs[j].type}`); return; } + usedOut.add(j); outMap.push({ src: i, dst: j }); + }); + + (node.widgets || []).forEach((w) => { + if (w.name == null || isConvertedWidget(w)) return; + const want = rule?.widgets?.[w.name] ?? w.name; + if (shape.widgetNames.includes(want)) wMap.push({ from: w.name, to: want }); + else if (w.value !== undefined && w.value !== null && w.value !== "") warns.push(`widget “${w.name}” value not carried`); + }); + + return { ok: problems.length === 0, problems, warns, inMap, outMap, wMap, targetType }; +} + +/** Perform the swap described by `plan`: create the target, move links + widget values, delete the source. Returns the new node (or null). */ +function applySwap(node, plan, rule) { + const graph = node.graph; + if (!graph || !plan.ok) return null; + + graph.beforeChange?.(); + const t = window.LiteGraph.createNode(plan.targetType); + if (!t) { graph.afterChange?.(); return null; } + graph.add(t); + t.pos = [node.pos[0], node.pos[1]]; + if (node.color) t.color = node.color; + if (node.bgcolor) t.bgcolor = node.bgcolor; + + // widget values first (setting them may lay out extra widgets) + plan.wMap.forEach((m) => { + const sw = (node.widgets || []).find((w) => w.name === m.from); + const tw = (t.widgets || []).find((w) => w.name === m.to); + if (sw && tw && sw.value !== undefined) { tw.value = sw.value; try { tw.callback?.(tw.value); } catch {} } + }); + + // snapshot link records BEFORE we start mutating the graph + const inLinks = plan.inMap + .map((m) => ({ dst: m.dst, l: graph.links[node.inputs[m.src].link] })) + .filter((x) => x.l); + const outLinks = []; + plan.outMap.forEach((m) => { + (node.outputs[m.src].links || []).slice().forEach((id) => { + const l = graph.links[id]; + if (l) outLinks.push({ dst: m.dst, l }); + }); + }); + + // upstream → target + inLinks.forEach(({ dst, l }) => graph.getNodeById(l.origin_id)?.connect(l.origin_slot, t, dst)); + // target → downstream + outLinks.forEach(({ dst, l }) => { const d = graph.getNodeById(l.target_id); if (d) t.connect(dst, d, l.target_slot); }); + + graph.remove(node); + graph.afterChange?.(); + app.canvas?.setDirty(true, true); + return t; +} + +/** First verified candidate whose swap is feasible right now (used by force mode). */ +function firstVerifiedPlan(node) { + for (const c of candidatesFor(node.type)) { + if (!c.verified) continue; + const plan = planSwap(node, c.to, c); + if (plan.ok) return { cand: c, plan }; + } + return null; +} + +/* -------------------------------------------------------------------------- */ +/* preview dialog */ +/* -------------------------------------------------------------------------- */ + +function injectStyle() { + if (document.getElementById("utfcn-style")) return; + const s = document.createElement("style"); + s.id = "utfcn-style"; + s.textContent = ` + .utfcn-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:10000;display:flex;align-items:center;justify-content:center;font-family:sans-serif} + .utfcn-modal{background:var(--comfy-menu-bg,#202020);color:var(--fg-color,#ddd);border:1px solid #444;border-radius:8px;max-width:820px;width:92%;max-height:82vh;display:flex;flex-direction:column;box-shadow:0 8px 40px rgba(0,0,0,.5)} + .utfcn-modal h2{margin:0;padding:14px 18px;font-size:15px;border-bottom:1px solid #3a3a3a;display:flex;gap:8px;align-items:baseline} + .utfcn-modal h2 small{color:#888;font-weight:400;font-size:12px} + .utfcn-body{overflow:auto;padding:6px 0} + .utfcn-body table{width:100%;border-collapse:collapse;font-size:12.5px} + .utfcn-body td,.utfcn-body th{padding:6px 12px;text-align:left;border-bottom:1px solid #2e2e2e;vertical-align:middle} + .utfcn-body th{position:sticky;top:0;background:var(--comfy-menu-bg,#202020);color:#9aa;font-weight:600;z-index:1} + .utfcn-body tr.dis{opacity:.5} + .utfcn-arrow{color:#666;padding:0 2px} + .utfcn-from{color:#e0a}.utfcn-to{color:#6c9} + .utfcn-pack{color:#888;font-size:11px} + .utfcn-badge{font-size:11px;padding:1px 6px;border-radius:4px;white-space:nowrap} + .utfcn-ok{background:#1e3a24;color:#8fdca0}.utfcn-warn{background:#3a331e;color:#e6cf7a}.utfcn-no{background:#3a1e1e;color:#e69a9a} + .utfcn-modal select{background:#111;color:#ddd;border:1px solid #444;border-radius:4px;padding:2px 4px;max-width:260px} + .utfcn-foot{display:flex;gap:10px;justify-content:space-between;align-items:center;padding:12px 18px;border-top:1px solid #3a3a3a} + .utfcn-foot .sp{color:#888;font-size:12px} + .utfcn-btn{background:#333;color:#eee;border:1px solid #555;border-radius:6px;padding:7px 16px;cursor:pointer;font-size:13px} + .utfcn-btn:hover{background:#3d3d3d} + .utfcn-btn.primary{background:#2d6cdf;border-color:#2d6cdf}.utfcn-btn.primary:hover{background:#3b78e7} + .utfcn-btn:disabled{opacity:.5;cursor:not-allowed} + `; + document.head.appendChild(s); +} + +/** + * Show the preview table for `rows` ([{node, cands}]) and apply the ones the user keeps checked. + * Verified + feasible swaps start checked; partials and infeasible ones don't. + */ +function showPreview(rows) { + injectStyle(); + + // per-row UI state: chosen candidate index + its plan + const state = rows.map(({ node, cands }) => { + let sel = cands.findIndex((c) => c.verified && planSwap(node, c.to, c).ok); + if (sel < 0) sel = cands.findIndex((c) => planSwap(node, c.to, c).ok); + if (sel < 0) sel = 0; + return { sel }; + }); + + const overlay = document.createElement("div"); + overlay.className = "utfcn-overlay"; + overlay.innerHTML = ` +
+

🔁 UTFCN — Replace with core / available ${rows.length} candidate node${rows.length === 1 ? "" : "s"} in this workflow

+
+ + +
NodeReplace withStatus
+
+ + +
+
`; + + const tbody = overlay.querySelector("tbody"); + const summary = overlay.querySelector(".sp"); + const applyBtn = overlay.querySelector(".apply"); + const close = () => overlay.remove(); + + function planForRow(i) { + const { node, cands } = rows[i]; + const c = cands[state[i].sel]; + return { c, plan: c ? planSwap(node, c.to, c) : { ok: false, problems: ["no candidate"], warns: [] } }; + } + + function renderRow(i) { + const { c, plan } = planForRow(i); + const tr = tbody.children[i]; + const cb = tr.querySelector("input[type=checkbox]"); + const status = tr.querySelector(".utfcn-status"); + + cb.disabled = !plan.ok; + tr.classList.toggle("dis", !plan.ok); + if (!plan.ok) { + cb.checked = false; + status.innerHTML = `✗ ${plan.problems[0]}`; + } else if (c.verified) { + status.innerHTML = `✓ ${c.tier === "curated" ? "curated" : "exact match"}` + + (plan.warns.length ? ` ${plan.warns.length} note` : ""); + } else { + status.innerHTML = `⚠ heuristic ${(c.score * 100) | 0}%`; + } + } + + rows.forEach(({ node, cands }, i) => { + const info = sourceInfo(node.type); + const opts = cands.map((c, k) => + ``).join(""); + const tr = document.createElement("tr"); + tr.innerHTML = ` + + ${node.title || node.type} #${node.id} · ${info?.pack || "?"} + + `; + tbody.appendChild(tr); + + const sel = tr.querySelector("select"); + sel.value = String(state[i].sel); + sel.addEventListener("change", () => { state[i].sel = +sel.value; renderRow(i); updateSummary(); }); + tr.querySelector("input[type=checkbox]").addEventListener("change", updateSummary); + }); + + function updateSummary() { + let checked = 0; + tbody.querySelectorAll("input[type=checkbox]").forEach((cb) => { if (cb.checked) checked++; }); + summary.textContent = `${checked} of ${rows.length} selected`; + applyBtn.disabled = checked === 0; + } + + // initial render + default-check verified feasible rows + rows.forEach((_, i) => { + renderRow(i); + const { c, plan } = planForRow(i); + tbody.children[i].querySelector("input[type=checkbox]").checked = !!(plan.ok && c?.verified); + }); + updateSummary(); + + overlay.querySelector(".cancel").addEventListener("click", close); + overlay.addEventListener("mousedown", (e) => { if (e.target === overlay) close(); }); + applyBtn.addEventListener("click", () => { + let done = 0, failed = 0, notes = 0; + rows.forEach((row, i) => { + const cb = tbody.children[i].querySelector("input[type=checkbox]"); + if (!cb.checked) return; + const { c, plan } = planForRow(i); + if (applySwap(row.node, plan, c)) { done++; notes += plan.warns.length; } else failed++; + }); + close(); + if (done) toast("success", `Replaced ${done} node${done === 1 ? "" : "s"}${notes ? ` · ${notes} widget value(s) not carried` : ""}`); + if (failed) toast("error", `${failed} replacement(s) failed`); + if (!done && !failed) toast("info", "Nothing was selected"); + }); + + document.body.appendChild(overlay); +} + +/* -------------------------------------------------------------------------- */ +/* feature 2: bulk replace (command + menu) */ +/* -------------------------------------------------------------------------- */ + +async function openBulkDialog() { + if (!INDEX) await loadIndex(); + const rows = []; + for (const node of app.graph?._nodes || []) { + if (!isCustom(node.type)) continue; + const cands = candidatesFor(node.type); + if (cands.length) rows.push({ node, cands }); + } + if (!rows.length) { toast("info", "No custom nodes with a known core / available equivalent here 🎉"); return; } + showPreview(rows); +} + +/* -------------------------------------------------------------------------- */ +/* feature 3: single-node right-click */ +/* -------------------------------------------------------------------------- */ + +function replaceSingle(node, cand) { + const plan = planSwap(node, cand.to, cand); + if (!plan.ok) { toast("warn", `Can't replace “${node.title || node.type}”: ${plan.problems[0]}`); return; } + if (applySwap(node, plan, cand)) { + toast("success", `Replaced with ${cand.to_display}${plan.warns.length ? ` · ${plan.warns.length} widget value(s) not carried` : ""}`); + } else { + toast("error", "Replacement failed"); + } +} + +function addContextMenu(nodeType) { + const orig = nodeType.prototype.getExtraMenuOptions; + nodeType.prototype.getExtraMenuOptions = function (canvas, options) { + orig?.apply(this, arguments); + try { + if (!isCustom(this.type)) return; + const cands = candidatesFor(this.type); + if (!cands.length) return; + const submenu = cands.map((c) => ({ + content: `${c.verified ? "✓" : "⚠"} ${c.to_display} ${c.source === "core" ? "(core)" : "(" + c.pack + ")"}`, + callback: () => replaceSingle(this, c), + })); + options.push(null); // separator + options.push({ content: "🔁 Replace with core / available", has_submenu: true, submenu: { options: submenu } }); + } catch (e) { console.error("[UTFCN] menu error:", e); } + }; +} + +/* -------------------------------------------------------------------------- */ +/* feature 1: on add — Off / Suggest / Force */ +/* -------------------------------------------------------------------------- */ + +// "Off" | "Suggest" | "Force (auto-replace with core)" +let ADD_MODE = "Suggest"; +let loadingGraph = false; +let addQueue = [], addTimer = null; +const isForce = () => ADD_MODE.startsWith("Force"); + +// Never act while a workflow is loading — force mode must not silently rewrite +// graphs the user opens/imports; it only touches nodes they add themselves. +function guardGraphLoading() { + const orig = app.loadGraphData?.bind(app); + if (!orig) return; + app.loadGraphData = async function (...a) { + loadingGraph = true; + try { return await orig(...a); } + finally { setTimeout(() => { loadingGraph = false; }, 150); } + }; +} + +function onNodeAdded(node) { + if (loadingGraph || ADD_MODE === "Off") return; + if (!isCustom(node.type) || !candidatesFor(node.type).length) return; + addQueue.push(node); + clearTimeout(addTimer); + addTimer = setTimeout(flushAdds, 250); // let the add settle, and batch pastes +} + +function flushAdds() { + const nodes = addQueue.filter((n) => n?.graph); // still in the graph + addQueue = []; + if (!nodes.length) return; + + if (isForce()) { + // auto-swap only VERIFIED candidates — heuristics are never applied silently + let swapped = 0, last = null; + for (const node of nodes) { + const pick = firstVerifiedPlan(node); + if (!pick) continue; + const t = applySwap(node, pick.plan, pick.cand); + if (t) { swapped++; last = t; } + } + if (swapped) { + if (last) try { app.canvas?.selectNode?.(last); } catch {} + toast("success", `Force mode: switched ${swapped} node${swapped === 1 ? "" : "s"} to core / available`); + } + return; + } + + // Suggest mode: one quiet tip per unique type (stay silent on big pastes) + const types = [...new Set(nodes.map((n) => n.type))]; + if (types.length > 4) return; + types.forEach((tp) => { + const cands = candidatesFor(tp); + const best = cands.find((c) => c.verified) || cands[0]; + if (!best) return; + const where = best.source === "core" ? "a core node" : `“${best.pack}”`; + toast("info", `“${sourceInfo(tp)?.display || tp}” has ${where} equivalent: “${best.to_display}”. Right-click ▸ Replace with core / available.`, 7000); + }); +} + +function hookNodeAdded() { + const g = app.graph; + if (!g || g.__utfcn_hooked) return; + g.__utfcn_hooked = true; + const prev = g.onNodeAdded; + g.onNodeAdded = function (node) { + prev?.call(this, node); + try { onNodeAdded(node); } catch {} + }; +} + +/* -------------------------------------------------------------------------- */ +/* registration */ +/* -------------------------------------------------------------------------- */ + +app.registerExtension({ + name: "utfcn.core", + + settings: [ + { + id: "UTFCN.onAdd", + name: "When adding a custom node that has a core / available equivalent", + tooltip: "Off: do nothing. Suggest: show a tip. Force: automatically replace it with the equivalent (verified matches only).", + category: ["UTFCN", "On add", "mode"], + type: "combo", + options: ["Off", "Suggest", "Force (auto-replace with core)"], + defaultValue: "Suggest", + onChange: (v) => { if (v) ADD_MODE = v; }, + }, + ], + + commands: [ + { id: "UTFCN.replaceAll", label: "UTFCN: Replace custom nodes with core / available…", function: openBulkDialog }, + { + id: "UTFCN.refresh", label: "UTFCN: Refresh equivalence index", + function: async () => { await loadIndex(true); toast("success", `Index refreshed · ${INDEX?.stats?.replaceable ?? 0} replaceable node type(s)`); }, + }, + ], + + menuCommands: [ + { path: ["Extensions", "UTFCN"], commands: ["UTFCN.replaceAll", "UTFCN.refresh"] }, + ], + + // installed for every node type; the body no-ops unless the node is a custom + // node that actually has a candidate (checked live at click time). + beforeRegisterNodeDef(nodeType) { + addContextMenu(nodeType); + }, + + async setup() { + await loadIndex(); + guardGraphLoading(); + hookNodeAdded(); + const s = INDEX?.stats; + if (s?.replaceable) console.log(`[UTFCN] ${s.replaceable}/${s.custom} custom node type(s) have a core/available equivalent (${s.verified} verified).`); + }, +});