Commit Graph

44 Commits

Author SHA1 Message Date
Jacob Segal
5ab1565418 Merge branch 'master' into execution_model_inversion 2024-02-21 19:41:09 -08:00
chrisgoringe
cf4910a3a4
Prevent hideWidget being called twice for same widget
Fix for #2766
2024-02-12 08:59:25 +11:00
pythongosssss
d2e7f1b04b Support linking converted inputs from api json 2024-02-06 16:55:55 +00:00
Jacob Segal
36b2214e30 Execution Model Inversion
This PR inverts the execution model -- from recursively calling nodes to
using a topological sort of the nodes. This change allows for
modification of the node graph during execution. This allows for two
major advantages:

    1. The implementation of lazy evaluation in nodes. For example, if a
    "Mix Images" node has a mix factor of exactly 0.0, the second image
    input doesn't even need to be evaluated (and visa-versa if the mix
    factor is 1.0).

    2. Dynamic expansion of nodes. This allows for the creation of dynamic
    "node groups". Specifically, custom nodes can return subgraphs that
    replace the original node in the graph. This is an incredibly
    powerful concept. Using this functionality, it was easy to
    implement:
        a. Components (a.k.a. node groups)
        b. Flow control (i.e. while loops) via tail recursion
        c. All-in-one nodes that replicate the WebUI functionality
        d. and more
    All of those were able to be implemented entirely via custom nodes,
    so those features are *not* a part of this PR. (There are some
    front-end changes that should occur before that functionality is
    made widely available, particularly around variant sockets.)

The custom nodes associated with this PR can be found at:
https://github.com/BadCafeCode/execution-inversion-demo-comfyui

Note that some of them require that variant socket types ("*") be
enabled.
2024-01-28 20:48:42 -08:00
pythongosssss
390078904c
Group node fixes (#2259)
* Prevent cleaning graph state on undo/redo

* Remove pause rendering due to LG bug

* Fix crash on disconnected internal reroutes

* Fix widget inputs being incorrect order and value

* Fix initial primitive values on connect

* basic support for basic rerouted converted inputs

* Populate primitive to reroute input

* dont crash on bad primitive links

* Fix convert to group changing control value

* reduce restrictions

* fix random crash in tests
2023-12-13 00:56:39 -05:00
comfyanonymous
e134547341 Merge branch 'reroute-converted-inputs' of https://github.com/pythongosssss/ComfyUI
# Conflicts:
#	web/extensions/core/widgetInputs.js
2023-12-06 03:01:35 -05:00
pythongosssss
8de6f94f5c Allow widget placeholder replacement on primitives 2023-12-05 21:02:10 +00:00
pythongosssss
44265e0810 Allow connecting primitivenode to reroutes 2023-12-05 20:27:13 +00:00
pythongosssss
7f469203b7
Group nodes (#1776)
* setup ui unit tests

* Refactoring, adding connections

* Few tweaks

* Fix type

* Add general test

* Refactored and extended test

* move to describe

* for groups

* wip group nodes

* Relink nodes
Fixed widget values
Convert to nodes

* Reconnect on convert back

* add via node menu + canvas
refactor

* Add ws event handling

* fix using wrong node on widget serialize

* allow reroute pipe
fix control_after_generate configure

* allow multiple images

* Add test for converted widgets on missing nodes + fix crash

* tidy

* mores tests + refactor

* throw earlier to get less confusing error

* support outputs

* more test

* add ci action

* use lts node

* Fix?

* Prevent connecting non matching combos

* update

* accidently removed npm i

* Disable logging extension

* fix naming
allow control_after_generate custom name
allow convert from reroutes

* group node tests

* Add executing info, custom node icon
Tidy

* internal reroute just works

* Fix crash on virtual nodes e.g. note

* Save group nodes to templates

* Fix template nodes not being stored

* Fix aborting convert

* tidy

* Fix reconnecting output links on convert to group

* Fix links on convert to nodes

* Handle missing internal nodes

* Trigger callback on text change

* Apply value on connect

* Fix converted widgets not reconnecting

* Group node updates
- persist internal ids in current session
- copy widget values when converting to nodes
- fix issue serializing converted inputs

* Resolve issue with sanitized node name

* Fix internal id

* allow outputs to be used internally and externally

* order widgets on group node
various fixes

* fix imageupload widget requiring a specific name

* groupnode imageupload test
give widget unique name

* Fix issue with external node links

* Add VAE model

* Fix internal node id check

* fix potential crash

* wip widget input support

* more wip group widget inputs

* Group node refactor
Support for primitives/converted widgets

* Fix convert to nodes with internal reroutes

* fix applying primitive

* Fix control widget values

* fix test
2023-11-30 14:13:27 -05:00
pythongosssss
70d2ea0faa
Control filter list (#2009)
* Add control_filter_list to filter items after queue

* fix regex

* backwards compatibility

* formatting

* revert

* Add and fix test
2023-11-22 12:52:20 -05:00
comfyanonymous
8cfce083c4 Fix primitive node control value not getting loaded. 2023-10-21 22:36:04 -04:00
pythongosssss
5818ca83a2
Unit tests + widget input fixes (#1760)
* setup ui unit tests

* Refactoring, adding connections

* Few tweaks

* Fix type

* Add general test

* Refactored and extended test

* move to describe

* for groups

* Add test for converted widgets on missing nodes + fix crash

* tidy

* mores tests + refactor

* throw earlier to get less confusing error

* support outputs

* more test

* add ci action

* use lts node

* Fix?

* Prevent connecting non matching combos

* update

* accidently removed npm i

* Disable logging extension

* added step to generate object_info

* fix python

* install python

* install deps

* fix cwd?

* logging

* Fix double resolve

* create dir

* update pkg
2023-10-20 22:49:04 -04:00
comfyanonymous
1f2f4eaa6f Fix bug when copying node with converted input. 2023-10-08 04:04:25 -04:00
pythongosssss
ae3e4e9ad8
access getConfig via a symbol so structuredClone works (#1677) 2023-10-06 16:48:30 -04:00
pythongosssss
b9b178b839 More cleanup of old type data
Fix connecting combos of same type from different types of node
2023-10-05 19:16:39 +01:00
pythongosssss
80932ddf40 updated messages 2023-10-05 17:13:13 +01:00
pythongosssss
0b9246d9fa allow connecting numbers merging config 2023-10-04 20:48:55 +01:00
pythongosssss
6fc7314393 support refreshing primitive combos
no longer uses combo list as type name
2023-10-03 20:19:12 +01:00
Chris
0782ac2a96 defaultInput 2023-09-08 14:53:59 +10:00
comfyanonymous
6962cb46a9 Fix issue when node_input is undefined. 2023-09-02 12:17:30 -04:00
comfyanonymous
7291e303f6 Fix issue with some workflows not getting serialized. 2023-09-02 11:48:44 -04:00
Michael Poutre
9a7a52f8b5
refactor/fix: Treat forceInput widgets as standard widgets 2023-08-31 17:58:43 -07:00
Dr.Lt.Data
9534f0f8a5
allows convert to widget for boolean type (#1063) 2023-08-03 20:24:52 -04:00
Alex "mcmonkey" Goodwin
5797ff89b0 use relative paths for all web connections
This enables local reverse-proxies to host ComfyUI on a path, eg "http://example.com/ComfyUI/" in such a way that at least everything I tested works. Without this patch, proxying ComfyUI in this way will yield errors.
2023-07-10 02:09:03 -07:00
ssit
8c3d24434a Fix overlapping when converting widgets to inputs 2023-06-20 12:03:46 -04:00
comfyanonymous
4b0b516544 Add code to handle primitive nodes connected to reroute nodes.
Revert last commit because I noticed it broke a few things.
2023-06-09 02:49:13 -04:00
Dr.Lt.Data
8e14c46a38
allows connect primitive node to reroute if primitive node has type (#751)
Co-authored-by: Lt.Dr.Data <lt.dr.data@gmail.com>
2023-06-09 02:21:30 -04:00
comfyanonymous
13d94caf49 Add control_after_generate to combo primitive. 2023-05-16 03:18:11 -04:00
comfyanonymous
a40499891e Merge branch 'fix-combo-auto-primitive' of https://github.com/pythongosssss/ComfyUI 2023-04-15 12:36:43 -04:00
pythongosssss
f5a78658b7 Fix double click on converted combo widget link 2023-04-15 17:34:46 +01:00
pythongosssss
887ea0ba83 style 2023-04-15 10:55:19 +01:00
pythongosssss
901a890199 Allow combo primitive to connect to multiple inputs 2023-04-15 10:53:30 +01:00
comfyanonymous
61e7767ca6 Merge branch 'Allow-connect-premitiveNode-to-forceInput-comfyiUI-nodes' of https://github.com/omar92/ComfyUI 2023-04-14 00:59:31 -04:00
FizzleDorf
3f52e7cbb1
Seed controls added to Ksamplers (#296)
Co-authored-by: flyingshutter <flyingshutter@users.noreply.github.com>
2023-04-12 20:57:13 -04:00
omar92
9d095c52f3 handle double click create primitive widget 2023-04-08 19:05:22 +02:00
omar92
2dc7257e29 Allow connect premitive Node to "comfyiUI-nodes that have forceInput setting" 2023-04-08 18:58:47 +02:00
Tomoaki Hayasaka
1917064b56 Fix "extra filename replacements in SaveImage is not done when prefix is supplied by Primitive". 2023-04-02 23:42:50 +09:00
hnmr293
04b42bad87 allow converting optional widgets to inputs 2023-03-30 21:50:35 +09:00
comfyanonymous
44b6eaad6f Don't completely break workflow if field name changes. 2023-03-25 01:04:02 -04:00
pythongosssss
d6830b958c Prevent exactly overlapping nodes
Throttle double click
2023-03-24 20:20:34 +00:00
pythongosssss
1fa9ccaa16 Set title to widget name 2023-03-24 16:51:17 +00:00
pythongosssss
97198f5b74 Restore original size after add/remove input 2023-03-24 16:36:11 +00:00
pythongosssss
b13539c3dd Sync widget changes 2023-03-24 10:27:19 +00:00
pythongosssss
7a7e3288ee Added support for converting widgets to inputs (and back) 2023-03-23 21:37:19 +00:00