diff --git a/README.md b/README.md index 889f090..f78ecd6 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Also note that the saved workflow format is subject to change until it's been fi ## Features - **No-Code UI Builder** - A novel system for creating your own Stable Diffusion user interfaces from the basic components. -- **Manage Multiple Workflows** - You can open as many workflows as you like and switch between them using tabs within the app. +- **Manage Multiple Workflows** - You can open as many workflows as you like and switch between them using tabs within the app. You can also write custom "Send To" actions to copy your image outputs into other workflows for further processing. - **Use Your Existing Workflows** - Import workflows you've created in ComfyUI into ComfyBox and a new UI will be created for you. - **Extension Support** - All custom ComfyUI nodes are supported out of the box. - **Prompt Queue** - Queue up multiple prompts without waiting for them to finish first. Inspect currently queued and executed prompts. diff --git a/litegraph b/litegraph index 1a77c46..d8fa871 160000 --- a/litegraph +++ b/litegraph @@ -1 +1 @@ -Subproject commit 1a77c461ad33546a41bda3d8d983dabadf9d588a +Subproject commit d8fa87185a258d362f159c04f9045c7930b884bd diff --git a/public/workflows/conditioningRegions.json b/public/workflows/conditioningRegions.json new file mode 100644 index 0000000..d278fda --- /dev/null +++ b/public/workflows/conditioningRegions.json @@ -0,0 +1,9809 @@ +{ + "comfyBoxWorkflow": true, + "createdBy": "ComfyBox", + "version": 1, + "commitHash": "test", + "workflow": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "dfbfcfe3-cc90-47be-9d9a-6ef8566f4164", + "type": "ui/combo", + "pos": [ + -187.3841797000003, + 140.8628620999997 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "e26e11cb-0aa3-4519-afbc-f2c6bf912f66" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "25b1fbf0-4014-46be-a6e6-ea244056620c", + "type": "ui/combo", + "pos": [ + 1427.914716999999, + -184.43097800000007 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "a8808a19-115b-4fad-88e8-11d76adf942e" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "5eb84e5d-df25-4c01-8a3b-2ecf763241cf", + "type": "ui/number", + "pos": [ + 1141, + 202 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "77df0f48-e098-48de-94a9-1affd0bb4d45", + "3762268c-3bf8-4911-a73f-ee0073975646" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 8, + "min": 0, + "max": 40, + "step": 0.5, + "precision": 0 + }, + "widgets_values": [ + "8.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 8, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "664273a8-25f3-4bd3-a882-9ad091d044a7", + "type": "EmptyLatentImage", + "pos": [ + 1064, + 392 + ], + "size": [ + 151.2, + 66 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "width", + "type": "number", + "link": "a900b6d1-6427-48b6-b3a2-5f5200c8ad19", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "height", + "type": "number", + "link": "2ee45247-f2b7-4351-9061-9a0d5af0b2db", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "batch_size", + "type": "number", + "link": "7c303c5a-7dc1-466d-a4ec-e2c9389d9242", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + "58614001-65af-4098-9538-e8335accbce6" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Empty Latent Image", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "789c8800-6e96-4705-ab7a-d3a047ffefca", + "type": "ui/combo", + "pos": [ + 1140, + 222 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "a41cb1e6-0b4e-41c8-99ec-7c6a6c324711", + "4ad86438-4df3-4e21-b1f9-2e11bfde6bdd" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "b301322b-e2c1-4a0c-9b93-702f0ae9c75d", + "type": "ui/combo", + "pos": [ + 1141, + 242 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "0f6b8ed9-040d-474b-9ee5-89d5411852cb", + "73568e55-a89e-42a2-ad1e-67789b193a66" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "8126eae4-fafd-4332-916b-9b5d33b49b04", + "type": "ui/number", + "pos": [ + 934, + 456 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "7c303c5a-7dc1-466d-a4ec-e2c9389d9242", + "8f46d185-bb4f-4872-9441-e749baaea404" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 1, + "min": 1, + "max": 16, + "step": 1, + "precision": 0 + }, + "widgets_values": [ + "1.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "b1d4d347-e813-4890-8fa2-2c2a9671d7c1", + "type": "basic/number", + "pos": [ + 1197, + 321 + ], + "size": [ + 210, + 38 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "98394a9e-c31a-417b-9387-09c267be1ae4" + ], + "properties": {}, + "label": "1.000" + } + ], + "title": "Const Number", + "properties": { + "value": 1, + "tags": [] + } + }, + { + "id": "3d5bb81f-0653-4570-990c-f6e416e7644e", + "type": "ui/number", + "pos": [ + 1517.105716999997, + 305.43802199999993 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "d8843bc1-0512-4ff4-9c4b-5eef209b310a" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 1, + "min": 0, + "max": 1, + "step": 0.01, + "precision": 0 + }, + "widgets_values": [ + "0.560" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 0.56, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "00433bec-d6df-4bcd-ac81-8c6e6e769206", + "type": "ui/number", + "pos": [ + 1136, + 177 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "39f0c208-6ba4-4810-80f4-865a3e21def1" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 20, + "min": 1, + "max": 1000, + "step": 1, + "precision": 0 + }, + "widgets_values": [ + "20.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 20, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "b4f0ddef-3644-426a-8760-02648f159336", + "type": "ui/number", + "pos": [ + 1511.105716999997, + 165.43802200000007 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "c5632290-24e5-46da-b5ab-d46af8fb36c2" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 0, + "min": 1, + "max": 200, + "step": 1, + "precision": 1 + }, + "widgets_values": [ + "20.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 20, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "bfed79c6-aeea-48ed-8b91-acf0399e6c08", + "type": "ConditioningCombine", + "pos": [ + 480.30999999999995, + 223.83000000000007 + ], + "size": [ + 228.39999999999998, + 46 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "conditioning_1", + "type": "CONDITIONING", + "link": "fbb5ab96-8b10-44e4-b7c4-e0b8b6cb7575", + "properties": {}, + "config": {} + }, + { + "name": "conditioning_2", + "type": "CONDITIONING", + "link": "009b21e1-a7d9-4f91-81dc-4c36aa719044", + "properties": {}, + "config": {}, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "c7ebf2d9-0b65-4f27-aa79-7a9318ee227e" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Combine)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "type": "graph/subgraph", + "pos": [ + 169.31, + 194.83000000000007 + ], + "size": [ + 200, + 90 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": "cd0c1ad6-6010-4c83-a7e7-eaaf6f648d24", + "properties": {} + }, + { + "name": "width", + "type": "number", + "link": "0061bcd7-db49-49cc-871f-fc18354d5a4a", + "properties": {} + }, + { + "name": "height", + "type": "number", + "link": "e58d7ed0-d1f8-440c-b35b-2eca4472809f", + "properties": {} + } + ], + "outputs": [ + { + "name": "A", + "type": "CONDITIONING", + "links": [ + "decf2bcb-67c1-47e1-ae5d-c46ddb58db14" + ], + "properties": {} + }, + { + "name": "B", + "type": "CONDITIONING", + "links": [ + "2cf2b105-f9e7-436d-858f-1c4cdd836ac0" + ], + "properties": {} + }, + { + "name": "C", + "type": "CONDITIONING", + "links": [ + "009b21e1-a7d9-4f91-81dc-4c36aa719044" + ], + "properties": {} + }, + { + "name": "D", + "type": "CONDITIONING", + "links": [ + "8ed29fbf-3843-4b26-b85a-b66c7c87ee1b" + ], + "properties": {} + } + ], + "title": "4x Regional Conditioning", + "properties": { + "enabled": true, + "tags": [] + }, + "color": "#2a363b", + "bgColor": "#3f5159", + "subgraph": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "d53b6d52-ec98-49c7-8eda-caf0edb5239c", + "type": "graph/input", + "pos": [ + 98.38849999999958, + 265.92819999999926 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "number", + "links": [ + "71298bcf-12eb-4503-93cc-430e4e5bd435" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "width", + "type": "number", + "value": 0, + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "39e92901-07f4-480c-986e-716b2fd0ddf7", + "type": "graph/output", + "pos": [ + 1010, + 189.7513 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "f2b7bfc4-b254-49e4-b7ab-90ee5f90e1d3", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "B", + "type": "CONDITIONING", + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "de3da259-6d0f-447e-b27e-466cf22bb43c", + "type": "graph/output", + "pos": [ + 1011, + 211.7513 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "0dfd54de-90e0-4362-9726-74d52ad62408", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "C", + "type": "CONDITIONING", + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "b677b407-d8ae-497d-b088-ff1a32950b32", + "type": "graph/output", + "pos": [ + 1014, + 237.7513 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "fe6562da-bc1b-4f2b-9a4d-3fa97105d196", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "D", + "type": "CONDITIONING", + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "20c981cb-ef72-4da4-b195-507589a23712", + "type": "graph/output", + "pos": [ + 1012, + 163 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "be99648c-5338-42fc-b6d1-12872a8a8dd2", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "A", + "type": "CONDITIONING", + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "2289ede7-a532-4d94-ac1d-ed80a99efb83", + "type": "graph/input", + "pos": [ + 107.13530000000007, + 120.91049999999989 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + "22d4d7a2-3769-43b4-95ac-dcc8fb4dda0c" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "clip", + "type": "CLIP", + "value": null, + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "776a6188-141b-4d15-8231-6e9e90192e8c", + "type": "ui/multi_region", + "pos": [ + 188, + 224 + ], + "size": [ + 210, + 186 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + }, + { + "name": "width", + "type": "number", + "link": "71298bcf-12eb-4503-93cc-430e4e5bd435", + "properties": {} + }, + { + "name": "height", + "type": "number", + "link": "e331d0f5-d1f5-444f-806b-295766bea12f", + "properties": {} + } + ], + "outputs": [ + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "region_1", + "type": "COMFYBOX_REGION", + "links": [ + "534c4d92-cc4a-4e1d-a4ce-4bb50566645d" + ], + "properties": {}, + "slot_index": 1 + }, + { + "name": "region_2", + "type": "COMFYBOX_REGION", + "links": [ + "66f0fe4f-a827-4add-8cc7-d22b53a84462" + ], + "properties": {}, + "slot_index": 2 + }, + { + "name": "region_3", + "type": "COMFYBOX_REGION", + "links": [ + "51632838-e614-4b84-ab19-2ad9bff15c04" + ], + "properties": {}, + "slot_index": 3 + }, + { + "name": "region_4", + "type": "COMFYBOX_REGION", + "links": [ + "fe11ebda-d812-4bfb-9384-b5fab737fcdc" + ], + "properties": {}, + "slot_index": 4 + } + ], + "title": "UI.MultiRegion", + "properties": { + "tags": [], + "defaultValue": false, + "regionCount": 4, + "canvasWidth": 1152, + "canvasHeight": 768, + "canvasImageURL": null, + "inputType": "size" + }, + "widgets_values": [ + "[[0.000,0.000,0.350,1.000],[0.183,0.000,0.350,1.000],[0.449,0.000,0.350,1.000],[0.650,0.000,0.350,1.000]]", + "size", + 4 + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": [ + [ + 0, + 0, + 0.35, + 1 + ], + [ + 0.18263888888888896, + 0, + 0.35, + 1 + ], + [ + 0.448611111111111, + 0, + 0.35, + 1 + ], + [ + 0.65, + 0, + 0.35, + 1 + ] + ], + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "6d729580-383a-48a3-9adb-c8945dd97f7a", + "type": "graph/input", + "pos": [ + 97, + 290 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "number", + "links": [ + "e331d0f5-d1f5-444f-806b-295766bea12f" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "height", + "type": "number", + "value": 0, + "subgraphID": "63b37ed5-a9d0-49a5-b944-d7abd1178870", + "tags": [] + } + }, + { + "id": "d74791a6-b382-454a-89fa-efefac768e73", + "type": "graph/subgraph", + "pos": [ + 777, + 145 + ], + "size": [ + 200, + 170 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "conditioning_1", + "type": "CONDITIONING", + "link": "c5976086-c277-48f4-816b-367e5e4fdc59", + "properties": {} + }, + { + "name": "region_1", + "type": "COMFYBOX_REGION", + "link": "534c4d92-cc4a-4e1d-a4ce-4bb50566645d", + "properties": {} + }, + { + "name": "conditioning_2", + "type": "CONDITIONING", + "link": "6049ef76-c70c-4a7b-a494-e2f0727af2eb", + "properties": {} + }, + { + "name": "region_2", + "type": "COMFYBOX_REGION", + "link": "66f0fe4f-a827-4add-8cc7-d22b53a84462", + "properties": {} + }, + { + "name": "conditioning_3", + "type": "CONDITIONING", + "link": "a2de7289-9561-4b99-8aa4-aaf00c746189", + "properties": {} + }, + { + "name": "region_3", + "type": "COMFYBOX_REGION", + "link": "51632838-e614-4b84-ab19-2ad9bff15c04", + "properties": {} + }, + { + "name": "conditioning_4", + "type": "CONDITIONING", + "link": "3b2d0230-37b0-40ef-a71d-20ec9d67cd8a", + "properties": {} + }, + { + "name": "region_4", + "type": "COMFYBOX_REGION", + "link": "fe11ebda-d812-4bfb-9384-b5fab737fcdc", + "properties": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "be99648c-5338-42fc-b6d1-12872a8a8dd2" + ], + "properties": {} + }, + { + "name": "CONDITIONING_1", + "type": "CONDITIONING", + "links": [ + "f2b7bfc4-b254-49e4-b7ab-90ee5f90e1d3" + ], + "properties": {} + }, + { + "name": "CONDITIONING_2", + "type": "CONDITIONING", + "links": [ + "0dfd54de-90e0-4362-9726-74d52ad62408" + ], + "properties": {} + }, + { + "name": "CONDITIONING_3", + "type": "CONDITIONING", + "links": [ + "fe6562da-bc1b-4f2b-9a4d-3fa97105d196" + ], + "properties": {} + } + ], + "title": "4x Conditioning Set Area", + "properties": { + "enabled": true, + "tags": [] + }, + "color": "#2a363b", + "bgColor": "#3f5159", + "subgraph": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "704f058b-6b22-43a4-a1be-6477ce81f3d4", + "type": "utils/region_to_coords", + "pos": [ + 0, + 69.8899354000007 + ], + "size": [ + 168, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "COMFYBOX_REGION", + "link": "f2044826-f166-47cf-8bfd-0b581791c44b", + "properties": {} + } + ], + "outputs": [ + { + "name": "width", + "type": "number", + "links": [ + "d02b18d4-3572-43fb-8236-ab29257c37e1" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "height", + "type": "number", + "links": [ + "3d0e4adc-d969-4cb2-86ee-8367fe190879" + ], + "properties": {}, + "slot_index": 1 + }, + { + "name": "x", + "type": "number", + "links": [ + "5dbff788-17a4-43ed-99ae-db41164769ff" + ], + "properties": {}, + "slot_index": 2 + }, + { + "name": "y", + "type": "number", + "links": [ + "5f6150be-fec9-446a-9d0e-4d3a9f13e2c1" + ], + "properties": {}, + "slot_index": 3 + } + ], + "title": "Comfy.RegionToCoords", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "70581edd-fea5-4a6f-a3d8-2f9519a43f77", + "type": "utils/region_to_coords", + "pos": [ + 6, + 559.5899354000006 + ], + "size": [ + 168, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "COMFYBOX_REGION", + "link": "d7e15623-1436-44c2-ae87-4c0b8c03108a", + "properties": {} + } + ], + "outputs": [ + { + "name": "width", + "type": "number", + "links": [ + "8fc8676e-d167-43b6-a333-69560ab007a3" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "height", + "type": "number", + "links": [ + "11db78cf-5a2f-4a33-a14c-434a5401f1e4" + ], + "properties": {}, + "slot_index": 1 + }, + { + "name": "x", + "type": "number", + "links": [ + "f11611c2-8f63-42ad-8b45-218d7f3b4a83" + ], + "properties": {}, + "slot_index": 2 + }, + { + "name": "y", + "type": "number", + "links": [ + "4f561aa7-48f0-4ee3-aecd-2ba68b87ea44" + ], + "properties": {}, + "slot_index": 3 + } + ], + "title": "Comfy.RegionToCoords", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "a006f684-cd26-4ab5-a858-96bdf50279e4", + "type": "utils/region_to_coords", + "pos": [ + 3.5, + 409.28993540000056 + ], + "size": [ + 168, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "COMFYBOX_REGION", + "link": "a65b0c44-63b5-4e1e-815f-84b082d2a542", + "properties": {} + } + ], + "outputs": [ + { + "name": "width", + "type": "number", + "links": [ + "1c11f034-e15f-4c7b-afc7-af287d73ed9b" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "height", + "type": "number", + "links": [ + "f0fae403-3cd5-448a-be1c-b98153ef1a3b" + ], + "properties": {}, + "slot_index": 1 + }, + { + "name": "x", + "type": "number", + "links": [ + "11a085b0-7c2f-4f85-8ccf-d6f88df6e134" + ], + "properties": {}, + "slot_index": 2 + }, + { + "name": "y", + "type": "number", + "links": [ + "490048ce-b827-4b99-a71d-b36145e6452a" + ], + "properties": {}, + "slot_index": 3 + } + ], + "title": "Comfy.RegionToCoords", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "fca158e5-913c-47bf-9494-8c35619c0f25", + "type": "ConditioningSetArea", + "pos": [ + 205.39999999999986, + 338.5899353999999 + ], + "size": [ + 211.6, + 126 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": "640df27e-50ec-4734-bb65-4685b000168b", + "properties": {}, + "config": {} + }, + { + "name": "width", + "type": "number", + "link": "1c11f034-e15f-4c7b-afc7-af287d73ed9b", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "height", + "type": "number", + "link": "f0fae403-3cd5-448a-be1c-b98153ef1a3b", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "x", + "type": "number", + "link": "11a085b0-7c2f-4f85-8ccf-d6f88df6e134", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "y", + "type": "number", + "link": "490048ce-b827-4b99-a71d-b36145e6452a", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "strength", + "type": "number", + "link": "37037b22-512a-435a-8e16-0f951b5209b9", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "3d6d9a73-964f-445f-854e-6246ca5ddbd7" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Set Area)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + "type": "ConditioningSetArea", + "pos": [ + 212.59999999999957, + 498.88993540000024 + ], + "size": [ + 211.6, + 126 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": "526f02c9-a945-403a-9743-82aed5b3ad91", + "properties": {}, + "config": {} + }, + { + "name": "width", + "type": "number", + "link": "8fc8676e-d167-43b6-a333-69560ab007a3", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "height", + "type": "number", + "link": "11db78cf-5a2f-4a33-a14c-434a5401f1e4", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "x", + "type": "number", + "link": "f11611c2-8f63-42ad-8b45-218d7f3b4a83", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "y", + "type": "number", + "link": "4f561aa7-48f0-4ee3-aecd-2ba68b87ea44", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "strength", + "type": "number", + "link": "0fa239cc-25d5-4f17-ad2c-d6d91bae3e6e", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "1a465537-db3a-488c-b826-74dca7d78fa6" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Set Area)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "78ea5101-df39-4abb-807a-f2e1264466b6", + "type": "ConditioningSetArea", + "pos": [ + 189.98973679999995, + 0 + ], + "size": [ + 211.6, + 126 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": "bf3a6ace-1189-4b84-aed6-d461bf940d86", + "properties": {}, + "config": {} + }, + { + "name": "width", + "type": "number", + "link": "d02b18d4-3572-43fb-8236-ab29257c37e1", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "height", + "type": "number", + "link": "3d0e4adc-d969-4cb2-86ee-8367fe190879", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "x", + "type": "number", + "link": "5dbff788-17a4-43ed-99ae-db41164769ff", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "y", + "type": "number", + "link": "5f6150be-fec9-446a-9d0e-4d3a9f13e2c1", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "strength", + "type": "number", + "link": "59f45d82-b0ea-43f5-b869-797a3168c9f3", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "34f6ecac-12df-4f76-a9d0-d2496e70953b" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Set Area)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "480676d1-19c7-4a41-b3fd-aa979066f319", + "type": "ConditioningSetArea", + "pos": [ + 199.57944050000003, + 167.0512829 + ], + "size": [ + 211.6, + 126 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": "ae93694e-8ca9-4507-b376-736481198375", + "properties": {}, + "config": {} + }, + { + "name": "width", + "type": "number", + "link": "5dd19932-23f9-489c-81a5-1101b56ffb45", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "height", + "type": "number", + "link": "87eb1f3a-e5ca-49ae-a2c6-0c19d6dadfa6", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "x", + "type": "number", + "link": "c5316639-3216-4dc2-8322-1b355dc5aebf", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "y", + "type": "number", + "link": "e2763c33-9034-4f13-9b4d-716cc220d93c", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "strength", + "type": "number", + "link": "549e2e87-c536-4cba-b945-e5eb10e8bdca", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "310393bd-dcfb-472f-940d-d0a3aa8bf0a9" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Set Area)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "83b9fe67-84c9-4d6b-8782-1adb6a75ae68", + "type": "utils/region_to_coords", + "pos": [ + 9.1078629000001, + 239 + ], + "size": [ + 168, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "COMFYBOX_REGION", + "link": "cdca1b32-d77c-43e4-a0f5-4c3fd6bf6936", + "properties": {} + } + ], + "outputs": [ + { + "name": "width", + "type": "number", + "links": [ + "5dd19932-23f9-489c-81a5-1101b56ffb45" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "height", + "type": "number", + "links": [ + "87eb1f3a-e5ca-49ae-a2c6-0c19d6dadfa6" + ], + "properties": {}, + "slot_index": 1 + }, + { + "name": "x", + "type": "number", + "links": [ + "c5316639-3216-4dc2-8322-1b355dc5aebf" + ], + "properties": {}, + "slot_index": 2 + }, + { + "name": "y", + "type": "number", + "links": [ + "e2763c33-9034-4f13-9b4d-716cc220d93c" + ], + "properties": {}, + "slot_index": 3 + } + ], + "title": "Comfy.RegionToCoords", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "8943401e-086c-47d9-a4e3-b2555edead45", + "type": "graph/input", + "pos": [ + -139, + 67 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "COMFYBOX_REGION", + "links": [ + "f2044826-f166-47cf-8bfd-0b581791c44b" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "region_1", + "type": "COMFYBOX_REGION", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "e43637f0-69c7-4db4-b83b-dd2ef89beca3", + "type": "graph/input", + "pos": [ + 46, + 193 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + "ae93694e-8ca9-4507-b376-736481198375" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "conditioning_2", + "type": "CONDITIONING", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "8d4f0314-066e-452b-8c14-259844875254", + "type": "graph/input", + "pos": [ + -108, + 240 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "COMFYBOX_REGION", + "links": [ + "cdca1b32-d77c-43e4-a0f5-4c3fd6bf6936" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "region_2", + "type": "COMFYBOX_REGION", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "2a54abd3-180d-45af-94f3-24556d28cfc0", + "type": "graph/input", + "pos": [ + 61, + 365 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + "640df27e-50ec-4734-bb65-4685b000168b" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "conditioning_3", + "type": "CONDITIONING", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "f5b8ba17-c2eb-4eff-9475-e3146787f9ba", + "type": "graph/input", + "pos": [ + -120, + 410 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "COMFYBOX_REGION", + "links": [ + "a65b0c44-63b5-4e1e-815f-84b082d2a542" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "region_3", + "type": "COMFYBOX_REGION", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "7a8a07f7-9229-44f5-b433-9c4fe956c961", + "type": "graph/input", + "pos": [ + 61, + 522 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + "526f02c9-a945-403a-9743-82aed5b3ad91" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "conditioning_4", + "type": "CONDITIONING", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "c849d726-d63b-47f1-93ab-117885ff4253", + "type": "graph/input", + "pos": [ + -108, + 560 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "COMFYBOX_REGION", + "links": [ + "d7e15623-1436-44c2-ae87-4c0b8c03108a" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "region_4", + "type": "COMFYBOX_REGION", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "e00fbcb7-0790-4930-8424-044401fb2247", + "type": "graph/input", + "pos": [ + 43, + 24 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + "bf3a6ace-1189-4b84-aed6-d461bf940d86" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "conditioning_1", + "type": "CONDITIONING", + "value": null, + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "e38157fb-2abc-400f-9fb2-2a53d494dde8", + "type": "graph/output", + "pos": [ + 430, + 25 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "34f6ecac-12df-4f76-a9d0-d2496e70953b", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "CONDITIONING", + "type": "CONDITIONING", + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "72722e27-3e05-4d2e-a2b2-1b1a26fa57d8", + "type": "graph/output", + "pos": [ + 434, + 191 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "310393bd-dcfb-472f-940d-d0a3aa8bf0a9", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "CONDITIONING_1", + "type": "CONDITIONING", + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "601572ab-4b78-414d-88c2-bbd56231dd80", + "type": "graph/output", + "pos": [ + 470, + 525 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "1a465537-db3a-488c-b826-74dca7d78fa6", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "CONDITIONING_3", + "type": "CONDITIONING", + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "4037f80f-bed0-467b-93d5-ed46c0a29f0c", + "type": "graph/output", + "pos": [ + 441, + 367 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "3d6d9a73-964f-445f-854e-6246ca5ddbd7", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "CONDITIONING_2", + "type": "CONDITIONING", + "subgraphID": "d74791a6-b382-454a-89fa-efefac768e73", + "tags": [] + } + }, + { + "id": "8b142cf8-36b3-41ca-a598-00b241fc2894", + "type": "ui/number", + "pos": [ + 77, + 126 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "59f45d82-b0ea-43f5-b869-797a3168c9f3" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 1, + "min": 0, + "max": 10, + "step": 0.01, + "precision": 0 + }, + "widgets_values": [ + "1.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "eab7388c-7a04-4a07-8c96-8b6578a2796f", + "type": "ui/number", + "pos": [ + 79, + 290 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "549e2e87-c536-4cba-b945-e5eb10e8bdca" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 1, + "min": 0, + "max": 10, + "step": 0.01, + "precision": 0 + }, + "widgets_values": [ + "1.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "4e496f27-7155-4e9b-823d-93135d0ec6fc", + "type": "ui/number", + "pos": [ + 76, + 464 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "37037b22-512a-435a-8e16-0f951b5209b9" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 1, + "min": 0, + "max": 10, + "step": 0.01, + "precision": 0 + }, + "widgets_values": [ + "1.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "88f6254d-8981-4b74-a2ba-4f4afcb59ec6", + "type": "ui/number", + "pos": [ + 97, + 625 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "0fa239cc-25d5-4f17-ad2c-d6d91bae3e6e" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 1, + "min": 0, + "max": 10, + "step": 0.01, + "precision": 0 + }, + "widgets_values": [ + "1.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + } + ], + "links": [ + [ + "bf3a6ace-1189-4b84-aed6-d461bf940d86", + "e00fbcb7-0790-4930-8424-044401fb2247", + 0, + "78ea5101-df39-4abb-807a-f2e1264466b6", + 0, + "CONDITIONING" + ], + [ + "f2044826-f166-47cf-8bfd-0b581791c44b", + "8943401e-086c-47d9-a4e3-b2555edead45", + 0, + "704f058b-6b22-43a4-a1be-6477ce81f3d4", + 0, + "COMFYBOX_REGION" + ], + [ + "ae93694e-8ca9-4507-b376-736481198375", + "e43637f0-69c7-4db4-b83b-dd2ef89beca3", + 0, + "480676d1-19c7-4a41-b3fd-aa979066f319", + 0, + "CONDITIONING" + ], + [ + "cdca1b32-d77c-43e4-a0f5-4c3fd6bf6936", + "8d4f0314-066e-452b-8c14-259844875254", + 0, + "83b9fe67-84c9-4d6b-8782-1adb6a75ae68", + 0, + "COMFYBOX_REGION" + ], + [ + "640df27e-50ec-4734-bb65-4685b000168b", + "2a54abd3-180d-45af-94f3-24556d28cfc0", + 0, + "fca158e5-913c-47bf-9494-8c35619c0f25", + 0, + "CONDITIONING" + ], + [ + "a65b0c44-63b5-4e1e-815f-84b082d2a542", + "f5b8ba17-c2eb-4eff-9475-e3146787f9ba", + 0, + "a006f684-cd26-4ab5-a858-96bdf50279e4", + 0, + "COMFYBOX_REGION" + ], + [ + "526f02c9-a945-403a-9743-82aed5b3ad91", + "7a8a07f7-9229-44f5-b433-9c4fe956c961", + 0, + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 0, + "CONDITIONING" + ], + [ + "d7e15623-1436-44c2-ae87-4c0b8c03108a", + "c849d726-d63b-47f1-93ab-117885ff4253", + 0, + "70581edd-fea5-4a6f-a3d8-2f9519a43f77", + 0, + "COMFYBOX_REGION" + ], + [ + "34f6ecac-12df-4f76-a9d0-d2496e70953b", + "78ea5101-df39-4abb-807a-f2e1264466b6", + 0, + "e38157fb-2abc-400f-9fb2-2a53d494dde8", + 0, + "CONDITIONING" + ], + [ + "310393bd-dcfb-472f-940d-d0a3aa8bf0a9", + "480676d1-19c7-4a41-b3fd-aa979066f319", + 0, + "72722e27-3e05-4d2e-a2b2-1b1a26fa57d8", + 0, + "CONDITIONING" + ], + [ + "3d6d9a73-964f-445f-854e-6246ca5ddbd7", + "fca158e5-913c-47bf-9494-8c35619c0f25", + 0, + "4037f80f-bed0-467b-93d5-ed46c0a29f0c", + 0, + "CONDITIONING" + ], + [ + "1a465537-db3a-488c-b826-74dca7d78fa6", + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 0, + "601572ab-4b78-414d-88c2-bbd56231dd80", + 0, + "CONDITIONING" + ], + [ + "59f45d82-b0ea-43f5-b869-797a3168c9f3", + "8b142cf8-36b3-41ca-a598-00b241fc2894", + 0, + "78ea5101-df39-4abb-807a-f2e1264466b6", + 5, + "number" + ], + [ + "549e2e87-c536-4cba-b945-e5eb10e8bdca", + "eab7388c-7a04-4a07-8c96-8b6578a2796f", + 0, + "480676d1-19c7-4a41-b3fd-aa979066f319", + 5, + "number" + ], + [ + "0fa239cc-25d5-4f17-ad2c-d6d91bae3e6e", + "88f6254d-8981-4b74-a2ba-4f4afcb59ec6", + 0, + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 5, + "number" + ], + [ + "37037b22-512a-435a-8e16-0f951b5209b9", + "4e496f27-7155-4e9b-823d-93135d0ec6fc", + 0, + "fca158e5-913c-47bf-9494-8c35619c0f25", + 5, + "number" + ], + [ + "d02b18d4-3572-43fb-8236-ab29257c37e1", + "704f058b-6b22-43a4-a1be-6477ce81f3d4", + 0, + "78ea5101-df39-4abb-807a-f2e1264466b6", + 1, + "number" + ], + [ + "3d0e4adc-d969-4cb2-86ee-8367fe190879", + "704f058b-6b22-43a4-a1be-6477ce81f3d4", + 1, + "78ea5101-df39-4abb-807a-f2e1264466b6", + 2, + "number" + ], + [ + "5dbff788-17a4-43ed-99ae-db41164769ff", + "704f058b-6b22-43a4-a1be-6477ce81f3d4", + 2, + "78ea5101-df39-4abb-807a-f2e1264466b6", + 3, + "number" + ], + [ + "5f6150be-fec9-446a-9d0e-4d3a9f13e2c1", + "704f058b-6b22-43a4-a1be-6477ce81f3d4", + 3, + "78ea5101-df39-4abb-807a-f2e1264466b6", + 4, + "number" + ], + [ + "8fc8676e-d167-43b6-a333-69560ab007a3", + "70581edd-fea5-4a6f-a3d8-2f9519a43f77", + 0, + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 1, + "number" + ], + [ + "11db78cf-5a2f-4a33-a14c-434a5401f1e4", + "70581edd-fea5-4a6f-a3d8-2f9519a43f77", + 1, + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 2, + "number" + ], + [ + "f11611c2-8f63-42ad-8b45-218d7f3b4a83", + "70581edd-fea5-4a6f-a3d8-2f9519a43f77", + 2, + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 3, + "number" + ], + [ + "4f561aa7-48f0-4ee3-aecd-2ba68b87ea44", + "70581edd-fea5-4a6f-a3d8-2f9519a43f77", + 3, + "df4e2576-e7cf-4541-bbeb-1c4c639e592a", + 4, + "number" + ], + [ + "1c11f034-e15f-4c7b-afc7-af287d73ed9b", + "a006f684-cd26-4ab5-a858-96bdf50279e4", + 0, + "fca158e5-913c-47bf-9494-8c35619c0f25", + 1, + "number" + ], + [ + "f0fae403-3cd5-448a-be1c-b98153ef1a3b", + "a006f684-cd26-4ab5-a858-96bdf50279e4", + 1, + "fca158e5-913c-47bf-9494-8c35619c0f25", + 2, + "number" + ], + [ + "11a085b0-7c2f-4f85-8ccf-d6f88df6e134", + "a006f684-cd26-4ab5-a858-96bdf50279e4", + 2, + "fca158e5-913c-47bf-9494-8c35619c0f25", + 3, + "number" + ], + [ + "490048ce-b827-4b99-a71d-b36145e6452a", + "a006f684-cd26-4ab5-a858-96bdf50279e4", + 3, + "fca158e5-913c-47bf-9494-8c35619c0f25", + 4, + "number" + ], + [ + "5dd19932-23f9-489c-81a5-1101b56ffb45", + "83b9fe67-84c9-4d6b-8782-1adb6a75ae68", + 0, + "480676d1-19c7-4a41-b3fd-aa979066f319", + 1, + "number" + ], + [ + "87eb1f3a-e5ca-49ae-a2c6-0c19d6dadfa6", + "83b9fe67-84c9-4d6b-8782-1adb6a75ae68", + 1, + "480676d1-19c7-4a41-b3fd-aa979066f319", + 2, + "number" + ], + [ + "c5316639-3216-4dc2-8322-1b355dc5aebf", + "83b9fe67-84c9-4d6b-8782-1adb6a75ae68", + 2, + "480676d1-19c7-4a41-b3fd-aa979066f319", + 3, + "number" + ], + [ + "e2763c33-9034-4f13-9b4d-716cc220d93c", + "83b9fe67-84c9-4d6b-8782-1adb6a75ae68", + 3, + "480676d1-19c7-4a41-b3fd-aa979066f319", + 4, + "number" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + } + }, + { + "id": "875e748c-a014-4e3b-aaf9-6a2355e8783b", + "type": "graph/subgraph", + "pos": [ + 187, + 96 + ], + "size": [ + 200, + 90 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": "22d4d7a2-3769-43b4-95ac-dcc8fb4dda0c", + "properties": {} + } + ], + "outputs": [ + { + "name": "A", + "type": "CONDITIONING", + "links": [ + "c5976086-c277-48f4-816b-367e5e4fdc59" + ], + "properties": {} + }, + { + "name": "B", + "type": "CONDITIONING", + "links": [ + "6049ef76-c70c-4a7b-a494-e2f0727af2eb" + ], + "properties": {} + }, + { + "name": "C", + "type": "CONDITIONING", + "links": [ + "a2de7289-9561-4b99-8aa4-aaf00c746189" + ], + "properties": {} + }, + { + "name": "D", + "type": "CONDITIONING", + "links": [ + "3b2d0230-37b0-40ef-a71d-20ec9d67cd8a" + ], + "properties": {} + } + ], + "title": "4x CLIP Text Encode", + "properties": { + "enabled": true, + "tags": [] + }, + "color": "#2a363b", + "bgColor": "#3f5159", + "subgraph": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "ab42e00d-7c37-49b8-9e6a-3a99b43c36e7", + "type": "ui/text", + "pos": [ + 0, + 24 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "66ff07ab-f7f8-4174-bdc0-895b827f9a8f" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": true, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "masterpiece, 1girl, city street, cityscape, full body, happy, red hair, red eyes, looking at another, eye contact, red skirt" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "masterpiece, 1girl, city street, cityscape, full body, happy, red hair, red eyes, looking at another, eye contact, red skirt", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "c26db5a1-497e-4fd9-a419-f6d5bce07675", + "type": "ui/text", + "pos": [ + 5.999999999999943, + 107.99999999999989 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "eae5cb96-4b99-4512-9b4d-1de4c3b217cf" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": true, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "masterpiece, 1girl, city street, cityscape, full body, happy, blue hair, blue eyes, looking at another, eye contact, blue skirt" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "masterpiece, 1girl, city street, cityscape, full body, happy, blue hair, blue eyes, looking at another, eye contact, blue skirt", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "8f906cf9-e254-4a32-aa04-367e063a4f71", + "type": "ui/text", + "pos": [ + 0, + 196.00000000000003 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "33b0e7c4-9a5e-4bd3-8465-3b0094dfaf28" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": true, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "masterpiece, 1girl, city street, cityscape, full body, happy, yellow hair, yellow eyes, looking at another, eye contact, yellow skirt" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "masterpiece, 1girl, city street, cityscape, full body, happy, yellow hair, yellow eyes, looking at another, eye contact, yellow skirt", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "80410a47-966b-4d51-b54c-43b98aba786d", + "type": "ui/text", + "pos": [ + 3, + 281.0000000000001 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "4c462569-5550-40d8-a761-c9d03921ae06" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": true, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "masterpiece, 1girl, city street, cityscape, full body, happy, green hair, green eyes, looking at another, eye contact, green skirt" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "masterpiece, 1girl, city street, cityscape, full body, happy, green hair, green eyes, looking at another, eye contact, green skirt", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "d8b09362-a8a6-4e31-8cf2-1de9ce2111da", + "type": "CLIPTextEncode", + "pos": [ + 129.99999999999977, + 0 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "string", + "link": "66ff07ab-f7f8-4174-bdc0-895b827f9a8f", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + }, + { + "name": "clip", + "type": "CLIP", + "link": "2acf6041-ea77-4c47-8dcf-477c92700c7d", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "cd24efd5-9165-4ba3-864f-5df22e5031c0" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Prompt)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "8146d662-1542-449b-bfa3-6d95a0f1a5f2", + "type": "CLIPTextEncode", + "pos": [ + 135.5999999999999, + 84.49999999999994 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "string", + "link": "eae5cb96-4b99-4512-9b4d-1de4c3b217cf", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + }, + { + "name": "clip", + "type": "CLIP", + "link": "21c570a9-3f3a-4fd2-b808-9ad050e1983e", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "7583ae05-e2a2-4b9e-872a-1ecc0ff4753b" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Prompt)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "36998d3a-edea-473b-afe2-d85a93397a37", + "type": "CLIPTextEncode", + "pos": [ + 129.99999999999977, + 171.99999999999991 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "string", + "link": "33b0e7c4-9a5e-4bd3-8465-3b0094dfaf28", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + }, + { + "name": "clip", + "type": "CLIP", + "link": "442753af-e588-46c5-8302-684babf12339", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "bb5f1e63-793b-44bc-b838-808c3cfd6dba" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Prompt)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "f03c9f32-9600-4374-900e-37338e5a0520", + "type": "CLIPTextEncode", + "pos": [ + 131.60980000000006, + 257.5384606 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "string", + "link": "4c462569-5550-40d8-a761-c9d03921ae06", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + }, + { + "name": "clip", + "type": "CLIP", + "link": "262ae874-ee26-4737-87e6-6d268f484d4f", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "bff1f43f-5333-4647-b9b8-abda0a963cd2" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Prompt)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "80e3fb89-12c5-4a21-9a89-91c162c8521e", + "type": "graph/input", + "pos": [ + -235, + 142 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + "2acf6041-ea77-4c47-8dcf-477c92700c7d", + "21c570a9-3f3a-4fd2-b808-9ad050e1983e", + "442753af-e588-46c5-8302-684babf12339", + "262ae874-ee26-4737-87e6-6d268f484d4f" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "clip", + "type": "CLIP", + "value": null, + "subgraphID": "875e748c-a014-4e3b-aaf9-6a2355e8783b", + "tags": [] + } + }, + { + "id": "3e2fd78d-a013-4ead-85c9-74ea6fd261f3", + "type": "graph/output", + "pos": [ + 370, + 23 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "cd24efd5-9165-4ba3-864f-5df22e5031c0", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "A", + "type": "CONDITIONING", + "subgraphID": "875e748c-a014-4e3b-aaf9-6a2355e8783b", + "tags": [] + } + }, + { + "id": "975c2424-5271-4797-8b3d-64bb00a7f859", + "type": "graph/output", + "pos": [ + 371, + 110 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "7583ae05-e2a2-4b9e-872a-1ecc0ff4753b", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "B", + "type": "CONDITIONING", + "subgraphID": "875e748c-a014-4e3b-aaf9-6a2355e8783b", + "tags": [] + } + }, + { + "id": "a46951d9-6f13-4743-be5f-1eac10691f9f", + "type": "graph/output", + "pos": [ + 366, + 194 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "bb5f1e63-793b-44bc-b838-808c3cfd6dba", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "C", + "type": "CONDITIONING", + "subgraphID": "875e748c-a014-4e3b-aaf9-6a2355e8783b", + "tags": [] + } + }, + { + "id": "04e9a9b7-d151-4364-b868-75902d3c75ee", + "type": "graph/output", + "pos": [ + 359, + 285 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "bff1f43f-5333-4647-b9b8-abda0a963cd2", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "D", + "type": "CONDITIONING", + "subgraphID": "875e748c-a014-4e3b-aaf9-6a2355e8783b", + "tags": [] + } + } + ], + "links": [ + [ + "2acf6041-ea77-4c47-8dcf-477c92700c7d", + "80e3fb89-12c5-4a21-9a89-91c162c8521e", + 0, + "d8b09362-a8a6-4e31-8cf2-1de9ce2111da", + 1, + "CLIP" + ], + [ + "21c570a9-3f3a-4fd2-b808-9ad050e1983e", + "80e3fb89-12c5-4a21-9a89-91c162c8521e", + 0, + "8146d662-1542-449b-bfa3-6d95a0f1a5f2", + 1, + "CLIP" + ], + [ + "442753af-e588-46c5-8302-684babf12339", + "80e3fb89-12c5-4a21-9a89-91c162c8521e", + 0, + "36998d3a-edea-473b-afe2-d85a93397a37", + 1, + "CLIP" + ], + [ + "262ae874-ee26-4737-87e6-6d268f484d4f", + "80e3fb89-12c5-4a21-9a89-91c162c8521e", + 0, + "f03c9f32-9600-4374-900e-37338e5a0520", + 1, + "CLIP" + ], + [ + "cd24efd5-9165-4ba3-864f-5df22e5031c0", + "d8b09362-a8a6-4e31-8cf2-1de9ce2111da", + 0, + "3e2fd78d-a013-4ead-85c9-74ea6fd261f3", + 0, + "CONDITIONING" + ], + [ + "7583ae05-e2a2-4b9e-872a-1ecc0ff4753b", + "8146d662-1542-449b-bfa3-6d95a0f1a5f2", + 0, + "975c2424-5271-4797-8b3d-64bb00a7f859", + 0, + "CONDITIONING" + ], + [ + "bb5f1e63-793b-44bc-b838-808c3cfd6dba", + "36998d3a-edea-473b-afe2-d85a93397a37", + 0, + "a46951d9-6f13-4743-be5f-1eac10691f9f", + 0, + "CONDITIONING" + ], + [ + "bff1f43f-5333-4647-b9b8-abda0a963cd2", + "f03c9f32-9600-4374-900e-37338e5a0520", + 0, + "04e9a9b7-d151-4364-b868-75902d3c75ee", + 0, + "CONDITIONING" + ], + [ + "66ff07ab-f7f8-4174-bdc0-895b827f9a8f", + "ab42e00d-7c37-49b8-9e6a-3a99b43c36e7", + 0, + "d8b09362-a8a6-4e31-8cf2-1de9ce2111da", + 0, + "string" + ], + [ + "eae5cb96-4b99-4512-9b4d-1de4c3b217cf", + "c26db5a1-497e-4fd9-a419-f6d5bce07675", + 0, + "8146d662-1542-449b-bfa3-6d95a0f1a5f2", + 0, + "string" + ], + [ + "33b0e7c4-9a5e-4bd3-8465-3b0094dfaf28", + "8f906cf9-e254-4a32-aa04-367e063a4f71", + 0, + "36998d3a-edea-473b-afe2-d85a93397a37", + 0, + "string" + ], + [ + "4c462569-5550-40d8-a761-c9d03921ae06", + "80410a47-966b-4d51-b54c-43b98aba786d", + 0, + "f03c9f32-9600-4374-900e-37338e5a0520", + 0, + "string" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + } + } + ], + "links": [ + [ + "71298bcf-12eb-4503-93cc-430e4e5bd435", + "d53b6d52-ec98-49c7-8eda-caf0edb5239c", + 0, + "776a6188-141b-4d15-8231-6e9e90192e8c", + 1, + "number" + ], + [ + "e331d0f5-d1f5-444f-806b-295766bea12f", + "6d729580-383a-48a3-9adb-c8945dd97f7a", + 0, + "776a6188-141b-4d15-8231-6e9e90192e8c", + 2, + "number" + ], + [ + "534c4d92-cc4a-4e1d-a4ce-4bb50566645d", + "776a6188-141b-4d15-8231-6e9e90192e8c", + 1, + "d74791a6-b382-454a-89fa-efefac768e73", + 1, + "COMFYBOX_REGION" + ], + [ + "66f0fe4f-a827-4add-8cc7-d22b53a84462", + "776a6188-141b-4d15-8231-6e9e90192e8c", + 2, + "d74791a6-b382-454a-89fa-efefac768e73", + 3, + "COMFYBOX_REGION" + ], + [ + "51632838-e614-4b84-ab19-2ad9bff15c04", + "776a6188-141b-4d15-8231-6e9e90192e8c", + 3, + "d74791a6-b382-454a-89fa-efefac768e73", + 5, + "COMFYBOX_REGION" + ], + [ + "fe11ebda-d812-4bfb-9384-b5fab737fcdc", + "776a6188-141b-4d15-8231-6e9e90192e8c", + 4, + "d74791a6-b382-454a-89fa-efefac768e73", + 7, + "COMFYBOX_REGION" + ], + [ + "be99648c-5338-42fc-b6d1-12872a8a8dd2", + "d74791a6-b382-454a-89fa-efefac768e73", + 0, + "20c981cb-ef72-4da4-b195-507589a23712", + 0, + "CONDITIONING" + ], + [ + "f2b7bfc4-b254-49e4-b7ab-90ee5f90e1d3", + "d74791a6-b382-454a-89fa-efefac768e73", + 1, + "39e92901-07f4-480c-986e-716b2fd0ddf7", + 0, + "CONDITIONING" + ], + [ + "0dfd54de-90e0-4362-9726-74d52ad62408", + "d74791a6-b382-454a-89fa-efefac768e73", + 2, + "de3da259-6d0f-447e-b27e-466cf22bb43c", + 0, + "CONDITIONING" + ], + [ + "fe6562da-bc1b-4f2b-9a4d-3fa97105d196", + "d74791a6-b382-454a-89fa-efefac768e73", + 3, + "b677b407-d8ae-497d-b088-ff1a32950b32", + 0, + "CONDITIONING" + ], + [ + "22d4d7a2-3769-43b4-95ac-dcc8fb4dda0c", + "2289ede7-a532-4d94-ac1d-ed80a99efb83", + 0, + "875e748c-a014-4e3b-aaf9-6a2355e8783b", + 0, + "CLIP" + ], + [ + "c5976086-c277-48f4-816b-367e5e4fdc59", + "875e748c-a014-4e3b-aaf9-6a2355e8783b", + 0, + "d74791a6-b382-454a-89fa-efefac768e73", + 0, + "CONDITIONING" + ], + [ + "6049ef76-c70c-4a7b-a494-e2f0727af2eb", + "875e748c-a014-4e3b-aaf9-6a2355e8783b", + 1, + "d74791a6-b382-454a-89fa-efefac768e73", + 2, + "CONDITIONING" + ], + [ + "a2de7289-9561-4b99-8aa4-aaf00c746189", + "875e748c-a014-4e3b-aaf9-6a2355e8783b", + 2, + "d74791a6-b382-454a-89fa-efefac768e73", + 4, + "CONDITIONING" + ], + [ + "3b2d0230-37b0-40ef-a71d-20ec9d67cd8a", + "875e748c-a014-4e3b-aaf9-6a2355e8783b", + 3, + "d74791a6-b382-454a-89fa-efefac768e73", + 6, + "CONDITIONING" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + } + }, + { + "id": "44d79d5d-21a7-4ce7-927d-4656f902fad0", + "type": "CheckpointLoaderSimple", + "pos": [ + -57.69000000000004, + 116.82999999999993 + ], + "size": [ + 140, + 66 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "ckpt_name", + "type": "string", + "link": "e26e11cb-0aa3-4519-afbc-f2c6bf912f66", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + "76a3a3ff-e96c-4e70-89e6-bbedf972cd80", + "0a5897e2-423c-4eb9-a3b3-ec9d72ba6d0a" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + "cd0c1ad6-6010-4c83-a7e7-eaaf6f648d24", + "8501139f-e47d-4f1d-adad-2d43412c535e" + ], + "properties": {}, + "shape": 3, + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [], + "properties": {}, + "shape": 3 + } + ], + "title": "Load Checkpoint", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "59272bf6-089c-42c0-93c7-f59eed127304", + "type": "VAEDecode", + "pos": [ + 2201.1057169999985, + 60.43802199999998 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": "6e2078f5-8dd6-474f-82a1-7a2ed5882bb8", + "properties": {}, + "config": {} + }, + { + "name": "vae", + "type": "VAE", + "link": "0f5295f5-f936-42d2-85a9-f615bf385b5d", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + "b458f085-111c-4dbd-bf3b-dc243deece16" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "VAE Decode", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "c69d01b8-90c7-456c-80b4-db4db5cc5585", + "type": "VAELoader", + "pos": [ + 1559.1057169999974, + -207.56197799999993 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "vae_name", + "type": "string", + "link": "a8808a19-115b-4fad-88e8-11d76adf942e", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + } + ], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + "0f5295f5-f936-42d2-85a9-f615bf385b5d", + "fc2d2bf6-ff19-4ac6-a97e-f3898a2172f8" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Load VAE", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "69355b65-e85f-4d59-bdcd-bdf411a76f76", + "type": "ConditioningCombine", + "pos": [ + 471.3099999999999, + 135.82999999999998 + ], + "size": [ + 228.39999999999998, + 46 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "conditioning_1", + "type": "CONDITIONING", + "link": "decf2bcb-67c1-47e1-ae5d-c46ddb58db14", + "properties": {}, + "slot_index": 0, + "config": {} + }, + { + "name": "conditioning_2", + "type": "CONDITIONING", + "link": "2cf2b105-f9e7-436d-858f-1c4cdd836ac0", + "properties": {}, + "slot_index": 1, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "fbb5ab96-8b10-44e4-b7c4-e0b8b6cb7575" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Combine)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + "type": "KSampler", + "pos": [ + 1270.5511363636365, + 117.81818181818181 + ], + "size": [ + 161.2, + 206 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": "76a3a3ff-e96c-4e70-89e6-bbedf972cd80", + "properties": {}, + "config": {} + }, + { + "name": "seed", + "type": "number", + "link": "7bafd1c6-f817-4d29-af35-c5f3f043fec3", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "steps", + "type": "number", + "link": "39f0c208-6ba4-4810-80f4-865a3e21def1", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "cfg", + "type": "number", + "link": "77df0f48-e098-48de-94a9-1affd0bb4d45", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "sampler_name", + "type": "string", + "link": "a41cb1e6-0b4e-41c8-99ec-7c6a6c324711", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + }, + { + "name": "scheduler", + "type": "string", + "link": "0f6b8ed9-040d-474b-9ee5-89d5411852cb", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": "e3e0c4f6-2877-469b-9410-733a182634ec", + "properties": {}, + "config": {} + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": "f7fe1fa2-735c-4e58-a571-5a981cb6485d", + "properties": {}, + "config": {} + }, + { + "name": "latent_image", + "type": "LATENT", + "link": "58614001-65af-4098-9538-e8335accbce6", + "properties": {}, + "config": {} + }, + { + "name": "denoise", + "type": "number", + "link": "98394a9e-c31a-417b-9387-09c267be1ae4", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true, + "slot_index": 9 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + "bfb1cbb9-2adc-491d-ae70-969e9ab4cca4", + "c97c40c8-1bdc-491e-b898-f70f0b6f803f" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "KSampler", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "cf1bbef8-e5ea-4420-bd5a-7461066a6811", + "type": "ConditioningCombine", + "pos": [ + 479, + 315 + ], + "size": [ + 228.39999999999998, + 46 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "conditioning_1", + "type": "CONDITIONING", + "link": "c7ebf2d9-0b65-4f27-aa79-7a9318ee227e", + "properties": {}, + "config": {} + }, + { + "name": "conditioning_2", + "type": "CONDITIONING", + "link": "8ed29fbf-3843-4b26-b85a-b66c7c87ee1b", + "properties": {}, + "config": {}, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "7b7c37d4-aaab-4cc1-a94e-dd11b27e9bd1" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Combine)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "922f9889-8a18-4744-9caf-8eaac698a77b", + "type": "ConditioningCombine", + "pos": [ + 790, + 247 + ], + "size": [ + 228.39999999999998, + 46 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "conditioning_1", + "type": "CONDITIONING", + "link": "7b7c37d4-aaab-4cc1-a94e-dd11b27e9bd1", + "properties": {}, + "slot_index": 0, + "config": {} + }, + { + "name": "conditioning_2", + "type": "CONDITIONING", + "link": "bdce8056-5c70-462d-854f-7542f247c817", + "properties": {}, + "slot_index": 1, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "e3e0c4f6-2877-469b-9410-733a182634ec" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Conditioning (Combine)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "a950c6d6-9c70-451e-b713-e9c645c328af", + "type": "graph/subgraph", + "pos": [ + 824, + 54 + ], + "size": [ + 200, + 50 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": "8501139f-e47d-4f1d-adad-2d43412c535e", + "properties": {} + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + "59369121-320c-4a84-93a1-3e4f0b789f25", + "bdce8056-5c70-462d-854f-7542f247c817" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + "f7fe1fa2-735c-4e58-a571-5a981cb6485d", + "064b8317-c5b4-42ff-a5f0-af9b67ae35e0" + ], + "properties": {}, + "slot_index": 1 + } + ], + "title": "2x Prompt", + "properties": { + "enabled": true, + "tags": [] + }, + "color": "#2a363b", + "bgColor": "#3f5159", + "subgraph": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "362d29d0-889c-4587-907d-be9fda227c88", + "type": "ui/text", + "pos": [ + 0, + 24.69999999999996 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "4239cafd-41dc-4719-b3f7-434a720d631d" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": true, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "masterpiece, 4girls, multiple girls, city street, cityscape, landscape, jeans, shoes, shirt, kanpai, happy, red hair, yellow hair, blue hair, green hair, looking at another, eye contact" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "masterpiece, 4girls, multiple girls, city street, cityscape, landscape, jeans, shoes, shirt, kanpai, happy, red hair, yellow hair, blue hair, green hair, looking at another, eye contact", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "f2e5a853-8d42-4ed2-b969-cbf94d641753", + "type": "CLIPTextEncode", + "pos": [ + 110.59999999999923, + 96.70000000000002 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "string", + "link": "774a5aeb-c6a9-46e6-8413-1f57117e4d5b", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + }, + { + "name": "clip", + "type": "CLIP", + "link": "147b7413-b115-4edd-9c2f-3e60badad003", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "4eed8459-6276-45d4-ada7-5e1527a1be58" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Prompt)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "5e220670-42bc-4c32-8b48-1ad943f7b93c", + "type": "ui/text", + "pos": [ + 8.599999999999227, + 118.7 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "774a5aeb-c6a9-46e6-8413-1f57117e4d5b" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": true, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "nsfw, looking at viewer, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, worst quality, low quality, normal quality, wide shot, jpeg artifacts, signature, watermark, username, blurry, deformed, disfigured, poorly drawn face, mutation, mutated, extra limb, poorly drawn hands, missing limb, floating limbs, disconnected limbs, malformed hands, out of focus, long neck, long body, fuzzy, abstract" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "nsfw, looking at viewer, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, worst quality, low quality, normal quality, wide shot, jpeg artifacts, signature, watermark, username, blurry, deformed, disfigured, poorly drawn face, mutation, mutated, extra limb, poorly drawn hands, missing limb, floating limbs, disconnected limbs, malformed hands, out of focus, long neck, long body, fuzzy, abstract", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "62b11f24-cc5f-422c-a757-abda5d8ac394", + "type": "CLIPTextEncode", + "pos": [ + 104.39999999999918, + 0 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "string", + "link": "4239cafd-41dc-4719-b3f7-434a720d631d", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + }, + { + "name": "clip", + "type": "CLIP", + "link": "85511186-d0ed-4f6b-b28a-03f4ab6b06a1", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + "c3ffdf20-0d7a-4743-8527-788dfee8d95e" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Prompt)", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "bc4557c8-3da2-4714-9b5e-5b1a04d06297", + "type": "graph/input", + "pos": [ + -193, + 87 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + "147b7413-b115-4edd-9c2f-3e60badad003", + "85511186-d0ed-4f6b-b28a-03f4ab6b06a1" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "Input", + "properties": { + "name": "clip", + "type": "CLIP", + "value": null, + "subgraphID": "a950c6d6-9c70-451e-b713-e9c645c328af", + "tags": [] + } + }, + { + "id": "486b771b-9de9-4c8a-8c46-08cfc71d02af", + "type": "graph/output", + "pos": [ + 340, + 25 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "c3ffdf20-0d7a-4743-8527-788dfee8d95e", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "positive", + "type": "CONDITIONING", + "subgraphID": "a950c6d6-9c70-451e-b713-e9c645c328af", + "tags": [] + } + }, + { + "id": "e9ddd78d-f5a0-410a-91ff-729f00dbb3fc", + "type": "graph/output", + "pos": [ + 341, + 124 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "CONDITIONING", + "link": "4eed8459-6276-45d4-ada7-5e1527a1be58", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "negative", + "type": "CONDITIONING", + "subgraphID": "a950c6d6-9c70-451e-b713-e9c645c328af", + "tags": [] + } + } + ], + "links": [ + [ + "147b7413-b115-4edd-9c2f-3e60badad003", + "bc4557c8-3da2-4714-9b5e-5b1a04d06297", + 0, + "f2e5a853-8d42-4ed2-b969-cbf94d641753", + 1, + "CLIP" + ], + [ + "c3ffdf20-0d7a-4743-8527-788dfee8d95e", + "62b11f24-cc5f-422c-a757-abda5d8ac394", + 0, + "486b771b-9de9-4c8a-8c46-08cfc71d02af", + 0, + "CONDITIONING" + ], + [ + "4eed8459-6276-45d4-ada7-5e1527a1be58", + "f2e5a853-8d42-4ed2-b969-cbf94d641753", + 0, + "e9ddd78d-f5a0-410a-91ff-729f00dbb3fc", + 0, + "CONDITIONING" + ], + [ + "4239cafd-41dc-4719-b3f7-434a720d631d", + "362d29d0-889c-4587-907d-be9fda227c88", + 0, + "62b11f24-cc5f-422c-a757-abda5d8ac394", + 0, + "string" + ], + [ + "774a5aeb-c6a9-46e6-8413-1f57117e4d5b", + "5e220670-42bc-4c32-8b48-1ad943f7b93c", + 0, + "f2e5a853-8d42-4ed2-b969-cbf94d641753", + 0, + "string" + ], + [ + "85511186-d0ed-4f6b-b28a-03f4ab6b06a1", + "bc4557c8-3da2-4714-9b5e-5b1a04d06297", + 0, + "62b11f24-cc5f-422c-a757-abda5d8ac394", + 1, + "CLIP" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + } + }, + { + "id": "e82c71ba-331d-45a0-baa4-eb7de69da094", + "type": "basic/null", + "pos": [ + 1878.1057169999985, + 331.43802199999993 + ], + "size": [ + 210, + 38 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "null", + "type": "*", + "links": [ + "307047a2-f35d-4a63-b5d5-ccf299e55f56" + ], + "properties": {} + } + ], + "title": "Const Null", + "properties": { + "value": null, + "tags": [] + } + }, + { + "id": "b0ae8979-fb4c-4a0e-a29c-4c7aa3e4cdaf", + "type": "SaveImage", + "pos": [ + 2173.1057169999985, + 147.43802200000007 + ], + "size": [ + 186.4, + 46 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": "b458f085-111c-4dbd-bf3b-dc243deece16", + "properties": {}, + "config": {} + }, + { + "name": "filename_prefix", + "type": "string", + "link": "36e8e16e-6d7a-4edc-87b3-9640143d9404", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + } + ], + "outputs": [ + { + "name": "OUTPUT", + "type": -2, + "links": [ + "54d7994c-777a-4b5d-a5e7-46ad8f78caac" + ], + "properties": {}, + "color_off": "rebeccapurple", + "color_on": "rebeccapurple", + "shape": 1, + "slot_index": 0 + } + ], + "title": "Save Image", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "6d6c86b3-1011-4c2d-bfd1-3b73b1602a2d", + "type": "ui/text", + "pos": [ + 2043.105716999998, + 191.43802200000007 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "36e8e16e-6d7a-4edc-87b3-9640143d9404", + "d76f69c7-d90a-42ec-8a11-d8a634378f36" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "ComfyUI", + "multiline": false, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "ComfyUI" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "ComfyUI", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "5a6f35be-1afe-41d6-b486-6a7c41861af8", + "type": "VAEDecode", + "pos": [ + 1490.0757169999977, + -65.89197800000007 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": "bfb1cbb9-2adc-491d-ae70-969e9ab4cca4", + "properties": {}, + "config": {} + }, + { + "name": "vae", + "type": "VAE", + "link": "fc2d2bf6-ff19-4ac6-a97e-f3898a2172f8", + "properties": {}, + "config": {} + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + "62acb01a-19f2-4be4-934a-fcd57e5b6f15" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "VAE Decode", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "7fc38340-d13f-4c85-9e5b-b285bb6439e9", + "type": "graph/subgraph", + "pos": [ + 1346, + 424 + ], + "size": [ + 200, + 30 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "batch_size", + "type": "number", + "link": "8f46d185-bb4f-4872-9441-e749baaea404", + "properties": {} + } + ], + "outputs": [ + { + "name": "seed", + "type": "number", + "links": [ + "7bafd1c6-f817-4d29-af35-c5f3f043fec3", + "502a25e6-ddd2-443a-8673-d057b4c18f46" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "Seed Randomizer", + "properties": { + "enabled": true, + "tags": [] + }, + "color": "#2a363b", + "bgColor": "#3f5159", + "subgraph": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "d46ccb25-b9a7-496f-aae9-8744484897ca", + "type": "utils/value_control", + "pos": [ + 507, + 82 + ], + "size": [ + 151.2, + 126 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "number", + "link": "51bb70e2-9833-4b87-ad7b-05e0099bbd04", + "properties": {} + }, + { + "name": "trigger", + "type": -1, + "link": "fd8e05cd-91e9-43ca-bd7e-d52a1aad8fe0", + "properties": {}, + "shape": 1 + }, + { + "name": "action", + "type": "string", + "link": "1c50c030-a776-439d-899f-b4dc82d53893", + "properties": {}, + "defaultWidgetNode": null, + "config": { + "defaultValue": "randomize", + "values": [ + "fixed", + "increment", + "decrement", + "randomize" + ] + }, + "widgetNodeType": "ui/combo" + }, + { + "name": "min", + "type": "number", + "link": "39dca27f-7ad5-4039-a478-e3175f63876a", + "properties": {} + }, + { + "name": "max", + "type": "number", + "link": "0d3bf97b-c1c0-42c2-8cc6-904dd685d728", + "properties": {} + }, + { + "name": "step", + "type": "number", + "link": "6d33457f-0070-467d-8972-11530451793a", + "properties": {} + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [ + "c7a72e06-8256-4545-8d55-96745702aafc" + ], + "properties": {}, + "shape": 1, + "slot_index": 1 + } + ], + "title": "Comfy.ValueControl", + "properties": { + "tags": [], + "value": 265785165591479, + "action": "randomize", + "min": 0, + "max": 18446744073709552000, + "step": 1, + "ignoreStepWhenRandom": false + }, + "saveUserState": true + }, + { + "id": "0c88667d-10cb-4e8c-a0c1-998bb9ac8b07", + "type": "ui/combo", + "pos": [ + 389, + 148 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "1c50c030-a776-439d-899f-b4dc82d53893" + ], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "238d8597-cde0-4e4a-ac0a-402e01157aa0", + "type": "events/queue_events", + "pos": [ + 286, + 0 + ], + "size": [ + 178, + 66 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "beforeQueued", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "afterQueued", + "type": -2, + "links": [ + "fd8e05cd-91e9-43ca-bd7e-d52a1aad8fe0" + ], + "properties": {}, + "shape": 1, + "slot_index": 1 + }, + { + "name": "onDefaultQueueAction", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "Comfy.QueueEvents", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "c6595fd2-4805-4dfa-8501-22da178f5061", + "type": "graph/input", + "pos": [ + 386, + 205 + ], + "size": [ + 210, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "number", + "links": [ + "6d33457f-0070-467d-8972-11530451793a" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "batch_size", + "type": "number", + "value": 0, + "subgraphID": "7fc38340-d13f-4c85-9e5b-b285bb6439e9", + "tags": [] + } + }, + { + "id": "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + "type": "ui/number", + "pos": [ + -46, + 98 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": false + }, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": "c7a72e06-8256-4545-8d55-96745702aafc", + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "dd63caf4-25ad-4dd7-ac95-987e8d4cb669", + "51bb70e2-9833-4b87-ad7b-05e0099bbd04" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [ + "39dca27f-7ad5-4039-a478-e3175f63876a" + ], + "properties": {}, + "slot_index": 2 + }, + { + "name": "@max", + "type": "number", + "links": [ + "0d3bf97b-c1c0-42c2-8cc6-904dd685d728" + ], + "properties": {}, + "slot_index": 3 + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 0, + "min": 0, + "max": 18446744073709552000, + "step": 1, + "precision": 0 + }, + "widgets_values": [ + "265785165591479.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 265785165591479, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "8b701fb9-dec7-4bde-8b5e-5806c89ec14f", + "type": "graph/output", + "pos": [ + 194, + 73 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "number", + "link": "dd63caf4-25ad-4dd7-ac95-987e8d4cb669", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "seed", + "type": "number", + "subgraphID": "7fc38340-d13f-4c85-9e5b-b285bb6439e9", + "tags": [] + } + } + ], + "links": [ + [ + "6d33457f-0070-467d-8972-11530451793a", + "c6595fd2-4805-4dfa-8501-22da178f5061", + 0, + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 5, + "number" + ], + [ + "dd63caf4-25ad-4dd7-ac95-987e8d4cb669", + "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + 0, + "8b701fb9-dec7-4bde-8b5e-5806c89ec14f", + 0, + "number" + ], + [ + "51bb70e2-9833-4b87-ad7b-05e0099bbd04", + "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + 0, + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 0, + "number" + ], + [ + "fd8e05cd-91e9-43ca-bd7e-d52a1aad8fe0", + "238d8597-cde0-4e4a-ac0a-402e01157aa0", + 1, + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 1, + -1 + ], + [ + "1c50c030-a776-439d-899f-b4dc82d53893", + "0c88667d-10cb-4e8c-a0c1-998bb9ac8b07", + 0, + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 2, + "string" + ], + [ + "39dca27f-7ad5-4039-a478-e3175f63876a", + "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + 2, + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 3, + "number" + ], + [ + "0d3bf97b-c1c0-42c2-8cc6-904dd685d728", + "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + 3, + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 4, + "number" + ], + [ + "c7a72e06-8256-4545-8d55-96745702aafc", + "d46ccb25-b9a7-496f-aae9-8744484897ca", + 1, + "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + 0, + -1 + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + } + }, + { + "id": "6bc6e1f3-f30b-4887-91d3-4e9e0cb91eb1", + "type": "math/operation", + "pos": [ + 1452, + 376 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "A", + "type": "number,array,object", + "link": "24aa2861-50f0-4250-9b02-7f36c5eef04c", + "properties": {} + }, + { + "name": "B", + "type": "number", + "link": "502a25e6-ddd2-443a-8673-d057b4c18f46", + "properties": {} + } + ], + "outputs": [ + { + "name": "=", + "type": "number", + "links": [ + "2a6f9f46-f211-481b-8003-c808553edb79" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "Operation", + "properties": { + "A": 1234, + "B": 265785165591479, + "OP": "+", + "tags": [] + } + }, + { + "id": "cbd9dcc2-9165-4b39-8f2e-4b9cbc699e05", + "type": "basic/integer", + "pos": [ + 1358, + 378 + ], + "size": [ + 210, + 38 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "24aa2861-50f0-4250-9b02-7f36c5eef04c" + ], + "properties": {}, + "label": "1234" + } + ], + "title": "Const Integer", + "properties": { + "value": 1234, + "tags": [] + } + }, + { + "id": "65d58159-d87b-4fb9-a078-f503885336eb", + "type": "ui/gallery", + "pos": [ + 2171.1057169999985, + 238.43802200000007 + ], + "size": [ + 210, + 126 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "OUTPUT", + "link": null, + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": "4e35cf03-cda3-4d75-8fc7-10790b3a3342", + "properties": {}, + "color_off": "rebeccapurple", + "color_on": "rebeccapurple", + "shape": 1, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "images", + "type": "COMFYBOX_IMAGES", + "links": [ + "30e795a0-6790-450d-815c-bb5f20bf53ed" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "selected_index", + "type": "number", + "links": [ + "96493a1f-6de1-4130-8ea2-041a04e5b3e8" + ], + "properties": {}, + "slot_index": 1 + } + ], + "title": "UI.Gallery", + "properties": { + "tags": [], + "defaultValue": null, + "index": 9, + "updateMode": "append", + "autoSelectOnUpdate": true + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": [], + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "c144a016-4a67-45dd-ba14-67086c12f93f", + "type": "image/pick_image", + "pos": [ + 2432.1057169999985, + 240.43802200000007 + ], + "size": [ + 210, + 190 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "COMFYBOX_IMAGES,COMFYBOX_IMAGE", + "link": "30e795a0-6790-450d-815c-bb5f20bf53ed", + "properties": {} + }, + { + "name": "index", + "type": "number", + "link": "96493a1f-6de1-4130-8ea2-041a04e5b3e8", + "properties": {} + } + ], + "outputs": [ + { + "name": "image", + "type": "COMFYBOX_IMAGE", + "links": [ + "ae20fccd-217c-4012-a410-d826190ca20b" + ], + "properties": {} + }, + { + "name": "filename", + "type": "string", + "links": [], + "properties": {} + }, + { + "name": "width", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "height", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "Comfy.PickImage", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "7227f774-8dd8-4dd3-90e0-c9bde1d66ec9", + "type": "ui/button", + "pos": [ + 2663.1057169999985, + 286.43802199999993 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "clicked", + "type": -2, + "links": [ + "1c0003c0-7972-48fc-9866-123a7407f542" + ], + "properties": {}, + "shape": 1, + "slot_index": 0 + } + ], + "title": "UI.Button", + "properties": { + "tags": [], + "defaultValue": false, + "param": "bang" + }, + "widgets_values": [ + "false" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": false, + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "d8a4bc6d-fc91-487a-b747-c2a6fc973dd1", + "type": "actions/send_output", + "pos": [ + 2775.1057169999985, + 243.43802200000007 + ], + "size": [ + 184.79999999999998, + 46 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": "ae20fccd-217c-4012-a410-d826190ca20b", + "properties": {}, + "slot_index": 0 + }, + { + "name": "trigger", + "type": -1, + "link": "1c0003c0-7972-48fc-9866-123a7407f542", + "properties": {}, + "shape": 1 + } + ], + "outputs": [], + "title": "Comfy.SendOutputAction", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "15ae90b1-faac-4447-bfef-8e3a5f5ac200", + "type": "events/wrap_as_event", + "pos": [ + 1963.1057169999983, + 332.43802199999993 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": false + }, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "trigger", + "type": -1, + "link": "9ef372d0-fde4-43c8-8b96-53905bbc5b97", + "properties": {}, + "shape": 1 + }, + { + "name": "param", + "type": "", + "link": "307047a2-f35d-4a63-b5d5-ccf299e55f56", + "properties": {}, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "event", + "type": -2, + "links": [ + "6e0a7214-01d1-4a1b-a21e-ecf8b5883673" + ], + "properties": {}, + "shape": 1, + "slot_index": 0 + } + ], + "title": "Wrap As Event", + "properties": { + "tags": [] + } + }, + { + "id": "b5bae397-2c92-4241-9658-6ce61d43b9bd", + "type": "events/sequence", + "pos": [ + 2039.105716999998, + 277.43802199999993 + ], + "size": [ + 140, + 86 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "", + "type": -1, + "link": "54d7994c-777a-4b5d-a5e7-46ad8f78caac", + "properties": {}, + "shape": 1 + }, + { + "name": "", + "type": -1, + "link": "ec928820-0d7a-4d9e-9c0d-aee1ef9b44d7", + "properties": {}, + "shape": 1, + "slot_index": 1 + }, + { + "name": "", + "type": -1, + "link": "6e0a7214-01d1-4a1b-a21e-ecf8b5883673", + "properties": {}, + "shape": 1, + "slot_index": 2 + }, + { + "name": "", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "", + "type": -2, + "links": [ + "4e35cf03-cda3-4d75-8fc7-10790b3a3342" + ], + "properties": {}, + "shape": 1, + "slot_index": 0 + }, + { + "name": "", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "Sequence", + "properties": { + "tags": [] + } + }, + { + "id": "0a53404e-479c-4b2f-92ca-32297caf3435", + "type": "SaveImage", + "pos": [ + 1652.1057169999988, + 16.438022000000004 + ], + "size": [ + 186.4, + 46 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": "62acb01a-19f2-4be4-934a-fcd57e5b6f15", + "properties": {}, + "config": {} + }, + { + "name": "filename_prefix", + "type": "string", + "link": "d76f69c7-d90a-42ec-8a11-d8a634378f36", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/text", + "serialize": true + } + ], + "outputs": [ + { + "name": "OUTPUT", + "type": -2, + "links": [ + "750e2e37-9ac6-43e0-bfdc-178ef79c495c", + "ec928820-0d7a-4d9e-9c0d-aee1ef9b44d7" + ], + "properties": {}, + "color_off": "rebeccapurple", + "color_on": "rebeccapurple", + "shape": 1, + "slot_index": 0 + } + ], + "title": "Save Image", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "fe325d0b-7665-462e-8138-fff119d35aca", + "type": "ui/button", + "pos": [ + 1844.510676999996, + 362.82751199999984 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "clicked", + "type": -2, + "links": [ + "9ef372d0-fde4-43c8-8b96-53905bbc5b97" + ], + "properties": {}, + "shape": 1, + "slot_index": 0 + } + ], + "title": "UI.Button", + "properties": { + "tags": [], + "defaultValue": false, + "param": "bang" + }, + "widgets_values": [ + "false" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": false, + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + "type": "LatentUpscale", + "pos": [ + 1249.510676999997, + -210.17248799999993 + ], + "size": [ + 178, + 106 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": "c97c40c8-1bdc-491e-b898-f70f0b6f803f", + "properties": {}, + "config": {} + }, + { + "name": "upscale_method", + "type": "string", + "link": "029f5c18-56fc-46db-9491-f3e4bcca2c5e", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true, + "slot_index": 1 + }, + { + "name": "width", + "type": "number", + "link": "dda7b297-301e-43b7-b316-af27373ab4c1", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "height", + "type": "number", + "link": "36ab2c95-e545-47d4-b3c3-059e6cdc4c03", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "crop", + "type": "string", + "link": "0a26f849-e471-4693-ae74-1c1dfd4cce7e", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + "e2c12992-6c1c-4b56-bc1e-f8b529610bd2" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "Upscale Latent", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + }, + { + "id": "0c7eba33-4366-4e46-9180-94444e6c8ccf", + "type": "ui/combo", + "pos": [ + 1114.510676999997, + -172.17248799999993 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "029f5c18-56fc-46db-9491-f3e4bcca2c5e" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "a463e581-d971-44fd-8bcf-910fcb274760", + "type": "graph/subgraph", + "pos": [ + 1090.510676999997, + -135.17248799999993 + ], + "size": [ + 200, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "width", + "type": "number", + "link": "4dcd8cae-3bfa-4640-b1c6-b1336ee392f9", + "properties": {} + }, + { + "name": "height", + "type": "number", + "link": "d4a46999-4d9e-4825-a509-4194f046edef", + "properties": {} + } + ], + "outputs": [ + { + "name": "width", + "type": "number", + "links": [ + "dda7b297-301e-43b7-b316-af27373ab4c1" + ], + "properties": {} + }, + { + "name": "height", + "type": "number", + "links": [ + "36ab2c95-e545-47d4-b3c3-059e6cdc4c03" + ], + "properties": {} + } + ], + "title": "Scale Dims", + "properties": { + "enabled": true, + "tags": [] + }, + "color": "#2a363b", + "bgColor": "#3f5159", + "subgraph": { + "last_node_id": 0, + "last_link_id": 0, + "nodes": [ + { + "id": "ecff129b-6dbc-48cf-8b74-d775dda2b960", + "type": "math/floor", + "pos": [ + 238.81818181818107, + 3.2727272727272805 + ], + "size": [ + 140, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "number", + "link": "26f20349-a88a-463b-8eb6-9f4ae09874ce", + "properties": {} + } + ], + "outputs": [ + { + "name": "out", + "type": "number", + "links": [ + "852d10f2-31c2-4dae-9421-c0776ab5dff0" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "Floor", + "properties": { + "tags": [] + } + }, + { + "id": "5ef034a8-35b9-47a5-933f-e6732134d233", + "type": "string/toString", + "pos": [ + 317.8181818181811, + 2.2727272727272805 + ], + "size": [ + 140, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "", + "link": "852d10f2-31c2-4dae-9421-c0776ab5dff0", + "properties": {}, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "out", + "type": "string", + "links": [ + "01a4fc94-53bc-418a-9eec-8ac234ac19f3" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "ToString", + "properties": { + "tags": [] + } + }, + { + "id": "64dffe20-d2c4-4ef0-bd98-f587a0225ae1", + "type": "math/floor", + "pos": [ + 228.09090909090924, + 178.63636363636363 + ], + "size": [ + 140, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "number", + "link": "613e074b-fd7a-486f-9552-223b92ed2798", + "properties": {} + } + ], + "outputs": [ + { + "name": "out", + "type": "number", + "links": [ + "13f95946-b520-415a-8d14-017349598b8d" + ], + "properties": {} + } + ], + "title": "Floor", + "properties": { + "tags": [] + } + }, + { + "id": "d8c3db68-f04d-4157-9142-72456d4db44f", + "type": "string/toString", + "pos": [ + 312.09090909090924, + 179.63636363636363 + ], + "size": [ + 140, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "in", + "type": "", + "link": "13f95946-b520-415a-8d14-017349598b8d", + "properties": {}, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "out", + "type": "string", + "links": [ + "99b7e87d-ee29-45ae-91ae-516536fc0a1c" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "ToString", + "properties": { + "tags": [] + } + }, + { + "id": "6e2c7833-fcf1-404d-a9d7-6722a06d5e12", + "type": "math/operation", + "pos": [ + 145, + 118.27272727272728 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "A", + "type": "number,array,object", + "link": "5bc5ea56-e233-4704-bd84-f6fe191696da", + "properties": {} + }, + { + "name": "B", + "type": "number", + "link": "947fc920-5556-46dd-8997-c9edf8e4988f", + "properties": {} + } + ], + "outputs": [ + { + "name": "=", + "type": "number", + "links": [ + "9a4f27f6-40ba-4b30-81f0-f0e013d01e99", + "613e074b-fd7a-486f-9552-223b92ed2798" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "Operation", + "properties": { + "A": 1.5, + "B": 768, + "OP": "*", + "tags": [] + } + }, + { + "id": "33ec0738-58d6-455e-b5da-490e99ce9925", + "type": "math/operation", + "pos": [ + 145, + 60.27272727272728 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "A", + "type": "number,array,object", + "link": "53b643af-a359-4e96-983b-4f251494fea1", + "properties": {} + }, + { + "name": "B", + "type": "number", + "link": "2e4e3697-eebb-4efa-83ff-09c4d3e51832", + "properties": {} + } + ], + "outputs": [ + { + "name": "=", + "type": "number", + "links": [ + "18e4f924-d725-4db8-ae92-0c7eefd59105", + "26f20349-a88a-463b-8eb6-9f4ae09874ce" + ], + "properties": {}, + "slot_index": 0 + } + ], + "title": "Operation", + "properties": { + "A": 1.5, + "B": 1152, + "OP": "*", + "tags": [] + } + }, + { + "id": "418bff41-d6c0-4c74-baa8-dbe1a6a31c48", + "type": "ui/text", + "pos": [ + 426.81818181818176, + 0 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": "01a4fc94-53bc-418a-9eec-8ac234ac19f3", + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": false, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "1728" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "1728", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "482503c5-33a2-4951-aac9-c68711567a43", + "type": "ui/text", + "pos": [ + 418.2727272727259, + 185.81818181818184 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "string", + "link": "99b7e87d-ee29-45ae-91ae-516536fc0a1c", + "properties": {} + }, + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [], + "properties": {} + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Text", + "properties": { + "tags": [], + "defaultValue": "", + "multiline": false, + "lines": 5, + "maxLines": 5 + }, + "widgets_values": [ + "1152" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": "1152", + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "efb9dd09-2c5b-4fa9-827a-8216fafddb89", + "type": "ui/number", + "pos": [ + 0, + 97.27272727272728 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "5bc5ea56-e233-4704-bd84-f6fe191696da", + "53b643af-a359-4e96-983b-4f251494fea1" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 0, + "min": 1, + "max": 4, + "step": 0.01, + "precision": 1 + }, + "widgets_values": [ + "1.500" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1.5, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "0407ea08-9b71-4c70-95f4-369e93956091", + "type": "graph/input", + "pos": [ + -305, + -43 + ], + "size": [ + 210, + 86 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "number", + "links": [ + "2e4e3697-eebb-4efa-83ff-09c4d3e51832" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "width", + "type": "number", + "value": 0, + "subgraphID": "a463e581-d971-44fd-8bcf-910fcb274760", + "tags": [] + } + }, + { + "id": "03a8b190-df06-4131-a709-ec29429223bd", + "type": "graph/input", + "pos": [ + -305, + 63 + ], + "size": [ + 210, + 86 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "", + "type": "number", + "links": [ + "947fc920-5556-46dd-8997-c9edf8e4988f" + ], + "properties": {} + } + ], + "title": "Input", + "properties": { + "name": "height", + "type": "number", + "value": 0, + "subgraphID": "a463e581-d971-44fd-8bcf-910fcb274760", + "tags": [] + } + }, + { + "id": "e6281ab8-193c-47e5-a4e5-41d535e595d2", + "type": "graph/output", + "pos": [ + 836.8181818181818, + -31 + ], + "size": [ + 210, + 62 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "", + "link": "18e4f924-d725-4db8-ae92-0c7eefd59105", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "width", + "type": "number", + "subgraphID": "a463e581-d971-44fd-8bcf-910fcb274760", + "tags": [] + } + }, + { + "id": "5ee8b5b6-998d-40bd-919f-96521cb53930", + "type": "graph/output", + "pos": [ + 836.8181818181818, + 51 + ], + "size": [ + 210, + 62 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "", + "link": "9a4f27f6-40ba-4b30-81f0-f0e013d01e99", + "properties": {} + } + ], + "outputs": [], + "title": "Output", + "properties": { + "name": "height", + "type": "number", + "subgraphID": "a463e581-d971-44fd-8bcf-910fcb274760", + "tags": [] + } + } + ], + "links": [ + [ + "2e4e3697-eebb-4efa-83ff-09c4d3e51832", + "0407ea08-9b71-4c70-95f4-369e93956091", + 0, + "33ec0738-58d6-455e-b5da-490e99ce9925", + 1, + "number" + ], + [ + "947fc920-5556-46dd-8997-c9edf8e4988f", + "03a8b190-df06-4131-a709-ec29429223bd", + 0, + "6e2c7833-fcf1-404d-a9d7-6722a06d5e12", + 1, + "number" + ], + [ + "18e4f924-d725-4db8-ae92-0c7eefd59105", + "33ec0738-58d6-455e-b5da-490e99ce9925", + 0, + "e6281ab8-193c-47e5-a4e5-41d535e595d2", + 0, + "number" + ], + [ + "9a4f27f6-40ba-4b30-81f0-f0e013d01e99", + "6e2c7833-fcf1-404d-a9d7-6722a06d5e12", + 0, + "5ee8b5b6-998d-40bd-919f-96521cb53930", + 0, + "number" + ], + [ + "26f20349-a88a-463b-8eb6-9f4ae09874ce", + "33ec0738-58d6-455e-b5da-490e99ce9925", + 0, + "ecff129b-6dbc-48cf-8b74-d775dda2b960", + 0, + "number" + ], + [ + "852d10f2-31c2-4dae-9421-c0776ab5dff0", + "ecff129b-6dbc-48cf-8b74-d775dda2b960", + 0, + "5ef034a8-35b9-47a5-933f-e6732134d233", + 0, + "number" + ], + [ + "01a4fc94-53bc-418a-9eec-8ac234ac19f3", + "5ef034a8-35b9-47a5-933f-e6732134d233", + 0, + "418bff41-d6c0-4c74-baa8-dbe1a6a31c48", + 0, + "string" + ], + [ + "613e074b-fd7a-486f-9552-223b92ed2798", + "6e2c7833-fcf1-404d-a9d7-6722a06d5e12", + 0, + "64dffe20-d2c4-4ef0-bd98-f587a0225ae1", + 0, + "number" + ], + [ + "13f95946-b520-415a-8d14-017349598b8d", + "64dffe20-d2c4-4ef0-bd98-f587a0225ae1", + 0, + "d8c3db68-f04d-4157-9142-72456d4db44f", + 0, + "number" + ], + [ + "99b7e87d-ee29-45ae-91ae-516536fc0a1c", + "d8c3db68-f04d-4157-9142-72456d4db44f", + 0, + "482503c5-33a2-4951-aac9-c68711567a43", + 0, + "string" + ], + [ + "5bc5ea56-e233-4704-bd84-f6fe191696da", + "efb9dd09-2c5b-4fa9-827a-8216fafddb89", + 0, + "6e2c7833-fcf1-404d-a9d7-6722a06d5e12", + 0, + "number,array,object" + ], + [ + "53b643af-a359-4e96-983b-4f251494fea1", + "efb9dd09-2c5b-4fa9-827a-8216fafddb89", + 0, + "33ec0738-58d6-455e-b5da-490e99ce9925", + 0, + "number,array,object" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + } + }, + { + "id": "f3689864-f2b2-4e48-a95b-0aadc1fc17cf", + "type": "ui/combo", + "pos": [ + 1110.510676999997, + -99.17248800000004 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": null, + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "string", + "links": [ + "0a26f849-e471-4693-ae74-1c1dfd4cce7e" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + } + ], + "title": "UI.Combo", + "properties": { + "tags": [], + "defaultValue": null, + "values": [], + "convertValueToLabelCode": "" + }, + "widgets_values": [], + "color": "#223", + "bgColor": "#335", + "comfyValue": "A", + "shownOutputProperties": {}, + "saveUserState": false + }, + { + "id": "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + "type": "ui/number", + "pos": [ + 933, + 435 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": "f8036326-7fc6-4921-a372-08e3f4cb73b5", + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "2ee45247-f2b7-4351-9061-9a0d5af0b2db", + "e58d7ed0-d1f8-440c-b35b-2eca4472809f", + "d4a46999-4d9e-4825-a509-4194f046edef", + "6fbe6e63-8959-4f71-98b4-65d5513e6e0f" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 512, + "min": 64, + "max": 2048, + "step": 64, + "precision": 0 + }, + "widgets_values": [ + "768.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 768, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "521cd40a-2a84-42de-829e-08f68cc78f7e", + "type": "ui/number", + "pos": [ + 929, + 409 + ], + "size": [ + 210, + 158 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "store", + "type": -1, + "link": "8ade51ea-1e13-4248-8d82-7260c5c99750", + "properties": {}, + "shape": 1, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "value", + "type": "number", + "links": [ + "a900b6d1-6427-48b6-b3a2-5f5200c8ad19", + "0061bcd7-db49-49cc-871f-fc18354d5a4a", + "4dcd8cae-3bfa-4640-b1c6-b1336ee392f9", + "b66f28aa-8bfa-4ec2-afa9-602907a2bbe0" + ], + "properties": {}, + "slot_index": 0 + }, + { + "name": "changed", + "type": -2, + "links": [], + "properties": {}, + "shape": 1 + }, + { + "name": "@min", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@max", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@step", + "type": "number", + "links": [], + "properties": {} + }, + { + "name": "@precision", + "type": "number", + "links": [], + "properties": {} + } + ], + "title": "UI.Number", + "properties": { + "tags": [], + "defaultValue": 512, + "min": 64, + "max": 2048, + "step": 64, + "precision": 0 + }, + "widgets_values": [ + "1152.000" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": 1152, + "shownOutputProperties": { + "min": { + "type": "number", + "outputName": "@min" + }, + "max": { + "type": "number", + "outputName": "@max" + }, + "step": { + "type": "number", + "outputName": "@step" + }, + "precision": { + "type": "number", + "outputName": "@precision" + } + }, + "saveUserState": true + }, + { + "id": "0bb0fc82-c36d-4d2f-aaef-47d03351fc7f", + "type": "actions/swap", + "pos": [ + 764, + 387 + ], + "size": [ + 140, + 66 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "A", + "type": "*", + "link": "b66f28aa-8bfa-4ec2-afa9-602907a2bbe0", + "properties": {} + }, + { + "name": "B", + "type": "*", + "link": "6fbe6e63-8959-4f71-98b4-65d5513e6e0f", + "properties": {} + }, + { + "name": "swap", + "type": -1, + "link": "ec05b598-823e-47d1-b42d-3b4a3ecc1911", + "properties": {}, + "shape": 1 + } + ], + "outputs": [ + { + "name": "B", + "type": -2, + "links": [ + "8ade51ea-1e13-4248-8d82-7260c5c99750" + ], + "properties": {}, + "shape": 1, + "slot_index": 0 + }, + { + "name": "A", + "type": -2, + "links": [ + "f8036326-7fc6-4921-a372-08e3f4cb73b5" + ], + "properties": {}, + "shape": 1, + "slot_index": 1 + } + ], + "title": "Comfy.SwapAction", + "properties": { + "tags": [] + }, + "saveUserState": true + }, + { + "id": "e74354b0-f896-4a20-8396-8a0a26990bc6", + "type": "ui/button", + "pos": [ + 655, + 454 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "clicked", + "type": -2, + "links": [ + "ec05b598-823e-47d1-b42d-3b4a3ecc1911" + ], + "properties": {}, + "shape": 1, + "slot_index": 0 + } + ], + "title": "UI.Button", + "properties": { + "tags": [], + "defaultValue": false, + "param": "bang" + }, + "widgets_values": [ + "false" + ], + "color": "#223", + "bgColor": "#335", + "comfyValue": false, + "shownOutputProperties": {}, + "saveUserState": true + }, + { + "id": "13352a3a-cb14-4871-8f31-1d24c13eea99", + "type": "KSampler", + "pos": [ + 1641, + 102 + ], + "size": [ + 161.2, + 206 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": "0a5897e2-423c-4eb9-a3b3-ec9d72ba6d0a", + "properties": {}, + "config": {} + }, + { + "name": "seed", + "type": "number", + "link": "2a6f9f46-f211-481b-8003-c808553edb79", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true, + "slot_index": 1 + }, + { + "name": "steps", + "type": "number", + "link": "c5632290-24e5-46da-b5ab-d46af8fb36c2", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true, + "slot_index": 2 + }, + { + "name": "cfg", + "type": "number", + "link": "3762268c-3bf8-4911-a73f-ee0073975646", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + }, + { + "name": "sampler_name", + "type": "string", + "link": "4ad86438-4df3-4e21-b1f9-2e11bfde6bdd", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + }, + { + "name": "scheduler", + "type": "string", + "link": "73568e55-a89e-42a2-ad1e-67789b193a66", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/combo", + "serialize": true + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": "59369121-320c-4a84-93a1-3e4f0b789f25", + "properties": {}, + "config": {} + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": "064b8317-c5b4-42ff-a5f0-af9b67ae35e0", + "properties": {}, + "config": {} + }, + { + "name": "latent_image", + "type": "LATENT", + "link": "e2c12992-6c1c-4b56-bc1e-f8b529610bd2", + "properties": {}, + "config": {} + }, + { + "name": "denoise", + "type": "number", + "link": "d8843bc1-0512-4ff4-9c4b-5eef209b310a", + "properties": {}, + "config": {}, + "defaultWidgetNode": null, + "widgetNodeType": "ui/number", + "serialize": true + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + "6e2078f5-8dd6-474f-82a1-7a2ed5882bb8" + ], + "properties": {}, + "shape": 3, + "slot_index": 0 + } + ], + "title": "KSampler", + "properties": { + "tags": [] + }, + "color": "#432", + "bgColor": "#653", + "saveUserState": true + } + ], + "links": [ + [ + "e26e11cb-0aa3-4519-afbc-f2c6bf912f66", + "dfbfcfe3-cc90-47be-9d9a-6ef8566f4164", + 0, + "44d79d5d-21a7-4ce7-927d-4656f902fad0", + 0, + "string" + ], + [ + "a8808a19-115b-4fad-88e8-11d76adf942e", + "25b1fbf0-4014-46be-a6e6-ea244056620c", + 0, + "c69d01b8-90c7-456c-80b4-db4db5cc5585", + 0, + "string" + ], + [ + "a900b6d1-6427-48b6-b3a2-5f5200c8ad19", + "521cd40a-2a84-42de-829e-08f68cc78f7e", + 0, + "664273a8-25f3-4bd3-a882-9ad091d044a7", + 0, + "number" + ], + [ + "2ee45247-f2b7-4351-9061-9a0d5af0b2db", + "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + 0, + "664273a8-25f3-4bd3-a882-9ad091d044a7", + 1, + "number" + ], + [ + "7c303c5a-7dc1-466d-a4ec-e2c9389d9242", + "8126eae4-fafd-4332-916b-9b5d33b49b04", + 0, + "664273a8-25f3-4bd3-a882-9ad091d044a7", + 2, + "number" + ], + [ + "c7ebf2d9-0b65-4f27-aa79-7a9318ee227e", + "bfed79c6-aeea-48ed-8b91-acf0399e6c08", + 0, + "cf1bbef8-e5ea-4420-bd5a-7461066a6811", + 0, + "CONDITIONING" + ], + [ + "39f0c208-6ba4-4810-80f4-865a3e21def1", + "00433bec-d6df-4bcd-ac81-8c6e6e769206", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 2, + "number" + ], + [ + "77df0f48-e098-48de-94a9-1affd0bb4d45", + "5eb84e5d-df25-4c01-8a3b-2ecf763241cf", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 3, + "number" + ], + [ + "a41cb1e6-0b4e-41c8-99ec-7c6a6c324711", + "789c8800-6e96-4705-ab7a-d3a047ffefca", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 4, + "string" + ], + [ + "0f6b8ed9-040d-474b-9ee5-89d5411852cb", + "b301322b-e2c1-4a0c-9b93-702f0ae9c75d", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 5, + "string" + ], + [ + "76a3a3ff-e96c-4e70-89e6-bbedf972cd80", + "44d79d5d-21a7-4ce7-927d-4656f902fad0", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 0, + "MODEL" + ], + [ + "0a5897e2-423c-4eb9-a3b3-ec9d72ba6d0a", + "44d79d5d-21a7-4ce7-927d-4656f902fad0", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 0, + "MODEL" + ], + [ + "3762268c-3bf8-4911-a73f-ee0073975646", + "5eb84e5d-df25-4c01-8a3b-2ecf763241cf", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 3, + "number" + ], + [ + "58614001-65af-4098-9538-e8335accbce6", + "664273a8-25f3-4bd3-a882-9ad091d044a7", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 8, + "LATENT" + ], + [ + "4ad86438-4df3-4e21-b1f9-2e11bfde6bdd", + "789c8800-6e96-4705-ab7a-d3a047ffefca", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 4, + "string" + ], + [ + "73568e55-a89e-42a2-ad1e-67789b193a66", + "b301322b-e2c1-4a0c-9b93-702f0ae9c75d", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 5, + "string" + ], + [ + "d8843bc1-0512-4ff4-9c4b-5eef209b310a", + "3d5bb81f-0653-4570-990c-f6e416e7644e", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 9, + "number" + ], + [ + "98394a9e-c31a-417b-9387-09c267be1ae4", + "b1d4d347-e813-4890-8fa2-2c2a9671d7c1", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 9, + "number" + ], + [ + "c5632290-24e5-46da-b5ab-d46af8fb36c2", + "b4f0ddef-3644-426a-8760-02648f159336", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 2, + "number" + ], + [ + "6e2078f5-8dd6-474f-82a1-7a2ed5882bb8", + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 0, + "59272bf6-089c-42c0-93c7-f59eed127304", + 0, + "LATENT" + ], + [ + "0f5295f5-f936-42d2-85a9-f615bf385b5d", + "c69d01b8-90c7-456c-80b4-db4db5cc5585", + 0, + "59272bf6-089c-42c0-93c7-f59eed127304", + 1, + "VAE" + ], + [ + "36e8e16e-6d7a-4edc-87b3-9640143d9404", + "6d6c86b3-1011-4c2d-bfd1-3b73b1602a2d", + 0, + "b0ae8979-fb4c-4a0e-a29c-4c7aa3e4cdaf", + 1, + "string" + ], + [ + "b458f085-111c-4dbd-bf3b-dc243deece16", + "59272bf6-089c-42c0-93c7-f59eed127304", + 0, + "b0ae8979-fb4c-4a0e-a29c-4c7aa3e4cdaf", + 0, + "IMAGE" + ], + [ + "fbb5ab96-8b10-44e4-b7c4-e0b8b6cb7575", + "69355b65-e85f-4d59-bdcd-bdf411a76f76", + 0, + "bfed79c6-aeea-48ed-8b91-acf0399e6c08", + 0, + "CONDITIONING" + ], + [ + "0061bcd7-db49-49cc-871f-fc18354d5a4a", + "521cd40a-2a84-42de-829e-08f68cc78f7e", + 0, + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 1, + "number" + ], + [ + "e58d7ed0-d1f8-440c-b35b-2eca4472809f", + "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + 0, + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 2, + "number" + ], + [ + "cd0c1ad6-6010-4c83-a7e7-eaaf6f648d24", + "44d79d5d-21a7-4ce7-927d-4656f902fad0", + 1, + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 0, + "CLIP" + ], + [ + "decf2bcb-67c1-47e1-ae5d-c46ddb58db14", + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 0, + "69355b65-e85f-4d59-bdcd-bdf411a76f76", + 0, + "CONDITIONING" + ], + [ + "2cf2b105-f9e7-436d-858f-1c4cdd836ac0", + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 1, + "69355b65-e85f-4d59-bdcd-bdf411a76f76", + 1, + "CONDITIONING" + ], + [ + "009b21e1-a7d9-4f91-81dc-4c36aa719044", + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 2, + "bfed79c6-aeea-48ed-8b91-acf0399e6c08", + 1, + "CONDITIONING" + ], + [ + "8ed29fbf-3843-4b26-b85a-b66c7c87ee1b", + "63b37ed5-a9d0-49a5-b944-d7abd1178870", + 3, + "cf1bbef8-e5ea-4420-bd5a-7461066a6811", + 1, + "CONDITIONING" + ], + [ + "8501139f-e47d-4f1d-adad-2d43412c535e", + "44d79d5d-21a7-4ce7-927d-4656f902fad0", + 1, + "a950c6d6-9c70-451e-b713-e9c645c328af", + 0, + "CLIP" + ], + [ + "59369121-320c-4a84-93a1-3e4f0b789f25", + "a950c6d6-9c70-451e-b713-e9c645c328af", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 6, + "CONDITIONING" + ], + [ + "f7fe1fa2-735c-4e58-a571-5a981cb6485d", + "a950c6d6-9c70-451e-b713-e9c645c328af", + 1, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 7, + "CONDITIONING" + ], + [ + "064b8317-c5b4-42ff-a5f0-af9b67ae35e0", + "a950c6d6-9c70-451e-b713-e9c645c328af", + 1, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 7, + "CONDITIONING" + ], + [ + "8f46d185-bb4f-4872-9441-e749baaea404", + "8126eae4-fafd-4332-916b-9b5d33b49b04", + 0, + "7fc38340-d13f-4c85-9e5b-b285bb6439e9", + 0, + "number" + ], + [ + "7bafd1c6-f817-4d29-af35-c5f3f043fec3", + "7fc38340-d13f-4c85-9e5b-b285bb6439e9", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 1, + "number" + ], + [ + "54d7994c-777a-4b5d-a5e7-46ad8f78caac", + "b0ae8979-fb4c-4a0e-a29c-4c7aa3e4cdaf", + 0, + "b5bae397-2c92-4241-9658-6ce61d43b9bd", + 0, + -1 + ], + [ + "4e35cf03-cda3-4d75-8fc7-10790b3a3342", + "b5bae397-2c92-4241-9658-6ce61d43b9bd", + 0, + "65d58159-d87b-4fb9-a078-f503885336eb", + 1, + -1 + ], + [ + "fc2d2bf6-ff19-4ac6-a97e-f3898a2172f8", + "c69d01b8-90c7-456c-80b4-db4db5cc5585", + 0, + "5a6f35be-1afe-41d6-b486-6a7c41861af8", + 1, + "VAE" + ], + [ + "bfb1cbb9-2adc-491d-ae70-969e9ab4cca4", + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 0, + "5a6f35be-1afe-41d6-b486-6a7c41861af8", + 0, + "LATENT" + ], + [ + "9ef372d0-fde4-43c8-8b96-53905bbc5b97", + "fe325d0b-7665-462e-8138-fff119d35aca", + 0, + "15ae90b1-faac-4447-bfef-8e3a5f5ac200", + 0, + -1 + ], + [ + "307047a2-f35d-4a63-b5d5-ccf299e55f56", + "e82c71ba-331d-45a0-baa4-eb7de69da094", + 0, + "15ae90b1-faac-4447-bfef-8e3a5f5ac200", + 1, + "*" + ], + [ + "7b7c37d4-aaab-4cc1-a94e-dd11b27e9bd1", + "cf1bbef8-e5ea-4420-bd5a-7461066a6811", + 0, + "922f9889-8a18-4744-9caf-8eaac698a77b", + 0, + "CONDITIONING" + ], + [ + "bdce8056-5c70-462d-854f-7542f247c817", + "a950c6d6-9c70-451e-b713-e9c645c328af", + 0, + "922f9889-8a18-4744-9caf-8eaac698a77b", + 1, + "CONDITIONING" + ], + [ + "e3e0c4f6-2877-469b-9410-733a182634ec", + "922f9889-8a18-4744-9caf-8eaac698a77b", + 0, + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 6, + "CONDITIONING" + ], + [ + "d76f69c7-d90a-42ec-8a11-d8a634378f36", + "6d6c86b3-1011-4c2d-bfd1-3b73b1602a2d", + 0, + "0a53404e-479c-4b2f-92ca-32297caf3435", + 1, + "string" + ], + [ + "62acb01a-19f2-4be4-934a-fcd57e5b6f15", + "5a6f35be-1afe-41d6-b486-6a7c41861af8", + 0, + "0a53404e-479c-4b2f-92ca-32297caf3435", + 0, + "IMAGE" + ], + [ + "750e2e37-9ac6-43e0-bfdc-178ef79c495c", + "0a53404e-479c-4b2f-92ca-32297caf3435", + 0, + "b5bae397-2c92-4241-9658-6ce61d43b9bd", + 2, + -1 + ], + [ + "24aa2861-50f0-4250-9b02-7f36c5eef04c", + "cbd9dcc2-9165-4b39-8f2e-4b9cbc699e05", + 0, + "6bc6e1f3-f30b-4887-91d3-4e9e0cb91eb1", + 0, + "number,array,object" + ], + [ + "502a25e6-ddd2-443a-8673-d057b4c18f46", + "7fc38340-d13f-4c85-9e5b-b285bb6439e9", + 0, + "6bc6e1f3-f30b-4887-91d3-4e9e0cb91eb1", + 1, + "number" + ], + [ + "2a6f9f46-f211-481b-8003-c808553edb79", + "6bc6e1f3-f30b-4887-91d3-4e9e0cb91eb1", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 1, + "number" + ], + [ + "30e795a0-6790-450d-815c-bb5f20bf53ed", + "65d58159-d87b-4fb9-a078-f503885336eb", + 0, + "c144a016-4a67-45dd-ba14-67086c12f93f", + 0, + "COMFYBOX_IMAGES,COMFYBOX_IMAGE" + ], + [ + "96493a1f-6de1-4130-8ea2-041a04e5b3e8", + "65d58159-d87b-4fb9-a078-f503885336eb", + 1, + "c144a016-4a67-45dd-ba14-67086c12f93f", + 1, + "number" + ], + [ + "ae20fccd-217c-4012-a410-d826190ca20b", + "c144a016-4a67-45dd-ba14-67086c12f93f", + 0, + "d8a4bc6d-fc91-487a-b747-c2a6fc973dd1", + 0, + "*" + ], + [ + "1c0003c0-7972-48fc-9866-123a7407f542", + "7227f774-8dd8-4dd3-90e0-c9bde1d66ec9", + 0, + "d8a4bc6d-fc91-487a-b747-c2a6fc973dd1", + 1, + -1 + ], + [ + "ec928820-0d7a-4d9e-9c0d-aee1ef9b44d7", + "0a53404e-479c-4b2f-92ca-32297caf3435", + 0, + "b5bae397-2c92-4241-9658-6ce61d43b9bd", + 1, + -1 + ], + [ + "6e0a7214-01d1-4a1b-a21e-ecf8b5883673", + "15ae90b1-faac-4447-bfef-8e3a5f5ac200", + 0, + "b5bae397-2c92-4241-9658-6ce61d43b9bd", + 2, + -1 + ], + [ + "029f5c18-56fc-46db-9491-f3e4bcca2c5e", + "0c7eba33-4366-4e46-9180-94444e6c8ccf", + 0, + "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + 1, + "string" + ], + [ + "0a26f849-e471-4693-ae74-1c1dfd4cce7e", + "f3689864-f2b2-4e48-a95b-0aadc1fc17cf", + 0, + "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + 4, + "string" + ], + [ + "c97c40c8-1bdc-491e-b898-f70f0b6f803f", + "207755aa-7fb7-4792-8a61-1b8d9079b1c2", + 0, + "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + 0, + "LATENT" + ], + [ + "e2c12992-6c1c-4b56-bc1e-f8b529610bd2", + "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + 0, + "13352a3a-cb14-4871-8f31-1d24c13eea99", + 8, + "LATENT" + ], + [ + "4dcd8cae-3bfa-4640-b1c6-b1336ee392f9", + "521cd40a-2a84-42de-829e-08f68cc78f7e", + 0, + "a463e581-d971-44fd-8bcf-910fcb274760", + 0, + "number" + ], + [ + "d4a46999-4d9e-4825-a509-4194f046edef", + "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + 0, + "a463e581-d971-44fd-8bcf-910fcb274760", + 1, + "number" + ], + [ + "dda7b297-301e-43b7-b316-af27373ab4c1", + "a463e581-d971-44fd-8bcf-910fcb274760", + 0, + "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + 2, + "number" + ], + [ + "36ab2c95-e545-47d4-b3c3-059e6cdc4c03", + "a463e581-d971-44fd-8bcf-910fcb274760", + 1, + "ecce0456-e81a-43ba-8df6-65e8e9fe6cab", + 3, + "number" + ], + [ + "b66f28aa-8bfa-4ec2-afa9-602907a2bbe0", + "521cd40a-2a84-42de-829e-08f68cc78f7e", + 0, + "0bb0fc82-c36d-4d2f-aaef-47d03351fc7f", + 0, + "*" + ], + [ + "6fbe6e63-8959-4f71-98b4-65d5513e6e0f", + "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + 0, + "0bb0fc82-c36d-4d2f-aaef-47d03351fc7f", + 1, + "*" + ], + [ + "8ade51ea-1e13-4248-8d82-7260c5c99750", + "0bb0fc82-c36d-4d2f-aaef-47d03351fc7f", + 0, + "521cd40a-2a84-42de-829e-08f68cc78f7e", + 0, + -1 + ], + [ + "f8036326-7fc6-4921-a372-08e3f4cb73b5", + "0bb0fc82-c36d-4d2f-aaef-47d03351fc7f", + 1, + "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + 0, + -1 + ], + [ + "ec05b598-823e-47d1-b42d-3b4a3ecc1911", + "e74354b0-f896-4a20-8396-8a0a26990bc6", + 0, + "0bb0fc82-c36d-4d2f-aaef-47d03351fc7f", + 2, + -1 + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 10 + }, + "attrs": { + "title": "Conditioning Regions", + "queuePromptButtonName": "Queue Prompt", + "queuePromptButtonRunWorkflow": true + }, + "layout": { + "root": "923286d6-31c2-4d73-852f-2461c1496b83", + "allItems": { + "923286d6-31c2-4d73-852f-2461c1496b83": { + "dragItem": { + "type": "container", + "id": "923286d6-31c2-4d73-852f-2461c1496b83", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274", + "f8f4bf76-05ee-401f-8c24-602f6fee0838" + ] + }, + "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274": { + "dragItem": { + "type": "container", + "id": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "1594ebe5-5a55-409c-b564-72b5d7bdf74a", + "b269a9c3-d714-4a9d-8582-0a38100e0621", + "d5d65719-1fcb-4060-90d2-ca21498c1cdf", + "815c12de-9378-4b1c-a7a1-9b412b116c77", + "891d33d6-039f-4174-8a97-68bc563af39d", + "818d07c5-51cd-4341-9206-67fc7a89d64e" + ], + "parent": "923286d6-31c2-4d73-852f-2461c1496b83" + }, + "f8f4bf76-05ee-401f-8c24-602f6fee0838": { + "dragItem": { + "type": "container", + "id": "f8f4bf76-05ee-401f-8c24-602f6fee0838", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "4561242c-56f4-4294-adcb-2c8041b2ddbe" + ], + "parent": "923286d6-31c2-4d73-852f-2461c1496b83" + }, + "0645a065-a1b0-4647-b67b-338239f0d8a5": { + "dragItem": { + "type": "widget", + "id": "0645a065-a1b0-4647-b67b-338239f0d8a5", + "nodeId": "dfbfcfe3-cc90-47be-9d9a-6ef8566f4164", + "attrs": { + "title": "Checkpoint", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "f5dbcfb9-2572-45cd-adbd-81eabdb8b1b3" + }, + "1594ebe5-5a55-409c-b564-72b5d7bdf74a": { + "dragItem": { + "type": "container", + "id": "1594ebe5-5a55-409c-b564-72b5d7bdf74a", + "attrs": { + "title": "Models", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "f5dbcfb9-2572-45cd-adbd-81eabdb8b1b3" + ], + "parent": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274" + }, + "0b422b73-278b-46ed-a919-5b8fed1f0d85": { + "dragItem": { + "type": "widget", + "id": "0b422b73-278b-46ed-a919-5b8fed1f0d85", + "nodeId": "25b1fbf0-4014-46be-a6e6-ea244056620c", + "attrs": { + "title": "VAE", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "f5dbcfb9-2572-45cd-adbd-81eabdb8b1b3" + }, + "5892aaff-735a-4e99-a882-c84c3f5834c8": { + "dragItem": { + "type": "widget", + "id": "5892aaff-735a-4e99-a882-c84c3f5834c8", + "nodeId": "521cd40a-2a84-42de-829e-08f68cc78f7e", + "attrs": { + "title": "Width", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "0d329233-0400-4f0f-8b04-cd287c8d74ab" + }, + "aa7345d0-ae57-488f-8011-2084c0287026": { + "dragItem": { + "type": "widget", + "id": "aa7345d0-ae57-488f-8011-2084c0287026", + "nodeId": "8f4c826f-9440-43f3-8ba2-dbdc0eeece9a", + "attrs": { + "title": "Height", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "0d329233-0400-4f0f-8b04-cd287c8d74ab" + }, + "14ed881e-2b26-4464-b3ec-20009d2efd0f": { + "dragItem": { + "type": "widget", + "id": "14ed881e-2b26-4464-b3ec-20009d2efd0f", + "nodeId": "8126eae4-fafd-4332-916b-9b5d33b49b04", + "attrs": { + "title": "Batch Size", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "649d3856-b407-4d68-8fee-49b7403e96d7" + }, + "b269a9c3-d714-4a9d-8582-0a38100e0621": { + "dragItem": { + "type": "container", + "id": "b269a9c3-d714-4a9d-8582-0a38100e0621", + "attrs": { + "title": "Latent Image", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "0d329233-0400-4f0f-8b04-cd287c8d74ab", + "649d3856-b407-4d68-8fee-49b7403e96d7" + ], + "parent": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274" + }, + "0d329233-0400-4f0f-8b04-cd287c8d74ab": { + "dragItem": { + "type": "container", + "id": "0d329233-0400-4f0f-8b04-cd287c8d74ab", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "5892aaff-735a-4e99-a882-c84c3f5834c8", + "342f1a3a-c2d1-4db4-8236-0f0b3f824c16", + "aa7345d0-ae57-488f-8011-2084c0287026" + ], + "parent": "b269a9c3-d714-4a9d-8582-0a38100e0621" + }, + "649d3856-b407-4d68-8fee-49b7403e96d7": { + "dragItem": { + "type": "container", + "id": "649d3856-b407-4d68-8fee-49b7403e96d7", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "14ed881e-2b26-4464-b3ec-20009d2efd0f" + ], + "parent": "b269a9c3-d714-4a9d-8582-0a38100e0621" + }, + "14e902e0-2493-4535-9c6f-5d2f72cb6bbc": { + "dragItem": { + "type": "widget", + "id": "14e902e0-2493-4535-9c6f-5d2f72cb6bbc", + "nodeId": "ab42e00d-7c37-49b8-9e6a-3a99b43c36e7", + "attrs": { + "title": "Region 1", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "70ff9779-0d06-4b65-8ff6-922fcf562d20" + }, + "815c12de-9378-4b1c-a7a1-9b412b116c77": { + "dragItem": { + "type": "container", + "id": "815c12de-9378-4b1c-a7a1-9b412b116c77", + "attrs": { + "title": "Prompt", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "70ff9779-0d06-4b65-8ff6-922fcf562d20", + "527575c4-9748-416c-95bd-c32097c85351", + "a437496d-61f4-42c7-94d6-0ba9a7733f1b", + "fe1ceb3f-5b79-41bd-875c-14e68d08635d", + "6f641a72-694e-4746-824c-52ec762444fb" + ], + "parent": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274" + }, + "097db6aa-771a-44a8-bc3a-ac22cc5dbd02": { + "dragItem": { + "type": "widget", + "id": "097db6aa-771a-44a8-bc3a-ac22cc5dbd02", + "nodeId": "c26db5a1-497e-4fd9-a419-f6d5bce07675", + "attrs": { + "title": "Region 2", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "70ff9779-0d06-4b65-8ff6-922fcf562d20" + }, + "006ee3ae-03e4-4985-98a1-012a8264b156": { + "dragItem": { + "type": "widget", + "id": "006ee3ae-03e4-4985-98a1-012a8264b156", + "nodeId": "8f906cf9-e254-4a32-aa04-367e063a4f71", + "attrs": { + "title": "Region 3", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "a437496d-61f4-42c7-94d6-0ba9a7733f1b" + }, + "342032a0-bcd3-4ecd-ba5c-aa1e835e371f": { + "dragItem": { + "type": "widget", + "id": "342032a0-bcd3-4ecd-ba5c-aa1e835e371f", + "nodeId": "80410a47-966b-4d51-b54c-43b98aba786d", + "attrs": { + "title": "Region 4", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "a437496d-61f4-42c7-94d6-0ba9a7733f1b" + }, + "70ff9779-0d06-4b65-8ff6-922fcf562d20": { + "dragItem": { + "type": "container", + "id": "70ff9779-0d06-4b65-8ff6-922fcf562d20", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "14e902e0-2493-4535-9c6f-5d2f72cb6bbc", + "097db6aa-771a-44a8-bc3a-ac22cc5dbd02" + ], + "parent": "815c12de-9378-4b1c-a7a1-9b412b116c77" + }, + "a437496d-61f4-42c7-94d6-0ba9a7733f1b": { + "dragItem": { + "type": "container", + "id": "a437496d-61f4-42c7-94d6-0ba9a7733f1b", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "006ee3ae-03e4-4985-98a1-012a8264b156", + "342032a0-bcd3-4ecd-ba5c-aa1e835e371f" + ], + "parent": "815c12de-9378-4b1c-a7a1-9b412b116c77" + }, + "063c33a3-3b63-45a0-9c14-619c44fdebbb": { + "dragItem": { + "type": "widget", + "id": "063c33a3-3b63-45a0-9c14-619c44fdebbb", + "nodeId": "1f5a74c0-8cdb-44bd-b35c-9e32d26e3e08", + "attrs": { + "title": "Seed", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "adbaf4a1-7d03-4771-beaa-ef735b196fe1" + }, + "4f148964-1cf0-401f-9bdd-8487c8595641": { + "dragItem": { + "type": "widget", + "id": "4f148964-1cf0-401f-9bdd-8487c8595641", + "nodeId": "00433bec-d6df-4bcd-ac81-8c6e6e769206", + "attrs": { + "title": "Steps", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "f3705c73-2a8a-4981-8345-0018268cafd1" + }, + "9895dc76-f4f5-41ad-82df-b8cf4c305d74": { + "dragItem": { + "type": "widget", + "id": "9895dc76-f4f5-41ad-82df-b8cf4c305d74", + "nodeId": "5eb84e5d-df25-4c01-8a3b-2ecf763241cf", + "attrs": { + "title": "CFG Scale", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "aefea3f8-e3be-48cd-afff-58cdbfaf84d0" + }, + "908c9658-5f33-441e-95d2-c95e677d5cb3": { + "dragItem": { + "type": "widget", + "id": "908c9658-5f33-441e-95d2-c95e677d5cb3", + "nodeId": "789c8800-6e96-4705-ab7a-d3a047ffefca", + "attrs": { + "title": "Sampler Name", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "85819b2d-a916-4558-8c50-83180a8bbee6" + }, + "081ebdce-de63-418d-bdb3-0f6dab229824": { + "dragItem": { + "type": "widget", + "id": "081ebdce-de63-418d-bdb3-0f6dab229824", + "nodeId": "b301322b-e2c1-4a0c-9b93-702f0ae9c75d", + "attrs": { + "title": "Scheduler", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "85819b2d-a916-4558-8c50-83180a8bbee6" + }, + "2a4379a8-82ad-4921-8d18-a1fc80386d1d": { + "dragItem": { + "type": "widget", + "id": "2a4379a8-82ad-4921-8d18-a1fc80386d1d", + "nodeId": "3d5bb81f-0653-4570-990c-f6e416e7644e", + "attrs": { + "title": "Denoise", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "dd678120-6894-40fc-bfa3-46105aea6730" + }, + "891d33d6-039f-4174-8a97-68bc563af39d": { + "dragItem": { + "type": "container", + "id": "891d33d6-039f-4174-8a97-68bc563af39d", + "attrs": { + "title": "KSampler", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "adbaf4a1-7d03-4771-beaa-ef735b196fe1", + "f3705c73-2a8a-4981-8345-0018268cafd1", + "aefea3f8-e3be-48cd-afff-58cdbfaf84d0", + "85819b2d-a916-4558-8c50-83180a8bbee6" + ], + "parent": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274" + }, + "5f2132fc-77ec-4d11-baa8-bd93189c950c": { + "dragItem": { + "type": "widget", + "id": "5f2132fc-77ec-4d11-baa8-bd93189c950c", + "nodeId": "5e220670-42bc-4c32-8b48-1ad943f7b93c", + "attrs": { + "title": "Negative", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "6f641a72-694e-4746-824c-52ec762444fb" + }, + "6f641a72-694e-4746-824c-52ec762444fb": { + "dragItem": { + "type": "container", + "id": "6f641a72-694e-4746-824c-52ec762444fb", + "attrs": { + "title": "Overall Prompt", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "block", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "9fc3e562-2180-47a8-85cc-f7735eb428b0", + "5f2132fc-77ec-4d11-baa8-bd93189c950c" + ], + "parent": "815c12de-9378-4b1c-a7a1-9b412b116c77" + }, + "9fc3e562-2180-47a8-85cc-f7735eb428b0": { + "dragItem": { + "type": "widget", + "id": "9fc3e562-2180-47a8-85cc-f7735eb428b0", + "nodeId": "362d29d0-889c-4587-907d-be9fda227c88", + "attrs": { + "title": "Positive", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "6f641a72-694e-4746-824c-52ec762444fb" + }, + "5f676209-398d-41dd-a6d3-47aa56d58e0d": { + "dragItem": { + "type": "widget", + "id": "5f676209-398d-41dd-a6d3-47aa56d58e0d", + "nodeId": "0c88667d-10cb-4e8c-a0c1-998bb9ac8b07", + "attrs": { + "title": "action", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "adbaf4a1-7d03-4771-beaa-ef735b196fe1" + }, + "adbaf4a1-7d03-4771-beaa-ef735b196fe1": { + "dragItem": { + "type": "container", + "id": "adbaf4a1-7d03-4771-beaa-ef735b196fe1", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "063c33a3-3b63-45a0-9c14-619c44fdebbb", + "5f676209-398d-41dd-a6d3-47aa56d58e0d" + ], + "parent": "891d33d6-039f-4174-8a97-68bc563af39d" + }, + "7e01bc2d-891a-4205-a9f4-61930034f425": { + "dragItem": { + "type": "widget", + "id": "7e01bc2d-891a-4205-a9f4-61930034f425", + "nodeId": "b4f0ddef-3644-426a-8760-02648f159336", + "attrs": { + "title": "Steps", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "dd678120-6894-40fc-bfa3-46105aea6730" + }, + "f3705c73-2a8a-4981-8345-0018268cafd1": { + "dragItem": { + "type": "container", + "id": "f3705c73-2a8a-4981-8345-0018268cafd1", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "4f148964-1cf0-401f-9bdd-8487c8595641" + ], + "parent": "891d33d6-039f-4174-8a97-68bc563af39d" + }, + "aefea3f8-e3be-48cd-afff-58cdbfaf84d0": { + "dragItem": { + "type": "container", + "id": "aefea3f8-e3be-48cd-afff-58cdbfaf84d0", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "9895dc76-f4f5-41ad-82df-b8cf4c305d74" + ], + "parent": "891d33d6-039f-4174-8a97-68bc563af39d" + }, + "85819b2d-a916-4558-8c50-83180a8bbee6": { + "dragItem": { + "type": "container", + "id": "85819b2d-a916-4558-8c50-83180a8bbee6", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "908c9658-5f33-441e-95d2-c95e677d5cb3", + "081ebdce-de63-418d-bdb3-0f6dab229824" + ], + "parent": "891d33d6-039f-4174-8a97-68bc563af39d" + }, + "fbda7f5a-00ad-4c5d-a66b-0259407368dc": { + "dragItem": { + "type": "widget", + "id": "fbda7f5a-00ad-4c5d-a66b-0259407368dc", + "nodeId": "6d6c86b3-1011-4c2d-bfd1-3b73b1602a2d", + "attrs": { + "title": "Filename Prefix", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "0dfa4a26-69bd-44bf-b324-9a999272ba9e" + }, + "4561242c-56f4-4294-adcb-2c8041b2ddbe": { + "dragItem": { + "type": "container", + "id": "4561242c-56f4-4294-adcb-2c8041b2ddbe", + "attrs": { + "title": "Result", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "352d6550-735d-4f90-811c-fe78e8eafa36", + "0dfa4a26-69bd-44bf-b324-9a999272ba9e", + "bd621a29-f353-4f27-8e29-b0ed8adab8e0" + ], + "parent": "f8f4bf76-05ee-401f-8c24-602f6fee0838" + }, + "352d6550-735d-4f90-811c-fe78e8eafa36": { + "dragItem": { + "type": "widget", + "id": "352d6550-735d-4f90-811c-fe78e8eafa36", + "nodeId": "65d58159-d87b-4fb9-a078-f503885336eb", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "4561242c-56f4-4294-adcb-2c8041b2ddbe" + }, + "f5dbcfb9-2572-45cd-adbd-81eabdb8b1b3": { + "dragItem": { + "type": "container", + "id": "f5dbcfb9-2572-45cd-adbd-81eabdb8b1b3", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "0645a065-a1b0-4647-b67b-338239f0d8a5", + "0b422b73-278b-46ed-a919-5b8fed1f0d85" + ], + "parent": "1594ebe5-5a55-409c-b564-72b5d7bdf74a" + }, + "22ca3d5a-db8c-4e44-b0b1-f780fd7d9ba7": { + "dragItem": { + "type": "widget", + "id": "22ca3d5a-db8c-4e44-b0b1-f780fd7d9ba7", + "nodeId": "776a6188-141b-4d15-8231-6e9e90192e8c", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "d5d65719-1fcb-4060-90d2-ca21498c1cdf" + }, + "d5d65719-1fcb-4060-90d2-ca21498c1cdf": { + "dragItem": { + "type": "container", + "id": "d5d65719-1fcb-4060-90d2-ca21498c1cdf", + "attrs": { + "title": "Regions", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "22ca3d5a-db8c-4e44-b0b1-f780fd7d9ba7" + ], + "parent": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274" + }, + "034316cb-e600-4b35-9bc5-458da8dfa45e": { + "dragItem": { + "type": "widget", + "id": "034316cb-e600-4b35-9bc5-458da8dfa45e", + "nodeId": "8b142cf8-36b3-41ca-a598-00b241fc2894", + "attrs": { + "title": "Strength 1", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "527575c4-9748-416c-95bd-c32097c85351" + }, + "31f9b928-e095-46aa-aacb-7c263b9e7754": { + "dragItem": { + "type": "widget", + "id": "31f9b928-e095-46aa-aacb-7c263b9e7754", + "nodeId": "eab7388c-7a04-4a07-8c96-8b6578a2796f", + "attrs": { + "title": "Strength 2", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "527575c4-9748-416c-95bd-c32097c85351" + }, + "bc28d3c0-db38-4680-980a-b015deeabbbe": { + "dragItem": { + "type": "widget", + "id": "bc28d3c0-db38-4680-980a-b015deeabbbe", + "nodeId": "4e496f27-7155-4e9b-823d-93135d0ec6fc", + "attrs": { + "title": "Strength 3", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "fe1ceb3f-5b79-41bd-875c-14e68d08635d" + }, + "d9396ebb-85ca-44ba-b194-45c22156d482": { + "dragItem": { + "type": "widget", + "id": "d9396ebb-85ca-44ba-b194-45c22156d482", + "nodeId": "88f6254d-8981-4b74-a2ba-4f4afcb59ec6", + "attrs": { + "title": "Strength 4", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "fe1ceb3f-5b79-41bd-875c-14e68d08635d" + }, + "527575c4-9748-416c-95bd-c32097c85351": { + "dragItem": { + "type": "container", + "id": "527575c4-9748-416c-95bd-c32097c85351", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "034316cb-e600-4b35-9bc5-458da8dfa45e", + "31f9b928-e095-46aa-aacb-7c263b9e7754" + ], + "parent": "815c12de-9378-4b1c-a7a1-9b412b116c77" + }, + "fe1ceb3f-5b79-41bd-875c-14e68d08635d": { + "dragItem": { + "type": "container", + "id": "fe1ceb3f-5b79-41bd-875c-14e68d08635d", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "bc28d3c0-db38-4680-980a-b015deeabbbe", + "d9396ebb-85ca-44ba-b194-45c22156d482" + ], + "parent": "815c12de-9378-4b1c-a7a1-9b412b116c77" + }, + "d42ce54d-3256-4a19-b092-abac549a6d46": { + "dragItem": { + "type": "widget", + "id": "d42ce54d-3256-4a19-b092-abac549a6d46", + "nodeId": "fe325d0b-7665-462e-8138-fff119d35aca", + "attrs": { + "title": "Clear Outputs", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "secondary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "0dfa4a26-69bd-44bf-b324-9a999272ba9e" + }, + "0dfa4a26-69bd-44bf-b324-9a999272ba9e": { + "dragItem": { + "type": "container", + "id": "0dfa4a26-69bd-44bf-b324-9a999272ba9e", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "fbda7f5a-00ad-4c5d-a66b-0259407368dc", + "d42ce54d-3256-4a19-b092-abac549a6d46" + ], + "parent": "4561242c-56f4-4294-adcb-2c8041b2ddbe" + }, + "3a78cee2-37b9-4d01-9d11-0616ba914cbc": { + "dragItem": { + "type": "widget", + "id": "3a78cee2-37b9-4d01-9d11-0616ba914cbc", + "nodeId": "7227f774-8dd8-4dd3-90e0-c9bde1d66ec9", + "attrs": { + "title": "Send...", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "secondary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "bd621a29-f353-4f27-8e29-b0ed8adab8e0" + }, + "bd621a29-f353-4f27-8e29-b0ed8adab8e0": { + "dragItem": { + "type": "container", + "id": "bd621a29-f353-4f27-8e29-b0ed8adab8e0", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "3a78cee2-37b9-4d01-9d11-0616ba914cbc" + ], + "parent": "4561242c-56f4-4294-adcb-2c8041b2ddbe" + }, + "77523ff9-4e34-49fa-b137-5a2580b7e6ed": { + "dragItem": { + "type": "widget", + "id": "77523ff9-4e34-49fa-b137-5a2580b7e6ed", + "nodeId": "efb9dd09-2c5b-4fa9-827a-8216fafddb89", + "attrs": { + "title": "Upscale By", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "7e579421-a679-48fe-9a2c-b94b6c889a72" + }, + "7859d7b9-0f0a-4bab-87de-5da09c44a3df": { + "dragItem": { + "type": "widget", + "id": "7859d7b9-0f0a-4bab-87de-5da09c44a3df", + "nodeId": "418bff41-d6c0-4c74-baa8-dbe1a6a31c48", + "attrs": { + "title": "Upscale Width", + "hidden": false, + "disabled": true, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "47a25d51-620f-4c75-8de9-7bac3535b690" + }, + "fb0a613a-1434-4255-8698-111929746881": { + "dragItem": { + "type": "widget", + "id": "fb0a613a-1434-4255-8698-111929746881", + "nodeId": "482503c5-33a2-4951-aac9-c68711567a43", + "attrs": { + "title": "Upscale Height", + "hidden": false, + "disabled": true, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "47a25d51-620f-4c75-8de9-7bac3535b690" + }, + "dac97332-7591-43a9-8138-7b9483606b8c": { + "dragItem": { + "type": "widget", + "id": "dac97332-7591-43a9-8138-7b9483606b8c", + "nodeId": "0c7eba33-4366-4e46-9180-94444e6c8ccf", + "attrs": { + "title": "Upscale Method", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "dbb072a0-43ba-4ac8-945f-796acd633396" + }, + "5d6ab7e0-63a9-4cd7-afea-b1ca4e2c669f": { + "dragItem": { + "type": "widget", + "id": "5d6ab7e0-63a9-4cd7-afea-b1ca4e2c669f", + "nodeId": "f3689864-f2b2-4e48-a95b-0aadc1fc17cf", + "attrs": { + "title": "Crop", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [], + "parent": "dbb072a0-43ba-4ac8-945f-796acd633396" + }, + "47a25d51-620f-4c75-8de9-7bac3535b690": { + "dragItem": { + "type": "container", + "id": "47a25d51-620f-4c75-8de9-7bac3535b690", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "7859d7b9-0f0a-4bab-87de-5da09c44a3df", + "fb0a613a-1434-4255-8698-111929746881" + ], + "parent": "818d07c5-51cd-4341-9206-67fc7a89d64e" + }, + "dbb072a0-43ba-4ac8-945f-796acd633396": { + "dragItem": { + "type": "container", + "id": "dbb072a0-43ba-4ac8-945f-796acd633396", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "dac97332-7591-43a9-8138-7b9483606b8c", + "5d6ab7e0-63a9-4cd7-afea-b1ca4e2c669f" + ], + "parent": "818d07c5-51cd-4341-9206-67fc7a89d64e" + }, + "7e579421-a679-48fe-9a2c-b94b6c889a72": { + "dragItem": { + "type": "container", + "id": "7e579421-a679-48fe-9a2c-b94b6c889a72", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "77523ff9-4e34-49fa-b137-5a2580b7e6ed" + ], + "parent": "818d07c5-51cd-4341-9206-67fc7a89d64e" + }, + "818d07c5-51cd-4341-9206-67fc7a89d64e": { + "dragItem": { + "type": "container", + "id": "818d07c5-51cd-4341-9206-67fc7a89d64e", + "attrs": { + "title": "KSampler (2nd Pass)", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "accordion", + "containerVariant": "block", + "openOnStartup": true, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "7e579421-a679-48fe-9a2c-b94b6c889a72", + "47a25d51-620f-4c75-8de9-7bac3535b690", + "dd678120-6894-40fc-bfa3-46105aea6730", + "dbb072a0-43ba-4ac8-945f-796acd633396" + ], + "parent": "58ff3f69-3e42-4d88-9d1d-aa0e86d5a274" + }, + "dd678120-6894-40fc-bfa3-46105aea6730": { + "dragItem": { + "type": "container", + "id": "dd678120-6894-40fc-bfa3-46105aea6730", + "attrs": { + "title": "", + "hidden": false, + "disabled": false, + "direction": "horizontal", + "classes": "", + "style": "", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "block", + "openOnStartup": false, + "buttonVariant": "primary", + "buttonSize": "large", + "tags": [] + } + }, + "children": [ + "2a4379a8-82ad-4921-8d18-a1fc80386d1d", + "7e01bc2d-891a-4205-a9f4-61930034f425" + ], + "parent": "818d07c5-51cd-4341-9206-67fc7a89d64e" + }, + "342f1a3a-c2d1-4db4-8236-0f0b3f824c16": { + "dragItem": { + "type": "widget", + "id": "342f1a3a-c2d1-4db4-8236-0f0b3f824c16", + "nodeId": "e74354b0-f896-4a20-8396-8a0a26990bc6", + "attrs": { + "title": "⮀", + "hidden": false, + "disabled": false, + "direction": "vertical", + "classes": "", + "style": "flex-grow: 1; min-width: 0;", + "nodeDisabledState": "hidden", + "variant": "gallery", + "containerVariant": "hidden", + "openOnStartup": false, + "buttonVariant": "secondary", + "buttonSize": "small", + "tags": [] + } + }, + "children": [], + "parent": "0d329233-0400-4f0f-8b04-cd287c8d74ab" + } + } + }, + "canvas": { + "offset": [ + -607.2128109237503, + 314.37823956 + ], + "scale": 0.5644739300537776 + } +} \ No newline at end of file diff --git a/src/lib/ComfyGraph.ts b/src/lib/ComfyGraph.ts index 2aa2e96..61d4392 100644 --- a/src/lib/ComfyGraph.ts +++ b/src/lib/ComfyGraph.ts @@ -11,7 +11,7 @@ import type { ComfyComboNode, ComfyWidgetNode } from "./nodes/widgets"; import selectionState from "./stores/selectionState"; import type { WritableLayoutStateStore } from "./stores/layoutStates"; import layoutStates from "./stores/layoutStates"; -import type { ComfyWorkflow } from "./stores/workflowState"; +import type { ComfyWorkflow, WorkflowInstID } from "./stores/workflowState"; import workflowState from "./stores/workflowState"; type ComfyGraphEvents = { @@ -163,7 +163,7 @@ export default class ComfyGraph extends LGraph { // case node was cloned const reg = LiteGraph.registered_node_types[node.type] - layoutState.groupItems(dragItemIDs, { title: reg.title }) + layoutState.groupItems(dragItemIDs, { title: reg.title, variant: "accordion", openOnStartup: true }) } } diff --git a/src/lib/components/ComfyApp.ts b/src/lib/components/ComfyApp.ts index 1e618b6..4fc0d62 100644 --- a/src/lib/components/ComfyApp.ts +++ b/src/lib/components/ComfyApp.ts @@ -220,6 +220,7 @@ export default class ComfyApp { } await this.initDefaultWorkflow("defaultWorkflow", options); await this.initDefaultWorkflow("upscale", options); + await this.initDefaultWorkflow("conditioningRegions", options); } // Save current workflow automatically @@ -356,6 +357,24 @@ export default class ComfyApp { ComfyApp.registerDefaultSlotHandlers(nodeId, nodeDef) } + + ComfyApp.registerComfyBoxSlotTypes() + } + + static registerComfyBoxSlotTypes() { + const reg = (type: string) => { + const lowerType = type.toLowerCase(); + if (!LiteGraph.slot_types_in.includes(lowerType)) { + LiteGraph.slot_types_in.push(lowerType); + } + if (!LiteGraph.slot_types_out.includes(type)) { + LiteGraph.slot_types_out.push(type); + } + } + + reg("COMFYBOX_IMAGE") + reg("COMFYBOX_IMAGES") + reg("COMFYBOX_REGION") } static registerDefaultSlotHandlers(nodeId: string, nodeDef: ComfyNodeDef) { @@ -592,6 +611,7 @@ export default class ComfyApp { setColor("COMFYBOX_IMAGES", "rebeccapurple") setColor("COMFYBOX_IMAGE", "fuchsia") + setColor("COMFYBOX_REGION", "salmon") setColor(BuiltInSlotType.EVENT, "lightseagreen") setColor(BuiltInSlotType.ACTION, "lightseagreen") } @@ -770,7 +790,9 @@ export default class ComfyApp { const promptFilename = get(configState).promptForWorkflowName; - let filename = "workflow.json"; + const title = workflow.attrs.title.trim() || "workflow" + + let filename = `${title}.json`; if (promptFilename) { filename = prompt("Save workflow as:", filename); if (!filename) return; @@ -781,7 +803,7 @@ export default class ComfyApp { else { const date = new Date(); const formattedDate = date.toISOString().replace(/:/g, '-').replace(/\.\d{3}/g, '').replace('T', '_').replace("Z", ""); - filename = `workflow - ${formattedDate}.json` + filename = `${title} - ${formattedDate}.json` } const indent = 2 diff --git a/src/lib/components/ComfyQueue.svelte b/src/lib/components/ComfyQueue.svelte index fcf4180..0208c74 100644 --- a/src/lib/components/ComfyQueue.svelte +++ b/src/lib/components/ComfyQueue.svelte @@ -150,7 +150,7 @@ let submessage = `Nodes: ${Object.keys(entry.prompt).length}` if (Object.keys(entry.outputs).length > 0) { - const imageCount = Object.values(entry.outputs).flatMap(o => o.images).length + const imageCount = Object.values(entry.outputs).filter(o => o.images).flatMap(o => o.images).length submessage = `Images: ${imageCount}` } @@ -172,14 +172,24 @@ result.images = thumbnails.map(convertComfyOutputToComfyURL); } + const outputs = Object.values(entry.outputs) + .filter(o => o.images) + .flatMap(o => o.images) + .map(convertComfyOutputToComfyURL); + if (outputs) { + result.images = result.images.concat(outputs) + } + return result; } function convertCompletedEntry(entry: CompletedQueueEntry): QueueUIEntry { const result = convertEntry(entry.entry, entry.status); - const images = Object.values(entry.entry.outputs).flatMap(o => o.images) - .map(convertComfyOutputToComfyURL); + const images = Object.values(entry.entry.outputs) + .filter(o => o.images) + .flatMap(o => o.images) + .map(convertComfyOutputToComfyURL); result.images = images if (entry.message) diff --git a/src/lib/components/WidgetContainer.svelte b/src/lib/components/WidgetContainer.svelte index 3354a8f..da6001d 100644 --- a/src/lib/components/WidgetContainer.svelte +++ b/src/lib/components/WidgetContainer.svelte @@ -151,5 +151,7 @@ .edit { border: 2px dashed var(--color-blue-400); + pointer-events: none; + user-select: none; } diff --git a/src/lib/components/gradio/gallery/Gallery.svelte b/src/lib/components/gradio/gallery/Gallery.svelte index e5e6184..f6a8108 100644 --- a/src/lib/components/gradio/gallery/Gallery.svelte +++ b/src/lib/components/gradio/gallery/Gallery.svelte @@ -15,6 +15,7 @@ export let label: string; export let root: string = ""; export let root_url: null | string = null; + export let scrollOnUpdate = false; export let value: Array | Array | null = null; export let style: Styles = { grid_cols: [2], @@ -120,6 +121,7 @@ let container: HTMLDivElement; async function scroll_to_img(index: number | null) { + if (!scrollOnUpdate) return; if (typeof index !== "number") return; await tick(); diff --git a/src/lib/nodes/ComfyRegionToCoordsNode.ts b/src/lib/nodes/ComfyRegionToCoordsNode.ts new file mode 100644 index 0000000..002e740 --- /dev/null +++ b/src/lib/nodes/ComfyRegionToCoordsNode.ts @@ -0,0 +1,35 @@ +import { LiteGraph, type SlotLayout } from "@litegraph-ts/core"; +import ComfyGraphNode from "./ComfyGraphNode"; + +export default class ComfyRegionToCoordsNode extends ComfyGraphNode { + static slotLayout: SlotLayout = { + inputs: [ + { name: "in", type: "COMFYBOX_REGION" }, + ], + outputs: [ + // same order as conditioning nodes + { name: "width", type: "number" }, + { name: "height", type: "number" }, + { name: "x", type: "number" }, + { name: "y", type: "number" }, + ], + } + + override onExecute() { + const value = this.getInputData(0); + if (!Array.isArray(value)) + return; + + this.setOutputData(0, value[2]) + this.setOutputData(1, value[3]) + this.setOutputData(2, value[0]) + this.setOutputData(3, value[1]) + } +} + +LiteGraph.registerNodeType({ + class: ComfyRegionToCoordsNode, + title: "Comfy.RegionToCoords", + desc: "Converts a COMFYBOX_REGION to four outputs of [width, height, x, y]", + type: "utils/region_to_coords" +}) diff --git a/src/lib/nodes/index.ts b/src/lib/nodes/index.ts index e232708..0de3fc8 100644 --- a/src/lib/nodes/index.ts +++ b/src/lib/nodes/index.ts @@ -1,5 +1,3 @@ -import "$lib/nodes/ComfyGraphNode"; - export { default as ComfyReroute } from "./ComfyReroute" export { default as ComfyPickFirstNode } from "./ComfyPickFirstNode" export { default as ComfyValueControl } from "./ComfyValueControl" @@ -8,3 +6,4 @@ export { default as ComfyTriggerNewEventNode } from "./ComfyTriggerNewEventNode" export { default as ComfyConfigureQueuePromptButton } from "./ComfyConfigureQueuePromptButton" export { default as ComfyPickImageNode } from "./ComfyPickImageNode" export { default as ComfyNoChangeEvent } from "./ComfyNoChangeEvent" +export { default as ComfyRegionToCoordsNode } from "./ComfyRegionToCoordsNode" diff --git a/src/lib/nodes/widgets/ComfyMultiRegionNode.ts b/src/lib/nodes/widgets/ComfyMultiRegionNode.ts new file mode 100644 index 0000000..a7297f6 --- /dev/null +++ b/src/lib/nodes/widgets/ComfyMultiRegionNode.ts @@ -0,0 +1,236 @@ +import { BuiltInSlotType, LiteGraph, type IComboWidget, type SlotLayout, type INumberWidget } from "@litegraph-ts/core"; + +import MultiRegionWidget from "$lib/widgets/MultiRegionWidget.svelte"; +import ComfyWidgetNode, { type ComfyWidgetProperties } from "./ComfyWidgetNode"; +import { clamp, isComfyBoxImageMetadata, type ComfyBoxImageMetadata, comfyBoxImageToComfyURL } from "$lib/utils"; +import { writable, type Writable } from "svelte/store"; + +/* x, y, width, height, all in range 0.0 - 1.0 */ +export type BoundingBox = [number, number, number, number] + +function isBoundingBox(param: any): param is BoundingBox { + return Array.isArray(param) && param.length === 4 && param.every(i => typeof i === "number") +} + +export interface ComfyMultiRegionProperties extends ComfyWidgetProperties { + regionCount: number, + canvasWidth: number, + canvasHeight: number, + canvasImageURL: string | null, + inputType: "size" | "image" +} + +const DEFAULT_BBOX: BoundingBox = [0.4, 0.4, 0.2, 0.2]; + +export default class ComfyMultiRegionNode extends ComfyWidgetNode { + override properties: ComfyMultiRegionProperties = { + tags: [], + defaultValue: false, + regionCount: 1, + canvasWidth: 512, + canvasHeight: 512, + canvasImageURL: null, + inputType: "size" + } + + static slotLayout: SlotLayout = { + inputs: [ + { name: "store", type: BuiltInSlotType.ACTION }, + ], + outputs: [ + { name: "changed", type: BuiltInSlotType.EVENT }, + + // dynamic outputs, may be removed later + { name: "region_1", type: "COMFYBOX_REGION" }, + ] + } + + override svelteComponentType = MultiRegionWidget; + override defaultValue: BoundingBox[] = [[...DEFAULT_BBOX]]; + override outputSlotName = null; + override storeActionName = "store"; + override changedEventName = "changed"; + + sizeChanged: Writable = writable(true); + regionsChanged: Writable = writable(true); + + inputTypeWidget: IComboWidget + regionCountWidget: INumberWidget + + constructor(name?: string) { + super(name, [[...DEFAULT_BBOX]]) + + this.inputTypeWidget = this.addWidget("combo", "Input Type", this.properties.inputType, "inputType", { values: ["size", "image"] }) + this.regionCountWidget = this.addWidget( + "number", + "# of Regions", + this.properties.regionCount, + (v: number) => { + this.setProperty("regionCount", clamp(v, 1, 16)); + }, + { min: 1, max: 16, step: 1, precision: 0 } + ) + } + + override onPropertyChanged(property: any, value: any) { + if (property === "regionCount") { + this.updateRegions() + } + else if (property === "width" || property === "height") { + this.updateSize(); + } + else if (property === "inputType") { + this.updateInputType(); + } + } + + override onExecute() { + let width = 0; + let height = 0; + let imageURL: string | null = null; + + this.updateInputType(); + + if (this.properties.inputType === "image") { + let comfyBoxImage = this.getInputData(1); + if (isComfyBoxImageMetadata(comfyBoxImage)) { + imageURL = comfyBoxImageToComfyURL(comfyBoxImage) + width = comfyBoxImage.width; + height = comfyBoxImage.height; + } + else { + imageURL = null; + } + } + else if (this.properties.inputType === "size") { + width = this.getInputData(1) || 0 + height = this.getInputData(2) || 0 + } + + if (width != this.properties.canvasWidth || height != this.properties.canvasHeight || imageURL != this.properties.canvasImageURL) { + this.properties.canvasWidth = width; + this.properties.canvasHeight = height; + this.properties.canvasImageURL = imageURL + this.updateSize(); + } + + const value = this.getValue(); + + for (let index = 0; index < this.properties.regionCount; index++) { + const bbox = value[index] + if (bbox != null) { + const output = this.outputs[index + 1] // + changed slot + if (output != null) { + let data = this.getOutputData(index + 1) || [0, 0, 0, 0] + data[0] = bbox[0] * this.properties.canvasWidth + data[1] = bbox[1] * this.properties.canvasHeight + data[2] = bbox[2] * this.properties.canvasWidth + data[3] = bbox[3] * this.properties.canvasHeight + this.setOutputData(index + 1, data) + } + } + } + } + + private updateRegions() { + this.properties.regionCount = Math.max(this.properties.regionCount, 0); + + if (this.outputs.length === this.properties.regionCount + 1) + return + + for (let index = this.outputs.length - 1; index > this.properties.regionCount; index--) { + if (this.outputs[index].type !== BuiltInSlotType.EVENT) { + this.removeOutput(index); + } + } + + for (let index = this.outputs.length - 1; index < this.properties.regionCount; index++) { + this.addOutput(`region_${index + 1}`, "COMFYBOX_REGION") + } + + this.regionsChanged.set(true); + // this.notifyPropsChanged(); + + this.setValue(this.getValue()) + } + + private _prevWidth = null + private _prevHeight = null + private _prevImageURL = null + + private updateSize(value?: BoundingBox[]): BoundingBox[] { + this.properties.canvasWidth = Math.max(this.properties.canvasWidth, 0); + this.properties.canvasHeight = Math.max(this.properties.canvasHeight, 0); + + value ||= this.getValue(); + + for (const bbox of value) { + bbox[0] = clamp(bbox[0], 0, 1); + bbox[1] = clamp(bbox[1], 0, 1); + bbox[2] = clamp(bbox[2], 0, 1) + bbox[3] = clamp(bbox[3], 0, 1) + } + + const sizeChanged = this.properties.canvasWidth != this._prevWidth + || this.properties.canvasHeight != this._prevHeight + || this.properties.canvasImageURL != this._prevImageURL + + this.sizeChanged.set(sizeChanged); + + this._prevWidth = this.properties.canvasWidth; + this._prevHeight = this.properties.canvasHeight; + this._prevImageURL = this.properties.canvasImageURL; + + // this.notifyPropsChanged(); + + return value + } + + private updateInputType() { + const inputType = this.properties.inputType; + if (inputType === "image" && this.inputs[1]?.name === "image") + return + else if (inputType === "size" && this.inputs[1]?.name === "width") + return + + for (let index = this.inputs.length - 1; index >= 1; index--) { + if (this.inputs[index].type !== BuiltInSlotType.ACTION) { + this.removeInput(index); + } + } + + if (inputType === "image") { + this.addInput("image", "COMFYBOX_IMAGE"); + } + else if (inputType === "size") { + this.addInput("width", "number") + this.addInput("height", "number") + } + } + + override parseValue(param: any): BoundingBox[] { + if (param == null || this.properties.regionCount <= 0) + return [] + + let val = [] + + if (isBoundingBox(param)) + val = this.updateSize([param]) + + if (Array.isArray(param) && param.every(isBoundingBox)) + val = this.updateSize(param.splice(0, this.properties.regionCount)) + + // Fill the array with missing regions + for (let index = val.length; index < this.properties.regionCount; index++) + val.push([...DEFAULT_BBOX]) + + return val; + } +} + +LiteGraph.registerNodeType({ + class: ComfyMultiRegionNode, + title: "UI.MultiRegion", + desc: "Overlays one or more regions over a canvas of the given width/height", + type: "ui/multi_region" +}) diff --git a/src/lib/nodes/widgets/index.ts b/src/lib/nodes/widgets/index.ts index 496e62e..130149c 100644 --- a/src/lib/nodes/widgets/index.ts +++ b/src/lib/nodes/widgets/index.ts @@ -8,3 +8,4 @@ export { default as ComfyImageUploadNode } from "./ComfyImageUploadNode" export { default as ComfyRadioNode } from "./ComfyRadioNode" export { default as ComfyNumberNode } from "./ComfyNumberNode" export { default as ComfyTextNode } from "./ComfyTextNode" +export { default as ComfyMultiRegionNode } from "./ComfyMultiRegionNode" diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 18467ea..d5eef4b 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,563 +1,563 @@ -import { type WidgetLayout, type WritableLayoutStateStore } from "$lib/stores/layoutStates"; -import selectionState from "$lib/stores/selectionState"; -import type { FileData as GradioFileData } from "@gradio/upload"; -import { Subgraph, type LGraph, type LGraphNode, type LLink, type SerializedLGraph, type UUID, type NodeID, type SlotType } from "@litegraph-ts/core"; -import { get } from "svelte/store"; -import type { ComfyNodeID } from "./api"; -import { type SerializedPrompt } from "./components/ComfyApp"; -import workflowState from "./stores/workflowState"; -import { ImageViewer } from "./ImageViewer"; - -export function clamp(n: number, min: number, max: number): number { - if (max <= min) - return min; - return Math.min(Math.max(n, min), max) -} - -export function negmod(n: number, m: number): number { - return ((n % m) + m) % m; -} - -export function range(size: number, startAt: number = 0): ReadonlyArray { - return [...Array(size).keys()].map(i => i + startAt); -} - -export function countNewLines(str: string): number { - return str.split(/\r\n|\r|\n/).length -} - -export function capitalize(str: string) { - return str.charAt(0).toUpperCase() + str.slice(1); -} - -export function basename(filepath: string): string { - const filename = filepath.split('/').pop().split('\\').pop(); - return filename.split('.').slice(0, -1).join('.'); -} - -export function truncateString(str: string, num: number): string { - if (num <= 0) - return "…"; - - if (str.length <= num) { - return str; - } - return str.slice(0, num) + "…"; -} - -export function* enumerate(iterable: Iterable): Iterable<[number, T]> { - let index = 0; - for (const value of iterable) { - yield [index++, value]; - } -} - -export function download(filename: string, text: string, type: string = "text/plain") { - const blob = new Blob([text], { type: type }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a') - a.href = url - a.download = filename - document.body.appendChild(a) - a.click() - setTimeout(function() { - a.remove(); - window.URL.revokeObjectURL(url); - }, 0); -} - -export function startDrag(evt: MouseEvent, layoutState: WritableLayoutStateStore) { - const dragItemId: string = evt.target.dataset["dragItemId"]; - const ss = get(selectionState) - const ls = get(layoutState) - - if (evt.button !== 0) { - if (ss.currentSelection.length <= 1 && !ls.isMenuOpen) - ss.currentSelection = [dragItemId] - return; - } - - const item = ls.allItems[dragItemId].dragItem - - console.debug("startDrag", item) - - if (evt.ctrlKey) { - const index = ss.currentSelection.indexOf(item.id) - if (index === -1) - ss.currentSelection.push(item.id); - else - ss.currentSelection.splice(index, 1); - ss.currentSelection = ss.currentSelection; - } - else { - ss.currentSelection = [item.id] - } - ss.currentSelectionNodes = []; - for (const id of ss.currentSelection) { - const item = ls.allItems[id].dragItem - if (item.type === "widget") { - const node = (item as WidgetLayout).node; - if (node) { - ss.currentSelectionNodes.push(node) - } - } - } - - layoutState.set(ls) - selectionState.set(ss) - layoutState.notifyWorkflowModified(); -}; - -export function stopDrag(evt: MouseEvent, layoutState: WritableLayoutStateStore) { - layoutState.notifyWorkflowModified(); -}; - -export function graphToGraphVis(graph: LGraph): string { - let links: string[] = [] - let seenLinks = new Set() - let subgraphs: Record = {} - let subgraphNodes: Record = {} - let idToInt: Record = {} - let curId = 0; - - const convId = (id: number | UUID): number => { - if (idToInt[id] == null) { - idToInt[id] = curId++; - } - return idToInt[id]; - } - - const addLink = (node: LGraphNode, link: LLink): string => { - const nodeA = node.graph.getNodeById(link.origin_id) - const nodeB = node.graph.getNodeById(link.target_id); - seenLinks.add(link.id) - return ` "${convId(nodeA.id)}_${nodeA.title}" -> "${convId(nodeB.id)}_${nodeB.title}";\n`; - } - - for (const node of graph.iterateNodesInOrderRecursive()) { - for (let [index, input] of enumerate(node.iterateInputInfo())) { - const link = node.getInputLink(index); - if (link && !seenLinks.has(link.id)) { - const linkText = addLink(node, link) - if (node.graph != graph) { - subgraphs[node.graph._subgraph_node.id] ||= [node.graph._subgraph_node, []] - subgraphs[node.graph._subgraph_node.id][1].push(linkText) - subgraphNodes[node.graph._subgraph_node.id] = node.graph._subgraph_node - } - else { - links.push(linkText) - } - } - } - for (let [index, output] of enumerate(node.iterateOutputInfo())) { - for (const link of node.getOutputLinks(index)) { - if (!seenLinks.has(link.id)) { - const linkText = addLink(node, link) - if (node.graph != graph) { - subgraphs[node.graph._subgraph_node.id] ||= [node.graph._subgraph_node, []] - subgraphs[node.graph._subgraph_node.id][1].push(linkText) - subgraphNodes[node.graph._subgraph_node.id] = node.graph._subgraph_node - } - else { - links.push(linkText) - } - } - } - } - } - - let out = "digraph {\n" - out += ' fontname="Helvetica,Arial,sans-serif"\n' - out += ' node [fontname="Helvetica,Arial,sans-serif"]\n' - out += ' edge [fontname="Helvetica,Arial,sans-serif"]\n' - out += ' node [shape=box style=filled fillcolor="#DDDDDD"]\n' - - for (const [subgraph, links] of Object.values(subgraphs)) { - // Subgraph name has to be prefixed with "cluster" to show up as a cluster... - out += ` subgraph cluster_subgraph_${convId(subgraph.id)} {\n` - out += ` label="${convId(subgraph.id)}_${subgraph.title}";\n`; - out += " color=red;\n"; - // out += " style=grey;\n"; - out += " " + links.join(" ") - out += " }\n" - } - - out += links.join("") - - out += "}" - return out -} - -export function workflowToGraphVis(workflow: SerializedLGraph): string { - let out = "digraph {\n" - - for (const link of workflow.links) { - const nodeA = workflow.nodes.find(n => n.id === link[1]) - const nodeB = workflow.nodes.find(n => n.id === link[3]) - out += `"${link[1]}_${nodeA.title}" -> "${link[3]}_${nodeB.title}"\n`; - } - - out += "}" - return out -} - -export function promptToGraphVis(prompt: SerializedPrompt): string { - let out = "digraph {\n" - - const ids: Record = {} - let nextID = 0; - - for (const pair of Object.entries(prompt.output)) { - const [id, o] = pair; - if (ids[id] == null) - ids[id] = nextID++; - - if ("class_type" in o) { - for (const pair2 of Object.entries(o.inputs)) { - const [inpName, i] = pair2; - - if (Array.isArray(i) && i.length === 2 && typeof i[0] === "string" && typeof i[1] === "number") { - // Link - const [inpID, inpSlot] = i; - if (ids[inpID] == null) - ids[inpID] = nextID++; - - const inpNode = prompt.output[inpID] - if (inpNode) { - out += `"${ids[inpID]}_${inpNode.class_type}" -> "${ids[id]}_${o.class_type}"\n` - } - } - else { - const value = String(i).substring(0, 20) - // Value - out += `"${ids[id]}-${inpName}-${value}" -> "${ids[id]}_${o.class_type}"\n` - } - } - } - } - - out += "}" - return out -} - -export function getNodeInfo(nodeId: ComfyNodeID): string { - const workflow = workflowState.getWorkflowByNodeID(nodeId); - if (workflow == null) - return nodeId; - - const title = workflow.graph?.getNodeByIdRecursive(nodeId)?.title; - if (title == null) - return nodeId; - - const displayNodeID = nodeId ? (nodeId.split("-")[0]) : String(nodeId); - return title + " (" + displayNodeID + ")" -} - -export const debounce = (callback: Function, wait = 250) => { - let timeout: NodeJS.Timeout | null = null; - return (...args: Array) => { - const next = () => callback(...args); - if (timeout) clearTimeout(timeout); - - timeout = setTimeout(next, wait); - }; -}; - -export function convertComfyOutputToGradio(output: SerializedPromptOutput): GradioFileData[] { - return output.images.map(convertComfyOutputEntryToGradio); -} - -export function convertComfyOutputEntryToGradio(r: ComfyImageLocation): GradioFileData { - const url = `http://${location.hostname}:8188` // TODO make configurable - const params = new URLSearchParams(r) - const fileData: GradioFileData = { - name: r.filename, - orig_name: r.filename, - is_file: false, - data: url + "/view?" + params - } - return fileData -} - -export function convertComfyOutputToComfyURL(output: string | ComfyImageLocation): string { - if (typeof output === "string") - return output; - - const params = new URLSearchParams(output) - const url = `http://${location.hostname}:8188` // TODO make configurable - return url + "/view?" + params -} - -export function convertGradioFileDataToComfyURL(image: GradioFileData, type: ComfyUploadImageType = "input"): string { - const baseUrl = `http://${location.hostname}:8188` // TODO make configurable - const params = new URLSearchParams({ filename: image.name, subfolder: "", type }) - return `${baseUrl}/view?${params}` -} - -export function convertGradioFileDataToComfyOutput(fileData: GradioFileData, type: ComfyUploadImageType = "input"): ComfyImageLocation { - if (!fileData.is_file) - throw "Can't convert blob data to comfy output!" - - return { - filename: fileData.name, - subfolder: "", - type - } -} - -export function convertFilenameToComfyURL(filename: string, - subfolder: string = "", - type: "input" | "output" | "temp" = "output"): string { - const params = new URLSearchParams({ - filename, - subfolder, - type - }) - const url = `http://${location.hostname}:8188` // TODO make configurable - return url + "/view?" + params -} - -export function jsonToJsObject(json: string): string { - // Try to parse, to see if it's real JSON - JSON.parse(json); - - const regex = /\"([^"]+)\":/g; - const hyphenRegex = /-([a-z])/g; - - return json.replace(regex, match => { - return match - .replace(hyphenRegex, g => g[1].toUpperCase()) - .replace(regex, "$1:"); - }); -} - -export type ComfyUploadImageType = "output" | "input" | "temp" - -export interface ComfyUploadImageAPIResponse { - name: string, // Yes this is different from the "executed" event args - subfolder: string, - type: ComfyUploadImageType -} - -/* - * Uploads an image into ComfyUI's `input` folder. - */ -export async function uploadImageToComfyUI(blob: Blob, filename: string, type: ComfyUploadImageType, subfolder: string = "", overwrite: boolean = false): Promise { - console.debug("[utils] Uploading image to ComfyUI", filename, blob.size) - - const url = `http://${location.hostname}:8188` // TODO make configurable - - const formData = new FormData(); - formData.append("image", blob, filename); - formData.set("type", type) - formData.set("subfolder", subfolder) - formData.set("overwrite", String(overwrite)) - - const req = new Request(url + "/upload/image", { - body: formData, - method: 'POST' - }); - - return fetch(req) - .then((r) => r.json()) - .then((resp) => { - return { - filename: resp.name, - subfolder: resp.subfolder, - type: resp.type - } - }); -} - -/** Raw output as received from ComfyUI's backend */ -export interface SerializedPromptOutput { - // Technically this response can contain arbitrary data, but "images" is the - // most frequently used as it's output by LoadImage and PreviewImage, the - // only two output nodes in base ComfyUI. - images: ComfyImageLocation[] | null, - - /* - * Other data - */ - [key: string]: any -} - -/** Raw output entry as received from ComfyUI's backend */ -export type ComfyImageLocation = { - /* Filename with extension in the subfolder. */ - filename: string, - /* Subfolder in the containing folder. */ - subfolder: string, - /* Base ComfyUI folder where the image is located. */ - type: ComfyUploadImageType -} - -/* - * Convenient type for passing around image filepaths and their metadata with - * wires. Needs to be converted to a filename for use with LoadImage. - * - * Litegraph type is COMFYBOX_IMAGE. The array type is COMFYBOX_IMAGES. - */ -export type ComfyBoxImageMetadata = { - /* For easy structural type detection */ - isComfyBoxImageMetadata: true, - /* Pointer to where this image resides in ComfyUI. */ - comfyUIFile: ComfyImageLocation, - /* Readable name of the image. */ - name: string - /* Tags applicable to this image, like ["mask"]. */ - tags: string[], - /* Image width. */ - width?: number, - /* Image height. */ - height?: number, -} - -export function isComfyBoxImageMetadata(value: any): value is ComfyBoxImageMetadata { - return value && typeof value === "object" && (value as any).isComfyBoxImageMetadata; -} - -export function isComfyBoxImageMetadataArray(value: any): value is ComfyBoxImageMetadata[] { - return Array.isArray(value) && value.every(isComfyBoxImageMetadata); -} - -export function isComfyExecutionResult(value: any): value is SerializedPromptOutput { - return value && typeof value === "object" && Array.isArray(value.images) -} - -export function filenameToComfyBoxMetadata(filename: string, type: ComfyUploadImageType, subfolder: string = ""): ComfyBoxImageMetadata { - return { - isComfyBoxImageMetadata: true, - comfyUIFile: { - filename, - subfolder, - type - }, - name: "Filename", - tags: [], - } -} - -export function comfyFileToComfyBoxMetadata(comfyUIFile: ComfyImageLocation): ComfyBoxImageMetadata { - return { - isComfyBoxImageMetadata: true, - comfyUIFile, - name: "File", - tags: [], - } -} - -/* - * Converts a ComfyUI file into an annotated filepath. Backend nodes like - * LoadImage support syntax like "subfolder/image.png [output]" to specify which - * image folder to load from. - */ -export function comfyFileToAnnotatedFilepath(comfyUIFile: ComfyImageLocation): string { - let path = "" - if (comfyUIFile.subfolder != "") - path = comfyUIFile.subfolder + "/"; - - path += `${comfyUIFile.filename} [${comfyUIFile.type}]` - return path; -} - -export function executionResultToImageMetadata(result: SerializedPromptOutput): ComfyBoxImageMetadata[] { - return result.images.map(comfyFileToComfyBoxMetadata) -} - -export function isComfyImageLocation(param: any): param is ComfyImageLocation { - return param != null && typeof param === "object" - && typeof param.filename === "string" - && typeof param.type === "string" -} - -export function parseWhateverIntoImageMetadata(param: any): ComfyBoxImageMetadata[] | null { - let meta: ComfyBoxImageMetadata[] | null = null - - if (isComfyBoxImageMetadata(param)) { - meta = [param]; - } - else if (Array.isArray(param) && param.every(isComfyBoxImageMetadata)) { - meta = param - } - else if (isComfyExecutionResult(param)) { - meta = executionResultToImageMetadata(param); - } - else if (isComfyImageLocation(param)) { - meta = [comfyFileToComfyBoxMetadata(param)] - } - else if (Array.isArray(param) && param.every(isComfyImageLocation)) { - meta = param.map(comfyFileToComfyBoxMetadata) - } - - return meta; -} - -export function parseWhateverIntoComfyImageLocations(param: any): ComfyImageLocation[] | null { - const meta = parseWhateverIntoImageMetadata(param); - if (!Array.isArray(meta)) - return null - - return meta.map(m => m.comfyUIFile); -} - -export function comfyBoxImageToComfyFile(image: ComfyBoxImageMetadata): ComfyImageLocation { - return image.comfyUIFile -} - -export function comfyBoxImageToComfyURL(image: ComfyBoxImageMetadata): string { - return convertComfyOutputToComfyURL(image.comfyUIFile) -} - -export function comfyURLToComfyFile(urlString: string): ComfyImageLocation | null { - const url = new URL(urlString); - const params = new URLSearchParams(url.search); - const filename = params.get("filename") - const type = params.get("type") as ComfyUploadImageType; - const subfolder = params.get("subfolder") || "" - - // If at least filename and type exist then we're good - if (filename != null && type != null) { - return { filename, type, subfolder } - } - - return null; -} - -export function showLightbox(images: string[], index: number, e: Event) { - e.preventDefault() - if (!images) - return - - ImageViewer.instance.showModal(images, index); - - e.stopPropagation() -} - -export function getLitegraphType(param: any): SlotType | null { - if (param == null) - return null; - - switch (typeof param) { - case "string": - return "string" - case "number": - case "bigint": - return "number" - case "boolean": - return "boolean" - case "object": - if (isComfyBoxImageMetadata(param)) { - return "COMFYBOX_IMAGE" - } - else if (isComfyBoxImageMetadataArray(param)) { - return "COMFYBOX_IMAGES" - } - return null; - case "symbol": - case "undefined": - case "function": - default: - return null; - } -} +import { type WidgetLayout, type WritableLayoutStateStore } from "$lib/stores/layoutStates"; +import selectionState from "$lib/stores/selectionState"; +import type { FileData as GradioFileData } from "@gradio/upload"; +import { Subgraph, type LGraph, type LGraphNode, type LLink, type SerializedLGraph, type UUID, type NodeID, type SlotType } from "@litegraph-ts/core"; +import { get } from "svelte/store"; +import type { ComfyNodeID } from "./api"; +import { type SerializedPrompt } from "./components/ComfyApp"; +import workflowState from "./stores/workflowState"; +import { ImageViewer } from "./ImageViewer"; + +export function clamp(n: number, min: number, max: number): number { + if (max <= min) + return min; + return Math.min(Math.max(n, min), max) +} + +export function negmod(n: number, m: number): number { + return ((n % m) + m) % m; +} + +export function range(size: number, startAt: number = 0): ReadonlyArray { + return [...Array(size).keys()].map(i => i + startAt); +} + +export function countNewLines(str: string): number { + return str.split(/\r\n|\r|\n/).length +} + +export function capitalize(str: string) { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +export function basename(filepath: string): string { + const filename = filepath.split('/').pop().split('\\').pop(); + return filename.split('.').slice(0, -1).join('.'); +} + +export function truncateString(str: string, num: number): string { + if (num <= 0) + return "…"; + + if (str.length <= num) { + return str; + } + return str.slice(0, num) + "…"; +} + +export function* enumerate(iterable: Iterable): Iterable<[number, T]> { + let index = 0; + for (const value of iterable) { + yield [index++, value]; + } +} + +export function download(filename: string, text: string, type: string = "text/plain") { + const blob = new Blob([text], { type: type }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a') + a.href = url + a.download = filename + document.body.appendChild(a) + a.click() + setTimeout(function() { + a.remove(); + window.URL.revokeObjectURL(url); + }, 0); +} + +export function startDrag(evt: MouseEvent, layoutState: WritableLayoutStateStore) { + const dragItemId: string = evt.target.dataset["dragItemId"]; + const ss = get(selectionState) + const ls = get(layoutState) + + if (evt.button !== 0) { + if (ss.currentSelection.length <= 1 && !ls.isMenuOpen) + ss.currentSelection = [dragItemId] + return; + } + + const item = ls.allItems[dragItemId].dragItem + + console.debug("startDrag", item) + + if (evt.ctrlKey) { + const index = ss.currentSelection.indexOf(item.id) + if (index === -1) + ss.currentSelection.push(item.id); + else + ss.currentSelection.splice(index, 1); + ss.currentSelection = ss.currentSelection; + } + else { + ss.currentSelection = [item.id] + } + ss.currentSelectionNodes = []; + for (const id of ss.currentSelection) { + const item = ls.allItems[id].dragItem + if (item.type === "widget") { + const node = (item as WidgetLayout).node; + if (node) { + ss.currentSelectionNodes.push(node) + } + } + } + + layoutState.set(ls) + selectionState.set(ss) + layoutState.notifyWorkflowModified(); +}; + +export function stopDrag(evt: MouseEvent, layoutState: WritableLayoutStateStore) { + layoutState.notifyWorkflowModified(); +}; + +export function graphToGraphVis(graph: LGraph): string { + let links: string[] = [] + let seenLinks = new Set() + let subgraphs: Record = {} + let subgraphNodes: Record = {} + let idToInt: Record = {} + let curId = 0; + + const convId = (id: number | UUID): number => { + if (idToInt[id] == null) { + idToInt[id] = curId++; + } + return idToInt[id]; + } + + const addLink = (node: LGraphNode, link: LLink): string => { + const nodeA = node.graph.getNodeById(link.origin_id) + const nodeB = node.graph.getNodeById(link.target_id); + seenLinks.add(link.id) + return ` "${convId(nodeA.id)}_${nodeA.title}" -> "${convId(nodeB.id)}_${nodeB.title}";\n`; + } + + for (const node of graph.iterateNodesInOrderRecursive()) { + for (let [index, input] of enumerate(node.iterateInputInfo())) { + const link = node.getInputLink(index); + if (link && !seenLinks.has(link.id)) { + const linkText = addLink(node, link) + if (node.graph != graph) { + subgraphs[node.graph._subgraph_node.id] ||= [node.graph._subgraph_node, []] + subgraphs[node.graph._subgraph_node.id][1].push(linkText) + subgraphNodes[node.graph._subgraph_node.id] = node.graph._subgraph_node + } + else { + links.push(linkText) + } + } + } + for (let [index, output] of enumerate(node.iterateOutputInfo())) { + for (const link of node.getOutputLinks(index)) { + if (!seenLinks.has(link.id)) { + const linkText = addLink(node, link) + if (node.graph != graph) { + subgraphs[node.graph._subgraph_node.id] ||= [node.graph._subgraph_node, []] + subgraphs[node.graph._subgraph_node.id][1].push(linkText) + subgraphNodes[node.graph._subgraph_node.id] = node.graph._subgraph_node + } + else { + links.push(linkText) + } + } + } + } + } + + let out = "digraph {\n" + out += ' fontname="Helvetica,Arial,sans-serif"\n' + out += ' node [fontname="Helvetica,Arial,sans-serif"]\n' + out += ' edge [fontname="Helvetica,Arial,sans-serif"]\n' + out += ' node [shape=box style=filled fillcolor="#DDDDDD"]\n' + + for (const [subgraph, links] of Object.values(subgraphs)) { + // Subgraph name has to be prefixed with "cluster" to show up as a cluster... + out += ` subgraph cluster_subgraph_${convId(subgraph.id)} {\n` + out += ` label="${convId(subgraph.id)}_${subgraph.title}";\n`; + out += " color=red;\n"; + // out += " style=grey;\n"; + out += " " + links.join(" ") + out += " }\n" + } + + out += links.join("") + + out += "}" + return out +} + +export function workflowToGraphVis(workflow: SerializedLGraph): string { + let out = "digraph {\n" + + for (const link of workflow.links) { + const nodeA = workflow.nodes.find(n => n.id === link[1]) + const nodeB = workflow.nodes.find(n => n.id === link[3]) + out += `"${link[1]}_${nodeA.title}" -> "${link[3]}_${nodeB.title}"\n`; + } + + out += "}" + return out +} + +export function promptToGraphVis(prompt: SerializedPrompt): string { + let out = "digraph {\n" + + const ids: Record = {} + let nextID = 0; + + for (const pair of Object.entries(prompt.output)) { + const [id, o] = pair; + if (ids[id] == null) + ids[id] = nextID++; + + if ("class_type" in o) { + for (const pair2 of Object.entries(o.inputs)) { + const [inpName, i] = pair2; + + if (Array.isArray(i) && i.length === 2 && typeof i[0] === "string" && typeof i[1] === "number") { + // Link + const [inpID, inpSlot] = i; + if (ids[inpID] == null) + ids[inpID] = nextID++; + + const inpNode = prompt.output[inpID] + if (inpNode) { + out += `"${ids[inpID]}_${inpNode.class_type}" -> "${ids[id]}_${o.class_type}"\n` + } + } + else { + const value = String(i).substring(0, 20) + // Value + out += `"${ids[id]}-${inpName}-${value}" -> "${ids[id]}_${o.class_type}"\n` + } + } + } + } + + out += "}" + return out +} + +export function getNodeInfo(nodeId: ComfyNodeID): string { + const workflow = workflowState.getWorkflowByNodeID(nodeId); + if (workflow == null) + return nodeId; + + const title = workflow.graph?.getNodeByIdRecursive(nodeId)?.title; + if (title == null) + return nodeId; + + const displayNodeID = nodeId ? (nodeId.split("-")[0]) : String(nodeId); + return title + " (" + displayNodeID + ")" +} + +export const debounce = (callback: Function, wait = 250) => { + let timeout: NodeJS.Timeout | null = null; + return (...args: Array) => { + const next = () => callback(...args); + if (timeout) clearTimeout(timeout); + + timeout = setTimeout(next, wait); + }; +}; + +export function convertComfyOutputToGradio(output: SerializedPromptOutput): GradioFileData[] { + return output.images.map(convertComfyOutputEntryToGradio); +} + +export function convertComfyOutputEntryToGradio(r: ComfyImageLocation): GradioFileData { + const url = `http://${location.hostname}:8188` // TODO make configurable + const params = new URLSearchParams(r) + const fileData: GradioFileData = { + name: r.filename, + orig_name: r.filename, + is_file: false, + data: url + "/view?" + params + } + return fileData +} + +export function convertComfyOutputToComfyURL(output: string | ComfyImageLocation): string { + if (typeof output === "string") + return output; + + const params = new URLSearchParams(output) + const url = `http://${location.hostname}:8188` // TODO make configurable + return url + "/view?" + params +} + +export function convertGradioFileDataToComfyURL(image: GradioFileData, type: ComfyUploadImageType = "input"): string { + const baseUrl = `http://${location.hostname}:8188` // TODO make configurable + const params = new URLSearchParams({ filename: image.name, subfolder: "", type }) + return `${baseUrl}/view?${params}` +} + +export function convertGradioFileDataToComfyOutput(fileData: GradioFileData, type: ComfyUploadImageType = "input"): ComfyImageLocation { + if (!fileData.is_file) + throw "Can't convert blob data to comfy output!" + + return { + filename: fileData.name, + subfolder: "", + type + } +} + +export function convertFilenameToComfyURL(filename: string, + subfolder: string = "", + type: "input" | "output" | "temp" = "output"): string { + const params = new URLSearchParams({ + filename, + subfolder, + type + }) + const url = `http://${location.hostname}:8188` // TODO make configurable + return url + "/view?" + params +} + +export function jsonToJsObject(json: string): string { + // Try to parse, to see if it's real JSON + JSON.parse(json); + + const regex = /\"([^"]+)\":/g; + const hyphenRegex = /-([a-z])/g; + + return json.replace(regex, match => { + return match + .replace(hyphenRegex, g => g[1].toUpperCase()) + .replace(regex, "$1:"); + }); +} + +export type ComfyUploadImageType = "output" | "input" | "temp" + +export interface ComfyUploadImageAPIResponse { + name: string, // Yes this is different from the "executed" event args + subfolder: string, + type: ComfyUploadImageType +} + +/* + * Uploads an image into ComfyUI's `input` folder. + */ +export async function uploadImageToComfyUI(blob: Blob, filename: string, type: ComfyUploadImageType, subfolder: string = "", overwrite: boolean = false): Promise { + console.debug("[utils] Uploading image to ComfyUI", filename, blob.size) + + const url = `http://${location.hostname}:8188` // TODO make configurable + + const formData = new FormData(); + formData.append("image", blob, filename); + formData.set("type", type) + formData.set("subfolder", subfolder) + formData.set("overwrite", String(overwrite)) + + const req = new Request(url + "/upload/image", { + body: formData, + method: 'POST' + }); + + return fetch(req) + .then((r) => r.json()) + .then((resp) => { + return { + filename: resp.name, + subfolder: resp.subfolder, + type: resp.type + } + }); +} + +/** Raw output as received from ComfyUI's backend */ +export interface SerializedPromptOutput { + // Technically this response can contain arbitrary data, but "images" is the + // most frequently used as it's output by LoadImage and PreviewImage, the + // only two output nodes in base ComfyUI. + images: ComfyImageLocation[] | null, + + /* + * Other data + */ + [key: string]: any +} + +/** Raw output entry as received from ComfyUI's backend */ +export type ComfyImageLocation = { + /* Filename with extension in the subfolder. */ + filename: string, + /* Subfolder in the containing folder. */ + subfolder: string, + /* Base ComfyUI folder where the image is located. */ + type: ComfyUploadImageType +} + +/* + * Convenient type for passing around image filepaths and their metadata with + * wires. Needs to be converted to a filename for use with LoadImage. + * + * Litegraph type is COMFYBOX_IMAGE. The array type is COMFYBOX_IMAGES. + */ +export type ComfyBoxImageMetadata = { + /* For easy structural type detection */ + isComfyBoxImageMetadata: true, + /* Pointer to where this image resides in ComfyUI. */ + comfyUIFile: ComfyImageLocation, + /* Readable name of the image. */ + name: string + /* Tags applicable to this image, like ["mask"]. */ + tags: string[], + /* Image width. */ + width?: number, + /* Image height. */ + height?: number, +} + +export function isComfyBoxImageMetadata(value: any): value is ComfyBoxImageMetadata { + return value && typeof value === "object" && (value as any).isComfyBoxImageMetadata; +} + +export function isComfyBoxImageMetadataArray(value: any): value is ComfyBoxImageMetadata[] { + return Array.isArray(value) && value.every(isComfyBoxImageMetadata); +} + +export function isComfyExecutionResult(value: any): value is SerializedPromptOutput { + return value && typeof value === "object" && Array.isArray(value.images) +} + +export function filenameToComfyBoxMetadata(filename: string, type: ComfyUploadImageType, subfolder: string = ""): ComfyBoxImageMetadata { + return { + isComfyBoxImageMetadata: true, + comfyUIFile: { + filename, + subfolder, + type + }, + name: "Filename", + tags: [], + } +} + +export function comfyFileToComfyBoxMetadata(comfyUIFile: ComfyImageLocation): ComfyBoxImageMetadata { + return { + isComfyBoxImageMetadata: true, + comfyUIFile, + name: "File", + tags: [], + } +} + +/* + * Converts a ComfyUI file into an annotated filepath. Backend nodes like + * LoadImage support syntax like "subfolder/image.png [output]" to specify which + * image folder to load from. + */ +export function comfyFileToAnnotatedFilepath(comfyUIFile: ComfyImageLocation): string { + let path = "" + if (comfyUIFile.subfolder != "") + path = comfyUIFile.subfolder + "/"; + + path += `${comfyUIFile.filename} [${comfyUIFile.type}]` + return path; +} + +export function executionResultToImageMetadata(result: SerializedPromptOutput): ComfyBoxImageMetadata[] { + return result.images.map(comfyFileToComfyBoxMetadata) +} + +export function isComfyImageLocation(param: any): param is ComfyImageLocation { + return param != null && typeof param === "object" + && typeof param.filename === "string" + && typeof param.type === "string" +} + +export function parseWhateverIntoImageMetadata(param: any): ComfyBoxImageMetadata[] | null { + let meta: ComfyBoxImageMetadata[] | null = null + + if (isComfyBoxImageMetadata(param)) { + meta = [param]; + } + else if (Array.isArray(param) && param.every(isComfyBoxImageMetadata)) { + meta = param + } + else if (isComfyExecutionResult(param)) { + meta = executionResultToImageMetadata(param); + } + else if (isComfyImageLocation(param)) { + meta = [comfyFileToComfyBoxMetadata(param)] + } + else if (Array.isArray(param) && param.every(isComfyImageLocation)) { + meta = param.map(comfyFileToComfyBoxMetadata) + } + + return meta; +} + +export function parseWhateverIntoComfyImageLocations(param: any): ComfyImageLocation[] | null { + const meta = parseWhateverIntoImageMetadata(param); + if (!Array.isArray(meta)) + return null + + return meta.map(m => m.comfyUIFile); +} + +export function comfyBoxImageToComfyFile(image: ComfyBoxImageMetadata): ComfyImageLocation { + return image.comfyUIFile +} + +export function comfyBoxImageToComfyURL(image: ComfyBoxImageMetadata): string { + return convertComfyOutputToComfyURL(image.comfyUIFile) +} + +export function comfyURLToComfyFile(urlString: string): ComfyImageLocation | null { + const url = new URL(urlString); + const params = new URLSearchParams(url.search); + const filename = params.get("filename") + const type = params.get("type") as ComfyUploadImageType; + const subfolder = params.get("subfolder") || "" + + // If at least filename and type exist then we're good + if (filename != null && type != null) { + return { filename, type, subfolder } + } + + return null; +} + +export function showLightbox(images: string[], index: number, e: Event) { + e.preventDefault() + if (!images) + return + + ImageViewer.instance.showModal(images, index); + + e.stopPropagation() +} + +export function getLitegraphType(param: any): SlotType | null { + if (param == null) + return null; + + switch (typeof param) { + case "string": + return "string" + case "number": + case "bigint": + return "number" + case "boolean": + return "boolean" + case "object": + if (isComfyBoxImageMetadata(param)) { + return "COMFYBOX_IMAGE" + } + else if (isComfyBoxImageMetadataArray(param)) { + return "COMFYBOX_IMAGES" + } + return null; + case "symbol": + case "undefined": + case "function": + default: + return null; + } +} diff --git a/src/lib/widgets/ImageUploadWidget.svelte b/src/lib/widgets/ImageUploadWidget.svelte index 7c9b72a..f381361 100644 --- a/src/lib/widgets/ImageUploadWidget.svelte +++ b/src/lib/widgets/ImageUploadWidget.svelte @@ -15,6 +15,7 @@ import NumberInput from "$lib/components/NumberInput.svelte"; import type { ComfyImageEditorNode } from "$lib/nodes/widgets"; import { ImageViewer } from "$lib/ImageViewer"; + import { generateBlankCanvas, generateImageCanvas } from "./utils"; export let widget: WidgetLayout | null = null; export let isMobile: boolean = false; @@ -55,42 +56,6 @@ showModal = false; } - function generateBlankCanvas(width: number, height: number, fill: string = "#fff"): HTMLCanvasElement { - const canvas = document.createElement('canvas'); - canvas.width = width; - canvas.height = height; - const ctx = canvas.getContext('2d'); - ctx.save(); - ctx.fillStyle = fill, - ctx.fillRect(0, 0, canvas.width, canvas.height); - ctx.restore(); - return canvas; - } - - async function loadImage(imageURL: string): Promise { - return new Promise((resolve) => { - const e = new Image(); - e.setAttribute('crossorigin', 'anonymous'); // Don't taint the canvas from loading files on-disk - e.addEventListener("load", () => { resolve(e); }); - e.src = imageURL; - return e; - }); - } - - async function generateImageCanvas(imageURL: string): Promise<[HTMLCanvasElement, number, number]> { - const image = await loadImage(imageURL); - const canvas = document.createElement('canvas'); - canvas.width = image.width; - canvas.height = image.height; - const ctx = canvas.getContext('2d'); - ctx.save(); - ctx.fillStyle = "rgba(255, 255, 255, 0.0)"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - ctx.drawImage(image, 0, 0); - ctx.restore(); - return [canvas, image.width, image.height]; - } - const FILENAME: string = "ComfyUITemp.png"; const SUBFOLDER: string = "ComfyBox_Editor"; const DIRECTORY: ComfyUploadImageType = "input"; diff --git a/src/lib/widgets/MultiRegionWidget.svelte b/src/lib/widgets/MultiRegionWidget.svelte new file mode 100644 index 0000000..2cf8cfb --- /dev/null +++ b/src/lib/widgets/MultiRegionWidget.svelte @@ -0,0 +1,616 @@ + + + + +{#key node?.properties.canvasWidth} + + {#if widget?.attrs.title} + {@const label = widget.attrs.title} + + {/if} + {#if showWidget} + {@const selectedBBox = $nodeValue[selectedIndex]} +
+
+ +
+
+ {#each displayBoxes as dBox, i} + {@const selected = selectedIndex === i} +
onBoxMouseDown(e, i)} + > + + Warning: Region very large! + +
+ {/each} +
+
+ {#if selectedBBox} + + + updateSelectedIndex(e.detail)} + on:release={updateValue} + /> + + + updateX(e.detail)} + on:release={updateValue} + /> + updateWidth(e.detail)} + on:release={updateValue} + /> + + + updateY(e.detail)} + on:release={updateValue} + /> + updateHeight(e.detail)} + on:release={updateValue} + /> + + {#if hasImage} + + + + {/if} + + {/if} + {:else} +
+ (No regions) +
+ {/if} +
+{/key} + + diff --git a/src/lib/widgets/utils.ts b/src/lib/widgets/utils.ts index bb1458f..dcfbc4d 100644 --- a/src/lib/widgets/utils.ts +++ b/src/lib/widgets/utils.ts @@ -36,3 +36,39 @@ export function isHidden(widget: IDragItem) { return false; } + +export function generateBlankCanvas(width: number, height: number, fill: string = "#fff"): HTMLCanvasElement { + const canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext('2d'); + ctx.save(); + ctx.fillStyle = fill, + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.restore(); + return canvas; +} + +export async function loadImage(imageURL: string): Promise { + return new Promise((resolve) => { + const e = new Image(); + e.setAttribute('crossorigin', 'anonymous'); // Don't taint the canvas from loading files on-disk + e.addEventListener("load", () => { resolve(e); }); + e.src = imageURL; + return e; + }); +} + +export async function generateImageCanvas(imageURL: string): Promise<[HTMLCanvasElement, number, number]> { + const image = await loadImage(imageURL); + const canvas = document.createElement('canvas'); + canvas.width = image.width; + canvas.height = image.height; + const ctx = canvas.getContext('2d'); + ctx.save(); + ctx.fillStyle = "rgba(255, 255, 255, 0.0)"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.drawImage(image, 0, 0); + ctx.restore(); + return [canvas, image.width, image.height]; +}