├── .github
└── workflows
│ └── publish.yml
├── .gitignore
├── LICENSE
├── README.md
├── __init__.py
├── cyclist.py
├── js
└── cyclist.js
├── pyproject.toml
├── screenshots
├── Interrupt_message.png
├── LoopManager.png
└── New_Cycle_button.png
├── util_nodes.py
└── workflows
├── CatStack.json
├── CatStack.png
├── CatStackNoUE.json
├── ChimeraMaker.json
├── ChimeraMaker.png
├── GenUntilGood.json
├── GenUntilGood.png
├── GenUntilGoodNoWAS.json
├── GenUntilGoodNoWAS.png
├── GenUntilRight.json
├── GenUntilRight.png
├── LoRABurnTest.json
├── LoRABurnTest.png
├── MultiplePersons.json
├── MultiplePersons.png
├── README.md
├── TimeLimit.json
├── TimeLimit.png
├── UpscaleToMegapixels.json
├── UpscaleToMegapixels.png
├── UpscaleToResolution.json
└── UpscaleToResolution.png
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish to Comfy registry
2 | on:
3 | workflow_dispatch:
4 | push:
5 | branches:
6 | - main
7 | paths:
8 | - "pyproject.toml"
9 |
10 | jobs:
11 | publish-node:
12 | name: Publish Custom Node to registry
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Check out code
16 | uses: actions/checkout@v4
17 | - name: Publish Custom Node
18 | uses: Comfy-Org/publish-node-action@main
19 | with:
20 | ## Add your own personal access token to your Github Repository secrets and reference it here.
21 | personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | __pycache__/
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Pos13
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Cyclist :bicyclist:
2 |
3 | [ComfyUI](https://github.com/comfyanonymous/ComfyUI) already has an option to infinitely repeat a workflow. This extension adds an ability to reuse generated results to cycle over them again and again. With this tool, you can automate whatever iterative loop action you have in mind: building grids, animating frame-by-frame, changing conditions every step, etc.
4 |
5 | > [!WARNING]
6 | > This repository is archived, because I am not going to support it. The extension probably still works on your version of ComfyUI, at least partially.
7 |
8 | ## General Usage
9 |
10 | 1. Put a loading node where you want to provide a result from previous run.
11 | - Optionally, connect a fallback input in case nothing is there to load yet (usually, at first iteration).
12 | 2. Put a saving node in the end of your workflow.
13 | 3. Put an **Interrupt** node if you want to stop generation when certain conditions are met.
14 | 4. Done! Press "_Queue Prompt_". And again. And again, maybe.
15 | - Optionally, check "_Extra options_" and "_Auto Queue_" checkboxes to let ComfyUI infinitely repeat a workflow by itself.[^1]
16 | - If you want to start a loop from scratch, press the "_New Cycle_" button introduced in this workflow. It will increment all filenames and loop IDs, if it can.[^2]. Alternatively, use **Loop Manager** to do this automatically.
17 |
18 | 
19 |
20 | > [!WARNING]
21 | > Check [Known Issues](#known-issues) at the bottom of this page to learn about non-obvious behaviour.
22 |
23 | ## Installation
24 |
25 | __Option 1__: Use [ComfyUI Manager](https://github.com/ltdrdata/ComfyUI-Manager).
26 |
27 | __Option 2__:
28 | - Install git
29 | - Navigate to your `/ComfyUI/custom_nodes/` folder
30 | - Run `git clone https://github.com/Pos13/comfyui-cyclist/` console command in it
31 |
32 | ## Nodes and example workflows
33 |
34 | **Loop Manager**: Simply provides a string. This string — loop_id — can be used as a name of a variable to put into memory, or as a filename. If the "_increment_" value is set on "_by_interrupt_node_", loop_id will automatically change when **Interrupt** node procs, to prevent overriding end result. If the "_increment_" value is set on "_on_any_interrupt_", loop_id will change in the same situation, plus when you manually cancel queue. Useful to skip failures.
35 |
36 | 
37 |
38 | **Memorize Int/Float/String**: These simple nodes save something in memory. Information is lost if you restart ComfyUI. Variables are exclusive to provided loop ID. You can store exactly one Int, one Float, one String and one Conditioning for every loop ID. Change ID to save a new variable of this type.
39 |
40 | **Recall Int/Float/String**: These nodes are for loading information from memory. If nothing is there, fallback input is used instead. Fallback is optional. Example:
41 |
42 |
43 | ${\color{blue}Workflow\ to\ generate\ an\ image\ until\ it\ gets\ a\ high\ score}$
44 |
45 | Every time an image is generated, it gets a score made by [Image Reward Score](https://github.com/ZaneA/ComfyUI-ImageReward) node. Score is saved by **Memorize Float** node. Next gen, it's loaded and compared to user-provided target score. If greater, process is stopped.
46 |
47 | 
48 |
49 |
50 |
51 | **Convert To**: Takes any input and tries to output an int, float, boolean and string representation of it. Boolean and string can always be cast into, but incorrect int or float will raise an error.
52 |
53 | **Compare Anything**: Takes two inputs of any kinds and a compare operation. Outputs True or False boolean value.
54 | - Integers are compared as usual.
55 | - Floats are compared with 1-09 is precision.
56 | - Strings are compared alphabetically.
57 | - Images and latents are compared by total pixel amount across whole batch.
58 | - Everything else is casted to string before comparison.
59 | - If types are different, it tries to cast inputs into the same type in this order: to boolean, to float, to string.
60 |
61 | **Int/Float Math**: Just a handfull of arithmetic operations betwen two numbers.
62 |
63 |
64 | ${\color{blue}Workflow\ to\ generate\ an\ image\ until\ it\ gets\ a\ high\ score,\ but\ always\ save\ the\ best\ attempt}$
65 |
66 | This is slightly modified version of the workflow above. Not a score is saved, but an image. Every new run it is compared with a new image to let [WAS Node Suite](https://github.com/WASasquatch/was-node-suite-comfyui) to choose the best.
67 |
68 | - **Convert To** node is used to cast boolean -> float -> number, as WAS only work with number representation of boolean.
69 | - **Compare Anything** node compares float scores.
70 | - **Float Math** node is used to provide float constant, as Primitive node can't be connected to unspecified input. "Adding zero" just outputs upper value.
71 |
72 | 
73 |
74 |
75 |
76 | **Recall/Memorize Conditioning**: Works the same way other Recall/Memorize nodes work. It stores conditioning to memory, not to disc.
77 |
78 |
79 | ${\color{blue}Workflow\ to\ generate\ ugly\ animal\ crossbreeds}$
80 |
81 | [Impact Pack](https://github.com/ltdrdata/ComfyUI-Impact-Pack) is used to generate random animal words. These words are used to add a new conditioning for an image.
82 |
83 | Don't use _Auto Queue_ here! You'd probably want to click "_Queue Prompt_" manually, and press "_New Cycle_" whenever result is already good enough.
84 |
85 | 
86 |
87 |
88 |
89 | **Interrupt**: Put this onto any link, output is unchanged "_any_in_" input.[^3] When this node is activated by workflow, it stops it if "_stop_" input is true. You can convert "_stop_" from widget to input with right-clicking the node.
90 |
91 | Be aware where you put **Interrupt** node! You want it to prevent some heavy computing, so place it in the way of any thing required for such computing. Also, you can only place it _after_ the nodes used to provide "_any_in_" or "_stop_" inputs, because ComfyUI will not execute a workflow with a loop.
92 |
93 | The best place for **Interrupt** node is right after important "Reload/Recall" node.
94 |
95 | Multiple **Interrupt** nodes are allowed, and sometimes wanted.[^4]
96 |
97 | Triggered **Interrupt** will show this message:
98 |
99 | 
100 |
101 | **Save Image (Override)**: This node works similarly to default Save Image node, but filename remains the same, without counter. It saves image to your output folder![^5]
102 |
103 | **Reload Image**: Loads image by filename, from "_\ComfyUI\output_" folder. If file does not exists, fallback input is used instead. Fallback is optional. Image is loaded in RGBA, with transparency channel.[^6]
104 |
105 |
106 | ${\color{blue}Workflow\ to\ generate\ an\ image\ until\ right\ things\ are\ recognised}$
107 |
108 | Before generating a new image, "BLIP Interrogate" node from [WAS Node Suite](https://github.com/WASasquatch/was-node-suite-comfyui) tries to analyze previous result. If answers are right, generation stops.
109 |
110 | Workflow page at civitai: [https://civitai.com/models/342128](https://civitai.com/models/342128)
111 |
112 | 
113 |
114 |
115 |
116 | **Save Model (Override)**: This node works similarly to default Save Model node, but filename remains the same, without counter. It saves model to your default `models/checkpoints` folder!
117 |
118 |
119 | ${\color{blue}Workflow\ to\ apply\ LoRAs\ to\ the\ model\ until\ it\ breaks}$
120 |
121 | This workflow is for testing model's LoRA compatibility. Apply more and more random LoRAS. Applied LoRA's names are saved in images' filenames. [WAS Node Suite](https://github.com/WASasquatch/was-node-suite-comfyui) is used.
122 |
123 | Don't use _Auto Queue_ here! You'd probably want to click "_Queue Prompt_" manually, and press "_New Cycle_" whenever result is already ~~good~~ bad enough.
124 |
125 | 
126 |
127 |
128 |
129 | **Save Latent (Override)**: This node works similarly to default Save Latent node, but filename remains the same, without counter. It saves latent file to your output/latent folder!
130 |
131 |
132 | ${\color{blue}Workflow\ to\ gradually\ upscale\ image\ until\ megapixel\ count\ is\ met}$
133 |
134 | This workflow uses latent upscale by x1.375 times over and over, until image becomes big enough. You'd want to set megapixel count according to your VRAM and patience amount. [WAS Node Suite](https://github.com/WASasquatch/was-node-suite-comfyui) is used to calculate latent size.
135 |
136 | Notice disabled nodes! Enable them only after the whole cycle is done to save time and not calculate intermediate results. Enabling them will not disrupt normal cycle flow in any way. No early interrupts, no extra iterations.
137 |
138 | 
139 |
140 |
141 |
142 | **Generation Timer**: This node measures time spent on generation. Outputs floats.
143 | - Timer starts right before every generation, when workflow is checked.
144 | - Timer stops when the last "Save/Memorize" node in the workflow procs.
145 |
146 | Mutiple **Generation Timers** can be used, but you better assign them to different loops.[^7][^8]
147 |
148 | **Force Timer Stop**: This node tells the timer to stop whenever any input is provided, no matter what. You can use it to measure time spent by certain blocks, not the whole workflow. But the start is always at generation start.
149 |
150 | **Force Timer Stop** node is not necessary to use **Generation Timer**, as long as you have any "Save/Memorize" node.
151 |
152 |
153 | ${\color{blue}Workflow\ that\ works\ for\ certain\ amount\ of\ time}$
154 |
155 | This is almost a default ComfyUI workflow! Just set amount of time you want your PC to work generating images, check "_Extra options_" and "_Auto Queue_" checkboxes, and press "_Queue Prompt_" button.
156 |
157 | Workflow page at civitai: [https://civitai.com/models/342065](https://civitai.com/models/342065)
158 |
159 | 
160 |
161 |
162 |
163 | ## Other workflows
164 |
165 |
166 | ${\color{blue}Workflow\ to\ evenly\ upscale\ to\ exact\ resolution}$
167 |
168 | Set a width and height, and image will upscale to it. But not in one go: it calculates how many iterations should be made to not add too many pixels to width or height, and performs exactly that many iterations. You can gradually change denoise, CFG scale and steps count from first to last iterations. Uses [pythongosssss' Custom Scripts](https://github.com/pythongosssss/ComfyUI-Custom-Scripts) for math and display.
169 |
170 | It's a little wild :sweat_smile:.
171 |
172 | 
173 |
174 |
175 |
176 |
177 | ${\color{blue}Workflow\ to\ stack\ cats}$
178 |
179 | SDXL Turbo is used to make the amount of very noisy cats _fast_. They pile on noisy background one-by-one, top to bottom. After the cycle is done, unmute the top group of node to generate final result.
180 |
181 | [Use Everywhere](https://github.com/chrisgoringe/cg-use-everywhere) nodes hide links. Version without is [exists](https://github.com/Pos13/comfyui-cyclist/blob/main/workflows/CatStackNoUE.json), but it's messy.
182 |
183 | 
184 |
185 |
186 |
187 | > [!NOTE]
188 | > All example workflows (and more) can be found in the [workflows folder](workflows/). But for possible updates, comments and questions about workflows you better navigate to my [Civitai page](https://civitai.com/user/Postpos/models).
189 |
190 | ## Known Issues
191 |
192 | [^1]: For now, "_Auto Queue_" checkbox unchecks automatically on interrupt. This prevents accidental short-circuits. Yes, you have to check it back manually every time you start a new cycle.
193 | [^2]: Pressing "_New Cycle_" button will change a string in every "_filename_" and "_loop_id_" widget. It also will detect Primitives connected to them, and update them too. But nothing else. It will not update the string provided by any type of "String Const" or "String Op" or "Recall String" node.
194 | [^3]: Reroutes and Primitives don't work well with unspecified inputs. It is possible to juggle them to set different input and output types on **Interrupt** node. It's on you to not to.
195 | [^4]: Bypassing **Interrupt** node does not work. Just disconnect "_stop_" input instead.
196 | [^5]: Image batches are not supported yet. It's planned.
197 | [^6]: Some nodes don't support RGBA (**Upscale Image (Using Model)**, for example). You can use **Images to RGB** node from [WAS Node Suite](https://github.com/WASasquatch/was-node-suite-comfyui) to fix that.
198 | [^7]: **Generation Timer** does not output the same time intervals as ComfyUI does. It doesn't account for anything happening before **Generation Timer** node is checked and after the last "Save/Memorize" (or assigned **Force Timer Stop** node) is executed.
199 | [^8]: **Generation Timer** only works if "_loop_id_" is in widget form, not input. I can't get around this limitition.
200 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | @author: Pos13
3 | @title: Cyclist
4 | @nickname: comfyui-cyclist
5 | @description: This extension provides tools to iterate generation results between runs. In general, it's for cycles.
6 | """
7 |
8 | #import inspect
9 | from .cyclist import *
10 | from .util_nodes import *
11 |
12 | WEB_DIRECTORY = "./js"
13 | NODE_CLASS_MAPPINGS = {
14 | "LoopManager": LoopManager,
15 | "Interrupt": CyclistInterrupt,
16 |
17 | "ReloadImage": ReloadImage,
18 | "OverrideImage": OverrideImage,
19 | "ReloadLatent": ReloadLatent,
20 | "OverrideLatent": OverrideLatent,
21 | "ReloadModel": ReloadModel,
22 | "OverrideModel": OverrideModel,
23 |
24 | "RecallString": RecallString,
25 | "MemorizeString": MemorizeString,
26 | "RecallInt": RecallInt,
27 | "MemorizeInt": MemorizeInt,
28 | "RecallFloat": RecallFloat,
29 | "MemorizeFloat": MemorizeFloat,
30 | "RecallConditioning": RecallConditioning,
31 | "MemorizeConditioning": MemorizeConditioning,
32 |
33 | "CyclistMathInt": CyclistMathInt,
34 | "CyclistMathFloat": CyclistMathFloat,
35 | "CyclistTypeCast": CyclistTypeCast,
36 | "CyclistCompare": CyclistCompare,
37 | "CyclistTimer": CyclistTimer,
38 | "CyclistTimerStop": CyclistTimerStop
39 | }
40 | NODE_DISPLAY_NAME_MAPPINGS = {
41 | "LoopManager": "Loop Manager",
42 | "Interrupt": "Interrupt",
43 | "RecallString": "Recall String",
44 | "MemorizeString": "Memorize String",
45 | "RecallInt": "Recall Int",
46 | "MemorizeInt": "Memorize Int",
47 | "RecallFloat": "Recall Float",
48 | "MemorizeFloat": "Memorize Float",
49 | "RecallConditioning": "Recall Conditioning",
50 | "MemorizeConditioning": "Memorize Conditioning",
51 | "ReloadLatent": "Reload Latent",
52 | "OverrideLatent": "Save Latent (Override)",
53 | "ReloadImage": "Reload Image",
54 | "OverrideImage": "Save Image (Override)",
55 | "ReloadModel": "Reload Model",
56 | "OverrideModel": "Save Model (Override)",
57 | "CyclistTimer": "Generation Timer",
58 | "CyclistTimerStop": "Force Timer Stop",
59 | "CyclistMathFloat": "Float Math",
60 | "CyclistMathInt": "Int Math",
61 | "CyclistTypeCast": "Convert to",
62 | "CyclistCompare": "Compare Anything"
63 | }
64 | # Sadly, this automatic mapping is abandoned for Manager compatibility
65 | """NODE_CLASS_MAPPINGS = {}
66 |
67 | for name, obj in (list(reversed(inspect.getmembers(cyclist))) + inspect.getmembers(util_nodes)):
68 | if inspect.isclass(obj):
69 | if hasattr(obj, 'NODE_NAME'):
70 | node_name = getattr(obj, 'NODE_NAME', name)
71 | NODE_CLASS_MAPPINGS[node_name] = obj"""
72 |
73 | __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS', 'WEB_DIRECTORY']
74 |
--------------------------------------------------------------------------------
/js/cyclist.js:
--------------------------------------------------------------------------------
1 | import { app } from "../../../scripts/app.js";
2 | import { api } from "../../../scripts/api.js";
3 | import { $el } from "../../../scripts/ui.js";
4 | import { ComfyButton } from "../../../scripts/ui/components/button.js";
5 | import { ComfyWidgets } from "../../../scripts/widgets.js";
6 |
7 | var cyclist_states = {}
8 |
9 | function drawBadge(ctx, text, color="green") {
10 | if (text) {
11 | // Badge in pythongosssss/WD14 style
12 | ctx.save()
13 | ctx.font = "12px sans-serif"
14 | const sz = ctx.measureText(text)
15 | ctx.fillStyle = color
16 | ctx.beginPath()
17 | ctx.roundRect(0, -LiteGraph.NODE_TITLE_HEIGHT - 20, sz.width + 12, 20, 5)
18 | ctx.fill()
19 | ctx.fillStyle = "white"
20 | ctx.fillText(text, 6, -LiteGraph.NODE_TITLE_HEIGHT - 6)
21 | ctx.restore()
22 | }
23 | }
24 |
25 | app.registerExtension({
26 | name: "comfyui.cyclist",
27 | async setup() {
28 | function replace_counter(str) {
29 | let counter = str.match(/\d+$/)
30 | if (counter) return str.replace(/\d+$/, String(parseInt(counter) + 1))
31 | else return str + "_2";
32 | }
33 |
34 | function InterruptListener(event) {
35 | let show_popup = false // Should be extra sure it will not trigger if not working with cycles
36 | let popup_text = ""
37 | if (cyclist_states["InterruptMessage"]) {
38 | show_popup = true
39 | popup_text = cyclist_states["InterruptMessage"]
40 | }
41 | for (var node_index in app.graph._nodes) {
42 | let node = app.graph._nodes[node_index]
43 | if (node.type === "LoopManager") {
44 | let increment = "never"
45 | let inc_widget = node.widgets?.find((w) => w.name === 'increment')
46 | if (inc_widget) {
47 | increment = inc_widget.value
48 | }
49 | else if (cyclist_states["LoopManagerNode" + String(node.id)]) {
50 | increment = cyclist_states["LoopManagerNode" + String(node.id)]
51 | }
52 | if (increment && (increment === "on_any_interrupt" || cyclist_states["InterruptMessage"] && increment === "by_interrupt_node")) {
53 | let id_widget = node.widgets?.find((w) => w.name === 'loop_id')
54 | if (id_widget) {
55 | let new_value = replace_counter(id_widget.value)
56 | show_popup = true
57 | if (popup_text != "") popup_text += "\n"
58 | popup_text += "loop_id changed: \"" + id_widget.value + "\" -> \"" + new_value + "\""
59 | id_widget.value = new_value
60 | }
61 | }
62 | }
63 | }
64 | cyclist_states["InterruptMessage"] = null
65 | if (show_popup) app.ui.dialog.show(popup_text)
66 | }
67 | api.addEventListener("execution_interrupted", InterruptListener);
68 |
69 | function popupMessageHandler(event) {
70 | if (event.detail.stop) {
71 | //app.ui.dialog.show(event.detail.message)
72 | cyclist_states["InterruptMessage"] = event.detail.message
73 | cyclist_states["InterruptNode"+app.runningNodeId] = "Interrupt was here!"
74 | if (app.ui.autoQueueMode === "instant") {
75 | // Prevent short circuit in "insant" mode: queue, interrupt, queue, interrupt...
76 | app.ui.autoQueueEnabled = false
77 | let auto_queue_checkbox = document.getElementById("autoQueueCheckbox")
78 | if(auto_queue_checkbox) auto_queue_checkbox.checked = false
79 | }
80 | let auto_queue_new_radio = document.getElementsByClassName("comfyui-queue-mode")
81 | if (auto_queue_new_radio) {
82 | document.querySelector('div.comfyui-queue-mode input[value=""]').click();
83 | }
84 | }
85 | else {
86 | cyclist_states["InterruptMessage"] = null
87 | cyclist_states["InterruptNode"+app.runningNodeId] = null
88 | }
89 | }
90 | api.addEventListener("cyclist.message.popup", popupMessageHandler);
91 |
92 | function updateTimerHandler(event) {
93 | let postfix = event.detail.mode.charAt(0)
94 | let rounding = 2
95 | if (event.detail.mode === "milliseconds") rounding = 0;
96 | let last_time = `${event.detail.last_time.toFixed(rounding)}${postfix}`
97 | let total_time = `${event.detail.total_time.toFixed(rounding)}${postfix}`
98 | cyclist_states[event.detail.loop_id+".LoopTimer"] = `${last_time} | ${total_time}`
99 | }
100 | api.addEventListener("cyclist.timer.update", updateTimerHandler);
101 |
102 | const btns = document.querySelector(".comfy-menu-btns")
103 | $el("button", {
104 | id: "cyclist-new-cycle-button",
105 | textContent: "New Cycle",
106 | parent: btns,
107 | onclick: newCycle
108 | });
109 | const newCycleButton = new ComfyButton({
110 | content: "New Cycle (cyclist)",
111 | icon: "recycle",
112 | tooltip: "New Cycle (cyclist)",
113 | classList: "comfyui-button comfyui-cyclist-new-cycle-button",
114 | action: () => newCycle(),
115 | });
116 | if (typeof app.menu?.viewGroup !== 'undefined' && app.menu?.viewGroup !== null) {
117 | app.menu.viewGroup.append(newCycleButton)
118 | }
119 | async function newCycle() {
120 | let already_incremented = []
121 | for (var node_index in app.graph._nodes) {
122 | let c_node = app.graph._nodes[node_index]
123 | let c_node_prototype = Object.getPrototypeOf(c_node)
124 | if (c_node_prototype.IS_CYCLIST_IO) {
125 | // - if it's disconnected or widget - increment loop id
126 | // - if connected to other node - don't increment
127 | // - except it's Primitive or Const - increment that node's widget directly
128 | let new_value = ""
129 | let connected = false
130 | if (c_node && c_node.inputs) {
131 | let loop_input = c_node.inputs.find((i) => i.name === "loop_id" || i.name === "filename");
132 | if (loop_input && loop_input.link) {
133 | let loop_link = app.graph.links[loop_input.link]
134 | if (loop_link) {
135 | let origin_node = app.graph._nodes_by_id[loop_link.origin_id]
136 | if (origin_node && origin_node.type === "PrimitiveNode") {
137 | let value_widget = origin_node?.widgets.find((w) => w.name === "value")
138 | new_value = replace_counter(value_widget.value)
139 | if (!already_incremented.includes(loop_link.origin_id)) {
140 | value_widget.value = new_value
141 | already_incremented.push(loop_link.origin_id)
142 | origin_node.onResize?.(origin_node.size) // Redraw
143 | }
144 | } else {
145 | connected = true
146 | }
147 | }
148 | }
149 | }
150 | let loop_id_widget = c_node?.widgets.find((w) => w.name === "loop_id" || w.name === "filename");
151 | if (!connected && loop_id_widget && !already_incremented.includes(c_node.id)) {
152 | if (new_value === "") new_value = replace_counter(loop_id_widget.value);
153 | loop_id_widget.value = new_value
154 | already_incremented.push(c_node.id)
155 | c_node.onResize?.(c_node.size)
156 | }
157 | }
158 | }
159 | }
160 | },
161 |
162 | async beforeRegisterNodeDef(nodeType, nodeData, app) {
163 | function getLoopID(node) {
164 | let loop_id_widget = node.widgets?.find((w) => w.name === 'loop_id')
165 | if (!loop_id_widget) loop_id_widget = node.widgets?.find((w) => w.name === 'filename');
166 | let loop_id_input = node.inputs?.find((i) => i.name === 'loop_id')
167 | if (!loop_id_input) loop_id_input = node.inputs?.find((i) => i.name === 'filename')
168 | if (loop_id_input) {
169 | if (!loop_id_input.link) return null
170 | let loop_link = app.graph.links[loop_id_input.link]
171 | if (!loop_link) return null
172 | let origin_node = node
173 | do {
174 | origin_node = app.graph._nodes_by_id[loop_link.origin_id]
175 | if (origin_node && origin_node.type === "PrimitiveNode") {
176 | loop_id_widget = origin_node?.widgets.find((w) => w.name === "value")
177 | }
178 | if (origin_node && origin_node.type === "LoopManager") {
179 | loop_id_widget = origin_node?.widgets.find((w) => w.name === "loop_id")
180 | }
181 | if (origin_node && origin_node.type === "Reroute") {
182 | loop_id_input = origin_node.inputs[0]
183 | if (!loop_id_input.link) return null
184 | loop_link = app.graph.links[loop_id_input.link]
185 | if (!loop_link) return null
186 | }
187 | } while (origin_node.type === "Reroute");
188 | }
189 | if (loop_id_widget) return loop_id_widget.value;
190 | return null
191 | };
192 | if (nodeData.name === "LoopManager") {
193 | nodeType.prototype.IS_CYCLIST_IO = true
194 |
195 | const onExecuted = nodeType.prototype.onExecuted
196 | nodeType.prototype.onExecuted = function (message) {
197 | onExecuted?.apply(this, arguments)
198 |
199 | let memory_widget = this.widgets?.find((w) => w.name === 'memory_content')
200 | if (!memory_widget) {
201 | const new_widget = ComfyWidgets["STRING"](this, "memory_content", ["STRING", { multiline: true }], app).widget
202 | new_widget.inputEl.readOnly = true
203 | new_widget.inputEl.style.opacity = 0.6
204 | //new_widget.value = message.memory_content[0]
205 | //this.addCustomWidget(new_widget)
206 |
207 | memory_widget = this.widgets?.find((w) => w.name === 'memory_content')
208 | }
209 | if (memory_widget) memory_widget.value = message.memory_content[0];
210 | this.onResize?.(this.size);
211 |
212 | cyclist_states["LoopManagerNode" + String(this.id)] = message.increment[0]
213 | };
214 |
215 | nodeType.prototype.computeSize = () => [220, 100] // Hardcoded min width/height
216 | };
217 | if (nodeData.category === "cyclist/Write") {
218 | nodeType.prototype.IS_CYCLIST_IO = true
219 |
220 | const onExecuted = nodeType.prototype.onExecuted;
221 | nodeType.prototype.onExecuted = function (message) {
222 | onExecuted?.apply(this, arguments)
223 | let state = "Iteration: " + String(message.counter[0])
224 | //let state_id_node = String(this.id)
225 | //cyclist_states[state_id_node] = state
226 |
227 | let to_memory_input = this.inputs?.find((i) => i.name === "to_memory")
228 | if (!to_memory_input && this.inputs && this.inputs.length > 0) to_memory_input = this.inputs[0];
229 | if (to_memory_input) {
230 | let state_id_loop = message.loop_id[0] + "." + to_memory_input.type
231 | cyclist_states[state_id_loop] = state
232 | }
233 |
234 | for (var node_index in app.graph._nodes) {
235 | if (app.graph._nodes[node_index].type === "LoopManager") {
236 | let memory_widget = app.graph._nodes[node_index].widgets?.find((w) => w.name === 'memory_content')
237 | if (memory_widget) memory_widget.value = message.memory_content[0]
238 | }
239 | }
240 | };
241 | const onDrawForeground = nodeType.prototype.onDrawForeground;
242 | nodeType.prototype.onDrawForeground = function (ctx) {
243 | const r = onDrawForeground?.apply?.(this, arguments)
244 |
245 | let loop_id = getLoopID(this)
246 | let to_memory_input = this.inputs?.find((i) => i.name === "to_memory")
247 | if (!to_memory_input && this.inputs && this.inputs.length > 0) to_memory_input = this.inputs[0];
248 | if (loop_id && to_memory_input) drawBadge(ctx, cyclist_states[loop_id + "." + to_memory_input.type])
249 | //if (!state) state = cyclist_states[String(this.id)]
250 |
251 | return r
252 | }
253 | }
254 | if (nodeData.category === "cyclist/Read") {
255 | nodeType.prototype.IS_CYCLIST_IO = true
256 |
257 | const onDrawForeground = nodeType.prototype.onDrawForeground;
258 | nodeType.prototype.onDrawForeground = function (ctx) {
259 | const r = onDrawForeground?.apply?.(this, arguments)
260 |
261 | let loop_id = getLoopID(this)
262 | let to_memory_output = null
263 | if (this.outputs && this.outputs.length > 0) to_memory_output = this.outputs[0];
264 | if (loop_id && to_memory_output) drawBadge(ctx, cyclist_states[loop_id + "." + to_memory_output.type])
265 | //if (!state) state = cyclist_states[String(this.id)]
266 |
267 | return r
268 | }
269 | }
270 | if (nodeData.name === "CyclistTimer") {
271 | nodeType.prototype.IS_CYCLIST_IO = true
272 |
273 | const onDrawForeground = nodeType.prototype.onDrawForeground;
274 | nodeType.prototype.onDrawForeground = function (ctx) {
275 | const r = onDrawForeground?.apply?.(this, arguments)
276 |
277 | let loop_id = getLoopID(this)
278 | if (loop_id) drawBadge(ctx, cyclist_states[loop_id + ".LoopTimer"])
279 | //if (!state) state = cyclist_states[String(this.id)]
280 |
281 | return r
282 | }
283 | }
284 | if (nodeData.name === "CyclistTimerStop") {
285 | nodeType.prototype.IS_CYCLIST_IO = true
286 | }
287 | if (nodeData.name === "Interrupt") {
288 | const onDrawForeground = nodeType.prototype.onDrawForeground;
289 | nodeType.prototype.onDrawForeground = function (ctx) {
290 | const r = onDrawForeground?.apply?.(this, arguments)
291 |
292 | let state = null
293 | if (cyclist_states["InterruptNode"+this.id]) state = cyclist_states["InterruptNode"+this.id];
294 | let stop_widget = this.widgets?.find((w) => w.name === 'stop')
295 | let stop_input = this.inputs.find((i) => i.name === "stop");
296 | if (stop_widget && !stop_input) {
297 | if (stop_widget.value === true) state = "Will interrupt!";
298 | else state = null
299 | }
300 |
301 | drawBadge(ctx, state, "red")
302 |
303 | return r
304 | }
305 |
306 | nodeType.prototype.computeSize = () => [150, 60] // Hardcoded min width/height
307 |
308 | const onConnectionsChange = nodeType.prototype.onConnectionsChange;
309 | // type: input/output=1/2; index=0/1/2/...; connected: connect/disconnect=true/false; link_info.origin_id=other node id
310 | nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) {
311 | if (index === 0) {
312 | let input = this.inputs[0]
313 | let output = this.outputs[0]
314 |
315 | function Reset(input, output) {
316 | if (input) {
317 | input.type = "*"
318 | }
319 | if (output) {
320 | output.type = "*"
321 | output.name = "*"
322 | }
323 | }
324 |
325 | if ((type === LiteGraph.OUTPUT && !input.link) || (type === LiteGraph.INPUT && (!output.links || output.links.length === 0))) {
326 | // Return to default on full disconnect
327 | if (!connected) {
328 | Reset(input, output)
329 | } else {
330 | // New input, empty output
331 | if (type === LiteGraph.INPUT) {
332 | try {
333 | let app_link = app.graph.links[input.link]
334 | let input_node = app.graph.getNodeById(app_link.origin_id)
335 | let node_output_slot = input_node.outputs[app_link.origin_slot]
336 | let new_type = node_output_slot.type
337 | output.type = new_type
338 | output.name = new_type
339 | } catch (error) {
340 | Reset(null, output)
341 | }
342 | // New output, empty input
343 | } else {
344 | try {
345 | let app_link = app.graph.links[link_info.id]
346 | let output_node = app.graph.getNodeById(app_link.target_id)
347 | let node_input_slot = output_node.inputs[app_link.target_slot]
348 | let new_type = node_input_slot.type
349 | input.type = new_type
350 | } catch (error) {
351 | Reset(input, null)
352 | }
353 | }
354 | }
355 | }
356 | input.color_on = LGraphCanvas.link_type_colors[input.type]
357 | output.color_on = LGraphCanvas.link_type_colors[output.type]
358 | }
359 | return onConnectionsChange?.apply(this, arguments);
360 | }
361 | }
362 | },
363 |
364 | async nodeCreated(node, app) {
365 | if (node.comfyClass === "Interrupt") node.setSize([150, 60]);
366 | }
367 | })
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [project]
2 | name = "comfyui-cyclist"
3 | description = "This extension provides tools to iterate generation results between runs. In general, it's for cycles."
4 | version = "1.0.0"
5 | license = { file = "LICENSE" }
6 |
7 | [project.urls]
8 | Repository = "https://github.com/Pos13/comfyui-cyclist"
9 | # Used by Comfy Registry https://comfyregistry.org
10 |
11 | [tool.comfy]
12 | PublisherId = "pos13"
13 | DisplayName = "comfyui-cyclist"
14 | Icon = ""
15 |
--------------------------------------------------------------------------------
/screenshots/Interrupt_message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/screenshots/Interrupt_message.png
--------------------------------------------------------------------------------
/screenshots/LoopManager.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/screenshots/LoopManager.png
--------------------------------------------------------------------------------
/screenshots/New_Cycle_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/screenshots/New_Cycle_button.png
--------------------------------------------------------------------------------
/util_nodes.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import logging
3 | import math
4 | import torch
5 |
6 | class CyclistMathFloat:
7 | """Node for simple floating point math operations between two vars. Does not check if values are safe to math."""
8 |
9 | @classmethod
10 | def INPUT_TYPES(s):
11 | return { "required": { "operation": (["addition", "subtraction", "multiplication", "division", "exponentiation", "max", "min"],),
12 | "float_1": ("FLOAT", {"default": 1.0, "min": -sys.float_info.max, "max": sys.float_info.max, "step": 0.01, "round": False, "display": "number"}),
13 | "float_2": ("FLOAT", {"default": 1.0, "min": -sys.float_info.max, "max": sys.float_info.max, "step": 0.01, "round": False, "display": "number"})}}
14 |
15 | RETURN_TYPES = ("FLOAT", )
16 | FUNCTION = "calc"
17 | CATEGORY = "cyclist/Utilities"
18 |
19 | #NODE_NAME = "Float Math"
20 |
21 | def calc(self, operation, float_1, float_2):
22 | if operation == "addition":
23 | return (float_1 + float_2,)
24 | elif operation == "subtraction":
25 | return (float_1 - float_2,)
26 | elif operation == "multiplication":
27 | return (float_1 * float_2,)
28 | elif operation == "division":
29 | return (float_1 / float_2,)
30 | elif operation == "exponentiation":
31 | return (float_1 ** float_2,)
32 | elif operation == "max":
33 | if float_1 > float_2:
34 | return (float_1,)
35 | else:
36 | return (float_2,)
37 | elif operation == "min":
38 | if float_1 < float_2:
39 | return (float_1,)
40 | else:
41 | return (float_2,)
42 | else:
43 | raise Exception("Float math operation is not in the list")
44 | return (1.0,)
45 |
46 | class CyclistMathInt:
47 | """Node for simple integer math operations between two vars. Does not check if values are safe to math. Works as python operations."""
48 |
49 | @classmethod
50 | def INPUT_TYPES(s):
51 | return { "required": { "operation": (["addition", "subtraction", "multiplication", "floor division", "modulo", "exponentiation", "max", "min"],),
52 | "int_1": ("INT", {"default": 1, "min": -sys.maxsize, "max": sys.maxsize}),
53 | "int_2": ("INT", {"default": 1, "min": -sys.maxsize, "max": sys.maxsize})}}
54 |
55 | RETURN_TYPES = ("INT", )
56 | FUNCTION = "calc"
57 | CATEGORY = "cyclist/Utilities"
58 |
59 | #NODE_NAME = "Int Math"
60 |
61 | def calc(self, operation, int_1, int_2):
62 | if operation == "addition":
63 | return (int_1 + int_2,)
64 | elif operation == "subtraction":
65 | return (int_1 - int_2,)
66 | elif operation == "multiplication":
67 | return (int_1 * int_2,)
68 | elif operation == "floor division":
69 | return (int_1 // int_2,)
70 | elif operation == "modulo":
71 | return (int_1 % int_2,)
72 | elif operation == "exponentiation":
73 | return (int_1 ** int_2,)
74 | elif operation == "max":
75 | if int_1 > int_2:
76 | return (int_1,)
77 | else:
78 | return (int_2,)
79 | elif operation == "min":
80 | if int_1 < int_2:
81 | return (int_1,)
82 | else:
83 | return (int_2,)
84 | else:
85 | raise Exception("Int math operation is not in the list")
86 | return (0,)
87 |
88 | # 'required' input can't be '*', unless it can. Thanks, @pythongossss
89 | class AnyType(str):
90 | def __ne__(self, __value: object) -> bool:
91 | return False
92 |
93 | class CyclistTypeCast:
94 | """Tries to cast any input into str, int, float and bool. Int returns mathematically rounded. Float and int return None on fails."""
95 |
96 | @classmethod
97 | def INPUT_TYPES(s):
98 | return {"required": {"anything": (AnyType("*"), )}}
99 |
100 | RETURN_TYPES = ("STRING", "INT", "FLOAT", "BOOLEAN")
101 | FUNCTION = "cast"
102 | CATEGORY = "cyclist/Utilities"
103 |
104 | #NODE_NAME = "Convert to"
105 |
106 | def cast(self, anything):
107 | res_str, res_int, res_float, res_bool = my_cast(anything)
108 | if res_int is None:
109 | logging.warn(f"Can't cast {type(anything)} to int")
110 | if res_float is None:
111 | logging.warn(f"Can't cast {type(anything)} to float")
112 | return res_str, res_int, res_float, res_bool
113 |
114 | def my_cast(anything):
115 | try:
116 | result_float = float(anything)
117 | result_int = int(round(result_float))
118 | except:
119 | result_float = None
120 | result_int = None
121 | try:
122 | result_bool = bool(anything)
123 | except:
124 | if anything is None:
125 | result_bool = False
126 | else:
127 | result_bool = True
128 | return (str(anything), result_int, result_float, result_bool)
129 |
130 | class CyclistCompare:
131 | """Tries to compare any two inputs. If different types provided, they would be cast to equal types. Order of prefered casts: bool, float, str."""
132 |
133 | @classmethod
134 | def INPUT_TYPES(s):
135 | return { "required": {"condition": (["equals", "not equals", "greater than", "less than", "greater or equals", "less or equals"],),
136 | "thing1": (AnyType("*"), ),
137 | "thing2": (AnyType("*"), )}}
138 |
139 | RETURN_TYPES = ("BOOLEAN", )
140 | FUNCTION = "compare"
141 | CATEGORY = "cyclist/Utilities"
142 |
143 | #NODE_NAME = "Compare Anything"
144 |
145 | def compare(self, condition, thing1, thing2):
146 | str1, int1, float1, bool1 = my_cast(thing1)
147 | str2, int2, float2, bool2 = my_cast(thing2)
148 | if torch.is_tensor(thing1):
149 | tensor1 = thing1
150 | elif isinstance(thing1, dict) and "samples" in thing1 and torch.is_tensor(thing1["samples"]):
151 | tensor1 = thing1["samples"]
152 | else:
153 | tensor1 = None
154 | if torch.is_tensor(thing2):
155 | tensor2 = thing2
156 | elif isinstance(thing2, dict) and "samples" in thing2 and torch.is_tensor(thing2["samples"]):
157 | tensor2 = thing2["samples"]
158 | else:
159 | tensor2 = None
160 |
161 | if isinstance(thing1, bool) or isinstance(thing2, bool):
162 | return (self.compare_bool(bool1, bool2, condition), )
163 | elif isinstance(thing1, str) or isinstance(thing2, str):
164 | if not float1 is None and not float2 is None:
165 | return (self.compare_float(float1, float2, condition), )
166 | else:
167 | return (self.compare_str(str1, str2, condition), )
168 | elif isinstance(thing1, float) or isinstance(thing2, float):
169 | return (self.compare_float(float1, float2, condition), )
170 | elif isinstance(thing1, int) and isinstance(thing2, int):
171 | return (self.compare_int(int1, int2, condition), )
172 | elif not tensor1 is None and not tensor2 is None:
173 | if (tensor1.dim() == 4 and tensor1.size()[1] != 4) or (tensor2.dim() == 4 and tensor2.size()[1] != 4):
174 | return (self.compare_tensors(tensor1, tensor2, condition, as_images=True), ) # Assume at least one is image
175 | else:
176 | return (self.compare_tensors(tensor1, tensor2, condition), )
177 | else:
178 | try:
179 | if condition == "equals":
180 | result = thing1 == thing2
181 | elif condition == "not equals":
182 | result = thing1 != thing2
183 | elif condition == "greater than":
184 | result = thing1 > thing2
185 | elif condition == "less than":
186 | result = thing1 < thing2
187 | elif condition == "greater or equals":
188 | result = thing1 >= thing2
189 | elif condition == "less or equals":
190 | result = thing1 <= thing2
191 | else:
192 | raise Exception("Compare operation is not in the list")
193 | if not isinstance(result, bool):
194 | raise Exception("Comparison ends in a non-boolean return")
195 | return (result, )
196 | except:
197 | logging.warn("'Compare Anything' node doesn't really know how to compare these inputs, so it falls back to compare string representations.")
198 | return (self.compare_str(str1, str2, condition), )
199 |
200 | def compare_bool(self, a, b, condition):
201 | if condition == "equals":
202 | return a == b
203 | elif condition == "not equals":
204 | return a != b
205 | elif condition == "greater than":
206 | return a == True and b == False
207 | elif condition == "less than":
208 | return a == False and b == True
209 | elif condition == "greater or equals":
210 | return True
211 | elif condition == "less or equals":
212 | return True
213 | else:
214 | raise Exception("Compare operation is not in the list")
215 |
216 | def compare_str(self, a, b, condition):
217 | if condition == "equals":
218 | return a == b
219 | elif condition == "not equals":
220 | return a != b
221 | elif condition == "greater than":
222 | return a > b
223 | elif condition == "less than":
224 | return a < b
225 | elif condition == "greater or equals":
226 | return a >= b
227 | elif condition == "less or equals":
228 | return a <= b
229 | else:
230 | raise Exception("Compare operation is not in the list")
231 |
232 | def compare_float(self, a, b, condition):
233 | if condition == "equals":
234 | return math.isclose(a, b)
235 | elif condition == "not equals":
236 | return not math.isclose(a, b)
237 | elif condition == "greater than":
238 | return a > b
239 | elif condition == "less than":
240 | return a < b
241 | elif condition == "greater or equals":
242 | return a >= b or math.isclose(a, b)
243 | elif condition == "less or equals":
244 | return a <= b or math.isclose(a, b)
245 | else:
246 | raise Exception("Compare operation is not in the list")
247 |
248 | def compare_int(self, a, b, condition):
249 | if condition == "equals":
250 | return a == b
251 | elif condition == "not equals":
252 | return a != b
253 | elif condition == "greater than":
254 | return a > b
255 | elif condition == "less than":
256 | return a < b
257 | elif condition == "greater or equals":
258 | return a >= b
259 | elif condition == "less or equals":
260 | return a <= b
261 | else:
262 | raise Exception("Compare operation is not in the list")
263 |
264 | def compare_tensors(self, a, b, condition, as_images=False):
265 | if condition == "equals":
266 | return torch.equal(a, b)
267 | elif condition == "not equals":
268 | return not torch.equal(a, b)
269 | else:
270 | size1 = 1
271 | if as_images:
272 | all_sizes1 = a.size()[:3] # Only comparing pixels count, not channels count
273 | else:
274 | all_sizes1 = a.size()
275 | for i in all_sizes1:
276 | size1 *= i
277 | size2 = 1
278 | if as_images:
279 | all_sizes2 = b.size()[:3] # Only comparing pixels count, not channels count
280 | else:
281 | all_sizes2 = b.size()
282 | for i in all_sizes2:
283 | size2 *= i
284 |
285 | if condition == "greater than":
286 | return size1 > size2
287 | elif condition == "less than":
288 | return size1 < size2
289 | elif condition == "greater or equals":
290 | return size1 > size2 or torch.equal(a, b)
291 | elif condition == "less or equals":
292 | return size1 < size2 or torch.equal(a, b)
293 | else:
294 | raise Exception("Compare operation is not in the list")
--------------------------------------------------------------------------------
/workflows/CatStack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/CatStack.png
--------------------------------------------------------------------------------
/workflows/ChimeraMaker.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 86,
3 | "last_link_id": 153,
4 | "nodes": [
5 | {
6 | "id": 26,
7 | "type": "Reroute",
8 | "pos": [
9 | 890,
10 | 20
11 | ],
12 | "size": [
13 | 82,
14 | 26
15 | ],
16 | "flags": {},
17 | "order": 4,
18 | "mode": 0,
19 | "inputs": [
20 | {
21 | "name": "",
22 | "type": "*",
23 | "link": 28
24 | }
25 | ],
26 | "outputs": [
27 | {
28 | "name": "MODEL",
29 | "type": "MODEL",
30 | "links": [
31 | 29
32 | ],
33 | "slot_index": 0
34 | }
35 | ],
36 | "properties": {
37 | "showOutputText": true,
38 | "horizontal": false
39 | }
40 | },
41 | {
42 | "id": 25,
43 | "type": "Reroute",
44 | "pos": [
45 | 1205,
46 | 60
47 | ],
48 | "size": [
49 | 75,
50 | 26
51 | ],
52 | "flags": {},
53 | "order": 8,
54 | "mode": 0,
55 | "inputs": [
56 | {
57 | "name": "",
58 | "type": "*",
59 | "link": 26
60 | }
61 | ],
62 | "outputs": [
63 | {
64 | "name": "VAE",
65 | "type": "VAE",
66 | "links": [
67 | 27
68 | ],
69 | "slot_index": 0
70 | }
71 | ],
72 | "properties": {
73 | "showOutputText": true,
74 | "horizontal": false
75 | }
76 | },
77 | {
78 | "id": 5,
79 | "type": "EmptyLatentImage",
80 | "pos": [
81 | 520,
82 | 410
83 | ],
84 | "size": {
85 | "0": 210,
86 | "1": 110
87 | },
88 | "flags": {},
89 | "order": 0,
90 | "mode": 0,
91 | "outputs": [
92 | {
93 | "name": "LATENT",
94 | "type": "LATENT",
95 | "links": [
96 | 120
97 | ],
98 | "slot_index": 0
99 | }
100 | ],
101 | "title": "Size",
102 | "properties": {
103 | "Node name for S&R": "EmptyLatentImage"
104 | },
105 | "widgets_values": [
106 | 512,
107 | 512,
108 | 1
109 | ],
110 | "color": "#223",
111 | "bgcolor": "#335"
112 | },
113 | {
114 | "id": 3,
115 | "type": "KSampler",
116 | "pos": [
117 | 1000,
118 | 130
119 | ],
120 | "size": {
121 | "0": 280,
122 | "1": 262
123 | },
124 | "flags": {},
125 | "order": 12,
126 | "mode": 0,
127 | "inputs": [
128 | {
129 | "name": "model",
130 | "type": "MODEL",
131 | "link": 29
132 | },
133 | {
134 | "name": "positive",
135 | "type": "CONDITIONING",
136 | "link": 138
137 | },
138 | {
139 | "name": "negative",
140 | "type": "CONDITIONING",
141 | "link": 6
142 | },
143 | {
144 | "name": "latent_image",
145 | "type": "LATENT",
146 | "link": 120
147 | }
148 | ],
149 | "outputs": [
150 | {
151 | "name": "LATENT",
152 | "type": "LATENT",
153 | "links": [
154 | 7
155 | ],
156 | "slot_index": 0
157 | }
158 | ],
159 | "properties": {
160 | "Node name for S&R": "KSampler"
161 | },
162 | "widgets_values": [
163 | 618650275299421,
164 | "randomize",
165 | 18,
166 | 4.5,
167 | "euler_ancestral",
168 | "normal",
169 | 1
170 | ]
171 | },
172 | {
173 | "id": 7,
174 | "type": "CLIPTextEncode",
175 | "pos": [
176 | 520,
177 | 290
178 | ],
179 | "size": {
180 | "0": 210,
181 | "1": 76
182 | },
183 | "flags": {},
184 | "order": 6,
185 | "mode": 0,
186 | "inputs": [
187 | {
188 | "name": "clip",
189 | "type": "CLIP",
190 | "link": 5
191 | }
192 | ],
193 | "outputs": [
194 | {
195 | "name": "CONDITIONING",
196 | "type": "CONDITIONING",
197 | "links": [
198 | 6
199 | ],
200 | "slot_index": 0
201 | }
202 | ],
203 | "title": "Negative",
204 | "properties": {
205 | "Node name for S&R": "CLIPTextEncode"
206 | },
207 | "widgets_values": [
208 | "pencil sketch, black and white, greyscale"
209 | ],
210 | "color": "#232",
211 | "bgcolor": "#353"
212 | },
213 | {
214 | "id": 8,
215 | "type": "VAEDecode",
216 | "pos": [
217 | 1310,
218 | 130
219 | ],
220 | "size": {
221 | "0": 140,
222 | "1": 50
223 | },
224 | "flags": {},
225 | "order": 14,
226 | "mode": 0,
227 | "inputs": [
228 | {
229 | "name": "samples",
230 | "type": "LATENT",
231 | "link": 7
232 | },
233 | {
234 | "name": "vae",
235 | "type": "VAE",
236 | "link": 27
237 | }
238 | ],
239 | "outputs": [
240 | {
241 | "name": "IMAGE",
242 | "type": "IMAGE",
243 | "links": [
244 | 141
245 | ],
246 | "slot_index": 0
247 | }
248 | ],
249 | "properties": {
250 | "Node name for S&R": "VAEDecode"
251 | }
252 | },
253 | {
254 | "id": 6,
255 | "type": "CLIPTextEncode",
256 | "pos": [
257 | 520,
258 | 150
259 | ],
260 | "size": {
261 | "0": 210,
262 | "1": 90
263 | },
264 | "flags": {},
265 | "order": 5,
266 | "mode": 0,
267 | "inputs": [
268 | {
269 | "name": "clip",
270 | "type": "CLIP",
271 | "link": 3
272 | }
273 | ],
274 | "outputs": [
275 | {
276 | "name": "CONDITIONING",
277 | "type": "CONDITIONING",
278 | "links": [
279 | 137
280 | ],
281 | "slot_index": 0
282 | }
283 | ],
284 | "title": "Positive",
285 | "properties": {
286 | "Node name for S&R": "CLIPTextEncode"
287 | },
288 | "widgets_values": [
289 | "photo of a cute animal"
290 | ],
291 | "color": "#232",
292 | "bgcolor": "#353"
293 | },
294 | {
295 | "id": 82,
296 | "type": "OverrideImage",
297 | "pos": [
298 | 1480,
299 | 130
300 | ],
301 | "size": [
302 | 320,
303 | 270
304 | ],
305 | "flags": {},
306 | "order": 16,
307 | "mode": 0,
308 | "inputs": [
309 | {
310 | "name": "image",
311 | "type": "IMAGE",
312 | "link": 141
313 | },
314 | {
315 | "name": "filename",
316 | "type": "STRING",
317 | "link": 152,
318 | "widget": {
319 | "name": "filename"
320 | }
321 | }
322 | ],
323 | "properties": {
324 | "Node name for S&R": "OverrideImage"
325 | },
326 | "widgets_values": [
327 | "Chimera_1"
328 | ]
329 | },
330 | {
331 | "id": 80,
332 | "type": "RecallConditioning",
333 | "pos": [
334 | 760,
335 | 150
336 | ],
337 | "size": [
338 | 210,
339 | 50
340 | ],
341 | "flags": {},
342 | "order": 10,
343 | "mode": 0,
344 | "inputs": [
345 | {
346 | "name": "fallback",
347 | "type": "CONDITIONING",
348 | "link": 137
349 | },
350 | {
351 | "name": "loop_id",
352 | "type": "STRING",
353 | "link": 150,
354 | "widget": {
355 | "name": "loop_id"
356 | }
357 | }
358 | ],
359 | "outputs": [
360 | {
361 | "name": "CONDITIONING",
362 | "type": "CONDITIONING",
363 | "links": [
364 | 138,
365 | 147
366 | ],
367 | "shape": 3,
368 | "slot_index": 0
369 | }
370 | ],
371 | "properties": {
372 | "Node name for S&R": "RecallConditioning"
373 | },
374 | "widgets_values": [
375 | "Chimera_1"
376 | ]
377 | },
378 | {
379 | "id": 77,
380 | "type": "ImpactWildcardProcessor",
381 | "pos": [
382 | 170,
383 | 400
384 | ],
385 | "size": {
386 | "0": 300,
387 | "1": 222
388 | },
389 | "flags": {},
390 | "order": 1,
391 | "mode": 0,
392 | "outputs": [
393 | {
394 | "name": "STRING",
395 | "type": "STRING",
396 | "links": [
397 | 134
398 | ],
399 | "shape": 3,
400 | "slot_index": 0
401 | }
402 | ],
403 | "properties": {
404 | "Node name for S&R": "ImpactWildcardProcessor"
405 | },
406 | "widgets_values": [
407 | "__jumbo/creatures/animals__",
408 | "llama",
409 | true,
410 | 1108012394795937,
411 | "randomize",
412 | "Select the Wildcard to add to the text"
413 | ],
414 | "color": "#232",
415 | "bgcolor": "#353"
416 | },
417 | {
418 | "id": 4,
419 | "type": "CheckpointLoaderSimple",
420 | "pos": [
421 | 170,
422 | 20
423 | ],
424 | "size": {
425 | "0": 300,
426 | "1": 100
427 | },
428 | "flags": {},
429 | "order": 2,
430 | "mode": 0,
431 | "outputs": [
432 | {
433 | "name": "MODEL",
434 | "type": "MODEL",
435 | "links": [
436 | 28
437 | ],
438 | "slot_index": 0
439 | },
440 | {
441 | "name": "CLIP",
442 | "type": "CLIP",
443 | "links": [
444 | 3,
445 | 5,
446 | 135
447 | ],
448 | "slot_index": 1
449 | },
450 | {
451 | "name": "VAE",
452 | "type": "VAE",
453 | "links": [
454 | 26
455 | ],
456 | "slot_index": 2
457 | }
458 | ],
459 | "properties": {
460 | "Node name for S&R": "CheckpointLoaderSimple"
461 | },
462 | "widgets_values": [
463 | "526mixV15.safetensors"
464 | ],
465 | "color": "#223",
466 | "bgcolor": "#335"
467 | },
468 | {
469 | "id": 79,
470 | "type": "CLIPTextEncode",
471 | "pos": [
472 | 520,
473 | 570
474 | ],
475 | "size": {
476 | "0": 210,
477 | "1": 54
478 | },
479 | "flags": {},
480 | "order": 7,
481 | "mode": 0,
482 | "inputs": [
483 | {
484 | "name": "clip",
485 | "type": "CLIP",
486 | "link": 135
487 | },
488 | {
489 | "name": "text",
490 | "type": "STRING",
491 | "link": 134,
492 | "widget": {
493 | "name": "text"
494 | }
495 | }
496 | ],
497 | "outputs": [
498 | {
499 | "name": "CONDITIONING",
500 | "type": "CONDITIONING",
501 | "links": [
502 | 148
503 | ],
504 | "shape": 3,
505 | "slot_index": 0
506 | }
507 | ],
508 | "properties": {
509 | "Node name for S&R": "CLIPTextEncode"
510 | },
511 | "widgets_values": [
512 | ""
513 | ]
514 | },
515 | {
516 | "id": 83,
517 | "type": "ConditioningConcat",
518 | "pos": [
519 | 1000,
520 | 550
521 | ],
522 | "size": {
523 | "0": 253.60000610351562,
524 | "1": 50
525 | },
526 | "flags": {},
527 | "order": 13,
528 | "mode": 0,
529 | "inputs": [
530 | {
531 | "name": "conditioning_to",
532 | "type": "CONDITIONING",
533 | "link": 147
534 | },
535 | {
536 | "name": "conditioning_from",
537 | "type": "CONDITIONING",
538 | "link": 148
539 | }
540 | ],
541 | "outputs": [
542 | {
543 | "name": "CONDITIONING",
544 | "type": "CONDITIONING",
545 | "links": [
546 | 144
547 | ],
548 | "shape": 3,
549 | "slot_index": 0
550 | }
551 | ],
552 | "properties": {
553 | "Node name for S&R": "ConditioningConcat"
554 | }
555 | },
556 | {
557 | "id": 81,
558 | "type": "MemorizeConditioning",
559 | "pos": [
560 | 1480,
561 | 550
562 | ],
563 | "size": [
564 | 210,
565 | 50
566 | ],
567 | "flags": {},
568 | "order": 15,
569 | "mode": 0,
570 | "inputs": [
571 | {
572 | "name": "to_memory",
573 | "type": "CONDITIONING",
574 | "link": 144
575 | },
576 | {
577 | "name": "loop_id",
578 | "type": "STRING",
579 | "link": 153,
580 | "widget": {
581 | "name": "loop_id"
582 | }
583 | }
584 | ],
585 | "properties": {
586 | "Node name for S&R": "MemorizeConditioning"
587 | },
588 | "widgets_values": [
589 | "Chimera_1"
590 | ]
591 | },
592 | {
593 | "id": 85,
594 | "type": "Reroute",
595 | "pos": [
596 | 720,
597 | 670
598 | ],
599 | "size": [
600 | 90.4,
601 | 26
602 | ],
603 | "flags": {},
604 | "order": 9,
605 | "mode": 0,
606 | "inputs": [
607 | {
608 | "name": "",
609 | "type": "*",
610 | "link": 149,
611 | "widget": {
612 | "name": "value"
613 | }
614 | }
615 | ],
616 | "outputs": [
617 | {
618 | "name": "STRING",
619 | "type": "STRING",
620 | "links": [
621 | 150,
622 | 151
623 | ],
624 | "slot_index": 0
625 | }
626 | ],
627 | "properties": {
628 | "showOutputText": true,
629 | "horizontal": false
630 | }
631 | },
632 | {
633 | "id": 86,
634 | "type": "Reroute",
635 | "pos": [
636 | 1170,
637 | 670
638 | ],
639 | "size": [
640 | 90.4,
641 | 26
642 | ],
643 | "flags": {},
644 | "order": 11,
645 | "mode": 0,
646 | "inputs": [
647 | {
648 | "name": "",
649 | "type": "*",
650 | "link": 151,
651 | "widget": {
652 | "name": "value"
653 | }
654 | }
655 | ],
656 | "outputs": [
657 | {
658 | "name": "STRING",
659 | "type": "STRING",
660 | "links": [
661 | 152,
662 | 153
663 | ],
664 | "slot_index": 0
665 | }
666 | ],
667 | "properties": {
668 | "showOutputText": true,
669 | "horizontal": false
670 | }
671 | },
672 | {
673 | "id": 84,
674 | "type": "LoopManager",
675 | "pos": [
676 | 170,
677 | 670
678 | ],
679 | "size": [
680 | 300,
681 | 140
682 | ],
683 | "flags": {},
684 | "order": 3,
685 | "mode": 0,
686 | "outputs": [
687 | {
688 | "name": "STRING",
689 | "type": "STRING",
690 | "links": [
691 | 149
692 | ],
693 | "shape": 3,
694 | "slot_index": 0
695 | }
696 | ],
697 | "properties": {
698 | "Node name for S&R": "LoopManager"
699 | },
700 | "widgets_values": [
701 | "Chimera_2",
702 | "never",
703 | "Chimera_2:\n(#7)CONDITIONING: -- exists --\n(#7)IMAGE: Chimera_2.png\n\nChimera_1:\n(#4)CONDITIONING: -- exists --\n(#4)IMAGE: Chimera_1.png\n\nCatStack_2:\n(#1)INT: 1\n(#1)LATENT: CatStack_2.latent\n(#1)IMAGE: CatStack_2.png\n\nCatStack_1:\n(#6)INT: 6\n(#4)LATENT: CatStack_1.latent\n(#2)IMAGE: CatStack_1.png"
704 | ]
705 | }
706 | ],
707 | "links": [
708 | [
709 | 3,
710 | 4,
711 | 1,
712 | 6,
713 | 0,
714 | "CLIP"
715 | ],
716 | [
717 | 5,
718 | 4,
719 | 1,
720 | 7,
721 | 0,
722 | "CLIP"
723 | ],
724 | [
725 | 6,
726 | 7,
727 | 0,
728 | 3,
729 | 2,
730 | "CONDITIONING"
731 | ],
732 | [
733 | 7,
734 | 3,
735 | 0,
736 | 8,
737 | 0,
738 | "LATENT"
739 | ],
740 | [
741 | 26,
742 | 4,
743 | 2,
744 | 25,
745 | 0,
746 | "*"
747 | ],
748 | [
749 | 27,
750 | 25,
751 | 0,
752 | 8,
753 | 1,
754 | "VAE"
755 | ],
756 | [
757 | 28,
758 | 4,
759 | 0,
760 | 26,
761 | 0,
762 | "*"
763 | ],
764 | [
765 | 29,
766 | 26,
767 | 0,
768 | 3,
769 | 0,
770 | "MODEL"
771 | ],
772 | [
773 | 120,
774 | 5,
775 | 0,
776 | 3,
777 | 3,
778 | "LATENT"
779 | ],
780 | [
781 | 134,
782 | 77,
783 | 0,
784 | 79,
785 | 1,
786 | "STRING"
787 | ],
788 | [
789 | 135,
790 | 4,
791 | 1,
792 | 79,
793 | 0,
794 | "CLIP"
795 | ],
796 | [
797 | 137,
798 | 6,
799 | 0,
800 | 80,
801 | 0,
802 | "CONDITIONING"
803 | ],
804 | [
805 | 138,
806 | 80,
807 | 0,
808 | 3,
809 | 1,
810 | "CONDITIONING"
811 | ],
812 | [
813 | 141,
814 | 8,
815 | 0,
816 | 82,
817 | 0,
818 | "IMAGE"
819 | ],
820 | [
821 | 144,
822 | 83,
823 | 0,
824 | 81,
825 | 0,
826 | "CONDITIONING"
827 | ],
828 | [
829 | 147,
830 | 80,
831 | 0,
832 | 83,
833 | 0,
834 | "CONDITIONING"
835 | ],
836 | [
837 | 148,
838 | 79,
839 | 0,
840 | 83,
841 | 1,
842 | "CONDITIONING"
843 | ],
844 | [
845 | 149,
846 | 84,
847 | 0,
848 | 85,
849 | 0,
850 | "*"
851 | ],
852 | [
853 | 150,
854 | 85,
855 | 0,
856 | 80,
857 | 1,
858 | "STRING"
859 | ],
860 | [
861 | 151,
862 | 85,
863 | 0,
864 | 86,
865 | 0,
866 | "*"
867 | ],
868 | [
869 | 152,
870 | 86,
871 | 0,
872 | 82,
873 | 1,
874 | "STRING"
875 | ],
876 | [
877 | 153,
878 | 86,
879 | 0,
880 | 81,
881 | 1,
882 | "STRING"
883 | ]
884 | ],
885 | "groups": [],
886 | "config": {},
887 | "extra": {},
888 | "version": 0.4
889 | }
--------------------------------------------------------------------------------
/workflows/ChimeraMaker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/ChimeraMaker.png
--------------------------------------------------------------------------------
/workflows/GenUntilGood.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 71,
3 | "last_link_id": 121,
4 | "nodes": [
5 | {
6 | "id": 3,
7 | "type": "KSampler",
8 | "pos": [
9 | 1030,
10 | 210
11 | ],
12 | "size": {
13 | "0": 280,
14 | "1": 262
15 | },
16 | "flags": {},
17 | "order": 21,
18 | "mode": 0,
19 | "inputs": [
20 | {
21 | "name": "model",
22 | "type": "MODEL",
23 | "link": 29
24 | },
25 | {
26 | "name": "positive",
27 | "type": "CONDITIONING",
28 | "link": 4
29 | },
30 | {
31 | "name": "negative",
32 | "type": "CONDITIONING",
33 | "link": 6
34 | },
35 | {
36 | "name": "latent_image",
37 | "type": "LATENT",
38 | "link": 39
39 | }
40 | ],
41 | "outputs": [
42 | {
43 | "name": "LATENT",
44 | "type": "LATENT",
45 | "links": [
46 | 7
47 | ],
48 | "slot_index": 0
49 | }
50 | ],
51 | "properties": {
52 | "Node name for S&R": "KSampler"
53 | },
54 | "widgets_values": [
55 | 360572502491967,
56 | "randomize",
57 | 26,
58 | 7,
59 | "dpmpp_3m_sde_gpu",
60 | "karras",
61 | 1
62 | ]
63 | },
64 | {
65 | "id": 6,
66 | "type": "CLIPTextEncode",
67 | "pos": [
68 | 790,
69 | 210
70 | ],
71 | "size": {
72 | "0": 210,
73 | "1": 54
74 | },
75 | "flags": {},
76 | "order": 9,
77 | "mode": 0,
78 | "inputs": [
79 | {
80 | "name": "clip",
81 | "type": "CLIP",
82 | "link": 3
83 | },
84 | {
85 | "name": "text",
86 | "type": "STRING",
87 | "link": 73,
88 | "widget": {
89 | "name": "text"
90 | }
91 | }
92 | ],
93 | "outputs": [
94 | {
95 | "name": "CONDITIONING",
96 | "type": "CONDITIONING",
97 | "links": [
98 | 4
99 | ],
100 | "slot_index": 0
101 | }
102 | ],
103 | "title": "Positive",
104 | "properties": {
105 | "Node name for S&R": "CLIPTextEncode"
106 | },
107 | "widgets_values": [
108 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
109 | ]
110 | },
111 | {
112 | "id": 7,
113 | "type": "CLIPTextEncode",
114 | "pos": [
115 | 790,
116 | 300
117 | ],
118 | "size": {
119 | "0": 210,
120 | "1": 76
121 | },
122 | "flags": {},
123 | "order": 10,
124 | "mode": 0,
125 | "inputs": [
126 | {
127 | "name": "clip",
128 | "type": "CLIP",
129 | "link": 5
130 | }
131 | ],
132 | "outputs": [
133 | {
134 | "name": "CONDITIONING",
135 | "type": "CONDITIONING",
136 | "links": [
137 | 6
138 | ],
139 | "slot_index": 0
140 | }
141 | ],
142 | "title": "Negative",
143 | "properties": {
144 | "Node name for S&R": "CLIPTextEncode"
145 | },
146 | "widgets_values": [
147 | "blurry"
148 | ],
149 | "color": "#232",
150 | "bgcolor": "#353"
151 | },
152 | {
153 | "id": 29,
154 | "type": "Interrupt",
155 | "pos": [
156 | 850,
157 | 460
158 | ],
159 | "size": [
160 | 150,
161 | 60
162 | ],
163 | "flags": {},
164 | "order": 20,
165 | "mode": 0,
166 | "inputs": [
167 | {
168 | "name": "any_in",
169 | "type": "*",
170 | "link": 38,
171 | "color_on": ""
172 | },
173 | {
174 | "name": "stop",
175 | "type": "BOOLEAN",
176 | "link": 105,
177 | "widget": {
178 | "name": "stop"
179 | }
180 | }
181 | ],
182 | "outputs": [
183 | {
184 | "name": "LATENT",
185 | "type": "LATENT",
186 | "links": [
187 | 39
188 | ],
189 | "shape": 3,
190 | "slot_index": 0,
191 | "color_on": "#FF9CF9"
192 | }
193 | ],
194 | "properties": {
195 | "Node name for S&R": "Interrupt"
196 | },
197 | "widgets_values": [
198 | false
199 | ]
200 | },
201 | {
202 | "id": 25,
203 | "type": "Reroute",
204 | "pos": [
205 | 1240,
206 | 120
207 | ],
208 | "size": [
209 | 75,
210 | 26
211 | ],
212 | "flags": {},
213 | "order": 11,
214 | "mode": 0,
215 | "inputs": [
216 | {
217 | "name": "",
218 | "type": "*",
219 | "link": 26
220 | }
221 | ],
222 | "outputs": [
223 | {
224 | "name": "VAE",
225 | "type": "VAE",
226 | "links": [
227 | 27
228 | ],
229 | "slot_index": 0
230 | }
231 | ],
232 | "properties": {
233 | "showOutputText": true,
234 | "horizontal": false
235 | }
236 | },
237 | {
238 | "id": 8,
239 | "type": "VAEDecode",
240 | "pos": [
241 | 1340,
242 | 210
243 | ],
244 | "size": {
245 | "0": 140,
246 | "1": 50
247 | },
248 | "flags": {},
249 | "order": 22,
250 | "mode": 0,
251 | "inputs": [
252 | {
253 | "name": "samples",
254 | "type": "LATENT",
255 | "link": 7
256 | },
257 | {
258 | "name": "vae",
259 | "type": "VAE",
260 | "link": 27
261 | }
262 | ],
263 | "outputs": [
264 | {
265 | "name": "IMAGE",
266 | "type": "IMAGE",
267 | "links": [
268 | 86
269 | ],
270 | "slot_index": 0
271 | }
272 | ],
273 | "properties": {
274 | "Node name for S&R": "VAEDecode"
275 | }
276 | },
277 | {
278 | "id": 50,
279 | "type": "Text Multiline",
280 | "pos": [
281 | 360,
282 | 230
283 | ],
284 | "size": {
285 | "0": 360,
286 | "1": 150
287 | },
288 | "flags": {},
289 | "order": 0,
290 | "mode": 0,
291 | "outputs": [
292 | {
293 | "name": "STRING",
294 | "type": "STRING",
295 | "links": [
296 | 71,
297 | 73
298 | ],
299 | "shape": 3,
300 | "slot_index": 0
301 | }
302 | ],
303 | "title": "Positive",
304 | "properties": {
305 | "Node name for S&R": "Text Multiline"
306 | },
307 | "widgets_values": [
308 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
309 | ],
310 | "color": "#232",
311 | "bgcolor": "#353"
312 | },
313 | {
314 | "id": 30,
315 | "type": "Reroute",
316 | "pos": [
317 | 700,
318 | 320
319 | ],
320 | "size": [
321 | 90.4,
322 | 26
323 | ],
324 | "flags": {},
325 | "order": 7,
326 | "mode": 0,
327 | "inputs": [
328 | {
329 | "name": "",
330 | "type": "*",
331 | "link": 71,
332 | "pos": [
333 | 45.2,
334 | 0
335 | ],
336 | "widget": {
337 | "name": "value"
338 | }
339 | }
340 | ],
341 | "outputs": [
342 | {
343 | "name": "STRING",
344 | "type": "STRING",
345 | "links": [
346 | 72
347 | ],
348 | "slot_index": 0
349 | }
350 | ],
351 | "properties": {
352 | "showOutputText": true,
353 | "horizontal": true
354 | }
355 | },
356 | {
357 | "id": 13,
358 | "type": "ImageRewardLoader",
359 | "pos": [
360 | 130,
361 | 760
362 | ],
363 | "size": {
364 | "0": 210,
365 | "1": 60
366 | },
367 | "flags": {},
368 | "order": 1,
369 | "mode": 0,
370 | "outputs": [
371 | {
372 | "name": "IMAGEREWARD_MODEL",
373 | "type": "IMAGEREWARD_MODEL",
374 | "links": [
375 | 47,
376 | 90
377 | ],
378 | "shape": 3,
379 | "slot_index": 0
380 | }
381 | ],
382 | "properties": {
383 | "Node name for S&R": "ImageRewardLoader"
384 | },
385 | "widgets_values": [
386 | "ImageReward-v1.0"
387 | ]
388 | },
389 | {
390 | "id": 46,
391 | "type": "Text to Console",
392 | "pos": [
393 | 1150,
394 | 710
395 | ],
396 | "size": {
397 | "0": 210,
398 | "1": 60
399 | },
400 | "flags": {},
401 | "order": 27,
402 | "mode": 0,
403 | "inputs": [
404 | {
405 | "name": "text",
406 | "type": "STRING",
407 | "link": 66,
408 | "widget": {
409 | "name": "text"
410 | }
411 | }
412 | ],
413 | "outputs": [
414 | {
415 | "name": "STRING",
416 | "type": "STRING",
417 | "links": null,
418 | "shape": 3
419 | }
420 | ],
421 | "properties": {
422 | "Node name for S&R": "Text to Console"
423 | },
424 | "widgets_values": [
425 | "",
426 | "Score"
427 | ]
428 | },
429 | {
430 | "id": 60,
431 | "type": "Reroute",
432 | "pos": [
433 | 850,
434 | 690
435 | ],
436 | "size": [
437 | 82,
438 | 26
439 | ],
440 | "flags": {},
441 | "order": 24,
442 | "mode": 0,
443 | "inputs": [
444 | {
445 | "name": "",
446 | "type": "*",
447 | "link": 95,
448 | "pos": [
449 | 41,
450 | 0
451 | ]
452 | }
453 | ],
454 | "outputs": [
455 | {
456 | "name": "IMAGE",
457 | "type": "IMAGE",
458 | "links": [
459 | 96
460 | ],
461 | "slot_index": 0
462 | }
463 | ],
464 | "properties": {
465 | "showOutputText": true,
466 | "horizontal": true
467 | }
468 | },
469 | {
470 | "id": 51,
471 | "type": "Reroute",
472 | "pos": [
473 | -220,
474 | 450
475 | ],
476 | "size": [
477 | 90.4,
478 | 26
479 | ],
480 | "flags": {},
481 | "order": 14,
482 | "mode": 0,
483 | "inputs": [
484 | {
485 | "name": "",
486 | "type": "*",
487 | "link": 72,
488 | "pos": [
489 | 45.2,
490 | 0
491 | ],
492 | "widget": {
493 | "name": "value"
494 | }
495 | }
496 | ],
497 | "outputs": [
498 | {
499 | "name": "STRING",
500 | "type": "STRING",
501 | "links": [
502 | 79
503 | ],
504 | "slot_index": 0
505 | }
506 | ],
507 | "properties": {
508 | "showOutputText": true,
509 | "horizontal": true
510 | }
511 | },
512 | {
513 | "id": 4,
514 | "type": "CheckpointLoaderSimple",
515 | "pos": [
516 | 360,
517 | 80
518 | ],
519 | "size": {
520 | "0": 360,
521 | "1": 100
522 | },
523 | "flags": {},
524 | "order": 2,
525 | "mode": 0,
526 | "outputs": [
527 | {
528 | "name": "MODEL",
529 | "type": "MODEL",
530 | "links": [
531 | 28
532 | ],
533 | "slot_index": 0
534 | },
535 | {
536 | "name": "CLIP",
537 | "type": "CLIP",
538 | "links": [
539 | 3,
540 | 5
541 | ],
542 | "slot_index": 1
543 | },
544 | {
545 | "name": "VAE",
546 | "type": "VAE",
547 | "links": [
548 | 26
549 | ],
550 | "slot_index": 2
551 | }
552 | ],
553 | "properties": {
554 | "Node name for S&R": "CheckpointLoaderSimple"
555 | },
556 | "widgets_values": [
557 | "XL\\sd_xl_base_1.0.safetensors"
558 | ],
559 | "color": "#223",
560 | "bgcolor": "#335"
561 | },
562 | {
563 | "id": 26,
564 | "type": "Reroute",
565 | "pos": [
566 | 920,
567 | 80
568 | ],
569 | "size": [
570 | 82,
571 | 26
572 | ],
573 | "flags": {},
574 | "order": 8,
575 | "mode": 0,
576 | "inputs": [
577 | {
578 | "name": "",
579 | "type": "*",
580 | "link": 28
581 | }
582 | ],
583 | "outputs": [
584 | {
585 | "name": "MODEL",
586 | "type": "MODEL",
587 | "links": [
588 | 29
589 | ],
590 | "slot_index": 0
591 | }
592 | ],
593 | "properties": {
594 | "showOutputText": true,
595 | "horizontal": false
596 | }
597 | },
598 | {
599 | "id": 5,
600 | "type": "EmptyLatentImage",
601 | "pos": [
602 | 610,
603 | 460
604 | ],
605 | "size": {
606 | "0": 210,
607 | "1": 110
608 | },
609 | "flags": {},
610 | "order": 3,
611 | "mode": 0,
612 | "outputs": [
613 | {
614 | "name": "LATENT",
615 | "type": "LATENT",
616 | "links": [
617 | 38
618 | ],
619 | "slot_index": 0
620 | }
621 | ],
622 | "title": "Size",
623 | "properties": {
624 | "Node name for S&R": "EmptyLatentImage"
625 | },
626 | "widgets_values": [
627 | 1344,
628 | 768,
629 | 1
630 | ],
631 | "color": "#223",
632 | "bgcolor": "#335"
633 | },
634 | {
635 | "id": 45,
636 | "type": "EmptyImage",
637 | "pos": [
638 | -120,
639 | 900
640 | ],
641 | "size": {
642 | "0": 210,
643 | "1": 130
644 | },
645 | "flags": {},
646 | "order": 4,
647 | "mode": 0,
648 | "outputs": [
649 | {
650 | "name": "IMAGE",
651 | "type": "IMAGE",
652 | "links": [
653 | 100
654 | ],
655 | "shape": 3,
656 | "slot_index": 0
657 | }
658 | ],
659 | "properties": {
660 | "Node name for S&R": "EmptyImage"
661 | },
662 | "widgets_values": [
663 | 512,
664 | 512,
665 | 1,
666 | 0
667 | ]
668 | },
669 | {
670 | "id": 55,
671 | "type": "Reroute",
672 | "pos": [
673 | -120,
674 | 1040
675 | ],
676 | "size": [
677 | 90.4,
678 | 26
679 | ],
680 | "flags": {},
681 | "order": 16,
682 | "mode": 0,
683 | "inputs": [
684 | {
685 | "name": "",
686 | "type": "*",
687 | "link": 79,
688 | "widget": {
689 | "name": "value"
690 | }
691 | }
692 | ],
693 | "outputs": [
694 | {
695 | "name": "STRING",
696 | "type": "STRING",
697 | "links": [
698 | 80
699 | ],
700 | "slot_index": 0
701 | }
702 | ],
703 | "properties": {
704 | "showOutputText": true,
705 | "horizontal": false
706 | }
707 | },
708 | {
709 | "id": 56,
710 | "type": "Reroute",
711 | "pos": [
712 | 249.6,
713 | 1040
714 | ],
715 | "size": [
716 | 90.4,
717 | 26
718 | ],
719 | "flags": {},
720 | "order": 17,
721 | "mode": 0,
722 | "inputs": [
723 | {
724 | "name": "",
725 | "type": "*",
726 | "link": 80,
727 | "widget": {
728 | "name": "value"
729 | }
730 | }
731 | ],
732 | "outputs": [
733 | {
734 | "name": "STRING",
735 | "type": "STRING",
736 | "links": [
737 | 81,
738 | 92
739 | ],
740 | "slot_index": 0
741 | }
742 | ],
743 | "properties": {
744 | "showOutputText": true,
745 | "horizontal": false
746 | }
747 | },
748 | {
749 | "id": 64,
750 | "type": "CyclistCompare",
751 | "pos": [
752 | 610,
753 | 660
754 | ],
755 | "size": {
756 | "0": 210,
757 | "1": 80
758 | },
759 | "flags": {},
760 | "order": 19,
761 | "mode": 0,
762 | "inputs": [
763 | {
764 | "name": "thing1",
765 | "type": "*",
766 | "link": 103
767 | },
768 | {
769 | "name": "thing2",
770 | "type": "*",
771 | "link": 104
772 | }
773 | ],
774 | "outputs": [
775 | {
776 | "name": "BOOLEAN",
777 | "type": "BOOLEAN",
778 | "links": [
779 | 105
780 | ],
781 | "shape": 3,
782 | "slot_index": 0
783 | }
784 | ],
785 | "properties": {
786 | "Node name for S&R": "CyclistCompare"
787 | },
788 | "widgets_values": [
789 | "less than"
790 | ]
791 | },
792 | {
793 | "id": 34,
794 | "type": "ImageRewardScore",
795 | "pos": [
796 | 370,
797 | 830
798 | ],
799 | "size": {
800 | "0": 210,
801 | "1": 74
802 | },
803 | "flags": {},
804 | "order": 18,
805 | "mode": 0,
806 | "inputs": [
807 | {
808 | "name": "model",
809 | "type": "IMAGEREWARD_MODEL",
810 | "link": 47
811 | },
812 | {
813 | "name": "images",
814 | "type": "IMAGE",
815 | "link": 101
816 | },
817 | {
818 | "name": "prompt",
819 | "type": "STRING",
820 | "link": 81,
821 | "widget": {
822 | "name": "prompt"
823 | }
824 | }
825 | ],
826 | "outputs": [
827 | {
828 | "name": "SCORE_FLOAT",
829 | "type": "FLOAT",
830 | "links": [
831 | 104,
832 | 108
833 | ],
834 | "shape": 3,
835 | "slot_index": 0
836 | },
837 | {
838 | "name": "SCORE_STRING",
839 | "type": "STRING",
840 | "links": [],
841 | "shape": 3,
842 | "slot_index": 1
843 | }
844 | ],
845 | "properties": {
846 | "Node name for S&R": "ImageRewardScore"
847 | },
848 | "widgets_values": [
849 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
850 | ]
851 | },
852 | {
853 | "id": 63,
854 | "type": "CyclistMathFloat",
855 | "pos": [
856 | 370,
857 | 660
858 | ],
859 | "size": {
860 | "0": 210,
861 | "1": 110
862 | },
863 | "flags": {},
864 | "order": 5,
865 | "mode": 0,
866 | "outputs": [
867 | {
868 | "name": "FLOAT",
869 | "type": "FLOAT",
870 | "links": [
871 | 103
872 | ],
873 | "shape": 3,
874 | "slot_index": 0
875 | }
876 | ],
877 | "title": "Target Score",
878 | "properties": {
879 | "Node name for S&R": "CyclistMathFloat"
880 | },
881 | "widgets_values": [
882 | "addition",
883 | 0.7,
884 | 0
885 | ],
886 | "color": "#232",
887 | "bgcolor": "#353"
888 | },
889 | {
890 | "id": 65,
891 | "type": "CyclistCompare",
892 | "pos": [
893 | 1150,
894 | 810
895 | ],
896 | "size": {
897 | "0": 210,
898 | "1": 80
899 | },
900 | "flags": {},
901 | "order": 26,
902 | "mode": 0,
903 | "inputs": [
904 | {
905 | "name": "thing1",
906 | "type": "*",
907 | "link": 107
908 | },
909 | {
910 | "name": "thing2",
911 | "type": "*",
912 | "link": 108
913 | }
914 | ],
915 | "outputs": [
916 | {
917 | "name": "BOOLEAN",
918 | "type": "BOOLEAN",
919 | "links": [
920 | 114
921 | ],
922 | "shape": 3,
923 | "slot_index": 0
924 | }
925 | ],
926 | "properties": {
927 | "Node name for S&R": "CyclistCompare"
928 | },
929 | "widgets_values": [
930 | "greater than"
931 | ]
932 | },
933 | {
934 | "id": 59,
935 | "type": "Reroute",
936 | "pos": [
937 | 1460,
938 | 520
939 | ],
940 | "size": [
941 | 82,
942 | 26
943 | ],
944 | "flags": {},
945 | "order": 23,
946 | "mode": 0,
947 | "inputs": [
948 | {
949 | "name": "",
950 | "type": "*",
951 | "link": 86,
952 | "pos": [
953 | 41,
954 | 0
955 | ]
956 | }
957 | ],
958 | "outputs": [
959 | {
960 | "name": "IMAGE",
961 | "type": "IMAGE",
962 | "links": [
963 | 95,
964 | 115
965 | ],
966 | "slot_index": 0
967 | }
968 | ],
969 | "properties": {
970 | "showOutputText": true,
971 | "horizontal": true
972 | }
973 | },
974 | {
975 | "id": 62,
976 | "type": "ReloadImage",
977 | "pos": [
978 | 130,
979 | 900
980 | ],
981 | "size": [
982 | 210,
983 | 50
984 | ],
985 | "flags": {},
986 | "order": 12,
987 | "mode": 0,
988 | "inputs": [
989 | {
990 | "name": "fallback",
991 | "type": "IMAGE",
992 | "link": 100
993 | },
994 | {
995 | "name": "filename",
996 | "type": "STRING",
997 | "link": 117,
998 | "widget": {
999 | "name": "filename"
1000 | }
1001 | }
1002 | ],
1003 | "outputs": [
1004 | {
1005 | "name": "IMAGE",
1006 | "type": "IMAGE",
1007 | "links": [
1008 | 101,
1009 | 113
1010 | ],
1011 | "shape": 3,
1012 | "slot_index": 0
1013 | }
1014 | ],
1015 | "properties": {
1016 | "Node name for S&R": "ReloadImage"
1017 | },
1018 | "widgets_values": [
1019 | "AestheticArt_1"
1020 | ]
1021 | },
1022 | {
1023 | "id": 15,
1024 | "type": "ImageRewardScore",
1025 | "pos": [
1026 | 910,
1027 | 760
1028 | ],
1029 | "size": {
1030 | "0": 210,
1031 | "1": 74
1032 | },
1033 | "flags": {},
1034 | "order": 25,
1035 | "mode": 0,
1036 | "inputs": [
1037 | {
1038 | "name": "model",
1039 | "type": "IMAGEREWARD_MODEL",
1040 | "link": 90
1041 | },
1042 | {
1043 | "name": "images",
1044 | "type": "IMAGE",
1045 | "link": 96
1046 | },
1047 | {
1048 | "name": "prompt",
1049 | "type": "STRING",
1050 | "link": 92,
1051 | "widget": {
1052 | "name": "prompt"
1053 | }
1054 | }
1055 | ],
1056 | "outputs": [
1057 | {
1058 | "name": "SCORE_FLOAT",
1059 | "type": "FLOAT",
1060 | "links": [
1061 | 107
1062 | ],
1063 | "shape": 3,
1064 | "slot_index": 0
1065 | },
1066 | {
1067 | "name": "SCORE_STRING",
1068 | "type": "STRING",
1069 | "links": [
1070 | 66
1071 | ],
1072 | "shape": 3,
1073 | "slot_index": 1
1074 | }
1075 | ],
1076 | "properties": {
1077 | "Node name for S&R": "ImageRewardScore"
1078 | },
1079 | "widgets_values": [
1080 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
1081 | ]
1082 | },
1083 | {
1084 | "id": 68,
1085 | "type": "Image Input Switch",
1086 | "pos": [
1087 | 1390,
1088 | 880
1089 | ],
1090 | "size": [
1091 | 210,
1092 | 70
1093 | ],
1094 | "flags": {},
1095 | "order": 28,
1096 | "mode": 0,
1097 | "inputs": [
1098 | {
1099 | "name": "image_a",
1100 | "type": "IMAGE",
1101 | "link": 115
1102 | },
1103 | {
1104 | "name": "image_b",
1105 | "type": "IMAGE",
1106 | "link": 113
1107 | },
1108 | {
1109 | "name": "boolean",
1110 | "type": "BOOLEAN",
1111 | "link": 114,
1112 | "widget": {
1113 | "name": "boolean"
1114 | }
1115 | }
1116 | ],
1117 | "outputs": [
1118 | {
1119 | "name": "IMAGE",
1120 | "type": "IMAGE",
1121 | "links": [
1122 | 116
1123 | ],
1124 | "shape": 3,
1125 | "slot_index": 0
1126 | }
1127 | ],
1128 | "properties": {
1129 | "Node name for S&R": "Image Input Switch"
1130 | },
1131 | "widgets_values": [
1132 | false
1133 | ]
1134 | },
1135 | {
1136 | "id": 70,
1137 | "type": "Reroute",
1138 | "pos": [
1139 | 130,
1140 | 960
1141 | ],
1142 | "size": [
1143 | 90.4,
1144 | 26
1145 | ],
1146 | "flags": {},
1147 | "order": 13,
1148 | "mode": 0,
1149 | "inputs": [
1150 | {
1151 | "name": "",
1152 | "type": "*",
1153 | "link": 118,
1154 | "widget": {
1155 | "name": "value"
1156 | }
1157 | }
1158 | ],
1159 | "outputs": [
1160 | {
1161 | "name": "STRING",
1162 | "type": "STRING",
1163 | "links": [
1164 | 120
1165 | ],
1166 | "slot_index": 0
1167 | }
1168 | ],
1169 | "properties": {
1170 | "showOutputText": true,
1171 | "horizontal": false
1172 | }
1173 | },
1174 | {
1175 | "id": 69,
1176 | "type": "LoopManager",
1177 | "pos": [
1178 | -120,
1179 | 660
1180 | ],
1181 | "size": [
1182 | 220,
1183 | 200
1184 | ],
1185 | "flags": {},
1186 | "order": 6,
1187 | "mode": 0,
1188 | "outputs": [
1189 | {
1190 | "name": "STRING",
1191 | "type": "STRING",
1192 | "links": [
1193 | 117,
1194 | 118
1195 | ],
1196 | "shape": 3,
1197 | "slot_index": 0
1198 | }
1199 | ],
1200 | "properties": {
1201 | "Node name for S&R": "LoopManager"
1202 | },
1203 | "widgets_values": [
1204 | "AestheticArt_2",
1205 | "by_interrupt_node",
1206 | "AestheticArt_1:\n(#7)IMAGE: AestheticArt_1.png"
1207 | ],
1208 | "color": "#232",
1209 | "bgcolor": "#353"
1210 | },
1211 | {
1212 | "id": 71,
1213 | "type": "Reroute",
1214 | "pos": [
1215 | 1500,
1216 | 960
1217 | ],
1218 | "size": [
1219 | 90.4,
1220 | 26
1221 | ],
1222 | "flags": {},
1223 | "order": 15,
1224 | "mode": 0,
1225 | "inputs": [
1226 | {
1227 | "name": "",
1228 | "type": "*",
1229 | "link": 120,
1230 | "widget": {
1231 | "name": "value"
1232 | }
1233 | }
1234 | ],
1235 | "outputs": [
1236 | {
1237 | "name": "STRING",
1238 | "type": "STRING",
1239 | "links": [
1240 | 121
1241 | ],
1242 | "slot_index": 0
1243 | }
1244 | ],
1245 | "properties": {
1246 | "showOutputText": true,
1247 | "horizontal": false
1248 | }
1249 | },
1250 | {
1251 | "id": 67,
1252 | "type": "OverrideImage",
1253 | "pos": [
1254 | 1640,
1255 | 670
1256 | ],
1257 | "size": [
1258 | 630,
1259 | 400
1260 | ],
1261 | "flags": {},
1262 | "order": 29,
1263 | "mode": 0,
1264 | "inputs": [
1265 | {
1266 | "name": "image",
1267 | "type": "IMAGE",
1268 | "link": 116
1269 | },
1270 | {
1271 | "name": "filename",
1272 | "type": "STRING",
1273 | "link": 121,
1274 | "widget": {
1275 | "name": "filename"
1276 | }
1277 | }
1278 | ],
1279 | "properties": {
1280 | "Node name for S&R": "OverrideImage"
1281 | },
1282 | "widgets_values": [
1283 | "AestheticArt_1"
1284 | ]
1285 | }
1286 | ],
1287 | "links": [
1288 | [
1289 | 3,
1290 | 4,
1291 | 1,
1292 | 6,
1293 | 0,
1294 | "CLIP"
1295 | ],
1296 | [
1297 | 4,
1298 | 6,
1299 | 0,
1300 | 3,
1301 | 1,
1302 | "CONDITIONING"
1303 | ],
1304 | [
1305 | 5,
1306 | 4,
1307 | 1,
1308 | 7,
1309 | 0,
1310 | "CLIP"
1311 | ],
1312 | [
1313 | 6,
1314 | 7,
1315 | 0,
1316 | 3,
1317 | 2,
1318 | "CONDITIONING"
1319 | ],
1320 | [
1321 | 7,
1322 | 3,
1323 | 0,
1324 | 8,
1325 | 0,
1326 | "LATENT"
1327 | ],
1328 | [
1329 | 26,
1330 | 4,
1331 | 2,
1332 | 25,
1333 | 0,
1334 | "*"
1335 | ],
1336 | [
1337 | 27,
1338 | 25,
1339 | 0,
1340 | 8,
1341 | 1,
1342 | "VAE"
1343 | ],
1344 | [
1345 | 28,
1346 | 4,
1347 | 0,
1348 | 26,
1349 | 0,
1350 | "*"
1351 | ],
1352 | [
1353 | 29,
1354 | 26,
1355 | 0,
1356 | 3,
1357 | 0,
1358 | "MODEL"
1359 | ],
1360 | [
1361 | 38,
1362 | 5,
1363 | 0,
1364 | 29,
1365 | 0,
1366 | "*"
1367 | ],
1368 | [
1369 | 39,
1370 | 29,
1371 | 0,
1372 | 3,
1373 | 3,
1374 | "LATENT"
1375 | ],
1376 | [
1377 | 47,
1378 | 13,
1379 | 0,
1380 | 34,
1381 | 0,
1382 | "IMAGEREWARD_MODEL"
1383 | ],
1384 | [
1385 | 66,
1386 | 15,
1387 | 1,
1388 | 46,
1389 | 0,
1390 | "STRING"
1391 | ],
1392 | [
1393 | 71,
1394 | 50,
1395 | 0,
1396 | 30,
1397 | 0,
1398 | "*"
1399 | ],
1400 | [
1401 | 72,
1402 | 30,
1403 | 0,
1404 | 51,
1405 | 0,
1406 | "*"
1407 | ],
1408 | [
1409 | 73,
1410 | 50,
1411 | 0,
1412 | 6,
1413 | 1,
1414 | "STRING"
1415 | ],
1416 | [
1417 | 79,
1418 | 51,
1419 | 0,
1420 | 55,
1421 | 0,
1422 | "*"
1423 | ],
1424 | [
1425 | 80,
1426 | 55,
1427 | 0,
1428 | 56,
1429 | 0,
1430 | "*"
1431 | ],
1432 | [
1433 | 81,
1434 | 56,
1435 | 0,
1436 | 34,
1437 | 2,
1438 | "STRING"
1439 | ],
1440 | [
1441 | 86,
1442 | 8,
1443 | 0,
1444 | 59,
1445 | 0,
1446 | "*"
1447 | ],
1448 | [
1449 | 90,
1450 | 13,
1451 | 0,
1452 | 15,
1453 | 0,
1454 | "IMAGEREWARD_MODEL"
1455 | ],
1456 | [
1457 | 92,
1458 | 56,
1459 | 0,
1460 | 15,
1461 | 2,
1462 | "STRING"
1463 | ],
1464 | [
1465 | 95,
1466 | 59,
1467 | 0,
1468 | 60,
1469 | 0,
1470 | "*"
1471 | ],
1472 | [
1473 | 96,
1474 | 60,
1475 | 0,
1476 | 15,
1477 | 1,
1478 | "IMAGE"
1479 | ],
1480 | [
1481 | 100,
1482 | 45,
1483 | 0,
1484 | 62,
1485 | 0,
1486 | "IMAGE"
1487 | ],
1488 | [
1489 | 101,
1490 | 62,
1491 | 0,
1492 | 34,
1493 | 1,
1494 | "IMAGE"
1495 | ],
1496 | [
1497 | 103,
1498 | 63,
1499 | 0,
1500 | 64,
1501 | 0,
1502 | "*"
1503 | ],
1504 | [
1505 | 104,
1506 | 34,
1507 | 0,
1508 | 64,
1509 | 1,
1510 | "*"
1511 | ],
1512 | [
1513 | 105,
1514 | 64,
1515 | 0,
1516 | 29,
1517 | 1,
1518 | "BOOLEAN"
1519 | ],
1520 | [
1521 | 107,
1522 | 15,
1523 | 0,
1524 | 65,
1525 | 0,
1526 | "*"
1527 | ],
1528 | [
1529 | 108,
1530 | 34,
1531 | 0,
1532 | 65,
1533 | 1,
1534 | "*"
1535 | ],
1536 | [
1537 | 113,
1538 | 62,
1539 | 0,
1540 | 68,
1541 | 1,
1542 | "IMAGE"
1543 | ],
1544 | [
1545 | 114,
1546 | 65,
1547 | 0,
1548 | 68,
1549 | 2,
1550 | "BOOLEAN"
1551 | ],
1552 | [
1553 | 115,
1554 | 59,
1555 | 0,
1556 | 68,
1557 | 0,
1558 | "IMAGE"
1559 | ],
1560 | [
1561 | 116,
1562 | 68,
1563 | 0,
1564 | 67,
1565 | 0,
1566 | "IMAGE"
1567 | ],
1568 | [
1569 | 117,
1570 | 69,
1571 | 0,
1572 | 62,
1573 | 1,
1574 | "STRING"
1575 | ],
1576 | [
1577 | 118,
1578 | 69,
1579 | 0,
1580 | 70,
1581 | 0,
1582 | "*"
1583 | ],
1584 | [
1585 | 120,
1586 | 70,
1587 | 0,
1588 | 71,
1589 | 0,
1590 | "*"
1591 | ],
1592 | [
1593 | 121,
1594 | 71,
1595 | 0,
1596 | 67,
1597 | 1,
1598 | "STRING"
1599 | ]
1600 | ],
1601 | "groups": [
1602 | {
1603 | "title": "Is result already good enough to stop?",
1604 | "bounding": [
1605 | -130,
1606 | 586,
1607 | 960,
1608 | 490
1609 | ],
1610 | "color": "#3f789e",
1611 | "font_size": 24,
1612 | "locked": false
1613 | },
1614 | {
1615 | "title": "Generate",
1616 | "bounding": [
1617 | 350,
1618 | 6,
1619 | 1212,
1620 | 574
1621 | ],
1622 | "color": "#3f789e",
1623 | "font_size": 24,
1624 | "locked": false
1625 | },
1626 | {
1627 | "title": "Is the new picture better than old?",
1628 | "bounding": [
1629 | 840,
1630 | 636,
1631 | 770,
1632 | 360
1633 | ],
1634 | "color": "#3f789e",
1635 | "font_size": 24,
1636 | "locked": false
1637 | }
1638 | ],
1639 | "config": {},
1640 | "extra": {},
1641 | "version": 0.4
1642 | }
--------------------------------------------------------------------------------
/workflows/GenUntilGood.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/GenUntilGood.png
--------------------------------------------------------------------------------
/workflows/GenUntilGoodNoWAS.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 52,
3 | "last_link_id": 63,
4 | "nodes": [
5 | {
6 | "id": 3,
7 | "type": "KSampler",
8 | "pos": [
9 | 1030,
10 | 190
11 | ],
12 | "size": {
13 | "0": 280,
14 | "1": 262
15 | },
16 | "flags": {},
17 | "order": 16,
18 | "mode": 0,
19 | "inputs": [
20 | {
21 | "name": "model",
22 | "type": "MODEL",
23 | "link": 29
24 | },
25 | {
26 | "name": "positive",
27 | "type": "CONDITIONING",
28 | "link": 4
29 | },
30 | {
31 | "name": "negative",
32 | "type": "CONDITIONING",
33 | "link": 6
34 | },
35 | {
36 | "name": "latent_image",
37 | "type": "LATENT",
38 | "link": 39
39 | }
40 | ],
41 | "outputs": [
42 | {
43 | "name": "LATENT",
44 | "type": "LATENT",
45 | "links": [
46 | 7
47 | ],
48 | "slot_index": 0
49 | }
50 | ],
51 | "properties": {
52 | "Node name for S&R": "KSampler"
53 | },
54 | "widgets_values": [
55 | 893654773718923,
56 | "randomize",
57 | 26,
58 | 7,
59 | "dpmpp_3m_sde_gpu",
60 | "karras",
61 | 1
62 | ]
63 | },
64 | {
65 | "id": 6,
66 | "type": "CLIPTextEncode",
67 | "pos": [
68 | 790,
69 | 190
70 | ],
71 | "size": {
72 | "0": 210,
73 | "1": 54
74 | },
75 | "flags": {},
76 | "order": 9,
77 | "mode": 0,
78 | "inputs": [
79 | {
80 | "name": "clip",
81 | "type": "CLIP",
82 | "link": 3
83 | },
84 | {
85 | "name": "text",
86 | "type": "STRING",
87 | "link": 37,
88 | "widget": {
89 | "name": "text"
90 | }
91 | }
92 | ],
93 | "outputs": [
94 | {
95 | "name": "CONDITIONING",
96 | "type": "CONDITIONING",
97 | "links": [
98 | 4
99 | ],
100 | "slot_index": 0
101 | }
102 | ],
103 | "title": "Positive",
104 | "properties": {
105 | "Node name for S&R": "CLIPTextEncode"
106 | },
107 | "widgets_values": [
108 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
109 | ]
110 | },
111 | {
112 | "id": 7,
113 | "type": "CLIPTextEncode",
114 | "pos": [
115 | 790,
116 | 280
117 | ],
118 | "size": {
119 | "0": 210,
120 | "1": 76
121 | },
122 | "flags": {},
123 | "order": 10,
124 | "mode": 0,
125 | "inputs": [
126 | {
127 | "name": "clip",
128 | "type": "CLIP",
129 | "link": 5
130 | }
131 | ],
132 | "outputs": [
133 | {
134 | "name": "CONDITIONING",
135 | "type": "CONDITIONING",
136 | "links": [
137 | 6
138 | ],
139 | "slot_index": 0
140 | }
141 | ],
142 | "title": "Negative",
143 | "properties": {
144 | "Node name for S&R": "CLIPTextEncode"
145 | },
146 | "widgets_values": [
147 | "blurry"
148 | ],
149 | "color": "#232",
150 | "bgcolor": "#353"
151 | },
152 | {
153 | "id": 29,
154 | "type": "Interrupt",
155 | "pos": [
156 | 850,
157 | 400
158 | ],
159 | "size": [
160 | 150,
161 | 60
162 | ],
163 | "flags": {},
164 | "order": 15,
165 | "mode": 0,
166 | "inputs": [
167 | {
168 | "name": "any_in",
169 | "type": "*",
170 | "link": 38,
171 | "color_on": ""
172 | },
173 | {
174 | "name": "stop",
175 | "type": "BOOLEAN",
176 | "link": 57,
177 | "widget": {
178 | "name": "stop"
179 | }
180 | }
181 | ],
182 | "outputs": [
183 | {
184 | "name": "LATENT",
185 | "type": "LATENT",
186 | "links": [
187 | 39
188 | ],
189 | "shape": 3,
190 | "slot_index": 0,
191 | "color_on": "#FF9CF9"
192 | }
193 | ],
194 | "properties": {
195 | "Node name for S&R": "Interrupt"
196 | },
197 | "widgets_values": [
198 | false
199 | ]
200 | },
201 | {
202 | "id": 5,
203 | "type": "EmptyLatentImage",
204 | "pos": [
205 | 340,
206 | 400
207 | ],
208 | "size": {
209 | "0": 210,
210 | "1": 110
211 | },
212 | "flags": {},
213 | "order": 0,
214 | "mode": 0,
215 | "outputs": [
216 | {
217 | "name": "LATENT",
218 | "type": "LATENT",
219 | "links": [
220 | 38
221 | ],
222 | "slot_index": 0
223 | }
224 | ],
225 | "title": "Size",
226 | "properties": {
227 | "Node name for S&R": "EmptyLatentImage"
228 | },
229 | "widgets_values": [
230 | 1344,
231 | 768,
232 | 1
233 | ],
234 | "color": "#223",
235 | "bgcolor": "#335"
236 | },
237 | {
238 | "id": 26,
239 | "type": "Reroute",
240 | "pos": [
241 | 920,
242 | 60
243 | ],
244 | "size": [
245 | 82,
246 | 26
247 | ],
248 | "flags": {},
249 | "order": 8,
250 | "mode": 0,
251 | "inputs": [
252 | {
253 | "name": "",
254 | "type": "*",
255 | "link": 28
256 | }
257 | ],
258 | "outputs": [
259 | {
260 | "name": "MODEL",
261 | "type": "MODEL",
262 | "links": [
263 | 29
264 | ],
265 | "slot_index": 0
266 | }
267 | ],
268 | "properties": {
269 | "showOutputText": true,
270 | "horizontal": false
271 | }
272 | },
273 | {
274 | "id": 25,
275 | "type": "Reroute",
276 | "pos": [
277 | 1240,
278 | 100
279 | ],
280 | "size": [
281 | 75,
282 | 26
283 | ],
284 | "flags": {},
285 | "order": 11,
286 | "mode": 0,
287 | "inputs": [
288 | {
289 | "name": "",
290 | "type": "*",
291 | "link": 26
292 | }
293 | ],
294 | "outputs": [
295 | {
296 | "name": "VAE",
297 | "type": "VAE",
298 | "links": [
299 | 27
300 | ],
301 | "slot_index": 0
302 | }
303 | ],
304 | "properties": {
305 | "showOutputText": true,
306 | "horizontal": false
307 | }
308 | },
309 | {
310 | "id": 16,
311 | "type": "PrimitiveNode",
312 | "pos": [
313 | 340,
314 | 210
315 | ],
316 | "size": {
317 | "0": 380,
318 | "1": 140
319 | },
320 | "flags": {},
321 | "order": 1,
322 | "mode": 0,
323 | "outputs": [
324 | {
325 | "name": "STRING",
326 | "type": "STRING",
327 | "links": [
328 | 37,
329 | 42
330 | ],
331 | "slot_index": 0,
332 | "widget": {
333 | "name": "text"
334 | }
335 | }
336 | ],
337 | "title": "Positive",
338 | "properties": {
339 | "Run widget replace on values": false
340 | },
341 | "widgets_values": [
342 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
343 | ],
344 | "color": "#232",
345 | "bgcolor": "#353"
346 | },
347 | {
348 | "id": 4,
349 | "type": "CheckpointLoaderSimple",
350 | "pos": [
351 | 340,
352 | 60
353 | ],
354 | "size": {
355 | "0": 380,
356 | "1": 100
357 | },
358 | "flags": {},
359 | "order": 2,
360 | "mode": 0,
361 | "outputs": [
362 | {
363 | "name": "MODEL",
364 | "type": "MODEL",
365 | "links": [
366 | 28
367 | ],
368 | "slot_index": 0
369 | },
370 | {
371 | "name": "CLIP",
372 | "type": "CLIP",
373 | "links": [
374 | 3,
375 | 5
376 | ],
377 | "slot_index": 1
378 | },
379 | {
380 | "name": "VAE",
381 | "type": "VAE",
382 | "links": [
383 | 26
384 | ],
385 | "slot_index": 2
386 | }
387 | ],
388 | "properties": {
389 | "Node name for S&R": "CheckpointLoaderSimple"
390 | },
391 | "widgets_values": [
392 | "XL\\sd_xl_base_1.0.safetensors"
393 | ],
394 | "color": "#223",
395 | "bgcolor": "#335"
396 | },
397 | {
398 | "id": 8,
399 | "type": "VAEDecode",
400 | "pos": [
401 | 1340,
402 | 190
403 | ],
404 | "size": {
405 | "0": 140,
406 | "1": 50
407 | },
408 | "flags": {},
409 | "order": 17,
410 | "mode": 0,
411 | "inputs": [
412 | {
413 | "name": "samples",
414 | "type": "LATENT",
415 | "link": 7
416 | },
417 | {
418 | "name": "vae",
419 | "type": "VAE",
420 | "link": 27
421 | }
422 | ],
423 | "outputs": [
424 | {
425 | "name": "IMAGE",
426 | "type": "IMAGE",
427 | "links": [
428 | 45,
429 | 56
430 | ],
431 | "slot_index": 0
432 | }
433 | ],
434 | "properties": {
435 | "Node name for S&R": "VAEDecode"
436 | }
437 | },
438 | {
439 | "id": 45,
440 | "type": "CyclistMathFloat",
441 | "pos": [
442 | 340,
443 | 560
444 | ],
445 | "size": {
446 | "0": 210,
447 | "1": 110
448 | },
449 | "flags": {},
450 | "order": 3,
451 | "mode": 0,
452 | "outputs": [
453 | {
454 | "name": "FLOAT",
455 | "type": "FLOAT",
456 | "links": [
457 | 54
458 | ],
459 | "shape": 3,
460 | "slot_index": 0
461 | }
462 | ],
463 | "title": "Target Score",
464 | "properties": {
465 | "Node name for S&R": "CyclistMathFloat"
466 | },
467 | "widgets_values": [
468 | "addition",
469 | 0.5,
470 | 0
471 | ],
472 | "color": "#232",
473 | "bgcolor": "#353"
474 | },
475 | {
476 | "id": 46,
477 | "type": "CyclistCompare",
478 | "pos": [
479 | 580,
480 | 560
481 | ],
482 | "size": {
483 | "0": 210,
484 | "1": 80
485 | },
486 | "flags": {},
487 | "order": 14,
488 | "mode": 0,
489 | "inputs": [
490 | {
491 | "name": "thing1",
492 | "type": "*",
493 | "link": 54
494 | },
495 | {
496 | "name": "thing2",
497 | "type": "*",
498 | "link": 58
499 | }
500 | ],
501 | "outputs": [
502 | {
503 | "name": "BOOLEAN",
504 | "type": "BOOLEAN",
505 | "links": [
506 | 57
507 | ],
508 | "shape": 3,
509 | "slot_index": 0
510 | }
511 | ],
512 | "properties": {
513 | "Node name for S&R": "CyclistCompare"
514 | },
515 | "widgets_values": [
516 | "less than"
517 | ]
518 | },
519 | {
520 | "id": 48,
521 | "type": "RecallFloat",
522 | "pos": [
523 | 340,
524 | 720
525 | ],
526 | "size": [
527 | 210,
528 | 60
529 | ],
530 | "flags": {},
531 | "order": 12,
532 | "mode": 0,
533 | "inputs": [
534 | {
535 | "name": "loop_id",
536 | "type": "STRING",
537 | "link": 61,
538 | "widget": {
539 | "name": "loop_id"
540 | }
541 | }
542 | ],
543 | "outputs": [
544 | {
545 | "name": "FLOAT",
546 | "type": "FLOAT",
547 | "links": [
548 | 58
549 | ],
550 | "shape": 3,
551 | "slot_index": 0
552 | }
553 | ],
554 | "properties": {
555 | "Node name for S&R": "RecallFloat"
556 | },
557 | "widgets_values": [
558 | "Score_1",
559 | -7
560 | ]
561 | },
562 | {
563 | "id": 47,
564 | "type": "OverrideImage",
565 | "pos": [
566 | 1590,
567 | 190
568 | ],
569 | "size": [
570 | 320,
571 | 270
572 | ],
573 | "flags": {},
574 | "order": 19,
575 | "mode": 0,
576 | "inputs": [
577 | {
578 | "name": "image",
579 | "type": "IMAGE",
580 | "link": 56
581 | },
582 | {
583 | "name": "filename",
584 | "type": "STRING",
585 | "link": 60,
586 | "widget": {
587 | "name": "filename"
588 | }
589 | }
590 | ],
591 | "properties": {
592 | "Node name for S&R": "OverrideImage"
593 | },
594 | "widgets_values": [
595 | "AestheticArt_1"
596 | ]
597 | },
598 | {
599 | "id": 50,
600 | "type": "LoopManager",
601 | "pos": [
602 | 90,
603 | 780
604 | ],
605 | "size": [
606 | 220,
607 | 120
608 | ],
609 | "flags": {},
610 | "order": 4,
611 | "mode": 0,
612 | "outputs": [
613 | {
614 | "name": "STRING",
615 | "type": "STRING",
616 | "links": [
617 | 61,
618 | 62
619 | ],
620 | "shape": 3,
621 | "slot_index": 0
622 | }
623 | ],
624 | "properties": {
625 | "Node name for S&R": "LoopManager"
626 | },
627 | "widgets_values": [
628 | "Score_2",
629 | "by_interrupt_node",
630 | "Score_1:\n(#4)FLOAT: 0.9399489164352417\n\nAestheticArt_1:\n(#11)IMAGE: AestheticArt_1.png"
631 | ]
632 | },
633 | {
634 | "id": 30,
635 | "type": "Reroute",
636 | "pos": [
637 | 850,
638 | 590
639 | ],
640 | "size": [
641 | 90.4,
642 | 26
643 | ],
644 | "flags": {},
645 | "order": 7,
646 | "mode": 0,
647 | "inputs": [
648 | {
649 | "name": "",
650 | "type": "*",
651 | "link": 42,
652 | "widget": {
653 | "name": "value"
654 | }
655 | }
656 | ],
657 | "outputs": [
658 | {
659 | "name": "STRING",
660 | "type": "STRING",
661 | "links": [
662 | 41
663 | ],
664 | "slot_index": 0
665 | }
666 | ],
667 | "properties": {
668 | "showOutputText": true,
669 | "horizontal": false
670 | }
671 | },
672 | {
673 | "id": 13,
674 | "type": "ImageRewardLoader",
675 | "pos": [
676 | 1100,
677 | 530
678 | ],
679 | "size": {
680 | "0": 210,
681 | "1": 60
682 | },
683 | "flags": {},
684 | "order": 5,
685 | "mode": 0,
686 | "outputs": [
687 | {
688 | "name": "IMAGEREWARD_MODEL",
689 | "type": "IMAGEREWARD_MODEL",
690 | "links": [
691 | 10
692 | ],
693 | "shape": 3,
694 | "slot_index": 0
695 | }
696 | ],
697 | "properties": {
698 | "Node name for S&R": "ImageRewardLoader"
699 | },
700 | "widgets_values": [
701 | "ImageReward-v1.0"
702 | ]
703 | },
704 | {
705 | "id": 49,
706 | "type": "MemorizeFloat",
707 | "pos": [
708 | 1590,
709 | 550
710 | ],
711 | "size": [
712 | 210,
713 | 50
714 | ],
715 | "flags": {},
716 | "order": 20,
717 | "mode": 0,
718 | "inputs": [
719 | {
720 | "name": "to_memory",
721 | "type": "FLOAT",
722 | "link": 59,
723 | "widget": {
724 | "name": "to_memory"
725 | }
726 | },
727 | {
728 | "name": "loop_id",
729 | "type": "STRING",
730 | "link": 63,
731 | "widget": {
732 | "name": "loop_id"
733 | }
734 | }
735 | ],
736 | "properties": {
737 | "Node name for S&R": "MemorizeFloat"
738 | },
739 | "widgets_values": [
740 | "Score_1",
741 | 0
742 | ]
743 | },
744 | {
745 | "id": 15,
746 | "type": "ImageRewardScore",
747 | "pos": [
748 | 1340,
749 | 550
750 | ],
751 | "size": [
752 | 220,
753 | 70
754 | ],
755 | "flags": {},
756 | "order": 18,
757 | "mode": 0,
758 | "inputs": [
759 | {
760 | "name": "model",
761 | "type": "IMAGEREWARD_MODEL",
762 | "link": 10
763 | },
764 | {
765 | "name": "images",
766 | "type": "IMAGE",
767 | "link": 45
768 | },
769 | {
770 | "name": "prompt",
771 | "type": "STRING",
772 | "link": 41,
773 | "widget": {
774 | "name": "prompt"
775 | }
776 | }
777 | ],
778 | "outputs": [
779 | {
780 | "name": "SCORE_FLOAT",
781 | "type": "FLOAT",
782 | "links": [
783 | 59
784 | ],
785 | "shape": 3,
786 | "slot_index": 0
787 | },
788 | {
789 | "name": "SCORE_STRING",
790 | "type": "STRING",
791 | "links": [],
792 | "shape": 3,
793 | "slot_index": 1
794 | }
795 | ],
796 | "properties": {
797 | "Node name for S&R": "ImageRewardScore"
798 | },
799 | "widgets_values": [
800 | "abstract concept art of a woman vaulting over a block wearing helmet, dynamic pose ,TRON aesthetic, canvas, exotic design, polygons, electric sparks, illustration masterpiece, 8K wallpaper, art by Benedick Bana, Jarek Kubicki, Paul Catherall"
801 | ]
802 | },
803 | {
804 | "id": 52,
805 | "type": "Reroute",
806 | "pos": [
807 | 1460,
808 | 780
809 | ],
810 | "size": [
811 | 90.4,
812 | 26
813 | ],
814 | "flags": {},
815 | "order": 13,
816 | "mode": 0,
817 | "inputs": [
818 | {
819 | "name": "",
820 | "type": "*",
821 | "link": 62,
822 | "widget": {
823 | "name": "value"
824 | }
825 | }
826 | ],
827 | "outputs": [
828 | {
829 | "name": "STRING",
830 | "type": "STRING",
831 | "links": [
832 | 63
833 | ],
834 | "slot_index": 0
835 | }
836 | ],
837 | "properties": {
838 | "showOutputText": true,
839 | "horizontal": false
840 | }
841 | },
842 | {
843 | "id": 51,
844 | "type": "LoopManager",
845 | "pos": [
846 | 1340,
847 | 290
848 | ],
849 | "size": [
850 | 220,
851 | 200
852 | ],
853 | "flags": {},
854 | "order": 6,
855 | "mode": 0,
856 | "outputs": [
857 | {
858 | "name": "STRING",
859 | "type": "STRING",
860 | "links": [
861 | 60
862 | ],
863 | "shape": 3,
864 | "slot_index": 0
865 | }
866 | ],
867 | "title": "Loop Manager (filename)",
868 | "properties": {
869 | "Node name for S&R": "LoopManager"
870 | },
871 | "widgets_values": [
872 | "AestheticArt_2",
873 | "by_interrupt_node",
874 | "Score_1:\n(#4)FLOAT: 0.9399489164352417\n\nAestheticArt_1:\n(#11)IMAGE: AestheticArt_1.png"
875 | ],
876 | "color": "#232",
877 | "bgcolor": "#353"
878 | }
879 | ],
880 | "links": [
881 | [
882 | 3,
883 | 4,
884 | 1,
885 | 6,
886 | 0,
887 | "CLIP"
888 | ],
889 | [
890 | 4,
891 | 6,
892 | 0,
893 | 3,
894 | 1,
895 | "CONDITIONING"
896 | ],
897 | [
898 | 5,
899 | 4,
900 | 1,
901 | 7,
902 | 0,
903 | "CLIP"
904 | ],
905 | [
906 | 6,
907 | 7,
908 | 0,
909 | 3,
910 | 2,
911 | "CONDITIONING"
912 | ],
913 | [
914 | 7,
915 | 3,
916 | 0,
917 | 8,
918 | 0,
919 | "LATENT"
920 | ],
921 | [
922 | 10,
923 | 13,
924 | 0,
925 | 15,
926 | 0,
927 | "IMAGEREWARD_MODEL"
928 | ],
929 | [
930 | 26,
931 | 4,
932 | 2,
933 | 25,
934 | 0,
935 | "*"
936 | ],
937 | [
938 | 27,
939 | 25,
940 | 0,
941 | 8,
942 | 1,
943 | "VAE"
944 | ],
945 | [
946 | 28,
947 | 4,
948 | 0,
949 | 26,
950 | 0,
951 | "*"
952 | ],
953 | [
954 | 29,
955 | 26,
956 | 0,
957 | 3,
958 | 0,
959 | "MODEL"
960 | ],
961 | [
962 | 37,
963 | 16,
964 | 0,
965 | 6,
966 | 1,
967 | "STRING"
968 | ],
969 | [
970 | 38,
971 | 5,
972 | 0,
973 | 29,
974 | 0,
975 | "*"
976 | ],
977 | [
978 | 39,
979 | 29,
980 | 0,
981 | 3,
982 | 3,
983 | "LATENT"
984 | ],
985 | [
986 | 41,
987 | 30,
988 | 0,
989 | 15,
990 | 2,
991 | "STRING"
992 | ],
993 | [
994 | 42,
995 | 16,
996 | 0,
997 | 30,
998 | 0,
999 | "*"
1000 | ],
1001 | [
1002 | 45,
1003 | 8,
1004 | 0,
1005 | 15,
1006 | 1,
1007 | "IMAGE"
1008 | ],
1009 | [
1010 | 54,
1011 | 45,
1012 | 0,
1013 | 46,
1014 | 0,
1015 | "*"
1016 | ],
1017 | [
1018 | 56,
1019 | 8,
1020 | 0,
1021 | 47,
1022 | 0,
1023 | "IMAGE"
1024 | ],
1025 | [
1026 | 57,
1027 | 46,
1028 | 0,
1029 | 29,
1030 | 1,
1031 | "BOOLEAN"
1032 | ],
1033 | [
1034 | 58,
1035 | 48,
1036 | 0,
1037 | 46,
1038 | 1,
1039 | "*"
1040 | ],
1041 | [
1042 | 59,
1043 | 15,
1044 | 0,
1045 | 49,
1046 | 0,
1047 | "FLOAT"
1048 | ],
1049 | [
1050 | 60,
1051 | 51,
1052 | 0,
1053 | 47,
1054 | 1,
1055 | "STRING"
1056 | ],
1057 | [
1058 | 61,
1059 | 50,
1060 | 0,
1061 | 48,
1062 | 0,
1063 | "STRING"
1064 | ],
1065 | [
1066 | 62,
1067 | 50,
1068 | 0,
1069 | 52,
1070 | 0,
1071 | "*"
1072 | ],
1073 | [
1074 | 63,
1075 | 52,
1076 | 0,
1077 | 49,
1078 | 1,
1079 | "STRING"
1080 | ]
1081 | ],
1082 | "groups": [],
1083 | "config": {},
1084 | "extra": {},
1085 | "version": 0.4
1086 | }
--------------------------------------------------------------------------------
/workflows/GenUntilGoodNoWAS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/GenUntilGoodNoWAS.png
--------------------------------------------------------------------------------
/workflows/GenUntilRight.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 79,
3 | "last_link_id": 133,
4 | "nodes": [
5 | {
6 | "id": 29,
7 | "type": "Interrupt",
8 | "pos": [
9 | 820,
10 | 460
11 | ],
12 | "size": [
13 | 150,
14 | 60
15 | ],
16 | "flags": {},
17 | "order": 17,
18 | "mode": 0,
19 | "inputs": [
20 | {
21 | "name": "any_in",
22 | "type": "*",
23 | "link": 38,
24 | "color_on": ""
25 | },
26 | {
27 | "name": "stop",
28 | "type": "BOOLEAN",
29 | "link": 116,
30 | "widget": {
31 | "name": "stop"
32 | }
33 | }
34 | ],
35 | "outputs": [
36 | {
37 | "name": "LATENT",
38 | "type": "LATENT",
39 | "links": [
40 | 39
41 | ],
42 | "shape": 3,
43 | "slot_index": 0,
44 | "color_on": "#FF9CF9"
45 | }
46 | ],
47 | "properties": {
48 | "Node name for S&R": "Interrupt"
49 | },
50 | "widgets_values": [
51 | false
52 | ]
53 | },
54 | {
55 | "id": 26,
56 | "type": "Reroute",
57 | "pos": [
58 | 888,
59 | 20
60 | ],
61 | "size": [
62 | 82,
63 | 26
64 | ],
65 | "flags": {},
66 | "order": 6,
67 | "mode": 0,
68 | "inputs": [
69 | {
70 | "name": "",
71 | "type": "*",
72 | "link": 28
73 | }
74 | ],
75 | "outputs": [
76 | {
77 | "name": "MODEL",
78 | "type": "MODEL",
79 | "links": [
80 | 29
81 | ],
82 | "slot_index": 0
83 | }
84 | ],
85 | "properties": {
86 | "showOutputText": true,
87 | "horizontal": false
88 | }
89 | },
90 | {
91 | "id": 6,
92 | "type": "CLIPTextEncode",
93 | "pos": [
94 | 570,
95 | 150
96 | ],
97 | "size": {
98 | "0": 400,
99 | "1": 120
100 | },
101 | "flags": {},
102 | "order": 7,
103 | "mode": 0,
104 | "inputs": [
105 | {
106 | "name": "clip",
107 | "type": "CLIP",
108 | "link": 3
109 | }
110 | ],
111 | "outputs": [
112 | {
113 | "name": "CONDITIONING",
114 | "type": "CONDITIONING",
115 | "links": [
116 | 4
117 | ],
118 | "slot_index": 0
119 | }
120 | ],
121 | "title": "Positive",
122 | "properties": {
123 | "Node name for S&R": "CLIPTextEncode"
124 | },
125 | "widgets_values": [
126 | "2girls, (two women cuddling together on a couch), (hug, hugging:1.2), {white skin and blonde hair|ebony skin and black hair}, {dress|skirt|shirt}, interracial, perfect, closed eyes, (yuri:0.9), highres, aesthetic lightning, (living room background)"
127 | ],
128 | "color": "#232",
129 | "bgcolor": "#353"
130 | },
131 | {
132 | "id": 25,
133 | "type": "Reroute",
134 | "pos": [
135 | 1225,
136 | 60
137 | ],
138 | "size": [
139 | 75,
140 | 26
141 | ],
142 | "flags": {},
143 | "order": 9,
144 | "mode": 0,
145 | "inputs": [
146 | {
147 | "name": "",
148 | "type": "*",
149 | "link": 26
150 | }
151 | ],
152 | "outputs": [
153 | {
154 | "name": "VAE",
155 | "type": "VAE",
156 | "links": [
157 | 27
158 | ],
159 | "slot_index": 0
160 | }
161 | ],
162 | "properties": {
163 | "showOutputText": true,
164 | "horizontal": false
165 | }
166 | },
167 | {
168 | "id": 5,
169 | "type": "EmptyLatentImage",
170 | "pos": [
171 | 590,
172 | 460
173 | ],
174 | "size": {
175 | "0": 210,
176 | "1": 110
177 | },
178 | "flags": {},
179 | "order": 0,
180 | "mode": 0,
181 | "outputs": [
182 | {
183 | "name": "LATENT",
184 | "type": "LATENT",
185 | "links": [
186 | 38
187 | ],
188 | "slot_index": 0
189 | }
190 | ],
191 | "title": "Size",
192 | "properties": {
193 | "Node name for S&R": "EmptyLatentImage"
194 | },
195 | "widgets_values": [
196 | 768,
197 | 512,
198 | 1
199 | ],
200 | "color": "#223",
201 | "bgcolor": "#335"
202 | },
203 | {
204 | "id": 72,
205 | "type": "Logic Comparison AND",
206 | "pos": [
207 | 590,
208 | 620
209 | ],
210 | "size": {
211 | "0": 210,
212 | "1": 54
213 | },
214 | "flags": {},
215 | "order": 16,
216 | "mode": 0,
217 | "inputs": [
218 | {
219 | "name": "boolean_a",
220 | "type": "BOOLEAN",
221 | "link": 128,
222 | "widget": {
223 | "name": "boolean_a"
224 | }
225 | },
226 | {
227 | "name": "boolean_b",
228 | "type": "BOOLEAN",
229 | "link": 127,
230 | "widget": {
231 | "name": "boolean_b"
232 | }
233 | }
234 | ],
235 | "outputs": [
236 | {
237 | "name": "BOOLEAN",
238 | "type": "BOOLEAN",
239 | "links": [
240 | 116
241 | ],
242 | "shape": 3,
243 | "slot_index": 0
244 | }
245 | ],
246 | "title": "Logic AND",
247 | "properties": {
248 | "Node name for S&R": "Logic Comparison AND"
249 | },
250 | "widgets_values": [
251 | false,
252 | false
253 | ]
254 | },
255 | {
256 | "id": 64,
257 | "type": "BLIP Model Loader",
258 | "pos": [
259 | -150,
260 | 530
261 | ],
262 | "size": {
263 | "0": 210,
264 | "1": 60
265 | },
266 | "flags": {},
267 | "order": 1,
268 | "mode": 0,
269 | "outputs": [
270 | {
271 | "name": "BLIP_MODEL",
272 | "type": "BLIP_MODEL",
273 | "links": [
274 | 103,
275 | 118
276 | ],
277 | "shape": 3,
278 | "slot_index": 0
279 | }
280 | ],
281 | "properties": {
282 | "Node name for S&R": "BLIP Model Loader"
283 | },
284 | "widgets_values": [
285 | "interrogate"
286 | ]
287 | },
288 | {
289 | "id": 62,
290 | "type": "BLIP Analyze Image",
291 | "pos": [
292 | 90,
293 | 340
294 | ],
295 | "size": {
296 | "0": 210,
297 | "1": 120.00003051757812
298 | },
299 | "flags": {},
300 | "order": 12,
301 | "mode": 0,
302 | "inputs": [
303 | {
304 | "name": "image",
305 | "type": "IMAGE",
306 | "link": 120
307 | },
308 | {
309 | "name": "blip_model",
310 | "type": "BLIP_MODEL",
311 | "link": 103
312 | }
313 | ],
314 | "outputs": [
315 | {
316 | "name": "STRING",
317 | "type": "STRING",
318 | "links": [
319 | 123
320 | ],
321 | "shape": 3,
322 | "slot_index": 0
323 | }
324 | ],
325 | "properties": {
326 | "Node name for S&R": "BLIP Analyze Image"
327 | },
328 | "widgets_values": [
329 | "interrogate",
330 | "How many persons are there?"
331 | ],
332 | "color": "#232",
333 | "bgcolor": "#353"
334 | },
335 | {
336 | "id": 68,
337 | "type": "EmptyImage",
338 | "pos": [
339 | -390,
340 | 340
341 | ],
342 | "size": {
343 | "0": 210,
344 | "1": 130
345 | },
346 | "flags": {},
347 | "order": 2,
348 | "mode": 0,
349 | "outputs": [
350 | {
351 | "name": "IMAGE",
352 | "type": "IMAGE",
353 | "links": [
354 | 122
355 | ],
356 | "shape": 3,
357 | "slot_index": 0
358 | }
359 | ],
360 | "properties": {
361 | "Node name for S&R": "EmptyImage"
362 | },
363 | "widgets_values": [
364 | 512,
365 | 512,
366 | 1,
367 | 0
368 | ]
369 | },
370 | {
371 | "id": 70,
372 | "type": "BLIP Analyze Image",
373 | "pos": [
374 | 90,
375 | 510
376 | ],
377 | "size": {
378 | "0": 210,
379 | "1": 120.00003051757812
380 | },
381 | "flags": {},
382 | "order": 13,
383 | "mode": 0,
384 | "inputs": [
385 | {
386 | "name": "image",
387 | "type": "IMAGE",
388 | "link": 121
389 | },
390 | {
391 | "name": "blip_model",
392 | "type": "BLIP_MODEL",
393 | "link": 118
394 | }
395 | ],
396 | "outputs": [
397 | {
398 | "name": "STRING",
399 | "type": "STRING",
400 | "links": [
401 | 125
402 | ],
403 | "shape": 3,
404 | "slot_index": 0
405 | }
406 | ],
407 | "properties": {
408 | "Node name for S&R": "BLIP Analyze Image"
409 | },
410 | "widgets_values": [
411 | "interrogate",
412 | "Do they hug?"
413 | ],
414 | "color": "#232",
415 | "bgcolor": "#353"
416 | },
417 | {
418 | "id": 76,
419 | "type": "CyclistCompare",
420 | "pos": [
421 | 330,
422 | 510
423 | ],
424 | "size": {
425 | "0": 210,
426 | "1": 80
427 | },
428 | "flags": {},
429 | "order": 15,
430 | "mode": 0,
431 | "inputs": [
432 | {
433 | "name": "thing1",
434 | "type": "*",
435 | "link": 125
436 | },
437 | {
438 | "name": "thing2",
439 | "type": "*",
440 | "link": 126
441 | }
442 | ],
443 | "outputs": [
444 | {
445 | "name": "BOOLEAN",
446 | "type": "BOOLEAN",
447 | "links": [
448 | 127
449 | ],
450 | "shape": 3,
451 | "slot_index": 0
452 | }
453 | ],
454 | "properties": {
455 | "Node name for S&R": "CyclistCompare"
456 | },
457 | "widgets_values": [
458 | "equals"
459 | ]
460 | },
461 | {
462 | "id": 75,
463 | "type": "CyclistCompare",
464 | "pos": [
465 | 330,
466 | 340
467 | ],
468 | "size": {
469 | "0": 210,
470 | "1": 80
471 | },
472 | "flags": {},
473 | "order": 14,
474 | "mode": 0,
475 | "inputs": [
476 | {
477 | "name": "thing1",
478 | "type": "*",
479 | "link": 123
480 | },
481 | {
482 | "name": "thing2",
483 | "type": "*",
484 | "link": 124
485 | }
486 | ],
487 | "outputs": [
488 | {
489 | "name": "BOOLEAN",
490 | "type": "BOOLEAN",
491 | "links": [
492 | 128
493 | ],
494 | "shape": 3,
495 | "slot_index": 0
496 | }
497 | ],
498 | "properties": {
499 | "Node name for S&R": "CyclistCompare"
500 | },
501 | "widgets_values": [
502 | "equals"
503 | ]
504 | },
505 | {
506 | "id": 8,
507 | "type": "VAEDecode",
508 | "pos": [
509 | 1330,
510 | 130
511 | ],
512 | "size": {
513 | "0": 140,
514 | "1": 50
515 | },
516 | "flags": {},
517 | "order": 19,
518 | "mode": 0,
519 | "inputs": [
520 | {
521 | "name": "samples",
522 | "type": "LATENT",
523 | "link": 7
524 | },
525 | {
526 | "name": "vae",
527 | "type": "VAE",
528 | "link": 27
529 | }
530 | ],
531 | "outputs": [
532 | {
533 | "name": "IMAGE",
534 | "type": "IMAGE",
535 | "links": [
536 | 129
537 | ],
538 | "slot_index": 0
539 | }
540 | ],
541 | "properties": {
542 | "Node name for S&R": "VAEDecode"
543 | }
544 | },
545 | {
546 | "id": 4,
547 | "type": "CheckpointLoaderSimple",
548 | "pos": [
549 | 240,
550 | 20
551 | ],
552 | "size": {
553 | "0": 300,
554 | "1": 100
555 | },
556 | "flags": {},
557 | "order": 3,
558 | "mode": 0,
559 | "outputs": [
560 | {
561 | "name": "MODEL",
562 | "type": "MODEL",
563 | "links": [
564 | 28
565 | ],
566 | "slot_index": 0
567 | },
568 | {
569 | "name": "CLIP",
570 | "type": "CLIP",
571 | "links": [
572 | 3,
573 | 5
574 | ],
575 | "slot_index": 1
576 | },
577 | {
578 | "name": "VAE",
579 | "type": "VAE",
580 | "links": [
581 | 26
582 | ],
583 | "slot_index": 2
584 | }
585 | ],
586 | "properties": {
587 | "Node name for S&R": "CheckpointLoaderSimple"
588 | },
589 | "widgets_values": [
590 | "aZovyaRPGArtistTools_v4.safetensors"
591 | ],
592 | "color": "#223",
593 | "bgcolor": "#335"
594 | },
595 | {
596 | "id": 7,
597 | "type": "CLIPTextEncode",
598 | "pos": [
599 | 570,
600 | 320
601 | ],
602 | "size": {
603 | "0": 400,
604 | "1": 90
605 | },
606 | "flags": {},
607 | "order": 8,
608 | "mode": 0,
609 | "inputs": [
610 | {
611 | "name": "clip",
612 | "type": "CLIP",
613 | "link": 5
614 | }
615 | ],
616 | "outputs": [
617 | {
618 | "name": "CONDITIONING",
619 | "type": "CONDITIONING",
620 | "links": [
621 | 6
622 | ],
623 | "slot_index": 0
624 | }
625 | ],
626 | "title": "Negative",
627 | "properties": {
628 | "Node name for S&R": "CLIPTextEncode"
629 | },
630 | "widgets_values": [
631 | "embedding:easynegative, embedding:ng_deepnegative_v1_75T, (child, childish, loli, lolicon), embedding:AS-Adult-neg:0.8, (low quality, worst quality), blurry, text, (naked, nsfw, nude, topless, breasts)"
632 | ],
633 | "color": "#232",
634 | "bgcolor": "#353"
635 | },
636 | {
637 | "id": 77,
638 | "type": "OverrideImage",
639 | "pos": [
640 | 1500,
641 | 130
642 | ],
643 | "size": [
644 | 320,
645 | 270
646 | ],
647 | "flags": {},
648 | "order": 20,
649 | "mode": 0,
650 | "inputs": [
651 | {
652 | "name": "image",
653 | "type": "IMAGE",
654 | "link": 129
655 | },
656 | {
657 | "name": "filename",
658 | "type": "STRING",
659 | "link": 132,
660 | "widget": {
661 | "name": "filename"
662 | }
663 | }
664 | ],
665 | "properties": {
666 | "Node name for S&R": "OverrideImage"
667 | },
668 | "widgets_values": [
669 | "BLIPTested_1"
670 | ]
671 | },
672 | {
673 | "id": 74,
674 | "type": "Text String",
675 | "pos": [
676 | 90,
677 | 720
678 | ],
679 | "size": {
680 | "0": 210,
681 | "1": 190
682 | },
683 | "flags": {},
684 | "order": 4,
685 | "mode": 0,
686 | "outputs": [
687 | {
688 | "name": "STRING",
689 | "type": "STRING",
690 | "links": [
691 | 124
692 | ],
693 | "shape": 3,
694 | "slot_index": 0
695 | },
696 | {
697 | "name": "STRING",
698 | "type": "STRING",
699 | "links": [
700 | 126
701 | ],
702 | "shape": 3,
703 | "slot_index": 1
704 | },
705 | {
706 | "name": "STRING",
707 | "type": "STRING",
708 | "links": null,
709 | "shape": 3
710 | },
711 | {
712 | "name": "STRING",
713 | "type": "STRING",
714 | "links": null,
715 | "shape": 3
716 | }
717 | ],
718 | "title": "Right Answers",
719 | "properties": {
720 | "Node name for S&R": "Text String"
721 | },
722 | "widgets_values": [
723 | "two",
724 | "yes",
725 | "",
726 | ""
727 | ],
728 | "color": "#232",
729 | "bgcolor": "#353"
730 | },
731 | {
732 | "id": 73,
733 | "type": "ReloadImage",
734 | "pos": [
735 | -150,
736 | 340
737 | ],
738 | "size": [
739 | 210,
740 | 60
741 | ],
742 | "flags": {},
743 | "order": 11,
744 | "mode": 0,
745 | "inputs": [
746 | {
747 | "name": "fallback",
748 | "type": "IMAGE",
749 | "link": 122
750 | },
751 | {
752 | "name": "filename",
753 | "type": "STRING",
754 | "link": 133,
755 | "widget": {
756 | "name": "filename"
757 | }
758 | }
759 | ],
760 | "outputs": [
761 | {
762 | "name": "IMAGE",
763 | "type": "IMAGE",
764 | "links": [
765 | 120,
766 | 121
767 | ],
768 | "shape": 3,
769 | "slot_index": 0
770 | }
771 | ],
772 | "properties": {
773 | "Node name for S&R": "ReloadImage"
774 | },
775 | "widgets_values": [
776 | "BLIPTested_1"
777 | ]
778 | },
779 | {
780 | "id": 79,
781 | "type": "Reroute",
782 | "pos": [
783 | 1209.6,
784 | 670
785 | ],
786 | "size": [
787 | 90.4,
788 | 26
789 | ],
790 | "flags": {},
791 | "order": 10,
792 | "mode": 0,
793 | "inputs": [
794 | {
795 | "name": "",
796 | "type": "*",
797 | "link": 131,
798 | "widget": {
799 | "name": "value"
800 | }
801 | }
802 | ],
803 | "outputs": [
804 | {
805 | "name": "STRING",
806 | "type": "STRING",
807 | "links": [
808 | 132
809 | ],
810 | "slot_index": 0
811 | }
812 | ],
813 | "properties": {
814 | "showOutputText": true,
815 | "horizontal": false
816 | }
817 | },
818 | {
819 | "id": 3,
820 | "type": "KSampler",
821 | "pos": [
822 | 1020,
823 | 130
824 | ],
825 | "size": {
826 | "0": 280,
827 | "1": 262
828 | },
829 | "flags": {},
830 | "order": 18,
831 | "mode": 0,
832 | "inputs": [
833 | {
834 | "name": "model",
835 | "type": "MODEL",
836 | "link": 29
837 | },
838 | {
839 | "name": "positive",
840 | "type": "CONDITIONING",
841 | "link": 4
842 | },
843 | {
844 | "name": "negative",
845 | "type": "CONDITIONING",
846 | "link": 6
847 | },
848 | {
849 | "name": "latent_image",
850 | "type": "LATENT",
851 | "link": 39
852 | }
853 | ],
854 | "outputs": [
855 | {
856 | "name": "LATENT",
857 | "type": "LATENT",
858 | "links": [
859 | 7
860 | ],
861 | "slot_index": 0
862 | }
863 | ],
864 | "properties": {
865 | "Node name for S&R": "KSampler"
866 | },
867 | "widgets_values": [
868 | 263288782866168,
869 | "randomize",
870 | 26,
871 | 7,
872 | "dpmpp_3m_sde_gpu",
873 | "karras",
874 | 1
875 | ]
876 | },
877 | {
878 | "id": 78,
879 | "type": "LoopManager",
880 | "pos": [
881 | -390,
882 | 670
883 | ],
884 | "size": [
885 | 220,
886 | 240
887 | ],
888 | "flags": {},
889 | "order": 5,
890 | "mode": 0,
891 | "outputs": [
892 | {
893 | "name": "STRING",
894 | "type": "STRING",
895 | "links": [
896 | 131,
897 | 133
898 | ],
899 | "shape": 3,
900 | "slot_index": 0
901 | }
902 | ],
903 | "properties": {
904 | "Node name for S&R": "LoopManager"
905 | },
906 | "widgets_values": [
907 | "BLIPTested_1",
908 | "by_interrupt_node",
909 | "BLIPTested_15:\n(#1)IMAGE: BLIPTested_15.png\n\nBLIPTested_14:\n(#1)IMAGE: BLIPTested_14.png\n\nScore_1:\n(#4)FLOAT: 0.9399489164352417\n\nAestheticArt_1:\n(#11)IMAGE: AestheticArt_1.png"
910 | ],
911 | "color": "#232",
912 | "bgcolor": "#353"
913 | }
914 | ],
915 | "links": [
916 | [
917 | 3,
918 | 4,
919 | 1,
920 | 6,
921 | 0,
922 | "CLIP"
923 | ],
924 | [
925 | 4,
926 | 6,
927 | 0,
928 | 3,
929 | 1,
930 | "CONDITIONING"
931 | ],
932 | [
933 | 5,
934 | 4,
935 | 1,
936 | 7,
937 | 0,
938 | "CLIP"
939 | ],
940 | [
941 | 6,
942 | 7,
943 | 0,
944 | 3,
945 | 2,
946 | "CONDITIONING"
947 | ],
948 | [
949 | 7,
950 | 3,
951 | 0,
952 | 8,
953 | 0,
954 | "LATENT"
955 | ],
956 | [
957 | 26,
958 | 4,
959 | 2,
960 | 25,
961 | 0,
962 | "*"
963 | ],
964 | [
965 | 27,
966 | 25,
967 | 0,
968 | 8,
969 | 1,
970 | "VAE"
971 | ],
972 | [
973 | 28,
974 | 4,
975 | 0,
976 | 26,
977 | 0,
978 | "*"
979 | ],
980 | [
981 | 29,
982 | 26,
983 | 0,
984 | 3,
985 | 0,
986 | "MODEL"
987 | ],
988 | [
989 | 38,
990 | 5,
991 | 0,
992 | 29,
993 | 0,
994 | "*"
995 | ],
996 | [
997 | 39,
998 | 29,
999 | 0,
1000 | 3,
1001 | 3,
1002 | "LATENT"
1003 | ],
1004 | [
1005 | 103,
1006 | 64,
1007 | 0,
1008 | 62,
1009 | 1,
1010 | "BLIP_MODEL"
1011 | ],
1012 | [
1013 | 116,
1014 | 72,
1015 | 0,
1016 | 29,
1017 | 1,
1018 | "BOOLEAN"
1019 | ],
1020 | [
1021 | 118,
1022 | 64,
1023 | 0,
1024 | 70,
1025 | 1,
1026 | "BLIP_MODEL"
1027 | ],
1028 | [
1029 | 120,
1030 | 73,
1031 | 0,
1032 | 62,
1033 | 0,
1034 | "IMAGE"
1035 | ],
1036 | [
1037 | 121,
1038 | 73,
1039 | 0,
1040 | 70,
1041 | 0,
1042 | "IMAGE"
1043 | ],
1044 | [
1045 | 122,
1046 | 68,
1047 | 0,
1048 | 73,
1049 | 0,
1050 | "IMAGE"
1051 | ],
1052 | [
1053 | 123,
1054 | 62,
1055 | 0,
1056 | 75,
1057 | 0,
1058 | "*"
1059 | ],
1060 | [
1061 | 124,
1062 | 74,
1063 | 0,
1064 | 75,
1065 | 1,
1066 | "*"
1067 | ],
1068 | [
1069 | 125,
1070 | 70,
1071 | 0,
1072 | 76,
1073 | 0,
1074 | "*"
1075 | ],
1076 | [
1077 | 126,
1078 | 74,
1079 | 1,
1080 | 76,
1081 | 1,
1082 | "*"
1083 | ],
1084 | [
1085 | 127,
1086 | 76,
1087 | 0,
1088 | 72,
1089 | 1,
1090 | "BOOLEAN"
1091 | ],
1092 | [
1093 | 128,
1094 | 75,
1095 | 0,
1096 | 72,
1097 | 0,
1098 | "BOOLEAN"
1099 | ],
1100 | [
1101 | 129,
1102 | 8,
1103 | 0,
1104 | 77,
1105 | 0,
1106 | "IMAGE"
1107 | ],
1108 | [
1109 | 131,
1110 | 78,
1111 | 0,
1112 | 79,
1113 | 0,
1114 | "*"
1115 | ],
1116 | [
1117 | 132,
1118 | 79,
1119 | 0,
1120 | 77,
1121 | 1,
1122 | "STRING"
1123 | ],
1124 | [
1125 | 133,
1126 | 78,
1127 | 0,
1128 | 73,
1129 | 1,
1130 | "STRING"
1131 | ]
1132 | ],
1133 | "groups": [
1134 | {
1135 | "title": "Test the result",
1136 | "bounding": [
1137 | -400,
1138 | 266,
1139 | 950,
1140 | 654
1141 | ],
1142 | "color": "#3f789e",
1143 | "font_size": 24,
1144 | "locked": false
1145 | }
1146 | ],
1147 | "config": {},
1148 | "extra": {},
1149 | "version": 0.4
1150 | }
--------------------------------------------------------------------------------
/workflows/GenUntilRight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/GenUntilRight.png
--------------------------------------------------------------------------------
/workflows/LoRABurnTest.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 107,
3 | "last_link_id": 212,
4 | "nodes": [
5 | {
6 | "id": 94,
7 | "type": "SaveImage",
8 | "pos": [
9 | 1810,
10 | 100
11 | ],
12 | "size": {
13 | "0": 320,
14 | "1": 270
15 | },
16 | "flags": {},
17 | "order": 18,
18 | "mode": 0,
19 | "inputs": [
20 | {
21 | "name": "images",
22 | "type": "IMAGE",
23 | "link": 158
24 | },
25 | {
26 | "name": "filename_prefix",
27 | "type": "STRING",
28 | "link": 159,
29 | "widget": {
30 | "name": "filename_prefix"
31 | }
32 | }
33 | ],
34 | "properties": {},
35 | "widgets_values": [
36 | "ComfyUI"
37 | ]
38 | },
39 | {
40 | "id": 8,
41 | "type": "VAEDecode",
42 | "pos": [
43 | 1640,
44 | 100
45 | ],
46 | "size": {
47 | "0": 140,
48 | "1": 50
49 | },
50 | "flags": {},
51 | "order": 17,
52 | "mode": 0,
53 | "inputs": [
54 | {
55 | "name": "samples",
56 | "type": "LATENT",
57 | "link": 7
58 | },
59 | {
60 | "name": "vae",
61 | "type": "VAE",
62 | "link": 165
63 | }
64 | ],
65 | "outputs": [
66 | {
67 | "name": "IMAGE",
68 | "type": "IMAGE",
69 | "links": [
70 | 158
71 | ],
72 | "slot_index": 0
73 | }
74 | ],
75 | "properties": {
76 | "Node name for S&R": "VAEDecode"
77 | }
78 | },
79 | {
80 | "id": 97,
81 | "type": "Reroute",
82 | "pos": [
83 | 1535,
84 | 30
85 | ],
86 | "size": [
87 | 75,
88 | 26
89 | ],
90 | "flags": {},
91 | "order": 13,
92 | "mode": 0,
93 | "inputs": [
94 | {
95 | "name": "",
96 | "type": "*",
97 | "link": 167
98 | }
99 | ],
100 | "outputs": [
101 | {
102 | "name": "VAE",
103 | "type": "VAE",
104 | "links": [
105 | 165
106 | ],
107 | "slot_index": 0
108 | }
109 | ],
110 | "properties": {
111 | "showOutputText": true,
112 | "horizontal": false
113 | }
114 | },
115 | {
116 | "id": 96,
117 | "type": "Reroute",
118 | "pos": [
119 | 630,
120 | 30
121 | ],
122 | "size": [
123 | 75,
124 | 26
125 | ],
126 | "flags": {},
127 | "order": 8,
128 | "mode": 0,
129 | "inputs": [
130 | {
131 | "name": "",
132 | "type": "*",
133 | "link": 191
134 | }
135 | ],
136 | "outputs": [
137 | {
138 | "name": "VAE",
139 | "type": "VAE",
140 | "links": [
141 | 167
142 | ],
143 | "slot_index": 0
144 | }
145 | ],
146 | "properties": {
147 | "showOutputText": true,
148 | "horizontal": false
149 | }
150 | },
151 | {
152 | "id": 81,
153 | "type": "PrimitiveNode",
154 | "pos": [
155 | 390,
156 | 250
157 | ],
158 | "size": {
159 | "0": 210,
160 | "1": 110
161 | },
162 | "flags": {},
163 | "order": 0,
164 | "mode": 0,
165 | "outputs": [
166 | {
167 | "name": "COMBO",
168 | "type": "COMBO",
169 | "links": [
170 | 144
171 | ],
172 | "slot_index": 0,
173 | "widget": {
174 | "name": "lora_name"
175 | }
176 | }
177 | ],
178 | "properties": {
179 | "Run widget replace on values": false
180 | },
181 | "widgets_values": [
182 | "Style\\wowifierV2.safetensors",
183 | "randomize",
184 | "style"
185 | ],
186 | "color": "#232",
187 | "bgcolor": "#353"
188 | },
189 | {
190 | "id": 6,
191 | "type": "CLIPTextEncode",
192 | "pos": [
193 | 900,
194 | 160
195 | ],
196 | "size": {
197 | "0": 390,
198 | "1": 140
199 | },
200 | "flags": {},
201 | "order": 10,
202 | "mode": 0,
203 | "inputs": [
204 | {
205 | "name": "clip",
206 | "type": "CLIP",
207 | "link": 168
208 | }
209 | ],
210 | "outputs": [
211 | {
212 | "name": "CONDITIONING",
213 | "type": "CONDITIONING",
214 | "links": [
215 | 137
216 | ],
217 | "slot_index": 0
218 | }
219 | ],
220 | "title": "Positive",
221 | "properties": {
222 | "Node name for S&R": "CLIPTextEncode"
223 | },
224 | "widgets_values": [
225 | "old concrete sky scrapers, metropolis cityscape, mega dystopian city, manufacturing, commercial factories, blade runner, cyberpunk 2077, cinematic movie still, best quality, masterpiece digital art, (detailed, leishe, laser, bismuth, no humans, firemagic, marble, ivory, ebony, gold, gemstone, crystall, circuitboard, Azulejo, stained glass, gothpunk, noirstyle, uv_fluorescence, by mooncryptowow:0.4)"
226 | ],
227 | "color": "#232",
228 | "bgcolor": "#353"
229 | },
230 | {
231 | "id": 7,
232 | "type": "CLIPTextEncode",
233 | "pos": [
234 | 900,
235 | 350
236 | ],
237 | "size": {
238 | "0": 390,
239 | "1": 90
240 | },
241 | "flags": {},
242 | "order": 11,
243 | "mode": 0,
244 | "inputs": [
245 | {
246 | "name": "clip",
247 | "type": "CLIP",
248 | "link": 169
249 | }
250 | ],
251 | "outputs": [
252 | {
253 | "name": "CONDITIONING",
254 | "type": "CONDITIONING",
255 | "links": [
256 | 6
257 | ],
258 | "slot_index": 0
259 | }
260 | ],
261 | "title": "Negative",
262 | "properties": {
263 | "Node name for S&R": "CLIPTextEncode"
264 | },
265 | "widgets_values": [
266 | "low quality, worst quality, pencil sketch, black and white, greyscale, blurry"
267 | ],
268 | "color": "#232",
269 | "bgcolor": "#353"
270 | },
271 | {
272 | "id": 5,
273 | "type": "EmptyLatentImage",
274 | "pos": [
275 | 1080,
276 | 490
277 | ],
278 | "size": {
279 | "0": 210,
280 | "1": 110
281 | },
282 | "flags": {},
283 | "order": 1,
284 | "mode": 0,
285 | "outputs": [
286 | {
287 | "name": "LATENT",
288 | "type": "LATENT",
289 | "links": [
290 | 120
291 | ],
292 | "slot_index": 0
293 | }
294 | ],
295 | "title": "Size",
296 | "properties": {
297 | "Node name for S&R": "EmptyLatentImage"
298 | },
299 | "widgets_values": [
300 | 512,
301 | 512,
302 | 1
303 | ],
304 | "color": "#223",
305 | "bgcolor": "#335"
306 | },
307 | {
308 | "id": 3,
309 | "type": "KSampler",
310 | "pos": [
311 | 1330,
312 | 100
313 | ],
314 | "size": {
315 | "0": 280,
316 | "1": 262
317 | },
318 | "flags": {},
319 | "order": 15,
320 | "mode": 0,
321 | "inputs": [
322 | {
323 | "name": "model",
324 | "type": "MODEL",
325 | "link": 166
326 | },
327 | {
328 | "name": "positive",
329 | "type": "CONDITIONING",
330 | "link": 137
331 | },
332 | {
333 | "name": "negative",
334 | "type": "CONDITIONING",
335 | "link": 6
336 | },
337 | {
338 | "name": "latent_image",
339 | "type": "LATENT",
340 | "link": 120
341 | }
342 | ],
343 | "outputs": [
344 | {
345 | "name": "LATENT",
346 | "type": "LATENT",
347 | "links": [
348 | 7
349 | ],
350 | "slot_index": 0
351 | }
352 | ],
353 | "properties": {
354 | "Node name for S&R": "KSampler"
355 | },
356 | "widgets_values": [
357 | 1059267796500844,
358 | "fixed",
359 | 35,
360 | 6,
361 | "dpmpp_2m",
362 | "karras",
363 | 1
364 | ]
365 | },
366 | {
367 | "id": 4,
368 | "type": "CheckpointLoaderSimple",
369 | "pos": [
370 | 40,
371 | 100
372 | ],
373 | "size": {
374 | "0": 320,
375 | "1": 100
376 | },
377 | "flags": {},
378 | "order": 2,
379 | "mode": 0,
380 | "outputs": [
381 | {
382 | "name": "MODEL",
383 | "type": "MODEL",
384 | "links": [
385 | 186
386 | ],
387 | "slot_index": 0
388 | },
389 | {
390 | "name": "CLIP",
391 | "type": "CLIP",
392 | "links": [
393 | 188
394 | ],
395 | "slot_index": 1
396 | },
397 | {
398 | "name": "VAE",
399 | "type": "VAE",
400 | "links": [],
401 | "slot_index": 2
402 | }
403 | ],
404 | "properties": {
405 | "Node name for S&R": "CheckpointLoaderSimple"
406 | },
407 | "widgets_values": [
408 | "megaModelWith4800X_v17.safetensors"
409 | ],
410 | "color": "#232",
411 | "bgcolor": "#353"
412 | },
413 | {
414 | "id": 86,
415 | "type": "Lora Loader",
416 | "pos": [
417 | 640,
418 | 100
419 | ],
420 | "size": {
421 | "0": 210,
422 | "1": 122
423 | },
424 | "flags": {},
425 | "order": 7,
426 | "mode": 0,
427 | "inputs": [
428 | {
429 | "name": "model",
430 | "type": "MODEL",
431 | "link": 187
432 | },
433 | {
434 | "name": "clip",
435 | "type": "CLIP",
436 | "link": 189
437 | },
438 | {
439 | "name": "lora_name",
440 | "type": "COMBO",
441 | "link": 144,
442 | "widget": {
443 | "name": "lora_name"
444 | }
445 | }
446 | ],
447 | "outputs": [
448 | {
449 | "name": "MODEL",
450 | "type": "MODEL",
451 | "links": [
452 | 166,
453 | 193
454 | ],
455 | "shape": 3,
456 | "slot_index": 0
457 | },
458 | {
459 | "name": "CLIP",
460 | "type": "CLIP",
461 | "links": [
462 | 168,
463 | 169,
464 | 194
465 | ],
466 | "shape": 3,
467 | "slot_index": 1
468 | },
469 | {
470 | "name": "NAME_STRING",
471 | "type": "STRING",
472 | "links": [
473 | 157
474 | ],
475 | "shape": 3,
476 | "slot_index": 2
477 | }
478 | ],
479 | "properties": {
480 | "Node name for S&R": "Lora Loader"
481 | },
482 | "widgets_values": [
483 | "Style\\wowifierV2.safetensors",
484 | 0.9,
485 | 0.9
486 | ]
487 | },
488 | {
489 | "id": 102,
490 | "type": "ReloadModel",
491 | "pos": [
492 | 390,
493 | 100
494 | ],
495 | "size": {
496 | "0": 210,
497 | "1": 100
498 | },
499 | "flags": {},
500 | "order": 5,
501 | "mode": 0,
502 | "inputs": [
503 | {
504 | "name": "fallback_m",
505 | "type": "MODEL",
506 | "link": 186
507 | },
508 | {
509 | "name": "fallback_c",
510 | "type": "CLIP",
511 | "link": 188
512 | },
513 | {
514 | "name": "fallback_v",
515 | "type": "VAE",
516 | "link": 190
517 | },
518 | {
519 | "name": "filename",
520 | "type": "STRING",
521 | "link": 210,
522 | "widget": {
523 | "name": "filename"
524 | }
525 | }
526 | ],
527 | "outputs": [
528 | {
529 | "name": "MODEL",
530 | "type": "MODEL",
531 | "links": [
532 | 187
533 | ],
534 | "shape": 3,
535 | "slot_index": 0
536 | },
537 | {
538 | "name": "CLIP",
539 | "type": "CLIP",
540 | "links": [
541 | 189
542 | ],
543 | "shape": 3,
544 | "slot_index": 1
545 | },
546 | {
547 | "name": "VAE",
548 | "type": "VAE",
549 | "links": [
550 | 191,
551 | 195
552 | ],
553 | "shape": 3,
554 | "slot_index": 2
555 | }
556 | ],
557 | "properties": {
558 | "Node name for S&R": "ReloadModel"
559 | },
560 | "widgets_values": [
561 | "ForLoop_1"
562 | ]
563 | },
564 | {
565 | "id": 103,
566 | "type": "OverrideModel",
567 | "pos": [
568 | 640,
569 | 300
570 | ],
571 | "size": {
572 | "0": 210,
573 | "1": 94
574 | },
575 | "flags": {},
576 | "order": 12,
577 | "mode": 0,
578 | "inputs": [
579 | {
580 | "name": "model",
581 | "type": "MODEL",
582 | "link": 193
583 | },
584 | {
585 | "name": "clip",
586 | "type": "CLIP",
587 | "link": 194
588 | },
589 | {
590 | "name": "vae",
591 | "type": "VAE",
592 | "link": 195
593 | },
594 | {
595 | "name": "filename",
596 | "type": "STRING",
597 | "link": 211,
598 | "widget": {
599 | "name": "filename"
600 | }
601 | }
602 | ],
603 | "properties": {
604 | "Node name for S&R": "OverrideModel"
605 | },
606 | "widgets_values": [
607 | "ForLoop_1"
608 | ]
609 | },
610 | {
611 | "id": 106,
612 | "type": "MemorizeString",
613 | "pos": [
614 | 1150,
615 | 800
616 | ],
617 | "size": {
618 | "0": 210,
619 | "1": 54
620 | },
621 | "flags": {},
622 | "order": 16,
623 | "mode": 0,
624 | "inputs": [
625 | {
626 | "name": "to_memory",
627 | "type": "STRING",
628 | "link": 208,
629 | "widget": {
630 | "name": "to_memory"
631 | }
632 | },
633 | {
634 | "name": "loop_id",
635 | "type": "STRING",
636 | "link": 209,
637 | "widget": {
638 | "name": "loop_id"
639 | }
640 | }
641 | ],
642 | "properties": {
643 | "Node name for S&R": "MemorizeString"
644 | },
645 | "widgets_values": [
646 | "ForLoop_1",
647 | ""
648 | ]
649 | },
650 | {
651 | "id": 104,
652 | "type": "RecallString",
653 | "pos": [
654 | 670,
655 | 690
656 | ],
657 | "size": {
658 | "0": 210,
659 | "1": 54
660 | },
661 | "flags": {},
662 | "order": 9,
663 | "mode": 0,
664 | "inputs": [
665 | {
666 | "name": "loop_id",
667 | "type": "STRING",
668 | "link": 206,
669 | "widget": {
670 | "name": "loop_id"
671 | }
672 | },
673 | {
674 | "name": "fallback",
675 | "type": "STRING",
676 | "link": 207,
677 | "widget": {
678 | "name": "fallback"
679 | }
680 | }
681 | ],
682 | "outputs": [
683 | {
684 | "name": "STRING",
685 | "type": "STRING",
686 | "links": [
687 | 198
688 | ],
689 | "shape": 3,
690 | "slot_index": 0
691 | }
692 | ],
693 | "properties": {
694 | "Node name for S&R": "RecallString"
695 | },
696 | "widgets_values": [
697 | "ForLoop_1",
698 | ""
699 | ]
700 | },
701 | {
702 | "id": 91,
703 | "type": "Text Concatenate",
704 | "pos": [
705 | 910,
706 | 690
707 | ],
708 | "size": {
709 | "0": 210,
710 | "1": 142
711 | },
712 | "flags": {},
713 | "order": 14,
714 | "mode": 0,
715 | "inputs": [
716 | {
717 | "name": "text_a",
718 | "type": "STRING",
719 | "link": 198,
720 | "widget": {
721 | "name": "text_a"
722 | }
723 | },
724 | {
725 | "name": "text_b",
726 | "type": "STRING",
727 | "link": 157,
728 | "widget": {
729 | "name": "text_b"
730 | }
731 | },
732 | {
733 | "name": "text_c",
734 | "type": "STRING",
735 | "link": null,
736 | "widget": {
737 | "name": "text_c"
738 | }
739 | },
740 | {
741 | "name": "text_d",
742 | "type": "STRING",
743 | "link": null,
744 | "widget": {
745 | "name": "text_d"
746 | }
747 | }
748 | ],
749 | "outputs": [
750 | {
751 | "name": "STRING",
752 | "type": "STRING",
753 | "links": [
754 | 159,
755 | 208
756 | ],
757 | "shape": 3,
758 | "slot_index": 0
759 | }
760 | ],
761 | "title": "Concat Filename",
762 | "properties": {
763 | "Node name for S&R": "Text Concatenate"
764 | },
765 | "widgets_values": [
766 | "-",
767 | "true",
768 | "",
769 | "",
770 | "",
771 | ""
772 | ]
773 | },
774 | {
775 | "id": 105,
776 | "type": "Reroute",
777 | "pos": [
778 | 550,
779 | 820
780 | ],
781 | "size": [
782 | 90.4,
783 | 26
784 | ],
785 | "flags": {},
786 | "order": 6,
787 | "mode": 0,
788 | "inputs": [
789 | {
790 | "name": "",
791 | "type": "*",
792 | "link": 212,
793 | "widget": {
794 | "name": "value"
795 | }
796 | }
797 | ],
798 | "outputs": [
799 | {
800 | "name": "STRING",
801 | "type": "STRING",
802 | "links": [
803 | 206,
804 | 207,
805 | 209
806 | ],
807 | "slot_index": 0
808 | }
809 | ],
810 | "properties": {
811 | "showOutputText": true,
812 | "horizontal": false
813 | }
814 | },
815 | {
816 | "id": 90,
817 | "type": "VAELoader",
818 | "pos": [
819 | 40,
820 | 250
821 | ],
822 | "size": [
823 | 320,
824 | 60
825 | ],
826 | "flags": {},
827 | "order": 3,
828 | "mode": 0,
829 | "outputs": [
830 | {
831 | "name": "VAE",
832 | "type": "VAE",
833 | "links": [
834 | 190
835 | ],
836 | "shape": 3,
837 | "slot_index": 0
838 | }
839 | ],
840 | "properties": {
841 | "Node name for S&R": "VAELoader"
842 | },
843 | "widgets_values": [
844 | "vae-ft-mse-840000-ema-pruned.vae.pt"
845 | ]
846 | },
847 | {
848 | "id": 107,
849 | "type": "LoopManager",
850 | "pos": [
851 | 40,
852 | 360
853 | ],
854 | "size": [
855 | 320,
856 | 240
857 | ],
858 | "flags": {},
859 | "order": 4,
860 | "mode": 0,
861 | "outputs": [
862 | {
863 | "name": "STRING",
864 | "type": "STRING",
865 | "links": [
866 | 210,
867 | 211,
868 | 212
869 | ],
870 | "shape": 3,
871 | "slot_index": 0
872 | }
873 | ],
874 | "properties": {
875 | "Node name for S&R": "LoopManager"
876 | },
877 | "widgets_values": [
878 | "BurnTest_1",
879 | "never",
880 | "BurnTest_2:\n(#3)STRING: BurnTest_2-UV_fluorescence-LyCORIS-FiveDecorsAIx3-FiveDecorsAIx3\n(#3)MODEL: BurnTest_2.safetensors\n\nBurnTest_1:\n(#5)STRING: BurnTest_1-add_detail-FiveDecorsAIx3-wowifierV2-LASER-V1-LASER-V1\n(#5)MODEL: BurnTest_1.safetensors\n\nBLIPTested_15:\n(#1)IMAGE: BLIPTested_15.png\n\nBLIPTested_14:\n(#1)IMAGE: BLIPTested_14.png\n\nScore_1:\n(#4)FLOAT: 0.9399489164352417\n\nAestheticArt_1:\n(#11)IMAGE: AestheticArt_1.png"
881 | ]
882 | }
883 | ],
884 | "links": [
885 | [
886 | 6,
887 | 7,
888 | 0,
889 | 3,
890 | 2,
891 | "CONDITIONING"
892 | ],
893 | [
894 | 7,
895 | 3,
896 | 0,
897 | 8,
898 | 0,
899 | "LATENT"
900 | ],
901 | [
902 | 120,
903 | 5,
904 | 0,
905 | 3,
906 | 3,
907 | "LATENT"
908 | ],
909 | [
910 | 137,
911 | 6,
912 | 0,
913 | 3,
914 | 1,
915 | "CONDITIONING"
916 | ],
917 | [
918 | 144,
919 | 81,
920 | 0,
921 | 86,
922 | 2,
923 | "COMBO"
924 | ],
925 | [
926 | 157,
927 | 86,
928 | 2,
929 | 91,
930 | 1,
931 | "STRING"
932 | ],
933 | [
934 | 158,
935 | 8,
936 | 0,
937 | 94,
938 | 0,
939 | "IMAGE"
940 | ],
941 | [
942 | 159,
943 | 91,
944 | 0,
945 | 94,
946 | 1,
947 | "STRING"
948 | ],
949 | [
950 | 165,
951 | 97,
952 | 0,
953 | 8,
954 | 1,
955 | "VAE"
956 | ],
957 | [
958 | 166,
959 | 86,
960 | 0,
961 | 3,
962 | 0,
963 | "MODEL"
964 | ],
965 | [
966 | 167,
967 | 96,
968 | 0,
969 | 97,
970 | 0,
971 | "*"
972 | ],
973 | [
974 | 168,
975 | 86,
976 | 1,
977 | 6,
978 | 0,
979 | "CLIP"
980 | ],
981 | [
982 | 169,
983 | 86,
984 | 1,
985 | 7,
986 | 0,
987 | "CLIP"
988 | ],
989 | [
990 | 186,
991 | 4,
992 | 0,
993 | 102,
994 | 0,
995 | "MODEL"
996 | ],
997 | [
998 | 187,
999 | 102,
1000 | 0,
1001 | 86,
1002 | 0,
1003 | "MODEL"
1004 | ],
1005 | [
1006 | 188,
1007 | 4,
1008 | 1,
1009 | 102,
1010 | 1,
1011 | "CLIP"
1012 | ],
1013 | [
1014 | 189,
1015 | 102,
1016 | 1,
1017 | 86,
1018 | 1,
1019 | "CLIP"
1020 | ],
1021 | [
1022 | 190,
1023 | 90,
1024 | 0,
1025 | 102,
1026 | 2,
1027 | "VAE"
1028 | ],
1029 | [
1030 | 191,
1031 | 102,
1032 | 2,
1033 | 96,
1034 | 0,
1035 | "*"
1036 | ],
1037 | [
1038 | 193,
1039 | 86,
1040 | 0,
1041 | 103,
1042 | 0,
1043 | "MODEL"
1044 | ],
1045 | [
1046 | 194,
1047 | 86,
1048 | 1,
1049 | 103,
1050 | 1,
1051 | "CLIP"
1052 | ],
1053 | [
1054 | 195,
1055 | 102,
1056 | 2,
1057 | 103,
1058 | 2,
1059 | "VAE"
1060 | ],
1061 | [
1062 | 198,
1063 | 104,
1064 | 0,
1065 | 91,
1066 | 0,
1067 | "STRING"
1068 | ],
1069 | [
1070 | 206,
1071 | 105,
1072 | 0,
1073 | 104,
1074 | 0,
1075 | "STRING"
1076 | ],
1077 | [
1078 | 207,
1079 | 105,
1080 | 0,
1081 | 104,
1082 | 1,
1083 | "STRING"
1084 | ],
1085 | [
1086 | 208,
1087 | 91,
1088 | 0,
1089 | 106,
1090 | 0,
1091 | "STRING"
1092 | ],
1093 | [
1094 | 209,
1095 | 105,
1096 | 0,
1097 | 106,
1098 | 1,
1099 | "STRING"
1100 | ],
1101 | [
1102 | 210,
1103 | 107,
1104 | 0,
1105 | 102,
1106 | 3,
1107 | "STRING"
1108 | ],
1109 | [
1110 | 211,
1111 | 107,
1112 | 0,
1113 | 103,
1114 | 3,
1115 | "STRING"
1116 | ],
1117 | [
1118 | 212,
1119 | 107,
1120 | 0,
1121 | 105,
1122 | 0,
1123 | "*"
1124 | ]
1125 | ],
1126 | "groups": [
1127 | {
1128 | "title": "Make new model",
1129 | "bounding": [
1130 | 30,
1131 | -14,
1132 | 830,
1133 | 621
1134 | ],
1135 | "color": "#3f789e",
1136 | "font_size": 24,
1137 | "locked": false
1138 | },
1139 | {
1140 | "title": "Generate image",
1141 | "bounding": [
1142 | 890,
1143 | -14,
1144 | 1250,
1145 | 624
1146 | ],
1147 | "color": "#3f789e",
1148 | "font_size": 24,
1149 | "locked": false
1150 | },
1151 | {
1152 | "title": "Make image filename",
1153 | "bounding": [
1154 | 540,
1155 | 616,
1156 | 830,
1157 | 244
1158 | ],
1159 | "color": "#3f789e",
1160 | "font_size": 24,
1161 | "locked": false
1162 | }
1163 | ],
1164 | "config": {},
1165 | "extra": {},
1166 | "version": 0.4
1167 | }
--------------------------------------------------------------------------------
/workflows/LoRABurnTest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/LoRABurnTest.png
--------------------------------------------------------------------------------
/workflows/MultiplePersons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/MultiplePersons.png
--------------------------------------------------------------------------------
/workflows/README.md:
--------------------------------------------------------------------------------
1 | # Example Workflows
2 |
3 | ## Cat Stack
4 |
5 | [Workflow JSON](./CatStack.json)
6 | [Workflow without UseEverywhere](./CatStackNoUE.json)
7 | 
8 |
9 | ## Chimera Maker
10 |
11 | [Workflow JSON](./ChimeraMaker.json)
12 | 
13 |
14 | ## Generate Until Good
15 |
16 | [Workflow JSON](./GenUntilGood.json)
17 | 
18 |
19 | ### Without WAS
20 |
21 | [Workflow JSON](./GenUntilGoodNoWAS.json)
22 | 
23 |
24 | ## Generate Until Right
25 |
26 | [Workflow JSON](./GenUntilRight.json)
27 | 
28 |
29 | ## LoRA Burn Test
30 |
31 | [Workflow JSON](./LoRABurnTest.json)
32 | 
33 |
34 | ## Multiple Persons
35 |
36 | [Workflow JSON](./MultiplePersons.json)
37 | 
38 |
39 | ## Time Limit
40 |
41 | [Workflow JSON](./TimeLimit.json)
42 | 
43 |
44 | ## Upscale to Megapixels
45 |
46 | [Workflow JSON](./UpscaleToMegapixels.json)
47 | 
48 |
49 | ## Upscale to Resolution
50 |
51 | [Workflow JSON](./UpscaleToResolution.json)
52 | 
53 |
--------------------------------------------------------------------------------
/workflows/TimeLimit.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 115,
3 | "last_link_id": 209,
4 | "nodes": [
5 | {
6 | "id": 6,
7 | "type": "CLIPTextEncode",
8 | "pos": [
9 | 900,
10 | 160
11 | ],
12 | "size": {
13 | "0": 390,
14 | "1": 140
15 | },
16 | "flags": {},
17 | "order": 4,
18 | "mode": 0,
19 | "inputs": [
20 | {
21 | "name": "clip",
22 | "type": "CLIP",
23 | "link": 190
24 | }
25 | ],
26 | "outputs": [
27 | {
28 | "name": "CONDITIONING",
29 | "type": "CONDITIONING",
30 | "links": [
31 | 137
32 | ],
33 | "slot_index": 0
34 | }
35 | ],
36 | "title": "Positive",
37 | "properties": {
38 | "Node name for S&R": "CLIPTextEncode"
39 | },
40 | "widgets_values": [
41 | "old concrete sky scrapers, metropolis cityscape, mega dystopian city, manufacturing, commercial factories, blade runner, cyberpunk 2077, cinematic movie still, best quality, masterpiece digital art, (detailed, leishe, laser, bismuth, no humans, firemagic, marble, ivory, ebony, gold, gemstone, crystall, circuitboard, Azulejo, stained glass, gothpunk, noirstyle, uv_fluorescence, by mooncryptowow:0.4)"
42 | ],
43 | "color": "#232",
44 | "bgcolor": "#353"
45 | },
46 | {
47 | "id": 7,
48 | "type": "CLIPTextEncode",
49 | "pos": [
50 | 900,
51 | 350
52 | ],
53 | "size": {
54 | "0": 390,
55 | "1": 90
56 | },
57 | "flags": {},
58 | "order": 5,
59 | "mode": 0,
60 | "inputs": [
61 | {
62 | "name": "clip",
63 | "type": "CLIP",
64 | "link": 191
65 | }
66 | ],
67 | "outputs": [
68 | {
69 | "name": "CONDITIONING",
70 | "type": "CONDITIONING",
71 | "links": [
72 | 6
73 | ],
74 | "slot_index": 0
75 | }
76 | ],
77 | "title": "Negative",
78 | "properties": {
79 | "Node name for S&R": "CLIPTextEncode"
80 | },
81 | "widgets_values": [
82 | "low quality, worst quality, pencil sketch, black and white, greyscale, blurry"
83 | ],
84 | "color": "#232",
85 | "bgcolor": "#353"
86 | },
87 | {
88 | "id": 102,
89 | "type": "SaveImage",
90 | "pos": [
91 | 1810,
92 | 100
93 | ],
94 | "size": {
95 | "0": 320,
96 | "1": 270
97 | },
98 | "flags": {},
99 | "order": 10,
100 | "mode": 0,
101 | "inputs": [
102 | {
103 | "name": "images",
104 | "type": "IMAGE",
105 | "link": 189
106 | }
107 | ],
108 | "properties": {},
109 | "widgets_values": [
110 | "ComfyUI"
111 | ]
112 | },
113 | {
114 | "id": 4,
115 | "type": "CheckpointLoaderSimple",
116 | "pos": [
117 | 550,
118 | 100
119 | ],
120 | "size": {
121 | "0": 320,
122 | "1": 100
123 | },
124 | "flags": {},
125 | "order": 0,
126 | "mode": 0,
127 | "outputs": [
128 | {
129 | "name": "MODEL",
130 | "type": "MODEL",
131 | "links": [
132 | 186
133 | ],
134 | "slot_index": 0
135 | },
136 | {
137 | "name": "CLIP",
138 | "type": "CLIP",
139 | "links": [
140 | 190,
141 | 191
142 | ],
143 | "slot_index": 1
144 | },
145 | {
146 | "name": "VAE",
147 | "type": "VAE",
148 | "links": [
149 | 194
150 | ],
151 | "slot_index": 2
152 | }
153 | ],
154 | "properties": {
155 | "Node name for S&R": "CheckpointLoaderSimple"
156 | },
157 | "widgets_values": [
158 | "526mixV15.safetensors"
159 | ],
160 | "color": "#232",
161 | "bgcolor": "#353"
162 | },
163 | {
164 | "id": 5,
165 | "type": "EmptyLatentImage",
166 | "pos": [
167 | 900,
168 | 490
169 | ],
170 | "size": {
171 | "0": 210,
172 | "1": 110
173 | },
174 | "flags": {},
175 | "order": 1,
176 | "mode": 0,
177 | "outputs": [
178 | {
179 | "name": "LATENT",
180 | "type": "LATENT",
181 | "links": [
182 | 195
183 | ],
184 | "slot_index": 0
185 | }
186 | ],
187 | "title": "Size",
188 | "properties": {
189 | "Node name for S&R": "EmptyLatentImage"
190 | },
191 | "widgets_values": [
192 | 512,
193 | 512,
194 | 1
195 | ],
196 | "color": "#223",
197 | "bgcolor": "#335"
198 | },
199 | {
200 | "id": 104,
201 | "type": "Interrupt",
202 | "pos": [
203 | 1140,
204 | 490
205 | ],
206 | "size": [
207 | 150,
208 | 60
209 | ],
210 | "flags": {},
211 | "order": 7,
212 | "mode": 0,
213 | "inputs": [
214 | {
215 | "name": "any_in",
216 | "type": "*",
217 | "link": 195,
218 | "color_on": ""
219 | },
220 | {
221 | "name": "stop",
222 | "type": "BOOLEAN",
223 | "link": 208,
224 | "widget": {
225 | "name": "stop"
226 | }
227 | }
228 | ],
229 | "outputs": [
230 | {
231 | "name": "LATENT",
232 | "type": "LATENT",
233 | "links": [
234 | 196
235 | ],
236 | "shape": 3,
237 | "color_on": "#FF9CF9",
238 | "slot_index": 0
239 | }
240 | ],
241 | "properties": {
242 | "Node name for S&R": "Interrupt"
243 | },
244 | "widgets_values": [
245 | false
246 | ]
247 | },
248 | {
249 | "id": 3,
250 | "type": "KSampler",
251 | "pos": [
252 | 1330,
253 | 100
254 | ],
255 | "size": {
256 | "0": 280,
257 | "1": 262
258 | },
259 | "flags": {},
260 | "order": 8,
261 | "mode": 0,
262 | "inputs": [
263 | {
264 | "name": "model",
265 | "type": "MODEL",
266 | "link": 186
267 | },
268 | {
269 | "name": "positive",
270 | "type": "CONDITIONING",
271 | "link": 137
272 | },
273 | {
274 | "name": "negative",
275 | "type": "CONDITIONING",
276 | "link": 6
277 | },
278 | {
279 | "name": "latent_image",
280 | "type": "LATENT",
281 | "link": 196
282 | }
283 | ],
284 | "outputs": [
285 | {
286 | "name": "LATENT",
287 | "type": "LATENT",
288 | "links": [
289 | 7
290 | ],
291 | "slot_index": 0
292 | }
293 | ],
294 | "properties": {
295 | "Node name for S&R": "KSampler"
296 | },
297 | "widgets_values": [
298 | 1079134092701188,
299 | "randomize",
300 | 35,
301 | 6,
302 | "dpmpp_2m",
303 | "karras",
304 | 1
305 | ]
306 | },
307 | {
308 | "id": 112,
309 | "type": "CyclistMathInt",
310 | "pos": [
311 | 660,
312 | 490
313 | ],
314 | "size": {
315 | "0": 210,
316 | "1": 110
317 | },
318 | "flags": {},
319 | "order": 2,
320 | "mode": 0,
321 | "outputs": [
322 | {
323 | "name": "INT",
324 | "type": "INT",
325 | "links": [
326 | 206
327 | ],
328 | "shape": 3,
329 | "slot_index": 0
330 | }
331 | ],
332 | "title": "Max Time",
333 | "properties": {
334 | "Node name for S&R": "CyclistMathInt"
335 | },
336 | "widgets_values": [
337 | "addition",
338 | 20,
339 | 0
340 | ],
341 | "color": "#232",
342 | "bgcolor": "#353"
343 | },
344 | {
345 | "id": 113,
346 | "type": "CyclistTimer",
347 | "pos": [
348 | 660,
349 | 650
350 | ],
351 | "size": {
352 | "0": 210,
353 | "1": 102
354 | },
355 | "flags": {},
356 | "order": 3,
357 | "mode": 0,
358 | "outputs": [
359 | {
360 | "name": "last gen time",
361 | "type": "FLOAT",
362 | "links": null,
363 | "shape": 3
364 | },
365 | {
366 | "name": "total loop time",
367 | "type": "FLOAT",
368 | "links": [
369 | 207
370 | ],
371 | "shape": 3,
372 | "slot_index": 1
373 | }
374 | ],
375 | "properties": {
376 | "Node name for S&R": "CyclistTimer"
377 | },
378 | "widgets_values": [
379 | "ForLoop_1",
380 | "seconds"
381 | ]
382 | },
383 | {
384 | "id": 114,
385 | "type": "CyclistCompare",
386 | "pos": [
387 | 900,
388 | 650
389 | ],
390 | "size": {
391 | "0": 210,
392 | "1": 80
393 | },
394 | "flags": {},
395 | "order": 6,
396 | "mode": 0,
397 | "inputs": [
398 | {
399 | "name": "thing1",
400 | "type": "*",
401 | "link": 206
402 | },
403 | {
404 | "name": "thing2",
405 | "type": "*",
406 | "link": 207
407 | }
408 | ],
409 | "outputs": [
410 | {
411 | "name": "BOOLEAN",
412 | "type": "BOOLEAN",
413 | "links": [
414 | 208
415 | ],
416 | "shape": 3,
417 | "slot_index": 0
418 | }
419 | ],
420 | "properties": {
421 | "Node name for S&R": "CyclistCompare"
422 | },
423 | "widgets_values": [
424 | "less than"
425 | ]
426 | },
427 | {
428 | "id": 115,
429 | "type": "CyclistTimerStop",
430 | "pos": [
431 | 1810,
432 | 420
433 | ],
434 | "size": {
435 | "0": 210,
436 | "1": 60
437 | },
438 | "flags": {},
439 | "order": 11,
440 | "mode": 0,
441 | "inputs": [
442 | {
443 | "name": "any_in",
444 | "type": "*",
445 | "link": 209
446 | }
447 | ],
448 | "properties": {
449 | "Node name for S&R": "CyclistTimerStop"
450 | },
451 | "widgets_values": [
452 | "ForLoop_1"
453 | ]
454 | },
455 | {
456 | "id": 8,
457 | "type": "VAEDecode",
458 | "pos": [
459 | 1640,
460 | 100
461 | ],
462 | "size": {
463 | "0": 140,
464 | "1": 50
465 | },
466 | "flags": {},
467 | "order": 9,
468 | "mode": 0,
469 | "inputs": [
470 | {
471 | "name": "samples",
472 | "type": "LATENT",
473 | "link": 7
474 | },
475 | {
476 | "name": "vae",
477 | "type": "VAE",
478 | "link": 194
479 | }
480 | ],
481 | "outputs": [
482 | {
483 | "name": "IMAGE",
484 | "type": "IMAGE",
485 | "links": [
486 | 189,
487 | 209
488 | ],
489 | "slot_index": 0
490 | }
491 | ],
492 | "properties": {
493 | "Node name for S&R": "VAEDecode"
494 | }
495 | }
496 | ],
497 | "links": [
498 | [
499 | 6,
500 | 7,
501 | 0,
502 | 3,
503 | 2,
504 | "CONDITIONING"
505 | ],
506 | [
507 | 7,
508 | 3,
509 | 0,
510 | 8,
511 | 0,
512 | "LATENT"
513 | ],
514 | [
515 | 137,
516 | 6,
517 | 0,
518 | 3,
519 | 1,
520 | "CONDITIONING"
521 | ],
522 | [
523 | 186,
524 | 4,
525 | 0,
526 | 3,
527 | 0,
528 | "MODEL"
529 | ],
530 | [
531 | 189,
532 | 8,
533 | 0,
534 | 102,
535 | 0,
536 | "IMAGE"
537 | ],
538 | [
539 | 190,
540 | 4,
541 | 1,
542 | 6,
543 | 0,
544 | "CLIP"
545 | ],
546 | [
547 | 191,
548 | 4,
549 | 1,
550 | 7,
551 | 0,
552 | "CLIP"
553 | ],
554 | [
555 | 194,
556 | 4,
557 | 2,
558 | 8,
559 | 1,
560 | "VAE"
561 | ],
562 | [
563 | 195,
564 | 5,
565 | 0,
566 | 104,
567 | 0,
568 | "*"
569 | ],
570 | [
571 | 196,
572 | 104,
573 | 0,
574 | 3,
575 | 3,
576 | "LATENT"
577 | ],
578 | [
579 | 206,
580 | 112,
581 | 0,
582 | 114,
583 | 0,
584 | "*"
585 | ],
586 | [
587 | 207,
588 | 113,
589 | 1,
590 | 114,
591 | 1,
592 | "*"
593 | ],
594 | [
595 | 208,
596 | 114,
597 | 0,
598 | 104,
599 | 1,
600 | "BOOLEAN"
601 | ],
602 | [
603 | 209,
604 | 8,
605 | 0,
606 | 115,
607 | 0,
608 | "*"
609 | ]
610 | ],
611 | "groups": [],
612 | "config": {},
613 | "extra": {},
614 | "version": 0.4
615 | }
--------------------------------------------------------------------------------
/workflows/TimeLimit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/TimeLimit.png
--------------------------------------------------------------------------------
/workflows/UpscaleToMegapixels.json:
--------------------------------------------------------------------------------
1 | {
2 | "last_node_id": 37,
3 | "last_link_id": 72,
4 | "nodes": [
5 | {
6 | "id": 23,
7 | "type": "VAEDecode",
8 | "pos": [
9 | 690,
10 | 820
11 | ],
12 | "size": {
13 | "0": 140,
14 | "1": 50
15 | },
16 | "flags": {},
17 | "order": 10,
18 | "mode": 2,
19 | "inputs": [
20 | {
21 | "name": "samples",
22 | "type": "LATENT",
23 | "link": 64
24 | },
25 | {
26 | "name": "vae",
27 | "type": "VAE",
28 | "link": 58
29 | }
30 | ],
31 | "outputs": [
32 | {
33 | "name": "IMAGE",
34 | "type": "IMAGE",
35 | "links": [
36 | 36
37 | ],
38 | "shape": 3,
39 | "slot_index": 0
40 | }
41 | ],
42 | "properties": {
43 | "Node name for S&R": "VAEDecode"
44 | }
45 | },
46 | {
47 | "id": 24,
48 | "type": "SaveImage",
49 | "pos": [
50 | 860,
51 | 820
52 | ],
53 | "size": {
54 | "0": 560,
55 | "1": 510
56 | },
57 | "flags": {},
58 | "order": 12,
59 | "mode": 2,
60 | "inputs": [
61 | {
62 | "name": "images",
63 | "type": "IMAGE",
64 | "link": 36
65 | }
66 | ],
67 | "title": "Save Image (Final Result)",
68 | "properties": {},
69 | "widgets_values": [
70 | "UpscaleTotal"
71 | ]
72 | },
73 | {
74 | "id": 14,
75 | "type": "VAELoader",
76 | "pos": [
77 | -100,
78 | 840
79 | ],
80 | "size": {
81 | "0": 350,
82 | "1": 60
83 | },
84 | "flags": {},
85 | "order": 0,
86 | "mode": 0,
87 | "outputs": [
88 | {
89 | "name": "VAE",
90 | "type": "VAE",
91 | "links": [
92 | 18,
93 | 58
94 | ],
95 | "shape": 3,
96 | "slot_index": 0
97 | }
98 | ],
99 | "properties": {
100 | "Node name for S&R": "VAELoader"
101 | },
102 | "widgets_values": [
103 | "vae-ft-mse-840000-ema-pruned.vae.pt"
104 | ],
105 | "color": "#223",
106 | "bgcolor": "#335"
107 | },
108 | {
109 | "id": 27,
110 | "type": "Note",
111 | "pos": [
112 | 1120,
113 | 670
114 | ],
115 | "size": {
116 | "0": 210,
117 | "1": 110
118 | },
119 | "flags": {},
120 | "order": 1,
121 | "mode": 0,
122 | "title": "Rough megapixel standarts",
123 | "properties": {
124 | "text": ""
125 | },
126 | "widgets_values": [
127 | "HD: 1\nFullHD: 2\n2K QHD: 3.67\n4K UHD: 8.3\n8K: 33.18\n\n15625 is latent megapixel"
128 | ],
129 | "color": "#432",
130 | "bgcolor": "#653"
131 | },
132 | {
133 | "id": 4,
134 | "type": "CheckpointLoaderSimple",
135 | "pos": [
136 | -100,
137 | 140
138 | ],
139 | "size": {
140 | "0": 350,
141 | "1": 100
142 | },
143 | "flags": {},
144 | "order": 2,
145 | "mode": 0,
146 | "outputs": [
147 | {
148 | "name": "MODEL",
149 | "type": "MODEL",
150 | "links": [
151 | 16
152 | ],
153 | "slot_index": 0
154 | },
155 | {
156 | "name": "CLIP",
157 | "type": "CLIP",
158 | "links": [
159 | 14
160 | ],
161 | "slot_index": 1
162 | },
163 | {
164 | "name": "VAE",
165 | "type": "VAE",
166 | "links": [],
167 | "slot_index": 2
168 | }
169 | ],
170 | "properties": {
171 | "Node name for S&R": "CheckpointLoaderSimple"
172 | },
173 | "widgets_values": [
174 | "aZovyaRPGArtistTools_v4.safetensors"
175 | ],
176 | "color": "#223",
177 | "bgcolor": "#335"
178 | },
179 | {
180 | "id": 6,
181 | "type": "CLIPTextEncode",
182 | "pos": [
183 | 610,
184 | 190
185 | ],
186 | "size": {
187 | "0": 560,
188 | "1": 100
189 | },
190 | "flags": {},
191 | "order": 7,
192 | "mode": 0,
193 | "inputs": [
194 | {
195 | "name": "clip",
196 | "type": "CLIP",
197 | "link": 15
198 | }
199 | ],
200 | "outputs": [
201 | {
202 | "name": "CONDITIONING",
203 | "type": "CONDITIONING",
204 | "links": [
205 | 13
206 | ],
207 | "slot_index": 0
208 | }
209 | ],
210 | "title": "Positive",
211 | "properties": {
212 | "Node name for S&R": "CLIPTextEncode"
213 | },
214 | "widgets_values": [
215 | "Zeppelin hovering foreground an incredibly detailed artistic representation of a solarpunk village on a floating rock above a grand river. Digital art, small village on a cliff outcropping, moss, steampunk homes, zeppelin in the sky, style of John Blanche, highly detailed."
216 | ],
217 | "color": "#232",
218 | "bgcolor": "#353"
219 | },
220 | {
221 | "id": 10,
222 | "type": "LoadImage",
223 | "pos": [
224 | -60,
225 | 450
226 | ],
227 | "size": [
228 | 310,
229 | 310
230 | ],
231 | "flags": {},
232 | "order": 3,
233 | "mode": 0,
234 | "outputs": [
235 | {
236 | "name": "IMAGE",
237 | "type": "IMAGE",
238 | "links": [
239 | 10
240 | ],
241 | "shape": 3,
242 | "slot_index": 0
243 | },
244 | {
245 | "name": "MASK",
246 | "type": "MASK",
247 | "links": null,
248 | "shape": 3
249 | }
250 | ],
251 | "properties": {
252 | "Node name for S&R": "LoadImage"
253 | },
254 | "widgets_values": [
255 | "SDXL_00003_.png",
256 | "image"
257 | ],
258 | "color": "#232",
259 | "bgcolor": "#353"
260 | },
261 | {
262 | "id": 7,
263 | "type": "CLIPTextEncode",
264 | "pos": [
265 | 610,
266 | 330
267 | ],
268 | "size": {
269 | "0": 560,
270 | "1": 76
271 | },
272 | "flags": {},
273 | "order": 8,
274 | "mode": 0,
275 | "inputs": [
276 | {
277 | "name": "clip",
278 | "type": "CLIP",
279 | "link": 34
280 | }
281 | ],
282 | "outputs": [
283 | {
284 | "name": "CONDITIONING",
285 | "type": "CONDITIONING",
286 | "links": [
287 | 6
288 | ],
289 | "slot_index": 0
290 | }
291 | ],
292 | "title": "Negative",
293 | "properties": {
294 | "Node name for S&R": "CLIPTextEncode"
295 | },
296 | "widgets_values": [
297 | "embedding:easynegative:0.7, (low quality, worst quality:1.1), (blurry:1.1), sketch"
298 | ],
299 | "color": "#232",
300 | "bgcolor": "#353"
301 | },
302 | {
303 | "id": 11,
304 | "type": "VAEEncode",
305 | "pos": [
306 | 280,
307 | 450
308 | ],
309 | "size": {
310 | "0": 140,
311 | "1": 46
312 | },
313 | "flags": {},
314 | "order": 6,
315 | "mode": 0,
316 | "inputs": [
317 | {
318 | "name": "pixels",
319 | "type": "IMAGE",
320 | "link": 10
321 | },
322 | {
323 | "name": "vae",
324 | "type": "VAE",
325 | "link": 18
326 | }
327 | ],
328 | "outputs": [
329 | {
330 | "name": "LATENT",
331 | "type": "LATENT",
332 | "links": [
333 | 60
334 | ],
335 | "shape": 3,
336 | "slot_index": 0
337 | }
338 | ],
339 | "properties": {
340 | "Node name for S&R": "VAEEncode"
341 | }
342 | },
343 | {
344 | "id": 21,
345 | "type": "LatentUpscaleBy",
346 | "pos": [
347 | 1520,
348 | 450
349 | ],
350 | "size": {
351 | "0": 210,
352 | "1": 82
353 | },
354 | "flags": {},
355 | "order": 16,
356 | "mode": 0,
357 | "inputs": [
358 | {
359 | "name": "samples",
360 | "type": "LATENT",
361 | "link": 63
362 | }
363 | ],
364 | "outputs": [
365 | {
366 | "name": "LATENT",
367 | "type": "LATENT",
368 | "links": [
369 | 29
370 | ],
371 | "shape": 3,
372 | "slot_index": 0
373 | }
374 | ],
375 | "properties": {
376 | "Node name for S&R": "LatentUpscaleBy"
377 | },
378 | "widgets_values": [
379 | "bilinear",
380 | 1.375
381 | ]
382 | },
383 | {
384 | "id": 22,
385 | "type": "Interrupt",
386 | "pos": [
387 | 1340,
388 | 450
389 | ],
390 | "size": [
391 | 150,
392 | 60
393 | ],
394 | "flags": {},
395 | "order": 15,
396 | "mode": 0,
397 | "inputs": [
398 | {
399 | "name": "any_in",
400 | "type": "*",
401 | "link": 62,
402 | "color_on": ""
403 | },
404 | {
405 | "name": "stop",
406 | "type": "BOOLEAN",
407 | "link": 71,
408 | "widget": {
409 | "name": "stop"
410 | }
411 | }
412 | ],
413 | "outputs": [
414 | {
415 | "name": "LATENT",
416 | "type": "LATENT",
417 | "links": [
418 | 63
419 | ],
420 | "shape": 3,
421 | "color_on": "#FF9CF9",
422 | "slot_index": 0
423 | }
424 | ],
425 | "properties": {
426 | "Node name for S&R": "Interrupt"
427 | },
428 | "widgets_values": [
429 | false
430 | ],
431 | "color": "#322",
432 | "bgcolor": "#533"
433 | },
434 | {
435 | "id": 16,
436 | "type": "Latent Size to Number",
437 | "pos": [
438 | 690,
439 | 510
440 | ],
441 | "size": {
442 | "0": 180,
443 | "1": 130
444 | },
445 | "flags": {},
446 | "order": 11,
447 | "mode": 0,
448 | "inputs": [
449 | {
450 | "name": "samples",
451 | "type": "LATENT",
452 | "link": 65
453 | }
454 | ],
455 | "outputs": [
456 | {
457 | "name": "tensor_w_num",
458 | "type": "NUMBER",
459 | "links": null,
460 | "shape": 3
461 | },
462 | {
463 | "name": "tensor_h_num",
464 | "type": "NUMBER",
465 | "links": null,
466 | "shape": 3
467 | },
468 | {
469 | "name": "FLOAT",
470 | "type": "FLOAT",
471 | "links": [
472 | 67
473 | ],
474 | "shape": 3,
475 | "slot_index": 2
476 | },
477 | {
478 | "name": "FLOAT",
479 | "type": "FLOAT",
480 | "links": [
481 | 68
482 | ],
483 | "shape": 3,
484 | "slot_index": 3
485 | },
486 | {
487 | "name": "INT",
488 | "type": "INT",
489 | "links": [],
490 | "shape": 3,
491 | "slot_index": 4
492 | },
493 | {
494 | "name": "INT",
495 | "type": "INT",
496 | "links": [],
497 | "shape": 3,
498 | "slot_index": 5
499 | }
500 | ],
501 | "properties": {
502 | "Node name for S&R": "Latent Size to Number"
503 | }
504 | },
505 | {
506 | "id": 35,
507 | "type": "CyclistMathFloat",
508 | "pos": [
509 | 890,
510 | 670
511 | ],
512 | "size": {
513 | "0": 210,
514 | "1": 110
515 | },
516 | "flags": {},
517 | "order": 4,
518 | "mode": 0,
519 | "outputs": [
520 | {
521 | "name": "FLOAT",
522 | "type": "FLOAT",
523 | "links": [
524 | 70
525 | ],
526 | "shape": 3,
527 | "slot_index": 0
528 | }
529 | ],
530 | "title": "Max Megapixels",
531 | "properties": {
532 | "Node name for S&R": "CyclistMathFloat"
533 | },
534 | "widgets_values": [
535 | "multiplication",
536 | 2,
537 | 15625
538 | ],
539 | "color": "#232",
540 | "bgcolor": "#353"
541 | },
542 | {
543 | "id": 36,
544 | "type": "CyclistCompare",
545 | "pos": [
546 | 1120,
547 | 550
548 | ],
549 | "size": {
550 | "0": 210,
551 | "1": 80
552 | },
553 | "flags": {},
554 | "order": 14,
555 | "mode": 0,
556 | "inputs": [
557 | {
558 | "name": "thing1",
559 | "type": "*",
560 | "link": 69
561 | },
562 | {
563 | "name": "thing2",
564 | "type": "*",
565 | "link": 70
566 | }
567 | ],
568 | "outputs": [
569 | {
570 | "name": "BOOLEAN",
571 | "type": "BOOLEAN",
572 | "links": [
573 | 71
574 | ],
575 | "shape": 3,
576 | "slot_index": 0
577 | }
578 | ],
579 | "properties": {
580 | "Node name for S&R": "CyclistCompare"
581 | },
582 | "widgets_values": [
583 | "greater or equals"
584 | ]
585 | },
586 | {
587 | "id": 3,
588 | "type": "KSampler",
589 | "pos": [
590 | 1760,
591 | 150
592 | ],
593 | "size": {
594 | "0": 280,
595 | "1": 262
596 | },
597 | "flags": {},
598 | "order": 17,
599 | "mode": 0,
600 | "inputs": [
601 | {
602 | "name": "model",
603 | "type": "MODEL",
604 | "link": 17
605 | },
606 | {
607 | "name": "positive",
608 | "type": "CONDITIONING",
609 | "link": 13
610 | },
611 | {
612 | "name": "negative",
613 | "type": "CONDITIONING",
614 | "link": 6
615 | },
616 | {
617 | "name": "latent_image",
618 | "type": "LATENT",
619 | "link": 29
620 | }
621 | ],
622 | "outputs": [
623 | {
624 | "name": "LATENT",
625 | "type": "LATENT",
626 | "links": [
627 | 72
628 | ],
629 | "slot_index": 0
630 | }
631 | ],
632 | "properties": {
633 | "Node name for S&R": "KSampler"
634 | },
635 | "widgets_values": [
636 | 506038019252104,
637 | "randomize",
638 | 26,
639 | 6.8,
640 | "dpmpp_3m_sde_gpu",
641 | "exponential",
642 | 0.68
643 | ]
644 | },
645 | {
646 | "id": 13,
647 | "type": "LoraLoader",
648 | "pos": [
649 | 280,
650 | 140
651 | ],
652 | "size": {
653 | "0": 300,
654 | "1": 130
655 | },
656 | "flags": {},
657 | "order": 5,
658 | "mode": 0,
659 | "inputs": [
660 | {
661 | "name": "model",
662 | "type": "MODEL",
663 | "link": 16
664 | },
665 | {
666 | "name": "clip",
667 | "type": "CLIP",
668 | "link": 14
669 | }
670 | ],
671 | "outputs": [
672 | {
673 | "name": "MODEL",
674 | "type": "MODEL",
675 | "links": [
676 | 17
677 | ],
678 | "shape": 3,
679 | "slot_index": 0
680 | },
681 | {
682 | "name": "CLIP",
683 | "type": "CLIP",
684 | "links": [
685 | 15,
686 | 34
687 | ],
688 | "shape": 3,
689 | "slot_index": 1
690 | }
691 | ],
692 | "properties": {
693 | "Node name for S&R": "LoraLoader"
694 | },
695 | "widgets_values": [
696 | "Style\\add_detail.safetensors",
697 | 0.66,
698 | 0.6599999999999999
699 | ]
700 | },
701 | {
702 | "id": 34,
703 | "type": "CyclistMathFloat",
704 | "pos": [
705 | 890,
706 | 550
707 | ],
708 | "size": {
709 | "0": 210,
710 | "1": 80
711 | },
712 | "flags": {},
713 | "order": 13,
714 | "mode": 0,
715 | "inputs": [
716 | {
717 | "name": "float_1",
718 | "type": "FLOAT",
719 | "link": 67,
720 | "widget": {
721 | "name": "float_1"
722 | }
723 | },
724 | {
725 | "name": "float_2",
726 | "type": "FLOAT",
727 | "link": 68,
728 | "widget": {
729 | "name": "float_2"
730 | }
731 | }
732 | ],
733 | "outputs": [
734 | {
735 | "name": "FLOAT",
736 | "type": "FLOAT",
737 | "links": [
738 | 69
739 | ],
740 | "shape": 3,
741 | "slot_index": 0
742 | }
743 | ],
744 | "title": "Pixel Size",
745 | "properties": {
746 | "Node name for S&R": "CyclistMathFloat"
747 | },
748 | "widgets_values": [
749 | "multiplication",
750 | 1,
751 | 1
752 | ]
753 | },
754 | {
755 | "id": 33,
756 | "type": "ReloadLatent",
757 | "pos": [
758 | 450,
759 | 450
760 | ],
761 | "size": {
762 | "0": 210,
763 | "1": 60
764 | },
765 | "flags": {},
766 | "order": 9,
767 | "mode": 0,
768 | "inputs": [
769 | {
770 | "name": "fallback",
771 | "type": "LATENT",
772 | "link": 60
773 | }
774 | ],
775 | "outputs": [
776 | {
777 | "name": "LATENT",
778 | "type": "LATENT",
779 | "links": [
780 | 62,
781 | 64,
782 | 65
783 | ],
784 | "shape": 3,
785 | "slot_index": 0
786 | }
787 | ],
788 | "properties": {
789 | "Node name for S&R": "ReloadLatent"
790 | },
791 | "widgets_values": [
792 | "UpscaleTotal_1"
793 | ]
794 | },
795 | {
796 | "id": 37,
797 | "type": "OverrideLatent",
798 | "pos": [
799 | 2070,
800 | 150
801 | ],
802 | "size": {
803 | "0": 210,
804 | "1": 60
805 | },
806 | "flags": {},
807 | "order": 18,
808 | "mode": 0,
809 | "inputs": [
810 | {
811 | "name": "samples",
812 | "type": "LATENT",
813 | "link": 72
814 | }
815 | ],
816 | "properties": {
817 | "Node name for S&R": "OverrideLatent"
818 | },
819 | "widgets_values": [
820 | "UpscaleTotal_1"
821 | ]
822 | }
823 | ],
824 | "links": [
825 | [
826 | 6,
827 | 7,
828 | 0,
829 | 3,
830 | 2,
831 | "CONDITIONING"
832 | ],
833 | [
834 | 10,
835 | 10,
836 | 0,
837 | 11,
838 | 0,
839 | "IMAGE"
840 | ],
841 | [
842 | 13,
843 | 6,
844 | 0,
845 | 3,
846 | 1,
847 | "CONDITIONING"
848 | ],
849 | [
850 | 14,
851 | 4,
852 | 1,
853 | 13,
854 | 1,
855 | "CLIP"
856 | ],
857 | [
858 | 15,
859 | 13,
860 | 1,
861 | 6,
862 | 0,
863 | "CLIP"
864 | ],
865 | [
866 | 16,
867 | 4,
868 | 0,
869 | 13,
870 | 0,
871 | "MODEL"
872 | ],
873 | [
874 | 17,
875 | 13,
876 | 0,
877 | 3,
878 | 0,
879 | "MODEL"
880 | ],
881 | [
882 | 18,
883 | 14,
884 | 0,
885 | 11,
886 | 1,
887 | "VAE"
888 | ],
889 | [
890 | 29,
891 | 21,
892 | 0,
893 | 3,
894 | 3,
895 | "LATENT"
896 | ],
897 | [
898 | 34,
899 | 13,
900 | 1,
901 | 7,
902 | 0,
903 | "CLIP"
904 | ],
905 | [
906 | 36,
907 | 23,
908 | 0,
909 | 24,
910 | 0,
911 | "IMAGE"
912 | ],
913 | [
914 | 58,
915 | 14,
916 | 0,
917 | 23,
918 | 1,
919 | "VAE"
920 | ],
921 | [
922 | 60,
923 | 11,
924 | 0,
925 | 33,
926 | 0,
927 | "LATENT"
928 | ],
929 | [
930 | 62,
931 | 33,
932 | 0,
933 | 22,
934 | 0,
935 | "*"
936 | ],
937 | [
938 | 63,
939 | 22,
940 | 0,
941 | 21,
942 | 0,
943 | "LATENT"
944 | ],
945 | [
946 | 64,
947 | 33,
948 | 0,
949 | 23,
950 | 0,
951 | "LATENT"
952 | ],
953 | [
954 | 65,
955 | 33,
956 | 0,
957 | 16,
958 | 0,
959 | "LATENT"
960 | ],
961 | [
962 | 67,
963 | 16,
964 | 2,
965 | 34,
966 | 0,
967 | "FLOAT"
968 | ],
969 | [
970 | 68,
971 | 16,
972 | 3,
973 | 34,
974 | 1,
975 | "FLOAT"
976 | ],
977 | [
978 | 69,
979 | 34,
980 | 0,
981 | 36,
982 | 0,
983 | "*"
984 | ],
985 | [
986 | 70,
987 | 35,
988 | 0,
989 | 36,
990 | 1,
991 | "*"
992 | ],
993 | [
994 | 71,
995 | 36,
996 | 0,
997 | 22,
998 | 1,
999 | "BOOLEAN"
1000 | ],
1001 | [
1002 | 72,
1003 | 3,
1004 | 0,
1005 | 37,
1006 | 0,
1007 | "LATENT"
1008 | ]
1009 | ],
1010 | "groups": [],
1011 | "config": {},
1012 | "extra": {},
1013 | "version": 0.4
1014 | }
--------------------------------------------------------------------------------
/workflows/UpscaleToMegapixels.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/UpscaleToMegapixels.png
--------------------------------------------------------------------------------
/workflows/UpscaleToResolution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pos13/comfyui-cyclist/6b6accd84fcd69cb6b04e7f6b500a90c28171fca/workflows/UpscaleToResolution.png
--------------------------------------------------------------------------------