ComfyPilotComfyPilot
工作流 / 图像 / FLUX 3 Image Klein 蒸馏版:图像编辑
FLUX 3 Image Klein 蒸馏版:图像编辑

FLUX 3 Image Klein 蒸馏版:图像编辑

FLUX 3 Image Klein Distilled: Image Edit

使用 FLUX 3 Image Klein 编辑现有图像:将一张输入图像与一个提示词配对,生成单个编辑结果和并排对比视图。非常适合针对性修饰、照片风格重塑,或在保持场景其余部分不变的情况下替换细节。

图像 24 个节点 1 个输入 527 次使用 ComfyUI ≥ 0.41.0 ComfyUI 37 KB

下载工作流 JSON 查看官方来源

下载后把文件拖进 ComfyUI 窗口即可打开。

需要的权重

这个工作流引用了 4 个权重文件,其中 2 个能在本站模型库里找到。

flux2-vae.safetensors 在模型库查看
flux3-image-klein-int8-convrot.safetensors 模型库暂未收录
qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors 模型库暂未收录
qwen3vl_4b_int8_convrot.safetensors 在模型库查看

节点构成

MarkdownNote × 3
CLIPLoader × 2
PreviewAny × 2
UNETLoader × 1
VAELoader × 1
CLIPTextEncode × 1
KSampler × 1
VAEDecode × 1
SaveImage × 1
LoadImage × 1
ReferenceMultiLatent × 1
ImageCompare × 1
ConditioningZeroOut × 1
CreateBoundingBoxes × 1
EmptyFlux2LatentImage × 1
TextGenerate × 1

官方标注的模型

FLUX 3 Image

工作流 JSON

和上面「下载工作流 JSON」是同一份文件。

1{
2 "id": "0ae2b50b-b07a-4465-bb7c-d8fe58e8e0ac",
3 "revision": 0,
4 "last_node_id": 53,
5 "last_link_id": 72,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "UNETLoader",
10 "pos": [
11 -100,
12 -140
13 ],
14 "size": [
15 440,
16 90
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "name": "MODEL",
25 "type": "MODEL",
26 "slot_index": 0,
27 "links": [
28 1
29 ]
30 }
31 ],
32 "properties": {
33 "Node name for S&R": "UNETLoader",
34 "models": [
35 {
36 "name": "flux3-image-klein-int8-convrot.safetensors",
37 "url": "https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/diffusion_models/flux3-image-klein-int8-convrot.safetensors",
38 "directory": "diffusion_models"
39 }
40 ]
41 },
42 "widgets_values": [
43 "flux3-image-klein-int8-convrot.safetensors",
44 "default"
45 ],
46 "widgets_values_named": {
47 "unet_name": "flux3-image-klein-int8-convrot.safetensors",
48 "weight_dtype": "default"
49 }
50 },
51 {
52 "id": 2,
53 "type": "CLIPLoader",
54 "pos": [
55 -100,
56 20
57 ],
58 "size": [
59 440,
60 120
61 ],
62 "flags": [],
63 "order": 1,
64 "mode": 0,
65 "inputs": [],
66 "outputs": [
67 {
68 "name": "CLIP",
69 "type": "CLIP",
70 "slot_index": 0,
71 "links": [
72 43
73 ]
74 }
75 ],
76 "properties": {
77 "Node name for S&R": "CLIPLoader",
78 "models": [
79 {
80 "name": "qwen3vl_4b_int8_convrot.safetensors",
81 "url": "https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/text_encoders/qwen3vl_4b_int8_convrot.safetensors",
82 "directory": "text_encoders"
83 }
84 ]
85 },
86 "widgets_values": [
87 "qwen3vl_4b_int8_convrot.safetensors",
88 "flux3",
89 "default"
90 ],
91 "widgets_values_named": {
92 "clip_name": "qwen3vl_4b_int8_convrot.safetensors",
93 "type": "flux3",
94 "device": "default"
95 }
96 },
97 {
98 "id": 3,
99 "type": "VAELoader",
100 "pos": [
101 -100,
102 210
103 ],
104 "size": [
105 450,
106 70
107 ],
108 "flags": [],
109 "order": 2,
110 "mode": 0,
111 "inputs": [],
112 "outputs": [
113 {
114 "name": "VAE",
115 "type": "VAE",
116 "slot_index": 0,
117 "links": [
118 5,
119 25
120 ]
121 }
122 ],
123 "properties": {
124 "Node name for S&R": "VAELoader",
125 "models": [
126 {
127 "name": "flux2-vae.safetensors",
128 "url": "https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/vae/flux2-vae.safetensors",
129 "directory": "vae"
130 }
131 ]
132 },
133 "widgets_values": [
134 "flux2-vae.safetensors"
135 ],
136 "widgets_values_named": {
137 "vae_name": "flux2-vae.safetensors"
138 }
139 },
140 {
141 "id": 4,
142 "type": "CLIPTextEncode",
143 "pos": [
144 420,
145 -140
146 ],
147 "size": [
148 430,
149 370
150 ],
151 "flags": [],
152 "order": 18,
153 "mode": 0,
154 "inputs": [
155 {
156 "name": "clip",
157 "type": "CLIP",
158 "link": 43
159 },
160 {
161 "name": "text",
162 "type": "STRING",
163 "widget": {
164 "name": "text"
165 },
166 "link": 70
167 }
168 ],
169 "outputs": [
170 {
171 "name": "CONDITIONING",
172 "type": "CONDITIONING",
173 "slot_index": 0,
174 "links": [
175 20,
176 44
177 ]
178 }
179 ],
180 "title": "Positive Prompt",
181 "properties": {
182 "Node name for S&R": "CLIPTextEncode"
183 },
184 "widgets_values": [
185 ""
186 ],
187 "widgets_values_named": {
188 "text": ""
189 }
190 },
191 {
192 "id": 7,
193 "type": "KSampler",
194 "pos": [
195 1440,
196 -170
197 ],
198 "size": [
199 340,
200 520
201 ],
202 "flags": [],
203 "order": 21,
204 "mode": 0,
205 "inputs": [
206 {
207 "name": "model",
208 "type": "MODEL",
209 "link": 1
210 },
211 {
212 "name": "positive",
213 "type": "CONDITIONING",
214 "link": 22
215 },
216 {
217 "name": "negative",
218 "type": "CONDITIONING",
219 "link": 23
220 },
221 {
222 "name": "latent_image",
223 "type": "LATENT",
224 "link": 24
225 }
226 ],
227 "outputs": [
228 {
229 "name": "LATENT",
230 "type": "LATENT",
231 "slot_index": 0,
232 "links": [
233 4
234 ]
235 }
236 ],
237 "properties": {
238 "Node name for S&R": "KSampler"
239 },
240 "widgets_values": [
241 563228241303057,
242 "randomize",
243 16,
244 1,
245 "euler",
246 "simple",
247 1
248 ],
249 "widgets_values_named": {
250 "seed": 563228241303057,
251 "control_after_generate": "randomize",
252 "steps": 16,
253 "cfg": 1,
254 "sampler_name": "euler",
255 "scheduler": "simple",
256 "denoise": 1
257 }
258 },
259 {
260 "id": 8,
261 "type": "VAEDecode",
262 "pos": [
263 1870,
264 -210
265 ],
266 "size": [
267 210,
268 50
269 ],
270 "flags": {
271 "collapsed": false
272 },
273 "order": 22,
274 "mode": 0,
275 "inputs": [
276 {
277 "name": "samples",
278 "type": "LATENT",
279 "link": 4
280 },
281 {
282 "name": "vae",
283 "type": "VAE",
284 "link": 5
285 }
286 ],
287 "outputs": [
288 {
289 "name": "IMAGE",
290 "type": "IMAGE",
291 "slot_index": 0,
292 "links": [
293 6
294 ]
295 }
296 ],
297 "properties": {
298 "Node name for S&R": "VAEDecode"
299 }
300 },
301 {
302 "id": 9,
303 "type": "SaveImage",
304 "pos": [
305 2160,
306 -210
307 ],
308 "size": [
309 530,
310 620
311 ],
312 "flags": [],
313 "order": 23,
314 "mode": 0,
315 "inputs": [
316 {
317 "name": "images",
318 "type": "IMAGE",
319 "link": 6
320 }
321 ],
322 "outputs": [
323 {
324 "name": "images",
325 "type": "IMAGE",
326 "links": [
327 30
328 ]
329 }
330 ],
331 "properties": {
332 "Node name for S&R": "SaveImage"
333 },
334 "widgets_values": [
335 "image_flux3_klein_distilled_image_edit"
336 ],
337 "widgets_values_named": {
338 "filename_prefix": "image_flux3_klein_distilled_image_edit"
339 }
340 },
341 {
342 "id": 10,
343 "type": "MarkdownNote",
344 "pos": [
345 -1060,
346 -210
347 ],
348 "size": [
349 360,
350 270
351 ],
352 "flags": [],
353 "order": 3,
354 "mode": 0,
355 "inputs": [],
356 "outputs": [],
357 "title": "Notes",
358 "properties": {
359 "Node name for S&R": "MarkdownNote"
360 },
361 "widgets_values": [
362 "## FLUX 3 Image Klein: editing\n\nSame files and sampler settings as text-to-image (50 steps, cfg 3.5, euler / simple).\n\n**References**: plug more input image to the `Set Reference Multi Latent` node, the first one is `<ref_image_0>` in the prompt, the next `<ref_image_1>`, and so on. Add every reference to **both** the positive and the negative, as the reference pipeline does.\n\n**Size**: the reference is scaled to ~1 MP here and the output latent takes its size. BFL's pipeline keeps references at native size (up to ~16 MP): raise the megapixels for more reference detail at a higher cost.\n\n**Prompting**: write a full caption of the result, with the edit folded in."
363 ],
364 "widgets_values_named": {
365 "text": "## FLUX 3 Image Klein: editing\n\nSame files and sampler settings as text-to-image (50 steps, cfg 3.5, euler / simple).\n\n**References**: plug more input image to the `Set Reference Multi Latent` node, the first one is `<ref_image_0>` in the prompt, the next `<ref_image_1>`, and so on. Add every reference to **both** the positive and the negative, as the reference pipeline does.\n\n**Size**: the reference is scaled to ~1 MP here and the output latent takes its size. BFL's pipeline keeps references at native size (up to ~16 MP): raise the megapixels for more reference detail at a higher cost.\n\n**Prompting**: write a full caption of the result, with the edit folded in."
366 },
367 "color": "#222",
368 "bgcolor": "#000"
369 },
370 {
371 "id": 11,
372 "type": "LoadImage",
373 "pos": [
374 -630,
375 -160
376 ],
377 "size": [
378 440,
379 500
380 ],
381 "flags": [],
382 "order": 4,
383 "mode": 0,
384 "inputs": [],
385 "outputs": [
386 {
387 "name": "IMAGE",
388 "type": "IMAGE",
389 "slot_index": 0,
390 "links": [
391 27,
392 29,
393 58,
394 67
395 ]
396 },
397 {
398 "name": "MASK",
399 "type": "MASK",
400 "slot_index": 1,
401 "links": []
402 }
403 ],
404 "properties": {
405 "Node name for S&R": "LoadImage"
406 },
407 "widgets_values": [
408 "woman_gold_earring_teal_top_portrait.png",
409 "image"
410 ],
411 "widgets_values_named": {
412 "image": "woman_gold_earring_teal_top_portrait.png",
413 "upload": "image"
414 }
415 },
416 {
417 "id": 17,
418 "type": "ReferenceMultiLatent",
419 "pos": [
420 990,
421 -150
422 ],
423 "size": [
424 280,
425 170
426 ],
427 "flags": [],
428 "order": 20,
429 "mode": 0,
430 "inputs": [
431 {
432 "name": "positive",
433 "type": "CONDITIONING",
434 "link": 20
435 },
436 {
437 "name": "negative",
438 "shape": 7,
439 "type": "CONDITIONING",
440 "link": 45
441 },
442 {
443 "name": "vae",
444 "shape": 7,
445 "type": "VAE",
446 "link": 25
447 },
448 {
449 "name": "images.image0",
450 "shape": 7,
451 "type": "IMAGE",
452 "link": 27
453 },
454 {
455 "name": "images.image1",
456 "shape": 7,
457 "type": "IMAGE",
458 "link": null
459 }
460 ],
461 "outputs": [
462 {
463 "name": "positive",
464 "type": "CONDITIONING",
465 "links": [
466 22
467 ]
468 },
469 {
470 "name": "negative",
471 "type": "CONDITIONING",
472 "links": [
473 23
474 ]
475 },
476 {
477 "name": "empty_latent",
478 "type": "LATENT",
479 "links": [
480 24
481 ]
482 }
483 ],
484 "properties": {
485 "Node name for S&R": "ReferenceMultiLatent"
486 },
487 "widgets_values": [
488 "resize",
489 1
490 ],
491 "widgets_values_named": {
492 "resolution": "resize",
493 "resolution.megapixels": 1
494 },
495 "color": "#322",
496 "bgcolor": "#533"
497 },
498 {
499 "id": 18,
500 "type": "ImageCompare",
501 "pos": [
502 2730,
503 -210
504 ],
505 "size": [
506 510,
507 620
508 ],
509 "flags": [],
510 "order": 24,
511 "mode": 0,
512 "inputs": [
513 {
514 "name": "image_a",
515 "shape": 7,
516 "type": "IMAGE",
517 "link": 29
518 },
519 {
520 "name": "image_b",
521 "shape": 7,
522 "type": "IMAGE",
523 "link": 30
524 }
525 ],
526 "outputs": [],
527 "properties": {
528 "Node name for S&R": "ImageCompare"
529 },
530 "widgets_values": [],
531 "widgets_values_named": []
532 },
533 {
534 "id": 26,
535 "type": "MarkdownNote",
536 "pos": [
537 -1550,
538 -210
539 ],
540 "size": [
541 450,
542 650
543 ],
544 "flags": [],
545 "order": 6,
546 "mode": 0,
547 "inputs": [],
548 "outputs": [],
549 "properties": [],
550 "widgets_values": [
551 "## Input Asset\n\n- [woman_gold_earring_teal_top_portrait.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/woman_gold_earring_teal_top_portrait.png)\n\n## Model Links\n\n- [Hugging Face:black-forest-labs/flux-3-image-klein-comfy](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy)\n\n> **VRAM tip** — this template ships the quantised distilled checkpoint to keep the footprint small. With more than 24 GB of VRAM, use the bf16 weights instead: [`flux3-image-klein-bf16.safetensors`](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/diffusion_models/flux3-image-klein-bf16.safetensors).\n\n**diffusion_models**\n\n- [flux3-image-klein-int8-convrot.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/diffusion_models/flux3-image-klein-int8-convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/blob/main/text_encoders/qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors)\n- [qwen3vl_4b_int8_convrot.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/text_encoders/qwen3vl_4b_int8_convrot.safetensors)\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/vae/flux2-vae.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 diffusion_models/\n│ │ └── flux3-image-klein-int8-convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ ├── qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors\n│ │ └── qwen3vl_4b_int8_convrot.safetensors\n│ └── 📂 vae/\n│ └── flux2-vae.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
552 ],
553 "widgets_values_named": {
554 "text": "## Input Asset\n\n- [woman_gold_earring_teal_top_portrait.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/woman_gold_earring_teal_top_portrait.png)\n\n## Model Links\n\n- [Hugging Face:black-forest-labs/flux-3-image-klein-comfy](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy)\n\n> **VRAM tip** — this template ships the quantised distilled checkpoint to keep the footprint small. With more than 24 GB of VRAM, use the bf16 weights instead: [`flux3-image-klein-bf16.safetensors`](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/diffusion_models/flux3-image-klein-bf16.safetensors).\n\n**diffusion_models**\n\n- [flux3-image-klein-int8-convrot.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/diffusion_models/flux3-image-klein-int8-convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/blob/main/text_encoders/qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors)\n- [qwen3vl_4b_int8_convrot.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/text_encoders/qwen3vl_4b_int8_convrot.safetensors)\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/vae/flux2-vae.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 diffusion_models/\n│ │ └── flux3-image-klein-int8-convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ ├── qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors\n│ │ └── qwen3vl_4b_int8_convrot.safetensors\n│ └── 📂 vae/\n│ └── flux2-vae.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
555 },
556 "color": "#222",
557 "bgcolor": "#000"
558 },
559 {
560 "id": 32,
561 "type": "ConditioningZeroOut",
562 "pos": [
563 630,
564 290
565 ],
566 "size": [
567 210,
568 30
569 ],
570 "flags": [],
571 "order": 19,
572 "mode": 0,
573 "inputs": [
574 {
575 "name": "conditioning",
576 "type": "CONDITIONING",
577 "link": 44
578 }
579 ],
580 "outputs": [
581 {
582 "name": "CONDITIONING",
583 "type": "CONDITIONING",
584 "links": [
585 45
586 ]
587 }
588 ],
589 "properties": {
590 "Node name for S&R": "ConditioningZeroOut"
591 }
592 },
593 {
594 "id": 33,
595 "type": "CreateBoundingBoxes",
596 "pos": [
597 -630,
598 410
599 ],
600 "size": [
601 440,
602 540
603 ],
604 "flags": [],
605 "order": 11,
606 "mode": 0,
607 "inputs": [
608 {
609 "name": "background",
610 "shape": 7,
611 "type": "IMAGE",
612 "link": 58
613 },
614 {
615 "name": "bboxes",
616 "shape": 7,
617 "type": "BOUNDING_BOX,ARRAY,STRING",
618 "link": null
619 }
620 ],
621 "outputs": [
622 {
623 "name": "preview",
624 "type": "IMAGE",
625 "links": null
626 },
627 {
628 "name": "bboxes",
629 "type": "BOUNDING_BOX",
630 "links": null
631 },
632 {
633 "name": "elements",
634 "type": "ARRAY",
635 "links": [
636 59
637 ]
638 }
639 ],
640 "properties": {
641 "Node name for S&R": "CreateBoundingBoxes"
642 },
643 "widgets_values": [
644 1360,
645 752,
646 [
647 {
648 "x": 512,
649 "y": 288,
650 "width": 224,
651 "height": 224,
652 "metadata": {
653 "type": "obj",
654 "text": "",
655 "desc": "earring",
656 "palette": []
657 }
658 }
659 ],
660 []
661 ],
662 "widgets_values_named": {
663 "width": 1360,
664 "height": 752,
665 "editor_state": [
666 {
667 "x": 512,
668 "y": 288,
669 "width": 224,
670 "height": 224,
671 "metadata": {
672 "type": "obj",
673 "text": "",
674 "desc": "earring",
675 "palette": []
676 }
677 }
678 ],
679 "last_incoming": []
680 },
681 "color": "#322",
682 "bgcolor": "#533"
683 },
684 {
685 "id": 34,
686 "type": "PreviewAny",
687 "pos": [
688 440,
689 490
690 ],
691 "size": [
692 390,
693 330
694 ],
695 "flags": [],
696 "order": 14,
697 "mode": 0,
698 "inputs": [
699 {
700 "name": "source",
701 "type": "*",
702 "link": 63
703 }
704 ],
705 "outputs": [
706 {
707 "name": "STRING",
708 "type": "STRING",
709 "links": [
710 64,
711 71
712 ]
713 }
714 ],
715 "properties": {
716 "Node name for S&R": "PreviewAny"
717 },
718 "widgets_values": [],
719 "widgets_values_named": []
720 },
721 {
722 "id": 35,
723 "type": "MarkdownNote",
724 "pos": [
725 1010,
726 250
727 ],
728 "size": [
729 250,
730 100
731 ],
732 "flags": [],
733 "order": 7,
734 "mode": 0,
735 "inputs": [],
736 "outputs": [],
737 "properties": [],
738 "widgets_values": [
739 "Use `Empty Flux 2 Latent` node to customize image size\n\n`Create Bounding Boxes` node for node for creating prompts for precise editing"
740 ],
741 "widgets_values_named": {
742 "text": "Use `Empty Flux 2 Latent` node to customize image size\n\n`Create Bounding Boxes` node for node for creating prompts for precise editing"
743 },
744 "color": "#222",
745 "bgcolor": "#000"
746 },
747 {
748 "id": 44,
749 "type": "EmptyFlux2LatentImage",
750 "pos": [
751 1000,
752 80
753 ],
754 "size": [
755 270,
756 110
757 ],
758 "flags": [],
759 "order": 8,
760 "mode": 0,
761 "inputs": [],
762 "outputs": [
763 {
764 "name": "LATENT",
765 "type": "LATENT",
766 "links": null
767 }
768 ],
769 "properties": {
770 "Node name for S&R": "EmptyFlux2LatentImage"
771 },
772 "widgets_values": [
773 1024,
774 1024,
775 1
776 ],
777 "widgets_values_named": {
778 "width": 1024,
779 "height": 1024,
780 "batch_size": 1
781 }
782 },
783 {
784 "id": 46,
785 "type": "CLIPLoader",
786 "pos": [
787 -110,
788 -760
789 ],
790 "size": [
791 440,
792 120
793 ],
794 "flags": [],
795 "order": 9,
796 "mode": 0,
797 "inputs": [],
798 "outputs": [
799 {
800 "name": "CLIP",
801 "type": "CLIP",
802 "slot_index": 0,
803 "links": [
804 54
805 ]
806 }
807 ],
808 "properties": {
809 "Node name for S&R": "CLIPLoader",
810 "models": [
811 {
812 "name": "qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors",
813 "url": "https://huggingface.co/black-forest-labs/flux-3-image-klein-comfy/resolve/main/text_encoders/qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors",
814 "directory": "text_encoders"
815 }
816 ]
817 },
818 "widgets_values": [
819 "qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors",
820 "flux3",
821 "default"
822 ],
823 "widgets_values_named": {
824 "clip_name": "qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors",
825 "type": "flux3",
826 "device": "default"
827 }
828 },
829 {
830 "id": 47,
831 "type": "TextGenerate",
832 "pos": [
833 390,
834 -760
835 ],
836 "size": [
837 400,
838 460
839 ],
840 "flags": [],
841 "order": 15,
842 "mode": 0,
843 "showAdvanced": false,
844 "inputs": [
845 {
846 "name": "clip",
847 "type": "CLIP",
848 "link": 54
849 },
850 {
851 "name": "image",
852 "shape": 7,
853 "type": "IMAGE",
854 "link": 66
855 },
856 {
857 "name": "video",
858 "shape": 7,
859 "type": "IMAGE",
860 "link": null
861 },
862 {
863 "name": "audio",
864 "shape": 7,
865 "type": "AUDIO",
866 "link": null
867 },
868 {
869 "name": "system_prompt",
870 "shape": 7,
871 "type": "STRING",
872 "link": 60
873 },
874 {
875 "name": "prompt",
876 "type": "STRING",
877 "widget": {
878 "name": "prompt"
879 },
880 "link": 64
881 }
882 ],
883 "outputs": [
884 {
885 "name": "generated_text",
886 "type": "STRING",
887 "links": [
888 69
889 ]
890 },
891 {
892 "name": "thinking",
893 "type": "STRING",
894 "links": []
895 }
896 ],
897 "properties": {
898 "Node name for S&R": "TextGenerate"
899 },
900 "widgets_values": [
901 "",
902 3584,
903 "on",
904 1,
905 1,
906 0.95,
907 0,
908 1.05,
909 0,
910 0,
911 false,
912 true,
913 "off"
914 ],
915 "widgets_values_named": {
916 "prompt": "",
917 "max_length": 3584,
918 "sampling_mode": "on",
919 "sampling_mode.temperature": 1,
920 "sampling_mode.top_k": 1,
921 "sampling_mode.top_p": 0.95,
922 "sampling_mode.min_p": 0,
923 "sampling_mode.repetition_penalty": 1.05,
924 "sampling_mode.seed": 0,
925 "sampling_mode.presence_penalty": 0,
926 "thinking": false,
927 "use_default_template": true,
928 "mtp": "off"
929 }
930 },
931 {
932 "id": 48,
933 "type": "PrimitiveStringMultiline",
934 "pos": [
935 -110,
936 -580
937 ],
938 "size": [
939 440,
940 180
941 ],
942 "flags": [],
943 "order": 10,
944 "mode": 0,
945 "inputs": [],
946 "outputs": [
947 {
948 "name": "STRING",
949 "type": "STRING",
950 "links": [
951 60
952 ]
953 }
954 ],
955 "title": "Text (System prompt)",
956 "properties": {
957 "Node name for S&R": "PrimitiveStringMultiline"
958 },
959 "widgets_values": [
960 "You are the prompt upsampler of an image-editing model. You see the reference image(s), attached in order (the first image, the second image, ...), and the user's short request. Expand it into ONE detailed, self-contained instruction: the caption the editing model receives together with the same images. Output only the instruction as one continuous English prose block, with no greetings, explanations, Markdown, JSON, coordinates, ids or angle-bracket tokens. Read a vague or conversational request as the most plausible edit of the supplied images.\\n\\nPick the voice by task shape. When one reference stays and gets bounded changes, write an imperative editing instruction on it (\\\"Remove the ...\\\", \\\"Change the ... to ...\\\", \\\"Zoom in on ...\\\"); a whole-image transformation opens with its scope (\\\"Convert the entire image into ...\\\", \\\"Apply a ... filter over the entire scene\\\", \\\"Horizontally flip the entire image so that ...\\\", \\\"Shift the camera viewpoint to ...\\\", then where the major elements should now be). When the references are drawn into a newly composed frame (combining subjects, a new scene, a garment, object or style donor), write a generation request (\\\"Create a photograph of ...\\\", \\\"Create an anime-style illustration of ...\\\", \\\"Generate a new image featuring ...\\\") that says what to take from each image, by ordinal, and what is newly generated.\\n\\nKeep every explicit edit, constraint, count, position, style cue and piece of wording, and decide what is left open as one concrete plan. Ground everything in what is actually visible: identify each referent unambiguously by its real appearance, never mention content that is not there, and use every image the user attached. State every end state concretely (which color, how large, which pose, which material) and give new content enough appearance to be generated. Cover the knock-on effects of the change (shadows, reflections, occlusion, perspective, scale, lighting) and say what fills a removed region. A zoom-in names what stays in frame and which neighbors are cropped out; an outpainting continues the scene in the same medium. Describe the change, not the whole scene, and close an editing instruction with one compact clause naming what stays unchanged; transferred people keep their identity, face and accessories unless asked otherwise. Transcribe on-image text verbatim in its original language inside double quotes, with line breaks as \\\\n, and match the original font, size and color when replacing it. Name recognizable public figures, brands and landmarks you can see. Directions are frame-relative; use no evaluative or quality words. Typical length is 50 to 150 words.\\n\\nOutput only the instruction."
961 ],
962 "widgets_values_named": {
963 "value": "You are the prompt upsampler of an image-editing model. You see the reference image(s), attached in order (the first image, the second image, ...), and the user's short request. Expand it into ONE detailed, self-contained instruction: the caption the editing model receives together with the same images. Output only the instruction as one continuous English prose block, with no greetings, explanations, Markdown, JSON, coordinates, ids or angle-bracket tokens. Read a vague or conversational request as the most plausible edit of the supplied images.\\n\\nPick the voice by task shape. When one reference stays and gets bounded changes, write an imperative editing instruction on it (\\\"Remove the ...\\\", \\\"Change the ... to ...\\\", \\\"Zoom in on ...\\\"); a whole-image transformation opens with its scope (\\\"Convert the entire image into ...\\\", \\\"Apply a ... filter over the entire scene\\\", \\\"Horizontally flip the entire image so that ...\\\", \\\"Shift the camera viewpoint to ...\\\", then where the major elements should now be). When the references are drawn into a newly composed frame (combining subjects, a new scene, a garment, object or style donor), write a generation request (\\\"Create a photograph of ...\\\", \\\"Create an anime-style illustration of ...\\\", \\\"Generate a new image featuring ...\\\") that says what to take from each image, by ordinal, and what is newly generated.\\n\\nKeep every explicit edit, constraint, count, position, style cue and piece of wording, and decide what is left open as one concrete plan. Ground everything in what is actually visible: identify each referent unambiguously by its real appearance, never mention content that is not there, and use every image the user attached. State every end state concretely (which color, how large, which pose, which material) and give new content enough appearance to be generated. Cover the knock-on effects of the change (shadows, reflections, occlusion, perspective, scale, lighting) and say what fills a removed region. A zoom-in names what stays in frame and which neighbors are cropped out; an outpainting continues the scene in the same medium. Describe the change, not the whole scene, and close an editing instruction with one compact clause naming what stays unchanged; transferred people keep their identity, face and accessories unless asked otherwise. Transcribe on-image text verbatim in its original language inside double quotes, with line breaks as \\\\n, and match the original font, size and color when replacing it. Name recognizable public figures, brands and landmarks you can see. Directions are frame-relative; use no evaluative or quality words. Typical length is 50 to 150 words.\\n\\nOutput only the instruction."
964 }
965 },
966 {
967 "id": 49,
968 "type": "Flux3LayoutPrompt",
969 "pos": [
970 -90,
971 490
972 ],
973 "size": [
974 400,
975 200
976 ],
977 "flags": [],
978 "order": 13,
979 "mode": 0,
980 "inputs": [
981 {
982 "name": "element",
983 "type": "ARRAY",
984 "link": 59
985 }
986 ],
987 "outputs": [
988 {
989 "name": "prompt",
990 "type": "STRING",
991 "links": [
992 63
993 ]
994 }
995 ],
996 "properties": {
997 "Node name for S&R": "Flux3LayoutPrompt"
998 },
999 "widgets_values": [
1000 "In <ref_image_0>, replace the earring <obj_1> with a single large openwork metal statement earring, one bold curved pendant, intricate hollow metal cutouts, layered metal wires, polished warm bronze finish, structured artistic shape, keep it attached to the correct ear position. Match the character's existing lighting, shadows and skin tone. No pearls, no pearl beads, no scattered small beads. Keep all other parts of the image completely unchanged."
1001 ],
1002 "widgets_values_named": {
1003 "prompt": "In <ref_image_0>, replace the earring <obj_1> with a single large openwork metal statement earring, one bold curved pendant, intricate hollow metal cutouts, layered metal wires, polished warm bronze finish, structured artistic shape, keep it attached to the correct ear position. Match the character's existing lighting, shadows and skin tone. No pearls, no pearl beads, no scattered small beads. Keep all other parts of the image completely unchanged."
1004 },
1005 "color": "#232",
1006 "bgcolor": "#353"
1007 },
1008 {
1009 "id": 50,
1010 "type": "BatchImagesNode",
1011 "pos": [
1012 100,
1013 -340
1014 ],
1015 "size": [
1016 140,
1017 70
1018 ],
1019 "flags": [],
1020 "order": 12,
1021 "mode": 0,
1022 "inputs": [
1023 {
1024 "name": "images.image0",
1025 "type": "IMAGE",
1026 "link": 67
1027 },
1028 {
1029 "name": "images.image1",
1030 "shape": 7,
1031 "type": "IMAGE",
1032 "link": null
1033 }
1034 ],
1035 "outputs": [
1036 {
1037 "name": "IMAGE",
1038 "type": "IMAGE",
1039 "links": [
1040 66
1041 ]
1042 }
1043 ],
1044 "properties": {
1045 "Node name for S&R": "BatchImagesNode"
1046 }
1047 },
1048 {
1049 "id": 51,
1050 "type": "ComfySwitchNode",
1051 "pos": [
1052 900,
1053 -750
1054 ],
1055 "size": [
1056 270,
1057 80
1058 ],
1059 "flags": [],
1060 "order": 16,
1061 "mode": 0,
1062 "inputs": [
1063 {
1064 "name": "on_false",
1065 "shape": 7,
1066 "type": "STRING",
1067 "link": 69
1068 },
1069 {
1070 "name": "on_true",
1071 "shape": 7,
1072 "type": "STRING",
1073 "link": 71
1074 }
1075 ],
1076 "outputs": [
1077 {
1078 "name": "output",
1079 "type": "STRING",
1080 "links": [
1081 68
1082 ]
1083 }
1084 ],
1085 "properties": {
1086 "Node name for S&R": "ComfySwitchNode"
1087 },
1088 "widgets_values": [
1089 false
1090 ],
1091 "widgets_values_named": {
1092 "switch": false
1093 }
1094 },
1095 {
1096 "id": 52,
1097 "type": "PreviewAny",
1098 "pos": [
1099 900,
1100 -560
1101 ],
1102 "size": [
1103 430,
1104 260
1105 ],
1106 "flags": [],
1107 "order": 17,
1108 "mode": 0,
1109 "inputs": [
1110 {
1111 "name": "source",
1112 "type": "*",
1113 "link": 68
1114 }
1115 ],
1116 "outputs": [
1117 {
1118 "name": "STRING",
1119 "type": "STRING",
1120 "links": [
1121 70
1122 ]
1123 }
1124 ],
1125 "properties": {
1126 "Node name for S&R": "PreviewAny"
1127 },
1128 "widgets_values": [],
1129 "widgets_values_named": []
1130 }
1131 ],
1132 "links": [
1133 [
1134 1,
1135 1,
1136 0,
1137 7,
1138 0,
1139 "MODEL"
1140 ],
1141 [
1142 4,
1143 7,
1144 0,
1145 8,
1146 0,
1147 "LATENT"
1148 ],
1149 [
1150 5,
1151 3,
1152 0,
1153 8,
1154 1,
1155 "VAE"
1156 ],
1157 [
1158 6,
1159 8,
1160 0,
1161 9,
1162 0,
1163 "IMAGE"
1164 ],
1165 [
1166 22,
1167 17,
1168 0,
1169 7,
1170 1,
1171 "CONDITIONING"
1172 ],
1173 [
1174 23,
1175 17,
1176 1,
1177 7,
1178 2,
1179 "CONDITIONING"
1180 ],
1181 [
1182 24,
1183 17,
1184 2,
1185 7,
1186 3,
1187 "LATENT"
1188 ],
1189 [
1190 29,
1191 11,
1192 0,
1193 18,
1194 0,
1195 "IMAGE"
1196 ],
1197 [
1198 30,
1199 9,
1200 0,
1201 18,
1202 1,
1203 "IMAGE"
1204 ],
1205 [
1206 43,
1207 2,
1208 0,
1209 4,
1210 0,
1211 "CLIP"
1212 ],
1213 [
1214 44,
1215 4,
1216 0,
1217 32,
1218 0,
1219 "CONDITIONING"
1220 ],
1221 [
1222 58,
1223 11,
1224 0,
1225 33,
1226 0,
1227 "IMAGE"
1228 ],
1229 [
1230 59,
1231 33,
1232 2,
1233 49,
1234 0,
1235 "ARRAY"
1236 ],
1237 [
1238 63,
1239 49,
1240 0,
1241 34,
1242 0,
1243 "STRING"
1244 ],
1245 [
1246 68,
1247 51,
1248 0,
1249 52,
1250 0,
1251 "*"
1252 ],
1253 [
1254 69,
1255 47,
1256 0,
1257 51,
1258 0,
1259 "STRING"
1260 ],
1261 [
1262 70,
1263 52,
1264 0,
1265 4,
1266 1,
1267 "STRING"
1268 ],
1269 [
1270 71,
1271 34,
1272 0,
1273 51,
1274 1,
1275 "STRING"
1276 ],
1277 [
1278 20,
1279 4,
1280 0,
1281 17,
1282 0,
1283 "CONDITIONING"
1284 ],
1285 [
1286 45,
1287 32,
1288 0,
1289 17,
1290 1,
1291 "CONDITIONING"
1292 ],
1293 [
1294 25,
1295 3,
1296 0,
1297 17,
1298 2,
1299 "VAE"
1300 ],
1301 [
1302 27,
1303 11,
1304 0,
1305 17,
1306 3,
1307 "IMAGE"
1308 ],
1309 [
1310 54,
1311 46,
1312 0,
1313 47,
1314 0,
1315 "CLIP"
1316 ],
1317 [
1318 66,
1319 50,
1320 0,
1321 47,
1322 1,
1323 "IMAGE"
1324 ],
1325 [
1326 60,
1327 48,
1328 0,
1329 47,
1330 4,
1331 "STRING"
1332 ],
1333 [
1334 64,
1335 34,
1336 0,
1337 47,
1338 5,
1339 "STRING"
1340 ],
1341 [
1342 67,
1343 11,
1344 0,
1345 50,
1346 0,
1347 "IMAGE"
1348 ]
1349 ],
1350 "groups": [
1351 {
1352 "id": 1,
1353 "title": "Models",
1354 "bounding": [
1355 -120,
1356 -240,
1357 490,
1358 610
1359 ],
1360 "color": "#3f789e",
1361 "flags": []
1362 },
1363 {
1364 "id": 2,
1365 "title": "Prompt",
1366 "bounding": [
1367 400,
1368 -240,
1369 470,
1370 610
1371 ],
1372 "color": "#3f789e",
1373 "flags": []
1374 },
1375 {
1376 "id": 3,
1377 "title": "Sampling",
1378 "bounding": [
1379 1380,
1380 -240,
1381 460,
1382 610
1383 ],
1384 "color": "#3f789e",
1385 "flags": []
1386 },
1387 {
1388 "id": 4,
1389 "title": "Plug more reference images here",
1390 "bounding": [
1391 900,
1392 -240,
1393 450,
1394 610
1395 ],
1396 "color": "#A88",
1397 "flags": []
1398 },
1399 {
1400 "id": 5,
1401 "title": "Reference Image",
1402 "bounding": [
1403 -120,
1404 400,
1405 1470,
1406 440
1407 ],
1408 "color": "#A88",
1409 "flags": []
1410 },
1411 {
1412 "id": 6,
1413 "title": "Prompt Enhancer",
1414 "bounding": [
1415 -120,
1416 -830,
1417 1470,
1418 560
1419 ],
1420 "color": "#444",
1421 "flags": []
1422 },
1423 {
1424 "id": 7,
1425 "title": "Upload Input Image here",
1426 "bounding": [
1427 -670,
1428 -240,
1429 520,
1430 1240
1431 ],
1432 "color": "#3f789e",
1433 "flags": []
1434 }
1435 ],
1436 "config": [],
1437 "extra": {
1438 "ds": {
1439 "scale": 0.4459463246315217,
1440 "offset": [
1441 1812.9438327775536,
1442 1355.5669873956635
1443 ]
1444 },
1445 "frontendVersion": "1.55.17"
1446 },
1447 "version": 0.4
1448}