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