comfyui/Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-merged-edit.json
93.6 KB · 3244 lines · json Raw
1 {
2 "id": "99251143-a642-4a8c-9a67-f12e4ad01805",
3 "revision": 0,
4 "last_node_id": 30,
5 "last_link_id": 38,
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 and BasicGuider (no CFG).\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 and BasicGuider (no CFG).\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 27
102 ]
103 }
104 ],
105 "properties": {
106 "Node name for S&R": "UNETLoader",
107 "models": [
108 {
109 "name": "Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-int8_convrot.safetensors",
110 "url": "https://huggingface.co/Viggle/Qwen-Image-2.1-viggle-turbo/resolve/main/Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-int8_convrot.safetensors",
111 "directory": "diffusion_models"
112 }
113 ]
114 },
115 "widgets_values": [
116 "Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-int8_convrot.safetensors",
117 "default"
118 ],
119 "widgets_values_named": {
120 "unet_name": "Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-int8_convrot.safetensors",
121 "weight_dtype": "default"
122 }
123 },
124 {
125 "id": 3,
126 "type": "CLIPLoader",
127 "pos": [
128 540,
129 344
130 ],
131 "size": [
132 320,
133 106
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": "clip_name",
146 "locked": null,
147 "name": "clip_name",
148 "nameLocked": null,
149 "removable": null,
150 "shape": null,
151 "type": "COMBO",
152 "widget": {
153 "name": "clip_name"
154 },
155 "link": null
156 },
157 {
158 "color_off": null,
159 "color_on": null,
160 "dir": null,
161 "label": null,
162 "localized_name": "type",
163 "locked": null,
164 "name": "type",
165 "nameLocked": null,
166 "removable": null,
167 "shape": null,
168 "type": "COMBO",
169 "widget": {
170 "name": "type"
171 },
172 "link": null
173 },
174 {
175 "color_off": null,
176 "color_on": null,
177 "dir": null,
178 "label": null,
179 "localized_name": "device",
180 "locked": null,
181 "name": "device",
182 "nameLocked": null,
183 "removable": null,
184 "shape": 7,
185 "type": "COMBO",
186 "widget": {
187 "name": "device"
188 },
189 "link": null
190 }
191 ],
192 "outputs": [
193 {
194 "color_off": null,
195 "color_on": null,
196 "dir": null,
197 "label": null,
198 "localized_name": "CLIP",
199 "locked": null,
200 "name": "CLIP",
201 "nameLocked": null,
202 "removable": null,
203 "shape": null,
204 "type": "CLIP",
205 "pos": null,
206 "slot_index": null,
207 "links": [
208 1,
209 2
210 ]
211 }
212 ],
213 "properties": {
214 "Node name for S&R": "CLIPLoader",
215 "models": [
216 {
217 "name": "qwen3vl_8b_int8_convrot.safetensors",
218 "url": "https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/text_encoders/qwen3vl_8b_int8_convrot.safetensors",
219 "directory": "text_encoders"
220 }
221 ]
222 },
223 "widgets_values": [
224 "qwen3vl_8b_int8_convrot.safetensors",
225 "qwen_image",
226 "default"
227 ],
228 "widgets_values_named": {
229 "clip_name": "qwen3vl_8b_int8_convrot.safetensors",
230 "type": "qwen_image",
231 "device": "default"
232 }
233 },
234 {
235 "id": 4,
236 "type": "VAELoader",
237 "pos": [
238 540,
239 540
240 ],
241 "size": [
242 320,
243 58
244 ],
245 "flags": {},
246 "order": 3,
247 "mode": 0,
248 "showAdvanced": null,
249 "inputs": [
250 {
251 "color_off": null,
252 "color_on": null,
253 "dir": null,
254 "label": null,
255 "localized_name": "vae_name",
256 "locked": null,
257 "name": "vae_name",
258 "nameLocked": null,
259 "removable": null,
260 "shape": null,
261 "type": "COMBO",
262 "widget": {
263 "name": "vae_name"
264 },
265 "link": null
266 }
267 ],
268 "outputs": [
269 {
270 "color_off": null,
271 "color_on": null,
272 "dir": null,
273 "label": null,
274 "localized_name": "VAE",
275 "locked": null,
276 "name": "VAE",
277 "nameLocked": null,
278 "removable": null,
279 "shape": null,
280 "type": "VAE",
281 "pos": null,
282 "slot_index": null,
283 "links": [
284 3,
285 4
286 ]
287 }
288 ],
289 "properties": {
290 "Node name for S&R": "VAELoader",
291 "models": [
292 {
293 "name": "qwen_image_2.1_vae_bf16.safetensors",
294 "url": "https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/vae/qwen_image_2.1_vae_bf16.safetensors",
295 "directory": "vae"
296 }
297 ]
298 },
299 "widgets_values": [
300 "qwen_image_2.1_vae_bf16.safetensors"
301 ],
302 "widgets_values_named": {
303 "vae_name": "qwen_image_2.1_vae_bf16.safetensors"
304 }
305 },
306 {
307 "id": 5,
308 "type": "PrimitiveStringMultiline",
309 "pos": [
310 1340,
311 0
312 ],
313 "size": [
314 440,
315 220
316 ],
317 "flags": {},
318 "order": 4,
319 "mode": 0,
320 "showAdvanced": null,
321 "inputs": [
322 {
323 "color_off": null,
324 "color_on": null,
325 "dir": null,
326 "label": null,
327 "localized_name": "value",
328 "locked": null,
329 "name": "value",
330 "nameLocked": null,
331 "removable": null,
332 "shape": null,
333 "type": "STRING",
334 "widget": {
335 "name": "value"
336 },
337 "link": null
338 }
339 ],
340 "outputs": [
341 {
342 "color_off": null,
343 "color_on": null,
344 "dir": null,
345 "label": null,
346 "localized_name": "STRING",
347 "locked": null,
348 "name": "STRING",
349 "nameLocked": null,
350 "removable": null,
351 "shape": null,
352 "type": "STRING",
353 "pos": null,
354 "slot_index": null,
355 "links": [
356 7,
357 13,
358 15
359 ]
360 }
361 ],
362 "title": "Prompt",
363 "properties": {
364 "Node name for S&R": "PrimitiveStringMultiline"
365 },
366 "widgets_values": [
367 "The woman from image 1 is holding the cat from image 2 in her arms, keep the background of image 1"
368 ],
369 "widgets_values_named": {
370 "value": "The woman from image 1 is holding the cat from image 2 in her arms, keep the background of image 1"
371 }
372 },
373 {
374 "id": 6,
375 "type": "ResolutionSelector",
376 "pos": [
377 1340,
378 458
379 ],
380 "size": [
381 320,
382 150
383 ],
384 "flags": {},
385 "order": 5,
386 "mode": 0,
387 "showAdvanced": null,
388 "inputs": [
389 {
390 "color_off": null,
391 "color_on": null,
392 "dir": null,
393 "label": null,
394 "localized_name": "aspect_ratio",
395 "locked": null,
396 "name": "aspect_ratio",
397 "nameLocked": null,
398 "removable": null,
399 "shape": null,
400 "type": "COMBO",
401 "widget": {
402 "name": "aspect_ratio"
403 },
404 "link": null
405 },
406 {
407 "color_off": null,
408 "color_on": null,
409 "dir": null,
410 "label": null,
411 "localized_name": "megapixels",
412 "locked": null,
413 "name": "megapixels",
414 "nameLocked": null,
415 "removable": null,
416 "shape": null,
417 "type": "FLOAT",
418 "widget": {
419 "name": "megapixels"
420 },
421 "link": null
422 },
423 {
424 "color_off": null,
425 "color_on": null,
426 "dir": null,
427 "label": null,
428 "localized_name": "multiple",
429 "locked": null,
430 "name": "multiple",
431 "nameLocked": null,
432 "removable": null,
433 "shape": null,
434 "type": "INT",
435 "widget": {
436 "name": "multiple"
437 },
438 "link": null
439 },
440 {
441 "color_off": null,
442 "color_on": null,
443 "dir": null,
444 "label": null,
445 "localized_name": "preview",
446 "locked": null,
447 "name": "preview",
448 "nameLocked": null,
449 "removable": null,
450 "shape": 7,
451 "type": "RESOLUTION_PREVIEW",
452 "widget": {
453 "name": "preview"
454 },
455 "link": null
456 }
457 ],
458 "outputs": [
459 {
460 "color_off": null,
461 "color_on": null,
462 "dir": null,
463 "label": null,
464 "localized_name": "width",
465 "locked": null,
466 "name": "width",
467 "nameLocked": null,
468 "removable": null,
469 "shape": null,
470 "type": "INT",
471 "pos": null,
472 "slot_index": null,
473 "links": [
474 5
475 ]
476 },
477 {
478 "color_off": null,
479 "color_on": null,
480 "dir": null,
481 "label": null,
482 "localized_name": "height",
483 "locked": null,
484 "name": "height",
485 "nameLocked": null,
486 "removable": null,
487 "shape": null,
488 "type": "INT",
489 "pos": null,
490 "slot_index": null,
491 "links": [
492 6
493 ]
494 }
495 ],
496 "title": "Output size",
497 "properties": {
498 "Node name for S&R": "ResolutionSelector"
499 },
500 "widgets_values": [
501 "1:1 (Square)",
502 1,
503 32
504 ],
505 "widgets_values_named": {
506 "aspect_ratio": "1:1 (Square)",
507 "megapixels": 1,
508 "multiple": 32
509 }
510 },
511 {
512 "id": 7,
513 "type": "EmptyLatentImage",
514 "pos": [
515 1340,
516 698
517 ],
518 "size": [
519 320,
520 106
521 ],
522 "flags": {},
523 "order": 6,
524 "mode": 0,
525 "showAdvanced": null,
526 "inputs": [
527 {
528 "color_off": null,
529 "color_on": null,
530 "dir": null,
531 "label": null,
532 "localized_name": "width",
533 "locked": null,
534 "name": "width",
535 "nameLocked": null,
536 "removable": null,
537 "shape": null,
538 "type": "INT",
539 "widget": {
540 "name": "width"
541 },
542 "link": 5
543 },
544 {
545 "color_off": null,
546 "color_on": null,
547 "dir": null,
548 "label": null,
549 "localized_name": "height",
550 "locked": null,
551 "name": "height",
552 "nameLocked": null,
553 "removable": null,
554 "shape": null,
555 "type": "INT",
556 "widget": {
557 "name": "height"
558 },
559 "link": 6
560 },
561 {
562 "color_off": null,
563 "color_on": null,
564 "dir": null,
565 "label": null,
566 "localized_name": "batch_size",
567 "locked": null,
568 "name": "batch_size",
569 "nameLocked": null,
570 "removable": null,
571 "shape": null,
572 "type": "INT",
573 "widget": {
574 "name": "batch_size"
575 },
576 "link": null
577 }
578 ],
579 "outputs": [
580 {
581 "color_off": null,
582 "color_on": null,
583 "dir": null,
584 "label": null,
585 "localized_name": "LATENT",
586 "locked": null,
587 "name": "LATENT",
588 "nameLocked": null,
589 "removable": null,
590 "shape": null,
591 "type": "LATENT",
592 "pos": null,
593 "slot_index": null,
594 "links": [
595 35
596 ]
597 }
598 ],
599 "properties": {
600 "Node name for S&R": "EmptyLatentImage"
601 },
602 "widgets_values": [
603 1024,
604 1024,
605 1
606 ],
607 "widgets_values_named": {
608 "width": 1024,
609 "height": 1024,
610 "batch_size": 1
611 }
612 },
613 {
614 "id": 8,
615 "type": "PrimitiveBoolean",
616 "pos": [
617 1860,
618 0
619 ],
620 "size": [
621 320,
622 58
623 ],
624 "flags": {},
625 "order": 7,
626 "mode": 0,
627 "showAdvanced": null,
628 "inputs": [
629 {
630 "color_off": null,
631 "color_on": null,
632 "dir": null,
633 "label": null,
634 "localized_name": "value",
635 "locked": null,
636 "name": "value",
637 "nameLocked": null,
638 "removable": null,
639 "shape": null,
640 "type": "BOOLEAN",
641 "widget": {
642 "name": "value"
643 },
644 "link": null
645 }
646 ],
647 "outputs": [
648 {
649 "color_off": null,
650 "color_on": null,
651 "dir": null,
652 "label": null,
653 "localized_name": "BOOLEAN",
654 "locked": null,
655 "name": "BOOLEAN",
656 "nameLocked": null,
657 "removable": null,
658 "shape": null,
659 "type": "BOOLEAN",
660 "pos": null,
661 "slot_index": null,
662 "links": [
663 17
664 ]
665 }
666 ],
667 "title": "Enhance prompt",
668 "properties": {
669 "Node name for S&R": "PrimitiveBoolean"
670 },
671 "widgets_values": [
672 true
673 ],
674 "widgets_values_named": {
675 "value": true
676 }
677 },
678 {
679 "id": 9,
680 "type": "PrimitiveStringMultiline",
681 "pos": [
682 1860,
683 148
684 ],
685 "size": [
686 440,
687 180
688 ],
689 "flags": {},
690 "order": 8,
691 "mode": 0,
692 "showAdvanced": null,
693 "inputs": [
694 {
695 "color_off": null,
696 "color_on": null,
697 "dir": null,
698 "label": null,
699 "localized_name": "value",
700 "locked": null,
701 "name": "value",
702 "nameLocked": null,
703 "removable": null,
704 "shape": null,
705 "type": "STRING",
706 "widget": {
707 "name": "value"
708 },
709 "link": null
710 }
711 ],
712 "outputs": [
713 {
714 "color_off": null,
715 "color_on": null,
716 "dir": null,
717 "label": null,
718 "localized_name": "STRING",
719 "locked": null,
720 "name": "STRING",
721 "nameLocked": null,
722 "removable": null,
723 "shape": null,
724 "type": "STRING",
725 "pos": null,
726 "slot_index": null,
727 "links": [
728 8
729 ]
730 }
731 ],
732 "title": "PE system prompt (official Qwen-Image-2.1 edit rewriter)",
733 "properties": {
734 "Node name for S&R": "PrimitiveStringMultiline"
735 },
736 "widgets_values": [
737 "# 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:"
738 ],
739 "widgets_values_named": {
740 "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:"
741 }
742 },
743 {
744 "id": 10,
745 "type": "StringFormat",
746 "pos": [
747 1860,
748 418
749 ],
750 "size": [
751 320,
752 108
753 ],
754 "flags": {},
755 "order": 9,
756 "mode": 0,
757 "showAdvanced": null,
758 "inputs": [
759 {
760 "color_off": null,
761 "color_on": null,
762 "dir": null,
763 "label": null,
764 "localized_name": "a",
765 "locked": null,
766 "name": "values.a",
767 "nameLocked": null,
768 "removable": null,
769 "shape": 7,
770 "type": "*",
771 "pos": null,
772 "link": 7
773 },
774 {
775 "color_off": null,
776 "color_on": null,
777 "dir": null,
778 "label": null,
779 "localized_name": "b",
780 "locked": null,
781 "name": "values.b",
782 "nameLocked": null,
783 "removable": null,
784 "shape": 7,
785 "type": "*",
786 "pos": null,
787 "link": null
788 },
789 {
790 "color_off": null,
791 "color_on": null,
792 "dir": null,
793 "label": null,
794 "localized_name": "f_string",
795 "locked": null,
796 "name": "f_string",
797 "nameLocked": null,
798 "removable": null,
799 "shape": null,
800 "type": "STRING",
801 "widget": {
802 "name": "f_string"
803 },
804 "link": null
805 }
806 ],
807 "outputs": [
808 {
809 "color_off": null,
810 "color_on": null,
811 "dir": null,
812 "label": null,
813 "localized_name": "STRING",
814 "locked": null,
815 "name": "STRING",
816 "nameLocked": null,
817 "removable": null,
818 "shape": null,
819 "type": "STRING",
820 "pos": null,
821 "slot_index": null,
822 "links": [
823 9
824 ]
825 }
826 ],
827 "title": "PE request",
828 "properties": {
829 "Node name for S&R": "StringFormat"
830 },
831 "widgets_values": [
832 "{a}\n(Write the description in English.)"
833 ],
834 "widgets_values_named": {
835 "f_string": "{a}\n(Write the description in English.)"
836 }
837 },
838 {
839 "id": 11,
840 "type": "TextGenerate",
841 "pos": [
842 2380,
843 0
844 ],
845 "size": [
846 320,
847 288
848 ],
849 "flags": {},
850 "order": 10,
851 "mode": 0,
852 "showAdvanced": null,
853 "inputs": [
854 {
855 "color_off": null,
856 "color_on": null,
857 "dir": null,
858 "label": null,
859 "localized_name": "clip",
860 "locked": null,
861 "name": "clip",
862 "nameLocked": null,
863 "removable": null,
864 "shape": null,
865 "type": "CLIP",
866 "pos": null,
867 "link": 2
868 },
869 {
870 "color_off": null,
871 "color_on": null,
872 "dir": null,
873 "label": null,
874 "localized_name": "image",
875 "locked": null,
876 "name": "image",
877 "nameLocked": null,
878 "removable": null,
879 "shape": 7,
880 "type": "IMAGE",
881 "pos": null,
882 "link": 33
883 },
884 {
885 "color_off": null,
886 "color_on": null,
887 "dir": null,
888 "label": null,
889 "localized_name": "video",
890 "locked": null,
891 "name": "video",
892 "nameLocked": null,
893 "removable": null,
894 "shape": 7,
895 "type": "IMAGE",
896 "pos": null,
897 "link": null
898 },
899 {
900 "color_off": null,
901 "color_on": null,
902 "dir": null,
903 "label": null,
904 "localized_name": "audio",
905 "locked": null,
906 "name": "audio",
907 "nameLocked": null,
908 "removable": null,
909 "shape": 7,
910 "type": "AUDIO",
911 "pos": null,
912 "link": null
913 },
914 {
915 "color_off": null,
916 "color_on": null,
917 "dir": null,
918 "label": null,
919 "localized_name": "system_prompt",
920 "locked": null,
921 "name": "system_prompt",
922 "nameLocked": null,
923 "removable": null,
924 "shape": 7,
925 "type": "STRING",
926 "pos": null,
927 "link": 8
928 },
929 {
930 "color_off": null,
931 "color_on": null,
932 "dir": null,
933 "label": null,
934 "localized_name": "prompt",
935 "locked": null,
936 "name": "prompt",
937 "nameLocked": null,
938 "removable": null,
939 "shape": null,
940 "type": "STRING",
941 "widget": {
942 "name": "prompt"
943 },
944 "link": 9
945 },
946 {
947 "color_off": null,
948 "color_on": null,
949 "dir": null,
950 "label": null,
951 "localized_name": "max_length",
952 "locked": null,
953 "name": "max_length",
954 "nameLocked": null,
955 "removable": null,
956 "shape": null,
957 "type": "INT",
958 "widget": {
959 "name": "max_length"
960 },
961 "link": null
962 },
963 {
964 "color_off": null,
965 "color_on": null,
966 "dir": null,
967 "label": null,
968 "localized_name": "Sampling Mode",
969 "locked": null,
970 "name": "sampling_mode",
971 "nameLocked": null,
972 "removable": null,
973 "shape": null,
974 "type": "COMFY_DYNAMICCOMBO_V3",
975 "widget": {
976 "name": "sampling_mode"
977 },
978 "link": null
979 },
980 {
981 "color_off": null,
982 "color_on": null,
983 "dir": null,
984 "label": null,
985 "localized_name": "thinking",
986 "locked": null,
987 "name": "thinking",
988 "nameLocked": null,
989 "removable": null,
990 "shape": 7,
991 "type": "BOOLEAN",
992 "widget": {
993 "name": "thinking"
994 },
995 "link": null
996 },
997 {
998 "color_off": null,
999 "color_on": null,
1000 "dir": null,
1001 "label": null,
1002 "localized_name": "use_default_template",
1003 "locked": null,
1004 "name": "use_default_template",
1005 "nameLocked": null,
1006 "removable": null,
1007 "shape": 7,
1008 "type": "BOOLEAN",
1009 "widget": {
1010 "name": "use_default_template"
1011 },
1012 "link": null
1013 },
1014 {
1015 "color_off": null,
1016 "color_on": null,
1017 "dir": null,
1018 "label": null,
1019 "localized_name": "mtp",
1020 "locked": null,
1021 "name": "mtp",
1022 "nameLocked": null,
1023 "removable": null,
1024 "shape": 7,
1025 "type": "COMBO",
1026 "widget": {
1027 "name": "mtp"
1028 },
1029 "link": null
1030 }
1031 ],
1032 "outputs": [
1033 {
1034 "color_off": null,
1035 "color_on": null,
1036 "dir": null,
1037 "label": null,
1038 "localized_name": "generated_text",
1039 "locked": null,
1040 "name": "generated_text",
1041 "nameLocked": null,
1042 "removable": null,
1043 "shape": null,
1044 "type": "STRING",
1045 "pos": null,
1046 "slot_index": null,
1047 "links": [
1048 10
1049 ]
1050 },
1051 {
1052 "color_off": null,
1053 "color_on": null,
1054 "dir": null,
1055 "label": null,
1056 "localized_name": "thinking",
1057 "locked": null,
1058 "name": "thinking",
1059 "nameLocked": null,
1060 "removable": null,
1061 "shape": null,
1062 "type": "STRING",
1063 "pos": null,
1064 "slot_index": null,
1065 "links": null
1066 }
1067 ],
1068 "title": "Rewrite prompt (Qwen3-VL text encoder)",
1069 "properties": {
1070 "Node name for S&R": "TextGenerate"
1071 },
1072 "widgets_values": [
1073 "",
1074 512,
1075 "off",
1076 true,
1077 true,
1078 "auto"
1079 ],
1080 "widgets_values_named": {
1081 "prompt": "",
1082 "max_length": 512,
1083 "sampling_mode": "off",
1084 "thinking": true,
1085 "use_default_template": true,
1086 "mtp": "auto"
1087 }
1088 },
1089 {
1090 "id": 12,
1091 "type": "JsonExtractString",
1092 "pos": [
1093 2380,
1094 378
1095 ],
1096 "size": [
1097 320,
1098 112
1099 ],
1100 "flags": {},
1101 "order": 11,
1102 "mode": 0,
1103 "showAdvanced": null,
1104 "inputs": [
1105 {
1106 "color_off": null,
1107 "color_on": null,
1108 "dir": null,
1109 "label": null,
1110 "localized_name": "json_string",
1111 "locked": null,
1112 "name": "json_string",
1113 "nameLocked": null,
1114 "removable": null,
1115 "shape": null,
1116 "type": "STRING",
1117 "widget": {
1118 "name": "json_string"
1119 },
1120 "link": 10
1121 },
1122 {
1123 "color_off": null,
1124 "color_on": null,
1125 "dir": null,
1126 "label": null,
1127 "localized_name": "key",
1128 "locked": null,
1129 "name": "key",
1130 "nameLocked": null,
1131 "removable": null,
1132 "shape": null,
1133 "type": "STRING",
1134 "widget": {
1135 "name": "key"
1136 },
1137 "link": null
1138 }
1139 ],
1140 "outputs": [
1141 {
1142 "color_off": null,
1143 "color_on": null,
1144 "dir": null,
1145 "label": null,
1146 "localized_name": "STRING",
1147 "locked": null,
1148 "name": "STRING",
1149 "nameLocked": null,
1150 "removable": null,
1151 "shape": null,
1152 "type": "STRING",
1153 "pos": null,
1154 "slot_index": null,
1155 "links": [
1156 11,
1157 12
1158 ]
1159 }
1160 ],
1161 "properties": {
1162 "Node name for S&R": "JsonExtractString"
1163 },
1164 "widgets_values": [
1165 "",
1166 "rewritten_prompt"
1167 ],
1168 "widgets_values_named": {
1169 "json_string": "",
1170 "key": "rewritten_prompt"
1171 }
1172 },
1173 {
1174 "id": 13,
1175 "type": "StringCompare",
1176 "pos": [
1177 2380,
1178 580
1179 ],
1180 "size": [
1181 320,
1182 190
1183 ],
1184 "flags": {},
1185 "order": 12,
1186 "mode": 0,
1187 "showAdvanced": null,
1188 "inputs": [
1189 {
1190 "color_off": null,
1191 "color_on": null,
1192 "dir": null,
1193 "label": null,
1194 "localized_name": "string_a",
1195 "locked": null,
1196 "name": "string_a",
1197 "nameLocked": null,
1198 "removable": null,
1199 "shape": null,
1200 "type": "STRING",
1201 "widget": {
1202 "name": "string_a"
1203 },
1204 "link": 11
1205 },
1206 {
1207 "color_off": null,
1208 "color_on": null,
1209 "dir": null,
1210 "label": null,
1211 "localized_name": "string_b",
1212 "locked": null,
1213 "name": "string_b",
1214 "nameLocked": null,
1215 "removable": null,
1216 "shape": null,
1217 "type": "STRING",
1218 "widget": {
1219 "name": "string_b"
1220 },
1221 "link": null
1222 },
1223 {
1224 "color_off": null,
1225 "color_on": null,
1226 "dir": null,
1227 "label": null,
1228 "localized_name": "mode",
1229 "locked": null,
1230 "name": "mode",
1231 "nameLocked": null,
1232 "removable": null,
1233 "shape": null,
1234 "type": "COMBO",
1235 "widget": {
1236 "name": "mode"
1237 },
1238 "link": null
1239 },
1240 {
1241 "color_off": null,
1242 "color_on": null,
1243 "dir": null,
1244 "label": null,
1245 "localized_name": "case_sensitive",
1246 "locked": null,
1247 "name": "case_sensitive",
1248 "nameLocked": null,
1249 "removable": null,
1250 "shape": null,
1251 "type": "BOOLEAN",
1252 "widget": {
1253 "name": "case_sensitive"
1254 },
1255 "link": null
1256 }
1257 ],
1258 "outputs": [
1259 {
1260 "color_off": null,
1261 "color_on": null,
1262 "dir": null,
1263 "label": null,
1264 "localized_name": "BOOLEAN",
1265 "locked": null,
1266 "name": "BOOLEAN",
1267 "nameLocked": null,
1268 "removable": null,
1269 "shape": null,
1270 "type": "BOOLEAN",
1271 "pos": null,
1272 "slot_index": null,
1273 "links": [
1274 14
1275 ]
1276 }
1277 ],
1278 "title": "Rewrite failed?",
1279 "properties": {
1280 "Node name for S&R": "StringCompare"
1281 },
1282 "widgets_values": [
1283 "",
1284 "",
1285 "Equal",
1286 true
1287 ],
1288 "widgets_values_named": {
1289 "string_a": "",
1290 "string_b": "",
1291 "mode": "Equal",
1292 "case_sensitive": true
1293 }
1294 },
1295 {
1296 "id": 14,
1297 "type": "ComfySwitchNode",
1298 "pos": [
1299 2780,
1300 0
1301 ],
1302 "size": [
1303 320,
1304 78
1305 ],
1306 "flags": {},
1307 "order": 13,
1308 "mode": 0,
1309 "showAdvanced": null,
1310 "inputs": [
1311 {
1312 "color_off": null,
1313 "color_on": null,
1314 "dir": null,
1315 "label": null,
1316 "localized_name": "on_false",
1317 "locked": null,
1318 "name": "on_false",
1319 "nameLocked": null,
1320 "removable": null,
1321 "shape": 7,
1322 "type": "STRING",
1323 "pos": null,
1324 "link": 12
1325 },
1326 {
1327 "color_off": null,
1328 "color_on": null,
1329 "dir": null,
1330 "label": null,
1331 "localized_name": "on_true",
1332 "locked": null,
1333 "name": "on_true",
1334 "nameLocked": null,
1335 "removable": null,
1336 "shape": 7,
1337 "type": "STRING",
1338 "pos": null,
1339 "link": 13
1340 },
1341 {
1342 "color_off": null,
1343 "color_on": null,
1344 "dir": null,
1345 "label": null,
1346 "localized_name": "switch",
1347 "locked": null,
1348 "name": "switch",
1349 "nameLocked": null,
1350 "removable": null,
1351 "shape": null,
1352 "type": "BOOLEAN",
1353 "widget": {
1354 "name": "switch"
1355 },
1356 "link": 14
1357 }
1358 ],
1359 "outputs": [
1360 {
1361 "color_off": null,
1362 "color_on": null,
1363 "dir": null,
1364 "label": null,
1365 "localized_name": "output",
1366 "locked": null,
1367 "name": "output",
1368 "nameLocked": null,
1369 "removable": null,
1370 "shape": null,
1371 "type": "STRING",
1372 "pos": null,
1373 "slot_index": null,
1374 "links": [
1375 16
1376 ]
1377 }
1378 ],
1379 "title": "Fall back to the original prompt",
1380 "properties": {
1381 "Node name for S&R": "ComfySwitchNode"
1382 },
1383 "widgets_values": [
1384 false
1385 ],
1386 "widgets_values_named": {
1387 "switch": false
1388 }
1389 },
1390 {
1391 "id": 15,
1392 "type": "ComfySwitchNode",
1393 "pos": [
1394 2780,
1395 168
1396 ],
1397 "size": [
1398 320,
1399 78
1400 ],
1401 "flags": {},
1402 "order": 14,
1403 "mode": 0,
1404 "showAdvanced": null,
1405 "inputs": [
1406 {
1407 "color_off": null,
1408 "color_on": null,
1409 "dir": null,
1410 "label": null,
1411 "localized_name": "on_false",
1412 "locked": null,
1413 "name": "on_false",
1414 "nameLocked": null,
1415 "removable": null,
1416 "shape": 7,
1417 "type": "STRING",
1418 "pos": null,
1419 "link": 15
1420 },
1421 {
1422 "color_off": null,
1423 "color_on": null,
1424 "dir": null,
1425 "label": null,
1426 "localized_name": "on_true",
1427 "locked": null,
1428 "name": "on_true",
1429 "nameLocked": null,
1430 "removable": null,
1431 "shape": 7,
1432 "type": "STRING",
1433 "pos": null,
1434 "link": 16
1435 },
1436 {
1437 "color_off": null,
1438 "color_on": null,
1439 "dir": null,
1440 "label": null,
1441 "localized_name": "switch",
1442 "locked": null,
1443 "name": "switch",
1444 "nameLocked": null,
1445 "removable": null,
1446 "shape": null,
1447 "type": "BOOLEAN",
1448 "widget": {
1449 "name": "switch"
1450 },
1451 "link": 17
1452 }
1453 ],
1454 "outputs": [
1455 {
1456 "color_off": null,
1457 "color_on": null,
1458 "dir": null,
1459 "label": null,
1460 "localized_name": "output",
1461 "locked": null,
1462 "name": "output",
1463 "nameLocked": null,
1464 "removable": null,
1465 "shape": null,
1466 "type": "STRING",
1467 "pos": null,
1468 "slot_index": null,
1469 "links": [
1470 18,
1471 19
1472 ]
1473 }
1474 ],
1475 "title": "Enhanced or original",
1476 "properties": {
1477 "Node name for S&R": "ComfySwitchNode"
1478 },
1479 "widgets_values": [
1480 false
1481 ],
1482 "widgets_values_named": {
1483 "switch": false
1484 }
1485 },
1486 {
1487 "id": 16,
1488 "type": "PreviewAny",
1489 "pos": [
1490 2780,
1491 336
1492 ],
1493 "size": [
1494 440,
1495 260
1496 ],
1497 "flags": {},
1498 "order": 15,
1499 "mode": 0,
1500 "showAdvanced": null,
1501 "inputs": [
1502 {
1503 "color_off": null,
1504 "color_on": null,
1505 "dir": null,
1506 "label": null,
1507 "localized_name": "source",
1508 "locked": null,
1509 "name": "source",
1510 "nameLocked": null,
1511 "removable": null,
1512 "shape": null,
1513 "type": "*",
1514 "pos": null,
1515 "link": 18
1516 }
1517 ],
1518 "outputs": [
1519 {
1520 "color_off": null,
1521 "color_on": null,
1522 "dir": null,
1523 "label": null,
1524 "localized_name": "STRING",
1525 "locked": null,
1526 "name": "STRING",
1527 "nameLocked": null,
1528 "removable": null,
1529 "shape": null,
1530 "type": "STRING",
1531 "pos": null,
1532 "slot_index": null,
1533 "links": null
1534 }
1535 ],
1536 "title": "Prompt used",
1537 "properties": {
1538 "Node name for S&R": "PreviewAny"
1539 },
1540 "widgets_values": [],
1541 "widgets_values_named": {}
1542 },
1543 {
1544 "id": 17,
1545 "type": "TextEncodeQwenImage21",
1546 "pos": [
1547 3300,
1548 0
1549 ],
1550 "size": [
1551 320,
1552 246
1553 ],
1554 "flags": {},
1555 "order": 16,
1556 "mode": 0,
1557 "showAdvanced": null,
1558 "inputs": [
1559 {
1560 "color_off": null,
1561 "color_on": null,
1562 "dir": null,
1563 "label": null,
1564 "localized_name": "clip",
1565 "locked": null,
1566 "name": "clip",
1567 "nameLocked": null,
1568 "removable": null,
1569 "shape": null,
1570 "type": "CLIP",
1571 "pos": null,
1572 "link": 1
1573 },
1574 {
1575 "color_off": null,
1576 "color_on": null,
1577 "dir": null,
1578 "label": null,
1579 "localized_name": "image_1",
1580 "locked": null,
1581 "name": "images.image_1",
1582 "nameLocked": null,
1583 "removable": null,
1584 "shape": 7,
1585 "type": "IMAGE",
1586 "pos": null,
1587 "link": 29
1588 },
1589 {
1590 "color_off": null,
1591 "color_on": null,
1592 "dir": null,
1593 "label": null,
1594 "localized_name": "image_2",
1595 "locked": null,
1596 "name": "images.image_2",
1597 "nameLocked": null,
1598 "removable": null,
1599 "shape": 7,
1600 "type": "IMAGE",
1601 "pos": null,
1602 "link": 30
1603 },
1604 {
1605 "color_off": null,
1606 "color_on": null,
1607 "dir": null,
1608 "label": null,
1609 "localized_name": "image_3",
1610 "locked": null,
1611 "name": "images.image_3",
1612 "nameLocked": null,
1613 "removable": null,
1614 "shape": 7,
1615 "type": "IMAGE",
1616 "pos": null,
1617 "link": null
1618 },
1619 {
1620 "color_off": null,
1621 "color_on": null,
1622 "dir": null,
1623 "label": null,
1624 "localized_name": "vae",
1625 "locked": null,
1626 "name": "vae",
1627 "nameLocked": null,
1628 "removable": null,
1629 "shape": 7,
1630 "type": "VAE",
1631 "pos": null,
1632 "link": 3
1633 },
1634 {
1635 "color_off": null,
1636 "color_on": null,
1637 "dir": null,
1638 "label": null,
1639 "localized_name": "prompt",
1640 "locked": null,
1641 "name": "prompt",
1642 "nameLocked": null,
1643 "removable": null,
1644 "shape": null,
1645 "type": "STRING",
1646 "widget": {
1647 "name": "prompt"
1648 },
1649 "link": 19
1650 },
1651 {
1652 "color_off": null,
1653 "color_on": null,
1654 "dir": null,
1655 "label": null,
1656 "localized_name": "negative_prompt",
1657 "locked": null,
1658 "name": "negative_prompt",
1659 "nameLocked": null,
1660 "removable": null,
1661 "shape": null,
1662 "type": "STRING",
1663 "widget": {
1664 "name": "negative_prompt"
1665 },
1666 "link": null
1667 },
1668 {
1669 "color_off": null,
1670 "color_on": null,
1671 "dir": null,
1672 "label": null,
1673 "localized_name": "resolution",
1674 "locked": null,
1675 "name": "resolution",
1676 "nameLocked": null,
1677 "removable": null,
1678 "shape": null,
1679 "type": "INT",
1680 "widget": {
1681 "name": "resolution"
1682 },
1683 "link": null
1684 }
1685 ],
1686 "outputs": [
1687 {
1688 "color_off": null,
1689 "color_on": null,
1690 "dir": null,
1691 "label": null,
1692 "localized_name": "positive",
1693 "locked": null,
1694 "name": "positive",
1695 "nameLocked": null,
1696 "removable": null,
1697 "shape": null,
1698 "type": "CONDITIONING",
1699 "pos": null,
1700 "slot_index": null,
1701 "links": [
1702 20
1703 ]
1704 },
1705 {
1706 "color_off": null,
1707 "color_on": null,
1708 "dir": null,
1709 "label": null,
1710 "localized_name": "negative",
1711 "locked": null,
1712 "name": "negative",
1713 "nameLocked": null,
1714 "removable": null,
1715 "shape": null,
1716 "type": "CONDITIONING",
1717 "pos": null,
1718 "slot_index": null,
1719 "links": null
1720 },
1721 {
1722 "color_off": null,
1723 "color_on": null,
1724 "dir": null,
1725 "label": null,
1726 "localized_name": "latent",
1727 "locked": null,
1728 "name": "latent",
1729 "nameLocked": null,
1730 "removable": null,
1731 "shape": null,
1732 "type": "LATENT",
1733 "pos": null,
1734 "slot_index": null,
1735 "links": [
1736 34
1737 ]
1738 }
1739 ],
1740 "properties": {
1741 "Node name for S&R": "TextEncodeQwenImage21"
1742 },
1743 "widgets_values": [
1744 "",
1745 "",
1746 1024
1747 ],
1748 "widgets_values_named": {
1749 "prompt": "",
1750 "negative_prompt": "",
1751 "resolution": 1024
1752 }
1753 },
1754 {
1755 "id": 18,
1756 "type": "BasicGuider",
1757 "pos": [
1758 3300,
1759 336
1760 ],
1761 "size": [
1762 320,
1763 46
1764 ],
1765 "flags": {},
1766 "order": 17,
1767 "mode": 0,
1768 "showAdvanced": null,
1769 "inputs": [
1770 {
1771 "color_off": null,
1772 "color_on": null,
1773 "dir": null,
1774 "label": null,
1775 "localized_name": "model",
1776 "locked": null,
1777 "name": "model",
1778 "nameLocked": null,
1779 "removable": null,
1780 "shape": null,
1781 "type": "MODEL",
1782 "pos": null,
1783 "link": 28
1784 },
1785 {
1786 "color_off": null,
1787 "color_on": null,
1788 "dir": null,
1789 "label": null,
1790 "localized_name": "conditioning",
1791 "locked": null,
1792 "name": "conditioning",
1793 "nameLocked": null,
1794 "removable": null,
1795 "shape": null,
1796 "type": "CONDITIONING",
1797 "pos": null,
1798 "link": 20
1799 }
1800 ],
1801 "outputs": [
1802 {
1803 "color_off": null,
1804 "color_on": null,
1805 "dir": null,
1806 "label": null,
1807 "localized_name": "GUIDER",
1808 "locked": null,
1809 "name": "GUIDER",
1810 "nameLocked": null,
1811 "removable": null,
1812 "shape": null,
1813 "type": "GUIDER",
1814 "pos": null,
1815 "slot_index": null,
1816 "links": [
1817 22
1818 ]
1819 }
1820 ],
1821 "title": "BasicGuider (CFG off)",
1822 "properties": {
1823 "Node name for S&R": "BasicGuider"
1824 }
1825 },
1826 {
1827 "id": 19,
1828 "type": "RandomNoise",
1829 "pos": [
1830 3300,
1831 472
1832 ],
1833 "size": [
1834 320,
1835 82
1836 ],
1837 "flags": {},
1838 "order": 18,
1839 "mode": 0,
1840 "showAdvanced": null,
1841 "inputs": [
1842 {
1843 "color_off": null,
1844 "color_on": null,
1845 "dir": null,
1846 "label": null,
1847 "localized_name": "noise_seed",
1848 "locked": null,
1849 "name": "noise_seed",
1850 "nameLocked": null,
1851 "removable": null,
1852 "shape": null,
1853 "type": "INT",
1854 "widget": {
1855 "name": "noise_seed"
1856 },
1857 "link": null
1858 }
1859 ],
1860 "outputs": [
1861 {
1862 "color_off": null,
1863 "color_on": null,
1864 "dir": null,
1865 "label": null,
1866 "localized_name": "NOISE",
1867 "locked": null,
1868 "name": "NOISE",
1869 "nameLocked": null,
1870 "removable": null,
1871 "shape": null,
1872 "type": "NOISE",
1873 "pos": null,
1874 "slot_index": null,
1875 "links": [
1876 21
1877 ]
1878 }
1879 ],
1880 "properties": {
1881 "Node name for S&R": "RandomNoise"
1882 },
1883 "widgets_values": [
1884 42,
1885 "randomize"
1886 ],
1887 "widgets_values_named": {
1888 "noise_seed": 42,
1889 "control_after_generate": "randomize"
1890 }
1891 },
1892 {
1893 "id": 20,
1894 "type": "KSamplerSelect",
1895 "pos": [
1896 3300,
1897 644
1898 ],
1899 "size": [
1900 320,
1901 58
1902 ],
1903 "flags": {},
1904 "order": 19,
1905 "mode": 0,
1906 "showAdvanced": null,
1907 "inputs": [
1908 {
1909 "color_off": null,
1910 "color_on": null,
1911 "dir": null,
1912 "label": null,
1913 "localized_name": "sampler_name",
1914 "locked": null,
1915 "name": "sampler_name",
1916 "nameLocked": null,
1917 "removable": null,
1918 "shape": null,
1919 "type": "COMBO",
1920 "widget": {
1921 "name": "sampler_name"
1922 },
1923 "link": null
1924 }
1925 ],
1926 "outputs": [
1927 {
1928 "color_off": null,
1929 "color_on": null,
1930 "dir": null,
1931 "label": null,
1932 "localized_name": "SAMPLER",
1933 "locked": null,
1934 "name": "SAMPLER",
1935 "nameLocked": null,
1936 "removable": null,
1937 "shape": null,
1938 "type": "SAMPLER",
1939 "pos": null,
1940 "slot_index": null,
1941 "links": [
1942 23
1943 ]
1944 }
1945 ],
1946 "properties": {
1947 "Node name for S&R": "KSamplerSelect"
1948 },
1949 "widgets_values": [
1950 "euler"
1951 ],
1952 "widgets_values_named": {
1953 "sampler_name": "euler"
1954 }
1955 },
1956 {
1957 "id": 21,
1958 "type": "ViggleTurboSigmas",
1959 "pos": [
1960 3300,
1961 792
1962 ],
1963 "size": [
1964 320,
1965 58
1966 ],
1967 "flags": {},
1968 "order": 20,
1969 "mode": 0,
1970 "showAdvanced": null,
1971 "inputs": [
1972 {
1973 "color_off": null,
1974 "color_on": null,
1975 "dir": null,
1976 "label": null,
1977 "localized_name": "latent",
1978 "locked": null,
1979 "name": "latent",
1980 "nameLocked": null,
1981 "removable": null,
1982 "shape": null,
1983 "type": "LATENT",
1984 "pos": null,
1985 "link": 37
1986 },
1987 {
1988 "color_off": null,
1989 "color_on": null,
1990 "dir": null,
1991 "label": null,
1992 "localized_name": "nodes",
1993 "locked": null,
1994 "name": "nodes",
1995 "nameLocked": null,
1996 "removable": null,
1997 "shape": null,
1998 "type": "STRING",
1999 "widget": {
2000 "name": "nodes"
2001 },
2002 "link": null
2003 }
2004 ],
2005 "outputs": [
2006 {
2007 "color_off": null,
2008 "color_on": null,
2009 "dir": null,
2010 "label": null,
2011 "localized_name": "SIGMAS",
2012 "locked": null,
2013 "name": "SIGMAS",
2014 "nameLocked": null,
2015 "removable": null,
2016 "shape": null,
2017 "type": "SIGMAS",
2018 "pos": null,
2019 "slot_index": null,
2020 "links": [
2021 24
2022 ]
2023 }
2024 ],
2025 "properties": {
2026 "Node name for S&R": "ViggleTurboSigmas"
2027 },
2028 "widgets_values": [
2029 "1.0, 0.9375, 0.875, 0.75, 0.5, 0.25"
2030 ],
2031 "widgets_values_named": {
2032 "nodes": "1.0, 0.9375, 0.875, 0.75, 0.5, 0.25"
2033 }
2034 },
2035 {
2036 "id": 22,
2037 "type": "SamplerCustomAdvanced",
2038 "pos": [
2039 3700,
2040 0
2041 ],
2042 "size": [
2043 320,
2044 106
2045 ],
2046 "flags": {},
2047 "order": 21,
2048 "mode": 0,
2049 "showAdvanced": null,
2050 "inputs": [
2051 {
2052 "color_off": null,
2053 "color_on": null,
2054 "dir": null,
2055 "label": null,
2056 "localized_name": "noise",
2057 "locked": null,
2058 "name": "noise",
2059 "nameLocked": null,
2060 "removable": null,
2061 "shape": null,
2062 "type": "NOISE",
2063 "pos": null,
2064 "link": 21
2065 },
2066 {
2067 "color_off": null,
2068 "color_on": null,
2069 "dir": null,
2070 "label": null,
2071 "localized_name": "guider",
2072 "locked": null,
2073 "name": "guider",
2074 "nameLocked": null,
2075 "removable": null,
2076 "shape": null,
2077 "type": "GUIDER",
2078 "pos": null,
2079 "link": 22
2080 },
2081 {
2082 "color_off": null,
2083 "color_on": null,
2084 "dir": null,
2085 "label": null,
2086 "localized_name": "sampler",
2087 "locked": null,
2088 "name": "sampler",
2089 "nameLocked": null,
2090 "removable": null,
2091 "shape": null,
2092 "type": "SAMPLER",
2093 "pos": null,
2094 "link": 23
2095 },
2096 {
2097 "color_off": null,
2098 "color_on": null,
2099 "dir": null,
2100 "label": null,
2101 "localized_name": "sigmas",
2102 "locked": null,
2103 "name": "sigmas",
2104 "nameLocked": null,
2105 "removable": null,
2106 "shape": null,
2107 "type": "SIGMAS",
2108 "pos": null,
2109 "link": 24
2110 },
2111 {
2112 "color_off": null,
2113 "color_on": null,
2114 "dir": null,
2115 "label": null,
2116 "localized_name": "latent_image",
2117 "locked": null,
2118 "name": "latent_image",
2119 "nameLocked": null,
2120 "removable": null,
2121 "shape": null,
2122 "type": "LATENT",
2123 "pos": null,
2124 "link": 38
2125 }
2126 ],
2127 "outputs": [
2128 {
2129 "color_off": null,
2130 "color_on": null,
2131 "dir": null,
2132 "label": null,
2133 "localized_name": "output",
2134 "locked": null,
2135 "name": "output",
2136 "nameLocked": null,
2137 "removable": null,
2138 "shape": null,
2139 "type": "LATENT",
2140 "pos": null,
2141 "slot_index": null,
2142 "links": [
2143 25
2144 ]
2145 },
2146 {
2147 "color_off": null,
2148 "color_on": null,
2149 "dir": null,
2150 "label": null,
2151 "localized_name": "denoised_output",
2152 "locked": null,
2153 "name": "denoised_output",
2154 "nameLocked": null,
2155 "removable": null,
2156 "shape": null,
2157 "type": "LATENT",
2158 "pos": null,
2159 "slot_index": null,
2160 "links": null
2161 }
2162 ],
2163 "properties": {
2164 "Node name for S&R": "SamplerCustomAdvanced"
2165 }
2166 },
2167 {
2168 "id": 23,
2169 "type": "VAEDecode",
2170 "pos": [
2171 3700,
2172 196
2173 ],
2174 "size": [
2175 320,
2176 46
2177 ],
2178 "flags": {},
2179 "order": 22,
2180 "mode": 0,
2181 "showAdvanced": null,
2182 "inputs": [
2183 {
2184 "color_off": null,
2185 "color_on": null,
2186 "dir": null,
2187 "label": null,
2188 "localized_name": "samples",
2189 "locked": null,
2190 "name": "samples",
2191 "nameLocked": null,
2192 "removable": null,
2193 "shape": null,
2194 "type": "LATENT",
2195 "pos": null,
2196 "link": 25
2197 },
2198 {
2199 "color_off": null,
2200 "color_on": null,
2201 "dir": null,
2202 "label": null,
2203 "localized_name": "vae",
2204 "locked": null,
2205 "name": "vae",
2206 "nameLocked": null,
2207 "removable": null,
2208 "shape": null,
2209 "type": "VAE",
2210 "pos": null,
2211 "link": 4
2212 }
2213 ],
2214 "outputs": [
2215 {
2216 "color_off": null,
2217 "color_on": null,
2218 "dir": null,
2219 "label": null,
2220 "localized_name": "IMAGE",
2221 "locked": null,
2222 "name": "IMAGE",
2223 "nameLocked": null,
2224 "removable": null,
2225 "shape": null,
2226 "type": "IMAGE",
2227 "pos": null,
2228 "slot_index": null,
2229 "links": [
2230 26
2231 ]
2232 }
2233 ],
2234 "properties": {
2235 "Node name for S&R": "VAEDecode"
2236 }
2237 },
2238 {
2239 "id": 24,
2240 "type": "SaveImage",
2241 "pos": [
2242 3700,
2243 332
2244 ],
2245 "size": [
2246 520,
2247 560
2248 ],
2249 "flags": {},
2250 "order": 23,
2251 "mode": 0,
2252 "showAdvanced": null,
2253 "inputs": [
2254 {
2255 "color_off": null,
2256 "color_on": null,
2257 "dir": null,
2258 "label": null,
2259 "localized_name": "images",
2260 "locked": null,
2261 "name": "images",
2262 "nameLocked": null,
2263 "removable": null,
2264 "shape": null,
2265 "type": "IMAGE",
2266 "pos": null,
2267 "link": 26
2268 },
2269 {
2270 "color_off": null,
2271 "color_on": null,
2272 "dir": null,
2273 "label": null,
2274 "localized_name": "filename_prefix",
2275 "locked": null,
2276 "name": "filename_prefix",
2277 "nameLocked": null,
2278 "removable": null,
2279 "shape": null,
2280 "type": "STRING",
2281 "widget": {
2282 "name": "filename_prefix"
2283 },
2284 "link": null
2285 }
2286 ],
2287 "outputs": [
2288 {
2289 "color_off": null,
2290 "color_on": null,
2291 "dir": null,
2292 "label": null,
2293 "localized_name": "images",
2294 "locked": null,
2295 "name": "images",
2296 "nameLocked": null,
2297 "removable": null,
2298 "shape": null,
2299 "type": "IMAGE",
2300 "pos": null,
2301 "slot_index": null,
2302 "links": null
2303 }
2304 ],
2305 "properties": {},
2306 "widgets_values": [
2307 "viggle_turbo/edit"
2308 ],
2309 "widgets_values_named": {
2310 "filename_prefix": "viggle_turbo/edit"
2311 }
2312 },
2313 {
2314 "id": 25,
2315 "type": "LoadImage",
2316 "pos": [
2317 940,
2318 0
2319 ],
2320 "size": [
2321 320,
2322 326
2323 ],
2324 "flags": {},
2325 "order": 24,
2326 "mode": 0,
2327 "showAdvanced": null,
2328 "inputs": [
2329 {
2330 "color_off": null,
2331 "color_on": null,
2332 "dir": null,
2333 "label": null,
2334 "localized_name": "image",
2335 "locked": null,
2336 "name": "image",
2337 "nameLocked": null,
2338 "removable": null,
2339 "shape": null,
2340 "type": "COMBO",
2341 "widget": {
2342 "name": "image"
2343 },
2344 "link": null
2345 },
2346 {
2347 "color_off": null,
2348 "color_on": null,
2349 "dir": null,
2350 "label": null,
2351 "localized_name": "choose file to upload",
2352 "locked": null,
2353 "name": "upload",
2354 "nameLocked": null,
2355 "removable": null,
2356 "shape": null,
2357 "type": "IMAGEUPLOAD",
2358 "widget": {
2359 "name": "upload"
2360 },
2361 "link": null
2362 }
2363 ],
2364 "outputs": [
2365 {
2366 "color_off": null,
2367 "color_on": null,
2368 "dir": null,
2369 "label": null,
2370 "localized_name": "IMAGE",
2371 "locked": null,
2372 "name": "IMAGE",
2373 "nameLocked": null,
2374 "removable": null,
2375 "shape": null,
2376 "type": "IMAGE",
2377 "pos": null,
2378 "slot_index": null,
2379 "links": [
2380 29,
2381 31
2382 ]
2383 },
2384 {
2385 "color_off": null,
2386 "color_on": null,
2387 "dir": null,
2388 "label": null,
2389 "localized_name": "MASK",
2390 "locked": null,
2391 "name": "MASK",
2392 "nameLocked": null,
2393 "removable": null,
2394 "shape": null,
2395 "type": "MASK",
2396 "pos": null,
2397 "slot_index": null,
2398 "links": null
2399 }
2400 ],
2401 "title": "Image 1",
2402 "properties": {
2403 "Node name for S&R": "LoadImage"
2404 },
2405 "widgets_values": [
2406 "woman2.webp",
2407 "image"
2408 ],
2409 "widgets_values_named": {
2410 "image": "woman2.webp",
2411 "upload": "image"
2412 }
2413 },
2414 {
2415 "id": 26,
2416 "type": "LoadImage",
2417 "pos": [
2418 940,
2419 416
2420 ],
2421 "size": [
2422 320,
2423 326
2424 ],
2425 "flags": {},
2426 "order": 25,
2427 "mode": 0,
2428 "showAdvanced": null,
2429 "inputs": [
2430 {
2431 "color_off": null,
2432 "color_on": null,
2433 "dir": null,
2434 "label": null,
2435 "localized_name": "image",
2436 "locked": null,
2437 "name": "image",
2438 "nameLocked": null,
2439 "removable": null,
2440 "shape": null,
2441 "type": "COMBO",
2442 "widget": {
2443 "name": "image"
2444 },
2445 "link": null
2446 },
2447 {
2448 "color_off": null,
2449 "color_on": null,
2450 "dir": null,
2451 "label": null,
2452 "localized_name": "choose file to upload",
2453 "locked": null,
2454 "name": "upload",
2455 "nameLocked": null,
2456 "removable": null,
2457 "shape": null,
2458 "type": "IMAGEUPLOAD",
2459 "widget": {
2460 "name": "upload"
2461 },
2462 "link": null
2463 }
2464 ],
2465 "outputs": [
2466 {
2467 "color_off": null,
2468 "color_on": null,
2469 "dir": null,
2470 "label": null,
2471 "localized_name": "IMAGE",
2472 "locked": null,
2473 "name": "IMAGE",
2474 "nameLocked": null,
2475 "removable": null,
2476 "shape": null,
2477 "type": "IMAGE",
2478 "pos": null,
2479 "slot_index": null,
2480 "links": [
2481 30,
2482 32
2483 ]
2484 },
2485 {
2486 "color_off": null,
2487 "color_on": null,
2488 "dir": null,
2489 "label": null,
2490 "localized_name": "MASK",
2491 "locked": null,
2492 "name": "MASK",
2493 "nameLocked": null,
2494 "removable": null,
2495 "shape": null,
2496 "type": "MASK",
2497 "pos": null,
2498 "slot_index": null,
2499 "links": null
2500 }
2501 ],
2502 "title": "Image 2",
2503 "properties": {
2504 "Node name for S&R": "LoadImage"
2505 },
2506 "widgets_values": [
2507 "cat.webp",
2508 "image"
2509 ],
2510 "widgets_values_named": {
2511 "image": "cat.webp",
2512 "upload": "image"
2513 }
2514 },
2515 {
2516 "id": 27,
2517 "type": "BatchImagesNode",
2518 "pos": [
2519 1860,
2520 616
2521 ],
2522 "size": [
2523 320,
2524 66
2525 ],
2526 "flags": {},
2527 "order": 26,
2528 "mode": 0,
2529 "showAdvanced": null,
2530 "inputs": [
2531 {
2532 "color_off": null,
2533 "color_on": null,
2534 "dir": null,
2535 "label": null,
2536 "localized_name": "image0",
2537 "locked": null,
2538 "name": "images.image0",
2539 "nameLocked": null,
2540 "removable": null,
2541 "shape": null,
2542 "type": "IMAGE",
2543 "pos": null,
2544 "link": 31
2545 },
2546 {
2547 "color_off": null,
2548 "color_on": null,
2549 "dir": null,
2550 "label": null,
2551 "localized_name": "image1",
2552 "locked": null,
2553 "name": "images.image1",
2554 "nameLocked": null,
2555 "removable": null,
2556 "shape": 7,
2557 "type": "IMAGE",
2558 "pos": null,
2559 "link": 32
2560 },
2561 {
2562 "color_off": null,
2563 "color_on": null,
2564 "dir": null,
2565 "label": null,
2566 "localized_name": "image2",
2567 "locked": null,
2568 "name": "images.image2",
2569 "nameLocked": null,
2570 "removable": null,
2571 "shape": 7,
2572 "type": "IMAGE",
2573 "pos": null,
2574 "link": null
2575 }
2576 ],
2577 "outputs": [
2578 {
2579 "color_off": null,
2580 "color_on": null,
2581 "dir": null,
2582 "label": null,
2583 "localized_name": "IMAGE",
2584 "locked": null,
2585 "name": "IMAGE",
2586 "nameLocked": null,
2587 "removable": null,
2588 "shape": null,
2589 "type": "IMAGE",
2590 "pos": null,
2591 "slot_index": null,
2592 "links": [
2593 33
2594 ]
2595 }
2596 ],
2597 "title": "References for the rewriter",
2598 "properties": {
2599 "Node name for S&R": "BatchImagesNode"
2600 }
2601 },
2602 {
2603 "id": 28,
2604 "type": "QwenImage21Cache",
2605 "pos": [
2606 540,
2607 172
2608 ],
2609 "size": [
2610 320,
2611 82
2612 ],
2613 "flags": {},
2614 "order": 27,
2615 "mode": 0,
2616 "showAdvanced": null,
2617 "inputs": [
2618 {
2619 "color_off": null,
2620 "color_on": null,
2621 "dir": null,
2622 "label": null,
2623 "localized_name": "model",
2624 "locked": null,
2625 "name": "model",
2626 "nameLocked": null,
2627 "removable": null,
2628 "shape": null,
2629 "type": "MODEL",
2630 "pos": null,
2631 "link": 27
2632 },
2633 {
2634 "color_off": null,
2635 "color_on": null,
2636 "dir": null,
2637 "label": null,
2638 "localized_name": "device",
2639 "locked": null,
2640 "name": "device",
2641 "nameLocked": null,
2642 "removable": null,
2643 "shape": null,
2644 "type": "COMBO",
2645 "widget": {
2646 "name": "device"
2647 },
2648 "link": null
2649 },
2650 {
2651 "color_off": null,
2652 "color_on": null,
2653 "dir": null,
2654 "label": null,
2655 "localized_name": "dtype",
2656 "locked": null,
2657 "name": "dtype",
2658 "nameLocked": null,
2659 "removable": null,
2660 "shape": null,
2661 "type": "COMBO",
2662 "widget": {
2663 "name": "dtype"
2664 },
2665 "link": null
2666 }
2667 ],
2668 "outputs": [
2669 {
2670 "color_off": null,
2671 "color_on": null,
2672 "dir": null,
2673 "label": null,
2674 "localized_name": "MODEL",
2675 "locked": null,
2676 "name": "MODEL",
2677 "nameLocked": null,
2678 "removable": null,
2679 "shape": null,
2680 "type": "MODEL",
2681 "pos": null,
2682 "slot_index": null,
2683 "links": [
2684 28
2685 ]
2686 }
2687 ],
2688 "properties": {
2689 "Node name for S&R": "QwenImage21Cache"
2690 },
2691 "widgets_values": [
2692 "auto",
2693 "default"
2694 ],
2695 "widgets_values_named": {
2696 "device": "auto",
2697 "dtype": "default"
2698 }
2699 },
2700 {
2701 "id": 29,
2702 "type": "PrimitiveBoolean",
2703 "pos": [
2704 1340,
2705 310
2706 ],
2707 "size": [
2708 320,
2709 58
2710 ],
2711 "flags": {},
2712 "order": 28,
2713 "mode": 0,
2714 "showAdvanced": null,
2715 "inputs": [
2716 {
2717 "color_off": null,
2718 "color_on": null,
2719 "dir": null,
2720 "label": null,
2721 "localized_name": "value",
2722 "locked": null,
2723 "name": "value",
2724 "nameLocked": null,
2725 "removable": null,
2726 "shape": null,
2727 "type": "BOOLEAN",
2728 "widget": {
2729 "name": "value"
2730 },
2731 "link": null
2732 }
2733 ],
2734 "outputs": [
2735 {
2736 "color_off": null,
2737 "color_on": null,
2738 "dir": null,
2739 "label": null,
2740 "localized_name": "BOOLEAN",
2741 "locked": null,
2742 "name": "BOOLEAN",
2743 "nameLocked": null,
2744 "removable": null,
2745 "shape": null,
2746 "type": "BOOLEAN",
2747 "pos": null,
2748 "slot_index": null,
2749 "links": [
2750 36
2751 ]
2752 }
2753 ],
2754 "title": "Custom output size (off: size of image 1)",
2755 "properties": {
2756 "Node name for S&R": "PrimitiveBoolean"
2757 },
2758 "widgets_values": [
2759 false
2760 ],
2761 "widgets_values_named": {
2762 "value": false
2763 }
2764 },
2765 {
2766 "id": 30,
2767 "type": "ComfySwitchNode",
2768 "pos": [
2769 1340,
2770 894
2771 ],
2772 "size": [
2773 320,
2774 78
2775 ],
2776 "flags": {},
2777 "order": 29,
2778 "mode": 0,
2779 "showAdvanced": null,
2780 "inputs": [
2781 {
2782 "color_off": null,
2783 "color_on": null,
2784 "dir": null,
2785 "label": null,
2786 "localized_name": "on_false",
2787 "locked": null,
2788 "name": "on_false",
2789 "nameLocked": null,
2790 "removable": null,
2791 "shape": 7,
2792 "type": "LATENT",
2793 "pos": null,
2794 "link": 34
2795 },
2796 {
2797 "color_off": null,
2798 "color_on": null,
2799 "dir": null,
2800 "label": null,
2801 "localized_name": "on_true",
2802 "locked": null,
2803 "name": "on_true",
2804 "nameLocked": null,
2805 "removable": null,
2806 "shape": 7,
2807 "type": "LATENT",
2808 "pos": null,
2809 "link": 35
2810 },
2811 {
2812 "color_off": null,
2813 "color_on": null,
2814 "dir": null,
2815 "label": null,
2816 "localized_name": "switch",
2817 "locked": null,
2818 "name": "switch",
2819 "nameLocked": null,
2820 "removable": null,
2821 "shape": null,
2822 "type": "BOOLEAN",
2823 "widget": {
2824 "name": "switch"
2825 },
2826 "link": 36
2827 }
2828 ],
2829 "outputs": [
2830 {
2831 "color_off": null,
2832 "color_on": null,
2833 "dir": null,
2834 "label": null,
2835 "localized_name": "output",
2836 "locked": null,
2837 "name": "output",
2838 "nameLocked": null,
2839 "removable": null,
2840 "shape": null,
2841 "type": "LATENT",
2842 "pos": null,
2843 "slot_index": null,
2844 "links": [
2845 37,
2846 38
2847 ]
2848 }
2849 ],
2850 "title": "Output latent",
2851 "properties": {
2852 "Node name for S&R": "ComfySwitchNode"
2853 },
2854 "widgets_values": [
2855 false
2856 ],
2857 "widgets_values_named": {
2858 "switch": false
2859 }
2860 }
2861 ],
2862 "links": [
2863 [
2864 4,
2865 4,
2866 0,
2867 23,
2868 1,
2869 "VAE"
2870 ],
2871 [
2872 5,
2873 6,
2874 0,
2875 7,
2876 0,
2877 "INT"
2878 ],
2879 [
2880 6,
2881 6,
2882 1,
2883 7,
2884 1,
2885 "INT"
2886 ],
2887 [
2888 7,
2889 5,
2890 0,
2891 10,
2892 0,
2893 "STRING"
2894 ],
2895 [
2896 10,
2897 11,
2898 0,
2899 12,
2900 0,
2901 "STRING"
2902 ],
2903 [
2904 11,
2905 12,
2906 0,
2907 13,
2908 0,
2909 "STRING"
2910 ],
2911 [
2912 12,
2913 12,
2914 0,
2915 14,
2916 0,
2917 "STRING"
2918 ],
2919 [
2920 13,
2921 5,
2922 0,
2923 14,
2924 1,
2925 "STRING"
2926 ],
2927 [
2928 14,
2929 13,
2930 0,
2931 14,
2932 2,
2933 "BOOLEAN"
2934 ],
2935 [
2936 15,
2937 5,
2938 0,
2939 15,
2940 0,
2941 "STRING"
2942 ],
2943 [
2944 16,
2945 14,
2946 0,
2947 15,
2948 1,
2949 "STRING"
2950 ],
2951 [
2952 17,
2953 8,
2954 0,
2955 15,
2956 2,
2957 "BOOLEAN"
2958 ],
2959 [
2960 18,
2961 15,
2962 0,
2963 16,
2964 0,
2965 "STRING"
2966 ],
2967 [
2968 20,
2969 17,
2970 0,
2971 18,
2972 1,
2973 "CONDITIONING"
2974 ],
2975 [
2976 21,
2977 19,
2978 0,
2979 22,
2980 0,
2981 "NOISE"
2982 ],
2983 [
2984 22,
2985 18,
2986 0,
2987 22,
2988 1,
2989 "GUIDER"
2990 ],
2991 [
2992 23,
2993 20,
2994 0,
2995 22,
2996 2,
2997 "SAMPLER"
2998 ],
2999 [
3000 24,
3001 21,
3002 0,
3003 22,
3004 3,
3005 "SIGMAS"
3006 ],
3007 [
3008 25,
3009 22,
3010 0,
3011 23,
3012 0,
3013 "LATENT"
3014 ],
3015 [
3016 26,
3017 23,
3018 0,
3019 24,
3020 0,
3021 "IMAGE"
3022 ],
3023 [
3024 27,
3025 2,
3026 0,
3027 28,
3028 0,
3029 "MODEL"
3030 ],
3031 [
3032 28,
3033 28,
3034 0,
3035 18,
3036 0,
3037 "MODEL"
3038 ],
3039 [
3040 1,
3041 3,
3042 0,
3043 17,
3044 0,
3045 "CLIP"
3046 ],
3047 [
3048 29,
3049 25,
3050 0,
3051 17,
3052 1,
3053 "IMAGE"
3054 ],
3055 [
3056 30,
3057 26,
3058 0,
3059 17,
3060 2,
3061 "IMAGE"
3062 ],
3063 [
3064 3,
3065 4,
3066 0,
3067 17,
3068 4,
3069 "VAE"
3070 ],
3071 [
3072 19,
3073 15,
3074 0,
3075 17,
3076 5,
3077 "STRING"
3078 ],
3079 [
3080 31,
3081 25,
3082 0,
3083 27,
3084 0,
3085 "IMAGE"
3086 ],
3087 [
3088 32,
3089 26,
3090 0,
3091 27,
3092 1,
3093 "IMAGE"
3094 ],
3095 [
3096 34,
3097 17,
3098 2,
3099 30,
3100 0,
3101 "LATENT"
3102 ],
3103 [
3104 35,
3105 7,
3106 0,
3107 30,
3108 1,
3109 "LATENT"
3110 ],
3111 [
3112 36,
3113 29,
3114 0,
3115 30,
3116 2,
3117 "BOOLEAN"
3118 ],
3119 [
3120 37,
3121 30,
3122 0,
3123 21,
3124 0,
3125 "LATENT"
3126 ],
3127 [
3128 38,
3129 30,
3130 0,
3131 22,
3132 4,
3133 "LATENT"
3134 ],
3135 [
3136 2,
3137 3,
3138 0,
3139 11,
3140 0,
3141 "CLIP"
3142 ],
3143 [
3144 33,
3145 27,
3146 0,
3147 11,
3148 1,
3149 "IMAGE"
3150 ],
3151 [
3152 8,
3153 9,
3154 0,
3155 11,
3156 4,
3157 "STRING"
3158 ],
3159 [
3160 9,
3161 10,
3162 0,
3163 11,
3164 5,
3165 "STRING"
3166 ]
3167 ],
3168 "floatingLinks": null,
3169 "groups": [
3170 {
3171 "id": 1,
3172 "title": "1. Models",
3173 "bounding": [
3174 520,
3175 -90,
3176 360,
3177 708
3178 ],
3179 "color": "#3f789e",
3180 "flags": {}
3181 },
3182 {
3183 "id": 2,
3184 "title": "2. Reference images",
3185 "bounding": [
3186 920,
3187 -90,
3188 360,
3189 852
3190 ],
3191 "color": "#8A8",
3192 "flags": {}
3193 },
3194 {
3195 "id": 3,
3196 "title": "3. Prompt & size",
3197 "bounding": [
3198 1320,
3199 -90,
3200 480,
3201 1082
3202 ],
3203 "color": "#b58b2a",
3204 "flags": {}
3205 },
3206 {
3207 "id": 4,
3208 "title": "4. Prompt enhancer (optional)",
3209 "bounding": [
3210 1840,
3211 -90,
3212 1400,
3213 880
3214 ],
3215 "color": "#a1309b",
3216 "flags": {}
3217 },
3218 {
3219 "id": 5,
3220 "title": "5. Sample: 6 steps, CFG off",
3221 "bounding": [
3222 3280,
3223 -90,
3224 960,
3225 1002
3226 ],
3227 "color": "#444",
3228 "flags": {}
3229 }
3230 ],
3231 "definitions": null,
3232 "config": {},
3233 "extra": {
3234 "ds": {
3235 "scale": 0.5,
3236 "offset": [
3237 60,
3238 160
3239 ]
3240 },
3241 "reroutes": null
3242 },
3243 "version": 0.4
3244 }