Ethanfel
12d0f87968
Support top-level manager ranking fields
2026-07-02 22:18:10 +02:00
Ethanfel
33690683b7
Fix manager ranking and cache defaults
2026-07-02 22:09:50 +02:00
Ethanfel
28186698d0
Fix manager install URL normalization
2026-07-02 22:02:01 +02:00
Ethanfel
1895a0e677
Add popular node metadata build CLI
2026-07-02 21:57:31 +02:00
Ethanfel
dddb136b16
Fail closed on plain definition decorators
2026-07-02 21:45:00 +02:00
Ethanfel
f0b83b5505
Preserve empty static display names
2026-07-02 21:37:18 +02:00
Ethanfel
a2a5b44436
Fail closed after arbitrary assignment calls
2026-07-02 21:28:47 +02:00
Ethanfel
d7c3fc86c1
Invalidate static env after arbitrary calls
2026-07-02 21:19:10 +02:00
Ethanfel
ee8496174f
Fail closed on no-arg arbitrary calls
2026-07-02 21:09:10 +02:00
Ethanfel
126f5db959
Fail closed on nested mutable env aliases
2026-07-02 20:58:31 +02:00
Ethanfel
f23d4ae69a
Resolve class lookups through namespace aliases
2026-07-02 20:51:12 +02:00
Ethanfel
42aeafd0e9
Fail closed on starred mapping alias duplicate safety
2026-07-02 20:43:28 +02:00
Ethanfel
49666141fa
Fail closed on dynamic mapping duplicate safety
2026-07-02 20:34:35 +02:00
Ethanfel
11acb12658
Fail closed on namespace mapping replacements
2026-07-02 20:28:53 +02:00
Ethanfel
75224982ba
Fail closed on ambiguous mapping duplicate keys
2026-07-02 20:21:04 +02:00
Ethanfel
ecd8f7c082
Make signature artifact timestamps deterministic
2026-07-02 20:10:09 +02:00
Ethanfel
25b3f69d0d
Fail closed on class-body signature references
2026-07-02 20:02:55 +02:00
Ethanfel
447a5c72dd
Track alias mapping keys in duplicate preflight
2026-07-02 19:53:45 +02:00
Ethanfel
9792989216
Fail closed on mapping mutation keys and bare input specs
2026-07-02 19:46:55 +02:00
Ethanfel
7e7479fb6a
Fail closed on class namespace alias mutations
2026-07-02 19:35:51 +02:00
Ethanfel
2d951c759a
Fail closed on class-body namespace aliases
2026-07-02 19:28:44 +02:00
Ethanfel
52ac447e0e
Track namespace alias mapping mutations
2026-07-02 19:21:19 +02:00
Ethanfel
c45bf3c230
Fail closed on class-body mutations and duplicate inputs
2026-07-02 19:14:53 +02:00
Ethanfel
1b56798018
Fail closed on definition references and sticky mappings
2026-07-02 19:04:25 +02:00
Ethanfel
39b991800a
Track chained input type aliases
2026-07-02 18:54:16 +02:00
Ethanfel
a3bb718bd2
Fail closed on duplicate keys and observed calls
2026-07-02 18:49:21 +02:00
Ethanfel
73bdca9e1e
Track chained static extraction aliases
2026-07-02 18:37:17 +02:00
Ethanfel
3cf4a5eb52
Fail closed on namespace dunders and metadata types
2026-07-02 18:29:47 +02:00
Ethanfel
f7143e7bac
Fail closed on namespace aliases and input observations
2026-07-02 18:19:48 +02:00
Ethanfel
bf46f9b389
Fail closed on duplicate nodes and observed input types
2026-07-02 18:08:48 +02:00
Ethanfel
3219ec0c39
Track starred collection aliases in static extraction
2026-07-02 17:59:53 +02:00
Ethanfel
c6d2b2d645
Invalidate mapped classes on signature attribute observation
2026-07-02 17:53:04 +02:00
Ethanfel
07822bc3ec
Fail closed on arbitrary static extraction calls
2026-07-02 17:47:11 +02:00
Ethanfel
79d9921ba6
Track starred unpack aliases in static extraction
2026-07-02 17:37:06 +02:00
Ethanfel
5844a0a433
Track namespace-derived class aliases
2026-07-02 17:30:00 +02:00
Ethanfel
b560f238a1
Cover type parameter class extraction hazards
2026-07-02 17:23:58 +02:00
Ethanfel
7c4b83ed0e
Track namespace and getattr aliases
2026-07-02 17:19:07 +02:00
Ethanfel
065c9ae7ec
Skip nontrivial class creation signatures
2026-07-02 17:12:50 +02:00
Ethanfel
34e53e8692
Invalidate namespace lookup mutations
2026-07-02 17:07:25 +02:00
Ethanfel
97e0126a1d
Detect getattr mutating method calls
2026-07-02 17:01:08 +02:00
Ethanfel
2ad3cd3a09
Invalidate dynamic namespace mutations
2026-07-02 16:55:52 +02:00
Ethanfel
d1f49e7c95
Track mapping and class attribute aliases
2026-07-02 16:47:39 +02:00
Ethanfel
f26e441e03
Fail closed on invalid node mapping keys
2026-07-02 16:39:06 +02:00
Ethanfel
2c9452ae67
Fail closed on invalid display mappings
2026-07-02 16:35:19 +02:00
Ethanfel
7e4e85a0bd
Fail closed on dynamic patches and displays
2026-07-02 16:27:48 +02:00
Ethanfel
9752248ee9
Track unpacked and class attribute aliases
2026-07-02 16:12:32 +02:00
Ethanfel
05fa411d47
Fail closed on walrus bindings and invalid input sections
2026-07-02 16:00:05 +02:00
Ethanfel
f5d72b494d
Fail closed on decorated input types and nested aliases
2026-07-02 15:47:17 +02:00
Ethanfel
86ea12924c
Invalidate mappings on duplicate keys and class aliases
2026-07-02 15:34:50 +02:00
Ethanfel
51db0d16e5
Skip decorated and patched mapped classes
2026-07-02 15:19:22 +02:00
Ethanfel
fc92d1db24
Invalidate static extraction for exception and type alias bindings
2026-07-02 15:08:19 +02:00
Ethanfel
8f872baf0b
Invalidate inputs from class definition-time mutations
2026-07-02 14:56:13 +02:00
Ethanfel
317788572e
Detect definition-time mutating expressions
2026-07-02 14:50:03 +02:00
Ethanfel
65c3a57052
Resolve node mappings at assignment time
2026-07-02 14:40:16 +02:00
Ethanfel
45e3cbaad8
Detect mutating calls inside statements
2026-07-02 14:29:04 +02:00
Ethanfel
6c2653c803
Fail closed on final input bindings and transitive aliases
2026-07-02 14:18:38 +02:00
Ethanfel
99d2bb25da
Fail closed on mutable module captures in class signatures
2026-07-02 14:09:07 +02:00
Ethanfel
034e07269d
Fail closed on class alias mutations
2026-07-02 13:58:58 +02:00
Ethanfel
bebd4e09aa
Resolve input and class attribute environments correctly
2026-07-02 13:53:45 +02:00
Ethanfel
67b875cdd5
Require mapped classes to remain top-level bindings
2026-07-02 13:45:45 +02:00
Ethanfel
90b7e3e872
Fail closed on invalid return name declarations
2026-07-02 13:34:13 +02:00
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 and Claude Opus 4.8
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 and Claude Opus 4.8
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