Skip to content

Latest commit

 

History

History
144 lines (93 loc) · 6.11 KB

DOCS.md

File metadata and controls

144 lines (93 loc) · 6.11 KB

Highway

More complex example of what could be done (using my personal workflow as example) with extensions like `use-everywhere`:

Right click to reveal quick actions such as pin creation and _query automatic filling.

The query syntax goes as follow:

  • >name: input variable.
  • <name: output variable.
  • >`n!ce n@me`: input variable but with special character and spaces (except `, obviously).
  • !name: output variable, but also delete itself, preventing from being referenced further.
    • CURRENTLY BROKEN DUE TO HOW COMFYUI UPDATE THE NODES.
  • <name1; >name2; !name3: multiple input and outputs together.

For now Highway node is probably stable, as long as there's no cyclic connection.

  • Cyclic connection means that input and output of the same Highway node must not be connect, including indirect connection.
    • Else will be recursion error due to how ComfyUI execute nodes (trust me I tried).

Can probably have "nested Highway" but probably useless since the node have unlimited in-out pins.

Recommended with chrisgoringe/cg-use-everywhere since it allows more complex notes rerouting.

Demo workflow is in assets/workflow_highway.json.

Special thanks to @kijai for ConditioningMultiCombine node as which Highway node is based of.

TODO (may or may not get implemented)
  • Cyclic detection in JS (python probably not possible unless I figure out a way how to extract the node graph).
  • Node force update (for !name).

Junction

`_offset` is used to skip data ahead for specific type (since internally it's a sequence of data).

_offset is persistent and will retains information across linked Junction.

The offset syntax goes as follow:

  • type,1: type is the type (usually LATENT, MODEL, VAE, etc.) and 1 is the index being set.
  • type,+2: Same as above but instead of set offset, it increase the offset instead.
  • type,-2: Decrease offset.
  • type1, -1; type2, +2; type3, 4: Multiple offset.

Can automatically expand pins.

Inspired by /u/GianoBifronte ideas.

Demo workflow is in assets/workflow_junction.json.


Junction Batch

Basically same as `Junction` but batch as list instead for further processing.

Hopefully difference between batch and pluck are self explainatory in the workflow.

Have bonus ability which is able to aggregate batch input, however does not attempt to do something like Latent From Batch since latent is not a batch list internally, (in which it is batch torch.tensor).

Also if multiple same output type appear during batch mode, then the first same type pin will have [11, 22, 33], and the next one is [22, 33, 11].

Demo workflow is in assets/workflow_junction_batch.json.

More in depth explaination.


Looping and Related

workflow_loop_demo

Basic looping to create 20 images with all 20 different seeds: Screenshot 2023-11-25 161238

A complex looping involves FABRIC nodes from ComfyUI_fabric, allowing to pick images multiple times: Screenshot 2023-11-25 224302

Outpaint workflow (embedded in the image, node kinda obsolete and requires more work but the general should work), borrowed from this sample: workflow_outpaint

The example above showcase that this node can turn node such as Plasma Noise into batch. It also allows executing multiple nodes together.

What's it looks like in action for simpler workflow.

Recording.2023-11-25.040907.mp4

Pros:

  • Can "loop" within a single prompt queue.

Cons:

  • Will mess up the workflow very easily if not careful.
  • Requires two Hold to sandwich the Loop node to be usable.

To reuse data from previous iteration, use the trio of Hold that should be arranged like in FABRIC workflow.

Probably unstable as hell since I only tested for simple case.

Until the topological PRs from the ComfyUI repos got merged, this node will be kept around.


Beautify

Recursively display structural data information, especially useful when dealing with `Highway`, `Junction` and `JunctionBatch`.
  • basic: minimally shows as little as possible.
  • more: show everything from basic but also shows the content. Does not expand if it meet a non-iterable object.
  • full: show everything as much as possible.
  • json: attempt to convert the input to json and display it. Will fail if the data cannot be converted.