Commit Graph

69 Commits

Author SHA1 Message Date
Ethanfel 0456e8033a Fail closed on invalid return names 2026-07-02 13:29:51 +02:00
Ethanfel 479a70f377 Evaluate class signatures with definition-time env 2026-07-02 13:24:02 +02:00
Ethanfel c8c1205bde Skip extraction after wildcard imports 2026-07-02 13:14:16 +02:00
Ethanfel b2b1bd16bd Invalidate static extraction on nested wildcard imports 2026-07-02 13:06:51 +02:00
Ethanfel 2845daf90c Invalidate static extraction on annotated aliases and wildcard imports 2026-07-02 12:58:24 +02:00
Ethanfel fae0c312bc Invalidate static extraction on rebinding and alias mutation 2026-07-02 12:50:06 +02:00
Ethanfel 21a29b8846 Invalidate static extraction on deletion and mutation 2026-07-02 12:39:38 +02:00
Ethanfel 6be0fe9d1e Fail closed on dynamic node mapping extraction 2026-07-02 12:29:27 +02:00
Ethanfel 6a4617f002 Fail closed on dynamic static extraction inputs 2026-07-02 12:23:09 +02:00
Ethanfel 960c41b330 Harden static signature extraction 2026-07-02 12:13:50 +02:00
Ethanfel 669f209930 Add popular node signature extractor 2026-07-02 12:06:19 +02:00
Ethanfel bf2f6f3b95 Respect serialized input names over generated signatures 2026-07-02 11:56:28 +02:00
Ethanfel 9c17083298 Harden generated signature matching 2026-07-02 11:47:07 +02:00
Ethanfel 38c142d42e Use generated signatures for missing node matching 2026-07-02 11:38:49 +02:00
Ethanfel 8c45016c00 Add generated signature loader 2026-07-02 11:29:54 +02:00
Ethanfel 55e59f5e1d Add popular node signature implementation plan 2026-07-02 11:23:29 +02:00
Ethanfel fef2b8b7f1 Add popular node signature design 2026-07-02 11:09:37 +02:00
Ethanfel cc728eb50b Support uninstalled / missing nodes
Previously the index was built only from the live registry, so a custom node
that wasn't installed (a red "missing" node in a downloaded workflow) was
invisible — the main point of the tool. Now:

- Backend: utfcn_core split into build_context / build_index / match. build_index
  also emits curated candidates for uninstalled source types (curated-only), and
  a new POST /utfcn/match matches missing nodes by their serialized signature
  against installed core/other-pack nodes.
- Frontend: nodeType() reads a missing placeholder's last_serialization.type;
  matchMissing() feeds serialized slots to /utfcn/match and merges the results;
  the right-click item moved to a canvas-level getNodeMenuOptions patch so it
  reaches missing placeholders too. Bulk dialog labels them "not installed".

Replace a missing node with core without installing its pack. Links are rewired
losslessly; widget values can't be carried for a node whose def is absent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 10:43:13 +02:00
Ethanfel 16f4e93a3a Initial commit: UTFCN — Use The (F***ing) Core Nodes
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 <noreply@anthropic.com>
2026-07-02 10:26:30 +02:00