diff --git a/FLUX 局部重绘.json b/FLUX 局部重绘.json deleted file mode 100644 index 3a05092..0000000 --- a/FLUX 局部重绘.json +++ /dev/null @@ -1,831 +0,0 @@ -{ - "id": "b6958508-1473-44fa-bd93-03897b3bb6cb", - "revision": 0, - "last_node_id": 87, - "last_link_id": 166, - "nodes": [ - { - "id": 78, - "type": "ShowText|pysssss", - "pos": [ - 498, - 2633 - ], - "size": [ - 492.36199951171875, - 169.55548095703125 - ], - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "label": "text", - "name": "text", - "type": "STRING", - "link": 164 - } - ], - "outputs": [ - { - "label": "text", - "name": "text", - "shape": 6, - "type": "STRING" - } - ], - "properties": { - "Node name for S&R": "ShowText|pysssss", - "widget_ue_connectable": {} - }, - "widgets_values": [] - }, - { - "id": 72, - "type": "KSampler", - "pos": [ - 1780, - 1860 - ], - "size": [ - 315, - 262 - ], - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [ - { - "label": "model", - "name": "model", - "type": "MODEL", - "link": 142 - }, - { - "label": "positive", - "name": "positive", - "type": "CONDITIONING", - "link": 129 - }, - { - "label": "negative", - "name": "negative", - "type": "CONDITIONING", - "link": 130 - }, - { - "label": "latent_image", - "name": "latent_image", - "type": "LATENT", - "link": 145 - } - ], - "outputs": [ - { - "label": "LATENT", - "name": "LATENT", - "type": "LATENT", - "slot_index": 0, - "links": [ - 137 - ] - } - ], - "properties": { - "Node name for S&R": "KSampler", - "widget_ue_connectable": {} - }, - "widgets_values": [ - 479945352329433, - "randomize", - 30, - 1, - "euler", - "simple", - 1 - ] - }, - { - "id": 75, - "type": "CLIPTextEncode", - "pos": [ - 1510, - 1930 - ], - "size": [ - 210.29940795898438, - 88 - ], - "flags": { - "collapsed": false - }, - "order": 6, - "mode": 0, - "inputs": [ - { - "label": "clip", - "name": "clip", - "type": "CLIP", - "link": 138 - } - ], - "outputs": [ - { - "label": "CONDITIONING", - "name": "CONDITIONING", - "type": "CONDITIONING", - "slot_index": 0, - "links": [ - 139 - ] - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "" - ] - }, - { - "id": 69, - "type": "CLIPTextEncodeFlux", - "pos": [ - 1500, - 1730 - ], - "size": [ - 210, - 166 - ], - "flags": { - "collapsed": false - }, - "order": 9, - "mode": 0, - "inputs": [ - { - "label": "clip", - "name": "clip", - "type": "CLIP", - "link": 144 - }, - { - "label": "t5xxl", - "name": "t5xxl", - "type": "STRING", - "widget": { - "name": "t5xxl" - }, - "link": 165 - } - ], - "outputs": [ - { - "label": "CONDITIONING", - "name": "CONDITIONING", - "type": "CONDITIONING", - "slot_index": 0, - "links": [ - 120 - ] - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncodeFlux", - "widget_ue_connectable": { - "t5xxl": true - } - }, - "widgets_values": [ - "", - "", - 3.5 - ] - }, - { - "id": 76, - "type": "DifferentialDiffusion", - "pos": [ - 1500, - 1610 - ], - "size": [ - 210, - 58 - ], - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "label": "model", - "name": "model", - "type": "MODEL", - "link": 141 - } - ], - "outputs": [ - { - "label": "MODEL", - "name": "MODEL", - "type": "MODEL", - "slot_index": 0, - "links": [ - 142 - ] - } - ], - "properties": { - "Node name for S&R": "DifferentialDiffusion", - "widget_ue_connectable": {} - }, - "widgets_values": [ - 1 - ] - }, - { - "id": 70, - "type": "InpaintModelConditioning", - "pos": [ - 1780, - 1600 - ], - "size": [ - 315, - 138 - ], - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "label": "positive", - "name": "positive", - "type": "CONDITIONING", - "link": 120 - }, - { - "label": "negative", - "name": "negative", - "type": "CONDITIONING", - "link": 139 - }, - { - "label": "vae", - "name": "vae", - "type": "VAE", - "link": 122 - }, - { - "label": "pixels", - "name": "pixels", - "type": "IMAGE", - "link": 123 - }, - { - "label": "mask", - "name": "mask", - "type": "MASK", - "link": 124 - } - ], - "outputs": [ - { - "label": "positive", - "name": "positive", - "type": "CONDITIONING", - "slot_index": 0, - "links": [ - 129 - ] - }, - { - "label": "negative", - "name": "negative", - "type": "CONDITIONING", - "slot_index": 1, - "links": [ - 130 - ] - }, - { - "label": "latent", - "name": "latent", - "type": "LATENT", - "slot_index": 2, - "links": [ - 145 - ] - } - ], - "properties": { - "Node name for S&R": "InpaintModelConditioning", - "widget_ue_connectable": {} - }, - "widgets_values": [ - false - ] - }, - { - "id": 60, - "type": "Note", - "pos": [ - 232, - 1464 - ], - "size": [ - 210, - 140 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "1.上传图片后右键\n2.在遮罩编辑器中打开\n3.涂抹想要重绘的区域\n4.点击cave或者确定\n5.按住右键涂抹可以去掉涂错的地方" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 30, - "type": "LoadImage", - "pos": [ - 510, - 1504 - ], - "size": [ - 470.2230224609375, - 704.8888549804688 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "label": "IMAGE", - "name": "IMAGE", - "type": "IMAGE", - "slot_index": 0, - "links": [ - 123 - ] - }, - { - "label": "MASK", - "name": "MASK", - "type": "MASK", - "slot_index": 1, - "links": [ - 124 - ] - } - ], - "properties": { - "Node name for S&R": "LoadImage", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "clipspace/5c52c8440e713f6489a038f8c25e4f48e3dee18a3945147a28c7631104ea3f9c.png [input]", - "image" - ] - }, - { - "id": 46, - "type": "DualCLIPLoader", - "pos": [ - 1130, - 1810 - ], - "size": [ - 315, - 130 - ], - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [], - "outputs": [ - { - "label": "CLIP", - "name": "CLIP", - "type": "CLIP", - "slot_index": 0, - "links": [ - 138, - 144 - ] - } - ], - "properties": { - "Node name for S&R": "DualCLIPLoader", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "clip_l.safetensors", - "t5xxl_fp8_e4m3fn.safetensors", - "flux", - "default" - ] - }, - { - "id": 54, - "type": "VAELoader", - "pos": [ - 1130, - 2050 - ], - "size": [ - 315, - 58 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [], - "outputs": [ - { - "label": "VAE", - "name": "VAE", - "type": "VAE", - "slot_index": 0, - "links": [ - 79, - 122 - ] - } - ], - "properties": { - "Node name for S&R": "VAELoader", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "ae.sft" - ] - }, - { - "id": 45, - "type": "UNETLoader", - "pos": [ - 1130, - 1620 - ], - "size": [ - 315, - 82 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [], - "outputs": [ - { - "label": "MODEL", - "name": "MODEL", - "type": "MODEL", - "slot_index": 0, - "links": [ - 141 - ] - } - ], - "properties": { - "Node name for S&R": "UNETLoader", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "fluxFillFP8_v10.safetensors", - "fp8_e4m3fn" - ] - }, - { - "id": 53, - "type": "VAEDecode", - "pos": [ - 1510, - 2070 - ], - "size": [ - 210, - 46 - ], - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [ - { - "label": "samples", - "name": "samples", - "type": "LATENT", - "link": 137 - }, - { - "label": "vae", - "name": "vae", - "type": "VAE", - "link": 79 - } - ], - "outputs": [ - { - "label": "IMAGE", - "name": "IMAGE", - "type": "IMAGE", - "slot_index": 0, - "links": [ - 166 - ] - } - ], - "properties": { - "Node name for S&R": "VAEDecode", - "widget_ue_connectable": {} - }, - "widgets_values": [] - }, - { - "id": 87, - "type": "SaveImage", - "pos": [ - 2134, - 1526 - ], - "size": [ - 459.5748291015625, - 661.1332397460938 - ], - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "label": "images", - "name": "images", - "type": "IMAGE", - "link": 166 - } - ], - "outputs": [ - { - "label": "image_urls", - "name": "image_urls", - "type": "STRING", - "links": null - } - ], - "properties": { - "Node name for S&R": "SaveImage", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "ComfyUI" - ] - }, - { - "id": 86, - "type": "ArgosTranslateTextNode", - "pos": [ - 513, - 2359 - ], - "size": [ - 469.2802429199219, - 199.02728271484375 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [], - "outputs": [ - { - "label": "text", - "name": "text", - "type": "STRING", - "slot_index": 0, - "links": [ - 164, - 165 - ] - } - ], - "properties": { - "Node name for S&R": "ArgosTranslateTextNode", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "chinese", - "english", - "手镯" - ] - } - ], - "links": [ - [ - 79, - 54, - 0, - 53, - 1, - "VAE" - ], - [ - 120, - 69, - 0, - 70, - 0, - "CONDITIONING" - ], - [ - 122, - 54, - 0, - 70, - 2, - "VAE" - ], - [ - 123, - 30, - 0, - 70, - 3, - "IMAGE" - ], - [ - 124, - 30, - 1, - 70, - 4, - "MASK" - ], - [ - 129, - 70, - 0, - 72, - 1, - "CONDITIONING" - ], - [ - 130, - 70, - 1, - 72, - 2, - "CONDITIONING" - ], - [ - 137, - 72, - 0, - 53, - 0, - "LATENT" - ], - [ - 138, - 46, - 0, - 75, - 0, - "CLIP" - ], - [ - 139, - 75, - 0, - 70, - 1, - "CONDITIONING" - ], - [ - 141, - 45, - 0, - 76, - 0, - "MODEL" - ], - [ - 142, - 76, - 0, - 72, - 0, - "MODEL" - ], - [ - 144, - 46, - 0, - 69, - 0, - "CLIP" - ], - [ - 145, - 70, - 2, - 72, - 3, - "LATENT" - ], - [ - 164, - 86, - 0, - 78, - 0, - "STRING" - ], - [ - 165, - 86, - 0, - 69, - 1, - "STRING" - ], - [ - 166, - 53, - 0, - 87, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "id": 1, - "title": "FLUX", - "bounding": [ - 1063, - 1433, - 1577, - 796 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "id": 2, - "title": "上传图片并进入遮罩涂抹需要修饰的地方", - "bounding": [ - 475, - 1426, - 534, - 795 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "id": 3, - "title": "输入中文提示词例如:口红、花环", - "bounding": [ - 472, - 2267, - 535, - 574 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - } - ], - "config": {}, - "extra": { - "ue_links": [], - "0246.VERSION": [ - 0, - 0, - 4 - ], - "ds": { - "scale": 0.6588450000000002, - "offset": [ - 460.77367154024205, - -1317.5880656092918 - ] - }, - "frontendVersion": "1.23.0", - "VHS_latentpreview": false, - "VHS_latentpreviewrate": 0, - "VHS_MetadataImage": true, - "VHS_KeepIntermediate": true - }, - "version": 0.4 -} \ No newline at end of file diff --git a/LLS-Flux2Klein-电商换背景工作流.json b/LLS-Flux2Klein-电商换背景工作流.json new file mode 100644 index 0000000..ff1048a --- /dev/null +++ b/LLS-Flux2Klein-电商换背景工作流.json @@ -0,0 +1,917 @@ +{ + "id": "ef9bb8d6-183c-41ad-a0d0-f13d4dba3839", + "revision": 0, + "last_node_id": 15, + "last_link_id": 18, + "nodes": [ + { + "id": 1, + "type": "LoadImage", + "pos": [ + 40, + 420 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1, + 2 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ChatGPT Image 2026年5月25日 18_14_30.png", + "image" + ] + }, + { + "id": 2, + "type": "LoadImage", + "pos": [ + 40, + 60 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "c580bea1ee8fcdc6b9663fada5540d6ee4a780ce9a8e309d63428a65a6a6821d.jpg", + "image" + ] + }, + { + "id": 3, + "type": "RMBG", + "pos": [ + 380, + 430 + ], + "size": [ + 340, + 292 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4 + ] + }, + { + "name": "MASK_IMAGE", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui-rmbg", + "ver": "d7402513f23f58db7d56754b02a4f51a148b4941", + "Node name for S&R": "RMBG" + }, + "widgets_values": [ + "RMBG-2.0", + 1, + 1024, + 0, + 0, + false, + false, + "Alpha", + "#222222" + ], + "color": "#222e40", + "bgcolor": "#364254" + }, + { + "id": 4, + "type": "InvertMask", + "pos": [ + 780, + 530 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 4 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "InvertMask" + } + }, + { + "id": 5, + "type": "UNETLoader", + "pos": [ + 40, + 860 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "label": "unet_name", + "name": "unet_name", + "type": "COMBO", + "widget": { + "name": "unet_name" + } + }, + { + "label": "weight_dtype", + "name": "weight_dtype", + "type": "COMBO", + "widget": { + "name": "weight_dtype" + } + } + ], + "outputs": [ + { + "label": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 6 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "flux-2-klein-9b.safetensors", + "default" + ] + }, + { + "id": 6, + "type": "CLIPLoader", + "pos": [ + 40, + 970 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "label": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + } + }, + { + "label": "type", + "name": "type", + "type": "COMBO", + "widget": { + "name": "type" + } + }, + { + "label": "device", + "name": "device", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "device" + } + } + ], + "outputs": [ + { + "label": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [ + 9 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPLoader", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "qwen_3_8b.safetensors", + "flux2", + "cpu" + ] + }, + { + "id": 7, + "type": "VAELoader", + "pos": [ + 40, + 1110 + ], + "size": [ + 330, + 60 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "label": "vae_name", + "name": "vae_name", + "type": "COMBO", + "widget": { + "name": "vae_name" + } + } + ], + "outputs": [ + { + "label": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 10, + 11 + ] + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "cnr_id": "comfy-core", + "ver": "0.3.48", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "flux2-vae.safetensors" + ] + }, + { + "id": 8, + "type": "ModelSamplingAuraFlow", + "pos": [ + 380, + 860 + ], + "size": [ + 246.1006317138672, + 58 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 6 + }, + { + "label": "shift", + "name": "shift", + "type": "FLOAT", + "widget": { + "name": "shift" + } + } + ], + "outputs": [ + { + "label": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 7 + ] + } + ], + "properties": { + "Node name for S&R": "ModelSamplingAuraFlow", + "cnr_id": "comfy-core", + "ver": "0.3.48", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 3 + ] + }, + { + "id": 9, + "type": "CFGNorm", + "pos": [ + 680, + 860 + ], + "size": [ + 248.726806640625, + 58 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 7 + }, + { + "label": "strength", + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "label": "patched_model", + "name": "patched_model", + "type": "MODEL", + "links": [ + 8 + ] + } + ], + "properties": { + "Node name for S&R": "CFGNorm", + "cnr_id": "comfy-core", + "ver": "0.3.50", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 10, + "type": "LLSFlux2KleinEditTextEncode", + "pos": [ + 1040, + 240 + ], + "size": [ + 400, + 260 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 9 + }, + { + "name": "vae", + "type": "VAE", + "link": 10 + }, + { + "name": "image1", + "type": "IMAGE", + "link": 2 + }, + { + "name": "image2", + "shape": 7, + "type": "IMAGE", + "link": 3 + }, + { + "name": "image3", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 5 + } + ], + "outputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "links": [ + 12, + 13 + ] + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 14 + ] + }, + { + "name": "custom_output", + "type": "LLS_FLUX2KLEIN_OUTPUT", + "links": null + }, + { + "name": "main_image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": null + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "f6bf21e439db74bf21d96157e231dbc99b45fc88", + "Node name for S&R": "LLSFlux2KleinEditTextEncode" + }, + "widgets_values": [ + "Keep the product unchanged. Replace the plain background with a premium e-commerce environment that matches the product material, lighting, and usage context. Preserve the product silhouette, logo, label, and camera angle. Photorealistic, clean composition, ad-quality detail.", + 1024, + "longest_edge", + "use_mask" + ] + }, + { + "id": 11, + "type": "ConditioningZeroOut", + "pos": [ + 1490, + 350 + ], + "size": [ + 197.712890625, + 26 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "label": "conditioning", + "name": "conditioning", + "type": "CONDITIONING", + "link": 13 + } + ], + "outputs": [ + { + "label": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 15 + ] + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 12, + "type": "KSampler", + "pos": [ + 1500, + 740 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 8 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 12 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 15 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 14 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 16 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 34227918990123, + "randomize", + 20, + 4, + "euler", + "simple", + 1 + ] + }, + { + "id": 13, + "type": "VAEDecode", + "pos": [ + 1840, + 820 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 16 + }, + { + "name": "vae", + "type": "VAE", + "link": 11 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 17, + 18 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 14, + "type": "PreviewImage", + "pos": [ + 2050, + 720 + ], + "size": [ + 296.69873046875, + 261.48797607421875 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 17 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 15, + "type": "SaveImage", + "pos": [ + 2050, + 1010 + ], + "size": [ + 270, + 270 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 18 + }, + { + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + } + } + ], + "outputs": [ + { + "name": "image_urls", + "type": "STRING" + } + ], + "properties": { + "Node name for S&R": "SaveImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "LLS-Flux2Klein-Background" + ] + } + ], + "links": [ + [ + 1, + 1, + 0, + 3, + 0, + "IMAGE" + ], + [ + 2, + 1, + 0, + 10, + 2, + "IMAGE" + ], + [ + 3, + 2, + 0, + 10, + 3, + "IMAGE" + ], + [ + 4, + 3, + 1, + 4, + 0, + "MASK" + ], + [ + 5, + 4, + 0, + 10, + 5, + "MASK" + ], + [ + 6, + 5, + 0, + 8, + 0, + "MODEL" + ], + [ + 7, + 8, + 0, + 9, + 0, + "MODEL" + ], + [ + 8, + 9, + 0, + 12, + 0, + "MODEL" + ], + [ + 9, + 6, + 0, + 10, + 0, + "CLIP" + ], + [ + 10, + 7, + 0, + 10, + 1, + "VAE" + ], + [ + 11, + 7, + 0, + 13, + 1, + "VAE" + ], + [ + 12, + 10, + 0, + 12, + 1, + "CONDITIONING" + ], + [ + 13, + 10, + 0, + 11, + 0, + "CONDITIONING" + ], + [ + 14, + 10, + 1, + 12, + 3, + "LATENT" + ], + [ + 15, + 11, + 0, + 12, + 2, + "CONDITIONING" + ], + [ + 16, + 12, + 0, + 13, + 0, + "LATENT" + ], + [ + 17, + 13, + 0, + 14, + 0, + "IMAGE" + ], + [ + 18, + 13, + 0, + 15, + 0, + "IMAGE" + ] + ], + "groups": [ + { + "id": 1, + "title": "背景替换/电商详情图", + "bounding": [ + 10, + 20, + 2360, + 1280 + ], + "color": "#3f789e", + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.8200000000000001, + "offset": [ + -18, + 8 + ] + }, + "frontendVersion": "1.43.18" + }, + "version": 0.4 +} diff --git a/LLS-universal-inpaint-workflow.json b/LLS-universal-inpaint-workflow.json deleted file mode 100644 index 23ac9c6..0000000 --- a/LLS-universal-inpaint-workflow.json +++ /dev/null @@ -1,669 +0,0 @@ -{ - "id": "dcac7a27-30f1-4cd1-a4a4-5b994457b3a3", - "revision": 0, - "last_node_id": 26, - "last_link_id": 20, - "nodes": [ - { - "id": 20, - "type": "LoadImage", - "pos": [ - 80, - 180 - ], - "size": [ - 340, - 520 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "label": "IMAGE", - "slot_index": 0, - "links": [ - 1 - ] - }, - { - "name": "MASK", - "type": "MASK", - "label": "MASK", - "slot_index": 1, - "links": [ - 2 - ] - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "example.png", - "image", - "" - ] - }, - { - "id": 21, - "type": "LLSUniversalModelLoader", - "pos": [ - 460, - 80 - ], - "size": [ - 360, - 260 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "slot_index": 0, - "links": [ - 3 - ] - }, - { - "name": "text_encoder", - "type": "CLIP", - "slot_index": 1, - "links": [ - 4 - ] - }, - { - "name": "vae", - "type": "VAE", - "slot_index": 2, - "links": [ - 5, - 6 - ] - }, - { - "name": "model_info", - "type": "STRING", - "slot_index": 3, - "links": [ - 7, - 8, - 9 - ] - } - ], - "properties": { - "Node name for S&R": "LLSUniversalModelLoader" - }, - "widgets_values": [ - "diffusion_models/flux1-fill-dev.safetensors", - "Auto", - "simple", - "auto", - "auto", - "(auto)", - "(auto)", - "(auto)" - ] - }, - { - "id": 22, - "type": "LLSUniversalPromptEncode", - "pos": [ - 880, - 80 - ], - "size": [ - 360, - 190 - ], - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "text_encoder", - "type": "CLIP", - "link": 4, - "label": "text_encoder" - }, - { - "name": "model_info", - "type": "STRING", - "link": 7, - "label": "model_info" - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "slot_index": 0, - "links": [ - 10 - ] - }, - { - "name": "negative", - "type": "CONDITIONING", - "slot_index": 1, - "links": [ - 11 - ] - }, - { - "name": "prompt_info", - "type": "STRING", - "slot_index": 2, - "links": [ - 12 - ] - } - ], - "properties": { - "Node name for S&R": "LLSUniversalPromptEncode" - }, - "widgets_values": [ - "a small brown dog sitting in the masked area", - "", - -1 - ] - }, - { - "id": 23, - "type": "LLSNativeInpaintConditioning", - "pos": [ - 880, - 300 - ], - "size": [ - 400, - 230 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 3, - "label": "model" - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 10, - "label": "positive" - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 11, - "label": "negative" - }, - { - "name": "vae", - "type": "VAE", - "link": 5, - "label": "vae" - }, - { - "name": "image", - "type": "IMAGE", - "link": 1, - "label": "image" - }, - { - "name": "mask", - "type": "MASK", - "link": 2, - "label": "mask" - }, - { - "name": "model_info", - "type": "STRING", - "link": 8, - "label": "model_info" - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "slot_index": 0, - "links": [ - 13 - ] - }, - { - "name": "positive", - "type": "CONDITIONING", - "slot_index": 1, - "links": [ - 14 - ] - }, - { - "name": "negative", - "type": "CONDITIONING", - "slot_index": 2, - "links": [ - 15 - ] - }, - { - "name": "latent", - "type": "LATENT", - "slot_index": 3, - "links": [ - 16 - ] - }, - { - "name": "inpaint_info", - "type": "STRING", - "slot_index": 4, - "links": null - } - ], - "properties": { - "Node name for S&R": "LLSNativeInpaintConditioning" - }, - "widgets_values": [ - "auto", - 1.0, - true - ] - }, - { - "id": 24, - "type": "LLSSimpleKSampler", - "pos": [ - 1330, - 220 - ], - "size": [ - 380, - 320 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 13, - "label": "model" - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 14, - "label": "positive" - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 15, - "label": "negative" - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 16, - "label": "latent_image" - }, - { - "name": "repair_info", - "type": "LLS_REPAIR_INFO", - "link": null, - "label": "repair_info" - }, - { - "name": "guidance_stack", - "type": "LLS_GUIDANCE_STACK", - "link": null, - "label": "guidance_stack" - }, - { - "name": "model_info", - "type": "STRING", - "link": 9, - "label": "model_info" - } - ], - "outputs": [ - { - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [ - 17 - ] - }, - { - "name": "sample_info", - "type": "STRING", - "slot_index": 1, - "links": [ - 18 - ] - } - ], - "properties": { - "Node name for S&R": "LLSSimpleKSampler" - }, - "widgets_values": [ - "Family Default", - -1, - "randomize", - 20, - 7.0, - "euler", - "normal", - 1.0, - "manual", - "auto", - 3.5, - "Auto" - ] - }, - { - "id": 25, - "type": "LLSSimpleVAEDecode", - "pos": [ - 1750, - 240 - ], - "size": [ - 270, - 80 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 17, - "label": "samples" - }, - { - "name": "vae", - "type": "VAE", - "link": 6, - "label": "vae" - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "slot_index": 0, - "links": [ - 19 - ] - }, - { - "name": "decode_info", - "type": "STRING", - "slot_index": 1, - "links": [ - 20 - ] - } - ], - "properties": { - "Node name for S&R": "LLSSimpleVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 26, - "type": "LLSSaveImage", - "pos": [ - 2060, - 180 - ], - "size": [ - 320, - 220 - ], - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 19, - "label": "image" - }, - { - "name": "prompt_info", - "type": "STRING", - "link": 12, - "label": "prompt_info" - }, - { - "name": "latent_info", - "type": "STRING", - "link": null, - "label": "latent_info" - }, - { - "name": "sample_info", - "type": "STRING", - "link": 18, - "label": "sample_info" - }, - { - "name": "decode_info", - "type": "STRING", - "link": 20, - "label": "decode_info" - }, - { - "name": "upscale_info", - "type": "STRING", - "link": null, - "label": "upscale_info" - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "LLSSaveImage" - }, - "widgets_values": [ - "LLS-Inpaint", - "preview_only", - true - ] - } - ], - "links": [ - [ - 1, - 20, - 0, - 23, - 4, - "IMAGE" - ], - [ - 2, - 20, - 1, - 23, - 5, - "MASK" - ], - [ - 3, - 21, - 0, - 23, - 0, - "MODEL" - ], - [ - 4, - 21, - 1, - 22, - 0, - "CLIP" - ], - [ - 5, - 21, - 2, - 23, - 3, - "VAE" - ], - [ - 6, - 21, - 2, - 25, - 1, - "VAE" - ], - [ - 7, - 21, - 3, - 22, - 1, - "STRING" - ], - [ - 8, - 21, - 3, - 23, - 6, - "STRING" - ], - [ - 9, - 21, - 3, - 24, - 6, - "STRING" - ], - [ - 10, - 22, - 0, - 23, - 1, - "CONDITIONING" - ], - [ - 11, - 22, - 1, - 23, - 2, - "CONDITIONING" - ], - [ - 12, - 22, - 2, - 26, - 1, - "STRING" - ], - [ - 13, - 23, - 0, - 24, - 0, - "MODEL" - ], - [ - 14, - 23, - 1, - 24, - 1, - "CONDITIONING" - ], - [ - 15, - 23, - 2, - 24, - 2, - "CONDITIONING" - ], - [ - 16, - 23, - 3, - 24, - 3, - "LATENT" - ], - [ - 17, - 24, - 0, - 25, - 0, - "LATENT" - ], - [ - 18, - 24, - 1, - 26, - 3, - "STRING" - ], - [ - 19, - 25, - 0, - 26, - 0, - "IMAGE" - ], - [ - 20, - 25, - 1, - 26, - 4, - "STRING" - ] - ], - "groups": [], - "config": {}, - "extra": { - "ds": { - "scale": 1.0, - "offset": [ - 0.0, - 0.0 - ] - } - }, - "version": 0.4 -} diff --git a/LLS-universal-txt2img-workflow.json b/LLS-universal-txt2img-workflow.json deleted file mode 100644 index f4bfd28..0000000 --- a/LLS-universal-txt2img-workflow.json +++ /dev/null @@ -1,553 +0,0 @@ -{ - "id": "0794c057-df8e-49ea-a3b6-8feed69f2af4", - "revision": 0, - "last_node_id": 15, - "last_link_id": 15, - "nodes": [ - { - "id": 10, - "type": "LLSUniversalModelLoader", - "pos": [ - 80, - 80 - ], - "size": [ - 360, - 260 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "slot_index": 0, - "links": [ - 1, - 11 - ] - }, - { - "name": "text_encoder", - "type": "CLIP", - "slot_index": 1, - "links": [ - 2 - ] - }, - { - "name": "vae", - "type": "VAE", - "slot_index": 2, - "links": [ - 3 - ] - }, - { - "name": "model_info", - "type": "STRING", - "slot_index": 3, - "links": [ - 4, - 5 - ] - } - ], - "properties": { - "Node name for S&R": "LLSUniversalModelLoader" - }, - "widgets_values": [ - "diffusion_models/flux1-schnell.safetensors", - "Auto", - "simple", - "auto", - "auto", - "(auto)", - "(auto)", - "(auto)" - ] - }, - { - "id": 11, - "type": "LLSUniversalPromptEncode", - "pos": [ - 500, - 80 - ], - "size": [ - 360, - 190 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [ - { - "name": "text_encoder", - "type": "CLIP", - "link": 2, - "label": "text_encoder" - }, - { - "name": "model_info", - "type": "STRING", - "link": 4, - "label": "model_info" - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "slot_index": 0, - "links": [ - 6 - ] - }, - { - "name": "negative", - "type": "CONDITIONING", - "slot_index": 1, - "links": [ - 7 - ] - }, - { - "name": "prompt_info", - "type": "STRING", - "slot_index": 2, - "links": [ - 8 - ] - } - ], - "properties": { - "Node name for S&R": "LLSUniversalPromptEncode" - }, - "widgets_values": [ - "a small brown dog standing on the grass", - "", - -1 - ] - }, - { - "id": 12, - "type": "LLSSimpleEmptyLatent", - "pos": [ - 500, - 320 - ], - "size": [ - 360, - 230 - ], - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 1, - "label": "model" - }, - { - "name": "image", - "type": "IMAGE", - "link": null, - "label": "image" - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "label": "vae" - } - ], - "outputs": [ - { - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [ - 9 - ] - }, - { - "name": "width", - "type": "INT", - "slot_index": 1, - "links": null - }, - { - "name": "height", - "type": "INT", - "slot_index": 2, - "links": null - }, - { - "name": "latent_info", - "type": "STRING", - "slot_index": 3, - "links": [ - 10 - ] - } - ], - "properties": { - "Node name for S&R": "LLSSimpleEmptyLatent" - }, - "widgets_values": [ - "Family Default", - 1024, - 1024, - 1, - "Auto", - "keep_aspect" - ] - }, - { - "id": 13, - "type": "LLSSimpleKSampler", - "pos": [ - 920, - 180 - ], - "size": [ - 380, - 320 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 11, - "label": "model" - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 6, - "label": "positive" - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 7, - "label": "negative" - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 9, - "label": "latent_image" - }, - { - "name": "repair_info", - "type": "LLS_REPAIR_INFO", - "link": null, - "label": "repair_info" - }, - { - "name": "guidance_stack", - "type": "LLS_GUIDANCE_STACK", - "link": null, - "label": "guidance_stack" - }, - { - "name": "model_info", - "type": "STRING", - "link": 5, - "label": "model_info" - } - ], - "outputs": [ - { - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [ - 12 - ] - }, - { - "name": "sample_info", - "type": "STRING", - "slot_index": 1, - "links": [ - 13 - ] - } - ], - "properties": { - "Node name for S&R": "LLSSimpleKSampler" - }, - "widgets_values": [ - "Family Default", - -1, - "randomize", - 20, - 7.0, - "euler", - "normal", - 1.0, - "manual", - "auto", - 3.5, - "Auto" - ] - }, - { - "id": 14, - "type": "LLSSimpleVAEDecode", - "pos": [ - 1330, - 200 - ], - "size": [ - 270, - 80 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 12, - "label": "samples" - }, - { - "name": "vae", - "type": "VAE", - "link": 3, - "label": "vae" - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "slot_index": 0, - "links": [ - 14 - ] - }, - { - "name": "decode_info", - "type": "STRING", - "slot_index": 1, - "links": [ - 15 - ] - } - ], - "properties": { - "Node name for S&R": "LLSSimpleVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 15, - "type": "LLSSaveImage", - "pos": [ - 1640, - 140 - ], - "size": [ - 320, - 220 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 14, - "label": "image" - }, - { - "name": "prompt_info", - "type": "STRING", - "link": 8, - "label": "prompt_info" - }, - { - "name": "latent_info", - "type": "STRING", - "link": 10, - "label": "latent_info" - }, - { - "name": "sample_info", - "type": "STRING", - "link": 13, - "label": "sample_info" - }, - { - "name": "decode_info", - "type": "STRING", - "link": 15, - "label": "decode_info" - }, - { - "name": "upscale_info", - "type": "STRING", - "link": null, - "label": "upscale_info" - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "LLSSaveImage" - }, - "widgets_values": [ - "LLS", - "preview_only", - true - ] - } - ], - "links": [ - [ - 1, - 10, - 0, - 12, - 0, - "MODEL" - ], - [ - 2, - 10, - 1, - 11, - 0, - "CLIP" - ], - [ - 3, - 10, - 2, - 14, - 1, - "VAE" - ], - [ - 4, - 10, - 3, - 11, - 1, - "STRING" - ], - [ - 5, - 10, - 3, - 13, - 6, - "STRING" - ], - [ - 6, - 11, - 0, - 13, - 1, - "CONDITIONING" - ], - [ - 7, - 11, - 1, - 13, - 2, - "CONDITIONING" - ], - [ - 8, - 11, - 2, - 15, - 1, - "STRING" - ], - [ - 9, - 12, - 0, - 13, - 3, - "LATENT" - ], - [ - 10, - 12, - 3, - 15, - 2, - "STRING" - ], - [ - 11, - 10, - 0, - 13, - 0, - "MODEL" - ], - [ - 12, - 13, - 0, - 14, - 0, - "LATENT" - ], - [ - 13, - 13, - 1, - 15, - 3, - "STRING" - ], - [ - 14, - 14, - 0, - 15, - 0, - "IMAGE" - ], - [ - 15, - 14, - 1, - 15, - 4, - "STRING" - ] - ], - "groups": [], - "config": {}, - "extra": { - "ds": { - "scale": 1.0, - "offset": [ - 0.0, - 0.0 - ] - } - }, - "version": 0.4 -} diff --git a/SDXL版局部重绘SDXL局部重绘1.0.json b/SDXL版局部重绘SDXL局部重绘1.0.json deleted file mode 100644 index 1c0cf88..0000000 --- a/SDXL版局部重绘SDXL局部重绘1.0.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"a3fa1de3-74f4-49de-921a-07bd5f8c6b87","revision":0,"last_node_id":21,"last_link_id":26,"nodes":[{"id":18,"type":"Image Comparer (rgthree)","pos":{"0":17.813167572021484,"1":-31.999448776245117},"size":{"0":468.2283630371094,"1":681.1610107421875},"flags":{},"order":15,"mode":0,"inputs":[{"dir":3,"label":"图像_A","name":"image_a","type":"IMAGE","link":25},{"dir":3,"label":"图像_B","name":"image_b","type":"IMAGE","link":26}],"outputs":[],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"comparer_mode":"Slide"},"widgets_values":[[{"name":"A","selected":true,"url":"https://liblibai-tmp-image.liblib.cloud/sd-images/520ad7ec26f64e5c101c5a554010aa4a8b3472ecc2bbd046715e0762a71d924c.png?filename=sd-images/520ad7ec26f64e5c101c5a554010aa4a8b3472ecc2bbd046715e0762a71d924c.png&type=output&rand=0.4960752857567199"},{"name":"B","selected":true,"url":"https://liblibai-tmp-image.liblib.cloud/sd-images/520d126264b83073237569940318cd63ae47583a5eafd0810f8bba9111f00d09.png?filename=sd-images/520d126264b83073237569940318cd63ae47583a5eafd0810f8bba9111f00d09.png&type=output&rand=0.7331449171495302"}]],"color":"#223","bgcolor":"#335"},{"id":16,"type":"SaveImage","pos":{"0":2048.770263671875,"1":-53.6751594543457},"size":{"0":434.68963623046875,"1":697.916259765625},"flags":{},"order":14,"mode":0,"inputs":[{"label":"图像","localized_name":"图片","name":"images","type":"IMAGE","link":22}],"outputs":[],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"SaveImage"},"widgets_values":["ComfyUI"],"color":"#223","bgcolor":"#335"},{"id":6,"type":"CLIPTextEncode","pos":{"0":1200.54248046875,"1":487.1212158203125},"size":{"0":404.938720703125,"1":58},"flags":{"collapsed":true,"pinned":true},"order":7,"mode":0,"inputs":[{"label":"CLIP","localized_name":"clip","name":"clip","type":"CLIP","link":3},{"label":"文本","name":"text","type":"STRING","widget":{"name":"text"},"link":21}],"outputs":[{"label":"条件","localized_name":"条件","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[13]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"CLIPTextEncode"},"widgets_values":[""]},{"id":8,"type":"VAEDecode","pos":{"0":982.548583984375,"1":489.24566650390625},"size":{"0":210,"1":46},"flags":{"collapsed":true,"pinned":true},"order":12,"mode":0,"inputs":[{"label":"Latent","localized_name":"Latent","name":"samples","type":"LATENT","link":7},{"label":"VAE","localized_name":"vae","name":"vae","type":"VAE","link":8}],"outputs":[{"label":"图像","localized_name":"图像","name":"IMAGE","type":"IMAGE","slot_index":0,"links":[23]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"VAEDecode"},"widgets_values":[]},{"id":15,"type":"LibLibTranslate","pos":{"0":956.8103637695312,"1":252.75009155273438},"size":{"0":417.13525390625,"1":239.72265625},"flags":{"pinned":true},"order":0,"mode":0,"inputs":[],"outputs":[{"label":"text","localized_name":"text","name":"text","type":"STRING","links":[21]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"LibLibTranslate"},"widgets_values":["Chinese","English","美丽的钻石项链,闪烁着彩色的光泽"],"color":"#232","bgcolor":"#353"},{"id":19,"type":"Note","pos":{"0":965.3333740234375,"1":103.11063385009766},"size":{"0":390.7978210449219,"1":88.03952026367188},"flags":{},"order":1,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["选择你想要的大模型,sdxl和1.5都可以尝试效果,输入要重绘的内容提示词,增加生图的稳定性\n"],"color":"#432","bgcolor":"#653"},{"id":10,"type":"LoadImage","pos":{"0":523.9032592773438,"1":-40.48138427734375},"size":{"0":402.35870361328125,"1":552.4603881835938},"flags":{},"order":2,"mode":0,"inputs":[],"outputs":[{"label":"图像","localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[10,25]},{"label":"遮罩","localized_name":"遮罩","name":"MASK","type":"MASK","links":[11]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"LoadImage"},"widgets_values":["clipspace-mask-959257.5.png","image",""],"color":"#332922","bgcolor":"#593930","_widget_cache_map":{"087351937cc233a5b72f02c8daf1037fad73165bdac4fe69cd9158eaa1e6adb7.png":{"value":"img/2f3c29283769421e9c82c5aecea17067/087351937cc233a5b72f02c8daf1037fad73165bdac4fe69cd9158eaa1e6adb7.png","name":"087351937cc233a5b72f02c8daf1037fad73165bdac4fe69cd9158eaa1e6adb7.png","url":"https://liblibai-tmp-image.liblib.cloud/img/2f3c29283769421e9c82c5aecea17067/087351937cc233a5b72f02c8daf1037fad73165bdac4fe69cd9158eaa1e6adb7.png","width":680,"height":1536},"clipspace-mask-959257.5.png":{"value":"img/2f3c29283769421e9c82c5aecea17067/4eebddb3d3d6f872e99d5246b69c77cd2c96113686a60e229b6cfb8c8be4fefa.png","name":"clipspace-mask-959257.5.png","url":"https://liblibai-tmp-image.liblib.cloud/img/2f3c29283769421e9c82c5aecea17067/4eebddb3d3d6f872e99d5246b69c77cd2c96113686a60e229b6cfb8c8be4fefa.png","width":680,"height":1536}}},{"id":20,"type":"Note","pos":{"0":1677.2254638671875,"1":582.8976440429688},"size":{"0":365.8736877441406,"1":88},"flags":{},"order":3,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["采样器一般是不需要动参数的,如果生图的强度不够大可以增加降噪值或者增加CFG值\n"],"color":"#432","bgcolor":"#653"},{"id":21,"type":"Note","pos":{"0":541.30224609375,"1":548.7765502929688},"size":{"0":365.8736877441406,"1":88},"flags":{},"order":4,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["加载图片后右键选择遮罩模式,并将要重绘的区域涂抹出来并保存"],"color":"#432","bgcolor":"#653"},{"id":7,"type":"CLIPTextEncode","pos":{"0":952.3636474609375,"1":536.620361328125},"size":{"0":425.27801513671875,"1":112.84394836425781},"flags":{"pinned":true},"order":8,"mode":0,"inputs":[{"label":"CLIP","localized_name":"clip","name":"clip","type":"CLIP","link":5}],"outputs":[{"label":"条件","localized_name":"条件","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[14]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"CLIPTextEncode"},"widgets_values":["text, watermark,Deformities, Deformity, six fingers, low quality, wrong perspective, wrong structure, wrong perspective, wrong structure,Excess face, excess organs, excess body parts"],"color":"#322","bgcolor":"#533"},{"id":4,"type":"CheckpointLoaderSimple","pos":{"0":959.9573364257812,"1":-38.68690490722656},"size":{"0":390.39508056640625,"1":98},"flags":{"pinned":true},"order":5,"mode":0,"inputs":[],"outputs":[{"label":"模型","localized_name":"模型","name":"MODEL","type":"MODEL","slot_index":0,"links":[1]},{"label":"CLIP","localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[3,5]},{"label":"VAE","localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[8,15]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["juggernautXL_v9-Lightning_4S_V9 + RDPhoto 2"],"color":"#232","bgcolor":"#353","_widget_cache_map":{"AWPainting_v1.3":{"name":"AWPainting_v1.4","value":"ea3f612759734012bdcc5134780825e4"},"juggernautXL_v9-Lightning_4S_V9 + RDPhoto 2":{"name":"juggernautXL_v9-Lightning_4S_V9 + RDPhoto 2","baseType":3,"value":"027512841f8d425c8dbff87d4dbec60d"}}},{"id":11,"type":"InpaintCrop","pos":{"0":1388.11962890625,"1":-44.25188446044922},"size":{"0":255.85467529296875,"1":458},"flags":{"pinned":true},"order":6,"mode":0,"inputs":[{"label":"图像","localized_name":"image","name":"image","type":"IMAGE","link":10},{"label":"遮罩","localized_name":"mask","name":"mask","type":"MASK","link":11},{"label":"上下文遮罩(可选)","localized_name":"optional_context_mask","name":"optional_context_mask","shape":7,"type":"MASK","link":null}],"outputs":[{"label":"接缝","localized_name":"stitch","name":"stitch","type":"STITCH","links":[12]},{"localized_name":"cropped_image","name":"cropped_image","type":"IMAGE","links":[16]},{"localized_name":"cropped_mask","name":"cropped_mask","type":"MASK","links":[17,24]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"InpaintCrop"},"widgets_values":[20,1,true,16,false,16,"bicubic","ranged size",1024,1024,1,512,512,768,768,32]},{"id":3,"type":"KSampler","pos":{"0":1396.42041015625,"1":389.5669860839844},"size":{"0":249.02920532226562,"1":267.654541015625},"flags":{"pinned":true},"order":11,"mode":0,"inputs":[{"label":"模型","localized_name":"模型","name":"model","type":"MODEL","link":1},{"label":"正面条件","localized_name":"正面条件","name":"positive","type":"CONDITIONING","link":18},{"label":"负面条件","localized_name":"负面条件","name":"negative","type":"CONDITIONING","link":19},{"label":"Latent","localized_name":"Latent图像","name":"latent_image","type":"LATENT","link":20}],"outputs":[{"label":"Latent","localized_name":"Latent","name":"LATENT","type":"LATENT","slot_index":0,"links":[7]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"KSampler"},"widgets_values":[77888486311209,"randomize",25,7.49,"dpmpp_2m","karras",0.6],"color":"#232","bgcolor":"#353"},{"id":12,"type":"InpaintStitch","pos":{"0":1701.01025390625,"1":145.17880249023438},"size":{"0":296.1511535644531,"1":78},"flags":{"collapsed":false,"pinned":true},"order":13,"mode":0,"inputs":[{"label":"接缝","localized_name":"stitch","name":"stitch","type":"STITCH","link":12},{"label":"图像","localized_name":"inpainted_image","name":"inpainted_image","type":"IMAGE","link":23}],"outputs":[{"label":"图像","localized_name":"image","name":"image","type":"IMAGE","links":[22,26]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"InpaintStitch"},"widgets_values":["bislerp"]},{"id":13,"type":"InpaintModelConditioning","pos":{"0":1694.41357421875,"1":-50.84837341308594},"size":{"0":315,"1":138},"flags":{"pinned":true},"order":10,"mode":0,"inputs":[{"label":"正面条件","localized_name":"正面条件","name":"positive","type":"CONDITIONING","link":13},{"label":"负面条件","localized_name":"负面条件","name":"negative","type":"CONDITIONING","link":14},{"label":"VAE","localized_name":"vae","name":"vae","type":"VAE","link":15},{"label":"图像","localized_name":"像素","name":"pixels","type":"IMAGE","link":16},{"label":"遮罩","localized_name":"遮罩","name":"mask","type":"MASK","link":17}],"outputs":[{"label":"正面条件","localized_name":"正面条件","name":"positive","type":"CONDITIONING","links":[18]},{"label":"负面条件","localized_name":"负面条件","name":"negative","type":"CONDITIONING","links":[19]},{"label":"Latent","localized_name":"Latent","name":"latent","type":"LATENT","links":[20]}],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"InpaintModelConditioning"},"widgets_values":[true]},{"id":17,"type":"MaskPreview+","pos":{"0":1695.4805908203125,"1":266.7456970214844},"size":{"0":307.07135009765625,"1":273.8615417480469},"flags":{"pinned":true},"order":9,"mode":0,"inputs":[{"label":"遮罩","localized_name":"mask","name":"mask","type":"MASK","link":24}],"outputs":[],"properties":{"enableTabs":false,"tabWidth":65,"tabXOffset":10,"hasSecondTab":false,"secondTabText":"Send Back","secondTabOffset":80,"secondTabWidth":65,"Node name for S&R":"MaskPreview+"},"widgets_values":[]}],"links":[[1,4,0,3,0,"MODEL"],[3,4,1,6,0,"CLIP"],[5,4,1,7,0,"CLIP"],[7,3,0,8,0,"LATENT"],[8,4,2,8,1,"VAE"],[10,10,0,11,0,"IMAGE"],[11,10,1,11,1,"MASK"],[12,11,0,12,0,"STITCH"],[13,6,0,13,0,"CONDITIONING"],[14,7,0,13,1,"CONDITIONING"],[15,4,2,13,2,"VAE"],[16,11,1,13,3,"IMAGE"],[17,11,2,13,4,"MASK"],[18,13,0,3,1,"CONDITIONING"],[19,13,1,3,2,"CONDITIONING"],[20,13,2,3,3,"LATENT"],[21,15,0,6,1,"STRING"],[22,12,0,16,0,"IMAGE"],[23,8,0,12,1,"IMAGE"],[24,11,2,17,0,"MASK"],[25,10,0,18,0,"IMAGE"],[26,12,0,18,1,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8769226950000005,"offset":[66.39603970840889,295.3206114778465]},"ue_links":[],"VHS_latentpreview":false,"VHS_latentpreviewrate":0,"VHS_MetadataImage":true,"VHS_KeepIntermediate":true},"version":0.4} \ No newline at end of file diff --git a/docs/superpowers/plans/2026-05-26-lls-flux2klein-background-workflow.md b/docs/superpowers/plans/2026-05-26-lls-flux2klein-background-workflow.md new file mode 100644 index 0000000..7d17ebf --- /dev/null +++ b/docs/superpowers/plans/2026-05-26-lls-flux2klein-background-workflow.md @@ -0,0 +1,41 @@ +# LLS Flux2Klein Background Workflow Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Add a ready-to-use ComfyUI example workflow that performs e-commerce background replacement with `LLSFlux2KleinEditTextEncode` on a fully matched Flux2/Klein model stack. + +**Architecture:** Keep the backend node implementation as-is and add a new example workflow JSON plus a workflow regression test. The workflow must use `UNETLoader + CLIPLoader(type=flux2) + VAELoader(flux2-vae)` and derive the edit mask from `RMBG -> InvertMask` so the sampler receives a consistent Flux2/Klein edit payload. + +**Tech Stack:** JSON workflow exports, Python `unittest`, existing ComfyUI core nodes, existing LLS custom node registration + +--- + +### Task 1: Lock The Workflow Contract With A Failing Test + +**Files:** +- Modify: `tests/test_example_workflows.py` + +- [ ] **Step 1: Add a test that loads `LLS-Flux2Klein-电商换背景工作流.json`** +- [ ] **Step 2: Assert the workflow includes `LLSFlux2KleinEditTextEncode`, `UNETLoader`, `CLIPLoader`, `VAELoader`, `RMBG`, `InvertMask`, `ConditioningZeroOut`, `KSampler`, and `VAEDecode`** +- [ ] **Step 3: Assert `CLIPLoader` uses `flux2`, `VAELoader` uses `flux2-vae.safetensors`, and the LLS node uses `mask_mode = use_mask` with `resize_mode = longest_edge`** +- [ ] **Step 4: Run the focused workflow test and confirm it fails before the workflow JSON exists** + +### Task 2: Add The New Background-Replacement Workflow + +**Files:** +- Create: `LLS-Flux2Klein-电商换背景工作流.json` + +- [ ] **Step 1: Build a compact workflow with `LoadImage` main product input feeding both `RMBG` and `LLSFlux2KleinEditTextEncode.image1`** +- [ ] **Step 2: Add one connected scene reference image for `image2` and leave `image3` optional** +- [ ] **Step 3: Use `RMBG -> InvertMask -> LLSFlux2KleinEditTextEncode.mask` and route `conditioning`, `ConditioningZeroOut`, `latent`, `KSampler`, and `VAEDecode` according to the edit flow contract** +- [ ] **Step 4: Route the model through a Flux2/Klein-safe sampler chain and add `PreviewImage` plus `SaveImage` outputs** + +### Task 3: Verify The Workflow And Summarize Constraints + +**Files:** +- Modify: files from earlier tasks only if verification exposes gaps + +- [ ] **Step 1: Run `python3 -m unittest tests.test_example_workflows -v`** +- [ ] **Step 2: Run `python3 -m json.tool 'LLS-Flux2Klein-电商换背景工作流.json' > /tmp/lls_flux2klein_background_workflow.pretty.json` to validate JSON syntax** +- [ ] **Step 3: Re-run the targeted Flux2/Klein unit tests if the workflow change touches shared assumptions** +- [ ] **Step 4: Summarize the new workflow file, ComfyUI search name, minimal connection path, and the remaining compatibility-vs-native Flux2 API gaps** diff --git a/flux2klein/lls_flux2klein_edit_text_encode.py b/flux2klein/lls_flux2klein_edit_text_encode.py index 951b193..a176b72 100644 --- a/flux2klein/lls_flux2klein_edit_text_encode.py +++ b/flux2klein/lls_flux2klein_edit_text_encode.py @@ -32,6 +32,16 @@ except Exception as exc: # pragma: no cover - optional runtime dependency else: # pragma: no cover - exercised in ComfyUI runtime/tests when comfy exists _COMFY_UTILS_ERR = None +try: + import comfy_extras.nodes_flux as native_flux_nodes +except Exception: # pragma: no cover - optional ComfyUI runtime dependency + native_flux_nodes = None + +try: + import comfy_extras.nodes_edit_model as native_edit_model_nodes +except Exception: # pragma: no cover - optional ComfyUI runtime dependency + native_edit_model_nodes = None + RESIZE_MODE_CHOICES = ["longest_edge", "keep_original"] MASK_MODE_CHOICES = ["none", "use_mask", "invert_mask"] @@ -71,6 +81,13 @@ class _ConstantMask: ) +class _ShapeOnlyLatent: + """Fallback latent object for tests when torch tensors are unavailable.""" + + def __init__(self, shape): + self.shape = tuple(shape) + + def _extract_latent_samples(latent): if isinstance(latent, dict) and "samples" in latent: return latent["samples"] @@ -87,6 +104,17 @@ def _get_image_batch_size(image) -> int: return batch +def _extract_node_output_value(value): + if hasattr(value, "result"): + value = value.result + elif hasattr(value, "args"): + value = value.args + + if isinstance(value, tuple) and len(value) == 1: + return value[0] + return value + + def _scale_size_by_longest_edge(width: int, height: int, target_longest_edge: int) -> tuple[int, int]: width = int(width) height = int(height) @@ -305,6 +333,70 @@ def _encode_reference_latent(vae, image, target_width: int, target_height: int, return {"samples": samples}, prepared +def _encode_image_latent(vae, image, source_name: str): + try: + samples = vae.encode(image) + except Exception as exc: + raise RuntimeError( + f"[LLS] VAE encode failed for {source_name} / {source_name} 的 VAE 编码失败: {exc}" + ) from exc + return {"samples": samples} + + +def _get_latent_channels(latent_samples) -> int: + shape = tuple(getattr(latent_samples, "shape", ())) + if len(shape) < 2: + raise RuntimeError("[LLS] Invalid latent tensor shape. 无法识别 latent 通道数。") + return int(shape[1]) + + +def _build_empty_like_latent(samples): + shape = tuple(getattr(samples, "shape", ())) + if len(shape) != 4: + raise RuntimeError("[LLS] Invalid latent tensor shape for Empty Flux2 latent fallback.") + + if torch is not None and isinstance(samples, torch.Tensor): + return {"samples": torch.zeros(shape, dtype=samples.dtype, device=samples.device)} + + try: + return {"samples": samples.__class__(shape)} + except Exception: + return {"samples": _ShapeOnlyLatent(shape)} + + +def _build_empty_flux2_latent(main_image, main_latent): + width, height = get_image_size(main_image) + batch_size = _get_image_batch_size(main_image) + + execute = getattr(getattr(native_flux_nodes, "EmptyFlux2LatentImage", None), "execute", None) + if callable(execute): + try: + return _extract_node_output_value(execute(width=width, height=height, batch_size=batch_size)) + except TypeError: + return _extract_node_output_value(execute(width, height, batch_size)) + except Exception: + pass + + return _build_empty_like_latent(_extract_latent_samples(main_latent)) + + +def _attach_reference_latents(conditioning, ref_latents): + if not ref_latents: + return conditioning + + execute = getattr(getattr(native_edit_model_nodes, "ReferenceLatent", None), "execute", None) + if callable(execute): + updated = conditioning + for ref_latent in ref_latents: + try: + updated = _extract_node_output_value(execute(updated, latent=ref_latent)) + except TypeError: + updated = _extract_node_output_value(execute(updated, ref_latent)) + return updated + + return _append_reference_latents(conditioning, [_extract_latent_samples(latent) for latent in ref_latents]) + + def _build_noise_mask(mask, latent_samples): target_width = int(latent_samples.shape[-1]) target_height = int(latent_samples.shape[-2]) @@ -386,25 +478,48 @@ class LLSFlux2KleinEditTextEncode: conditioning, full_prompt = _encode_multivision_conditioning(clip, str(prompt), vision_images) target_width, target_height = get_image_size(main_image) - ref_latents = [] - for index, image in enumerate(images_for_edit, start=1): - ref_latent, _prepared = _encode_reference_latent( - vae, - image, - target_width, - target_height, - source_name=f"image{index}", - ) - ref_latents.append(ref_latent) + main_latent = _encode_image_latent(vae, main_image, source_name="image1") + main_latent_channels = _get_latent_channels(_extract_latent_samples(main_latent)) + use_official_flux2_latent = main_latent_channels >= 128 - conditioning = _append_reference_latents( - conditioning, - [_extract_latent_samples(latent) for latent in ref_latents], - ) + ref_latents = [main_latent] + if reference_image_2 is not None: + if use_official_flux2_latent: + ref_latents.append(_encode_image_latent(vae, reference_image_2, source_name="image2")) + else: + ref_latent, _prepared = _encode_reference_latent( + vae, + reference_image_2, + target_width, + target_height, + source_name="image2", + ) + ref_latents.append(ref_latent) + if reference_image_3 is not None: + if use_official_flux2_latent: + ref_latents.append(_encode_image_latent(vae, reference_image_3, source_name="image3")) + else: + ref_latent, _prepared = _encode_reference_latent( + vae, + reference_image_3, + target_width, + target_height, + source_name="image3", + ) + ref_latents.append(ref_latent) - latent = { - "samples": _extract_latent_samples(ref_latents[0]), - } + conditioning = _attach_reference_latents(conditioning, ref_latents) + + if use_official_flux2_latent: + latent = _build_empty_flux2_latent(main_image, main_latent) + latent_mode = "empty_flux2_latent" + conditioning_backend = "flux2klein_multivision_clip+reference_latent" + else: + latent = { + "samples": _extract_latent_samples(main_latent), + } + latent_mode = "image1_reference_latent" + conditioning_backend = "flux2klein_multivision_clip" if mask is not None and str(mask_mode) != "none": latent["noise_mask"] = _build_noise_mask(output_mask, latent["samples"]) @@ -426,13 +541,14 @@ class LLSFlux2KleinEditTextEncode: "main_image": "image1", "reference_images": reference_names, "num_reference_images": len(reference_names), - "conditioning_backend": "flux2klein_multivision_clip", + "conditioning_backend": conditioning_backend, "native_error": None, - "native_wrapper": "PainterFluxImageEdit-compatible", - "latent_mode": "image1_reference_latent", + "native_wrapper": "official Flux2 ReferenceLatent" if use_official_flux2_latent else "PainterFluxImageEdit-compatible", + "latent_mode": latent_mode, "latent_has_noise_mask": "noise_mask" in latent, "vision_image_count": len(vision_images), "reference_latent_count": len(ref_latents), + "main_latent_channels": main_latent_channels, "target_size": {"width": int(target_width), "height": int(target_height)}, "note": "image1 is main edit image; image2 and image3 are reference images; images are not concatenated", } diff --git a/image.png b/image.png deleted file mode 100644 index bf707a4..0000000 Binary files a/image.png and /dev/null differ diff --git a/model_loader/nodes.py b/model_loader/nodes.py index 2cf4728..07f1d94 100644 --- a/model_loader/nodes.py +++ b/model_loader/nodes.py @@ -41,6 +41,7 @@ from ..utils.model_info import ( get_family_defaults, info_to_json, infer_family_from_name, + is_flux2_family, is_flux_family, is_sdxl_family, tag_lls_object, @@ -62,6 +63,8 @@ _FLUX_T5_PATTERNS = ("t5xxl_fp8_e4m3fn.safetensors", "t5xxl_fp16.safetensors", " _SDXL_CLIP_L_PATTERNS = ("clip_l.safetensors", "clip_l", "clip-l") _SDXL_CLIP_G_PATTERNS = ("clip_g.safetensors", "clip_g", "clip-g") _FLUX_VAE_PATTERNS = ("ae.safetensors", "ae", "vae") +_FLUX2_QWEN_PATTERNS = ("qwen_3_8b.safetensors", "qwen_3_8b_fp8mixed.safetensors", "qwen_3_8b") +_FLUX2_VAE_PATTERNS = ("flux2-vae.safetensors", "flux2-vae", "flux2_vae") def _build_capability_tags(model_name: str, family: str) -> dict[str, object]: @@ -226,6 +229,12 @@ def _load_external_text_encoder(family: str, name1: str, name2: str | None): raise RuntimeError("[LLS] ComfyUI core CLIPLoader class was not found.") return clip_loader_cls().load_clip(name1, type="stable_diffusion")[0] + if is_flux2_family(family): + clip_loader_cls = getattr(comfy_core_nodes, "CLIPLoader", None) + if clip_loader_cls is None: + raise RuntimeError("[LLS] ComfyUI core CLIPLoader class was not found.") + return clip_loader_cls().load_clip(name1, type="flux2")[0] + dual_loader_cls = getattr(comfy_core_nodes, "DualCLIPLoader", None) if dual_loader_cls is None: raise RuntimeError("[LLS] ComfyUI core DualCLIPLoader class was not found.") @@ -255,6 +264,10 @@ def _resolve_external_text_encoder_names( return name1, None return (_match_file(available, _SDXL_CLIP_L_PATTERNS) or available[0] if available else None, None) + if is_flux2_family(family): + resolved_1 = name1 or _match_file(available, _FLUX2_QWEN_PATTERNS) + return resolved_1, None + if is_sdxl_family(family): resolved_1 = name1 or _match_file(available, _SDXL_CLIP_L_PATTERNS) resolved_2 = name2 or _match_file(available, _SDXL_CLIP_G_PATTERNS) @@ -269,6 +282,8 @@ def _resolve_external_vae_name(family: str, name: str | None) -> str | None: if name: return name available = _get_filename_list("vae") + if is_flux2_family(family): + return _match_file(available, _FLUX2_VAE_PATTERNS) if is_flux_family(family): return _match_file(available, _FLUX_VAE_PATTERNS) return available[0] if available else None @@ -285,6 +300,11 @@ def _missing_text_encoder_error(family: str, missing_role: str) -> RuntimeError: f"[LLS] Missing SDXL text encoder {filename}. " "Place it in ComfyUI/models/text_encoders/." ) + if is_flux2_family(family): + return RuntimeError( + "[LLS] Missing Flux2/Klein text encoder qwen_3_8b.safetensors " + "or qwen_3_8b_fp8mixed.safetensors. Place one of them in ComfyUI/models/text_encoders/." + ) filename = "clip_l.safetensors" if missing_role == "clip_l" else "t5xxl_fp8_e4m3fn.safetensors" fallback = ( "[LLS] Missing FLUX text encoder t5xxl_fp8_e4m3fn.safetensors or t5xxl_fp16.safetensors. " @@ -325,6 +345,11 @@ def _resolve_text_encoder( raise _missing_text_encoder_error(family, "clip") return _load_external_text_encoder(family, resolved_1, None), "external", resolved_1, None + if is_flux2_family(family): + if not resolved_1: + raise _missing_text_encoder_error(family, "qwen_3_8b") + return _load_external_text_encoder(family, resolved_1, None), "external", resolved_1, None + required_role_1 = "clip_l" required_role_2 = "clip_g" if is_sdxl_family(family) else "t5xxl" if not resolved_1: @@ -367,6 +392,11 @@ def _resolve_vae( if resolved_vae_name: return _load_external_vae(resolved_vae_name), "external", resolved_vae_name + if is_flux2_family(family): + raise RuntimeError( + "[LLS] Missing Flux2/Klein VAE flux2-vae.safetensors. Place it in ComfyUI/models/vae/." + ) + if is_flux_family(family): raise RuntimeError( "[LLS] Missing FLUX AE/VAE ae.safetensors. Place it in ComfyUI/models/vae/." diff --git a/tests/test_example_workflows.py b/tests/test_example_workflows.py index 760364c..1585041 100644 --- a/tests/test_example_workflows.py +++ b/tests/test_example_workflows.py @@ -16,6 +16,12 @@ class TestExampleWorkflows(unittest.TestCase): return node self.fail(f"Missing node type {node_type!r} in workflow") + def _find_input(self, node: dict, name: str) -> dict: + for item in node.get("inputs", []): + if item.get("name") == name: + return item + self.fail(f"Missing input {name!r} in node {node.get('type')!r}") + def test_universal_txt2img_ksampler_keeps_seed_control_widget(self): workflow = self._load("LLS-universal-txt2img-workflow.json") node = self._find_node(workflow, "LLSSimpleKSampler") @@ -36,6 +42,33 @@ class TestExampleWorkflows(unittest.TestCase): self.assertEqual(widgets[2], "randomize") self.assertEqual(widgets[3], 20) + def test_flux2klein_background_replace_workflow_uses_lls_edit_and_flux2_stack(self): + workflow = self._load("LLS-Flux2Klein-电商换背景工作流.json") + + encode = self._find_node(workflow, "LLSFlux2KleinEditTextEncode") + unet = self._find_node(workflow, "UNETLoader") + clip = self._find_node(workflow, "CLIPLoader") + vae = self._find_node(workflow, "VAELoader") + self._find_node(workflow, "RMBG") + self._find_node(workflow, "InvertMask") + self._find_node(workflow, "ConditioningZeroOut") + self._find_node(workflow, "KSampler") + self._find_node(workflow, "VAEDecode") + + self.assertEqual(unet.get("widgets_values", [None])[0], "flux-2-klein-9b.safetensors") + self.assertEqual(clip.get("widgets_values", [None, None])[1], "flux2") + self.assertEqual(vae.get("widgets_values", [None])[0], "flux2-vae.safetensors") + + widgets = encode.get("widgets_values", []) + self.assertGreaterEqual(len(widgets), 4) + self.assertEqual(widgets[2], "longest_edge") + self.assertEqual(widgets[3], "use_mask") + + self.assertIsNotNone(self._find_input(encode, "image1").get("link")) + self.assertIsNotNone(self._find_input(encode, "image2").get("link")) + self.assertIsNone(self._find_input(encode, "image3").get("link")) + self.assertIsNotNone(self._find_input(encode, "mask").get("link")) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_flux2klein_node.py b/tests/test_flux2klein_node.py index 849b8d1..e97e156 100644 --- a/tests/test_flux2klein_node.py +++ b/tests/test_flux2klein_node.py @@ -12,6 +12,8 @@ try: FakeMask, FakeVAE, FakeTensor, + NativeEditModelStub, + NativeFluxStub, StandardClipStub, import_plugin_submodule, load_plugin_package, @@ -22,6 +24,8 @@ except ImportError: FakeMask, FakeVAE, FakeTensor, + NativeEditModelStub, + NativeFluxStub, StandardClipStub, import_plugin_submodule, load_plugin_package, @@ -137,6 +141,39 @@ class TestFlux2KleinNode(unittest.TestCase): self.assertNotIn("noise_mask", latent) self.assertEqual(custom_output["latent_has_noise_mask"], False) + def test_flux2_official_path_uses_empty_latent_and_reference_latent_nodes(self): + NativeFluxStub.reset() + NativeEditModelStub.reset() + + with mock.patch.object(self.module, "native_flux_nodes", NativeFluxStub, create=True), mock.patch.object( + self.module, + "native_edit_model_nodes", + NativeEditModelStub, + create=True, + ): + conditioning, latent, custom_output, main_image, output_mask = self.node.encode( + clip=StandardClipStub(), + vae=FakeVAE(latent_channels=128, downscale_ratio=16), + image1=FakeTensor((1, 832, 1248, 3), label="main"), + prompt="replace background with a clean kitchen scene", + ref_longest_edge=1248, + resize_mode="keep_original", + mask_mode="use_mask", + image2=FakeTensor((1, 640, 640, 3), label="ref2"), + image3=None, + mask=FakeMask((1, 832, 1248), mask_bbox=(50, 40, 500, 700), mask_area_ratio=0.35, label="mask"), + ) + + self.assertEqual(NativeFluxStub.last_empty_call, {"width": 1248, "height": 832, "batch_size": 1}) + self.assertEqual(len(NativeEditModelStub.last_calls), 2) + self.assertEqual(latent["samples"].shape, (1, 128, 52, 78)) + self.assertEqual(latent["noise_mask"].shape, (1, 52, 78)) + self.assertEqual(custom_output["latent_mode"], "empty_flux2_latent") + self.assertEqual(custom_output["conditioning_backend"], "flux2klein_multivision_clip+reference_latent") + self.assertEqual(custom_output["reference_latent_count"], 2) + self.assertEqual(main_image.shape, (1, 832, 1248, 3)) + self.assertEqual(output_mask.shape, (1, 832, 1248)) + def test_missing_clip_backend_raises_clear_error(self): with self.assertRaisesRegex(RuntimeError, "vision-aware|text encoding backend"): self.node.encode( diff --git a/tests/test_loader_prompt_refactor.py b/tests/test_loader_prompt_refactor.py index b3a889d..95b13d4 100644 --- a/tests/test_loader_prompt_refactor.py +++ b/tests/test_loader_prompt_refactor.py @@ -448,6 +448,43 @@ class TestLoaderPromptRefactor(unittest.TestCase): self.assertEqual(payload["text_encoder_name"], "clip_l.safetensors, t5xxl_fp16.safetensors") self.assertEqual(payload["vae_name"], "ae.safetensors") + def test_universal_loader_loads_flux2_klein_with_qwen_and_flux2_vae(self): + load_plugin_package() + from lls_node_test_refactor.model_loader import nodes as loader_nodes + + folder_paths = FolderPathsStub() + folder_paths._files["diffusion_models"].append("flux-2-klein-9b.safetensors") + folder_paths._files["text_encoders"].append("qwen_3_8b.safetensors") + folder_paths._files["vae"].append("flux2-vae.safetensors") + + with mock.patch.object(loader_nodes, "folder_paths", folder_paths), mock.patch.object( + loader_nodes, + "comfy_sd", + ComfySDStub(), + ), mock.patch.object(loader_nodes, "comfy_core_nodes", CoreNodesStub()): + node = loader_nodes.LLSUniversalModelLoader() + model, text_encoder, vae, model_info = node.load( + "diffusion_models/flux-2-klein-9b.safetensors", + "Auto", + "advanced", + "external", + "external", + "qwen_3_8b.safetensors", + "(auto)", + "flux2-vae.safetensors", + ) + + payload = json.loads(model_info) + self.assertEqual(model.label, "MODEL::flux-2-klein-9b.safetensors") + self.assertEqual(text_encoder.label, "CLIP::flux2::qwen_3_8b.safetensors") + self.assertEqual(vae.label, "VAE::flux2-vae.safetensors") + self.assertEqual(payload["model_family"], "FLUX2_KLEIN") + self.assertEqual(payload["text_encoder_name_1"], "qwen_3_8b.safetensors") + self.assertEqual(payload["text_encoder_name_2"], "") + self.assertEqual(payload["text_encoder_name"], "qwen_3_8b.safetensors") + self.assertEqual(payload["vae_name"], "flux2-vae.safetensors") + self.assertEqual(text_encoder._lls_text_encoder_type, "flux2_qwen") + def test_loader_raises_clear_error_when_flux_text_encoder_is_missing(self): load_plugin_package() from lls_node_test_refactor.model_loader import nodes as loader_nodes diff --git a/utils/model_info.py b/utils/model_info.py index acaf493..f86f98b 100644 --- a/utils/model_info.py +++ b/utils/model_info.py @@ -19,6 +19,9 @@ LEGACY_FAMILY_ALIASES: dict[str, str] = { "FLUX": "FLUX_DEV", "FLUX_SCHNELL": "FLUX_SCHNELL", "FLUX_DEV": "FLUX_DEV", + "FLUX2": "FLUX2_DEV", + "FLUX2_DEV": "FLUX2_DEV", + "FLUX2_KLEIN": "FLUX2_KLEIN", } MODEL_FAMILY_CHOICES: list[str] = [ @@ -29,6 +32,8 @@ MODEL_FAMILY_CHOICES: list[str] = [ "SDXL_TURBO", "FLUX_SCHNELL", "FLUX_DEV", + "FLUX2_DEV", + "FLUX2_KLEIN", ] FAMILY_DEFAULTS: dict[str, dict[str, Any]] = { @@ -122,6 +127,42 @@ FAMILY_DEFAULTS: dict[str, dict[str, Any]] = { "is_turbo": False, "is_flux": True, }, + "FLUX2_DEV": { + "text_encoder_type": "flux2_qwen", + "required_text_encoders": ["qwen_3_8b"], + "required_vae": "required", + "latent_channels": 128, + "downscale_ratio": 16, + "default_width": 1024, + "default_height": 1024, + "default_steps": 20, + "default_cfg": 1.0, + "default_guidance": 3.5, + "default_sampler": "euler", + "default_scheduler": "simple", + "default_denoise": 1.0, + "guidance_embed": True, + "is_turbo": False, + "is_flux": True, + }, + "FLUX2_KLEIN": { + "text_encoder_type": "flux2_qwen", + "required_text_encoders": ["qwen_3_8b"], + "required_vae": "required", + "latent_channels": 128, + "downscale_ratio": 16, + "default_width": 1024, + "default_height": 1024, + "default_steps": 20, + "default_cfg": 1.0, + "default_guidance": 3.5, + "default_sampler": "euler", + "default_scheduler": "simple", + "default_denoise": 1.0, + "guidance_embed": True, + "is_turbo": False, + "is_flux": True, + }, } SAMPLING_PRESETS: dict[str, dict[str, dict[str, float | int | None]]] = { @@ -190,6 +231,32 @@ SAMPLING_PRESETS: dict[str, dict[str, dict[str, float | int | None]]] = { "Balanced": {"steps": 20, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, "High Quality": {"steps": 28, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, }, + "FLUX2_DEV": { + FAMILY_DEFAULT_PRESET: { + "steps": 20, + "cfg": 1.0, + "guidance": 3.5, + "sampler_name": "euler", + "scheduler": "simple", + "denoise": 1.0, + }, + "Fast": {"steps": 12, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, + "Balanced": {"steps": 20, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, + "High Quality": {"steps": 28, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, + }, + "FLUX2_KLEIN": { + FAMILY_DEFAULT_PRESET: { + "steps": 20, + "cfg": 1.0, + "guidance": 3.5, + "sampler_name": "euler", + "scheduler": "simple", + "denoise": 1.0, + }, + "Fast": {"steps": 12, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, + "Balanced": {"steps": 20, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, + "High Quality": {"steps": 28, "cfg": 1.0, "guidance": 3.5, "sampler_name": "euler", "scheduler": "simple", "denoise": 1.0}, + }, } _LEGACY_MODEL_INFO_PATTERN = re.compile(r"(\w+)=([^|]+)") @@ -219,6 +286,10 @@ def infer_family_from_name(model_name: str | None, fallback: str = "SD1.5") -> s return canonicalize_family(fallback) name = str(model_name).lower() + if "flux-2" in name or "flux2" in name or "flux.2" in name: + if "klein" in name: + return "FLUX2_KLEIN" + return "FLUX2_DEV" if "flux" in name: if "schnell" in name: return "FLUX_SCHNELL" @@ -231,7 +302,11 @@ def infer_family_from_name(model_name: str | None, fallback: str = "SD1.5") -> s def is_flux_family(family: str | None) -> bool: - return canonicalize_family(family) in {"FLUX_SCHNELL", "FLUX_DEV"} + return canonicalize_family(family) in {"FLUX_SCHNELL", "FLUX_DEV", "FLUX2_DEV", "FLUX2_KLEIN"} + + +def is_flux2_family(family: str | None) -> bool: + return canonicalize_family(family) in {"FLUX2_DEV", "FLUX2_KLEIN"} def is_sdxl_family(family: str | None) -> bool: @@ -460,6 +535,8 @@ def infer_family_from_clip(clip) -> str: tokens = clip.tokenize("") except Exception: return "SD1.5" + if "qwen" in getattr(clip, "_lls_text_encoder_type", ""): + return "FLUX2_KLEIN" if "t5xxl" in tokens: return "FLUX_DEV" if "g" in tokens: diff --git a/加背景Flux2Klein9b,根据产品匹配场景.json b/加背景Flux2Klein9b,根据产品匹配场景.json new file mode 100644 index 0000000..9f3e3cd --- /dev/null +++ b/加背景Flux2Klein9b,根据产品匹配场景.json @@ -0,0 +1,2345 @@ +{ + "id": "97027698-b9e8-4d5e-81bb-9b1128447584", + "revision": 0, + "last_node_id": 108, + "last_link_id": 184, + "nodes": [ + { + "id": 26, + "type": "MaskPreview+", + "pos": [ + 1983.035888671875, + 1369.5615234375 + ], + "size": [ + 399.42401123046875, + 262.43402099609375 + ], + "flags": {}, + "order": 23, + "mode": 4, + "inputs": [ + { + "label": "mask", + "name": "mask", + "type": "MASK", + "link": 37 + } + ], + "outputs": [ + { + "label": "image_urls", + "name": "image_urls", + "type": "STRING" + } + ], + "properties": { + "Node name for S&R": "MaskPreview+", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 46, + "type": "PreviewImage", + "pos": [ + 944.9359741210938, + 1292.5599365234375 + ], + "size": [ + 403.1787109375, + 339.8079833984375 + ], + "flags": {}, + "order": 15, + "mode": 4, + "inputs": [ + { + "label": "images", + "name": "images", + "type": "IMAGE", + "link": 105 + } + ], + "outputs": [ + { + "label": "image_urls", + "name": "image_urls", + "type": "STRING" + } + ], + "properties": { + "Node name for S&R": "PreviewImage", + "cnr_id": "comfy-core", + "ver": "0.3.59", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 25, + "type": "ImagePadForOutpaint", + "pos": [ + 2042.8533935546875, + 1139.1552734375 + ], + "size": [ + 270, + 174 + ], + "flags": {}, + "order": 19, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 92 + }, + { + "label": "left", + "name": "left", + "type": "INT", + "widget": { + "name": "left" + } + }, + { + "label": "top", + "name": "top", + "type": "INT", + "widget": { + "name": "top" + } + }, + { + "label": "right", + "name": "right", + "type": "INT", + "widget": { + "name": "right" + } + }, + { + "label": "bottom", + "name": "bottom", + "type": "INT", + "widget": { + "name": "bottom" + } + }, + { + "label": "feathering", + "name": "feathering", + "type": "INT", + "widget": { + "name": "feathering" + } + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 62, + 161 + ] + }, + { + "label": "MASK", + "name": "MASK", + "type": "MASK", + "links": [ + 37 + ] + } + ], + "properties": { + "Node name for S&R": "ImagePadForOutpaint", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 200, + 0, + 200, + 0, + 40 + ] + }, + { + "id": 48, + "type": "PreviewImage", + "pos": [ + 3297.71484375, + 1392.8336181640625 + ], + "size": [ + 296.69873046875, + 261.48797607421875 + ], + "flags": {}, + "order": 18, + "mode": 4, + "inputs": [ + { + "label": "images", + "name": "images", + "type": "IMAGE", + "link": 98 + } + ], + "outputs": [ + { + "label": "image_urls", + "name": "image_urls", + "type": "STRING" + } + ], + "properties": { + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 57, + "type": "OpenposePreprocessor", + "pos": [ + 3298.34521484375, + 1172.1854248046875 + ], + "size": [ + 288.11114501953125, + 174 + ], + "flags": {}, + "order": 14, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 94 + }, + { + "label": "detect_hand", + "name": "detect_hand", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "detect_hand" + } + }, + { + "label": "detect_body", + "name": "detect_body", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "detect_body" + } + }, + { + "label": "detect_face", + "name": "detect_face", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "detect_face" + } + }, + { + "label": "resolution", + "name": "resolution", + "shape": 7, + "type": "INT", + "widget": { + "name": "resolution" + }, + "link": 103 + }, + { + "label": "scale_stick_for_xinsr_cn", + "name": "scale_stick_for_xinsr_cn", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "scale_stick_for_xinsr_cn" + } + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 98, + 162 + ] + }, + { + "label": "POSE_KEYPOINT", + "name": "POSE_KEYPOINT", + "type": "POSE_KEYPOINT" + } + ], + "properties": { + "Node name for S&R": "OpenposePreprocessor", + "widget_ue_connectable": { + "resolution": true + } + }, + "widgets_values": [ + "enable", + "enable", + "enable", + 512, + "disable" + ] + }, + { + "id": 51, + "type": "PreviewImage", + "pos": [ + 1460.9593505859375, + 1289.75341796875 + ], + "size": [ + 403.1787109375, + 339.8079833984375 + ], + "flags": {}, + "order": 20, + "mode": 4, + "inputs": [ + { + "label": "images", + "name": "images", + "type": "IMAGE", + "link": 93 + } + ], + "outputs": [ + { + "label": "image_urls", + "name": "image_urls", + "type": "STRING" + } + ], + "properties": { + "Node name for S&R": "PreviewImage", + "cnr_id": "comfy-core", + "ver": "0.3.59", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 55, + "type": "DepthAnythingPreprocessor", + "pos": [ + 1607.7266845703125, + 1142.6326904296875 + ], + "size": [ + 275.7408142089844, + 82 + ], + "flags": {}, + "order": 16, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 106 + }, + { + "label": "checkpoint_name", + "name": "checkpoint_name", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "checkpoint_name" + } + }, + { + "label": "resolution", + "name": "resolution", + "shape": 7, + "type": "INT", + "widget": { + "name": "resolution" + }, + "link": 180 + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 92, + 93 + ] + } + ], + "properties": { + "Node name for S&R": "DepthAnythingPreprocessor", + "widget_ue_connectable": { + "resolution": true + } + }, + "widgets_values": [ + "depth_anything_vitl14.pth", + 2048 + ] + }, + { + "id": 40, + "type": "ImageScaleToTotalPixels", + "pos": [ + 2903.56103515625, + 1332.6279296875 + ], + "size": [ + 214.30299377441406, + 106 + ], + "flags": { + "collapsed": false + }, + "order": 7, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 67 + }, + { + "label": "upscale_method", + "name": "upscale_method", + "type": "COMBO", + "widget": { + "name": "upscale_method" + } + }, + { + "label": "megapixels", + "name": "megapixels", + "type": "FLOAT", + "widget": { + "name": "megapixels" + } + }, + { + "label": "resolution_steps", + "name": "resolution_steps", + "type": "INT", + "widget": { + "name": "resolution_steps" + } + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 94, + 102 + ] + } + ], + "properties": { + "Node name for S&R": "ImageScaleToTotalPixels", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.50", + "ue_properties": { + "widget_ue_connectable": { + "megapixels": true, + "upscale_method": true + }, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + "lanczos", + 1, + 1 + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 61, + "type": "easy imageSize", + "pos": [ + 2905.34814453125, + 1475.7066650390625 + ], + "size": [ + 210, + 135.66941833496094 + ], + "flags": {}, + "order": 10, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 102 + } + ], + "outputs": [ + { + "label": "width_int", + "name": "width_int", + "type": "INT", + "links": [ + 103 + ] + }, + { + "label": "height_int", + "name": "height_int", + "type": "INT" + } + ], + "properties": { + "Node name for S&R": "easy imageSize", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Width: 769 , Height: 1363" + ] + }, + { + "id": 62, + "type": "CannyEdgePreprocessor", + "pos": [ + 1013.0152587890625, + 1140.574951171875 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 12, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 177 + }, + { + "label": "low_threshold", + "name": "low_threshold", + "shape": 7, + "type": "INT", + "widget": { + "name": "low_threshold" + } + }, + { + "label": "high_threshold", + "name": "high_threshold", + "shape": 7, + "type": "INT", + "widget": { + "name": "high_threshold" + } + }, + { + "label": "resolution", + "name": "resolution", + "shape": 7, + "type": "INT", + "widget": { + "name": "resolution" + }, + "link": 179 + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 105, + 106 + ] + } + ], + "properties": { + "Node name for S&R": "CannyEdgePreprocessor", + "widget_ue_connectable": { + "resolution": true + } + }, + "widgets_values": [ + 150, + 200, + 512 + ] + }, + { + "id": 1, + "type": "CFGNorm", + "pos": [ + 1537.4566650390625, + 1817.9044189453125 + ], + "size": [ + 248.726806640625, + 58 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 1 + }, + { + "label": "strength", + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "label": "patched_model", + "name": "patched_model", + "type": "MODEL", + "links": [ + 175 + ] + } + ], + "properties": { + "Node name for S&R": "CFGNorm", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.50", + "ue_properties": { + "widget_ue_connectable": { + "strength": true + }, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 2, + "type": "ModelSamplingAuraFlow", + "pos": [ + 1249.6124267578125, + 1816.572998046875 + ], + "size": [ + 246.1006317138672, + 58 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 25 + }, + { + "label": "shift", + "name": "shift", + "type": "FLOAT", + "widget": { + "name": "shift" + } + } + ], + "outputs": [ + { + "label": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 1 + ] + } + ], + "properties": { + "Node name for S&R": "ModelSamplingAuraFlow", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.48", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + 3 + ] + }, + { + "id": 79, + "type": "LoraLoaderModelOnly", + "pos": [ + 633.2361450195312, + 1820.179443359375 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 127 + }, + { + "label": "lora_name", + "name": "lora_name", + "type": "COMBO", + "widget": { + "name": "lora_name" + } + }, + { + "label": "strength_model", + "name": "strength_model", + "type": "FLOAT", + "widget": { + "name": "strength_model" + } + } + ], + "outputs": [ + { + "label": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 128 + ] + } + ], + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "cnr_id": "comfy-core", + "models": [ + { + "name": "Qwen-Image-Lightning-8steps-V1.0.safetensors", + "directory": "loras", + "url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V1.0.safetensors" + } + ], + "ver": "0.3.49", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "dx白底图转场景.safetensors", + 1 + ] + }, + { + "id": 12, + "type": "VAEDecode", + "pos": [ + 2207.555419921875, + 1851.8533935546875 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": false + }, + "order": 26, + "mode": 0, + "inputs": [ + { + "label": "samples", + "name": "samples", + "type": "LATENT", + "link": 16 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 30 + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 74, + 129 + ] + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.48", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [] + }, + { + "id": 77, + "type": "UNETLoader", + "pos": [ + 300.7309875488281, + 1827.7647705078125 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "label": "unet_name", + "name": "unet_name", + "type": "COMBO", + "widget": { + "name": "unet_name" + } + }, + { + "label": "weight_dtype", + "name": "weight_dtype", + "type": "COMBO", + "widget": { + "name": "weight_dtype" + } + } + ], + "outputs": [ + { + "label": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 127 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "flux-2-klein-9b.safetensors", + "default" + ] + }, + { + "id": 76, + "type": "CLIPLoader", + "pos": [ + 294.78070068359375, + 2029.581787109375 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "label": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + } + }, + { + "label": "type", + "name": "type", + "type": "COMBO", + "widget": { + "name": "type" + } + }, + { + "label": "device", + "name": "device", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "device" + } + } + ], + "outputs": [ + { + "label": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [ + 160 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPLoader", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "qwen_3_8b.safetensors", + "flux2", + "cpu" + ] + }, + { + "id": 22, + "type": "VAELoader", + "pos": [ + 320.422119140625, + 2275.708740234375 + ], + "size": [ + 330, + 60 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "label": "vae_name", + "name": "vae_name", + "type": "COMBO", + "widget": { + "name": "vae_name" + } + } + ], + "outputs": [ + { + "label": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 30, + 31, + 172 + ] + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "models": [ + { + "directory_invalid": true, + "name": "qwen_image_vae.safetensors", + "directory": "vae", + "url": "https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/vae/qwen_image_vae.safetensors" + } + ], + "ver": "0.3.48", + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + "flux2-vae.safetensors" + ] + }, + { + "id": 44, + "type": "Image Comparer (rgthree)", + "pos": [ + 2429.11865234375, + 1841.739013671875 + ], + "size": [ + 573.0968627929688, + 524.151123046875 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "dir": 3, + "label": "image_a", + "name": "image_a", + "type": "IMAGE", + "link": 74 + }, + { + "dir": 3, + "label": "image_b", + "name": "image_b", + "type": "IMAGE", + "link": 181 + } + ], + "outputs": [ + { + "dir": 4, + "label": "image_urls", + "name": "image_urls", + "shape": 3, + "type": "STRING" + } + ], + "properties": { + "comparer_mode": "Slide", + "widget_ue_connectable": {} + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/view?filename=rgthree.compare._temp_saybg_00001_seccz_1779777970.jpg&type=temp&subfolder=&rand=0.17279699486324962&Rh-Comfy-Auth=eyJ1c2VySWQiOiI0YzE5NjcxMjQyMWUyMzIwMWUzZDFlOTYyMjVkYzYwMiIsInNpZ25FeHBpcmUiOjE3ODAzODE3MjU0MTIsInRzIjoxNzc5Nzc2OTI1NDEyLCJzaWduIjoiN2JiODYyNTdhMDE4NTVlNDU5MzQ1NjNiNTgyM2FlMWIifQ==&Rh-Identify=4c196712421e23201e3d1e96225dc602" + }, + { + "name": "B", + "selected": true, + "url": "/view?filename=rgthree.compare._temp_saybg_00002_tlgcz_1779777972.jpg&type=temp&subfolder=&rand=0.11076423480849307&Rh-Comfy-Auth=eyJ1c2VySWQiOiI0YzE5NjcxMjQyMWUyMzIwMWUzZDFlOTYyMjVkYzYwMiIsInNpZ25FeHBpcmUiOjE3ODAzODE3MjU0MTIsInRzIjoxNzc5Nzc2OTI1NDEyLCJzaWduIjoiN2JiODYyNTdhMDE4NTVlNDU5MzQ1NjNiNTgyM2FlMWIifQ==&Rh-Identify=4c196712421e23201e3d1e96225dc602" + } + ] + ] + }, + { + "id": 80, + "type": "SaveImage", + "pos": [ + 3020.903076171875, + 2016.0977783203125 + ], + "size": [ + 447.2727966308594, + 329.6109619140625 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "label": "images", + "name": "images", + "type": "IMAGE", + "link": 129 + }, + { + "label": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + } + } + ], + "outputs": [ + { + "label": "image_urls", + "name": "image_urls", + "type": "STRING" + } + ], + "properties": { + "Node name for S&R": "SaveImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 7, + "type": "LoadImage", + "pos": [ + 2530.107421875, + 1120.9268798828125 + ], + "size": [ + 342.171875, + 523.9375 + ], + "flags": {}, + "order": 3, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "COMBO", + "widget": { + "name": "image" + } + }, + { + "label": "upload", + "name": "upload", + "type": "IMAGEUPLOAD", + "widget": { + "name": "upload" + } + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 67 + ] + }, + { + "label": "MASK", + "name": "MASK", + "type": "MASK" + } + ], + "properties": { + "Node name for S&R": "LoadImage", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.50", + "ue_properties": { + "widget_ue_connectable": { + "image": true, + "upload": true + }, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + "5c6204ce2d29b1abba447c6eb93f8749c725c1a81a858a0c28579e8c642094d1.jpg", + "image" + ] + }, + { + "id": 10, + "type": "VAEEncode", + "pos": [ + 1012.75634765625, + 2308.287353515625 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": false + }, + "order": 21, + "mode": 0, + "inputs": [ + { + "label": "pixels", + "name": "pixels", + "type": "IMAGE", + "link": 62 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 31 + } + ], + "outputs": [ + { + "label": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [] + } + ], + "properties": { + "Node name for S&R": "VAEEncode", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.50", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [] + }, + { + "id": 31, + "type": "LoadImage", + "pos": [ + 280.11285400390625, + 1157.8184814453125 + ], + "size": [ + 338.3213806152344, + 472.665283203125 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "label": "image", + "name": "image", + "type": "COMBO", + "widget": { + "name": "image" + } + }, + { + "label": "upload", + "name": "upload", + "type": "IMAGEUPLOAD", + "widget": { + "name": "upload" + } + } + ], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 176 + ] + }, + { + "label": "MASK", + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "Node name for S&R": "LoadImage", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.50", + "ue_properties": { + "widget_ue_connectable": { + "image": true, + "upload": true + }, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + "c580bea1ee8fcdc6b9663fada5540d6ee4a780ce9a8e309d63428a65a6a6821d.jpg", + "image" + ] + }, + { + "id": 106, + "type": "LayerUtility: ImageScaleByAspectRatio V2", + "pos": [ + 655.6429443359375, + 1109.776611328125 + ], + "size": [ + 303.6851501464844, + 330 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "label": "image", + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 176 + }, + { + "label": "mask", + "name": "mask", + "shape": 7, + "type": "MASK" + }, + { + "label": "aspect_ratio", + "name": "aspect_ratio", + "type": "COMBO", + "widget": { + "name": "aspect_ratio" + } + }, + { + "label": "proportional_width", + "name": "proportional_width", + "type": "INT", + "widget": { + "name": "proportional_width" + } + }, + { + "label": "proportional_height", + "name": "proportional_height", + "type": "INT", + "widget": { + "name": "proportional_height" + } + }, + { + "label": "fit", + "name": "fit", + "type": "COMBO", + "widget": { + "name": "fit" + } + }, + { + "label": "method", + "name": "method", + "type": "COMBO", + "widget": { + "name": "method" + } + }, + { + "label": "round_to_multiple", + "name": "round_to_multiple", + "type": "COMBO", + "widget": { + "name": "round_to_multiple" + } + }, + { + "label": "scale_to_side", + "name": "scale_to_side", + "type": "COMBO", + "widget": { + "name": "scale_to_side" + } + }, + { + "label": "scale_to_length", + "name": "scale_to_length", + "type": "INT", + "widget": { + "name": "scale_to_length" + }, + "link": 182 + }, + { + "label": "background_color", + "name": "background_color", + "type": "STRING", + "widget": { + "name": "background_color" + } + } + ], + "outputs": [ + { + "label": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 177, + 181, + 184 + ] + }, + { + "label": "mask", + "name": "mask", + "type": "MASK" + }, + { + "label": "original_size", + "name": "original_size", + "type": "BOX" + }, + { + "label": "width", + "name": "width", + "type": "INT", + "links": [] + }, + { + "label": "height", + "name": "height", + "type": "INT", + "links": [ + 179, + 180 + ] + } + ], + "properties": { + "Node name for S&R": "LayerUtility: ImageScaleByAspectRatio V2", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "original", + 1, + 1, + "letterbox", + "lanczos", + "8", + "longest", + 1920, + "#000000" + ], + "color": "rgba(38, 73, 116, 0.7)" + }, + { + "id": 107, + "type": "Int", + "pos": [ + 658.5880737304688, + 1493.0257568359375 + ], + "size": [ + 210, + 67.54044342041016 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "label": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "label": "INT", + "name": "INT", + "type": "INT", + "links": [ + 182 + ] + } + ], + "properties": { + "Node name for S&R": "Int", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 1920 + ] + }, + { + "id": 108, + "type": "SaveImage", + "pos": [ + 1069.5263671875, + 958.127197265625 + ], + "size": [ + 270, + 270 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "label": "images", + "name": "images", + "type": "IMAGE", + "link": 184 + } + ], + "outputs": [ + { + "label": "image_urls", + "name": "image_urls", + "type": "STRING", + "links": null + } + ], + "properties": { + "widget_ue_connectable": {}, + "Node name for S&R": "SaveImage" + }, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 104, + "type": "Flux2KleinEditTextEncode_EditUtils", + "pos": [ + 744.451904296875, + 1959.6353759765625 + ], + "size": [ + 400, + 212 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "label": "clip", + "name": "clip", + "type": "CLIP", + "link": 160 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 172 + }, + { + "label": "image1", + "name": "image1", + "shape": 7, + "type": "IMAGE", + "link": 161 + }, + { + "label": "image2", + "name": "image2", + "shape": 7, + "type": "IMAGE", + "link": 162 + }, + { + "label": "image3", + "name": "image3", + "shape": 7, + "type": "IMAGE" + }, + { + "label": "mask", + "name": "mask", + "shape": 7, + "type": "MASK" + }, + { + "label": "prompt", + "name": "prompt", + "type": "STRING", + "widget": { + "name": "prompt" + } + }, + { + "label": "ref_longest_edge", + "name": "ref_longest_edge", + "shape": 7, + "type": "INT", + "widget": { + "name": "ref_longest_edge" + } + } + ], + "outputs": [ + { + "label": "conditioning", + "name": "conditioning", + "type": "CONDITIONING", + "links": [ + 164, + 165 + ] + }, + { + "label": "latent", + "name": "latent", + "type": "LATENT", + "links": [ + 183 + ] + }, + { + "label": "custom_output", + "name": "custom_output", + "type": "ANY" + }, + { + "label": "main_image", + "name": "main_image", + "type": "IMAGE" + }, + { + "label": "mask", + "name": "mask", + "type": "MASK" + } + ], + "properties": { + "Node name for S&R": "Flux2KleinEditTextEncode_EditUtils", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "白底图转场景,将产品放在家居场景中,2k,4k", + 1024 + ] + }, + { + "id": 105, + "type": "ConditioningZeroOut", + "pos": [ + 1476.5252685546875, + 2026.3673095703125 + ], + "size": [ + 197.712890625, + 26 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "label": "conditioning", + "name": "conditioning", + "type": "CONDITIONING", + "link": 165 + } + ], + "outputs": [ + { + "label": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 166 + ] + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 14, + "type": "KSampler", + "pos": [ + 1831.4239501953125, + 1817.2537841796875 + ], + "size": [ + 303.5854797363281, + 539.2617797851562 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 175 + }, + { + "label": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 164 + }, + { + "label": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 166 + }, + { + "label": "latent_image", + "name": "latent_image", + "type": "LATENT", + "link": 183 + }, + { + "label": "seed", + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + } + }, + { + "label": "steps", + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + } + }, + { + "label": "cfg", + "name": "cfg", + "type": "FLOAT", + "widget": { + "name": "cfg" + } + }, + { + "label": "sampler_name", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + } + }, + { + "label": "scheduler", + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + } + }, + { + "label": "denoise", + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + } + } + ], + "outputs": [ + { + "label": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 16 + ] + } + ], + "properties": { + "Node name for S&R": "KSampler", + "cnr_id": "comfy-core", + "hasSecondTab": false, + "ver": "0.3.48", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.1" + }, + "widget_ue_connectable": {}, + "secondTabText": "Send Back", + "enableTabs": false, + "secondTabOffset": 80, + "tabWidth": 65, + "secondTabWidth": 65, + "tabXOffset": 10 + }, + "widgets_values": [ + 34227918990123, + "randomize", + 4, + 1, + "euler", + "simple", + 1 + ] + }, + { + "id": 20, + "type": "LoraLoaderModelOnly", + "pos": [ + 937.8019409179688, + 1813.4656982421875 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 128 + }, + { + "label": "lora_name", + "name": "lora_name", + "type": "COMBO", + "widget": { + "name": "lora_name" + } + }, + { + "label": "strength_model", + "name": "strength_model", + "type": "FLOAT", + "widget": { + "name": "strength_model" + } + } + ], + "outputs": [ + { + "label": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 25 + ] + } + ], + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "cnr_id": "comfy-core", + "models": [ + { + "name": "Qwen-Image-Lightning-8steps-V1.0.safetensors", + "directory": "loras", + "url": "https://huggingface.co/lightx2v/Qwen-Image-Lightning/resolve/main/Qwen-Image-Lightning-8steps-V1.0.safetensors" + } + ], + "ver": "0.3.49", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Flux2-Klein9B-Anything2Real_v3.0.safetensors", + 0.30000000000000004 + ] + } + ], + "links": [ + [ + 1, + 2, + 0, + 1, + 0, + "MODEL" + ], + [ + 16, + 14, + 0, + 12, + 0, + "LATENT" + ], + [ + 25, + 20, + 0, + 2, + 0, + "MODEL" + ], + [ + 30, + 22, + 0, + 12, + 1, + "VAE" + ], + [ + 31, + 22, + 0, + 10, + 1, + "VAE" + ], + [ + 37, + 25, + 1, + 26, + 0, + "MASK" + ], + [ + 62, + 25, + 0, + 10, + 0, + "IMAGE" + ], + [ + 67, + 7, + 0, + 40, + 0, + "IMAGE" + ], + [ + 74, + 12, + 0, + 44, + 0, + "IMAGE" + ], + [ + 92, + 55, + 0, + 25, + 0, + "IMAGE" + ], + [ + 93, + 55, + 0, + 51, + 0, + "IMAGE" + ], + [ + 94, + 40, + 0, + 57, + 0, + "IMAGE" + ], + [ + 98, + 57, + 0, + 48, + 0, + "IMAGE" + ], + [ + 102, + 40, + 0, + 61, + 0, + "IMAGE" + ], + [ + 103, + 61, + 0, + 57, + 4, + "INT" + ], + [ + 105, + 62, + 0, + 46, + 0, + "IMAGE" + ], + [ + 106, + 62, + 0, + 55, + 0, + "IMAGE" + ], + [ + 127, + 77, + 0, + 79, + 0, + "MODEL" + ], + [ + 128, + 79, + 0, + 20, + 0, + "MODEL" + ], + [ + 129, + 12, + 0, + 80, + 0, + "IMAGE" + ], + [ + 160, + 76, + 0, + 104, + 0, + "CLIP" + ], + [ + 161, + 25, + 0, + 104, + 2, + "IMAGE" + ], + [ + 162, + 57, + 0, + 104, + 3, + "IMAGE" + ], + [ + 164, + 104, + 0, + 14, + 1, + "CONDITIONING" + ], + [ + 165, + 104, + 0, + 105, + 0, + "CONDITIONING" + ], + [ + 166, + 105, + 0, + 14, + 2, + "CONDITIONING" + ], + [ + 172, + 22, + 0, + 104, + 1, + "VAE" + ], + [ + 175, + 1, + 0, + 14, + 0, + "MODEL" + ], + [ + 176, + 31, + 0, + 106, + 0, + "IMAGE" + ], + [ + 177, + 106, + 0, + 62, + 0, + "IMAGE" + ], + [ + 179, + 106, + 4, + 62, + 3, + "INT" + ], + [ + 180, + 106, + 4, + 55, + 2, + "INT" + ], + [ + 181, + 106, + 0, + 44, + 1, + "IMAGE" + ], + [ + 182, + 107, + 0, + 106, + 9, + "INT" + ], + [ + 183, + 104, + 1, + 14, + 3, + "LATENT" + ], + [ + 184, + 106, + 0, + 108, + 0, + "IMAGE" + ] + ], + "groups": [ + { + "id": 2, + "title": "Picture1-Expanded Image", + "bounding": [ + 1953.676025390625, + 1058.07470703125, + 480.4078063964844, + 605.7001953125 + ], + "color": "#88A", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "Picture1", + "bounding": [ + 266.4472351074219, + 1044.9365234375, + 609.638427734375, + 616.7652587890625 + ], + "color": "#88A", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "Picture2", + "bounding": [ + 2507.108642578125, + 1065.9576416015625, + 631.033935546875, + 587.572509765625 + ], + "color": "#8A8", + "font_size": 24, + "flags": {} + }, + { + "id": 6, + "title": "Picture1- OpenPose", + "bounding": [ + 3238.71484375, + 1087.713623046875, + 400.8062744140625, + 584.837158203125 + ], + "color": "#8A8", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "通用", + "bounding": [ + 263.656982421875, + 1731.3001708984375, + 3237.737060546875, + 672.7454833984375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Picture1- canny", + "bounding": [ + 914.6961059570312, + 1051.5450439453125, + 464.53875732421875, + 611.942626953125 + ], + "color": "#88A", + "font_size": 24, + "flags": {} + }, + { + "id": 11, + "title": "Picture1- depth", + "bounding": [ + 1413.6575927734375, + 1054.25537109375, + 501.4986572265625, + 601.9025268554688 + ], + "color": "#88A", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "VHS_KeepIntermediate": true, + "links_added_by_ue": [], + "VHS_MetadataImage": true, + "ue_links": [], + "0246.VERSION": [ + 0, + 0, + 4 + ], + "VHS_latentpreviewrate": 0, + "frontendVersion": "1.23.0", + "VHS_latentpreview": false, + "ds": { + "scale": 0.8769226950000064, + "offset": [ + -197.02517162823978, + -1146.3858200164068 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/测试工作流.json b/测试工作流.json index f384988..a91cce3 100644 --- a/测试工作流.json +++ b/测试工作流.json @@ -1,8 +1,8 @@ { "id": "196d3f49-c541-4fcd-b800-ad54aecdf346", "revision": 0, - "last_node_id": 78, - "last_link_id": 129, + "last_node_id": 187, + "last_link_id": 317, "nodes": [ { "id": 28, @@ -16,7 +16,7 @@ 46 ], "flags": {}, - "order": 24, + "order": 61, "mode": 4, "inputs": [ { @@ -58,7 +58,7 @@ 198 ], "flags": {}, - "order": 27, + "order": 69, "mode": 4, "inputs": [ { @@ -107,7 +107,7 @@ 331.33331298828125 ], "flags": {}, - "order": 30, + "order": 74, "mode": 4, "inputs": [ { @@ -199,7 +199,7 @@ 238 ], "flags": {}, - "order": 9, + "order": 24, "mode": 4, "inputs": [ { @@ -310,7 +310,7 @@ 230 ], "flags": {}, - "order": 8, + "order": 23, "mode": 4, "inputs": [ { @@ -371,7 +371,7 @@ 446 ], "flags": {}, - "order": 17, + "order": 42, "mode": 4, "inputs": [ { @@ -428,7 +428,7 @@ }, "widgets_values": [ "Family Default", - 778491660376767, + 57146633536829, "randomize", 20, 7, @@ -454,7 +454,7 @@ 498 ], "flags": {}, - "order": 10, + "order": 25, "mode": 4, "inputs": [ { @@ -490,7 +490,7 @@ 1024, 1024, 20, - 411574122219210, + 720687637906196, "randomize", 1, "", @@ -556,7 +556,7 @@ 246 ], "flags": {}, - "order": 18, + "order": 43, "mode": 4, "inputs": [ { @@ -585,7 +585,7 @@ 46 ], "flags": {}, - "order": 28, + "order": 70, "mode": 4, "inputs": [ { @@ -627,7 +627,7 @@ 286 ], "flags": {}, - "order": 31, + "order": 75, "mode": 4, "inputs": [ { @@ -694,7 +694,7 @@ 260 ], "flags": {}, - "order": 12, + "order": 27, "mode": 4, "inputs": [ { @@ -762,7 +762,7 @@ 534 ], "flags": {}, - "order": 11, + "order": 26, "mode": 4, "inputs": [ { @@ -813,7 +813,7 @@ "qwen_image_edit_2509_fp8_e4m3fn.safetensors", "cat", 20, - 616252094308538, + 184924681839159, "randomize", "", 4, @@ -841,7 +841,7 @@ "flags": { "collapsed": false }, - "order": 19, + "order": 44, "mode": 4, "inputs": [ { @@ -870,7 +870,7 @@ 26 ], "flags": {}, - "order": 13, + "order": 28, "mode": 4, "inputs": [ { @@ -907,7 +907,7 @@ 246 ], "flags": {}, - "order": 20, + "order": 45, "mode": 4, "inputs": [ { @@ -981,7 +981,7 @@ 446 ], "flags": {}, - "order": 25, + "order": 62, "mode": 4, "inputs": [ { @@ -1038,17 +1038,17 @@ }, "widgets_values": [ "Manual", - 452874131519053, + 795589905965275, "randomize", - 30, - 1, + 20, + 3, "euler", "simple", 1, "manual", - "auto", + "flux", 3.5, - "Auto", + "FLUX_SCHNELL", "" ] }, @@ -1064,7 +1064,7 @@ 230 ], "flags": {}, - "order": 14, + "order": 29, "mode": 4, "inputs": [ { @@ -1125,7 +1125,7 @@ 610 ], "flags": {}, - "order": 21, + "order": 46, "mode": 4, "inputs": [ { @@ -1147,7 +1147,7 @@ "name": "model", "shape": 7, "type": "MODEL", - "link": 129 + "link": null }, { "name": "positive", @@ -1216,9 +1216,9 @@ "Node name for S&R": "LLSSimpleRepairPrepare" }, "widgets_values": [ - "auto", - "auto", - "replace", + "crop", + "latent_mask", + "repair", 24, 8, 0.5, @@ -1257,8 +1257,7 @@ "name": "model", "type": "MODEL", "links": [ - 68, - 129 + 68 ] }, { @@ -1290,7 +1289,7 @@ "Node name for S&R": "LLSSimpleCheckpointLoader" }, "widgets_values": [ - "diffusion_models/fluxFillFP8_v10.safetensors", + "flux1-schnell-fp8.safetensors", "Auto", "simple", "auto", @@ -1312,7 +1311,7 @@ 266.6666259765625 ], "flags": {}, - "order": 34, + "order": 80, "mode": 4, "inputs": [ { @@ -1330,95 +1329,307 @@ "widgets_values": [] }, { - "id": 75, - "type": "LLSSimplePromptEncode", + "id": 106, + "type": "LLSSimpleVAEDecode", "pos": [ - 729.0904534452774, - 2132.2419149554676 + 3396.658294139144, + -237.99958291844857 + ], + "size": [ + 270, + 80 + ], + "flags": {}, + "order": 71, + "mode": 4, + "inputs": [ + { + "label": "samples", + "name": "samples", + "type": "LATENT", + "link": 188 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 189 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 177 + ] + }, + { + "name": "decode_info", + "type": "STRING", + "slot_index": 1, + "links": [ + 180 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 102, + "type": "LLSSimpleKSampler", + "pos": [ + 3401.5494082311957, + -726.0376830521335 + ], + "size": [ + 380, + 446 + ], + "flags": {}, + "order": 63, + "mode": 4, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 172 + }, + { + "label": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 173 + }, + { + "label": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 174 + }, + { + "label": "latent_image", + "name": "latent_image", + "type": "LATENT", + "link": 175 + }, + { + "label": "repair_info", + "name": "repair_info", + "shape": 7, + "type": "LLS_REPAIR_INFO", + "link": null + }, + { + "label": "guidance_stack", + "name": "guidance_stack", + "shape": 7, + "type": "LLS_GUIDANCE_STACK", + "link": null + }, + { + "label": "model_info", + "name": "model_info", + "shape": 7, + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 176 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [ + 188 + ] + }, + { + "name": "sample_info", + "type": "STRING", + "slot_index": 1, + "links": [ + 179 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleKSampler" + }, + "widgets_values": [ + "Family Default", + 571958248511790, + "randomize", + 20, + 7, + "euler", + "normal", + 1, + "manual", + "auto", + 3.5, + "Auto", + "" + ] + }, + { + "id": 105, + "type": "LLSNativeInpaintConditioning", + "pos": [ + 2968.5116995518965, + -719.9131753308342 ], "size": [ 400, 230 ], "flags": {}, - "order": 16, - "mode": 0, + "order": 47, + "mode": 4, "inputs": [ { - "name": "text_encoder", - "shape": 7, - "type": "CLIP", - "link": 114 + "label": "model", + "name": "model", + "type": "MODEL", + "link": 181 }, { - "name": "clip", + "label": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 182 + }, + { + "label": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 183 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 184 + }, + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 185 + }, + { + "label": "mask", + "name": "mask", + "type": "MASK", + "link": 186 + }, + { + "label": "model_info", + "name": "model_info", "shape": 7, - "type": "CLIP", - "link": 113 + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 187 } ], "outputs": [ + { + "name": "model", + "type": "MODEL", + "slot_index": 0, + "links": [ + 172 + ] + }, { "name": "positive", "type": "CONDITIONING", + "slot_index": 1, "links": [ - 116 + 173 ] }, { "name": "negative", "type": "CONDITIONING", + "slot_index": 2, "links": [ - 117 + 174 ] }, { - "name": "prompt_info", + "name": "latent", + "type": "LATENT", + "slot_index": 3, + "links": [ + 175 + ] + }, + { + "name": "inpaint_info", "type": "STRING", + "slot_index": 4, "links": null } ], "properties": { "aux_id": "Gin3601/LLS-node", - "ver": "3e97537f543c74db0e91a840d698105c5f269931", - "Node name for S&R": "LLSSimplePromptEncode" + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSNativeInpaintConditioning" }, "widgets_values": [ - "在地毯上面趴着一只棕白色小狗", - "", - -1, - "Auto" + "auto", + 1, + true, + "" ] }, { - "id": 72, + "id": 100, "type": "LoadImage", "pos": [ - 436.3254192042775, - 1795.836696533043 + 2233.2844869832297, + -718.2666335104449 ], "size": [ - 270, - 314.0000000000002 + 340, + 520 ], "flags": {}, "order": 6, - "mode": 0, + "mode": 4, "inputs": [], "outputs": [ { + "label": "IMAGE", "name": "IMAGE", "type": "IMAGE", + "slot_index": 0, "links": [ - 110 + 185 ] }, { + "label": "MASK", "name": "MASK", "type": "MASK", + "slot_index": 1, "links": [ - 109, - 111 + 186 ] } ], @@ -1426,32 +1637,1055 @@ "cnr_id": "comfy-core", "ver": "0.21.0", "Node name for S&R": "LoadImage", - "image": "clipspace/clipspace-painted-masked-1779412561163.png [input]" + "image": "clipspace/clipspace-painted-masked-1779440890663.png [input]" }, "widgets_values": [ - "clipspace/clipspace-painted-masked-1779412561163.png [input]", + "clipspace/clipspace-painted-masked-1779440890663.png [input]", "image" ] }, { - "id": 73, + "id": 101, + "type": "LLSUniversalPromptEncode", + "pos": [ + 2602.047016798851, + -392.4342301390179 + ], + "size": [ + 360, + 230 + ], + "flags": {}, + "order": 30, + "mode": 4, + "inputs": [ + { + "label": "text_encoder", + "name": "text_encoder", + "type": "CLIP", + "link": 170 + }, + { + "label": "model_info", + "name": "model_info", + "shape": 7, + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 171 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 182 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 183 + ] + }, + { + "name": "prompt_info", + "type": "STRING", + "slot_index": 2, + "links": [ + 178 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSUniversalPromptEncode" + }, + "widgets_values": [ + "Delete object", + "", + -1, + "" + ] + }, + { + "id": 104, + "type": "LLSUniversalModelLoader", + "pos": [ + 2584.540226717693, + -728.0477437181929 + ], + "size": [ + 360, + 286 + ], + "flags": {}, + "order": 7, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "slot_index": 0, + "links": [ + 181 + ] + }, + { + "name": "text_encoder", + "type": "CLIP", + "slot_index": 1, + "links": [ + 170 + ] + }, + { + "name": "vae", + "type": "VAE", + "slot_index": 2, + "links": [ + 184, + 189 + ] + }, + { + "name": "model_info", + "type": "STRING", + "slot_index": 3, + "links": [ + 171, + 176, + 187 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSUniversalModelLoader" + }, + "widgets_values": [ + "diffusion_models/flux1-dev-fp8.safetensors", + "Auto", + "simple", + "auto", + "auto", + "(auto)", + "(auto)", + "(auto)" + ] + }, + { + "id": 119, + "type": "LLSSimpleImageComposite", + "pos": [ + 2521.558814278452, + 55.555063701255484 + ], + "size": [ + 293.1587890625, + 270 + ], + "flags": {}, + "order": 34, + "mode": 4, + "inputs": [ + { + "name": "background_image", + "type": "IMAGE", + "link": 202 + }, + { + "name": "overlay_image", + "type": "IMAGE", + "link": 203 + } + ], + "outputs": [ + { + "name": "output_image", + "type": "IMAGE", + "links": [ + 204 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "fd5a2b9de2bd67ca913139e16992300b4681acfe", + "Node name for S&R": "LLSSimpleImageComposite" + }, + "widgets_values": [ + 0, + 0, + "top_left", + "center", + 1, + "normal", + 2, + 30, + true + ] + }, + { + "id": 118, + "type": "LLSSaveImage", + "pos": [ + 2839.4222975619614, + 51.68227455109402 + ], + "size": [ + 270, + 438.0000000000001 + ], + "flags": {}, + "order": 51, + "mode": 4, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 204 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + }, + { + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "23dd271e39c4a99e3e9c01eabfb8ca5f181ca92e", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS", + "save", + true + ] + }, + { + "id": 129, + "type": "LLSMaskProcess", + "pos": [ + 2511.2276633385627, + 768.6921067481256 + ], + "size": [ + 270, + 126 + ], + "flags": {}, + "order": 31, + "mode": 4, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 207 + }, + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "mask", + "type": "MASK", + "links": [ + 209 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "b2c98aa65c139defd0d9782bf5626fc1ad90bcbc", + "Node name for S&R": "LLSMaskProcess" + }, + "widgets_values": [ + "blur", + 0.5, + 8 + ] + }, + { + "id": 122, + "type": "LLSSimpleMaskCreate", + "pos": [ + 2222.24189237028, + 769.8421022777408 + ], + "size": [ + 270, + 386 + ], + "flags": {}, + "order": 8, + "mode": 4, + "inputs": [ + { + "name": "input_mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "mask_image", + "type": "IMAGE", + "links": [] + }, + { + "name": "mask", + "type": "MASK", + "links": [ + 207 + ] + }, + { + "name": "area_info", + "type": "LLS_MASK_INFO", + "links": null + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "fd5a2b9de2bd67ca913139e16992300b4681acfe", + "Node name for S&R": "LLSSimpleMaskCreate" + }, + "widgets_values": [ + 1024, + 1024, + "rectangle", + "percent", + 0.5, + 0.5, + 0.3, + 0.3, + 0.15, + 0, + 0, + false, + "replace" + ] + }, + { + "id": 131, + "type": "LLSSaveImage", + "pos": [ + 2823.1651317031988, + 729.7464701931868 + ], + "size": [ + 270, + 438.0000000000001 + ], + "flags": {}, + "order": 48, + "mode": 4, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 209 + }, + { + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "23dd271e39c4a99e3e9c01eabfb8ca5f181ca92e", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS", + "save", + true + ] + }, + { + "id": 143, + "type": "PreviewImage", + "pos": [ + 3187.361529770358, + 1897.0390742851262 + ], + "size": [ + 140, + 246 + ], + "flags": {}, + "order": 50, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 220 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 141, + "type": "LLSSaveImage", + "pos": [ + 3198.716038395371, + 1378.4588463141515 + ], + "size": [ + 270, + 438.0000000000001 + ], + "flags": {}, + "order": 49, + "mode": 4, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 218 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + }, + { + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "23dd271e39c4a99e3e9c01eabfb8ca5f181ca92e", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS", + "save", + false + ] + }, + { + "id": 138, + "type": "SAM2ModelLoader (segment anything2)", + "pos": [ + 2230.998364108415, + 1312.508162606385 + ], + "size": [ + 368.3541015625, + 58 + ], + "flags": {}, + "order": 9, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "SAM2_MODEL", + "type": "SAM2_MODEL", + "links": [ + 215 + ] + } + ], + "properties": { + "cnr_id": "comfyui-sam2", + "ver": "e75eabcc12efd4aa9b5c6f72274d759973d36d4d", + "Node name for S&R": "SAM2ModelLoader (segment anything2)" + }, + "widgets_values": [ + "sam2_hiera_tiny" + ] + }, + { + "id": 139, + "type": "GroundingDinoModelLoader (segment anything2)", + "pos": [ + 2209.859944649806, + 1427.8761114915812 + ], + "size": [ + 427.9361328125, + 58 + ], + "flags": {}, + "order": 10, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "GROUNDING_DINO_MODEL", + "type": "GROUNDING_DINO_MODEL", + "links": [ + 216 + ] + } + ], + "properties": { + "cnr_id": "comfyui-sam2", + "ver": "e75eabcc12efd4aa9b5c6f72274d759973d36d4d", + "Node name for S&R": "GroundingDinoModelLoader (segment anything2)" + }, + "widgets_values": [ + "GroundingDINO_SwinB (938MB)" + ] + }, + { + "id": 140, + "type": "LoadImage", + "pos": [ + 2246.5264591377363, + 1540.359949673408 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 11, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 217, + 219 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ChatGPT Image 2026年5月21日 15_37_32.png", + "image" + ] + }, + { + "id": 103, + "type": "LLSSaveImage", + "pos": [ + 3789.6190884274342, + -724.5560137536298 + ], + "size": [ + 320, + 418.0000000000001 + ], + "flags": {}, + "order": 76, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 177 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + }, + { + "label": "prompt_info", + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": 178 + }, + { + "label": "latent_info", + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "label": "sample_info", + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": 179 + }, + { + "label": "decode_info", + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": 180 + }, + { + "label": "upscale_info", + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS-Inpaint", + "preview_only", + true + ] + }, + { + "id": 120, + "type": "LoadImage", + "pos": [ + 2220.383128083975, + 48.255625520504324 + ], + "size": [ + 270, + 314.00000000000006 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 202 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ChatGPT Image 2026年5月21日 15_37_32.png", + "image" + ] + }, + { + "id": 121, + "type": "LoadImage", + "pos": [ + 2215.860963593743, + 402.0811344573192 + ], + "size": [ + 270, + 314.0000000000001 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 203 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ChatGPT Image 2026年5月25日 11_13_29.png", + "image" + ] + }, + { + "id": 133, + "type": "LLSSimpleMaskCreate", + "pos": [ + 3123.9923353751624, + 61.31407531269412 + ], + "size": [ + 270, + 386 + ], + "flags": {}, + "order": 14, + "mode": 4, + "inputs": [ + { + "name": "input_mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "mask_image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": [ + 214, + 252 + ] + }, + { + "name": "area_info", + "type": "LLS_MASK_INFO", + "links": null + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "b2c98aa65c139defd0d9782bf5626fc1ad90bcbc", + "Node name for S&R": "LLSSimpleMaskCreate" + }, + "widgets_values": [ + 1024, + 1024, + "rectangle", + "percent", + 0.5, + 0.5, + 0.3, + 0.3, + 0.15, + 0, + 0, + false, + "replace" + ] + }, + { + "id": 134, + "type": "LLSSimpleMaskCreate", + "pos": [ + 3127.136096111542, + 520.6281219787958 + ], + "size": [ + 270, + 386 + ], + "flags": {}, + "order": 15, + "mode": 4, + "inputs": [ + { + "name": "input_mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "mask_image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": [ + 213, + 251 + ] + }, + { + "name": "area_info", + "type": "LLS_MASK_INFO", + "links": null + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "b2c98aa65c139defd0d9782bf5626fc1ad90bcbc", + "Node name for S&R": "LLSSimpleMaskCreate" + }, + "widgets_values": [ + 2044, + 2048, + "rectangle", + "percent", + 0.5, + 0.5, + 0.3, + 0.3, + 0.15, + 0, + 0, + false, + "replace" + ] + }, + { + "id": 136, + "type": "LLSSaveImage", + "pos": [ + 3766.3787103180193, + 66.67021595958683 + ], + "size": [ + 270, + 438.0000000000001 + ], + "flags": {}, + "order": 52, + "mode": 4, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 212 + }, + { + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "23dd271e39c4a99e3e9c01eabfb8ca5f181ca92e", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS", + "save", + false + ] + }, + { + "id": 152, + "type": "PreviewImage", + "pos": [ + 3794.1470787794174, + 556.5116592827329 + ], + "size": [ + 140, + 246 + ], + "flags": {}, + "order": 53, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 245 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 154, "type": "MaskToImage", "pos": [ - 462.9061526450311, - 2196.6889046178353 + 3795.310199491296, + 855.8452035213437 ], "size": [ 140, 26 ], "flags": {}, - "order": 15, + "order": 54, "mode": 0, "inputs": [ { "name": "mask", "type": "MASK", - "link": 109 + "link": 249 } ], "outputs": [ @@ -1459,7 +2693,7 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 108 + 250 ] } ], @@ -1471,24 +2705,24 @@ "widgets_values": [] }, { - "id": 74, + "id": 155, "type": "PreviewImage", "pos": [ - 471.1423392552832, - 2269.6994615889325 + 3795.7052492797984, + 942.4160692630528 ], "size": [ 140, 246 ], "flags": {}, - "order": 22, - "mode": 0, + "order": 64, + "mode": 4, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 108 + "link": 250 } ], "outputs": [], @@ -1500,121 +2734,109 @@ "widgets_values": [] }, { - "id": 68, - "type": "LLSProKSamplerBridge", + "id": 153, + "type": "LLSConcatByTarget", "pos": [ - 1573.8219895256148, - 1775.28328620625 + 3433.366883457877, + 514.9160091380451 ], "size": [ - 270, - 426 + 294.1015625, + 358 ], "flags": {}, - "order": 26, - "mode": 0, + "order": 36, + "mode": 4, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 126 + "name": "a", + "shape": 7, + "type": "*", + "link": 252 }, { - "name": "positive", - "type": "CONDITIONING", - "link": 106 + "name": "b", + "shape": 7, + "type": "*", + "link": 251 }, { - "name": "negative", - "type": "CONDITIONING", - "link": 107 + "name": "image/mask_A", + "shape": 7, + "type": "IMAGE,MASK", + "link": null }, { - "name": "latent_image", - "type": "LATENT", - "link": 105 + "name": "image/mask_B", + "shape": 7, + "type": "IMAGE,MASK", + "link": null } ], "outputs": [ { - "name": "latent", - "type": "LATENT", + "name": "image", + "type": "IMAGE", "links": [ - 121 + 245 ] + }, + { + "name": "mask", + "type": "MASK", + "links": [ + 249 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null } ], "properties": { "aux_id": "Gin3601/LLS-node", - "ver": "0be470bcb6513b12c60deac974e3232cbf85aaa8", - "Node name for S&R": "LLSProKSamplerBridge" + "ver": "58a1564e4e1f03d4619f6779d5eca40eaaaebe2a", + "Node name for S&R": "LLSConcatByTarget" }, "widgets_values": [ - "enable", - 54136361244841, - "randomize", - 20, - 1, - "euler", - "simple", + "IMAGE", + "A", + "right", + true, + "keep_proportion", + "center", 0, - 10000, - "disable" + "#000000", + 0, + 0, + true ] }, { - "id": 78, - "type": "PreviewImage", + "id": 161, + "type": "MaskToImage", "pos": [ - 1575.9785110466012, - 2258.741591037431 + 4562.013877575942, + 2.4950151891255232 ], "size": [ 140, - 246 + 26 ], "flags": {}, - "order": 33, - "mode": 0, + "order": 57, + "mode": 4, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 127 - } - ], - "outputs": [], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.21.0", - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 76, - "type": "VAEDecode", - "pos": [ - 1770.7916093325227, - 2229.7307412470172 - ], - "size": [ - 140, - 46 - ], - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 121 - }, - { - "name": "vae", - "type": "VAE", - "link": 122 + "name": "mask", + "type": "MASK", + "link": 261 } ], "outputs": [ @@ -1622,37 +2844,372 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 123, - 127 + 260 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.21.0", - "Node name for S&R": "VAEDecode" + "Node name for S&R": "MaskToImage" }, "widgets_values": [] }, { - "id": 77, + "id": 144, + "type": "LLSSaveImage", + "pos": [ + 6209.039012429926, + -710.6857195134594 + ], + "size": [ + 320, + 438 + ], + "flags": {}, + "order": 81, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 221 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + }, + { + "label": "prompt_info", + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": 222 + }, + { + "label": "latent_info", + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": 263 + }, + { + "label": "sample_info", + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": 223 + }, + { + "label": "decode_info", + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": 224 + }, + { + "label": "upscale_info", + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS-Inpaint", + "preview_only", + false + ] + }, + { + "id": 166, + "type": "StyleModelApply", + "pos": [ + 5366.961340220059, + -332.2696331874335 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 56, + "mode": 4, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 269 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 274 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 273 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 270 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "multiply" + ] + }, + { + "id": 164, + "type": "CLIPVisionLoader", + "pos": [ + 4744.900988083825, + -123.78309577789953 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 16, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "links": [ + 265 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "CLIPVisionLoader" + }, + "widgets_values": [ + "sigclip_vision_patch14_384.safetensors" + ] + }, + { + "id": 167, + "type": "StyleModelLoader", + "pos": [ + 4739.467672132322, + -22.379441427432475 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 17, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "links": [ + 274 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "StyleModelLoader" + }, + "widgets_values": [ + "flux1-redux-dev.safetensors" + ] + }, + { + "id": 163, + "type": "CLIPVisionEncode", + "pos": [ + 5048.355841494235, + -135.08527956353785 + ], + "size": [ + 270, + 78 + ], + "flags": {}, + "order": 39, + "mode": 4, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 265 + }, + { + "name": "image", + "type": "IMAGE", + "link": 264 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 273 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 137, + "type": "GroundingDinoSAM2Segment (segment anything2)", + "pos": [ + 2675.26851917686, + 1411.532260053672 + ], + "size": [ + 439.290625, + 146 + ], + "flags": {}, + "order": 32, + "mode": 4, + "inputs": [ + { + "name": "sam_model", + "type": "SAM2_MODEL", + "link": 215 + }, + { + "name": "grounding_dino_model", + "type": "GROUNDING_DINO_MODEL", + "link": 216 + }, + { + "name": "image", + "type": "IMAGE", + "link": 217 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 218 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui-sam2", + "ver": "e75eabcc12efd4aa9b5c6f72274d759973d36d4d", + "Node name for S&R": "GroundingDinoSAM2Segment (segment anything2)" + }, + "widgets_values": [ + "table", + 0.3, + false + ] + }, + { + "id": 132, + "type": "LLSMaskCombine", + "pos": [ + 3468.3252919140027, + 76.12255484189926 + ], + "size": [ + 270, + 78 + ], + "flags": {}, + "order": 35, + "mode": 4, + "inputs": [ + { + "name": "mask_a", + "type": "MASK", + "link": 213 + }, + { + "name": "mask_b", + "type": "MASK", + "link": 214 + } + ], + "outputs": [ + { + "name": "mask", + "type": "MASK", + "links": [ + 212 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "b2c98aa65c139defd0d9782bf5626fc1ad90bcbc", + "Node name for S&R": "LLSMaskCombine" + }, + "widgets_values": [ + "max" + ] + }, + { + "id": 159, "type": "PreviewImage", "pos": [ - 1956.0387799316306, - 2261.944203766211 + 4555.1636338970475, + -301.61603995079247 ], "size": [ 140, 246 ], "flags": {}, - "order": 35, - "mode": 0, + "order": 55, + "mode": 4, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 124 + "link": 256 } ], "outputs": [], @@ -1664,255 +3221,1558 @@ "widgets_values": [] }, { - "id": 69, - "type": "LLSProImageEditFinish", + "id": 162, + "type": "PreviewImage", "pos": [ - 1881.622685822949, - 1810.165053545536 + 4592.814517502649, + 79.43612410449856 ], "size": [ - 298.25, - 286 + 140, + 246 ], "flags": {}, - "order": 32, - "mode": 0, + "order": 66, + "mode": 4, "inputs": [ { - "name": "original_image", + "name": "images", "type": "IMAGE", - "link": 120 - }, + "link": 260 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 156, + "type": "LLSConcatByTarget", + "pos": [ + 4541.7984432935755, + -707.8337258936274 + ], + "size": [ + 294.1015625, + 358 + ], + "flags": {}, + "order": 38, + "mode": 4, + "inputs": [ { - "name": "generated_image", - "type": "IMAGE", - "link": 123 - }, - { - "name": "edit_info", - "type": "LLS_EDIT_INFO", - "link": 119 - }, - { - "name": "work_mask", + "name": "a", "shape": 7, - "type": "MASK", - "link": 128 + "type": "*", + "link": 254 + }, + { + "name": "b", + "shape": 7, + "type": "*", + "link": 255 + }, + { + "name": "image/mask_A", + "shape": 7, + "type": "IMAGE,MASK", + "link": null + }, + { + "name": "image/mask_B", + "shape": 7, + "type": "IMAGE,MASK", + "link": null } ], "outputs": [ { - "name": "final_image", + "name": "image", "type": "IMAGE", "links": [ - 124 + 253, + 256 ] }, { - "name": "preview_image", - "type": "IMAGE", + "name": "mask", + "type": "MASK", + "links": [] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", "links": null } ], "properties": { "aux_id": "Gin3601/LLS-node", - "ver": "0be470bcb6513b12c60deac974e3232cbf85aaa8", - "Node name for S&R": "LLSProImageEditFinish" + "ver": "58a1564e4e1f03d4619f6779d5eca40eaaaebe2a", + "Node name for S&R": "LLSConcatByTarget" }, "widgets_values": [ - 8, - "disabled", - "enabled", - 1, + "IMAGE", + "A", + "left", true, - "soft", - "final", - "" + "keep_proportion", + "center", + 0, + "#000000", + 0, + 0, + true ] }, { - "id": 67, - "type": "LLSProImageEditPrepare", + "id": 157, + "type": "LoadImage", "pos": [ - 1245.6407807217158, - 1789.7759397701054 + 4234.405928961169, + -714.0246962979284 ], "size": [ - 286.025390625, - 586 + 270, + 314 ], "flags": {}, - "order": 23, - "mode": 0, + "order": 18, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 254 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 257 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage", + "image": "clipspace/clipspace-painted-masked-1779764167625.png [input]" + }, + "widgets_values": [ + "clipspace/clipspace-painted-masked-1779764167625.png [input]", + "image" + ] + }, + { + "id": 160, + "type": "LLSConcatByTarget", + "pos": [ + 4229.019063986448, + 7.352175424164066 + ], + "size": [ + 294.1015625, + 358 + ], + "flags": {}, + "order": 40, + "mode": 4, "inputs": [ + { + "name": "a", + "shape": 7, + "type": "*", + "link": 257 + }, + { + "name": "b", + "shape": 7, + "type": "*", + "link": 258 + }, + { + "name": "image/mask_A", + "shape": 7, + "type": "IMAGE,MASK", + "link": null + }, + { + "name": "image/mask_B", + "shape": 7, + "type": "IMAGE,MASK", + "link": null + } + ], + "outputs": [ { "name": "image", "type": "IMAGE", - "link": 110 + "links": [] }, { "name": "mask", "type": "MASK", - "link": 111 + "links": [ + 261, + 282 + ] }, { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "58a1564e4e1f03d4619f6779d5eca40eaaaebe2a", + "Node name for S&R": "LLSConcatByTarget" + }, + "widgets_values": [ + "IMAGE", + "A", + "left", + true, + "keep_proportion", + "center", + 0, + "#000000", + 0, + 0, + true + ] + }, + { + "id": 147, + "type": "LLSNativeInpaintConditioning", + "pos": [ + 5339.996177708129, + -704.7295433218912 + ], + "size": [ + 400, + 230 + ], + "flags": {}, + "order": 65, + "mode": 4, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 232 + }, + { + "label": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 270 + }, + { + "label": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 272 + }, + { + "label": "vae", "name": "vae", "type": "VAE", - "link": 115 + "link": 235 + }, + { + "label": "image", + "name": "image", + "type": "IMAGE", + "link": 253 + }, + { + "label": "mask", + "name": "mask", + "type": "MASK", + "link": 282 + }, + { + "label": "model_info", + "name": "model_info", + "shape": 7, + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 236 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "slot_index": 0, + "links": [ + 225 + ] }, { "name": "positive", "type": "CONDITIONING", - "link": 116 + "slot_index": 1, + "links": [ + 226 + ] }, { "name": "negative", "type": "CONDITIONING", - "link": 117 + "slot_index": 2, + "links": [ + 227 + ] }, { + "name": "latent", + "type": "LATENT", + "slot_index": 3, + "links": [ + 228 + ] + }, + { + "name": "inpaint_info", + "type": "STRING", + "slot_index": 4, + "links": [ + 263 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSNativeInpaintConditioning" + }, + "widgets_values": [ + "auto", + 1, + true, + "" + ] + }, + { + "id": 145, + "type": "LLSSimpleKSampler", + "pos": [ + 5773.0338863874285, + -710.8540510431906 + ], + "size": [ + 380, + 446 + ], + "flags": {}, + "order": 72, + "mode": 4, + "inputs": [ + { + "label": "model", "name": "model", - "shape": 7, "type": "MODEL", - "link": 112 + "link": 225 + }, + { + "label": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 226 + }, + { + "label": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 227 + }, + { + "label": "latent_image", + "name": "latent_image", + "type": "LATENT", + "link": 228 + }, + { + "label": "repair_info", + "name": "repair_info", + "shape": 7, + "type": "LLS_REPAIR_INFO", + "link": null + }, + { + "label": "guidance_stack", + "name": "guidance_stack", + "shape": 7, + "type": "LLS_GUIDANCE_STACK", + "link": null + }, + { + "label": "model_info", + "name": "model_info", + "shape": 7, + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 229 } ], "outputs": [ { "name": "latent", "type": "LATENT", + "slot_index": 0, "links": [ - 105 + 230 ] }, { - "name": "work_image", - "type": "IMAGE", + "name": "sample_info", + "type": "STRING", + "slot_index": 1, "links": [ - 120 - ] - }, - { - "name": "work_mask", - "type": "MASK", - "links": [ - 128 - ] - }, - { - "name": "edit_info", - "type": "LLS_EDIT_INFO", - "links": [ - 119 - ] - }, - { - "name": "recommended_denoise", - "type": "FLOAT", - "links": null - }, - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 106 - ] - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 107 + 223 ] } ], "properties": { "aux_id": "Gin3601/LLS-node", - "ver": "0be470bcb6513b12c60deac974e3232cbf85aaa8", - "Node name for S&R": "LLSProImageEditPrepare" + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleKSampler" }, "widgets_values": [ + "Family Default", + 1091867505123090, + "randomize", + 20, + 7, + "euler", + "normal", + 1, + "manual", "auto", - "crop", - 24, - 8, - 0.5, - false, - 64, - 1.5, - 256, - 1024, - "fit", - 0, - 0, - 0, - 0, - "edge", - "enabled", + 3.5, + "Auto", "" ] }, { - "id": 70, - "type": "LLSSimpleCheckpointLoader", + "id": 148, + "type": "LLSUniversalPromptEncode", "pos": [ - 737.7465024947212, - 1794.7933889839026 + 4949.496564283175, + -399.3409713054495 ], "size": [ - 303.159765625, + 360, + 230 + ], + "flags": {}, + "order": 37, + "mode": 4, + "inputs": [ + { + "label": "text_encoder", + "name": "text_encoder", + "type": "CLIP", + "link": 237 + }, + { + "label": "model_info", + "name": "model_info", + "shape": 7, + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 238 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 269 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 272 + ] + }, + { + "name": "prompt_info", + "type": "STRING", + "slot_index": 2, + "links": [ + 222 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSUniversalPromptEncode" + }, + "widgets_values": [ + "Replace the items in image 1 with those in image 2\n", + "", + -1, + "" + ] + }, + { + "id": 149, + "type": "LLSUniversalModelLoader", + "pos": [ + 4931.028257269626, + -731.13068894628 + ], + "size": [ + 360, 286 ], "flags": {}, - "order": 7, + "order": 19, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "slot_index": 0, + "links": [ + 232 + ] + }, + { + "name": "text_encoder", + "type": "CLIP", + "slot_index": 1, + "links": [ + 237 + ] + }, + { + "name": "vae", + "type": "VAE", + "slot_index": 2, + "links": [ + 231, + 235 + ] + }, + { + "name": "model_info", + "type": "STRING", + "slot_index": 3, + "links": [ + 229, + 236, + 238 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSUniversalModelLoader" + }, + "widgets_values": [ + "diffusion_models/flux1-fill-dev-OneReward-fp16.safetensors", + "Auto", + "simple", + "auto", + "auto", + "clip_l.safetensors", + "t5xxl_fp8_e4m3fn.safetensors", + "ae.safetensors" + ] + }, + { + "id": 158, + "type": "LoadImage", + "pos": [ + 4236.279777633837, + -352.8205936116678 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 20, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 255, + 264 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 258 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ChatGPT Image 2026年5月25日 18_14_30.png", + "image" + ] + }, + { + "id": 146, + "type": "LLSSimpleVAEDecode", + "pos": [ + 5768.142772295377, + -222.81595090950506 + ], + "size": [ + 270, + 80 + ], + "flags": {}, + "order": 77, + "mode": 4, + "inputs": [ + { + "label": "samples", + "name": "samples", + "type": "LATENT", + "link": 230 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 231 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 221 + ] + }, + { + "name": "decode_info", + "type": "STRING", + "slot_index": 1, + "links": [ + 224 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 174, + "type": "LLSSimpleKSampler", + "pos": [ + 5157.4048541346565, + 554.5402137806709 + ], + "size": [ + 380, + 446 + ], + "flags": {}, + "order": 78, + "mode": 4, + "inputs": [ + { + "label": "model", + "name": "model", + "type": "MODEL", + "link": 288 + }, + { + "label": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": null + }, + { + "label": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 292 + }, + { + "label": "latent_image", + "name": "latent_image", + "type": "LATENT", + "link": 310 + }, + { + "label": "repair_info", + "name": "repair_info", + "shape": 7, + "type": "LLS_REPAIR_INFO", + "link": null + }, + { + "label": "guidance_stack", + "name": "guidance_stack", + "shape": 7, + "type": "LLS_GUIDANCE_STACK", + "link": null + }, + { + "label": "model_info", + "name": "model_info", + "shape": 7, + "type": "STRING", + "widget": { + "name": "model_info" + }, + "link": 284 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [ + 294 + ] + }, + { + "name": "sample_info", + "type": "STRING", + "slot_index": 1, + "links": [ + 285 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleKSampler" + }, + "widgets_values": [ + "Family Default", + 742686255920821, + "randomize", + 20, + 7, + "euler", + "normal", + 1, + "manual", + "auto", + 3.5, + "Auto", + "" + ] + }, + { + "id": 178, + "type": "LLSSimpleVAEDecode", + "pos": [ + 5557.887734766221, + 534.1902508849549 + ], + "size": [ + 270, + 80 + ], + "flags": {}, + "order": 82, + "mode": 4, + "inputs": [ + { + "label": "samples", + "name": "samples", + "type": "LATENT", + "link": 294 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 295 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 296 + ] + }, + { + "name": "decode_info", + "type": "STRING", + "slot_index": 1, + "links": [ + 297 + ] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 181, + "type": "PreviewImage", + "pos": [ + 5774.149022762449, + 1026.92567909516 + ], + "size": [ + 140, + 246 + ], + "flags": {}, + "order": 85, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 304 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 180, + "type": "LLSSimpleVAEDecode", + "pos": [ + 5471.8508018423645, + 1020.816175721923 + ], + "size": [ + 270, + 80 + ], + "flags": {}, + "order": 83, + "mode": 0, + "inputs": [ + { + "label": "samples", + "name": "samples", + "type": "LATENT", + "link": 302 + }, + { + "label": "vae", + "name": "vae", + "type": "VAE", + "link": 303 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 304 + ] + }, + { + "name": "decode_info", + "type": "STRING", + "slot_index": 1, + "links": [] + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSimpleVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 175, + "type": "LLSSaveImage", + "pos": [ + 5912.579571603798, + 539.9845467632551 + ], + "size": [ + 320, + 438 + ], + "flags": {}, + "order": 84, + "mode": 4, + "inputs": [ + { + "label": "image", + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 296 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + }, + { + "label": "prompt_info", + "name": "prompt_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "label": "latent_info", + "name": "latent_info", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "label": "sample_info", + "name": "sample_info", + "shape": 7, + "type": "STRING", + "link": 285 + }, + { + "label": "decode_info", + "name": "decode_info", + "shape": 7, + "type": "STRING", + "link": 297 + }, + { + "label": "upscale_info", + "name": "upscale_info", + "shape": 7, + "type": "STRING", + "link": null + } + ], + "outputs": [], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSSaveImage" + }, + "widgets_values": [ + "LLS-Inpaint", + "preview_only", + false + ] + }, + { + "id": 179, + "type": "KSampler", + "pos": [ + 5159.761835603198, + 1051.9595468425046 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 79, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 298 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 311 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 299 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 309 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 302 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 550102199187131, + "randomize", + 20, + 8, + "euler", + "simple", + 1 + ] + }, + { + "id": 176, + "type": "ConditioningZeroOut", + "pos": [ + 5015.726509142697, + 505.82173790736243 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 73, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 308 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 292, + 299 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "ConditioningZeroOut" + }, + "widgets_values": [] + }, + { + "id": 142, + "type": "RMBG", + "pos": [ + 2697.994702282822, + 1647.075214373454 + ], + "size": [ + 340, + 292 + ], + "flags": {}, + "order": 33, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 219 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 220 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + }, + { + "name": "MASK_IMAGE", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui-rmbg", + "ver": "d7402513f23f58db7d56754b02a4f51a148b4941", + "Node name for S&R": "RMBG" + }, + "widgets_values": [ + "RMBG-2.0", + 1, + 1024, + 0, + 0, + false, + false, + "Alpha", + "#222222" + ], + "color": "#222e40", + "bgcolor": "#364254" + }, + { + "id": 177, + "type": "LoadImage", + "pos": [ + 4187.922385922022, + 930.1311465847385 + ], + "size": [ + 270, + 314.0000000000001 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 307, + 312 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ChatGPT Image 2026年5月25日 18_14_30.png", + "image" + ] + }, + { + "id": 184, + "type": "MaskToImage", + "pos": [ + 4839.104503425531, + 1041.0210556938866 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 313 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 314 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 173, + "type": "LLSUniversalModelLoader", + "pos": [ + 4310.346821978522, + 574.6834073052217 + ], + "size": [ + 360, + 286 + ], + "flags": {}, + "order": 22, "mode": 0, "inputs": [], "outputs": [ { "name": "model", "type": "MODEL", + "slot_index": 0, "links": [ - 112, - 126 - ] - }, - { - "name": "clip", - "type": "CLIP", - "links": [ - 113 - ] - }, - { - "name": "vae", - "type": "VAE", - "links": [ - 115, - 122 + 288, + 298 ] }, { "name": "text_encoder", "type": "CLIP", + "slot_index": 1, "links": [ - 114 + 305 + ] + }, + { + "name": "vae", + "type": "VAE", + "slot_index": 2, + "links": [ + 295, + 303, + 306 + ] + }, + { + "name": "model_info", + "type": "STRING", + "slot_index": 3, + "links": [ + 284 ] } ], "properties": { "aux_id": "Gin3601/LLS-node", - "ver": "3e97537f543c74db0e91a840d698105c5f269931", - "Node name for S&R": "LLSSimpleCheckpointLoader" + "ver": "d7aae497c2f23e3a5fa1b2739490454abd4a25db", + "Node name for S&R": "LLSUniversalModelLoader" }, "widgets_values": [ - "flux1-schnell-fp8.safetensors", + "diffusion_models/flux1-dev-fp8.safetensors", "Auto", "simple", "auto", "auto", - "(auto)", - "(auto)", - "(auto)" + "clip_l.safetensors", + "t5xxl_fp8_e4m3fn.safetensors", + "ae.safetensors" + ] + }, + { + "id": 186, + "type": "PreviewImage", + "pos": [ + 4993.171719673187, + 961.5826658505536 + ], + "size": [ + 140, + 246 + ], + "flags": {}, + "order": 58, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 315 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 185, + "type": "PreviewImage", + "pos": [ + 4819.602534431488, + 1109.2114279905816 + ], + "size": [ + 140, + 246 + ], + "flags": {}, + "order": 67, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 314 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 183, + "type": "RMBG", + "pos": [ + 4473.832686322145, + 941.6147801709899 + ], + "size": [ + 340, + 292 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 312 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 315 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 313, + 316 + ] + }, + { + "name": "MASK_IMAGE", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui-rmbg", + "ver": "d7402513f23f58db7d56754b02a4f51a148b4941", + "Node name for S&R": "RMBG" + }, + "widgets_values": [ + "RMBG-2.0", + 1, + 1024, + 0, + 0, + false, + false, + "Alpha", + "#222222" + ], + "color": "#222e40", + "bgcolor": "#364254" + }, + { + "id": 187, + "type": "InvertMask", + "pos": [ + 4686.183361307727, + 881.507749135441 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 60, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 316 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 317 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.21.0", + "Node name for S&R": "InvertMask" + } + }, + { + "id": 182, + "type": "LLSFlux2KleinEditTextEncode", + "pos": [ + 4705.384059505954, + 576.9978984300901 + ], + "size": [ + 400, + 260 + ], + "flags": {}, + "order": 68, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 305 + }, + { + "name": "vae", + "type": "VAE", + "link": 306 + }, + { + "name": "image1", + "type": "IMAGE", + "link": 307 + }, + { + "name": "image2", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "image3", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 317 + } + ], + "outputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "links": [ + 308, + 311 + ] + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 309, + 310 + ] + }, + { + "name": "custom_output", + "type": "LLS_FLUX2KLEIN_OUTPUT", + "links": null + }, + { + "name": "main_image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": null + } + ], + "properties": { + "aux_id": "Gin3601/LLS-node", + "ver": "f6bf21e439db74bf21d96157e231dbc99b45fc88", + "Node name for S&R": "LLSFlux2KleinEditTextEncode" + }, + "widgets_values": [ + "Place the kettle on the simple golden wooden table.", + 1024, + "longest_edge", + "none" ] } ], @@ -2230,188 +5090,788 @@ "MASK" ], [ + 170, + 104, + 1, + 101, + 0, + "CLIP" + ], + [ + 171, + 104, + 3, + 101, + 1, + "STRING" + ], + [ + 172, 105, - 67, 0, - 68, - 3, - "LATENT" + 102, + 0, + "MODEL" ], [ - 106, - 67, - 5, - 68, + 173, + 105, + 1, + 102, 1, "CONDITIONING" ], [ - 107, - 67, + 174, + 105, + 2, + 102, + 2, + "CONDITIONING" + ], + [ + 175, + 105, + 3, + 102, + 3, + "LATENT" + ], + [ + 176, + 104, + 3, + 102, 6, - 68, + "STRING" + ], + [ + 177, + 106, + 0, + 103, + 0, + "IMAGE" + ], + [ + 178, + 101, 2, - "CONDITIONING" + 103, + 2, + "STRING" ], [ - 108, - 73, - 0, - 74, - 0, - "IMAGE" - ], - [ - 109, - 72, + 179, + 102, 1, - 73, - 0, - "MASK" + 103, + 4, + "STRING" ], [ - 110, - 72, - 0, - 67, - 0, - "IMAGE" - ], - [ - 111, - 72, + 180, + 106, 1, - 67, - 1, - "MASK" - ], - [ - 112, - 70, - 0, - 67, + 103, 5, + "STRING" + ], + [ + 181, + 104, + 0, + 105, + 0, "MODEL" ], [ - 113, - 70, - 1, - 75, - 1, - "CLIP" - ], - [ - 114, - 70, - 3, - 75, + 182, + 101, 0, - "CLIP" + 105, + 1, + "CONDITIONING" ], [ - 115, - 70, + 183, + 101, + 1, + 105, 2, - 67, + "CONDITIONING" + ], + [ + 184, + 104, 2, + 105, + 3, "VAE" ], [ - 116, - 75, + 185, + 100, 0, - 67, - 3, - "CONDITIONING" - ], - [ - 117, - 75, - 1, - 67, + 105, 4, - "CONDITIONING" - ], - [ - 119, - 67, - 3, - 69, - 2, - "LLS_EDIT_INFO" - ], - [ - 120, - 67, - 1, - 69, - 0, "IMAGE" ], [ - 121, - 68, + 186, + 100, + 1, + 105, + 5, + "MASK" + ], + [ + 187, + 104, + 3, + 105, + 6, + "STRING" + ], + [ + 188, + 102, 0, - 76, + 106, 0, "LATENT" ], [ - 122, - 70, + 189, + 104, 2, - 76, + 106, 1, "VAE" ], [ - 123, - 76, + 202, + 120, 0, - 69, + 119, + 0, + "IMAGE" + ], + [ + 203, + 121, + 0, + 119, 1, "IMAGE" ], [ - 124, - 69, + 204, + 119, 0, - 77, + 118, 0, "IMAGE" ], [ - 126, - 70, + 207, + 122, + 1, + 129, 0, - 68, - 0, - "MODEL" - ], - [ - 127, - 76, - 0, - 78, - 0, - "IMAGE" - ], - [ - 128, - 67, - 2, - 69, - 3, "MASK" ], [ + 209, 129, - 45, 0, - 52, - 3, + 131, + 1, + "MASK" + ], + [ + 212, + 132, + 0, + 136, + 1, + "MASK" + ], + [ + 213, + 134, + 1, + 132, + 0, + "MASK" + ], + [ + 214, + 133, + 1, + 132, + 1, + "MASK" + ], + [ + 215, + 138, + 0, + 137, + 0, + "SAM2_MODEL" + ], + [ + 216, + 139, + 0, + 137, + 1, + "GROUNDING_DINO_MODEL" + ], + [ + 217, + 140, + 0, + 137, + 2, + "IMAGE" + ], + [ + 218, + 137, + 0, + 141, + 0, + "IMAGE" + ], + [ + 219, + 140, + 0, + 142, + 0, + "IMAGE" + ], + [ + 220, + 142, + 0, + 143, + 0, + "IMAGE" + ], + [ + 221, + 146, + 0, + 144, + 0, + "IMAGE" + ], + [ + 222, + 148, + 2, + 144, + 2, + "STRING" + ], + [ + 223, + 145, + 1, + 144, + 4, + "STRING" + ], + [ + 224, + 146, + 1, + 144, + 5, + "STRING" + ], + [ + 225, + 147, + 0, + 145, + 0, "MODEL" + ], + [ + 226, + 147, + 1, + 145, + 1, + "CONDITIONING" + ], + [ + 227, + 147, + 2, + 145, + 2, + "CONDITIONING" + ], + [ + 228, + 147, + 3, + 145, + 3, + "LATENT" + ], + [ + 229, + 149, + 3, + 145, + 6, + "STRING" + ], + [ + 230, + 145, + 0, + 146, + 0, + "LATENT" + ], + [ + 231, + 149, + 2, + 146, + 1, + "VAE" + ], + [ + 232, + 149, + 0, + 147, + 0, + "MODEL" + ], + [ + 235, + 149, + 2, + 147, + 3, + "VAE" + ], + [ + 236, + 149, + 3, + 147, + 6, + "STRING" + ], + [ + 237, + 149, + 1, + 148, + 0, + "CLIP" + ], + [ + 238, + 149, + 3, + 148, + 1, + "STRING" + ], + [ + 245, + 153, + 0, + 152, + 0, + "IMAGE" + ], + [ + 249, + 153, + 1, + 154, + 0, + "MASK" + ], + [ + 250, + 154, + 0, + 155, + 0, + "IMAGE" + ], + [ + 251, + 134, + 1, + 153, + 1, + "MASK" + ], + [ + 252, + 133, + 1, + 153, + 0, + "MASK" + ], + [ + 253, + 156, + 0, + 147, + 4, + "IMAGE" + ], + [ + 254, + 157, + 0, + 156, + 0, + "IMAGE" + ], + [ + 255, + 158, + 0, + 156, + 1, + "IMAGE" + ], + [ + 256, + 156, + 0, + 159, + 0, + "IMAGE" + ], + [ + 257, + 157, + 1, + 160, + 0, + "MASK" + ], + [ + 258, + 158, + 1, + 160, + 1, + "MASK" + ], + [ + 260, + 161, + 0, + 162, + 0, + "IMAGE" + ], + [ + 261, + 160, + 1, + 161, + 0, + "MASK" + ], + [ + 263, + 147, + 4, + 144, + 3, + "STRING" + ], + [ + 264, + 158, + 0, + 163, + 1, + "IMAGE" + ], + [ + 265, + 164, + 0, + 163, + 0, + "CLIP_VISION" + ], + [ + 269, + 148, + 0, + 166, + 0, + "CONDITIONING" + ], + [ + 270, + 166, + 0, + 147, + 1, + "CONDITIONING" + ], + [ + 272, + 148, + 1, + 147, + 2, + "CONDITIONING" + ], + [ + 273, + 163, + 0, + 166, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 274, + 167, + 0, + 166, + 1, + "STYLE_MODEL" + ], + [ + 282, + 160, + 1, + 147, + 5, + "MASK" + ], + [ + 284, + 173, + 3, + 174, + 6, + "STRING" + ], + [ + 285, + 174, + 1, + 175, + 4, + "STRING" + ], + [ + 288, + 173, + 0, + 174, + 0, + "MODEL" + ], + [ + 292, + 176, + 0, + 174, + 2, + "CONDITIONING" + ], + [ + 294, + 174, + 0, + 178, + 0, + "LATENT" + ], + [ + 295, + 173, + 2, + 178, + 1, + "VAE" + ], + [ + 296, + 178, + 0, + 175, + 0, + "IMAGE" + ], + [ + 297, + 178, + 1, + 175, + 5, + "STRING" + ], + [ + 298, + 173, + 0, + 179, + 0, + "MODEL" + ], + [ + 299, + 176, + 0, + 179, + 2, + "CONDITIONING" + ], + [ + 302, + 179, + 0, + 180, + 0, + "LATENT" + ], + [ + 303, + 173, + 2, + 180, + 1, + "VAE" + ], + [ + 304, + 180, + 0, + 181, + 0, + "IMAGE" + ], + [ + 305, + 173, + 1, + 182, + 0, + "CLIP" + ], + [ + 306, + 173, + 2, + 182, + 1, + "VAE" + ], + [ + 307, + 177, + 0, + 182, + 2, + "IMAGE" + ], + [ + 308, + 182, + 0, + 176, + 0, + "CONDITIONING" + ], + [ + 309, + 182, + 1, + 179, + 3, + "LATENT" + ], + [ + 310, + 182, + 1, + 174, + 3, + "LATENT" + ], + [ + 311, + 182, + 0, + 179, + 1, + "CONDITIONING" + ], + [ + 312, + 177, + 0, + 183, + 0, + "IMAGE" + ], + [ + 313, + 183, + 1, + 184, + 0, + "MASK" + ], + [ + 314, + 184, + 0, + 185, + 0, + "IMAGE" + ], + [ + 315, + 183, + 0, + 186, + 0, + "IMAGE" + ], + [ + 316, + 183, + 1, + 187, + 0, + "MASK" + ], + [ + 317, + 187, + 0, + 182, + 5, + "MASK" ] ], "groups": [ @@ -2452,13 +5912,61 @@ "flags": {} }, { - "id": 4, + "id": 6, "title": "局部重绘", "bounding": [ - 412.93194220187274, - 1688.320027500608, - 1766.7951576945552, - 1034.620764346542 + 2192.646245555202, + -815.4586809167743, + 1967.6500954355906, + 763.7839457443217 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 7, + "title": "局部重绘", + "bounding": [ + 2192.776289315687, + -27.0175336755992, + 1961.7278095123943, + 1236.715824303684 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 8, + "title": "Group", + "bounding": [ + 2193.965246587895, + 1219.642146681117, + 1954.2697373498927, + 985.7810223756005 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 9, + "title": "万物迁移", + "bounding": [ + 4177.35119254152, + -814.7797467377438, + 2400.6869042127673, + 1202.4340429541958 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 10, + "title": "背景替换/电商详情图", + "bounding": [ + 4176.52579607565, + 397.1117885588086, + 2397.29147273778, + 977.1688745418668 ], "color": "#3f789e", "flags": {} @@ -2467,13 +5975,13 @@ "config": {}, "extra": { "ds": { - "scale": 1.0152559799477054, + "scale": 0.5958514526864833, "offset": [ - -305.3695485210474, - -1540.0569475701045 + -3524.654187801973, + -159.49781928334642 ] }, "frontendVersion": "1.43.18" }, "version": 0.4 -} +} \ No newline at end of file