diff --git a/README.md b/README.md index 0efbc83..28f0f9f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@
- -
@@ -41,13 +39,11 @@
The original intention behind the design of ACE++ was to unify reference image generation, local editing,
and controllable generation into a single framework, and to enable one model to adapt to a wider range of tasks.
-A more versatile model is often capable of handling more complex tasks. We have already released three LoRA models,
-focusing on portraits, objects, and regional editing, with the expectation that each would demonstrate strong adaptability
-within their respective domains. Undoubtedly, this presents certain challenges.
-
-We are currently training a fully fine-tuned model, which has now entered the final stage of quality tuning.
-We are confident it will be released soon. This model will support a broader range of capabilities and is
-expected to empower community developers to build even more interesting applications.
+A more versatile model is often capable of handling more complex tasks. "We have released three LoRA models for
+specific vertical domains and a more versatile FFT model. Users can flexibly utilize these models and their
+combinations for their own scenarios. Furthermore, many community members have found that using them
+in conjunction with Redux modules significantly improves performance. We believe there are many more
+use cases to explore.
## 📢 News
- [x] **[2025.01.06]** Release the code and models of ACE++.
@@ -55,7 +51,22 @@ expected to empower community developers to build even more interesting applicat
- [x] **[2025.01.16]** Release the training code for lora.
- [x] **[2025.02.15]** Collection of workflows in Comfyui.
- [x] **[2025.02.15]** Release the config for fully fine-tuning.
-- [x] **[2025.03.03]** Release a unified fft model for ACE++, support more image to image tasks. [HuggingFace](https://huggingface.co/ali-vilab/ACE_Plus/tree/main)
+- [x] **[2025.03.03]** Release a unified fft model for ACE++, support more image to image tasks.
+- [x] **[2025.03.11]** Release the comfyui workflow and the fp8
+version stored in [ms](https://www.modelscope.cn/models/iic/ACE_Plus/file/view/master?fileName=ace_plus_fft_fp8.safetensors&status=2) and [hf](https://huggingface.co/ali-vilab/ACE_Plus/blob/main/ace_plus_fft_fp8.safetensors) for ACE++ FFT model.
+
+- We sincerely apologize
+for the delayed responses and updates regarding ACE++ issues.
+Further development of the ACE model through post-training on the FLUX model must be suspended.
+We have identified several significant challenges in post-training on the FLUX foundation.
+The primary issue is the high degree of heterogeneity between the training dataset and the FLUX model,
+which results in highly unstable training. Moreover, FLUX-Dev is a distilled model, and the influence of its original negative prompts on its final performance is uncertain.
+As a result, subsequent efforts will be focused on post-training the ACE model using the Wan series of foundational models.
+
+- We have been busy with other projects recently. Our new work in the video domain, [VACE](https://ali-vilab.github.io/VACE-Page/),
+has also been released, and we welcome you to continue following our work.
+
+
## 🔥The unified fft model for ACE++
Fully finetuning a composite model with ACE’s data to support various editing and reference generation tasks through an instructive approach.
@@ -66,6 +77,42 @@ To address this issue, we introduced 64 additional channels in the channel dimen
One issue with this approach is that it changes the input channel number of the FLUX-Fill-Dev model from 384 to 448. The specific configuration can be referenced in the [configuration file](config/ace_plus_fft.yaml).
+
+We used tools from [stella](https://gist.github.com/Stella2211/10f5bd870387ec1ddb9932235321068e)(this is really a great work) to convert the fft-fp16 model to fft-fp8. The updated models are available on [ms](https://www.modelscope.cn/models/iic/ACE_Plus/file/view/master?fileName=ace_plus_fft_fp8.safetensors&status=2) and [hf](https://huggingface.co/ali-vilab/ACE_Plus/blob/main/ace_plus_fft_fp8.safetensors). The results of the fp8 model will differ from the fp16 model. We have not yet performed a rigorous comparison, so users should be aware of this.
+
+### ComfyUI Workflow
+
+Copy the workflow/ComfyUI-ACE_Plus folder into ComfyUI’s custom_nodes directory. Launch ComfyUI, and we have provided four example workflows in workflow_example_fft with the following explanations.
+
+We provide a parameter to adjust the GPU memory usage. As shown in the figure below, max_seq_length controls the length of the token sequence during inference, thereby controlling the model's inference memory consumption. The range of this value is from 1024 to 5120, and it correspondingly affects the clarity of the generated image. The smaller the value, the lower the image clarity.
+
+
+
+
| Workflow | +Description | +
| ACE_Plus_FFT_workflow_no_preprocess.json | +Use the preprocessed images, such as depth and contour, as input, or the super-resolution. | +
| ACE_Plus_FFT_workflow_controlpreprocess.json | +Controllable image-to-image translation capability. | +
| ACE_Plus_FFT_workflow_reference_generation.json | +Reference image generation capability for portrait or subject. | +
| ACE_Plus_FFT_workflow_referenceediting_generation.json | +Reference image editing capability | +
Dict[str, str]: + validated = {} + for key, value in metadata.items(): + if not isinstance(key, str): + raise ValueError(f"Metadata key must be a string, got {type(key)}") + if not isinstance(value, str): + print(f"Warning: Metadata value for key '{key}' is not a string. Converting to string.") + validated[key] = str(value) + else: + validated[key] = value + return validated + + header = {} + offset = 0 + if metadata: + header["__metadata__"] = validate_metadata(metadata) + for k, v in tensors.items(): + if v.numel() == 0: # empty tensor + header[k] = {"dtype": _TYPES[v.dtype], "shape": list(v.shape), "data_offsets": [offset, offset]} + else: + size = v.numel() * v.element_size() + header[k] = {"dtype": _TYPES[v.dtype], "shape": list(v.shape), "data_offsets": [offset, offset + size]} + offset += size + + hjson = json.dumps(header).encode("utf-8") + hjson += b" " * (-(len(hjson) + 8) % _ALIGN) + + with open(filename, "wb") as f: + f.write(struct.pack("self.max_aspect_ratio: + image[0] = T.CenterCrop([int(self.max_aspect_ratio * W), W])(image[0]) + elif W / H > self.max_aspect_ratio: + image[0] = T.CenterCrop([H, int(self.max_aspect_ratio * H)])(image[0]) + return image[0] + + def trans_pil_tensor(self, pil_image): + transform = T.Compose([ + T.ToTensor() + ]) + tensor_image = transform(pil_image) + return tensor_image + + def edit_preprocess(self, processor, device, edit_image, edit_mask): + + if edit_image is None or processor is None: + return edit_image + if not SCEPTER: + raise ImportError(f'Please install scepter to use edit processor {processor} by ' + f'runing "pip install scepter" in the conda env') + processor = Config(cfg_dict=processor, load=False) + processor = ANNOTATORS.build(processor).to(device) + edit_image = Image.fromarray(np.array(edit_image[0] * 255).astype(np.uint8)).convert('RGB') + new_edit_image = processor(np.asarray(edit_image)) + + del processor + new_edit_image = Image.fromarray(new_edit_image) + if edit_mask is not None: + edit_mask = np.where(edit_mask > 0.5, 1, 0) * 255 + edit_mask = Image.fromarray(np.array(edit_mask[0]).astype(np.uint8)).convert('L') + + if new_edit_image.size != edit_image.size: + edit_image = T.Resize((edit_image.size[1], edit_image.size[0]), + interpolation=T.InterpolationMode.BILINEAR, + antialias=True)(new_edit_image) + + image = Image.composite(new_edit_image, edit_image, edit_mask) + + return self.trans_pil_tensor(image).unsqueeze(0).permute(0, 2, 3, 1) + + def preprocess(self, + reference_image=None, + edit_image=None, + edit_mask=None, + use_reference=True, + task_type=None, + height=1024, + width=1024, + keep_pixels_rate=0.8, + max_seq_length=4096): + self.max_seq_len = max_seq_length + if not use_reference and edit_image is not None: + reference_image = None + if edit_mask is not None and edit_image is not None: + iH, iW = edit_image.shape[1:3] + mH, mW = edit_mask.shape[1:3] + if iH != mH or iW != mW: + edit_mask = torch.ones(edit_image.shape[:3]) + + if task_type != 'repainting': + repainting_scale = 0 + else: + repainting_scale = 1 + if task_type in self.task_list: + edit_image = self.edit_preprocess(self.task_list[task_type]['ANNOTATOR'], 0, + edit_image, edit_mask) + if reference_image is not None: + reference_image = self.image_check(reference_image) - 0.5 + if edit_image is not None: + edit_image = self.image_check(edit_image) - 0.5 + # for reference generation + if edit_image is None: + edit_image = torch.zeros([3, height, width]) + edit_mask = torch.ones([1, height, width]) + else: + if edit_mask is None: + _, eH, eW = edit_image.shape + edit_mask = np.ones((eH, eW)) + else: + edit_mask = np.asarray(edit_mask)[0] + edit_mask = np.where(edit_mask > 0.5, 1, 0) + edit_mask = edit_mask.astype( + np.float32) if np.any(edit_mask) else np.ones_like(edit_mask).astype( + np.float32) + edit_mask = torch.tensor(edit_mask).unsqueeze(0) + + edit_image = edit_image * (1 - edit_mask * repainting_scale) + + out_h, out_w = edit_image.shape[-2:] + + assert edit_mask is not None + if reference_image is not None: + _, H, W = reference_image.shape + _, eH, eW = edit_image.shape + if not True: + # align height with edit_image + scale = eH / H + tH, tW = eH, int(W * scale) + reference_image = T.Resize((tH, tW), interpolation=T.InterpolationMode.BILINEAR, antialias=True)( + reference_image) + else: + # padding + if H >= keep_pixels_rate * eH: + tH = int(eH * keep_pixels_rate) + scale = tH / H + tW = int(W * scale) + reference_image = T.Resize((tH, tW), interpolation=T.InterpolationMode.BILINEAR, antialias=True)( + reference_image) + rH, rW = reference_image.shape[-2:] + delta_w = 0 + delta_h = eH - rH + padding = (delta_w // 2, delta_h // 2, delta_w - (delta_w // 2), delta_h - (delta_h // 2)) + reference_image = T.Pad(padding, fill=0, padding_mode="constant")(reference_image) + edit_image = torch.cat([reference_image, edit_image], dim=-1) + edit_mask = torch.cat([torch.zeros([1, reference_image.shape[1], reference_image.shape[2]]), edit_mask], + dim=-1) + slice_w = reference_image.shape[-1] + else: + slice_w = 0 + + H, W = edit_image.shape[-2:] + scale = min(1.0, math.sqrt(self.max_seq_len * 2 / ((H / self.d) * (W / self.d)))) + rH = int(H * scale) // self.d * self.d + rW = int(W * scale) // self.d * self.d + slice_w = int(slice_w * scale) // self.d * self.d + + edit_image = T.Resize((rH, rW), interpolation=T.InterpolationMode.NEAREST_EXACT, antialias=True)(edit_image) + edit_mask = T.Resize((rH, rW), interpolation=T.InterpolationMode.NEAREST_EXACT, antialias=True)(edit_mask) + + change_image = edit_image * edit_mask + edit_image = edit_image * (1 - edit_mask) + edit_image = edit_image.unsqueeze(0).permute(0, 2, 3, 1) + change_image = change_image.unsqueeze(0).permute(0, 2, 3, 1) + slice_w = slice_w if slice_w < 30 else slice_w + 30 + + return edit_image + 0.5, change_image + 0.5, edit_mask, out_h, out_w, slice_w diff --git a/workflow/ComfyUI-ACE_Plus/config/ace_plus_fft_processor.yaml b/workflow/ComfyUI-ACE_Plus/config/ace_plus_fft_processor.yaml new file mode 100644 index 0000000..5ed1e09 --- /dev/null +++ b/workflow/ComfyUI-ACE_Plus/config/ace_plus_fft_processor.yaml @@ -0,0 +1,25 @@ +PREPROCESSOR: + - TYPE: repainting + REPAINTING_SCALE: 1.0 + ANNOTATOR: + - TYPE: no_preprocess + REPAINTING_SCALE: 0.0 + ANNOTATOR: + - TYPE: contour_repainting + REPAINTING_SCALE: 0.0 + ANNOTATOR: + NAME: InfoDrawContourAnnotator + INPUT_NC: 3 + OUTPUT_NC: 1 + N_RESIDUAL_BLOCKS: 3 + SIGMOID: True + PRETRAINED_MODEL: "ms://iic/scepter_annotator@annotator/ckpts/informative_drawing_contour_style.pth" + - TYPE: depth_repainting + REPAINTING_SCALE: 0.0 + ANNOTATOR: + NAME: MidasDetector + PRETRAINED_MODEL: "ms://iic/scepter_annotator@annotator/ckpts/dpt_hybrid-midas-501f0c75.pt" + - TYPE: recolorizing + REPAINTING_SCALE: 0.0 + ANNOTATOR: + NAME: GrayAnnotator \ No newline at end of file diff --git a/workflow_example_fft/ACE_Plus_FFT_workflow_controlpreprocess.json b/workflow_example_fft/ACE_Plus_FFT_workflow_controlpreprocess.json new file mode 100644 index 0000000..b814e13 --- /dev/null +++ b/workflow_example_fft/ACE_Plus_FFT_workflow_controlpreprocess.json @@ -0,0 +1,1021 @@ +{ + "last_node_id": 378, + "last_link_id": 674, + "nodes": [ + { + "id": 290, + "type": "VAELoader", + "pos": [ + -3938.71923828125, + 1587.7381591796875 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 441, + 599 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "ae.safetensors" + ] + }, + { + "id": 289, + "type": "DualCLIPLoader", + "pos": [ + -3938.109619140625, + 1719.1380615234375 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 439, + 440 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "clip_l.safetensors", + "t5xxl_fp16.safetensors", + "flux" + ] + }, + { + "id": 292, + "type": "CLIPTextEncode", + "pos": [ + -3877.987548828125, + 1898.810302734375 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 440 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 598 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 295, + "type": "DifferentialDiffusion", + "pos": [ + -3905.315673828125, + 2370.018798828125 + ], + "size": [ + 203.87991333007812, + 28.94829559326172 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 610 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 438 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 323, + "type": "Note", + "pos": [ + -4520.6875, + 2339.823974609375 + ], + "size": [ + 454.2545166015625, + 174.908447265625 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ACE_Plus Model download: https://huggingface.co/ali-vilab/ACE_Plus/blob/main/ace_plus_fft.safetensors" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 294, + "type": "FluxGuidance", + "pos": [ + -3108.354736328125, + 1719.18017578125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 446 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 597 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FluxGuidance" + }, + "widgets_values": [ + 50 + ] + }, + { + "id": 287, + "type": "VAEDecode", + "pos": [ + -3103.54833984375, + 1858.2403564453125 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 442 + }, + { + "name": "vae", + "type": "VAE", + "link": 441 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 652 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 373, + "type": "ImageCrop", + "pos": [ + -3154.792236328125, + 2000.0208740234375 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 652 + }, + { + "name": "width", + "type": "INT", + "link": 655, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 656, + "widget": { + "name": "height" + } + }, + { + "name": "x", + "type": "INT", + "link": 657, + "widget": { + "name": "x" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 658 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCrop" + }, + "widgets_values": [ + 512, + 512, + 0, + 0 + ] + }, + { + "id": 374, + "type": "PreviewImage", + "pos": [ + -2758.914306640625, + 1791.9202880859375 + ], + "size": [ + 297.7324523925781, + 332.22821044921875 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 658 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 291, + "type": "CLIPTextEncode", + "pos": [ + -3557.567626953125, + 1652.6763916015625 + ], + "size": [ + 389.0423278808594, + 213.64186096191406 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 439 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 446 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "{image} Beautiful female portrait, Robot with smooth White transparent carbon shell, rococo detailing, Natural lighting, Highly detailed, Cinematic, 4K." + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 364, + "type": "ACEPlusConditioning", + "pos": [ + -3943.033447265625, + 1970.2298583984375 + ], + "size": [ + 280, + 160 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 597 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 598 + }, + { + "name": "vae", + "type": "VAE", + "link": 599 + }, + { + "name": "ucpixels", + "type": "IMAGE", + "link": 606 + }, + { + "name": "cpixels", + "type": "IMAGE", + "link": 669 + }, + { + "name": "mask", + "type": "MASK", + "link": 670 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 600 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 601 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 602 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "ACEPlusConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 371, + "type": "MaskPreview+", + "pos": [ + -4240.89990234375, + 2142.49609375 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 673 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "MaskPreview+" + }, + "widgets_values": [] + }, + { + "id": 378, + "type": "LoadImage", + "pos": [ + -4928.19287109375, + 1814.857666015625 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 671 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 672 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "1_1_fft_recolor.webp", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 372, + "type": "PreviewImage", + "pos": [ + -4582.751953125, + 2105.985595703125 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 674 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 365, + "type": "ACEPlusFFTProcessor", + "pos": [ + -4510.58837890625, + 1658.77001953125 + ], + "size": [ + 261.8648376464844, + 278 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "reference_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "edit_image", + "type": "IMAGE", + "link": 671, + "shape": 7 + }, + { + "name": "edit_mask", + "type": "MASK", + "link": 672, + "shape": 7 + } + ], + "outputs": [ + { + "name": "UC_IMAGE", + "type": "IMAGE", + "links": [ + 606, + 611 + ], + "slot_index": 0 + }, + { + "name": "C_IMAGE", + "type": "IMAGE", + "links": [ + 669, + 674 + ], + "slot_index": 1 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 670, + 673 + ], + "slot_index": 2 + }, + { + "name": "OUT_H", + "type": "INT", + "links": [ + 656 + ], + "slot_index": 3 + }, + { + "name": "OUT_W", + "type": "INT", + "links": [ + 655 + ], + "slot_index": 4 + }, + { + "name": "SLICE_W", + "type": "INT", + "links": [ + 657 + ], + "slot_index": 5 + } + ], + "properties": { + "Node name for S&R": "ACEPlusFFTProcessor" + }, + "widgets_values": [ + true, + 1024, + 1024, + "contour_repainting", + 0.8, + 3072 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 286, + "type": "KSampler", + "pos": [ + -3532.909912109375, + 1947.0386962890625 + ], + "size": [ + 317.2386474609375, + 485.9841613769531 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 438 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 600 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 601 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 602 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 442 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 38616314728576, + "randomize", + 28, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 367, + "type": "PreviewImage", + "pos": [ + -4205.70458984375, + 1584.8121337890625 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 611 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 366, + "type": "ACEPlusLoader", + "pos": [ + -3953.21533203125, + 2198.42138671875 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 610 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ACEPlusLoader" + }, + "widgets_values": [ + "ace_plus_fft.safetensors", + "default" + ] + } + ], + "links": [ + [ + 438, + 295, + 0, + 286, + 0, + "MODEL" + ], + [ + 439, + 289, + 0, + 291, + 0, + "CLIP" + ], + [ + 440, + 289, + 0, + 292, + 0, + "CLIP" + ], + [ + 441, + 290, + 0, + 287, + 1, + "VAE" + ], + [ + 442, + 286, + 0, + 287, + 0, + "LATENT" + ], + [ + 446, + 291, + 0, + 294, + 0, + "CONDITIONING" + ], + [ + 597, + 294, + 0, + 364, + 0, + "CONDITIONING" + ], + [ + 598, + 292, + 0, + 364, + 1, + "CONDITIONING" + ], + [ + 599, + 290, + 0, + 364, + 2, + "VAE" + ], + [ + 600, + 364, + 0, + 286, + 1, + "CONDITIONING" + ], + [ + 601, + 364, + 1, + 286, + 2, + "CONDITIONING" + ], + [ + 602, + 364, + 2, + 286, + 3, + "LATENT" + ], + [ + 606, + 365, + 0, + 364, + 3, + "IMAGE" + ], + [ + 610, + 366, + 0, + 295, + 0, + "MODEL" + ], + [ + 611, + 365, + 0, + 367, + 0, + "IMAGE" + ], + [ + 652, + 287, + 0, + 373, + 0, + "IMAGE" + ], + [ + 655, + 365, + 4, + 373, + 1, + "INT" + ], + [ + 656, + 365, + 3, + 373, + 2, + "INT" + ], + [ + 657, + 365, + 5, + 373, + 3, + "INT" + ], + [ + 658, + 373, + 0, + 374, + 0, + "IMAGE" + ], + [ + 669, + 365, + 1, + 364, + 4, + "IMAGE" + ], + [ + 670, + 365, + 2, + 364, + 5, + "MASK" + ], + [ + 671, + 378, + 0, + 365, + 1, + "IMAGE" + ], + [ + 672, + 378, + 1, + 365, + 2, + "MASK" + ], + [ + 673, + 365, + 2, + 371, + 0, + "MASK" + ], + [ + 674, + 365, + 1, + 372, + 0, + "IMAGE" + ] + ], + "groups": [ + { + "id": 20, + "title": "ACE_Plus FFT Workflow", + "bounding": [ + -5005.599609375, + 1428.0904541015625, + 2592.630126953125, + 1121.891845703125 + ], + "color": "#3f789e", + "font_size": 40, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.7627768444385488, + "offset": [ + 5506.346756005007, + -1124.9482467877335 + ] + }, + "ue_links": [], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/workflow_example_fft/ACE_Plus_FFT_workflow_no_preprocess.json b/workflow_example_fft/ACE_Plus_FFT_workflow_no_preprocess.json new file mode 100644 index 0000000..b683d0b --- /dev/null +++ b/workflow_example_fft/ACE_Plus_FFT_workflow_no_preprocess.json @@ -0,0 +1,1021 @@ +{ + "last_node_id": 378, + "last_link_id": 674, + "nodes": [ + { + "id": 372, + "type": "PreviewImage", + "pos": [ + -4405.0244140625, + 2036.48388671875 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 671 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 290, + "type": "VAELoader", + "pos": [ + -3826.618408203125, + 1603.526611328125 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 441, + 599 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "ae.safetensors" + ] + }, + { + "id": 289, + "type": "DualCLIPLoader", + "pos": [ + -3826.0087890625, + 1734.926513671875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 439, + 440 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "clip_l.safetensors", + "t5xxl_fp16.safetensors", + "flux" + ] + }, + { + "id": 292, + "type": "CLIPTextEncode", + "pos": [ + -3765.88671875, + 1914.5987548828125 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 440 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 598 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 295, + "type": "DifferentialDiffusion", + "pos": [ + -3793.21484375, + 2385.80712890625 + ], + "size": [ + 203.87991333007812, + 28.94829559326172 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 610 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 438 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 323, + "type": "Note", + "pos": [ + -4408.5859375, + 2355.6123046875 + ], + "size": [ + 454.2545166015625, + 174.908447265625 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ACE_Plus Model download: https://huggingface.co/ali-vilab/ACE_Plus/blob/main/ace_plus_fft.safetensors" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 294, + "type": "FluxGuidance", + "pos": [ + -2996.25390625, + 1734.9686279296875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 446 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 597 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FluxGuidance" + }, + "widgets_values": [ + 50 + ] + }, + { + "id": 287, + "type": "VAEDecode", + "pos": [ + -2991.447509765625, + 1874.02880859375 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 442 + }, + { + "name": "vae", + "type": "VAE", + "link": 441 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 652 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 373, + "type": "ImageCrop", + "pos": [ + -3042.69140625, + 2015.809326171875 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 652 + }, + { + "name": "width", + "type": "INT", + "link": 655, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 656, + "widget": { + "name": "height" + } + }, + { + "name": "x", + "type": "INT", + "link": 657, + "widget": { + "name": "x" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 658 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCrop" + }, + "widgets_values": [ + 512, + 512, + 0, + 0 + ] + }, + { + "id": 374, + "type": "PreviewImage", + "pos": [ + -2646.8134765625, + 1807.708740234375 + ], + "size": [ + 297.7324523925781, + 332.22821044921875 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 658 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 371, + "type": "MaskPreview+", + "pos": [ + -4157.91162109375, + 2039.6533203125 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 672 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "MaskPreview+" + }, + "widgets_values": [] + }, + { + "id": 286, + "type": "KSampler", + "pos": [ + -3420.80908203125, + 1962.8271484375 + ], + "size": [ + 317.2386474609375, + 485.9841613769531 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 438 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 600 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 601 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 602 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 442 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 10000002, + "fixed", + 28, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 291, + "type": "CLIPTextEncode", + "pos": [ + -3445.466796875, + 1668.46484375 + ], + "size": [ + 389.0423278808594, + 213.64186096191406 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 439 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 446 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "{image} features a close-up of a young, furry tiger cub on a rock. The tiger, which appears to be quite young, has distinctive orange, black, and white striped fur, typical of tigers. The cub's eyes have a bright and curious expression, and its ears are perked up, indicating alertness. The cub seems to be in the act of climbing or resting on the rock. The background is a blurred grassland with trees, but the focus is on the cub, which is vividly colored while the rest of the image is in grayscale, drawing attention to the tiger's details. The photo captures a moment in the wild, depicting the charming and tenacious nature of this young tiger, as well as its typical interaction with the environment." + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 366, + "type": "ACEPlusLoader", + "pos": [ + -3841.114501953125, + 2214.209716796875 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 610 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ACEPlusLoader" + }, + "widgets_values": [ + "ace_plus_fft.safetensors", + "default" + ] + }, + { + "id": 367, + "type": "PreviewImage", + "pos": [ + -4066.84521484375, + 1397.3804931640625 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 611 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 364, + "type": "ACEPlusConditioning", + "pos": [ + -3830.9326171875, + 1986.018310546875 + ], + "size": [ + 280, + 160 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 597 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 598 + }, + { + "name": "vae", + "type": "VAE", + "link": 599 + }, + { + "name": "ucpixels", + "type": "IMAGE", + "link": 606 + }, + { + "name": "cpixels", + "type": "IMAGE", + "link": 669 + }, + { + "name": "mask", + "type": "MASK", + "link": 670 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 600 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 601 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 602 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "ACEPlusConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 365, + "type": "ACEPlusFFTProcessor", + "pos": [ + -4398.48681640625, + 1674.5584716796875 + ], + "size": [ + 261.8648376464844, + 278 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "reference_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "edit_image", + "type": "IMAGE", + "link": 673, + "shape": 7 + }, + { + "name": "edit_mask", + "type": "MASK", + "link": 674, + "shape": 7 + } + ], + "outputs": [ + { + "name": "UC_IMAGE", + "type": "IMAGE", + "links": [ + 606, + 611 + ], + "slot_index": 0 + }, + { + "name": "C_IMAGE", + "type": "IMAGE", + "links": [ + 669, + 671 + ], + "slot_index": 1 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 670, + 672 + ], + "slot_index": 2 + }, + { + "name": "OUT_H", + "type": "INT", + "links": [ + 656 + ], + "slot_index": 3 + }, + { + "name": "OUT_W", + "type": "INT", + "links": [ + 655 + ], + "slot_index": 4 + }, + { + "name": "SLICE_W", + "type": "INT", + "links": [ + 657 + ], + "slot_index": 5 + } + ], + "properties": { + "Node name for S&R": "ACEPlusFFTProcessor" + }, + "widgets_values": [ + true, + 1024, + 1024, + "no_preprocess", + true, + 3072 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 378, + "type": "LoadImage", + "pos": [ + -4816.09130859375, + 1830.6461181640625 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 673 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 674 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "sr_tiger.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 438, + 295, + 0, + 286, + 0, + "MODEL" + ], + [ + 439, + 289, + 0, + 291, + 0, + "CLIP" + ], + [ + 440, + 289, + 0, + 292, + 0, + "CLIP" + ], + [ + 441, + 290, + 0, + 287, + 1, + "VAE" + ], + [ + 442, + 286, + 0, + 287, + 0, + "LATENT" + ], + [ + 446, + 291, + 0, + 294, + 0, + "CONDITIONING" + ], + [ + 597, + 294, + 0, + 364, + 0, + "CONDITIONING" + ], + [ + 598, + 292, + 0, + 364, + 1, + "CONDITIONING" + ], + [ + 599, + 290, + 0, + 364, + 2, + "VAE" + ], + [ + 600, + 364, + 0, + 286, + 1, + "CONDITIONING" + ], + [ + 601, + 364, + 1, + 286, + 2, + "CONDITIONING" + ], + [ + 602, + 364, + 2, + 286, + 3, + "LATENT" + ], + [ + 606, + 365, + 0, + 364, + 3, + "IMAGE" + ], + [ + 610, + 366, + 0, + 295, + 0, + "MODEL" + ], + [ + 611, + 365, + 0, + 367, + 0, + "IMAGE" + ], + [ + 652, + 287, + 0, + 373, + 0, + "IMAGE" + ], + [ + 655, + 365, + 4, + 373, + 1, + "INT" + ], + [ + 656, + 365, + 3, + 373, + 2, + "INT" + ], + [ + 657, + 365, + 5, + 373, + 3, + "INT" + ], + [ + 658, + 373, + 0, + 374, + 0, + "IMAGE" + ], + [ + 669, + 365, + 1, + 364, + 4, + "IMAGE" + ], + [ + 670, + 365, + 2, + 364, + 5, + "MASK" + ], + [ + 671, + 365, + 1, + 372, + 0, + "IMAGE" + ], + [ + 672, + 365, + 2, + 371, + 0, + "MASK" + ], + [ + 673, + 378, + 0, + 365, + 1, + "IMAGE" + ], + [ + 674, + 378, + 1, + 365, + 2, + "MASK" + ] + ], + "groups": [ + { + "id": 20, + "title": "ACE_Plus FFT Workflow", + "bounding": [ + -4893.498046875, + 1443.87890625, + 2592.630126953125, + 1121.891845703125 + ], + "color": "#3f789e", + "font_size": 40, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.7627768444385488, + "offset": [ + 5506.346756005007, + -1125.36817628918 + ] + }, + "ue_links": [], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/workflow_example_fft/ACE_Plus_FFT_workflow_reference_generation.json b/workflow_example_fft/ACE_Plus_FFT_workflow_reference_generation.json new file mode 100644 index 0000000..00b3d64 --- /dev/null +++ b/workflow_example_fft/ACE_Plus_FFT_workflow_reference_generation.json @@ -0,0 +1,1009 @@ +{ + "last_node_id": 376, + "last_link_id": 672, + "nodes": [ + { + "id": 290, + "type": "VAELoader", + "pos": [ + -3826.618408203125, + 1603.526611328125 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 441, + 599 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "ae.safetensors" + ] + }, + { + "id": 289, + "type": "DualCLIPLoader", + "pos": [ + -3826.0087890625, + 1734.926513671875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 439, + 440 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "clip_l.safetensors", + "t5xxl_fp16.safetensors", + "flux" + ] + }, + { + "id": 292, + "type": "CLIPTextEncode", + "pos": [ + -3765.88671875, + 1914.5987548828125 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 440 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 598 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 364, + "type": "ACEPlusConditioning", + "pos": [ + -3830.9326171875, + 1986.018310546875 + ], + "size": [ + 280, + 160 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 597 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 598 + }, + { + "name": "vae", + "type": "VAE", + "link": 599 + }, + { + "name": "ucpixels", + "type": "IMAGE", + "link": 606 + }, + { + "name": "cpixels", + "type": "IMAGE", + "link": 669 + }, + { + "name": "mask", + "type": "MASK", + "link": 670 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 600 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 601 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 602 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "ACEPlusConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 295, + "type": "DifferentialDiffusion", + "pos": [ + -3793.21484375, + 2385.80712890625 + ], + "size": [ + 203.87991333007812, + 28.94829559326172 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 610 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 438 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 294, + "type": "FluxGuidance", + "pos": [ + -2996.25390625, + 1734.9686279296875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 446 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 597 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FluxGuidance" + }, + "widgets_values": [ + 50 + ] + }, + { + "id": 287, + "type": "VAEDecode", + "pos": [ + -2991.447509765625, + 1874.02880859375 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 442 + }, + { + "name": "vae", + "type": "VAE", + "link": 441 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 652 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 373, + "type": "ImageCrop", + "pos": [ + -3042.69140625, + 2015.809326171875 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 652 + }, + { + "name": "width", + "type": "INT", + "link": 655, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 656, + "widget": { + "name": "height" + } + }, + { + "name": "x", + "type": "INT", + "link": 657, + "widget": { + "name": "x" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 658 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCrop" + }, + "widgets_values": [ + 512, + 512, + 0, + 0 + ] + }, + { + "id": 374, + "type": "PreviewImage", + "pos": [ + -2646.8134765625, + 1807.708740234375 + ], + "size": [ + 297.7324523925781, + 332.22821044921875 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 658 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 366, + "type": "ACEPlusLoader", + "pos": [ + -3841.114501953125, + 2214.209716796875 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 610 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ACEPlusLoader" + }, + "widgets_values": [ + "ace_plus_fft.safetensors", + "default" + ] + }, + { + "id": 371, + "type": "MaskPreview+", + "pos": [ + -4157.91162109375, + 2039.6533203125 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 672 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "MaskPreview+" + }, + "widgets_values": [] + }, + { + "id": 286, + "type": "KSampler", + "pos": [ + -3420.80908203125, + 1962.8271484375 + ], + "size": [ + 317.2386474609375, + 485.9841613769531 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 438 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 600 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 601 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 602 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 442 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 3999647, + "fixed", + 28, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 376, + "type": "LoadImage", + "pos": [ + -4823.74267578125, + 1608.7518310546875 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 664 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "human_1.jpg", + "image" + ] + }, + { + "id": 323, + "type": "Note", + "pos": [ + -4408.5859375, + 2355.6123046875 + ], + "size": [ + 454.2545166015625, + 174.908447265625 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ACE_Plus Model download: https://huggingface.co/ali-vilab/ACE_Plus/blob/main/ace_plus_fft.safetensors" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 291, + "type": "CLIPTextEncode", + "pos": [ + -3445.466796875, + 1668.46484375 + ], + "size": [ + 389.0423278808594, + 213.64186096191406 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 439 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 446 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "Maintain the facial features, A girl is wearing a neat police uniform and sporting a badge. She is smiling with a friendly and confident demeanor. The background is blurred, featuring a cartoon logo." + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 367, + "type": "PreviewImage", + "pos": [ + -4078.7978515625, + 1388.28564453125 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 611 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 372, + "type": "PreviewImage", + "pos": [ + -4405.0244140625, + 2036.48388671875 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 671 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 365, + "type": "ACEPlusFFTProcessor", + "pos": [ + -4398.48681640625, + 1674.5584716796875 + ], + "size": [ + 261.8648376464844, + 278 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "reference_image", + "type": "IMAGE", + "link": 664, + "shape": 7 + }, + { + "name": "edit_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "edit_mask", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "UC_IMAGE", + "type": "IMAGE", + "links": [ + 606, + 611 + ], + "slot_index": 0 + }, + { + "name": "C_IMAGE", + "type": "IMAGE", + "links": [ + 669, + 671 + ], + "slot_index": 1 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 670, + 672 + ], + "slot_index": 2 + }, + { + "name": "OUT_H", + "type": "INT", + "links": [ + 656 + ], + "slot_index": 3 + }, + { + "name": "OUT_W", + "type": "INT", + "links": [ + 655 + ], + "slot_index": 4 + }, + { + "name": "SLICE_W", + "type": "INT", + "links": [ + 657 + ], + "slot_index": 5 + } + ], + "properties": { + "Node name for S&R": "ACEPlusFFTProcessor" + }, + "widgets_values": [ + true, + 1024, + 1024, + "repainting", + true, + 3072 + ], + "color": "#223", + "bgcolor": "#335" + } + ], + "links": [ + [ + 438, + 295, + 0, + 286, + 0, + "MODEL" + ], + [ + 439, + 289, + 0, + 291, + 0, + "CLIP" + ], + [ + 440, + 289, + 0, + 292, + 0, + "CLIP" + ], + [ + 441, + 290, + 0, + 287, + 1, + "VAE" + ], + [ + 442, + 286, + 0, + 287, + 0, + "LATENT" + ], + [ + 446, + 291, + 0, + 294, + 0, + "CONDITIONING" + ], + [ + 597, + 294, + 0, + 364, + 0, + "CONDITIONING" + ], + [ + 598, + 292, + 0, + 364, + 1, + "CONDITIONING" + ], + [ + 599, + 290, + 0, + 364, + 2, + "VAE" + ], + [ + 600, + 364, + 0, + 286, + 1, + "CONDITIONING" + ], + [ + 601, + 364, + 1, + 286, + 2, + "CONDITIONING" + ], + [ + 602, + 364, + 2, + 286, + 3, + "LATENT" + ], + [ + 606, + 365, + 0, + 364, + 3, + "IMAGE" + ], + [ + 610, + 366, + 0, + 295, + 0, + "MODEL" + ], + [ + 611, + 365, + 0, + 367, + 0, + "IMAGE" + ], + [ + 652, + 287, + 0, + 373, + 0, + "IMAGE" + ], + [ + 655, + 365, + 4, + 373, + 1, + "INT" + ], + [ + 656, + 365, + 3, + 373, + 2, + "INT" + ], + [ + 657, + 365, + 5, + 373, + 3, + "INT" + ], + [ + 658, + 373, + 0, + 374, + 0, + "IMAGE" + ], + [ + 664, + 376, + 0, + 365, + 0, + "IMAGE" + ], + [ + 669, + 365, + 1, + 364, + 4, + "IMAGE" + ], + [ + 670, + 365, + 2, + 364, + 5, + "MASK" + ], + [ + 671, + 365, + 1, + 372, + 0, + "IMAGE" + ], + [ + 672, + 365, + 2, + 371, + 0, + "MASK" + ] + ], + "groups": [ + { + "id": 20, + "title": "ACE_Plus FFT Workflow", + "bounding": [ + -4893.498046875, + 1443.87890625, + 2592.630126953125, + 1121.891845703125 + ], + "color": "#3f789e", + "font_size": 40, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.7627768444385488, + "offset": [ + 5506.346756005007, + -1125.36817628918 + ] + }, + "ue_links": [], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/workflow_example_fft/ACE_Plus_FFT_workflow_referenceediting_generation.json b/workflow_example_fft/ACE_Plus_FFT_workflow_referenceediting_generation.json new file mode 100644 index 0000000..73429f6 --- /dev/null +++ b/workflow_example_fft/ACE_Plus_FFT_workflow_referenceediting_generation.json @@ -0,0 +1,1069 @@ +{ + "last_node_id": 376, + "last_link_id": 672, + "nodes": [ + { + "id": 290, + "type": "VAELoader", + "pos": [ + -3826.618408203125, + 1603.526611328125 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 441, + 599 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "ae.safetensors" + ] + }, + { + "id": 289, + "type": "DualCLIPLoader", + "pos": [ + -3826.0087890625, + 1734.926513671875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 439, + 440 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "clip_l.safetensors", + "t5xxl_fp16.safetensors", + "flux" + ] + }, + { + "id": 292, + "type": "CLIPTextEncode", + "pos": [ + -3765.88671875, + 1914.5987548828125 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 440 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 598 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 364, + "type": "ACEPlusConditioning", + "pos": [ + -3830.9326171875, + 1986.018310546875 + ], + "size": [ + 280, + 160 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 597 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 598 + }, + { + "name": "vae", + "type": "VAE", + "link": 599 + }, + { + "name": "ucpixels", + "type": "IMAGE", + "link": 606 + }, + { + "name": "cpixels", + "type": "IMAGE", + "link": 669 + }, + { + "name": "mask", + "type": "MASK", + "link": 670 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 600 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 601 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 602 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "ACEPlusConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 295, + "type": "DifferentialDiffusion", + "pos": [ + -3793.21484375, + 2385.80712890625 + ], + "size": [ + 203.87991333007812, + 28.94829559326172 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 610 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 438 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 294, + "type": "FluxGuidance", + "pos": [ + -2996.25390625, + 1734.9686279296875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 446 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 597 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FluxGuidance" + }, + "widgets_values": [ + 50 + ] + }, + { + "id": 287, + "type": "VAEDecode", + "pos": [ + -2991.447509765625, + 1874.02880859375 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 442 + }, + { + "name": "vae", + "type": "VAE", + "link": 441 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 652 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 373, + "type": "ImageCrop", + "pos": [ + -3042.69140625, + 2015.809326171875 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 652 + }, + { + "name": "width", + "type": "INT", + "link": 655, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 656, + "widget": { + "name": "height" + } + }, + { + "name": "x", + "type": "INT", + "link": 657, + "widget": { + "name": "x" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 658 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCrop" + }, + "widgets_values": [ + 512, + 512, + 0, + 0 + ] + }, + { + "id": 374, + "type": "PreviewImage", + "pos": [ + -2646.8134765625, + 1807.708740234375 + ], + "size": [ + 297.7324523925781, + 332.22821044921875 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 658 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 366, + "type": "ACEPlusLoader", + "pos": [ + -3841.114501953125, + 2214.209716796875 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 610 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ACEPlusLoader" + }, + "widgets_values": [ + "ace_plus_fft.safetensors", + "default" + ] + }, + { + "id": 371, + "type": "MaskPreview+", + "pos": [ + -4157.91162109375, + 2039.6533203125 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 672 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "MaskPreview+" + }, + "widgets_values": [] + }, + { + "id": 286, + "type": "KSampler", + "pos": [ + -3420.80908203125, + 1962.8271484375 + ], + "size": [ + 317.2386474609375, + 485.9841613769531 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 438 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 600 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 601 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 602 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 442 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 3999647, + "fixed", + 28, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 376, + "type": "LoadImage", + "pos": [ + -4823.74267578125, + 1608.7518310546875 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 664 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "human_1.jpg", + "image" + ] + }, + { + "id": 323, + "type": "Note", + "pos": [ + -4408.5859375, + 2355.6123046875 + ], + "size": [ + 454.2545166015625, + 174.908447265625 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ACE_Plus Model download: https://huggingface.co/ali-vilab/ACE_Plus/blob/main/ace_plus_fft.safetensors" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 291, + "type": "CLIPTextEncode", + "pos": [ + -3445.466796875, + 1668.46484375 + ], + "size": [ + 389.0423278808594, + 213.64186096191406 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 439 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 446 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "Maintain the facial features, A girl is wearing a neat police uniform and sporting a badge. She is smiling with a friendly and confident demeanor. The background is blurred, featuring a cartoon logo." + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 367, + "type": "PreviewImage", + "pos": [ + -4078.7978515625, + 1388.28564453125 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 611 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 372, + "type": "PreviewImage", + "pos": [ + -4405.0244140625, + 2036.48388671875 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 671 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 365, + "type": "ACEPlusFFTProcessor", + "pos": [ + -4398.48681640625, + 1674.5584716796875 + ], + "size": [ + 261.8648376464844, + 278 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "reference_image", + "type": "IMAGE", + "link": 664, + "shape": 7 + }, + { + "name": "edit_image", + "type": "IMAGE", + "link": 668, + "shape": 7 + }, + { + "name": "edit_mask", + "type": "MASK", + "link": 667, + "shape": 7 + } + ], + "outputs": [ + { + "name": "UC_IMAGE", + "type": "IMAGE", + "links": [ + 606, + 611 + ], + "slot_index": 0 + }, + { + "name": "C_IMAGE", + "type": "IMAGE", + "links": [ + 669, + 671 + ], + "slot_index": 1 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 670, + 672 + ], + "slot_index": 2 + }, + { + "name": "OUT_H", + "type": "INT", + "links": [ + 656 + ], + "slot_index": 3 + }, + { + "name": "OUT_W", + "type": "INT", + "links": [ + 655 + ], + "slot_index": 4 + }, + { + "name": "SLICE_W", + "type": "INT", + "links": [ + 657 + ], + "slot_index": 5 + } + ], + "properties": { + "Node name for S&R": "ACEPlusFFTProcessor" + }, + "widgets_values": [ + true, + 1024, + 1024, + "repainting", + true, + 3072 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 299, + "type": "LoadImage", + "pos": [ + -4826.8291015625, + 2025.3966064453125 + ], + "size": [ + 315, + 314.0001220703125 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 668 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 667 + ], + "slot_index": 1 + } + ], + "title": "Edit Image", + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "clipspace/clipspace-mask-466991.7999999523.png [input]", + "image" + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 438, + 295, + 0, + 286, + 0, + "MODEL" + ], + [ + 439, + 289, + 0, + 291, + 0, + "CLIP" + ], + [ + 440, + 289, + 0, + 292, + 0, + "CLIP" + ], + [ + 441, + 290, + 0, + 287, + 1, + "VAE" + ], + [ + 442, + 286, + 0, + 287, + 0, + "LATENT" + ], + [ + 446, + 291, + 0, + 294, + 0, + "CONDITIONING" + ], + [ + 597, + 294, + 0, + 364, + 0, + "CONDITIONING" + ], + [ + 598, + 292, + 0, + 364, + 1, + "CONDITIONING" + ], + [ + 599, + 290, + 0, + 364, + 2, + "VAE" + ], + [ + 600, + 364, + 0, + 286, + 1, + "CONDITIONING" + ], + [ + 601, + 364, + 1, + 286, + 2, + "CONDITIONING" + ], + [ + 602, + 364, + 2, + 286, + 3, + "LATENT" + ], + [ + 606, + 365, + 0, + 364, + 3, + "IMAGE" + ], + [ + 610, + 366, + 0, + 295, + 0, + "MODEL" + ], + [ + 611, + 365, + 0, + 367, + 0, + "IMAGE" + ], + [ + 652, + 287, + 0, + 373, + 0, + "IMAGE" + ], + [ + 655, + 365, + 4, + 373, + 1, + "INT" + ], + [ + 656, + 365, + 3, + 373, + 2, + "INT" + ], + [ + 657, + 365, + 5, + 373, + 3, + "INT" + ], + [ + 658, + 373, + 0, + 374, + 0, + "IMAGE" + ], + [ + 664, + 376, + 0, + 365, + 0, + "IMAGE" + ], + [ + 667, + 299, + 1, + 365, + 2, + "MASK" + ], + [ + 668, + 299, + 0, + 365, + 1, + "IMAGE" + ], + [ + 669, + 365, + 1, + 364, + 4, + "IMAGE" + ], + [ + 670, + 365, + 2, + 364, + 5, + "MASK" + ], + [ + 671, + 365, + 1, + 372, + 0, + "IMAGE" + ], + [ + 672, + 365, + 2, + 371, + 0, + "MASK" + ] + ], + "groups": [ + { + "id": 20, + "title": "ACE_Plus FFT Workflow", + "bounding": [ + -4893.498046875, + 1443.87890625, + 2592.630126953125, + 1121.891845703125 + ], + "color": "#3f789e", + "font_size": 40, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.7627768444385488, + "offset": [ + 5506.346756005007, + -1125.36817628918 + ] + }, + "ue_links": [], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file