comfyui/Qwen-Image-2.1-viggle-turbo-edit.json
95.9 KB · 3357 lines · json Raw
1 {
2 "id": "33634f98-d5a4-4a96-a497-228b23bda9c1",
3 "revision": 0,
4 "last_node_id": 31,
5 "last_link_id": 39,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "MarkdownNote",
10 "pos": [
11 0,
12 0
13 ],
14 "size": [
15 460,
16 760
17 ],
18 "flags": {},
19 "order": 0,
20 "mode": 0,
21 "showAdvanced": null,
22 "inputs": [],
23 "outputs": [],
24 "properties": {},
25 "widgets_values": [
26 "## Qwen-Image-2.1 Viggle Turbo · image edit\n\nUses the same files and custom nodes as the text-to-image workflow (see its note). Keep euler, BasicGuider (no CFG) and the unmerged LoRA node at strength 1.0.\n\n- **Example references** `woman2.webp` and `cat.webp` are in the model repo's `comfyui/input/`; copy them into `ComfyUI/input/`, or load your own.\n- **References** go into *TextEncodeQwenImage21* as `image_1`, `image_2`, …; connecting one adds another slot. In the prompt, call them \"image 1\", \"image 2\" (or `<image1>`, `<image2>`).\n- **Output size** follows image 1, at about 1 MP (diffusers follows the *last* reference; put the image whose framing you want first). Turn on *Custom output size* to use the *Output size* node instead; a size other than image 1's can shift the edit.\n- **QwenImage21Cache** stores the reference part of the sequence once instead of recomputing it every step. At `dtype = default` it is lossless.\n- **Prompt enhancer** works as in text to image, with the official edit rewriter. The rewriter sees image 1 and image 2 (for this, image 2 is resized and cropped to image 1's size). With a single reference, connect image 1 straight to *TextGenerate → image* and delete *Batch Images*. For an instruction in Chinese, change the line in *PE request* to `(描述用中文写。)`.\n"
27 ],
28 "widgets_values_named": {
29 "text": "## Qwen-Image-2.1 Viggle Turbo · image edit\n\nUses the same files and custom nodes as the text-to-image workflow (see its note). Keep euler, BasicGuider (no CFG) and the unmerged LoRA node at strength 1.0.\n\n- **Example references** `woman2.webp` and `cat.webp` are in the model repo's `comfyui/input/`; copy them into `ComfyUI/input/`, or load your own.\n- **References** go into *TextEncodeQwenImage21* as `image_1`, `image_2`, …; connecting one adds another slot. In the prompt, call them \"image 1\", \"image 2\" (or `<image1>`, `<image2>`).\n- **Output size** follows image 1, at about 1 MP (diffusers follows the *last* reference; put the image whose framing you want first). Turn on *Custom output size* to use the *Output size* node instead; a size other than image 1's can shift the edit.\n- **QwenImage21Cache** stores the reference part of the sequence once instead of recomputing it every step. At `dtype = default` it is lossless.\n- **Prompt enhancer** works as in text to image, with the official edit rewriter. The rewriter sees image 1 and image 2 (for this, image 2 is resized and cropped to image 1's size). With a single reference, connect image 1 straight to *TextGenerate → image* and delete *Batch Images*. For an instruction in Chinese, change the line in *PE request* to `(描述用中文写。)`.\n"
30 },
31 "color": "#432",
32 "bgcolor": "#653"
33 },
34 {
35 "id": 2,
36 "type": "UNETLoader",
37 "pos": [
38 540,
39 0
40 ],
41 "size": [
42 320,
43 82
44 ],
45 "flags": {},
46 "order": 1,
47 "mode": 0,
48 "showAdvanced": null,
49 "inputs": [
50 {
51 "color_off": null,
52 "color_on": null,
53 "dir": null,
54 "label": null,
55 "localized_name": "unet_name",
56 "locked": null,
57 "name": "unet_name",
58 "nameLocked": null,
59 "removable": null,
60 "shape": null,
61 "type": "COMBO",
62 "widget": {
63 "name": "unet_name"
64 },
65 "link": null
66 },
67 {
68 "color_off": null,
69 "color_on": null,
70 "dir": null,
71 "label": null,
72 "localized_name": "weight_dtype",
73 "locked": null,
74 "name": "weight_dtype",
75 "nameLocked": null,
76 "removable": null,
77 "shape": null,
78 "type": "COMBO",
79 "widget": {
80 "name": "weight_dtype"
81 },
82 "link": null
83 }
84 ],
85 "outputs": [
86 {
87 "color_off": null,
88 "color_on": null,
89 "dir": null,
90 "label": null,
91 "localized_name": "MODEL",
92 "locked": null,
93 "name": "MODEL",
94 "nameLocked": null,
95 "removable": null,
96 "shape": null,
97 "type": "MODEL",
98 "pos": null,
99 "slot_index": null,
100 "links": [
101 1
102 ]
103 }
104 ],
105 "properties": {
106 "Node name for S&R": "UNETLoader",
107 "models": [
108 {
109 "name": "qwen_image_2.1_int8_convrot.safetensors",
110 "url": "https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/diffusion_models/qwen_image_2.1_int8_convrot.safetensors",
111 "directory": "diffusion_models"
112 }
113 ]
114 },
115 "widgets_values": [
116 "qwen_image_2.1_int8_convrot.safetensors",
117 "default"
118 ],
119 "widgets_values_named": {
120 "unet_name": "qwen_image_2.1_int8_convrot.safetensors",
121 "weight_dtype": "default"
122 }
123 },
124 {
125 "id": 3,
126 "type": "ViggleTurboLora",
127 "pos": [
128 540,
129 172
130 ],
131 "size": [
132 356.9,
133 82
134 ],
135 "flags": {},
136 "order": 2,
137 "mode": 0,
138 "showAdvanced": null,
139 "inputs": [
140 {
141 "color_off": null,
142 "color_on": null,
143 "dir": null,
144 "label": null,
145 "localized_name": "model",
146 "locked": null,
147 "name": "model",
148 "nameLocked": null,
149 "removable": null,
150 "shape": null,
151 "type": "MODEL",
152 "pos": null,
153 "link": 1
154 },
155 {
156 "color_off": null,
157 "color_on": null,
158 "dir": null,
159 "label": null,
160 "localized_name": "lora_name",
161 "locked": null,
162 "name": "lora_name",
163 "nameLocked": null,
164 "removable": null,
165 "shape": null,
166 "type": "COMBO",
167 "widget": {
168 "name": "lora_name"
169 },
170 "link": null
171 },
172 {
173 "color_off": null,
174 "color_on": null,
175 "dir": null,
176 "label": null,
177 "localized_name": "strength",
178 "locked": null,
179 "name": "strength",
180 "nameLocked": null,
181 "removable": null,
182 "shape": null,
183 "type": "FLOAT",
184 "widget": {
185 "name": "strength"
186 },
187 "link": null
188 }
189 ],
190 "outputs": [
191 {
192 "color_off": null,
193 "color_on": null,
194 "dir": null,
195 "label": null,
196 "localized_name": "MODEL",
197 "locked": null,
198 "name": "MODEL",
199 "nameLocked": null,
200 "removable": null,
201 "shape": null,
202 "type": "MODEL",
203 "pos": null,
204 "slot_index": null,
205 "links": [
206 28
207 ]
208 }
209 ],
210 "properties": {
211 "Node name for S&R": "ViggleTurboLora",
212 "models": [
213 {
214 "name": "Qwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r128.safetensors",
215 "url": "https://huggingface.co/Viggle/Qwen-Image-2.1-viggle-turbo/resolve/main/Qwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r128.safetensors",
216 "directory": "loras"
217 }
218 ]
219 },
220 "widgets_values": [
221 "Qwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r128.safetensors",
222 1
223 ],
224 "widgets_values_named": {
225 "lora_name": "Qwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r128.safetensors",
226 "strength": 1
227 }
228 },
229 {
230 "id": 4,
231 "type": "CLIPLoader",
232 "pos": [
233 540,
234 516
235 ],
236 "size": [
237 320,
238 106
239 ],
240 "flags": {},
241 "order": 3,
242 "mode": 0,
243 "showAdvanced": null,
244 "inputs": [
245 {
246 "color_off": null,
247 "color_on": null,
248 "dir": null,
249 "label": null,
250 "localized_name": "clip_name",
251 "locked": null,
252 "name": "clip_name",
253 "nameLocked": null,
254 "removable": null,
255 "shape": null,
256 "type": "COMBO",
257 "widget": {
258 "name": "clip_name"
259 },
260 "link": null
261 },
262 {
263 "color_off": null,
264 "color_on": null,
265 "dir": null,
266 "label": null,
267 "localized_name": "type",
268 "locked": null,
269 "name": "type",
270 "nameLocked": null,
271 "removable": null,
272 "shape": null,
273 "type": "COMBO",
274 "widget": {
275 "name": "type"
276 },
277 "link": null
278 },
279 {
280 "color_off": null,
281 "color_on": null,
282 "dir": null,
283 "label": null,
284 "localized_name": "device",
285 "locked": null,
286 "name": "device",
287 "nameLocked": null,
288 "removable": null,
289 "shape": 7,
290 "type": "COMBO",
291 "widget": {
292 "name": "device"
293 },
294 "link": null
295 }
296 ],
297 "outputs": [
298 {
299 "color_off": null,
300 "color_on": null,
301 "dir": null,
302 "label": null,
303 "localized_name": "CLIP",
304 "locked": null,
305 "name": "CLIP",
306 "nameLocked": null,
307 "removable": null,
308 "shape": null,
309 "type": "CLIP",
310 "pos": null,
311 "slot_index": null,
312 "links": [
313 2,
314 3
315 ]
316 }
317 ],
318 "properties": {
319 "Node name for S&R": "CLIPLoader",
320 "models": [
321 {
322 "name": "qwen3vl_8b_int8_convrot.safetensors",
323 "url": "https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/text_encoders/qwen3vl_8b_int8_convrot.safetensors",
324 "directory": "text_encoders"
325 }
326 ]
327 },
328 "widgets_values": [
329 "qwen3vl_8b_int8_convrot.safetensors",
330 "qwen_image",
331 "default"
332 ],
333 "widgets_values_named": {
334 "clip_name": "qwen3vl_8b_int8_convrot.safetensors",
335 "type": "qwen_image",
336 "device": "default"
337 }
338 },
339 {
340 "id": 5,
341 "type": "VAELoader",
342 "pos": [
343 540,
344 712
345 ],
346 "size": [
347 320,
348 58
349 ],
350 "flags": {},
351 "order": 4,
352 "mode": 0,
353 "showAdvanced": null,
354 "inputs": [
355 {
356 "color_off": null,
357 "color_on": null,
358 "dir": null,
359 "label": null,
360 "localized_name": "vae_name",
361 "locked": null,
362 "name": "vae_name",
363 "nameLocked": null,
364 "removable": null,
365 "shape": null,
366 "type": "COMBO",
367 "widget": {
368 "name": "vae_name"
369 },
370 "link": null
371 }
372 ],
373 "outputs": [
374 {
375 "color_off": null,
376 "color_on": null,
377 "dir": null,
378 "label": null,
379 "localized_name": "VAE",
380 "locked": null,
381 "name": "VAE",
382 "nameLocked": null,
383 "removable": null,
384 "shape": null,
385 "type": "VAE",
386 "pos": null,
387 "slot_index": null,
388 "links": [
389 4,
390 5
391 ]
392 }
393 ],
394 "properties": {
395 "Node name for S&R": "VAELoader",
396 "models": [
397 {
398 "name": "qwen_image_2.1_vae_bf16.safetensors",
399 "url": "https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/vae/qwen_image_2.1_vae_bf16.safetensors",
400 "directory": "vae"
401 }
402 ]
403 },
404 "widgets_values": [
405 "qwen_image_2.1_vae_bf16.safetensors"
406 ],
407 "widgets_values_named": {
408 "vae_name": "qwen_image_2.1_vae_bf16.safetensors"
409 }
410 },
411 {
412 "id": 6,
413 "type": "PrimitiveStringMultiline",
414 "pos": [
415 1376.9,
416 0
417 ],
418 "size": [
419 440,
420 220
421 ],
422 "flags": {},
423 "order": 5,
424 "mode": 0,
425 "showAdvanced": null,
426 "inputs": [
427 {
428 "color_off": null,
429 "color_on": null,
430 "dir": null,
431 "label": null,
432 "localized_name": "value",
433 "locked": null,
434 "name": "value",
435 "nameLocked": null,
436 "removable": null,
437 "shape": null,
438 "type": "STRING",
439 "widget": {
440 "name": "value"
441 },
442 "link": null
443 }
444 ],
445 "outputs": [
446 {
447 "color_off": null,
448 "color_on": null,
449 "dir": null,
450 "label": null,
451 "localized_name": "STRING",
452 "locked": null,
453 "name": "STRING",
454 "nameLocked": null,
455 "removable": null,
456 "shape": null,
457 "type": "STRING",
458 "pos": null,
459 "slot_index": null,
460 "links": [
461 8,
462 14,
463 16
464 ]
465 }
466 ],
467 "title": "Prompt",
468 "properties": {
469 "Node name for S&R": "PrimitiveStringMultiline"
470 },
471 "widgets_values": [
472 "The woman from image 1 is holding the cat from image 2 in her arms, keep the background of image 1"
473 ],
474 "widgets_values_named": {
475 "value": "The woman from image 1 is holding the cat from image 2 in her arms, keep the background of image 1"
476 }
477 },
478 {
479 "id": 7,
480 "type": "ResolutionSelector",
481 "pos": [
482 1376.9,
483 458
484 ],
485 "size": [
486 320,
487 150
488 ],
489 "flags": {},
490 "order": 6,
491 "mode": 0,
492 "showAdvanced": null,
493 "inputs": [
494 {
495 "color_off": null,
496 "color_on": null,
497 "dir": null,
498 "label": null,
499 "localized_name": "aspect_ratio",
500 "locked": null,
501 "name": "aspect_ratio",
502 "nameLocked": null,
503 "removable": null,
504 "shape": null,
505 "type": "COMBO",
506 "widget": {
507 "name": "aspect_ratio"
508 },
509 "link": null
510 },
511 {
512 "color_off": null,
513 "color_on": null,
514 "dir": null,
515 "label": null,
516 "localized_name": "megapixels",
517 "locked": null,
518 "name": "megapixels",
519 "nameLocked": null,
520 "removable": null,
521 "shape": null,
522 "type": "FLOAT",
523 "widget": {
524 "name": "megapixels"
525 },
526 "link": null
527 },
528 {
529 "color_off": null,
530 "color_on": null,
531 "dir": null,
532 "label": null,
533 "localized_name": "multiple",
534 "locked": null,
535 "name": "multiple",
536 "nameLocked": null,
537 "removable": null,
538 "shape": null,
539 "type": "INT",
540 "widget": {
541 "name": "multiple"
542 },
543 "link": null
544 },
545 {
546 "color_off": null,
547 "color_on": null,
548 "dir": null,
549 "label": null,
550 "localized_name": "preview",
551 "locked": null,
552 "name": "preview",
553 "nameLocked": null,
554 "removable": null,
555 "shape": 7,
556 "type": "RESOLUTION_PREVIEW",
557 "widget": {
558 "name": "preview"
559 },
560 "link": null
561 }
562 ],
563 "outputs": [
564 {
565 "color_off": null,
566 "color_on": null,
567 "dir": null,
568 "label": null,
569 "localized_name": "width",
570 "locked": null,
571 "name": "width",
572 "nameLocked": null,
573 "removable": null,
574 "shape": null,
575 "type": "INT",
576 "pos": null,
577 "slot_index": null,
578 "links": [
579 6
580 ]
581 },
582 {
583 "color_off": null,
584 "color_on": null,
585 "dir": null,
586 "label": null,
587 "localized_name": "height",
588 "locked": null,
589 "name": "height",
590 "nameLocked": null,
591 "removable": null,
592 "shape": null,
593 "type": "INT",
594 "pos": null,
595 "slot_index": null,
596 "links": [
597 7
598 ]
599 }
600 ],
601 "title": "Output size",
602 "properties": {
603 "Node name for S&R": "ResolutionSelector"
604 },
605 "widgets_values": [
606 "1:1 (Square)",
607 1,
608 32
609 ],
610 "widgets_values_named": {
611 "aspect_ratio": "1:1 (Square)",
612 "megapixels": 1,
613 "multiple": 32
614 }
615 },
616 {
617 "id": 8,
618 "type": "EmptyLatentImage",
619 "pos": [
620 1376.9,
621 698
622 ],
623 "size": [
624 320,
625 106
626 ],
627 "flags": {},
628 "order": 7,
629 "mode": 0,
630 "showAdvanced": null,
631 "inputs": [
632 {
633 "color_off": null,
634 "color_on": null,
635 "dir": null,
636 "label": null,
637 "localized_name": "width",
638 "locked": null,
639 "name": "width",
640 "nameLocked": null,
641 "removable": null,
642 "shape": null,
643 "type": "INT",
644 "widget": {
645 "name": "width"
646 },
647 "link": 6
648 },
649 {
650 "color_off": null,
651 "color_on": null,
652 "dir": null,
653 "label": null,
654 "localized_name": "height",
655 "locked": null,
656 "name": "height",
657 "nameLocked": null,
658 "removable": null,
659 "shape": null,
660 "type": "INT",
661 "widget": {
662 "name": "height"
663 },
664 "link": 7
665 },
666 {
667 "color_off": null,
668 "color_on": null,
669 "dir": null,
670 "label": null,
671 "localized_name": "batch_size",
672 "locked": null,
673 "name": "batch_size",
674 "nameLocked": null,
675 "removable": null,
676 "shape": null,
677 "type": "INT",
678 "widget": {
679 "name": "batch_size"
680 },
681 "link": null
682 }
683 ],
684 "outputs": [
685 {
686 "color_off": null,
687 "color_on": null,
688 "dir": null,
689 "label": null,
690 "localized_name": "LATENT",
691 "locked": null,
692 "name": "LATENT",
693 "nameLocked": null,
694 "removable": null,
695 "shape": null,
696 "type": "LATENT",
697 "pos": null,
698 "slot_index": null,
699 "links": [
700 36
701 ]
702 }
703 ],
704 "properties": {
705 "Node name for S&R": "EmptyLatentImage"
706 },
707 "widgets_values": [
708 1024,
709 1024,
710 1
711 ],
712 "widgets_values_named": {
713 "width": 1024,
714 "height": 1024,
715 "batch_size": 1
716 }
717 },
718 {
719 "id": 9,
720 "type": "PrimitiveBoolean",
721 "pos": [
722 1896.9,
723 0
724 ],
725 "size": [
726 320,
727 58
728 ],
729 "flags": {},
730 "order": 8,
731 "mode": 0,
732 "showAdvanced": null,
733 "inputs": [
734 {
735 "color_off": null,
736 "color_on": null,
737 "dir": null,
738 "label": null,
739 "localized_name": "value",
740 "locked": null,
741 "name": "value",
742 "nameLocked": null,
743 "removable": null,
744 "shape": null,
745 "type": "BOOLEAN",
746 "widget": {
747 "name": "value"
748 },
749 "link": null
750 }
751 ],
752 "outputs": [
753 {
754 "color_off": null,
755 "color_on": null,
756 "dir": null,
757 "label": null,
758 "localized_name": "BOOLEAN",
759 "locked": null,
760 "name": "BOOLEAN",
761 "nameLocked": null,
762 "removable": null,
763 "shape": null,
764 "type": "BOOLEAN",
765 "pos": null,
766 "slot_index": null,
767 "links": [
768 18
769 ]
770 }
771 ],
772 "title": "Enhance prompt",
773 "properties": {
774 "Node name for S&R": "PrimitiveBoolean"
775 },
776 "widgets_values": [
777 true
778 ],
779 "widgets_values_named": {
780 "value": true
781 }
782 },
783 {
784 "id": 10,
785 "type": "PrimitiveStringMultiline",
786 "pos": [
787 1896.9,
788 148
789 ],
790 "size": [
791 440,
792 180
793 ],
794 "flags": {},
795 "order": 9,
796 "mode": 0,
797 "showAdvanced": null,
798 "inputs": [
799 {
800 "color_off": null,
801 "color_on": null,
802 "dir": null,
803 "label": null,
804 "localized_name": "value",
805 "locked": null,
806 "name": "value",
807 "nameLocked": null,
808 "removable": null,
809 "shape": null,
810 "type": "STRING",
811 "widget": {
812 "name": "value"
813 },
814 "link": null
815 }
816 ],
817 "outputs": [
818 {
819 "color_off": null,
820 "color_on": null,
821 "dir": null,
822 "label": null,
823 "localized_name": "STRING",
824 "locked": null,
825 "name": "STRING",
826 "nameLocked": null,
827 "removable": null,
828 "shape": null,
829 "type": "STRING",
830 "pos": null,
831 "slot_index": null,
832 "links": [
833 9
834 ]
835 }
836 ],
837 "title": "PE system prompt (official Qwen-Image-2.1 edit rewriter)",
838 "properties": {
839 "Node name for S&R": "PrimitiveStringMultiline"
840 },
841 "widgets_values": [
842 "# Edit Prompt Enhancer — General (v2, 精简版)\n\n**FIRST — there are TWO separate language decisions. Do NOT conflate them.**\n\n**(A) Language of the rewritten prompt's DESCRIPTIVE prose — every word OUTSIDE double quotes (the description you write for the diffusion model, NOT the text painted into the image). This decision is final and non-negotiable:**\n- User instruction is in Chinese → write the description in Chinese.\n- User instruction is in English → write the description in English.\n- User instruction is in ANY other language (Japanese, Korean, French, Spanish, Thai, etc.) → write the description in English.\n\n**(B) Language of the TEXT THAT WILL BE RENDERED INTO THE OUTPUT IMAGE — the content INSIDE double quotes. Decide it in this strict priority order:**\n1. If the user's instruction gives the exact text to write, OR names a target language for the text (e.g. \"改成'夏日特惠'\", \"把标题写成英文\", \"add a Japanese title\", \"write the caption in Thai\") → render exactly that text / in exactly that specified language.\n2. Otherwise, if the input image already contains text → render in the DOMINANT language of the image's existing text — even when the instruction is written in a different language.\n3. Otherwise (the image contains no text AND the instruction names no target language) → render in the language of the user's instruction itself — including Japanese, Korean, Thai, Arabic, French, etc. Do NOT force it to English.\nWorked example: image is mostly Thai, instruction is in English asking to add/redesign a title without giving the exact words or a language → the rendered (quoted) text must be **Thai** (the image's dominant language), while the surrounding description (A) is still written in English.\n\nTwo reinforcements on decision (B): all rendered (quoted) text must be **monolingual** — do not mix Chinese and English inside the quotes and do not emit a bilingual pair unless the user explicitly asks for one. And **genre never overrides input language**: a \"spec sheet / cinematic data-document / storyboard / technical parameter\" look is achieved through layout and typography, NOT by switching rendered labels to English — every header, label, and caption stays in the decided language (standardized units and user-given proper nouns may remain Latin).\n\nYou are an expert at clarifying image editing instructions. Given a user's vague or ambiguous edit instruction and the input image(s), rewrite it into a precise, unambiguous, actionable editing directive. An input image is ALWAYS present — this is always an image-editing task, never text-to-image from nothing.\n\n## Core Objective\n\nRewrite the instruction so a downstream image-editing model can execute it without guessing — anchored on what the input image(s) actually show, faithful to the user's intent, inventing nothing.\n\n**How much you build is intent-branched.** When the user wants *this picture changed* (a local object/attribute/background edit, a text or UI edit, a quality or style change, a viewpoint/canvas transform), clarify and constrain: say exactly what changes, and let everything else stand. When the user wants *a new picture of this subject* (placing a subject in a new scene, compositing across images, a photo-shoot or poster or infographic built from a reference), construct actively: design the scene, lighting, composition and layout to a professional standard. Scale the elaboration to what was asked — a plain placement stays restrained, a styled shoot or a publication-grade poster is built out fully.\n\n## The Governing Principle — Attribute Disentanglement at Full Strength\n\n**Edit exactly the attribute(s) the user named, push each to a strong and unmistakable degree, and hold everything else at input fidelity.**\n\nBoth halves matter, and the two failure modes are symmetric:\n\n- **Leakage** — touching what the user did not name (a sharpen that re-grades color, an upscale that reframes, a style change that drifts a face, an outfit swap that drops an accessory, a background change that \"helpfully\" cleans up something unmentioned).\n- **Under-editing** — an output a viewer could mistake for the unedited input, because the requested change was applied faintly.\n\nPreservation locks **content, never edit strength**. Recognizability is bought by naming what stays fixed, not by holding the effect back.\n\n## What to Anchor, What to Decide\n\n**Anchor on the image.** Every spatial, tonal and contextual claim comes from what is visibly there. If you are unsure a detail exists, leave it out — a preserved element described at a higher level of abstraction is always safer than an invented specific.\n\n**Say what stays, without repainting it.** Name the untargeted content by type, position and role rather than describing its appearance, and prefer one blanket preservation clause over walking the frame. A preservation description reads to the model as a generation instruction: the more concretely you describe something you meant to keep, the more likely it drifts. Describe appearance concretely only for what you are actually changing, or when it is the only way to disambiguate between similar objects.\n\n**Identity is the hardest invariant.** A person's facial identity and the personal accessories that make them recognizable; a product's exact design, markings and count; and the input's rendering medium (photograph, anime, illustration, sketch, 3D render, painting) all survive every edit unless the user explicitly targets them. When identity comes from a reference image, point at that image rather than describing features in words — verbal descriptions make the model regenerate and degrade the likeness.\n\n**Resolve ambiguity, then commit.** Turn vague intent, imprecise spatial reference and unparameterized style words into something concrete and observable. Translate abstract quality language into the visual properties it implies. Where the instruction offers alternatives or contradicts itself, pick the most reasonable reading and state it as a decision. Keep the user's own action verb, spatial relations and described state intact, and treat anything they asked to preserve as absolute. Preserve creative or physically impossible intent rather than correcting it.\n\n**Only what was asked.** Do not add operations the user did not request, and do not clean up unmentioned defects, overlays or clutter however prominent they look. When an edit removes, moves or reveals something, say enough about the newly exposed region that the result stays physically coherent.\n\n**Text in the image is literal.** Whenever readable text will appear in the output, commit to the exact characters — every element, quoted, nothing summarized or abbreviated away. Text you cannot commit to should not be added at all. Match the typography and language the input establishes unless the user asks otherwise. When the operation extends the canvas outward, name it as outpainting explicitly.\n\n**Write it as an instruction.** Lead with the operation, not a description of the finished picture, and write from the perspective of someone holding only the input image(s).\n\n## Thinking Process\n\nBefore emitting JSON, reason through: what the image(s) actually contain (including a complete reading of any text present); what the user is asking for and which attributes that names; what must therefore stay fixed; the output size; and finally the composed directive. Close with a check that every visible element is either the target of the edit or covered by what stays fixed, that the requested change is unmistakable, that nothing outside the target was touched, and that every quoted string obeys language decision (B).\n\n## Image Reference Rules\n\nFor Multi-Image Input (N >= 2), the rewritten instruction MUST use `<image1>`, `<image2>`, ... to refer to each input image. Do not use natural language references like \"图1\", \"第一张图\", \"the first image\", or \"image A\". This tagging format is mandatory and non-negotiable. For single-image input (N = 1), do NOT use tags — refer to the image naturally (\"图像\", \"图片中\", \"the image\").\n\nState each image's role explicitly — which one is the canvas whose composition and untargeted content survive, and which supply material to transfer — and say what is taken from each. For scene generation with no canvas (合影/合照 and the like), all images serve as identity sources. Describe every referenced image individually; never compress several into a range or a group to avoid describing them one by one.\n\n## Output Size Determination\n\nYou must determine two output fields: `wh_ratio` and `ratio_follow`. These two fields are mutually exclusive — when one has a value, the other must be empty string \"\".\n\n### Step 1: Check if the user explicitly specified a size or aspect ratio\n\nLook for any of the following in the user's edit instruction:\n- Exact pixel dimensions: \"1920x1080\", \"800×600\", \"1080p\"\n- Aspect ratios: \"16:9\", \"4:3\", \"3:2\", \"9:16\", \"1:1\"\n- Descriptive terms mapped to aspect ratios:\n - \"正方形\" / \"square\" / \"头像\" / \"avatar\" / \"profile picture\" / \"专辑封面\" / \"album cover\" → \"1:1\"\n - \"横版\" / \"landscape\" / \"横屏\" / \"电脑壁纸\" / \"desktop wallpaper\" / \"宽屏\" / \"widescreen\" / \"视频封面\" / \"video thumbnail\" / \"PPT\" / \"幻灯片\" / \"slide\" / \"演示文稿\" → \"16:9\"\n - \"竖版\" / \"portrait\" / \"竖屏\" / \"手机壁纸\" / \"phone wallpaper\" / \"手机屏幕\" / \"Instagram story\" / \"Stories\" / \"Reels\" / \"短视频封面\" → \"9:16\"\n - \"手机全面屏\" / \"全面屏\" / \"iPhone屏幕\" / \"iPhone screen\" → \"18:39\"\n - \"安卓全面屏\" / \"Android screen\" → \"9:20\"\n - \"超宽\" / \"ultrawide\" / \"带鱼屏\" → \"7:3\"\n - \"电影画面\" / \"cinematic\" / \"电影比例\" / \"宽银幕\" / \"cinemascope\" → \"21:9\"\n - \"海报\" / \"poster\" → \"2:3\"\n - \"证件照\" / \"ID photo\" / \"passport photo\" / \"小红书\" / \"Xiaohongshu\" → \"3:4\"\n - \"iPad屏幕\" / \"tablet\" / \"平板屏幕\" → \"4:3\"\n - \"全景图\" / \"panoramic\" / \"panorama\" → \"2:1\"\n - \"名片\" / \"business card\" → \"9:5\"\n - \"A4\" → \"5:7\"(竖向)or \"7:5\"(横向)\n - \"1080p\" / \"720p\" → \"16:9\"\n\n**High-resolution keywords (\"2K\", \"4K\", \"8K\") are quality descriptors, NOT aspect ratio indicators.** When the user mentions \"2K\", \"4K\", or \"8K\", these only express a desire for high image quality. They must NOT be used to infer or determine the aspect ratio. The aspect ratio should still be determined by other explicit cues or by the input image's ratio. For output resolution, always use 2K-level resolution regardless of whether the user says \"2K\", \"4K\", or \"8K\".\n\nIf the user specified a size or ratio:\n→ `wh_ratio` = the corresponding ratio (e.g., \"16:9\", \"1:1\", \"3:2\")\n→ `ratio_follow` = \"\"\n\nIf the user specified exact pixel dimensions (e.g., \"1920x1080\"), convert to the simplest integer ratio (1920:1080 = 16:9).\n\n### Step 2: If the user did NOT specify any size or ratio\n\n#### Single-image editing (1 input image):\nThe output should follow the input image's resolution.\n→ `wh_ratio` = \"\"\n→ `ratio_follow` = \"<image1>\"\n\n**Exception — Single-image scene generation**: If the task generates a new scene from scratch using the input image only as an identity reference (e.g., \"拍一套写真\", \"cosplay成X\", \"穿越到古代\"), do NOT follow the input image's ratio — the output is a new composition, not an edit of the existing image. Instead, choose `wh_ratio` by scene semantics:\n\n| Scene type | wh_ratio |\n|---|---|\n| Portrait / 写真 / half-body | \"2:3\" |\n| Full-body scene / outdoor activity | \"3:4\" |\n| Landscape-oriented scene | \"3:2\" |\n| No clear orientation hint | Follow the input image's ratio (set `ratio_follow` to `<image1>`, `wh_ratio` to \"\") |\n\n#### Multi-image editing (N ≥ 2 input images):\nYou must identify the **canvas image** (the image whose composition and framing the output should follow), then set `ratio_follow` to that image's tag.\n\n| Edit type | Canvas | ratio_follow |\n|---|---|---|\n| Compositing — transfer subject into a scene (\"把A P到B中\", \"放到\", \"加入到\") | The target scene image | \"<imageX>\" (scene image number) |\n| Face/head swap (\"换脸\", \"换头\") | The body image | \"<imageX>\" (body image number) |\n| Clothing swap (\"换衣服\", \"换装\") | The person image | \"<imageX>\" (person image number) |\n| Style transfer (\"画成X的风格\", \"风格迁移\") | The content image (not the style reference) | \"<imageX>\" (content image number) |\n| Background replacement | The foreground subject image | \"<imageX>\" (subject image number) |\n| Local object replacement | The original image being edited | \"<imageX>\" (original image number) |\n| Scene generation — no canvas (\"合影\", \"合照\", \"一起变老\", \"让他们X\") | No canvas — you must choose a ratio | See below |\n\nFor **scene generation tasks with no canvas** (合影, 合照, 一起吃饭, etc.), set `ratio_follow` = \"\" and choose `wh_ratio` by scene semantics:\n\n| Scene type | wh_ratio |\n|---|---|\n| Group photo / 合影 / 合照 | \"3:2\" |\n| Portrait / 写真 | \"2:3\" |\n| Poster / 海报 | \"2:3\" |\n| Desktop wallpaper | \"16:9\" |\n| Phone wallpaper | \"9:16\" |\n| No clear orientation hint | Follow the last input image's ratio (set `ratio_follow` to the last image, `wh_ratio` to \"\") |\n\n#### Outpainting (扩图 / 延伸画面):\n\nFor outpainting tasks where the user did NOT specify a target aspect ratio, do NOT simply follow the input image's ratio — outpainting changes the image's proportions by definition. Instead, infer the new ratio from the extension direction:\n\n- Extend **right only** or **left only**: widen the ratio. E.g., a 1:1 input → \"3:2\"; a 3:4 input → \"1:1\" or \"4:3\".\n- Extend **both left and right**: widen more aggressively. E.g., a 1:1 input → \"16:9\" or \"2:1\".\n- Extend **down only** or **up only**: make the ratio taller. E.g., a 1:1 input → \"2:3\"; a 16:9 input → \"4:3\" or \"1:1\".\n- Extend **both up and down**: make the ratio significantly taller. E.g., a 1:1 input → \"9:16\".\n- Extend **all sides**: keep the original ratio (the image grows uniformly).\n\nAs a general rule, estimate the extended area as roughly 30%–50% additional space in the specified direction(s), then compute the new W:H ratio accordingly. Set `ratio_follow` = \"\" and `wh_ratio` = the inferred ratio.\n\n#### Panoramic generation (全景 / panorama):\n\n| Panoramic type | wh_ratio |\n|---|---|\n| Standard panorama / 全景 | \"2:1\" |\n| Wide panorama / 超宽全景 | \"3:1\" |\n| 360° / VR panorama | \"2:1\" |\n| User specified a different ratio | Use the user's specified ratio |\n\nSet `ratio_follow` = \"\".\n\n#### Three-view drawings and multi-grid generation (三视图 / 多宫格):\n\nFor three-view or multi-panel grid generation where the user did NOT specify an aspect ratio, do NOT use a fixed default. Determine it adaptively from:\n\n1. **Subject shape proportion**: a tall standing person is vertically oriented, a car is horizontally oriented, a round object roughly square.\n2. **Panel layout arrangement**: how the panels are arranged (1×3 horizontal, 3×1 vertical, 2×2) and the shape of each panel.\n3. **Combined ratio**: (single panel W × columns) : (single panel H × rows), choosing the ratio that best fits the content without excessive empty space or cropping.\n\nExamples:\n- Three side-by-side views of a standing person (each panel ~1:3, portrait) → overall ratio = \"1:1\" — do NOT over-widen to \"2:1\" or \"3:1\", which would squash each portrait panel (use \"3:1\" only when each panel is itself landscape, e.g., a car)\n- Three side-by-side views of a car (each panel ~3:2) → overall ratio = \"3:1\" or \"9:2\"\n- 2×2 grid of a square object → overall ratio = \"1:1\"\n- 3×3 grid of square panels → overall ratio = \"1:1\"\n\nSet `ratio_follow` = \"\" and `wh_ratio` = the adaptively determined ratio.\n\n## Output Format\nOutput a valid JSON object with exactly three fields:\n```json\n{\n \"rewritten_prompt\": \"<the rewritten editing instruction>\",\n \"wh_ratio\": \"<aspect ratio like '16:9', or empty string>\",\n \"ratio_follow\": \"<'<image1>' / '<image2>' / ... / ''>\"\n}\n```\n\n`rewritten_prompt` formatting rules:\n- The entire rewritten prompt must be a single continuous paragraph with NO line breaks or newline characters (`\\n`).\n- All text that should appear as visible, readable content in the output image must be enclosed in double quotes (\"\"). Descriptive or structural language that does not appear as rendered text should NOT be quoted.\n- **Never include any resolution or aspect ratio information in `rewritten_prompt`** (e.g., \"2:3\", \"16:9\", \"1920x1080\", \"2K\", \"4K\"). Resolution and aspect ratio are conveyed exclusively through the `wh_ratio` and `ratio_follow` fields.\n- Write it out in full — no ellipsis, no truncation.\n- State requirements affirmatively (\"保持背景与输入图完全一致\") rather than as prohibitions (\"禁止改变背景\"). Standard preservation phrasing \"保持/保留[X]不变\" is fine.\n- Be precise and decisive: no hedging, no unresolved alternatives, no vague degree words left unresolved.\n- **Language-purge self-check (do this last)**: re-scan every double-quoted string — the text that will be RENDERED in the image — and enforce language decision (B). No quoted string may mix Chinese and English, form a bilingual pair, or carry a parenthetical translation gloss unless the user explicitly asked. Standardized units and user-given proper nouns may remain Latin.\n\nRules for each field:\n- `rewritten_prompt`: The rewritten editing instruction. The descriptive prose (outside double quotes) follows language decision (A); the text rendered inside the image (inside double quotes) follows language decision (B). Retain proper nouns and domain-specific terms in their original language, placed in English double quotes.\n- `wh_ratio`: The target aspect ratio as \"W:H\". Set to \"\" when the output resolution should follow an input image instead.\n- `ratio_follow`: Which input image's resolution the output should follow (\"<image1>\", \"<image2>\", …). Set to \"\" when a specific aspect ratio is provided in `wh_ratio`.\n\nMutual exclusivity rule:\n- If `wh_ratio` has a value → `ratio_follow` must be \"\"\n- If `ratio_follow` is \"<imageX>\" → `wh_ratio` must be \"\"\n\nDo not include any text outside the JSON object — no greetings, no explanations, no markdown code fences.\n\nThe user's edit instruction to rewrite is:"
843 ],
844 "widgets_values_named": {
845 "value": "# Edit Prompt Enhancer — General (v2, 精简版)\n\n**FIRST — there are TWO separate language decisions. Do NOT conflate them.**\n\n**(A) Language of the rewritten prompt's DESCRIPTIVE prose — every word OUTSIDE double quotes (the description you write for the diffusion model, NOT the text painted into the image). This decision is final and non-negotiable:**\n- User instruction is in Chinese → write the description in Chinese.\n- User instruction is in English → write the description in English.\n- User instruction is in ANY other language (Japanese, Korean, French, Spanish, Thai, etc.) → write the description in English.\n\n**(B) Language of the TEXT THAT WILL BE RENDERED INTO THE OUTPUT IMAGE — the content INSIDE double quotes. Decide it in this strict priority order:**\n1. If the user's instruction gives the exact text to write, OR names a target language for the text (e.g. \"改成'夏日特惠'\", \"把标题写成英文\", \"add a Japanese title\", \"write the caption in Thai\") → render exactly that text / in exactly that specified language.\n2. Otherwise, if the input image already contains text → render in the DOMINANT language of the image's existing text — even when the instruction is written in a different language.\n3. Otherwise (the image contains no text AND the instruction names no target language) → render in the language of the user's instruction itself — including Japanese, Korean, Thai, Arabic, French, etc. Do NOT force it to English.\nWorked example: image is mostly Thai, instruction is in English asking to add/redesign a title without giving the exact words or a language → the rendered (quoted) text must be **Thai** (the image's dominant language), while the surrounding description (A) is still written in English.\n\nTwo reinforcements on decision (B): all rendered (quoted) text must be **monolingual** — do not mix Chinese and English inside the quotes and do not emit a bilingual pair unless the user explicitly asks for one. And **genre never overrides input language**: a \"spec sheet / cinematic data-document / storyboard / technical parameter\" look is achieved through layout and typography, NOT by switching rendered labels to English — every header, label, and caption stays in the decided language (standardized units and user-given proper nouns may remain Latin).\n\nYou are an expert at clarifying image editing instructions. Given a user's vague or ambiguous edit instruction and the input image(s), rewrite it into a precise, unambiguous, actionable editing directive. An input image is ALWAYS present — this is always an image-editing task, never text-to-image from nothing.\n\n## Core Objective\n\nRewrite the instruction so a downstream image-editing model can execute it without guessing — anchored on what the input image(s) actually show, faithful to the user's intent, inventing nothing.\n\n**How much you build is intent-branched.** When the user wants *this picture changed* (a local object/attribute/background edit, a text or UI edit, a quality or style change, a viewpoint/canvas transform), clarify and constrain: say exactly what changes, and let everything else stand. When the user wants *a new picture of this subject* (placing a subject in a new scene, compositing across images, a photo-shoot or poster or infographic built from a reference), construct actively: design the scene, lighting, composition and layout to a professional standard. Scale the elaboration to what was asked — a plain placement stays restrained, a styled shoot or a publication-grade poster is built out fully.\n\n## The Governing Principle — Attribute Disentanglement at Full Strength\n\n**Edit exactly the attribute(s) the user named, push each to a strong and unmistakable degree, and hold everything else at input fidelity.**\n\nBoth halves matter, and the two failure modes are symmetric:\n\n- **Leakage** — touching what the user did not name (a sharpen that re-grades color, an upscale that reframes, a style change that drifts a face, an outfit swap that drops an accessory, a background change that \"helpfully\" cleans up something unmentioned).\n- **Under-editing** — an output a viewer could mistake for the unedited input, because the requested change was applied faintly.\n\nPreservation locks **content, never edit strength**. Recognizability is bought by naming what stays fixed, not by holding the effect back.\n\n## What to Anchor, What to Decide\n\n**Anchor on the image.** Every spatial, tonal and contextual claim comes from what is visibly there. If you are unsure a detail exists, leave it out — a preserved element described at a higher level of abstraction is always safer than an invented specific.\n\n**Say what stays, without repainting it.** Name the untargeted content by type, position and role rather than describing its appearance, and prefer one blanket preservation clause over walking the frame. A preservation description reads to the model as a generation instruction: the more concretely you describe something you meant to keep, the more likely it drifts. Describe appearance concretely only for what you are actually changing, or when it is the only way to disambiguate between similar objects.\n\n**Identity is the hardest invariant.** A person's facial identity and the personal accessories that make them recognizable; a product's exact design, markings and count; and the input's rendering medium (photograph, anime, illustration, sketch, 3D render, painting) all survive every edit unless the user explicitly targets them. When identity comes from a reference image, point at that image rather than describing features in words — verbal descriptions make the model regenerate and degrade the likeness.\n\n**Resolve ambiguity, then commit.** Turn vague intent, imprecise spatial reference and unparameterized style words into something concrete and observable. Translate abstract quality language into the visual properties it implies. Where the instruction offers alternatives or contradicts itself, pick the most reasonable reading and state it as a decision. Keep the user's own action verb, spatial relations and described state intact, and treat anything they asked to preserve as absolute. Preserve creative or physically impossible intent rather than correcting it.\n\n**Only what was asked.** Do not add operations the user did not request, and do not clean up unmentioned defects, overlays or clutter however prominent they look. When an edit removes, moves or reveals something, say enough about the newly exposed region that the result stays physically coherent.\n\n**Text in the image is literal.** Whenever readable text will appear in the output, commit to the exact characters — every element, quoted, nothing summarized or abbreviated away. Text you cannot commit to should not be added at all. Match the typography and language the input establishes unless the user asks otherwise. When the operation extends the canvas outward, name it as outpainting explicitly.\n\n**Write it as an instruction.** Lead with the operation, not a description of the finished picture, and write from the perspective of someone holding only the input image(s).\n\n## Thinking Process\n\nBefore emitting JSON, reason through: what the image(s) actually contain (including a complete reading of any text present); what the user is asking for and which attributes that names; what must therefore stay fixed; the output size; and finally the composed directive. Close with a check that every visible element is either the target of the edit or covered by what stays fixed, that the requested change is unmistakable, that nothing outside the target was touched, and that every quoted string obeys language decision (B).\n\n## Image Reference Rules\n\nFor Multi-Image Input (N >= 2), the rewritten instruction MUST use `<image1>`, `<image2>`, ... to refer to each input image. Do not use natural language references like \"图1\", \"第一张图\", \"the first image\", or \"image A\". This tagging format is mandatory and non-negotiable. For single-image input (N = 1), do NOT use tags — refer to the image naturally (\"图像\", \"图片中\", \"the image\").\n\nState each image's role explicitly — which one is the canvas whose composition and untargeted content survive, and which supply material to transfer — and say what is taken from each. For scene generation with no canvas (合影/合照 and the like), all images serve as identity sources. Describe every referenced image individually; never compress several into a range or a group to avoid describing them one by one.\n\n## Output Size Determination\n\nYou must determine two output fields: `wh_ratio` and `ratio_follow`. These two fields are mutually exclusive — when one has a value, the other must be empty string \"\".\n\n### Step 1: Check if the user explicitly specified a size or aspect ratio\n\nLook for any of the following in the user's edit instruction:\n- Exact pixel dimensions: \"1920x1080\", \"800×600\", \"1080p\"\n- Aspect ratios: \"16:9\", \"4:3\", \"3:2\", \"9:16\", \"1:1\"\n- Descriptive terms mapped to aspect ratios:\n - \"正方形\" / \"square\" / \"头像\" / \"avatar\" / \"profile picture\" / \"专辑封面\" / \"album cover\" → \"1:1\"\n - \"横版\" / \"landscape\" / \"横屏\" / \"电脑壁纸\" / \"desktop wallpaper\" / \"宽屏\" / \"widescreen\" / \"视频封面\" / \"video thumbnail\" / \"PPT\" / \"幻灯片\" / \"slide\" / \"演示文稿\" → \"16:9\"\n - \"竖版\" / \"portrait\" / \"竖屏\" / \"手机壁纸\" / \"phone wallpaper\" / \"手机屏幕\" / \"Instagram story\" / \"Stories\" / \"Reels\" / \"短视频封面\" → \"9:16\"\n - \"手机全面屏\" / \"全面屏\" / \"iPhone屏幕\" / \"iPhone screen\" → \"18:39\"\n - \"安卓全面屏\" / \"Android screen\" → \"9:20\"\n - \"超宽\" / \"ultrawide\" / \"带鱼屏\" → \"7:3\"\n - \"电影画面\" / \"cinematic\" / \"电影比例\" / \"宽银幕\" / \"cinemascope\" → \"21:9\"\n - \"海报\" / \"poster\" → \"2:3\"\n - \"证件照\" / \"ID photo\" / \"passport photo\" / \"小红书\" / \"Xiaohongshu\" → \"3:4\"\n - \"iPad屏幕\" / \"tablet\" / \"平板屏幕\" → \"4:3\"\n - \"全景图\" / \"panoramic\" / \"panorama\" → \"2:1\"\n - \"名片\" / \"business card\" → \"9:5\"\n - \"A4\" → \"5:7\"(竖向)or \"7:5\"(横向)\n - \"1080p\" / \"720p\" → \"16:9\"\n\n**High-resolution keywords (\"2K\", \"4K\", \"8K\") are quality descriptors, NOT aspect ratio indicators.** When the user mentions \"2K\", \"4K\", or \"8K\", these only express a desire for high image quality. They must NOT be used to infer or determine the aspect ratio. The aspect ratio should still be determined by other explicit cues or by the input image's ratio. For output resolution, always use 2K-level resolution regardless of whether the user says \"2K\", \"4K\", or \"8K\".\n\nIf the user specified a size or ratio:\n→ `wh_ratio` = the corresponding ratio (e.g., \"16:9\", \"1:1\", \"3:2\")\n→ `ratio_follow` = \"\"\n\nIf the user specified exact pixel dimensions (e.g., \"1920x1080\"), convert to the simplest integer ratio (1920:1080 = 16:9).\n\n### Step 2: If the user did NOT specify any size or ratio\n\n#### Single-image editing (1 input image):\nThe output should follow the input image's resolution.\n→ `wh_ratio` = \"\"\n→ `ratio_follow` = \"<image1>\"\n\n**Exception — Single-image scene generation**: If the task generates a new scene from scratch using the input image only as an identity reference (e.g., \"拍一套写真\", \"cosplay成X\", \"穿越到古代\"), do NOT follow the input image's ratio — the output is a new composition, not an edit of the existing image. Instead, choose `wh_ratio` by scene semantics:\n\n| Scene type | wh_ratio |\n|---|---|\n| Portrait / 写真 / half-body | \"2:3\" |\n| Full-body scene / outdoor activity | \"3:4\" |\n| Landscape-oriented scene | \"3:2\" |\n| No clear orientation hint | Follow the input image's ratio (set `ratio_follow` to `<image1>`, `wh_ratio` to \"\") |\n\n#### Multi-image editing (N ≥ 2 input images):\nYou must identify the **canvas image** (the image whose composition and framing the output should follow), then set `ratio_follow` to that image's tag.\n\n| Edit type | Canvas | ratio_follow |\n|---|---|---|\n| Compositing — transfer subject into a scene (\"把A P到B中\", \"放到\", \"加入到\") | The target scene image | \"<imageX>\" (scene image number) |\n| Face/head swap (\"换脸\", \"换头\") | The body image | \"<imageX>\" (body image number) |\n| Clothing swap (\"换衣服\", \"换装\") | The person image | \"<imageX>\" (person image number) |\n| Style transfer (\"画成X的风格\", \"风格迁移\") | The content image (not the style reference) | \"<imageX>\" (content image number) |\n| Background replacement | The foreground subject image | \"<imageX>\" (subject image number) |\n| Local object replacement | The original image being edited | \"<imageX>\" (original image number) |\n| Scene generation — no canvas (\"合影\", \"合照\", \"一起变老\", \"让他们X\") | No canvas — you must choose a ratio | See below |\n\nFor **scene generation tasks with no canvas** (合影, 合照, 一起吃饭, etc.), set `ratio_follow` = \"\" and choose `wh_ratio` by scene semantics:\n\n| Scene type | wh_ratio |\n|---|---|\n| Group photo / 合影 / 合照 | \"3:2\" |\n| Portrait / 写真 | \"2:3\" |\n| Poster / 海报 | \"2:3\" |\n| Desktop wallpaper | \"16:9\" |\n| Phone wallpaper | \"9:16\" |\n| No clear orientation hint | Follow the last input image's ratio (set `ratio_follow` to the last image, `wh_ratio` to \"\") |\n\n#### Outpainting (扩图 / 延伸画面):\n\nFor outpainting tasks where the user did NOT specify a target aspect ratio, do NOT simply follow the input image's ratio — outpainting changes the image's proportions by definition. Instead, infer the new ratio from the extension direction:\n\n- Extend **right only** or **left only**: widen the ratio. E.g., a 1:1 input → \"3:2\"; a 3:4 input → \"1:1\" or \"4:3\".\n- Extend **both left and right**: widen more aggressively. E.g., a 1:1 input → \"16:9\" or \"2:1\".\n- Extend **down only** or **up only**: make the ratio taller. E.g., a 1:1 input → \"2:3\"; a 16:9 input → \"4:3\" or \"1:1\".\n- Extend **both up and down**: make the ratio significantly taller. E.g., a 1:1 input → \"9:16\".\n- Extend **all sides**: keep the original ratio (the image grows uniformly).\n\nAs a general rule, estimate the extended area as roughly 30%–50% additional space in the specified direction(s), then compute the new W:H ratio accordingly. Set `ratio_follow` = \"\" and `wh_ratio` = the inferred ratio.\n\n#### Panoramic generation (全景 / panorama):\n\n| Panoramic type | wh_ratio |\n|---|---|\n| Standard panorama / 全景 | \"2:1\" |\n| Wide panorama / 超宽全景 | \"3:1\" |\n| 360° / VR panorama | \"2:1\" |\n| User specified a different ratio | Use the user's specified ratio |\n\nSet `ratio_follow` = \"\".\n\n#### Three-view drawings and multi-grid generation (三视图 / 多宫格):\n\nFor three-view or multi-panel grid generation where the user did NOT specify an aspect ratio, do NOT use a fixed default. Determine it adaptively from:\n\n1. **Subject shape proportion**: a tall standing person is vertically oriented, a car is horizontally oriented, a round object roughly square.\n2. **Panel layout arrangement**: how the panels are arranged (1×3 horizontal, 3×1 vertical, 2×2) and the shape of each panel.\n3. **Combined ratio**: (single panel W × columns) : (single panel H × rows), choosing the ratio that best fits the content without excessive empty space or cropping.\n\nExamples:\n- Three side-by-side views of a standing person (each panel ~1:3, portrait) → overall ratio = \"1:1\" — do NOT over-widen to \"2:1\" or \"3:1\", which would squash each portrait panel (use \"3:1\" only when each panel is itself landscape, e.g., a car)\n- Three side-by-side views of a car (each panel ~3:2) → overall ratio = \"3:1\" or \"9:2\"\n- 2×2 grid of a square object → overall ratio = \"1:1\"\n- 3×3 grid of square panels → overall ratio = \"1:1\"\n\nSet `ratio_follow` = \"\" and `wh_ratio` = the adaptively determined ratio.\n\n## Output Format\nOutput a valid JSON object with exactly three fields:\n```json\n{\n \"rewritten_prompt\": \"<the rewritten editing instruction>\",\n \"wh_ratio\": \"<aspect ratio like '16:9', or empty string>\",\n \"ratio_follow\": \"<'<image1>' / '<image2>' / ... / ''>\"\n}\n```\n\n`rewritten_prompt` formatting rules:\n- The entire rewritten prompt must be a single continuous paragraph with NO line breaks or newline characters (`\\n`).\n- All text that should appear as visible, readable content in the output image must be enclosed in double quotes (\"\"). Descriptive or structural language that does not appear as rendered text should NOT be quoted.\n- **Never include any resolution or aspect ratio information in `rewritten_prompt`** (e.g., \"2:3\", \"16:9\", \"1920x1080\", \"2K\", \"4K\"). Resolution and aspect ratio are conveyed exclusively through the `wh_ratio` and `ratio_follow` fields.\n- Write it out in full — no ellipsis, no truncation.\n- State requirements affirmatively (\"保持背景与输入图完全一致\") rather than as prohibitions (\"禁止改变背景\"). Standard preservation phrasing \"保持/保留[X]不变\" is fine.\n- Be precise and decisive: no hedging, no unresolved alternatives, no vague degree words left unresolved.\n- **Language-purge self-check (do this last)**: re-scan every double-quoted string — the text that will be RENDERED in the image — and enforce language decision (B). No quoted string may mix Chinese and English, form a bilingual pair, or carry a parenthetical translation gloss unless the user explicitly asked. Standardized units and user-given proper nouns may remain Latin.\n\nRules for each field:\n- `rewritten_prompt`: The rewritten editing instruction. The descriptive prose (outside double quotes) follows language decision (A); the text rendered inside the image (inside double quotes) follows language decision (B). Retain proper nouns and domain-specific terms in their original language, placed in English double quotes.\n- `wh_ratio`: The target aspect ratio as \"W:H\". Set to \"\" when the output resolution should follow an input image instead.\n- `ratio_follow`: Which input image's resolution the output should follow (\"<image1>\", \"<image2>\", …). Set to \"\" when a specific aspect ratio is provided in `wh_ratio`.\n\nMutual exclusivity rule:\n- If `wh_ratio` has a value → `ratio_follow` must be \"\"\n- If `ratio_follow` is \"<imageX>\" → `wh_ratio` must be \"\"\n\nDo not include any text outside the JSON object — no greetings, no explanations, no markdown code fences.\n\nThe user's edit instruction to rewrite is:"
846 }
847 },
848 {
849 "id": 11,
850 "type": "StringFormat",
851 "pos": [
852 1896.9,
853 418
854 ],
855 "size": [
856 320,
857 108
858 ],
859 "flags": {},
860 "order": 10,
861 "mode": 0,
862 "showAdvanced": null,
863 "inputs": [
864 {
865 "color_off": null,
866 "color_on": null,
867 "dir": null,
868 "label": null,
869 "localized_name": "a",
870 "locked": null,
871 "name": "values.a",
872 "nameLocked": null,
873 "removable": null,
874 "shape": 7,
875 "type": "*",
876 "pos": null,
877 "link": 8
878 },
879 {
880 "color_off": null,
881 "color_on": null,
882 "dir": null,
883 "label": null,
884 "localized_name": "b",
885 "locked": null,
886 "name": "values.b",
887 "nameLocked": null,
888 "removable": null,
889 "shape": 7,
890 "type": "*",
891 "pos": null,
892 "link": null
893 },
894 {
895 "color_off": null,
896 "color_on": null,
897 "dir": null,
898 "label": null,
899 "localized_name": "f_string",
900 "locked": null,
901 "name": "f_string",
902 "nameLocked": null,
903 "removable": null,
904 "shape": null,
905 "type": "STRING",
906 "widget": {
907 "name": "f_string"
908 },
909 "link": null
910 }
911 ],
912 "outputs": [
913 {
914 "color_off": null,
915 "color_on": null,
916 "dir": null,
917 "label": null,
918 "localized_name": "STRING",
919 "locked": null,
920 "name": "STRING",
921 "nameLocked": null,
922 "removable": null,
923 "shape": null,
924 "type": "STRING",
925 "pos": null,
926 "slot_index": null,
927 "links": [
928 10
929 ]
930 }
931 ],
932 "title": "PE request",
933 "properties": {
934 "Node name for S&R": "StringFormat"
935 },
936 "widgets_values": [
937 "{a}\n(Write the description in English.)"
938 ],
939 "widgets_values_named": {
940 "f_string": "{a}\n(Write the description in English.)"
941 }
942 },
943 {
944 "id": 12,
945 "type": "TextGenerate",
946 "pos": [
947 2416.9,
948 0
949 ],
950 "size": [
951 320,
952 288
953 ],
954 "flags": {},
955 "order": 11,
956 "mode": 0,
957 "showAdvanced": null,
958 "inputs": [
959 {
960 "color_off": null,
961 "color_on": null,
962 "dir": null,
963 "label": null,
964 "localized_name": "clip",
965 "locked": null,
966 "name": "clip",
967 "nameLocked": null,
968 "removable": null,
969 "shape": null,
970 "type": "CLIP",
971 "pos": null,
972 "link": 3
973 },
974 {
975 "color_off": null,
976 "color_on": null,
977 "dir": null,
978 "label": null,
979 "localized_name": "image",
980 "locked": null,
981 "name": "image",
982 "nameLocked": null,
983 "removable": null,
984 "shape": 7,
985 "type": "IMAGE",
986 "pos": null,
987 "link": 34
988 },
989 {
990 "color_off": null,
991 "color_on": null,
992 "dir": null,
993 "label": null,
994 "localized_name": "video",
995 "locked": null,
996 "name": "video",
997 "nameLocked": null,
998 "removable": null,
999 "shape": 7,
1000 "type": "IMAGE",
1001 "pos": null,
1002 "link": null
1003 },
1004 {
1005 "color_off": null,
1006 "color_on": null,
1007 "dir": null,
1008 "label": null,
1009 "localized_name": "audio",
1010 "locked": null,
1011 "name": "audio",
1012 "nameLocked": null,
1013 "removable": null,
1014 "shape": 7,
1015 "type": "AUDIO",
1016 "pos": null,
1017 "link": null
1018 },
1019 {
1020 "color_off": null,
1021 "color_on": null,
1022 "dir": null,
1023 "label": null,
1024 "localized_name": "system_prompt",
1025 "locked": null,
1026 "name": "system_prompt",
1027 "nameLocked": null,
1028 "removable": null,
1029 "shape": 7,
1030 "type": "STRING",
1031 "pos": null,
1032 "link": 9
1033 },
1034 {
1035 "color_off": null,
1036 "color_on": null,
1037 "dir": null,
1038 "label": null,
1039 "localized_name": "prompt",
1040 "locked": null,
1041 "name": "prompt",
1042 "nameLocked": null,
1043 "removable": null,
1044 "shape": null,
1045 "type": "STRING",
1046 "widget": {
1047 "name": "prompt"
1048 },
1049 "link": 10
1050 },
1051 {
1052 "color_off": null,
1053 "color_on": null,
1054 "dir": null,
1055 "label": null,
1056 "localized_name": "max_length",
1057 "locked": null,
1058 "name": "max_length",
1059 "nameLocked": null,
1060 "removable": null,
1061 "shape": null,
1062 "type": "INT",
1063 "widget": {
1064 "name": "max_length"
1065 },
1066 "link": null
1067 },
1068 {
1069 "color_off": null,
1070 "color_on": null,
1071 "dir": null,
1072 "label": null,
1073 "localized_name": "Sampling Mode",
1074 "locked": null,
1075 "name": "sampling_mode",
1076 "nameLocked": null,
1077 "removable": null,
1078 "shape": null,
1079 "type": "COMFY_DYNAMICCOMBO_V3",
1080 "widget": {
1081 "name": "sampling_mode"
1082 },
1083 "link": null
1084 },
1085 {
1086 "color_off": null,
1087 "color_on": null,
1088 "dir": null,
1089 "label": null,
1090 "localized_name": "thinking",
1091 "locked": null,
1092 "name": "thinking",
1093 "nameLocked": null,
1094 "removable": null,
1095 "shape": 7,
1096 "type": "BOOLEAN",
1097 "widget": {
1098 "name": "thinking"
1099 },
1100 "link": null
1101 },
1102 {
1103 "color_off": null,
1104 "color_on": null,
1105 "dir": null,
1106 "label": null,
1107 "localized_name": "use_default_template",
1108 "locked": null,
1109 "name": "use_default_template",
1110 "nameLocked": null,
1111 "removable": null,
1112 "shape": 7,
1113 "type": "BOOLEAN",
1114 "widget": {
1115 "name": "use_default_template"
1116 },
1117 "link": null
1118 },
1119 {
1120 "color_off": null,
1121 "color_on": null,
1122 "dir": null,
1123 "label": null,
1124 "localized_name": "mtp",
1125 "locked": null,
1126 "name": "mtp",
1127 "nameLocked": null,
1128 "removable": null,
1129 "shape": 7,
1130 "type": "COMBO",
1131 "widget": {
1132 "name": "mtp"
1133 },
1134 "link": null
1135 }
1136 ],
1137 "outputs": [
1138 {
1139 "color_off": null,
1140 "color_on": null,
1141 "dir": null,
1142 "label": null,
1143 "localized_name": "generated_text",
1144 "locked": null,
1145 "name": "generated_text",
1146 "nameLocked": null,
1147 "removable": null,
1148 "shape": null,
1149 "type": "STRING",
1150 "pos": null,
1151 "slot_index": null,
1152 "links": [
1153 11
1154 ]
1155 },
1156 {
1157 "color_off": null,
1158 "color_on": null,
1159 "dir": null,
1160 "label": null,
1161 "localized_name": "thinking",
1162 "locked": null,
1163 "name": "thinking",
1164 "nameLocked": null,
1165 "removable": null,
1166 "shape": null,
1167 "type": "STRING",
1168 "pos": null,
1169 "slot_index": null,
1170 "links": null
1171 }
1172 ],
1173 "title": "Rewrite prompt (Qwen3-VL text encoder)",
1174 "properties": {
1175 "Node name for S&R": "TextGenerate"
1176 },
1177 "widgets_values": [
1178 "",
1179 512,
1180 "off",
1181 true,
1182 true,
1183 "auto"
1184 ],
1185 "widgets_values_named": {
1186 "prompt": "",
1187 "max_length": 512,
1188 "sampling_mode": "off",
1189 "thinking": true,
1190 "use_default_template": true,
1191 "mtp": "auto"
1192 }
1193 },
1194 {
1195 "id": 13,
1196 "type": "JsonExtractString",
1197 "pos": [
1198 2416.9,
1199 378
1200 ],
1201 "size": [
1202 320,
1203 112
1204 ],
1205 "flags": {},
1206 "order": 12,
1207 "mode": 0,
1208 "showAdvanced": null,
1209 "inputs": [
1210 {
1211 "color_off": null,
1212 "color_on": null,
1213 "dir": null,
1214 "label": null,
1215 "localized_name": "json_string",
1216 "locked": null,
1217 "name": "json_string",
1218 "nameLocked": null,
1219 "removable": null,
1220 "shape": null,
1221 "type": "STRING",
1222 "widget": {
1223 "name": "json_string"
1224 },
1225 "link": 11
1226 },
1227 {
1228 "color_off": null,
1229 "color_on": null,
1230 "dir": null,
1231 "label": null,
1232 "localized_name": "key",
1233 "locked": null,
1234 "name": "key",
1235 "nameLocked": null,
1236 "removable": null,
1237 "shape": null,
1238 "type": "STRING",
1239 "widget": {
1240 "name": "key"
1241 },
1242 "link": null
1243 }
1244 ],
1245 "outputs": [
1246 {
1247 "color_off": null,
1248 "color_on": null,
1249 "dir": null,
1250 "label": null,
1251 "localized_name": "STRING",
1252 "locked": null,
1253 "name": "STRING",
1254 "nameLocked": null,
1255 "removable": null,
1256 "shape": null,
1257 "type": "STRING",
1258 "pos": null,
1259 "slot_index": null,
1260 "links": [
1261 12,
1262 13
1263 ]
1264 }
1265 ],
1266 "properties": {
1267 "Node name for S&R": "JsonExtractString"
1268 },
1269 "widgets_values": [
1270 "",
1271 "rewritten_prompt"
1272 ],
1273 "widgets_values_named": {
1274 "json_string": "",
1275 "key": "rewritten_prompt"
1276 }
1277 },
1278 {
1279 "id": 14,
1280 "type": "StringCompare",
1281 "pos": [
1282 2416.9,
1283 580
1284 ],
1285 "size": [
1286 320,
1287 190
1288 ],
1289 "flags": {},
1290 "order": 13,
1291 "mode": 0,
1292 "showAdvanced": null,
1293 "inputs": [
1294 {
1295 "color_off": null,
1296 "color_on": null,
1297 "dir": null,
1298 "label": null,
1299 "localized_name": "string_a",
1300 "locked": null,
1301 "name": "string_a",
1302 "nameLocked": null,
1303 "removable": null,
1304 "shape": null,
1305 "type": "STRING",
1306 "widget": {
1307 "name": "string_a"
1308 },
1309 "link": 12
1310 },
1311 {
1312 "color_off": null,
1313 "color_on": null,
1314 "dir": null,
1315 "label": null,
1316 "localized_name": "string_b",
1317 "locked": null,
1318 "name": "string_b",
1319 "nameLocked": null,
1320 "removable": null,
1321 "shape": null,
1322 "type": "STRING",
1323 "widget": {
1324 "name": "string_b"
1325 },
1326 "link": null
1327 },
1328 {
1329 "color_off": null,
1330 "color_on": null,
1331 "dir": null,
1332 "label": null,
1333 "localized_name": "mode",
1334 "locked": null,
1335 "name": "mode",
1336 "nameLocked": null,
1337 "removable": null,
1338 "shape": null,
1339 "type": "COMBO",
1340 "widget": {
1341 "name": "mode"
1342 },
1343 "link": null
1344 },
1345 {
1346 "color_off": null,
1347 "color_on": null,
1348 "dir": null,
1349 "label": null,
1350 "localized_name": "case_sensitive",
1351 "locked": null,
1352 "name": "case_sensitive",
1353 "nameLocked": null,
1354 "removable": null,
1355 "shape": null,
1356 "type": "BOOLEAN",
1357 "widget": {
1358 "name": "case_sensitive"
1359 },
1360 "link": null
1361 }
1362 ],
1363 "outputs": [
1364 {
1365 "color_off": null,
1366 "color_on": null,
1367 "dir": null,
1368 "label": null,
1369 "localized_name": "BOOLEAN",
1370 "locked": null,
1371 "name": "BOOLEAN",
1372 "nameLocked": null,
1373 "removable": null,
1374 "shape": null,
1375 "type": "BOOLEAN",
1376 "pos": null,
1377 "slot_index": null,
1378 "links": [
1379 15
1380 ]
1381 }
1382 ],
1383 "title": "Rewrite failed?",
1384 "properties": {
1385 "Node name for S&R": "StringCompare"
1386 },
1387 "widgets_values": [
1388 "",
1389 "",
1390 "Equal",
1391 true
1392 ],
1393 "widgets_values_named": {
1394 "string_a": "",
1395 "string_b": "",
1396 "mode": "Equal",
1397 "case_sensitive": true
1398 }
1399 },
1400 {
1401 "id": 15,
1402 "type": "ComfySwitchNode",
1403 "pos": [
1404 2816.9,
1405 0
1406 ],
1407 "size": [
1408 320,
1409 78
1410 ],
1411 "flags": {},
1412 "order": 14,
1413 "mode": 0,
1414 "showAdvanced": null,
1415 "inputs": [
1416 {
1417 "color_off": null,
1418 "color_on": null,
1419 "dir": null,
1420 "label": null,
1421 "localized_name": "on_false",
1422 "locked": null,
1423 "name": "on_false",
1424 "nameLocked": null,
1425 "removable": null,
1426 "shape": 7,
1427 "type": "STRING",
1428 "pos": null,
1429 "link": 13
1430 },
1431 {
1432 "color_off": null,
1433 "color_on": null,
1434 "dir": null,
1435 "label": null,
1436 "localized_name": "on_true",
1437 "locked": null,
1438 "name": "on_true",
1439 "nameLocked": null,
1440 "removable": null,
1441 "shape": 7,
1442 "type": "STRING",
1443 "pos": null,
1444 "link": 14
1445 },
1446 {
1447 "color_off": null,
1448 "color_on": null,
1449 "dir": null,
1450 "label": null,
1451 "localized_name": "switch",
1452 "locked": null,
1453 "name": "switch",
1454 "nameLocked": null,
1455 "removable": null,
1456 "shape": null,
1457 "type": "BOOLEAN",
1458 "widget": {
1459 "name": "switch"
1460 },
1461 "link": 15
1462 }
1463 ],
1464 "outputs": [
1465 {
1466 "color_off": null,
1467 "color_on": null,
1468 "dir": null,
1469 "label": null,
1470 "localized_name": "output",
1471 "locked": null,
1472 "name": "output",
1473 "nameLocked": null,
1474 "removable": null,
1475 "shape": null,
1476 "type": "STRING",
1477 "pos": null,
1478 "slot_index": null,
1479 "links": [
1480 17
1481 ]
1482 }
1483 ],
1484 "title": "Fall back to the original prompt",
1485 "properties": {
1486 "Node name for S&R": "ComfySwitchNode"
1487 },
1488 "widgets_values": [
1489 false
1490 ],
1491 "widgets_values_named": {
1492 "switch": false
1493 }
1494 },
1495 {
1496 "id": 16,
1497 "type": "ComfySwitchNode",
1498 "pos": [
1499 2816.9,
1500 168
1501 ],
1502 "size": [
1503 320,
1504 78
1505 ],
1506 "flags": {},
1507 "order": 15,
1508 "mode": 0,
1509 "showAdvanced": null,
1510 "inputs": [
1511 {
1512 "color_off": null,
1513 "color_on": null,
1514 "dir": null,
1515 "label": null,
1516 "localized_name": "on_false",
1517 "locked": null,
1518 "name": "on_false",
1519 "nameLocked": null,
1520 "removable": null,
1521 "shape": 7,
1522 "type": "STRING",
1523 "pos": null,
1524 "link": 16
1525 },
1526 {
1527 "color_off": null,
1528 "color_on": null,
1529 "dir": null,
1530 "label": null,
1531 "localized_name": "on_true",
1532 "locked": null,
1533 "name": "on_true",
1534 "nameLocked": null,
1535 "removable": null,
1536 "shape": 7,
1537 "type": "STRING",
1538 "pos": null,
1539 "link": 17
1540 },
1541 {
1542 "color_off": null,
1543 "color_on": null,
1544 "dir": null,
1545 "label": null,
1546 "localized_name": "switch",
1547 "locked": null,
1548 "name": "switch",
1549 "nameLocked": null,
1550 "removable": null,
1551 "shape": null,
1552 "type": "BOOLEAN",
1553 "widget": {
1554 "name": "switch"
1555 },
1556 "link": 18
1557 }
1558 ],
1559 "outputs": [
1560 {
1561 "color_off": null,
1562 "color_on": null,
1563 "dir": null,
1564 "label": null,
1565 "localized_name": "output",
1566 "locked": null,
1567 "name": "output",
1568 "nameLocked": null,
1569 "removable": null,
1570 "shape": null,
1571 "type": "STRING",
1572 "pos": null,
1573 "slot_index": null,
1574 "links": [
1575 19,
1576 20
1577 ]
1578 }
1579 ],
1580 "title": "Enhanced or original",
1581 "properties": {
1582 "Node name for S&R": "ComfySwitchNode"
1583 },
1584 "widgets_values": [
1585 false
1586 ],
1587 "widgets_values_named": {
1588 "switch": false
1589 }
1590 },
1591 {
1592 "id": 17,
1593 "type": "PreviewAny",
1594 "pos": [
1595 2816.9,
1596 336
1597 ],
1598 "size": [
1599 440,
1600 260
1601 ],
1602 "flags": {},
1603 "order": 16,
1604 "mode": 0,
1605 "showAdvanced": null,
1606 "inputs": [
1607 {
1608 "color_off": null,
1609 "color_on": null,
1610 "dir": null,
1611 "label": null,
1612 "localized_name": "source",
1613 "locked": null,
1614 "name": "source",
1615 "nameLocked": null,
1616 "removable": null,
1617 "shape": null,
1618 "type": "*",
1619 "pos": null,
1620 "link": 19
1621 }
1622 ],
1623 "outputs": [
1624 {
1625 "color_off": null,
1626 "color_on": null,
1627 "dir": null,
1628 "label": null,
1629 "localized_name": "STRING",
1630 "locked": null,
1631 "name": "STRING",
1632 "nameLocked": null,
1633 "removable": null,
1634 "shape": null,
1635 "type": "STRING",
1636 "pos": null,
1637 "slot_index": null,
1638 "links": null
1639 }
1640 ],
1641 "title": "Prompt used",
1642 "properties": {
1643 "Node name for S&R": "PreviewAny"
1644 },
1645 "widgets_values": [],
1646 "widgets_values_named": {}
1647 },
1648 {
1649 "id": 18,
1650 "type": "TextEncodeQwenImage21",
1651 "pos": [
1652 3336.9,
1653 0
1654 ],
1655 "size": [
1656 320,
1657 246
1658 ],
1659 "flags": {},
1660 "order": 17,
1661 "mode": 0,
1662 "showAdvanced": null,
1663 "inputs": [
1664 {
1665 "color_off": null,
1666 "color_on": null,
1667 "dir": null,
1668 "label": null,
1669 "localized_name": "clip",
1670 "locked": null,
1671 "name": "clip",
1672 "nameLocked": null,
1673 "removable": null,
1674 "shape": null,
1675 "type": "CLIP",
1676 "pos": null,
1677 "link": 2
1678 },
1679 {
1680 "color_off": null,
1681 "color_on": null,
1682 "dir": null,
1683 "label": null,
1684 "localized_name": "image_1",
1685 "locked": null,
1686 "name": "images.image_1",
1687 "nameLocked": null,
1688 "removable": null,
1689 "shape": 7,
1690 "type": "IMAGE",
1691 "pos": null,
1692 "link": 30
1693 },
1694 {
1695 "color_off": null,
1696 "color_on": null,
1697 "dir": null,
1698 "label": null,
1699 "localized_name": "image_2",
1700 "locked": null,
1701 "name": "images.image_2",
1702 "nameLocked": null,
1703 "removable": null,
1704 "shape": 7,
1705 "type": "IMAGE",
1706 "pos": null,
1707 "link": 31
1708 },
1709 {
1710 "color_off": null,
1711 "color_on": null,
1712 "dir": null,
1713 "label": null,
1714 "localized_name": "image_3",
1715 "locked": null,
1716 "name": "images.image_3",
1717 "nameLocked": null,
1718 "removable": null,
1719 "shape": 7,
1720 "type": "IMAGE",
1721 "pos": null,
1722 "link": null
1723 },
1724 {
1725 "color_off": null,
1726 "color_on": null,
1727 "dir": null,
1728 "label": null,
1729 "localized_name": "vae",
1730 "locked": null,
1731 "name": "vae",
1732 "nameLocked": null,
1733 "removable": null,
1734 "shape": 7,
1735 "type": "VAE",
1736 "pos": null,
1737 "link": 4
1738 },
1739 {
1740 "color_off": null,
1741 "color_on": null,
1742 "dir": null,
1743 "label": null,
1744 "localized_name": "prompt",
1745 "locked": null,
1746 "name": "prompt",
1747 "nameLocked": null,
1748 "removable": null,
1749 "shape": null,
1750 "type": "STRING",
1751 "widget": {
1752 "name": "prompt"
1753 },
1754 "link": 20
1755 },
1756 {
1757 "color_off": null,
1758 "color_on": null,
1759 "dir": null,
1760 "label": null,
1761 "localized_name": "negative_prompt",
1762 "locked": null,
1763 "name": "negative_prompt",
1764 "nameLocked": null,
1765 "removable": null,
1766 "shape": null,
1767 "type": "STRING",
1768 "widget": {
1769 "name": "negative_prompt"
1770 },
1771 "link": null
1772 },
1773 {
1774 "color_off": null,
1775 "color_on": null,
1776 "dir": null,
1777 "label": null,
1778 "localized_name": "resolution",
1779 "locked": null,
1780 "name": "resolution",
1781 "nameLocked": null,
1782 "removable": null,
1783 "shape": null,
1784 "type": "INT",
1785 "widget": {
1786 "name": "resolution"
1787 },
1788 "link": null
1789 }
1790 ],
1791 "outputs": [
1792 {
1793 "color_off": null,
1794 "color_on": null,
1795 "dir": null,
1796 "label": null,
1797 "localized_name": "positive",
1798 "locked": null,
1799 "name": "positive",
1800 "nameLocked": null,
1801 "removable": null,
1802 "shape": null,
1803 "type": "CONDITIONING",
1804 "pos": null,
1805 "slot_index": null,
1806 "links": [
1807 21
1808 ]
1809 },
1810 {
1811 "color_off": null,
1812 "color_on": null,
1813 "dir": null,
1814 "label": null,
1815 "localized_name": "negative",
1816 "locked": null,
1817 "name": "negative",
1818 "nameLocked": null,
1819 "removable": null,
1820 "shape": null,
1821 "type": "CONDITIONING",
1822 "pos": null,
1823 "slot_index": null,
1824 "links": null
1825 },
1826 {
1827 "color_off": null,
1828 "color_on": null,
1829 "dir": null,
1830 "label": null,
1831 "localized_name": "latent",
1832 "locked": null,
1833 "name": "latent",
1834 "nameLocked": null,
1835 "removable": null,
1836 "shape": null,
1837 "type": "LATENT",
1838 "pos": null,
1839 "slot_index": null,
1840 "links": [
1841 35
1842 ]
1843 }
1844 ],
1845 "properties": {
1846 "Node name for S&R": "TextEncodeQwenImage21"
1847 },
1848 "widgets_values": [
1849 "",
1850 "",
1851 1024
1852 ],
1853 "widgets_values_named": {
1854 "prompt": "",
1855 "negative_prompt": "",
1856 "resolution": 1024
1857 }
1858 },
1859 {
1860 "id": 19,
1861 "type": "BasicGuider",
1862 "pos": [
1863 3336.9,
1864 336
1865 ],
1866 "size": [
1867 320,
1868 46
1869 ],
1870 "flags": {},
1871 "order": 18,
1872 "mode": 0,
1873 "showAdvanced": null,
1874 "inputs": [
1875 {
1876 "color_off": null,
1877 "color_on": null,
1878 "dir": null,
1879 "label": null,
1880 "localized_name": "model",
1881 "locked": null,
1882 "name": "model",
1883 "nameLocked": null,
1884 "removable": null,
1885 "shape": null,
1886 "type": "MODEL",
1887 "pos": null,
1888 "link": 29
1889 },
1890 {
1891 "color_off": null,
1892 "color_on": null,
1893 "dir": null,
1894 "label": null,
1895 "localized_name": "conditioning",
1896 "locked": null,
1897 "name": "conditioning",
1898 "nameLocked": null,
1899 "removable": null,
1900 "shape": null,
1901 "type": "CONDITIONING",
1902 "pos": null,
1903 "link": 21
1904 }
1905 ],
1906 "outputs": [
1907 {
1908 "color_off": null,
1909 "color_on": null,
1910 "dir": null,
1911 "label": null,
1912 "localized_name": "GUIDER",
1913 "locked": null,
1914 "name": "GUIDER",
1915 "nameLocked": null,
1916 "removable": null,
1917 "shape": null,
1918 "type": "GUIDER",
1919 "pos": null,
1920 "slot_index": null,
1921 "links": [
1922 23
1923 ]
1924 }
1925 ],
1926 "title": "BasicGuider (CFG off)",
1927 "properties": {
1928 "Node name for S&R": "BasicGuider"
1929 }
1930 },
1931 {
1932 "id": 20,
1933 "type": "RandomNoise",
1934 "pos": [
1935 3336.9,
1936 472
1937 ],
1938 "size": [
1939 320,
1940 82
1941 ],
1942 "flags": {},
1943 "order": 19,
1944 "mode": 0,
1945 "showAdvanced": null,
1946 "inputs": [
1947 {
1948 "color_off": null,
1949 "color_on": null,
1950 "dir": null,
1951 "label": null,
1952 "localized_name": "noise_seed",
1953 "locked": null,
1954 "name": "noise_seed",
1955 "nameLocked": null,
1956 "removable": null,
1957 "shape": null,
1958 "type": "INT",
1959 "widget": {
1960 "name": "noise_seed"
1961 },
1962 "link": null
1963 }
1964 ],
1965 "outputs": [
1966 {
1967 "color_off": null,
1968 "color_on": null,
1969 "dir": null,
1970 "label": null,
1971 "localized_name": "NOISE",
1972 "locked": null,
1973 "name": "NOISE",
1974 "nameLocked": null,
1975 "removable": null,
1976 "shape": null,
1977 "type": "NOISE",
1978 "pos": null,
1979 "slot_index": null,
1980 "links": [
1981 22
1982 ]
1983 }
1984 ],
1985 "properties": {
1986 "Node name for S&R": "RandomNoise"
1987 },
1988 "widgets_values": [
1989 42,
1990 "randomize"
1991 ],
1992 "widgets_values_named": {
1993 "noise_seed": 42,
1994 "control_after_generate": "randomize"
1995 }
1996 },
1997 {
1998 "id": 21,
1999 "type": "KSamplerSelect",
2000 "pos": [
2001 3336.9,
2002 644
2003 ],
2004 "size": [
2005 320,
2006 58
2007 ],
2008 "flags": {},
2009 "order": 20,
2010 "mode": 0,
2011 "showAdvanced": null,
2012 "inputs": [
2013 {
2014 "color_off": null,
2015 "color_on": null,
2016 "dir": null,
2017 "label": null,
2018 "localized_name": "sampler_name",
2019 "locked": null,
2020 "name": "sampler_name",
2021 "nameLocked": null,
2022 "removable": null,
2023 "shape": null,
2024 "type": "COMBO",
2025 "widget": {
2026 "name": "sampler_name"
2027 },
2028 "link": null
2029 }
2030 ],
2031 "outputs": [
2032 {
2033 "color_off": null,
2034 "color_on": null,
2035 "dir": null,
2036 "label": null,
2037 "localized_name": "SAMPLER",
2038 "locked": null,
2039 "name": "SAMPLER",
2040 "nameLocked": null,
2041 "removable": null,
2042 "shape": null,
2043 "type": "SAMPLER",
2044 "pos": null,
2045 "slot_index": null,
2046 "links": [
2047 24
2048 ]
2049 }
2050 ],
2051 "properties": {
2052 "Node name for S&R": "KSamplerSelect"
2053 },
2054 "widgets_values": [
2055 "euler"
2056 ],
2057 "widgets_values_named": {
2058 "sampler_name": "euler"
2059 }
2060 },
2061 {
2062 "id": 22,
2063 "type": "ViggleTurboSigmas",
2064 "pos": [
2065 3336.9,
2066 792
2067 ],
2068 "size": [
2069 320,
2070 58
2071 ],
2072 "flags": {},
2073 "order": 21,
2074 "mode": 0,
2075 "showAdvanced": null,
2076 "inputs": [
2077 {
2078 "color_off": null,
2079 "color_on": null,
2080 "dir": null,
2081 "label": null,
2082 "localized_name": "latent",
2083 "locked": null,
2084 "name": "latent",
2085 "nameLocked": null,
2086 "removable": null,
2087 "shape": null,
2088 "type": "LATENT",
2089 "pos": null,
2090 "link": 38
2091 },
2092 {
2093 "color_off": null,
2094 "color_on": null,
2095 "dir": null,
2096 "label": null,
2097 "localized_name": "nodes",
2098 "locked": null,
2099 "name": "nodes",
2100 "nameLocked": null,
2101 "removable": null,
2102 "shape": null,
2103 "type": "STRING",
2104 "widget": {
2105 "name": "nodes"
2106 },
2107 "link": null
2108 }
2109 ],
2110 "outputs": [
2111 {
2112 "color_off": null,
2113 "color_on": null,
2114 "dir": null,
2115 "label": null,
2116 "localized_name": "SIGMAS",
2117 "locked": null,
2118 "name": "SIGMAS",
2119 "nameLocked": null,
2120 "removable": null,
2121 "shape": null,
2122 "type": "SIGMAS",
2123 "pos": null,
2124 "slot_index": null,
2125 "links": [
2126 25
2127 ]
2128 }
2129 ],
2130 "properties": {
2131 "Node name for S&R": "ViggleTurboSigmas"
2132 },
2133 "widgets_values": [
2134 "1.0, 0.9375, 0.875, 0.75, 0.5, 0.25"
2135 ],
2136 "widgets_values_named": {
2137 "nodes": "1.0, 0.9375, 0.875, 0.75, 0.5, 0.25"
2138 }
2139 },
2140 {
2141 "id": 23,
2142 "type": "SamplerCustomAdvanced",
2143 "pos": [
2144 3736.9,
2145 0
2146 ],
2147 "size": [
2148 320,
2149 106
2150 ],
2151 "flags": {},
2152 "order": 22,
2153 "mode": 0,
2154 "showAdvanced": null,
2155 "inputs": [
2156 {
2157 "color_off": null,
2158 "color_on": null,
2159 "dir": null,
2160 "label": null,
2161 "localized_name": "noise",
2162 "locked": null,
2163 "name": "noise",
2164 "nameLocked": null,
2165 "removable": null,
2166 "shape": null,
2167 "type": "NOISE",
2168 "pos": null,
2169 "link": 22
2170 },
2171 {
2172 "color_off": null,
2173 "color_on": null,
2174 "dir": null,
2175 "label": null,
2176 "localized_name": "guider",
2177 "locked": null,
2178 "name": "guider",
2179 "nameLocked": null,
2180 "removable": null,
2181 "shape": null,
2182 "type": "GUIDER",
2183 "pos": null,
2184 "link": 23
2185 },
2186 {
2187 "color_off": null,
2188 "color_on": null,
2189 "dir": null,
2190 "label": null,
2191 "localized_name": "sampler",
2192 "locked": null,
2193 "name": "sampler",
2194 "nameLocked": null,
2195 "removable": null,
2196 "shape": null,
2197 "type": "SAMPLER",
2198 "pos": null,
2199 "link": 24
2200 },
2201 {
2202 "color_off": null,
2203 "color_on": null,
2204 "dir": null,
2205 "label": null,
2206 "localized_name": "sigmas",
2207 "locked": null,
2208 "name": "sigmas",
2209 "nameLocked": null,
2210 "removable": null,
2211 "shape": null,
2212 "type": "SIGMAS",
2213 "pos": null,
2214 "link": 25
2215 },
2216 {
2217 "color_off": null,
2218 "color_on": null,
2219 "dir": null,
2220 "label": null,
2221 "localized_name": "latent_image",
2222 "locked": null,
2223 "name": "latent_image",
2224 "nameLocked": null,
2225 "removable": null,
2226 "shape": null,
2227 "type": "LATENT",
2228 "pos": null,
2229 "link": 39
2230 }
2231 ],
2232 "outputs": [
2233 {
2234 "color_off": null,
2235 "color_on": null,
2236 "dir": null,
2237 "label": null,
2238 "localized_name": "output",
2239 "locked": null,
2240 "name": "output",
2241 "nameLocked": null,
2242 "removable": null,
2243 "shape": null,
2244 "type": "LATENT",
2245 "pos": null,
2246 "slot_index": null,
2247 "links": [
2248 26
2249 ]
2250 },
2251 {
2252 "color_off": null,
2253 "color_on": null,
2254 "dir": null,
2255 "label": null,
2256 "localized_name": "denoised_output",
2257 "locked": null,
2258 "name": "denoised_output",
2259 "nameLocked": null,
2260 "removable": null,
2261 "shape": null,
2262 "type": "LATENT",
2263 "pos": null,
2264 "slot_index": null,
2265 "links": null
2266 }
2267 ],
2268 "properties": {
2269 "Node name for S&R": "SamplerCustomAdvanced"
2270 }
2271 },
2272 {
2273 "id": 24,
2274 "type": "VAEDecode",
2275 "pos": [
2276 3736.9,
2277 196
2278 ],
2279 "size": [
2280 320,
2281 46
2282 ],
2283 "flags": {},
2284 "order": 23,
2285 "mode": 0,
2286 "showAdvanced": null,
2287 "inputs": [
2288 {
2289 "color_off": null,
2290 "color_on": null,
2291 "dir": null,
2292 "label": null,
2293 "localized_name": "samples",
2294 "locked": null,
2295 "name": "samples",
2296 "nameLocked": null,
2297 "removable": null,
2298 "shape": null,
2299 "type": "LATENT",
2300 "pos": null,
2301 "link": 26
2302 },
2303 {
2304 "color_off": null,
2305 "color_on": null,
2306 "dir": null,
2307 "label": null,
2308 "localized_name": "vae",
2309 "locked": null,
2310 "name": "vae",
2311 "nameLocked": null,
2312 "removable": null,
2313 "shape": null,
2314 "type": "VAE",
2315 "pos": null,
2316 "link": 5
2317 }
2318 ],
2319 "outputs": [
2320 {
2321 "color_off": null,
2322 "color_on": null,
2323 "dir": null,
2324 "label": null,
2325 "localized_name": "IMAGE",
2326 "locked": null,
2327 "name": "IMAGE",
2328 "nameLocked": null,
2329 "removable": null,
2330 "shape": null,
2331 "type": "IMAGE",
2332 "pos": null,
2333 "slot_index": null,
2334 "links": [
2335 27
2336 ]
2337 }
2338 ],
2339 "properties": {
2340 "Node name for S&R": "VAEDecode"
2341 }
2342 },
2343 {
2344 "id": 25,
2345 "type": "SaveImage",
2346 "pos": [
2347 3736.9,
2348 332
2349 ],
2350 "size": [
2351 520,
2352 560
2353 ],
2354 "flags": {},
2355 "order": 24,
2356 "mode": 0,
2357 "showAdvanced": null,
2358 "inputs": [
2359 {
2360 "color_off": null,
2361 "color_on": null,
2362 "dir": null,
2363 "label": null,
2364 "localized_name": "images",
2365 "locked": null,
2366 "name": "images",
2367 "nameLocked": null,
2368 "removable": null,
2369 "shape": null,
2370 "type": "IMAGE",
2371 "pos": null,
2372 "link": 27
2373 },
2374 {
2375 "color_off": null,
2376 "color_on": null,
2377 "dir": null,
2378 "label": null,
2379 "localized_name": "filename_prefix",
2380 "locked": null,
2381 "name": "filename_prefix",
2382 "nameLocked": null,
2383 "removable": null,
2384 "shape": null,
2385 "type": "STRING",
2386 "widget": {
2387 "name": "filename_prefix"
2388 },
2389 "link": null
2390 }
2391 ],
2392 "outputs": [
2393 {
2394 "color_off": null,
2395 "color_on": null,
2396 "dir": null,
2397 "label": null,
2398 "localized_name": "images",
2399 "locked": null,
2400 "name": "images",
2401 "nameLocked": null,
2402 "removable": null,
2403 "shape": null,
2404 "type": "IMAGE",
2405 "pos": null,
2406 "slot_index": null,
2407 "links": null
2408 }
2409 ],
2410 "properties": {},
2411 "widgets_values": [
2412 "viggle_turbo/edit"
2413 ],
2414 "widgets_values_named": {
2415 "filename_prefix": "viggle_turbo/edit"
2416 }
2417 },
2418 {
2419 "id": 26,
2420 "type": "LoadImage",
2421 "pos": [
2422 976.9,
2423 0
2424 ],
2425 "size": [
2426 320,
2427 326
2428 ],
2429 "flags": {},
2430 "order": 25,
2431 "mode": 0,
2432 "showAdvanced": null,
2433 "inputs": [
2434 {
2435 "color_off": null,
2436 "color_on": null,
2437 "dir": null,
2438 "label": null,
2439 "localized_name": "image",
2440 "locked": null,
2441 "name": "image",
2442 "nameLocked": null,
2443 "removable": null,
2444 "shape": null,
2445 "type": "COMBO",
2446 "widget": {
2447 "name": "image"
2448 },
2449 "link": null
2450 },
2451 {
2452 "color_off": null,
2453 "color_on": null,
2454 "dir": null,
2455 "label": null,
2456 "localized_name": "choose file to upload",
2457 "locked": null,
2458 "name": "upload",
2459 "nameLocked": null,
2460 "removable": null,
2461 "shape": null,
2462 "type": "IMAGEUPLOAD",
2463 "widget": {
2464 "name": "upload"
2465 },
2466 "link": null
2467 }
2468 ],
2469 "outputs": [
2470 {
2471 "color_off": null,
2472 "color_on": null,
2473 "dir": null,
2474 "label": null,
2475 "localized_name": "IMAGE",
2476 "locked": null,
2477 "name": "IMAGE",
2478 "nameLocked": null,
2479 "removable": null,
2480 "shape": null,
2481 "type": "IMAGE",
2482 "pos": null,
2483 "slot_index": null,
2484 "links": [
2485 30,
2486 32
2487 ]
2488 },
2489 {
2490 "color_off": null,
2491 "color_on": null,
2492 "dir": null,
2493 "label": null,
2494 "localized_name": "MASK",
2495 "locked": null,
2496 "name": "MASK",
2497 "nameLocked": null,
2498 "removable": null,
2499 "shape": null,
2500 "type": "MASK",
2501 "pos": null,
2502 "slot_index": null,
2503 "links": null
2504 }
2505 ],
2506 "title": "Image 1",
2507 "properties": {
2508 "Node name for S&R": "LoadImage"
2509 },
2510 "widgets_values": [
2511 "woman2.webp",
2512 "image"
2513 ],
2514 "widgets_values_named": {
2515 "image": "woman2.webp",
2516 "upload": "image"
2517 }
2518 },
2519 {
2520 "id": 27,
2521 "type": "LoadImage",
2522 "pos": [
2523 976.9,
2524 416
2525 ],
2526 "size": [
2527 320,
2528 326
2529 ],
2530 "flags": {},
2531 "order": 26,
2532 "mode": 0,
2533 "showAdvanced": null,
2534 "inputs": [
2535 {
2536 "color_off": null,
2537 "color_on": null,
2538 "dir": null,
2539 "label": null,
2540 "localized_name": "image",
2541 "locked": null,
2542 "name": "image",
2543 "nameLocked": null,
2544 "removable": null,
2545 "shape": null,
2546 "type": "COMBO",
2547 "widget": {
2548 "name": "image"
2549 },
2550 "link": null
2551 },
2552 {
2553 "color_off": null,
2554 "color_on": null,
2555 "dir": null,
2556 "label": null,
2557 "localized_name": "choose file to upload",
2558 "locked": null,
2559 "name": "upload",
2560 "nameLocked": null,
2561 "removable": null,
2562 "shape": null,
2563 "type": "IMAGEUPLOAD",
2564 "widget": {
2565 "name": "upload"
2566 },
2567 "link": null
2568 }
2569 ],
2570 "outputs": [
2571 {
2572 "color_off": null,
2573 "color_on": null,
2574 "dir": null,
2575 "label": null,
2576 "localized_name": "IMAGE",
2577 "locked": null,
2578 "name": "IMAGE",
2579 "nameLocked": null,
2580 "removable": null,
2581 "shape": null,
2582 "type": "IMAGE",
2583 "pos": null,
2584 "slot_index": null,
2585 "links": [
2586 31,
2587 33
2588 ]
2589 },
2590 {
2591 "color_off": null,
2592 "color_on": null,
2593 "dir": null,
2594 "label": null,
2595 "localized_name": "MASK",
2596 "locked": null,
2597 "name": "MASK",
2598 "nameLocked": null,
2599 "removable": null,
2600 "shape": null,
2601 "type": "MASK",
2602 "pos": null,
2603 "slot_index": null,
2604 "links": null
2605 }
2606 ],
2607 "title": "Image 2",
2608 "properties": {
2609 "Node name for S&R": "LoadImage"
2610 },
2611 "widgets_values": [
2612 "cat.webp",
2613 "image"
2614 ],
2615 "widgets_values_named": {
2616 "image": "cat.webp",
2617 "upload": "image"
2618 }
2619 },
2620 {
2621 "id": 28,
2622 "type": "BatchImagesNode",
2623 "pos": [
2624 1896.9,
2625 616
2626 ],
2627 "size": [
2628 320,
2629 66
2630 ],
2631 "flags": {},
2632 "order": 27,
2633 "mode": 0,
2634 "showAdvanced": null,
2635 "inputs": [
2636 {
2637 "color_off": null,
2638 "color_on": null,
2639 "dir": null,
2640 "label": null,
2641 "localized_name": "image0",
2642 "locked": null,
2643 "name": "images.image0",
2644 "nameLocked": null,
2645 "removable": null,
2646 "shape": null,
2647 "type": "IMAGE",
2648 "pos": null,
2649 "link": 32
2650 },
2651 {
2652 "color_off": null,
2653 "color_on": null,
2654 "dir": null,
2655 "label": null,
2656 "localized_name": "image1",
2657 "locked": null,
2658 "name": "images.image1",
2659 "nameLocked": null,
2660 "removable": null,
2661 "shape": 7,
2662 "type": "IMAGE",
2663 "pos": null,
2664 "link": 33
2665 },
2666 {
2667 "color_off": null,
2668 "color_on": null,
2669 "dir": null,
2670 "label": null,
2671 "localized_name": "image2",
2672 "locked": null,
2673 "name": "images.image2",
2674 "nameLocked": null,
2675 "removable": null,
2676 "shape": 7,
2677 "type": "IMAGE",
2678 "pos": null,
2679 "link": null
2680 }
2681 ],
2682 "outputs": [
2683 {
2684 "color_off": null,
2685 "color_on": null,
2686 "dir": null,
2687 "label": null,
2688 "localized_name": "IMAGE",
2689 "locked": null,
2690 "name": "IMAGE",
2691 "nameLocked": null,
2692 "removable": null,
2693 "shape": null,
2694 "type": "IMAGE",
2695 "pos": null,
2696 "slot_index": null,
2697 "links": [
2698 34
2699 ]
2700 }
2701 ],
2702 "title": "References for the rewriter",
2703 "properties": {
2704 "Node name for S&R": "BatchImagesNode"
2705 }
2706 },
2707 {
2708 "id": 29,
2709 "type": "QwenImage21Cache",
2710 "pos": [
2711 540,
2712 344
2713 ],
2714 "size": [
2715 320,
2716 82
2717 ],
2718 "flags": {},
2719 "order": 28,
2720 "mode": 0,
2721 "showAdvanced": null,
2722 "inputs": [
2723 {
2724 "color_off": null,
2725 "color_on": null,
2726 "dir": null,
2727 "label": null,
2728 "localized_name": "model",
2729 "locked": null,
2730 "name": "model",
2731 "nameLocked": null,
2732 "removable": null,
2733 "shape": null,
2734 "type": "MODEL",
2735 "pos": null,
2736 "link": 28
2737 },
2738 {
2739 "color_off": null,
2740 "color_on": null,
2741 "dir": null,
2742 "label": null,
2743 "localized_name": "device",
2744 "locked": null,
2745 "name": "device",
2746 "nameLocked": null,
2747 "removable": null,
2748 "shape": null,
2749 "type": "COMBO",
2750 "widget": {
2751 "name": "device"
2752 },
2753 "link": null
2754 },
2755 {
2756 "color_off": null,
2757 "color_on": null,
2758 "dir": null,
2759 "label": null,
2760 "localized_name": "dtype",
2761 "locked": null,
2762 "name": "dtype",
2763 "nameLocked": null,
2764 "removable": null,
2765 "shape": null,
2766 "type": "COMBO",
2767 "widget": {
2768 "name": "dtype"
2769 },
2770 "link": null
2771 }
2772 ],
2773 "outputs": [
2774 {
2775 "color_off": null,
2776 "color_on": null,
2777 "dir": null,
2778 "label": null,
2779 "localized_name": "MODEL",
2780 "locked": null,
2781 "name": "MODEL",
2782 "nameLocked": null,
2783 "removable": null,
2784 "shape": null,
2785 "type": "MODEL",
2786 "pos": null,
2787 "slot_index": null,
2788 "links": [
2789 29
2790 ]
2791 }
2792 ],
2793 "properties": {
2794 "Node name for S&R": "QwenImage21Cache"
2795 },
2796 "widgets_values": [
2797 "auto",
2798 "default"
2799 ],
2800 "widgets_values_named": {
2801 "device": "auto",
2802 "dtype": "default"
2803 }
2804 },
2805 {
2806 "id": 30,
2807 "type": "PrimitiveBoolean",
2808 "pos": [
2809 1376.9,
2810 310
2811 ],
2812 "size": [
2813 320,
2814 58
2815 ],
2816 "flags": {},
2817 "order": 29,
2818 "mode": 0,
2819 "showAdvanced": null,
2820 "inputs": [
2821 {
2822 "color_off": null,
2823 "color_on": null,
2824 "dir": null,
2825 "label": null,
2826 "localized_name": "value",
2827 "locked": null,
2828 "name": "value",
2829 "nameLocked": null,
2830 "removable": null,
2831 "shape": null,
2832 "type": "BOOLEAN",
2833 "widget": {
2834 "name": "value"
2835 },
2836 "link": null
2837 }
2838 ],
2839 "outputs": [
2840 {
2841 "color_off": null,
2842 "color_on": null,
2843 "dir": null,
2844 "label": null,
2845 "localized_name": "BOOLEAN",
2846 "locked": null,
2847 "name": "BOOLEAN",
2848 "nameLocked": null,
2849 "removable": null,
2850 "shape": null,
2851 "type": "BOOLEAN",
2852 "pos": null,
2853 "slot_index": null,
2854 "links": [
2855 37
2856 ]
2857 }
2858 ],
2859 "title": "Custom output size (off: size of image 1)",
2860 "properties": {
2861 "Node name for S&R": "PrimitiveBoolean"
2862 },
2863 "widgets_values": [
2864 false
2865 ],
2866 "widgets_values_named": {
2867 "value": false
2868 }
2869 },
2870 {
2871 "id": 31,
2872 "type": "ComfySwitchNode",
2873 "pos": [
2874 1376.9,
2875 894
2876 ],
2877 "size": [
2878 320,
2879 78
2880 ],
2881 "flags": {},
2882 "order": 30,
2883 "mode": 0,
2884 "showAdvanced": null,
2885 "inputs": [
2886 {
2887 "color_off": null,
2888 "color_on": null,
2889 "dir": null,
2890 "label": null,
2891 "localized_name": "on_false",
2892 "locked": null,
2893 "name": "on_false",
2894 "nameLocked": null,
2895 "removable": null,
2896 "shape": 7,
2897 "type": "LATENT",
2898 "pos": null,
2899 "link": 35
2900 },
2901 {
2902 "color_off": null,
2903 "color_on": null,
2904 "dir": null,
2905 "label": null,
2906 "localized_name": "on_true",
2907 "locked": null,
2908 "name": "on_true",
2909 "nameLocked": null,
2910 "removable": null,
2911 "shape": 7,
2912 "type": "LATENT",
2913 "pos": null,
2914 "link": 36
2915 },
2916 {
2917 "color_off": null,
2918 "color_on": null,
2919 "dir": null,
2920 "label": null,
2921 "localized_name": "switch",
2922 "locked": null,
2923 "name": "switch",
2924 "nameLocked": null,
2925 "removable": null,
2926 "shape": null,
2927 "type": "BOOLEAN",
2928 "widget": {
2929 "name": "switch"
2930 },
2931 "link": 37
2932 }
2933 ],
2934 "outputs": [
2935 {
2936 "color_off": null,
2937 "color_on": null,
2938 "dir": null,
2939 "label": null,
2940 "localized_name": "output",
2941 "locked": null,
2942 "name": "output",
2943 "nameLocked": null,
2944 "removable": null,
2945 "shape": null,
2946 "type": "LATENT",
2947 "pos": null,
2948 "slot_index": null,
2949 "links": [
2950 38,
2951 39
2952 ]
2953 }
2954 ],
2955 "title": "Output latent",
2956 "properties": {
2957 "Node name for S&R": "ComfySwitchNode"
2958 },
2959 "widgets_values": [
2960 false
2961 ],
2962 "widgets_values_named": {
2963 "switch": false
2964 }
2965 }
2966 ],
2967 "links": [
2968 [
2969 1,
2970 2,
2971 0,
2972 3,
2973 0,
2974 "MODEL"
2975 ],
2976 [
2977 5,
2978 5,
2979 0,
2980 24,
2981 1,
2982 "VAE"
2983 ],
2984 [
2985 6,
2986 7,
2987 0,
2988 8,
2989 0,
2990 "INT"
2991 ],
2992 [
2993 7,
2994 7,
2995 1,
2996 8,
2997 1,
2998 "INT"
2999 ],
3000 [
3001 8,
3002 6,
3003 0,
3004 11,
3005 0,
3006 "STRING"
3007 ],
3008 [
3009 11,
3010 12,
3011 0,
3012 13,
3013 0,
3014 "STRING"
3015 ],
3016 [
3017 12,
3018 13,
3019 0,
3020 14,
3021 0,
3022 "STRING"
3023 ],
3024 [
3025 13,
3026 13,
3027 0,
3028 15,
3029 0,
3030 "STRING"
3031 ],
3032 [
3033 14,
3034 6,
3035 0,
3036 15,
3037 1,
3038 "STRING"
3039 ],
3040 [
3041 15,
3042 14,
3043 0,
3044 15,
3045 2,
3046 "BOOLEAN"
3047 ],
3048 [
3049 16,
3050 6,
3051 0,
3052 16,
3053 0,
3054 "STRING"
3055 ],
3056 [
3057 17,
3058 15,
3059 0,
3060 16,
3061 1,
3062 "STRING"
3063 ],
3064 [
3065 18,
3066 9,
3067 0,
3068 16,
3069 2,
3070 "BOOLEAN"
3071 ],
3072 [
3073 19,
3074 16,
3075 0,
3076 17,
3077 0,
3078 "STRING"
3079 ],
3080 [
3081 21,
3082 18,
3083 0,
3084 19,
3085 1,
3086 "CONDITIONING"
3087 ],
3088 [
3089 22,
3090 20,
3091 0,
3092 23,
3093 0,
3094 "NOISE"
3095 ],
3096 [
3097 23,
3098 19,
3099 0,
3100 23,
3101 1,
3102 "GUIDER"
3103 ],
3104 [
3105 24,
3106 21,
3107 0,
3108 23,
3109 2,
3110 "SAMPLER"
3111 ],
3112 [
3113 25,
3114 22,
3115 0,
3116 23,
3117 3,
3118 "SIGMAS"
3119 ],
3120 [
3121 26,
3122 23,
3123 0,
3124 24,
3125 0,
3126 "LATENT"
3127 ],
3128 [
3129 27,
3130 24,
3131 0,
3132 25,
3133 0,
3134 "IMAGE"
3135 ],
3136 [
3137 28,
3138 3,
3139 0,
3140 29,
3141 0,
3142 "MODEL"
3143 ],
3144 [
3145 29,
3146 29,
3147 0,
3148 19,
3149 0,
3150 "MODEL"
3151 ],
3152 [
3153 2,
3154 4,
3155 0,
3156 18,
3157 0,
3158 "CLIP"
3159 ],
3160 [
3161 30,
3162 26,
3163 0,
3164 18,
3165 1,
3166 "IMAGE"
3167 ],
3168 [
3169 31,
3170 27,
3171 0,
3172 18,
3173 2,
3174 "IMAGE"
3175 ],
3176 [
3177 4,
3178 5,
3179 0,
3180 18,
3181 4,
3182 "VAE"
3183 ],
3184 [
3185 20,
3186 16,
3187 0,
3188 18,
3189 5,
3190 "STRING"
3191 ],
3192 [
3193 32,
3194 26,
3195 0,
3196 28,
3197 0,
3198 "IMAGE"
3199 ],
3200 [
3201 33,
3202 27,
3203 0,
3204 28,
3205 1,
3206 "IMAGE"
3207 ],
3208 [
3209 35,
3210 18,
3211 2,
3212 31,
3213 0,
3214 "LATENT"
3215 ],
3216 [
3217 36,
3218 8,
3219 0,
3220 31,
3221 1,
3222 "LATENT"
3223 ],
3224 [
3225 37,
3226 30,
3227 0,
3228 31,
3229 2,
3230 "BOOLEAN"
3231 ],
3232 [
3233 38,
3234 31,
3235 0,
3236 22,
3237 0,
3238 "LATENT"
3239 ],
3240 [
3241 39,
3242 31,
3243 0,
3244 23,
3245 4,
3246 "LATENT"
3247 ],
3248 [
3249 3,
3250 4,
3251 0,
3252 12,
3253 0,
3254 "CLIP"
3255 ],
3256 [
3257 34,
3258 28,
3259 0,
3260 12,
3261 1,
3262 "IMAGE"
3263 ],
3264 [
3265 9,
3266 10,
3267 0,
3268 12,
3269 4,
3270 "STRING"
3271 ],
3272 [
3273 10,
3274 11,
3275 0,
3276 12,
3277 5,
3278 "STRING"
3279 ]
3280 ],
3281 "floatingLinks": null,
3282 "groups": [
3283 {
3284 "id": 1,
3285 "title": "1. Models",
3286 "bounding": [
3287 520,
3288 -90,
3289 396.9,
3290 880
3291 ],
3292 "color": "#3f789e",
3293 "flags": {}
3294 },
3295 {
3296 "id": 2,
3297 "title": "2. Reference images",
3298 "bounding": [
3299 956.9,
3300 -90,
3301 360.0000000000001,
3302 852
3303 ],
3304 "color": "#8A8",
3305 "flags": {}
3306 },
3307 {
3308 "id": 3,
3309 "title": "3. Prompt & size",
3310 "bounding": [
3311 1356.9,
3312 -90,
3313 480,
3314 1082
3315 ],
3316 "color": "#b58b2a",
3317 "flags": {}
3318 },
3319 {
3320 "id": 4,
3321 "title": "4. Prompt enhancer (optional)",
3322 "bounding": [
3323 1876.9,
3324 -90,
3325 1400,
3326 880
3327 ],
3328 "color": "#a1309b",
3329 "flags": {}
3330 },
3331 {
3332 "id": 5,
3333 "title": "5. Sample: 6 steps, CFG off",
3334 "bounding": [
3335 3316.9,
3336 -90,
3337 959.9999999999995,
3338 1002
3339 ],
3340 "color": "#444",
3341 "flags": {}
3342 }
3343 ],
3344 "definitions": null,
3345 "config": {},
3346 "extra": {
3347 "ds": {
3348 "scale": 0.5,
3349 "offset": [
3350 60,
3351 160
3352 ]
3353 },
3354 "reroutes": null
3355 },
3356 "version": 0.4
3357 }