huangfeice commited on
Commit
5cc8250
·
verified ·
1 Parent(s): a324fc8

Update ComfyUI workflow

Browse files
README.md CHANGED
@@ -1,82 +1,47 @@
1
  ---
 
 
 
 
2
  license: apache-2.0
3
  library_name: ComfyUI
4
  pipeline_tag: image-to-image
5
- tags:
6
- - comfyui
7
- - image-editing
8
- - joyai
9
  base_model: jdopensource/JoyAI-Image-Edit-Diffusers
10
  ---
11
 
12
- # JoyAI-Image-Edit (ComfyUI weights)
13
-
14
- Single-file `.safetensors` checkpoints of [JoyAI-Image-Edit](https://github.com/jd-opensource/JoyAI-Image), repackaged for **native ComfyUI** support (no custom node required).
15
-
16
- JoyAI-Image-Edit is the single-image instruction-guided editing model of the [JoyAI-Image](https://github.com/jd-opensource/JoyAI-Image) family. It takes one reference image plus a text instruction and generates the edited result.
17
-
18
- ## Files
19
 
20
- | File | Size | Goes into | Component |
21
- |------|------|-----------|-----------|
22
- | `diffusion_models/joy_image_edit_bf16.safetensors` | ~31 GB | `ComfyUI/models/diffusion_models/` | `JoyImageEditTransformer3DModel` (bf16) |
23
- | `text_encoders/qwen3vl_joyimage_bf16.safetensors` | ~17 GB | `ComfyUI/models/text_encoders/` | Qwen3-VL-8B text encoder (bf16) |
24
- | `vae/joy_image_edit_vae.safetensors` | ~243 MB | `ComfyUI/models/vae/` | `AutoencoderKLWan` |
25
 
26
- The repo's directory layout already matches `ComfyUI/models/`, so a single `hf download` into your models root drops every file where it needs to go.
27
 
28
- ## Installation
29
 
30
- The model runs natively in ComfyUI. Native support is proposed upstream in [Comfy-Org/ComfyUI#14428](https://github.com/Comfy-Org/ComfyUI/pull/14428); until it is merged, install the fork branch:
31
-
32
- ```bash
33
- git clone -b joyimage-edit-pr https://github.com/feice-huang/ComfyUI.git
34
- cd ComfyUI
35
- pip install -r requirements.txt
 
 
 
 
 
36
  ```
37
 
38
- Once the PR is merged upstream, the stock ComfyUI release will run these weights with no fork needed.
39
-
40
- Then download the weights straight into `ComfyUI/models/`:
41
 
42
  ```bash
43
  hf download jdopensource/JoyAI-Image-Edit-ComfyUI \
44
  --local-dir /path/to/ComfyUI/models
45
  ```
46
 
47
- Restart ComfyUI.
48
 
49
- ## Usage
50
-
51
- Build the graph from these native nodes:
52
-
53
- 1. **Load Diffusion Model** (`UNETLoader`) → `diffusion_models/joy_image_edit_bf16.safetensors`
54
- 2. **Load CLIP** (`CLIPLoader`) → `text_encoders/qwen3vl_joyimage_bf16.safetensors`, type `joyimage`
55
- 3. **Load VAE** (`VAELoader`) → `vae/joy_image_edit_vae.safetensors`
56
- 4. **Load Image** (`LoadImage`) for the reference
57
- 5. **TextEncodeJoyImageEdit** — feed `clip`, `vae`, the instruction, and the reference `image`. Wire one instance for the positive prompt and one (empty prompt, same image) for the negative. The node bucket-resizes the reference to the 1024-base buckets, VAE-encodes it, and appends the reference latent to the conditioning; its `image` output feeds `VAEDecode` / empty-latent sizing.
58
- 6. **KSampler** → **VAEDecode** → **SaveImage**
59
-
60
- Example workflow: [workflow_joyimage_edit.json](https://github.com/user-attachments/files/28871922/workflow_joyimage_edit.json)
61
-
62
- ## Recommended parameters
63
-
64
- | Parameter | Value |
65
- |-----------|-------|
66
- | Steps | 40 |
67
- | CFG | 4.0 |
68
- | Sampler | `euler` |
69
- | Scheduler | `simple` |
70
- | dtype | bf16 |
71
- | Resolution | auto (1024-base buckets) |
72
-
73
- ## GGUF quantizations
74
-
75
- Lower-bit GGUF quants of the transformer and text encoder are available at [huangfeice/JoyAI-Image-Edit-Diffusers-GGUF](https://huggingface.co/huangfeice/JoyAI-Image-Edit-Diffusers-GGUF) (community contribution). The VAE here is the only VAE you need — GGUF doesn't quantize the VAE.
76
 
77
  ## Links
78
 
79
  - Source code and documentation: [github.com/jd-opensource/JoyAI-Image](https://github.com/jd-opensource/JoyAI-Image)
80
  - Original Diffusers-format weights: [jdopensource/JoyAI-Image-Edit-Diffusers](https://huggingface.co/jdopensource/JoyAI-Image-Edit-Diffusers)
81
- - Multi-image edit model (ComfyUI): [jdopensource/JoyAI-Image-Edit-Plus-ComfyUI](https://huggingface.co/jdopensource/JoyAI-Image-Edit-Plus-ComfyUI)
82
-
 
1
  ---
2
+ tags:
3
+ - comfyui
4
+ - image-editing
5
+ - joyai
6
  license: apache-2.0
7
  library_name: ComfyUI
8
  pipeline_tag: image-to-image
 
 
 
 
9
  base_model: jdopensource/JoyAI-Image-Edit-Diffusers
10
  ---
11
 
12
+ # JoyAI-Image-Edit-ComfyUI
 
 
 
 
 
 
13
 
14
+ Repackaged model files for ComfyUI.
 
 
 
 
15
 
16
+ Original model repository: https://huggingface.co/jdopensource/JoyAI-Image-Edit-Diffusers
17
 
18
+ Place the files in the following folders:
19
 
20
+ ```
21
+ ComfyUI/
22
+ `-- models/
23
+ |-- diffusion_models/
24
+ | |-- joyai_image_edit_bf16.safetensors
25
+ | `-- joyai_image_edit_int8_convrot.safetensors
26
+ |-- text_encoders/
27
+ | |-- qwen3vl_8b_joyimage_edit_bf16.safetensors
28
+ | `-- qwen3vl_8b_joyimage_edit_int8_convrot.safetensors
29
+ `-- vae/
30
+ `-- wan_2.1_vae.safetensors
31
  ```
32
 
33
+ Download directly into `ComfyUI/models/`:
 
 
34
 
35
  ```bash
36
  hf download jdopensource/JoyAI-Image-Edit-ComfyUI \
37
  --local-dir /path/to/ComfyUI/models
38
  ```
39
 
40
+ Workflow: [workflow_joyimage_edit.json](workflow_joyimage_edit.json)
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
  ## Links
44
 
45
  - Source code and documentation: [github.com/jd-opensource/JoyAI-Image](https://github.com/jd-opensource/JoyAI-Image)
46
  - Original Diffusers-format weights: [jdopensource/JoyAI-Image-Edit-Diffusers](https://huggingface.co/jdopensource/JoyAI-Image-Edit-Diffusers)
47
+ - Multi-image edit model for ComfyUI: [jdopensource/JoyAI-Image-Edit-Plus-ComfyUI](https://huggingface.co/jdopensource/JoyAI-Image-Edit-Plus-ComfyUI)
 
{split_files/diffusion_models → diffusion_models}/joyai_image_edit_bf16.safetensors RENAMED
File without changes
diffusion_models/joyai_image_edit_int8_convrot.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:da8301c271764c63e018826f12c41c36d24c840c95c5385782bbf6a96268eeae
3
+ size 16433221208
split_files/text_encoders/qwen_3vl_8b_joyimage_bf16.safetensors → text_encoders/qwen3vl_8b_joyimage_edit_bf16.safetensors RENAMED
File without changes
text_encoders/qwen3vl_8b_joyimage_edit_int8_convrot.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:683de3ab15337afb9dcf19caaabb683a5ce53eb311eb302ff8eeaf4f553ad1a8
3
+ size 10064089100
{split_files/vae → vae}/wan_2.1_vae.safetensors RENAMED
File without changes
workflow_joyimage_edit.json ADDED
@@ -0,0 +1,1245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "b2c3d4e5-f6a7-4890-91bc-def012345678",
3
+ "revision": 0,
4
+ "last_node_id": 170,
5
+ "last_link_id": 500,
6
+ "nodes": [
7
+ {
8
+ "id": 82,
9
+ "type": "MarkdownNote",
10
+ "pos": [
11
+ -1270,
12
+ -370
13
+ ],
14
+ "size": [
15
+ 570,
16
+ 860
17
+ ],
18
+ "flags": {},
19
+ "order": 0,
20
+ "mode": 0,
21
+ "inputs": [],
22
+ "outputs": [],
23
+ "title": "Note: Model Links",
24
+ "properties": {},
25
+ "widgets_values": [
26
+ "## JoyImage Edit\n\nInstruction-guided image editing workflow with one reference image.\n\n## Model Links\n\nRepository: [jdopensource/JoyAI-Image-Edit-ComfyUI](https://huggingface.co/jdopensource/JoyAI-Image-Edit-ComfyUI)\n\n**diffusion_models**\n\n- [joyai_image_edit_bf16.safetensors](https://huggingface.co/jdopensource/JoyAI-Image-Edit-ComfyUI/resolve/main/diffusion_models/joyai_image_edit_bf16.safetensors)\n- [joyai_image_edit_int8_convrot.safetensors](https://huggingface.co/jdopensource/JoyAI-Image-Edit-ComfyUI/resolve/main/diffusion_models/joyai_image_edit_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_8b_joyimage_edit_bf16.safetensors](https://huggingface.co/jdopensource/JoyAI-Image-Edit-ComfyUI/resolve/main/text_encoders/qwen3vl_8b_joyimage_edit_bf16.safetensors)\n- [qwen3vl_8b_joyimage_edit_int8_convrot.safetensors](https://huggingface.co/jdopensource/JoyAI-Image-Edit-ComfyUI/resolve/main/text_encoders/qwen3vl_8b_joyimage_edit_int8_convrot.safetensors)\n\n**vae**\n\n- [wan_2.1_vae.safetensors](https://huggingface.co/jdopensource/JoyAI-Image-Edit-ComfyUI/resolve/main/vae/wan_2.1_vae.safetensors)\n\n## Test Image\n\n- [astronaut.jpg](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg)\n\n## Model Storage Location\n\n```\nComfyUI/\n`-- models/\n |-- diffusion_models/\n | |-- joyai_image_edit_bf16.safetensors\n | `-- joyai_image_edit_int8_convrot.safetensors\n |-- text_encoders/\n | |-- qwen3vl_8b_joyimage_edit_bf16.safetensors\n | `-- qwen3vl_8b_joyimage_edit_int8_convrot.safetensors\n `-- vae/\n `-- wan_2.1_vae.safetensors\n```\n\n## Defaults\n\n- Output size: `1024 x 1024`\n- Sampler: `euler / simple`\n- CFG: `4.0`\n"
27
+ ]
28
+ },
29
+ {
30
+ "id": 41,
31
+ "type": "LoadImage",
32
+ "pos": [
33
+ -640,
34
+ -370
35
+ ],
36
+ "size": [
37
+ 280,
38
+ 370
39
+ ],
40
+ "flags": {},
41
+ "order": 41,
42
+ "mode": 0,
43
+ "inputs": [],
44
+ "outputs": [
45
+ {
46
+ "name": "IMAGE",
47
+ "type": "IMAGE",
48
+ "links": [
49
+ 376
50
+ ]
51
+ },
52
+ {
53
+ "name": "MASK",
54
+ "type": "MASK",
55
+ "links": null
56
+ }
57
+ ],
58
+ "properties": {
59
+ "Node name for S&R": "LoadImage",
60
+ "cnr_id": "comfy-core",
61
+ "ver": "0.5.1"
62
+ },
63
+ "widgets_values": [
64
+ "astronaut.jpg",
65
+ "image"
66
+ ],
67
+ "title": "Reference image 1"
68
+ },
69
+ {
70
+ "id": 170,
71
+ "type": "7f6dd18d-96db-4ad7-a173-6f6d8a0c3d01",
72
+ "pos": [
73
+ -300,
74
+ -370
75
+ ],
76
+ "size": [
77
+ 460,
78
+ 720
79
+ ],
80
+ "flags": {},
81
+ "order": 10,
82
+ "mode": 0,
83
+ "inputs": [
84
+ {
85
+ "label": "image1",
86
+ "name": "image1",
87
+ "shape": 7,
88
+ "type": "IMAGE",
89
+ "link": 376
90
+ },
91
+ {
92
+ "label": "positive_prompt",
93
+ "name": "prompt",
94
+ "type": "STRING",
95
+ "widget": {
96
+ "name": "prompt"
97
+ },
98
+ "link": null
99
+ },
100
+ {
101
+ "label": "negative_prompt",
102
+ "name": "negative_prompt",
103
+ "type": "STRING",
104
+ "widget": {
105
+ "name": "negative_prompt"
106
+ },
107
+ "link": null
108
+ },
109
+ {
110
+ "label": "unet_name",
111
+ "name": "unet_name",
112
+ "type": "COMBO",
113
+ "widget": {
114
+ "name": "unet_name"
115
+ },
116
+ "link": null
117
+ },
118
+ {
119
+ "label": "clip_name",
120
+ "name": "clip_name",
121
+ "type": "COMBO",
122
+ "widget": {
123
+ "name": "clip_name"
124
+ },
125
+ "link": null
126
+ },
127
+ {
128
+ "label": "vae_name",
129
+ "name": "vae_name",
130
+ "type": "COMBO",
131
+ "widget": {
132
+ "name": "vae_name"
133
+ },
134
+ "link": null
135
+ },
136
+ {
137
+ "name": "seed",
138
+ "type": "INT",
139
+ "widget": {
140
+ "name": "seed"
141
+ },
142
+ "link": null
143
+ },
144
+ {
145
+ "name": "width",
146
+ "type": "INT",
147
+ "widget": {
148
+ "name": "width"
149
+ },
150
+ "link": null
151
+ },
152
+ {
153
+ "name": "height",
154
+ "type": "INT",
155
+ "widget": {
156
+ "name": "height"
157
+ },
158
+ "link": null
159
+ },
160
+ {
161
+ "name": "steps",
162
+ "type": "INT",
163
+ "widget": {
164
+ "name": "steps"
165
+ },
166
+ "link": null
167
+ },
168
+ {
169
+ "name": "cfg",
170
+ "type": "FLOAT",
171
+ "widget": {
172
+ "name": "cfg"
173
+ },
174
+ "link": null
175
+ }
176
+ ],
177
+ "outputs": [
178
+ {
179
+ "name": "IMAGE",
180
+ "type": "IMAGE",
181
+ "links": [
182
+ 500
183
+ ]
184
+ }
185
+ ],
186
+ "properties": {
187
+ "proxyWidgets": [
188
+ [
189
+ "6",
190
+ "prompt"
191
+ ],
192
+ [
193
+ "7",
194
+ "prompt"
195
+ ],
196
+ [
197
+ "3",
198
+ "unet_name"
199
+ ],
200
+ [
201
+ "4",
202
+ "clip_name"
203
+ ],
204
+ [
205
+ "5",
206
+ "vae_name"
207
+ ],
208
+ [
209
+ "10",
210
+ "seed"
211
+ ],
212
+ [
213
+ "10",
214
+ "control_after_generate"
215
+ ],
216
+ [
217
+ "8",
218
+ "width"
219
+ ],
220
+ [
221
+ "8",
222
+ "height"
223
+ ],
224
+ [
225
+ "10",
226
+ "steps"
227
+ ],
228
+ [
229
+ "10",
230
+ "cfg"
231
+ ]
232
+ ],
233
+ "cnr_id": "comfy-core",
234
+ "ver": "0.16.4"
235
+ },
236
+ "widgets_values": [],
237
+ "title": "JoyImage Edit"
238
+ },
239
+ {
240
+ "id": 9,
241
+ "type": "SaveImage",
242
+ "pos": [
243
+ 250,
244
+ -370
245
+ ],
246
+ "size": [
247
+ 580,
248
+ 410
249
+ ],
250
+ "flags": {},
251
+ "order": 11,
252
+ "mode": 0,
253
+ "inputs": [
254
+ {
255
+ "name": "images",
256
+ "type": "IMAGE",
257
+ "link": 500
258
+ },
259
+ {
260
+ "name": "filename_prefix",
261
+ "type": "STRING",
262
+ "widget": {
263
+ "name": "filename_prefix"
264
+ },
265
+ "link": null
266
+ }
267
+ ],
268
+ "outputs": [
269
+ {
270
+ "name": "IMAGE",
271
+ "type": "IMAGE",
272
+ "links": null
273
+ }
274
+ ],
275
+ "properties": {
276
+ "Node name for S&R": "SaveImage",
277
+ "cnr_id": "comfy-core",
278
+ "ver": "0.5.1"
279
+ },
280
+ "widgets_values": [
281
+ "JoyAI_ImageEdit"
282
+ ]
283
+ }
284
+ ],
285
+ "links": [
286
+ [
287
+ 376,
288
+ 41,
289
+ 0,
290
+ 170,
291
+ 0,
292
+ "IMAGE"
293
+ ],
294
+ [
295
+ 500,
296
+ 170,
297
+ 0,
298
+ 9,
299
+ 0,
300
+ "IMAGE"
301
+ ]
302
+ ],
303
+ "groups": [],
304
+ "definitions": {
305
+ "subgraphs": [
306
+ {
307
+ "id": "7f6dd18d-96db-4ad7-a173-6f6d8a0c3d01",
308
+ "version": 1,
309
+ "state": {
310
+ "lastGroupId": 3,
311
+ "lastNodeId": 11,
312
+ "lastLinkId": 223,
313
+ "lastRerouteId": 0
314
+ },
315
+ "revision": 0,
316
+ "config": {},
317
+ "name": "JoyImage Edit",
318
+ "inputNode": {
319
+ "id": -10,
320
+ "bounding": [
321
+ -1620,
322
+ 2950,
323
+ 159.744140625,
324
+ 320
325
+ ]
326
+ },
327
+ "outputNode": {
328
+ "id": -20,
329
+ "bounding": [
330
+ 720,
331
+ 2690,
332
+ 128,
333
+ 68
334
+ ]
335
+ },
336
+ "inputs": [
337
+ {
338
+ "id": "image1",
339
+ "name": "image1",
340
+ "type": "IMAGE",
341
+ "linkIds": [
342
+ 222,
343
+ 223
344
+ ],
345
+ "pos": [
346
+ -1484.255859375,
347
+ 2974
348
+ ],
349
+ "label": "image1",
350
+ "shape": 7
351
+ },
352
+ {
353
+ "id": "prompt",
354
+ "name": "prompt",
355
+ "type": "STRING",
356
+ "linkIds": [
357
+ 212
358
+ ],
359
+ "pos": [
360
+ -1484.255859375,
361
+ 2994
362
+ ],
363
+ "label": "positive_prompt"
364
+ },
365
+ {
366
+ "id": "negative",
367
+ "name": "negative_prompt",
368
+ "type": "STRING",
369
+ "linkIds": [
370
+ 213
371
+ ],
372
+ "pos": [
373
+ -1484.255859375,
374
+ 3014
375
+ ],
376
+ "label": "negative_prompt"
377
+ },
378
+ {
379
+ "id": "unet",
380
+ "name": "unet_name",
381
+ "type": "COMBO",
382
+ "linkIds": [
383
+ 214
384
+ ],
385
+ "pos": [
386
+ -1484.255859375,
387
+ 3034
388
+ ]
389
+ },
390
+ {
391
+ "id": "clip",
392
+ "name": "clip_name",
393
+ "type": "COMBO",
394
+ "linkIds": [
395
+ 215
396
+ ],
397
+ "pos": [
398
+ -1484.255859375,
399
+ 3054
400
+ ]
401
+ },
402
+ {
403
+ "id": "vae",
404
+ "name": "vae_name",
405
+ "type": "COMBO",
406
+ "linkIds": [
407
+ 216
408
+ ],
409
+ "pos": [
410
+ -1484.255859375,
411
+ 3074
412
+ ]
413
+ },
414
+ {
415
+ "id": "seed",
416
+ "name": "seed",
417
+ "type": "INT",
418
+ "linkIds": [
419
+ 217
420
+ ],
421
+ "pos": [
422
+ -1484.255859375,
423
+ 3094
424
+ ]
425
+ },
426
+ {
427
+ "id": "width",
428
+ "name": "width",
429
+ "type": "INT",
430
+ "linkIds": [
431
+ 218
432
+ ],
433
+ "pos": [
434
+ -1484.255859375,
435
+ 3114
436
+ ]
437
+ },
438
+ {
439
+ "id": "height",
440
+ "name": "height",
441
+ "type": "INT",
442
+ "linkIds": [
443
+ 219
444
+ ],
445
+ "pos": [
446
+ -1484.255859375,
447
+ 3134
448
+ ]
449
+ },
450
+ {
451
+ "id": "steps",
452
+ "name": "steps",
453
+ "type": "INT",
454
+ "linkIds": [
455
+ 220
456
+ ],
457
+ "pos": [
458
+ -1484.255859375,
459
+ 3154
460
+ ]
461
+ },
462
+ {
463
+ "id": "cfg",
464
+ "name": "cfg",
465
+ "type": "FLOAT",
466
+ "linkIds": [
467
+ 221
468
+ ],
469
+ "pos": [
470
+ -1484.255859375,
471
+ 3174
472
+ ]
473
+ }
474
+ ],
475
+ "outputs": [
476
+ {
477
+ "id": "out",
478
+ "name": "IMAGE",
479
+ "type": "IMAGE",
480
+ "linkIds": [
481
+ 211
482
+ ],
483
+ "localized_name": "IMAGE",
484
+ "pos": [
485
+ 720,
486
+ 2714
487
+ ]
488
+ }
489
+ ],
490
+ "widgets": [],
491
+ "nodes": [
492
+ {
493
+ "id": 3,
494
+ "type": "UNETLoader",
495
+ "pos": [
496
+ -1080,
497
+ 2700
498
+ ],
499
+ "size": [
500
+ 400,
501
+ 136
502
+ ],
503
+ "flags": {},
504
+ "order": 1,
505
+ "mode": 0,
506
+ "inputs": [
507
+ {
508
+ "name": "unet_name",
509
+ "type": "COMBO",
510
+ "widget": {
511
+ "name": "unet_name"
512
+ },
513
+ "link": 214
514
+ },
515
+ {
516
+ "name": "weight_dtype",
517
+ "type": "COMBO",
518
+ "widget": {
519
+ "name": "weight_dtype"
520
+ },
521
+ "link": null
522
+ }
523
+ ],
524
+ "outputs": [
525
+ {
526
+ "name": "MODEL",
527
+ "type": "MODEL",
528
+ "links": [
529
+ 201
530
+ ]
531
+ }
532
+ ],
533
+ "properties": {
534
+ "Node name for S&R": "UNETLoader",
535
+ "cnr_id": "comfy-core",
536
+ "ver": "0.5.1"
537
+ },
538
+ "widgets_values": [
539
+ "joyai_image_edit_bf16.safetensors",
540
+ "default"
541
+ ]
542
+ },
543
+ {
544
+ "id": 4,
545
+ "type": "CLIPLoader",
546
+ "pos": [
547
+ -1080,
548
+ 2900
549
+ ],
550
+ "size": [
551
+ 400,
552
+ 168
553
+ ],
554
+ "flags": {},
555
+ "order": 2,
556
+ "mode": 0,
557
+ "inputs": [
558
+ {
559
+ "name": "clip_name",
560
+ "type": "COMBO",
561
+ "widget": {
562
+ "name": "clip_name"
563
+ },
564
+ "link": 215
565
+ },
566
+ {
567
+ "name": "type",
568
+ "type": "COMBO",
569
+ "widget": {
570
+ "name": "type"
571
+ },
572
+ "link": null
573
+ },
574
+ {
575
+ "name": "device",
576
+ "shape": 7,
577
+ "type": "COMBO",
578
+ "widget": {
579
+ "name": "device"
580
+ },
581
+ "link": null
582
+ }
583
+ ],
584
+ "outputs": [
585
+ {
586
+ "name": "CLIP",
587
+ "type": "CLIP",
588
+ "links": [
589
+ 202,
590
+ 203
591
+ ]
592
+ }
593
+ ],
594
+ "properties": {
595
+ "Node name for S&R": "CLIPLoader",
596
+ "cnr_id": "comfy-core",
597
+ "ver": "0.5.1"
598
+ },
599
+ "widgets_values": [
600
+ "qwen3vl_8b_joyimage_edit_bf16.safetensors",
601
+ "joyimage",
602
+ "default"
603
+ ]
604
+ },
605
+ {
606
+ "id": 5,
607
+ "type": "VAELoader",
608
+ "pos": [
609
+ -1080,
610
+ 3160
611
+ ],
612
+ "size": [
613
+ 400,
614
+ 110
615
+ ],
616
+ "flags": {},
617
+ "order": 3,
618
+ "mode": 0,
619
+ "inputs": [
620
+ {
621
+ "name": "vae_name",
622
+ "type": "COMBO",
623
+ "widget": {
624
+ "name": "vae_name"
625
+ },
626
+ "link": 216
627
+ }
628
+ ],
629
+ "outputs": [
630
+ {
631
+ "name": "VAE",
632
+ "type": "VAE",
633
+ "links": [
634
+ 204,
635
+ 205,
636
+ 206
637
+ ]
638
+ }
639
+ ],
640
+ "properties": {
641
+ "Node name for S&R": "VAELoader",
642
+ "cnr_id": "comfy-core",
643
+ "ver": "0.5.1"
644
+ },
645
+ "widgets_values": [
646
+ "wan_2.1_vae.safetensors"
647
+ ]
648
+ },
649
+ {
650
+ "id": 6,
651
+ "type": "TextEncodeJoyImageEdit",
652
+ "pos": [
653
+ -580,
654
+ 2700
655
+ ],
656
+ "size": [
657
+ 440,
658
+ 220
659
+ ],
660
+ "flags": {},
661
+ "order": 6,
662
+ "mode": 0,
663
+ "inputs": [
664
+ {
665
+ "name": "clip",
666
+ "type": "CLIP",
667
+ "link": 202
668
+ },
669
+ {
670
+ "name": "vae",
671
+ "shape": 7,
672
+ "type": "VAE",
673
+ "link": 204
674
+ },
675
+ {
676
+ "label": "image1",
677
+ "localized_name": "images.image0",
678
+ "name": "images.image0",
679
+ "shape": 7,
680
+ "type": "IMAGE",
681
+ "link": 222
682
+ },
683
+ {
684
+ "localized_name": "prompt",
685
+ "name": "prompt",
686
+ "type": "STRING",
687
+ "widget": {
688
+ "name": "prompt"
689
+ },
690
+ "link": 212
691
+ }
692
+ ],
693
+ "outputs": [
694
+ {
695
+ "localized_name": "CONDITIONING",
696
+ "name": "CONDITIONING",
697
+ "type": "CONDITIONING",
698
+ "links": [
699
+ 207
700
+ ]
701
+ }
702
+ ],
703
+ "title": "Positive",
704
+ "properties": {
705
+ "Node name for S&R": "TextEncodeJoyImageEdit",
706
+ "cnr_id": "comfy-core",
707
+ "ver": "0.3.50"
708
+ },
709
+ "widgets_values": [
710
+ "Add wings to the astronaut."
711
+ ]
712
+ },
713
+ {
714
+ "id": 7,
715
+ "type": "TextEncodeJoyImageEdit",
716
+ "pos": [
717
+ -580,
718
+ 2960
719
+ ],
720
+ "size": [
721
+ 440,
722
+ 220
723
+ ],
724
+ "flags": {},
725
+ "order": 7,
726
+ "mode": 0,
727
+ "inputs": [
728
+ {
729
+ "name": "clip",
730
+ "type": "CLIP",
731
+ "link": 203
732
+ },
733
+ {
734
+ "name": "vae",
735
+ "shape": 7,
736
+ "type": "VAE",
737
+ "link": 205
738
+ },
739
+ {
740
+ "label": "image1",
741
+ "localized_name": "images.image0",
742
+ "name": "images.image0",
743
+ "shape": 7,
744
+ "type": "IMAGE",
745
+ "link": 223
746
+ },
747
+ {
748
+ "localized_name": "prompt",
749
+ "name": "prompt",
750
+ "type": "STRING",
751
+ "widget": {
752
+ "name": "prompt"
753
+ },
754
+ "link": 213
755
+ }
756
+ ],
757
+ "outputs": [
758
+ {
759
+ "localized_name": "CONDITIONING",
760
+ "name": "CONDITIONING",
761
+ "type": "CONDITIONING",
762
+ "links": [
763
+ 208
764
+ ]
765
+ }
766
+ ],
767
+ "title": "Negative",
768
+ "properties": {
769
+ "Node name for S&R": "TextEncodeJoyImageEdit",
770
+ "cnr_id": "comfy-core",
771
+ "ver": "0.3.50"
772
+ },
773
+ "widgets_values": [
774
+ ""
775
+ ]
776
+ },
777
+ {
778
+ "id": 8,
779
+ "type": "EmptySD3LatentImage",
780
+ "pos": [
781
+ -580,
782
+ 3460
783
+ ],
784
+ "size": [
785
+ 320,
786
+ 130
787
+ ],
788
+ "flags": {},
789
+ "order": 8,
790
+ "mode": 0,
791
+ "inputs": [
792
+ {
793
+ "name": "width",
794
+ "type": "INT",
795
+ "widget": {
796
+ "name": "width"
797
+ },
798
+ "link": 218
799
+ },
800
+ {
801
+ "name": "height",
802
+ "type": "INT",
803
+ "widget": {
804
+ "name": "height"
805
+ },
806
+ "link": 219
807
+ },
808
+ {
809
+ "name": "batch_size",
810
+ "type": "INT",
811
+ "widget": {
812
+ "name": "batch_size"
813
+ },
814
+ "link": null
815
+ }
816
+ ],
817
+ "outputs": [
818
+ {
819
+ "name": "LATENT",
820
+ "type": "LATENT",
821
+ "links": [
822
+ 209
823
+ ]
824
+ }
825
+ ],
826
+ "properties": {
827
+ "Node name for S&R": "EmptySD3LatentImage",
828
+ "cnr_id": "comfy-core",
829
+ "ver": "0.3.50"
830
+ },
831
+ "widgets_values": [
832
+ 1024,
833
+ 1024,
834
+ 1
835
+ ],
836
+ "title": "Output latent"
837
+ },
838
+ {
839
+ "id": 10,
840
+ "type": "KSampler",
841
+ "pos": [
842
+ 80,
843
+ 2700
844
+ ],
845
+ "size": [
846
+ 300,
847
+ 474
848
+ ],
849
+ "flags": {},
850
+ "order": 9,
851
+ "mode": 0,
852
+ "inputs": [
853
+ {
854
+ "localized_name": "model",
855
+ "name": "model",
856
+ "type": "MODEL",
857
+ "link": 201
858
+ },
859
+ {
860
+ "localized_name": "positive",
861
+ "name": "positive",
862
+ "type": "CONDITIONING",
863
+ "link": 207
864
+ },
865
+ {
866
+ "localized_name": "negative",
867
+ "name": "negative",
868
+ "type": "CONDITIONING",
869
+ "link": 208
870
+ },
871
+ {
872
+ "localized_name": "latent_image",
873
+ "name": "latent_image",
874
+ "type": "LATENT",
875
+ "link": 209
876
+ },
877
+ {
878
+ "localized_name": "seed",
879
+ "name": "seed",
880
+ "type": "INT",
881
+ "widget": {
882
+ "name": "seed"
883
+ },
884
+ "link": 217
885
+ },
886
+ {
887
+ "localized_name": "steps",
888
+ "name": "steps",
889
+ "type": "INT",
890
+ "widget": {
891
+ "name": "steps"
892
+ },
893
+ "link": 220
894
+ },
895
+ {
896
+ "localized_name": "cfg",
897
+ "name": "cfg",
898
+ "type": "FLOAT",
899
+ "widget": {
900
+ "name": "cfg"
901
+ },
902
+ "link": 221
903
+ },
904
+ {
905
+ "localized_name": "sampler_name",
906
+ "name": "sampler_name",
907
+ "type": "COMBO",
908
+ "widget": {
909
+ "name": "sampler_name"
910
+ },
911
+ "link": null
912
+ },
913
+ {
914
+ "localized_name": "scheduler",
915
+ "name": "scheduler",
916
+ "type": "COMBO",
917
+ "widget": {
918
+ "name": "scheduler"
919
+ },
920
+ "link": null
921
+ },
922
+ {
923
+ "localized_name": "denoise",
924
+ "name": "denoise",
925
+ "type": "FLOAT",
926
+ "widget": {
927
+ "name": "denoise"
928
+ },
929
+ "link": null
930
+ }
931
+ ],
932
+ "outputs": [
933
+ {
934
+ "localized_name": "LATENT",
935
+ "name": "LATENT",
936
+ "type": "LATENT",
937
+ "links": [
938
+ 210
939
+ ]
940
+ }
941
+ ],
942
+ "properties": {
943
+ "Node name for S&R": "KSampler",
944
+ "cnr_id": "comfy-core",
945
+ "ver": "0.5.1"
946
+ },
947
+ "widgets_values": [
948
+ 42,
949
+ "fixed",
950
+ 40,
951
+ 4.0,
952
+ "euler",
953
+ "simple",
954
+ 1
955
+ ]
956
+ },
957
+ {
958
+ "id": 11,
959
+ "type": "VAEDecode",
960
+ "pos": [
961
+ 440,
962
+ 2700
963
+ ],
964
+ "size": [
965
+ 230,
966
+ 100
967
+ ],
968
+ "flags": {},
969
+ "order": 10,
970
+ "mode": 0,
971
+ "inputs": [
972
+ {
973
+ "localized_name": "samples",
974
+ "name": "samples",
975
+ "type": "LATENT",
976
+ "link": 210
977
+ },
978
+ {
979
+ "localized_name": "vae",
980
+ "name": "vae",
981
+ "type": "VAE",
982
+ "link": 206
983
+ }
984
+ ],
985
+ "outputs": [
986
+ {
987
+ "name": "IMAGE",
988
+ "type": "IMAGE",
989
+ "links": [
990
+ 211
991
+ ]
992
+ }
993
+ ],
994
+ "properties": {
995
+ "Node name for S&R": "VAEDecode",
996
+ "cnr_id": "comfy-core",
997
+ "ver": "0.5.1"
998
+ },
999
+ "widgets_values": []
1000
+ }
1001
+ ],
1002
+ "groups": [
1003
+ {
1004
+ "id": 1,
1005
+ "title": "Models",
1006
+ "bounding": [
1007
+ -1110,
1008
+ 2580,
1009
+ 460,
1010
+ 720
1011
+ ],
1012
+ "color": "#3f789e",
1013
+ "flags": {}
1014
+ },
1015
+ {
1016
+ "id": 2,
1017
+ "title": "Prompt",
1018
+ "bounding": [
1019
+ -620,
1020
+ 2580,
1021
+ 520,
1022
+ 520
1023
+ ],
1024
+ "color": "#3f789e",
1025
+ "flags": {}
1026
+ },
1027
+ {
1028
+ "id": 3,
1029
+ "title": "Sample",
1030
+ "bounding": [
1031
+ 40,
1032
+ 2580,
1033
+ 660,
1034
+ 720
1035
+ ],
1036
+ "color": "#3f789e",
1037
+ "flags": {}
1038
+ }
1039
+ ],
1040
+ "links": [
1041
+ {
1042
+ "id": 201,
1043
+ "origin_id": 3,
1044
+ "origin_slot": 0,
1045
+ "target_id": 10,
1046
+ "target_slot": 0,
1047
+ "type": "MODEL"
1048
+ },
1049
+ {
1050
+ "id": 202,
1051
+ "origin_id": 4,
1052
+ "origin_slot": 0,
1053
+ "target_id": 6,
1054
+ "target_slot": 0,
1055
+ "type": "CLIP"
1056
+ },
1057
+ {
1058
+ "id": 203,
1059
+ "origin_id": 4,
1060
+ "origin_slot": 0,
1061
+ "target_id": 7,
1062
+ "target_slot": 0,
1063
+ "type": "CLIP"
1064
+ },
1065
+ {
1066
+ "id": 204,
1067
+ "origin_id": 5,
1068
+ "origin_slot": 0,
1069
+ "target_id": 6,
1070
+ "target_slot": 1,
1071
+ "type": "VAE"
1072
+ },
1073
+ {
1074
+ "id": 205,
1075
+ "origin_id": 5,
1076
+ "origin_slot": 0,
1077
+ "target_id": 7,
1078
+ "target_slot": 1,
1079
+ "type": "VAE"
1080
+ },
1081
+ {
1082
+ "id": 206,
1083
+ "origin_id": 5,
1084
+ "origin_slot": 0,
1085
+ "target_id": 11,
1086
+ "target_slot": 1,
1087
+ "type": "VAE"
1088
+ },
1089
+ {
1090
+ "id": 207,
1091
+ "origin_id": 6,
1092
+ "origin_slot": 0,
1093
+ "target_id": 10,
1094
+ "target_slot": 1,
1095
+ "type": "CONDITIONING"
1096
+ },
1097
+ {
1098
+ "id": 208,
1099
+ "origin_id": 7,
1100
+ "origin_slot": 0,
1101
+ "target_id": 10,
1102
+ "target_slot": 2,
1103
+ "type": "CONDITIONING"
1104
+ },
1105
+ {
1106
+ "id": 209,
1107
+ "origin_id": 8,
1108
+ "origin_slot": 0,
1109
+ "target_id": 10,
1110
+ "target_slot": 3,
1111
+ "type": "LATENT"
1112
+ },
1113
+ {
1114
+ "id": 210,
1115
+ "origin_id": 10,
1116
+ "origin_slot": 0,
1117
+ "target_id": 11,
1118
+ "target_slot": 0,
1119
+ "type": "LATENT"
1120
+ },
1121
+ {
1122
+ "id": 211,
1123
+ "origin_id": 11,
1124
+ "origin_slot": 0,
1125
+ "target_id": -20,
1126
+ "target_slot": 0,
1127
+ "type": "IMAGE"
1128
+ },
1129
+ {
1130
+ "id": 212,
1131
+ "origin_id": -10,
1132
+ "origin_slot": 1,
1133
+ "target_id": 6,
1134
+ "target_slot": 3,
1135
+ "type": "STRING"
1136
+ },
1137
+ {
1138
+ "id": 213,
1139
+ "origin_id": -10,
1140
+ "origin_slot": 2,
1141
+ "target_id": 7,
1142
+ "target_slot": 3,
1143
+ "type": "STRING"
1144
+ },
1145
+ {
1146
+ "id": 214,
1147
+ "origin_id": -10,
1148
+ "origin_slot": 3,
1149
+ "target_id": 3,
1150
+ "target_slot": 0,
1151
+ "type": "COMBO"
1152
+ },
1153
+ {
1154
+ "id": 215,
1155
+ "origin_id": -10,
1156
+ "origin_slot": 4,
1157
+ "target_id": 4,
1158
+ "target_slot": 0,
1159
+ "type": "COMBO"
1160
+ },
1161
+ {
1162
+ "id": 216,
1163
+ "origin_id": -10,
1164
+ "origin_slot": 5,
1165
+ "target_id": 5,
1166
+ "target_slot": 0,
1167
+ "type": "COMBO"
1168
+ },
1169
+ {
1170
+ "id": 217,
1171
+ "origin_id": -10,
1172
+ "origin_slot": 6,
1173
+ "target_id": 10,
1174
+ "target_slot": 4,
1175
+ "type": "INT"
1176
+ },
1177
+ {
1178
+ "id": 218,
1179
+ "origin_id": -10,
1180
+ "origin_slot": 7,
1181
+ "target_id": 8,
1182
+ "target_slot": 0,
1183
+ "type": "INT"
1184
+ },
1185
+ {
1186
+ "id": 219,
1187
+ "origin_id": -10,
1188
+ "origin_slot": 8,
1189
+ "target_id": 8,
1190
+ "target_slot": 1,
1191
+ "type": "INT"
1192
+ },
1193
+ {
1194
+ "id": 220,
1195
+ "origin_id": -10,
1196
+ "origin_slot": 9,
1197
+ "target_id": 10,
1198
+ "target_slot": 5,
1199
+ "type": "INT"
1200
+ },
1201
+ {
1202
+ "id": 221,
1203
+ "origin_id": -10,
1204
+ "origin_slot": 10,
1205
+ "target_id": 10,
1206
+ "target_slot": 6,
1207
+ "type": "FLOAT"
1208
+ },
1209
+ {
1210
+ "id": 222,
1211
+ "origin_id": -10,
1212
+ "origin_slot": 0,
1213
+ "target_id": 6,
1214
+ "target_slot": 2,
1215
+ "type": "IMAGE"
1216
+ },
1217
+ {
1218
+ "id": 223,
1219
+ "origin_id": -10,
1220
+ "origin_slot": 0,
1221
+ "target_id": 7,
1222
+ "target_slot": 2,
1223
+ "type": "IMAGE"
1224
+ }
1225
+ ],
1226
+ "extra": {
1227
+ "workflowRendererVersion": "LG"
1228
+ }
1229
+ }
1230
+ ]
1231
+ },
1232
+ "config": {},
1233
+ "extra": {
1234
+ "ds": {
1235
+ "scale": 0.75,
1236
+ "offset": [
1237
+ 500,
1238
+ 250
1239
+ ]
1240
+ },
1241
+ "frontendVersion": "1.41.16",
1242
+ "workflowRendererVersion": "LG"
1243
+ },
1244
+ "version": 0.4
1245
+ }