工作流 /
图像 /
Ideogram v4 Int8: 文生图

Ideogram v4 Int8: 文生图
Ideogram v4 Int8: Text to Image
使用 Ideogram v4 根据文本提示生成图像,开源文生图系统,文字渲染与布局控制出色。无需文件输入,输出 1 张图像,适合营销视觉、精确排版的设计稿,以及构图可控的高分辨率作品。
图像
8 个节点 15 次使用 ComfyUI ≥ 0.24.0 ComfyUI 123 KB
需要的权重
这个工作流引用了 4 个权重文件,其中 4 个能在本站模型库里找到。
flux2-vae.safetensors
在模型库查看
ideogram4_int8_convrot.safetensors
在模型库查看
ideogram4_unconditional_int8_convrot.safetensors
在模型库查看
qwen3vl_8b_fp8_scaled.safetensors
在模型库查看
节点构成
MarkdownNote
× 3
ResolutionSelector
× 1
83e6e004-48ea-408e-9024-eb49c3d7dc14
× 1
PreviewAny
× 1
f5f04613-ee09-4cd9-9ada-a880360891d4
× 1
SaveImage
× 1
官方标注的模型
Ideogram
工作流 JSON
和上面「下载工作流 JSON」是同一份文件。
1{
2 "id": "fdcfc2b2-168f-4f3d-a1d0-6986b802fce5",
3 "revision": 0,
4 "last_node_id": 186,
5 "last_link_id": 260,
6 "nodes": [
7 {
8 "id": 37,
9 "type": "ResolutionSelector",
10 "pos": [
11 5900,
12 920
13 ],
14 "size": [
15 380,
16 190
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "name": "width",
25 "type": "INT",
26 "links": [
27 161
28 ]
29 },
30 {
31 "name": "height",
32 "type": "INT",
33 "links": [
34 162
35 ]
36 }
37 ],
38 "properties": {
39 "Node name for S&R": "ResolutionSelector",
40 "cnr_id": "comfy-core",
41 "ver": "0.23.0",
42 "enableTabs": false,
43 "hasSecondTab": false,
44 "secondTabOffset": 80,
45 "secondTabText": "Send Back",
46 "secondTabWidth": 65,
47 "tabWidth": 65,
48 "tabXOffset": 10
49 },
50 "widgets_values": [
51 "1:1 (Square)",
52 1,
53 8
54 ]
55 },
56 {
57 "id": 98,
58 "type": "83e6e004-48ea-408e-9024-eb49c3d7dc14",
59 "pos": [
60 6330,
61 550
62 ],
63 "size": [
64 440,
65 700
66 ],
67 "flags": [],
68 "order": 5,
69 "mode": 0,
70 "inputs": [
71 {
72 "label": "prompt",
73 "name": "text",
74 "type": "STRING",
75 "widget": {
76 "name": "text"
77 },
78 "link": null
79 },
80 {
81 "label": "width",
82 "name": "value",
83 "type": "INT",
84 "widget": {
85 "name": "value"
86 },
87 "link": 161
88 },
89 {
90 "label": "height",
91 "name": "value_1",
92 "type": "INT",
93 "widget": {
94 "name": "value_1"
95 },
96 "link": 162
97 },
98 {
99 "label": "unconditional_unet",
100 "name": "unet_name_1",
101 "type": "COMBO",
102 "widget": {
103 "name": "unet_name_1"
104 },
105 "link": null
106 },
107 {
108 "label": "mode",
109 "name": "choice",
110 "type": "COMBO",
111 "widget": {
112 "name": "choice"
113 },
114 "link": null
115 }
116 ],
117 "outputs": [
118 {
119 "name": "IMAGE",
120 "type": "IMAGE",
121 "links": [
122 224
123 ]
124 }
125 ],
126 "properties": {
127 "proxyWidgets": [
128 [
129 "24",
130 "text"
131 ],
132 [
133 "27",
134 "value"
135 ],
136 [
137 "28",
138 "value"
139 ],
140 [
141 "18",
142 "noise_seed"
143 ],
144 [
145 "23",
146 "unet_name"
147 ],
148 [
149 "14",
150 "clip_name"
151 ],
152 [
153 "9",
154 "vae_name"
155 ],
156 [
157 "154",
158 "unet_name"
159 ],
160 [
161 "156",
162 "choice"
163 ]
164 ],
165 "cnr_id": "comfy-core",
166 "ver": "0.23.0",
167 "enableTabs": false,
168 "hasSecondTab": false,
169 "secondTabOffset": 80,
170 "secondTabText": "Send Back",
171 "secondTabWidth": 65,
172 "tabWidth": 65,
173 "tabXOffset": 10
174 },
175 "widgets_values": []
176 },
177 {
178 "id": 99,
179 "type": "MarkdownNote",
180 "pos": [
181 4570,
182 530
183 ],
184 "size": [
185 530,
186 990
187 ],
188 "flags": [],
189 "order": 1,
190 "mode": 0,
191 "inputs": [],
192 "outputs": [],
193 "title": "Note: Model link",
194 "properties": [],
195 "widgets_values": [
196 "Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Links\n\n- [Hugging Face:Comfy-Org/flux2-dev](https://huggingface.co/Comfy-Org/flux2-dev)\n- [ModelScope:Comfy-Org/flux2-dev](https://modelscope.cn/models/Comfy-Org/flux2-dev)\n- [Hugging Face:Comfy-Org/Ideogram-4](https://huggingface.co/Comfy-Org/Ideogram-4)\n- [ModelScope:Comfy-Org/Ideogram-4](https://modelscope.cn/models/Comfy-Org/Ideogram-4)\n- [Hugging Face:Comfy-Org/Qwen3-VL](https://huggingface.co/Comfy-Org/Qwen3-VL)\n- [ModelScope:Comfy-Org/Qwen3-VL](https://modelscope.cn/models/Comfy-Org/Qwen3-VL)\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors) (320.6 MB)\n\n**diffusion_models**\n\n- [ideogram4_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_int8_convrot.safetensors) (8.93 GB)\n- [ideogram4_unconditional_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_unconditional_int8_convrot.safetensors) (8.93 GB)\n\n**text_encoders**\n\n- [qwen3vl_8b_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_fp8_scaled.safetensors) (9.86 GB)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ └── flux2-vae.safetensors\n│ ├── 📂 diffusion_models/\n│ │ ├── ideogram4_int8_convrot.safetensors\n│ │ └── ideogram4_unconditional_int8_convrot.safetensors\n│ └── 📂 text_encoders/\n│ └── qwen3vl_8b_fp8_scaled.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
197 ],
198 "color": "#222",
199 "bgcolor": "#000"
200 },
201 {
202 "id": 100,
203 "type": "MarkdownNote",
204 "pos": [
205 5150,
206 530
207 ],
208 "size": [
209 640,
210 990
211 ],
212 "flags": [],
213 "order": 2,
214 "mode": 0,
215 "inputs": [],
216 "outputs": [],
217 "title": "Note: Ideogram 4.0",
218 "properties": [],
219 "widgets_values": [
220 "### About the model\n\nThe model is trained on **structured JSON captions** (scene summary, style block, background, and optional per-object descriptions with bounding boxes and hex color palettes). Official inference validates prompts against that schema. Guidance uses **flow-matching** with **asymmetric classifier-free guidance** (the unconditional pass drops text tokens)—not a separate negative prompt string.\n\n**NOTE:** If you see \"Image blocked by safety filter\", this is Ideogram 4.0's built-in safety filter. Non-JSON (plain-text) prompts have a higher false-positive rate. Using structured JSON prompts reduces the chance of your prompt being blocked. See the [official prompting guide](https://github.com/ideogram-oss/ideogram4/blob/main/docs/prompting.md#safety-filter) for details.\n\n---\n\n### How to build prompts here\n\n**(a) Raw input**: Paste or type directly into the subgraph. You may use plain natural language, but **structured JSON** (as in the subgraph default) gives the most predictable layout and style control.\n\n**(b) Model-assisted (LLM):** Use the **Ideogram4 Caption Prompt Template** output with any LLM tools to obtain the JSON format prompt\n\n[**Prompting Guide**](https://github.com/ideogram-oss/ideogram4#prompting-guide)"
221 ],
222 "color": "#222",
223 "bgcolor": "#000"
224 },
225 {
226 "id": 111,
227 "type": "PreviewAny",
228 "pos": [
229 8080,
230 620
231 ],
232 "size": [
233 560,
234 660
235 ],
236 "flags": {
237 "collapsed": false
238 },
239 "order": 6,
240 "mode": 0,
241 "inputs": [
242 {
243 "name": "source",
244 "type": "*",
245 "link": 252
246 }
247 ],
248 "outputs": [
249 {
250 "name": "STRING",
251 "type": "STRING",
252 "links": []
253 }
254 ],
255 "title": "Preview as Text (Copy and use it in any LLM)",
256 "properties": {
257 "Node name for S&R": "PreviewAny",
258 "cnr_id": "comfy-core",
259 "ver": "0.21.0",
260 "enableTabs": false,
261 "hasSecondTab": false,
262 "secondTabOffset": 80,
263 "secondTabText": "Send Back",
264 "secondTabWidth": 65,
265 "tabWidth": 65,
266 "tabXOffset": 10
267 },
268 "widgets_values": [
269 null,
270 null,
271 null
272 ]
273 },
274 {
275 "id": 134,
276 "type": "f5f04613-ee09-4cd9-9ada-a880360891d4",
277 "pos": [
278 7510,
279 620
280 ],
281 "size": [
282 480,
283 400
284 ],
285 "flags": [],
286 "order": 3,
287 "mode": 0,
288 "inputs": [
289 {
290 "label": "user_prompt",
291 "name": "value",
292 "type": "STRING",
293 "widget": {
294 "name": "value"
295 },
296 "link": null
297 },
298 {
299 "label": "width",
300 "name": "source",
301 "type": "*",
302 "widget": {
303 "name": "source"
304 },
305 "link": null
306 },
307 {
308 "label": "height",
309 "name": "source_1",
310 "type": "*",
311 "widget": {
312 "name": "source_1"
313 },
314 "link": null
315 },
316 {
317 "label": "ratio",
318 "name": "value_1",
319 "type": "STRING",
320 "widget": {
321 "name": "value_1"
322 },
323 "link": null
324 }
325 ],
326 "outputs": [
327 {
328 "name": "STRING",
329 "type": "STRING",
330 "links": [
331 252
332 ]
333 }
334 ],
335 "properties": {
336 "proxyWidgets": [
337 [
338 "115",
339 "value"
340 ],
341 [
342 "183",
343 "value"
344 ],
345 [
346 "184",
347 "value"
348 ],
349 [
350 "185",
351 "value"
352 ]
353 ],
354 "cnr_id": "comfy-core",
355 "ver": "0.23.0",
356 "enableTabs": false,
357 "hasSecondTab": false,
358 "secondTabOffset": 80,
359 "secondTabText": "Send Back",
360 "secondTabWidth": 65,
361 "tabWidth": 65,
362 "tabXOffset": 10
363 },
364 "widgets_values": []
365 },
366 {
367 "id": 158,
368 "type": "SaveImage",
369 "pos": [
370 6810,
371 550
372 ],
373 "size": [
374 520,
375 690
376 ],
377 "flags": [],
378 "order": 7,
379 "mode": 0,
380 "inputs": [
381 {
382 "name": "images",
383 "type": "IMAGE",
384 "link": 224
385 }
386 ],
387 "outputs": [
388 {
389 "name": "images",
390 "type": "IMAGE",
391 "links": null
392 }
393 ],
394 "properties": {
395 "Node name for S&R": "SaveImage",
396 "cnr_id": "comfy-core",
397 "ver": "0.24.0",
398 "enableTabs": false,
399 "hasSecondTab": false,
400 "secondTabOffset": 80,
401 "secondTabText": "Send Back",
402 "secondTabWidth": 65,
403 "tabWidth": 65,
404 "tabXOffset": 10
405 },
406 "widgets_values": [
407 "Ideogram_4.0"
408 ]
409 },
410 {
411 "id": 176,
412 "type": "MarkdownNote",
413 "pos": [
414 7500,
415 1080
416 ],
417 "size": [
418 520,
419 360
420 ],
421 "flags": [],
422 "order": 4,
423 "mode": 0,
424 "inputs": [],
425 "outputs": [],
426 "properties": [],
427 "widgets_values": [
428 "\nThis is a prompt construction template. You can copy its input into any LLM to generate matching prompts.\n\n[Prompting Guide](https://github.com/ideogram-oss/ideogram4#prompting-guide)\n\n\n---\nYou may try installing or updating [KJNodes](https://github.com/kijai/ComfyUI-KJNodes) and use the **Ideogram 4 Prompt Builder KJ** node to achieve visual control over prompts.\n\n"
429 ],
430 "color": "#222",
431 "bgcolor": "#000"
432 }
433 ],
434 "links": [
435 [
436 161,
437 37,
438 0,
439 98,
440 1,
441 "INT"
442 ],
443 [
444 162,
445 37,
446 1,
447 98,
448 2,
449 "INT"
450 ],
451 [
452 224,
453 98,
454 0,
455 158,
456 0,
457 "IMAGE"
458 ],
459 [
460 252,
461 134,
462 0,
463 111,
464 0,
465 "STRING"
466 ]
467 ],
468 "groups": [
469 {
470 "id": 7,
471 "title": "Ideogram4 Caption Prompt Template",
472 "bounding": [
473 7450,
474 480,
475 1320,
476 1040
477 ],
478 "color": "#444",
479 "flags": []
480 }
481 ],
482 "definitions": {
483 "subgraphs": [
484 {
485 "id": "83e6e004-48ea-408e-9024-eb49c3d7dc14",
486 "version": 1,
487 "state": {
488 "lastGroupId": 9,
489 "lastNodeId": 186,
490 "lastLinkId": 260,
491 "lastRerouteId": 0
492 },
493 "revision": 0,
494 "config": [],
495 "name": "Text to Image (Ideogram v4)",
496 "inputNode": {
497 "id": -10,
498 "bounding": [
499 3490,
500 920,
501 154.921875,
502 228
503 ]
504 },
505 "outputNode": {
506 "id": -20,
507 "bounding": [
508 6850,
509 936,
510 128,
511 68
512 ]
513 },
514 "inputs": [
515 {
516 "id": "4bc742d1-7b4b-452c-90d9-0d76ebcdae76",
517 "name": "text",
518 "type": "STRING",
519 "linkIds": [
520 152
521 ],
522 "label": "prompt",
523 "pos": [
524 3620.921875,
525 944
526 ]
527 },
528 {
529 "id": "8d4038eb-73c7-45e9-bba1-f068f55e8d32",
530 "name": "value",
531 "type": "INT",
532 "linkIds": [
533 153
534 ],
535 "label": "width",
536 "pos": [
537 3620.921875,
538 964
539 ]
540 },
541 {
542 "id": "281550e6-6acf-4cbe-aec1-9eb803b4dec1",
543 "name": "value_1",
544 "type": "INT",
545 "linkIds": [
546 154
547 ],
548 "label": "height",
549 "pos": [
550 3620.921875,
551 984
552 ]
553 },
554 {
555 "id": "fae56884-2f1a-470b-a25f-40e7a87ef69d",
556 "name": "noise_seed",
557 "type": "INT",
558 "linkIds": [
559 155
560 ],
561 "pos": [
562 3620.921875,
563 1004
564 ]
565 },
566 {
567 "id": "3497309c-a7d7-4e28-9330-142c15881632",
568 "name": "unet_name",
569 "type": "COMBO",
570 "linkIds": [
571 156
572 ],
573 "pos": [
574 3620.921875,
575 1024
576 ]
577 },
578 {
579 "id": "e87126db-7147-465e-b129-370ed2c6cc22",
580 "name": "clip_name",
581 "type": "COMBO",
582 "linkIds": [
583 157
584 ],
585 "pos": [
586 3620.921875,
587 1044
588 ]
589 },
590 {
591 "id": "a1e6c080-b11b-4d5c-a3a8-fcf4df654cf7",
592 "name": "vae_name",
593 "type": "COMBO",
594 "linkIds": [
595 158
596 ],
597 "pos": [
598 3620.921875,
599 1064
600 ]
601 },
602 {
603 "id": "b0d16516-95de-44d9-bea8-3cd2e7c78e9a",
604 "name": "unet_name_1",
605 "type": "COMBO",
606 "linkIds": [
607 216
608 ],
609 "label": "unconditional_unet",
610 "pos": [
611 3620.921875,
612 1084
613 ]
614 },
615 {
616 "id": "249fd825-e6b3-489d-a341-6d8050500f5e",
617 "name": "choice",
618 "type": "COMBO",
619 "linkIds": [
620 219
621 ],
622 "label": "mode",
623 "pos": [
624 3620.921875,
625 1104
626 ]
627 }
628 ],
629 "outputs": [
630 {
631 "id": "b81e4f60-e543-4f02-875b-b0f1bdc274f2",
632 "name": "IMAGE",
633 "type": "IMAGE",
634 "linkIds": [
635 25
636 ],
637 "localized_name": "IMAGE",
638 "pos": [
639 6874,
640 960
641 ]
642 }
643 ],
644 "widgets": [],
645 "nodes": [
646 {
647 "id": 9,
648 "type": "VAELoader",
649 "pos": [
650 4730,
651 1220
652 ],
653 "size": [
654 470,
655 110
656 ],
657 "flags": [],
658 "order": 1,
659 "mode": 0,
660 "inputs": [
661 {
662 "localized_name": "vae_name",
663 "name": "vae_name",
664 "type": "COMBO",
665 "widget": {
666 "name": "vae_name"
667 },
668 "link": 158
669 }
670 ],
671 "outputs": [
672 {
673 "localized_name": "VAE",
674 "name": "VAE",
675 "type": "VAE",
676 "links": [
677 17
678 ]
679 }
680 ],
681 "properties": {
682 "Node name for S&R": "VAELoader",
683 "cnr_id": "comfy-core",
684 "ver": "0.8.2",
685 "models": [
686 {
687 "name": "flux2-vae.safetensors",
688 "url": "https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors",
689 "directory": "vae"
690 }
691 ],
692 "enableTabs": false,
693 "hasSecondTab": false,
694 "secondTabOffset": 80,
695 "secondTabText": "Send Back",
696 "secondTabWidth": 65,
697 "tabWidth": 65,
698 "tabXOffset": 10
699 },
700 "widgets_values": [
701 "flux2-vae.safetensors"
702 ]
703 },
704 {
705 "id": 10,
706 "type": "ConditioningZeroOut",
707 "pos": [
708 5450,
709 960
710 ],
711 "size": [
712 250,
713 80
714 ],
715 "flags": {
716 "collapsed": false
717 },
718 "order": 2,
719 "mode": 0,
720 "inputs": [
721 {
722 "localized_name": "conditioning",
723 "name": "conditioning",
724 "type": "CONDITIONING",
725 "link": 8
726 }
727 ],
728 "outputs": [
729 {
730 "localized_name": "CONDITIONING",
731 "name": "CONDITIONING",
732 "type": "CONDITIONING",
733 "links": [
734 214
735 ]
736 }
737 ],
738 "properties": {
739 "Node name for S&R": "ConditioningZeroOut",
740 "cnr_id": "comfy-core",
741 "ver": "0.9.1",
742 "enableTabs": false,
743 "hasSecondTab": false,
744 "secondTabOffset": 80,
745 "secondTabText": "Send Back",
746 "secondTabWidth": 65,
747 "tabWidth": 65,
748 "tabXOffset": 10
749 },
750 "widgets_values": []
751 },
752 {
753 "id": 11,
754 "type": "EmptyFlux2LatentImage",
755 "pos": [
756 5330,
757 1180
758 ],
759 "size": [
760 270,
761 170
762 ],
763 "flags": [],
764 "order": 3,
765 "mode": 0,
766 "inputs": [
767 {
768 "localized_name": "width",
769 "name": "width",
770 "type": "INT",
771 "widget": {
772 "name": "width"
773 },
774 "link": 33
775 },
776 {
777 "localized_name": "height",
778 "name": "height",
779 "type": "INT",
780 "widget": {
781 "name": "height"
782 },
783 "link": 36
784 }
785 ],
786 "outputs": [
787 {
788 "localized_name": "LATENT",
789 "name": "LATENT",
790 "type": "LATENT",
791 "links": [
792 15
793 ]
794 }
795 ],
796 "properties": {
797 "Node name for S&R": "EmptyFlux2LatentImage",
798 "cnr_id": "comfy-core",
799 "ver": "0.8.2",
800 "enableTabs": false,
801 "hasSecondTab": false,
802 "secondTabOffset": 80,
803 "secondTabText": "Send Back",
804 "secondTabWidth": 65,
805 "tabWidth": 65,
806 "tabXOffset": 10
807 },
808 "widgets_values": [
809 1024,
810 1024,
811 1
812 ]
813 },
814 {
815 "id": 12,
816 "type": "SamplerCustomAdvanced",
817 "pos": [
818 6160,
819 500
820 ],
821 "size": [
822 290,
823 170
824 ],
825 "flags": [],
826 "order": 4,
827 "mode": 0,
828 "inputs": [
829 {
830 "localized_name": "noise",
831 "name": "noise",
832 "type": "NOISE",
833 "link": 11
834 },
835 {
836 "localized_name": "guider",
837 "name": "guider",
838 "type": "GUIDER",
839 "link": 215
840 },
841 {
842 "localized_name": "sampler",
843 "name": "sampler",
844 "type": "SAMPLER",
845 "link": 13
846 },
847 {
848 "localized_name": "sigmas",
849 "name": "sigmas",
850 "type": "SIGMAS",
851 "link": 14
852 },
853 {
854 "localized_name": "latent_image",
855 "name": "latent_image",
856 "type": "LATENT",
857 "link": 15
858 }
859 ],
860 "outputs": [
861 {
862 "localized_name": "output",
863 "name": "output",
864 "type": "LATENT",
865 "links": [
866 16
867 ]
868 },
869 {
870 "localized_name": "denoised_output",
871 "name": "denoised_output",
872 "type": "LATENT",
873 "links": []
874 }
875 ],
876 "properties": {
877 "Node name for S&R": "SamplerCustomAdvanced",
878 "cnr_id": "comfy-core",
879 "ver": "0.8.2",
880 "enableTabs": false,
881 "hasSecondTab": false,
882 "secondTabOffset": 80,
883 "secondTabText": "Send Back",
884 "secondTabWidth": 65,
885 "tabWidth": 65,
886 "tabXOffset": 10
887 },
888 "widgets_values": []
889 },
890 {
891 "id": 13,
892 "type": "VAEDecode",
893 "pos": [
894 6560,
895 500
896 ],
897 "size": [
898 230,
899 100
900 ],
901 "flags": [],
902 "order": 5,
903 "mode": 0,
904 "inputs": [
905 {
906 "localized_name": "samples",
907 "name": "samples",
908 "type": "LATENT",
909 "link": 16
910 },
911 {
912 "localized_name": "vae",
913 "name": "vae",
914 "type": "VAE",
915 "link": 17
916 }
917 ],
918 "outputs": [
919 {
920 "localized_name": "IMAGE",
921 "name": "IMAGE",
922 "type": "IMAGE",
923 "slot_index": 0,
924 "links": [
925 25
926 ]
927 }
928 ],
929 "properties": {
930 "Node name for S&R": "VAEDecode",
931 "cnr_id": "comfy-core",
932 "ver": "0.8.2",
933 "enableTabs": false,
934 "hasSecondTab": false,
935 "secondTabOffset": 80,
936 "secondTabText": "Send Back",
937 "secondTabWidth": 65,
938 "tabWidth": 65,
939 "tabXOffset": 10
940 },
941 "widgets_values": []
942 },
943 {
944 "id": 16,
945 "type": "KSamplerSelect",
946 "pos": [
947 5790,
948 1100
949 ],
950 "size": [
951 270,
952 110
953 ],
954 "flags": [],
955 "order": 0,
956 "mode": 0,
957 "inputs": [],
958 "outputs": [
959 {
960 "localized_name": "SAMPLER",
961 "name": "SAMPLER",
962 "type": "SAMPLER",
963 "links": [
964 13
965 ]
966 }
967 ],
968 "properties": {
969 "Node name for S&R": "KSamplerSelect",
970 "cnr_id": "comfy-core",
971 "ver": "0.8.2",
972 "enableTabs": false,
973 "hasSecondTab": false,
974 "secondTabOffset": 80,
975 "secondTabText": "Send Back",
976 "secondTabWidth": 65,
977 "tabWidth": 65,
978 "tabXOffset": 10
979 },
980 "widgets_values": [
981 "euler"
982 ]
983 },
984 {
985 "id": 17,
986 "type": "Ideogram4Scheduler",
987 "pos": [
988 5790,
989 1260
990 ],
991 "size": [
992 270,
993 240
994 ],
995 "flags": [],
996 "order": 7,
997 "mode": 0,
998 "inputs": [
999 {
1000 "localized_name": "steps",
1001 "name": "steps",
1002 "type": "INT",
1003 "widget": {
1004 "name": "steps"
1005 },
1006 "link": 207
1007 },
1008 {
1009 "localized_name": "width",
1010 "name": "width",
1011 "type": "INT",
1012 "widget": {
1013 "name": "width"
1014 },
1015 "link": 34
1016 },
1017 {
1018 "localized_name": "height",
1019 "name": "height",
1020 "type": "INT",
1021 "widget": {
1022 "name": "height"
1023 },
1024 "link": 37
1025 },
1026 {
1027 "localized_name": "mu",
1028 "name": "mu",
1029 "type": "FLOAT",
1030 "widget": {
1031 "name": "mu"
1032 },
1033 "link": 208
1034 },
1035 {
1036 "localized_name": "std",
1037 "name": "std",
1038 "type": "FLOAT",
1039 "widget": {
1040 "name": "std"
1041 },
1042 "link": 209
1043 }
1044 ],
1045 "outputs": [
1046 {
1047 "localized_name": "SIGMAS",
1048 "name": "SIGMAS",
1049 "type": "SIGMAS",
1050 "links": [
1051 14
1052 ]
1053 }
1054 ],
1055 "properties": {
1056 "Node name for S&R": "Ideogram4Scheduler",
1057 "cnr_id": "comfy-core",
1058 "ver": "0.23.0",
1059 "enableTabs": false,
1060 "hasSecondTab": false,
1061 "secondTabOffset": 80,
1062 "secondTabText": "Send Back",
1063 "secondTabWidth": 65,
1064 "tabWidth": 65,
1065 "tabXOffset": 10
1066 },
1067 "widgets_values": [
1068 20,
1069 1024,
1070 1024,
1071 0.5,
1072 1.75
1073 ]
1074 },
1075 {
1076 "id": 18,
1077 "type": "RandomNoise",
1078 "pos": [
1079 5780,
1080 490
1081 ],
1082 "size": [
1083 270,
1084 110
1085 ],
1086 "flags": [],
1087 "order": 8,
1088 "mode": 0,
1089 "inputs": [
1090 {
1091 "localized_name": "noise_seed",
1092 "name": "noise_seed",
1093 "type": "INT",
1094 "widget": {
1095 "name": "noise_seed"
1096 },
1097 "link": 155
1098 }
1099 ],
1100 "outputs": [
1101 {
1102 "localized_name": "NOISE",
1103 "name": "NOISE",
1104 "type": "NOISE",
1105 "links": [
1106 11
1107 ]
1108 }
1109 ],
1110 "properties": {
1111 "Node name for S&R": "RandomNoise",
1112 "cnr_id": "comfy-core",
1113 "ver": "0.8.2",
1114 "enableTabs": false,
1115 "hasSecondTab": false,
1116 "secondTabOffset": 80,
1117 "secondTabText": "Send Back",
1118 "secondTabWidth": 65,
1119 "tabWidth": 65,
1120 "tabXOffset": 10
1121 },
1122 "widgets_values": [
1123 71584314815009,
1124 "randomize"
1125 ]
1126 },
1127 {
1128 "id": 23,
1129 "type": "UNETLoader",
1130 "pos": [
1131 4720,
1132 520
1133 ],
1134 "size": [
1135 470,
1136 170
1137 ],
1138 "flags": [],
1139 "order": 9,
1140 "mode": 0,
1141 "showAdvanced": true,
1142 "inputs": [
1143 {
1144 "localized_name": "unet_name",
1145 "name": "unet_name",
1146 "type": "COMBO",
1147 "widget": {
1148 "name": "unet_name"
1149 },
1150 "link": 156
1151 }
1152 ],
1153 "outputs": [
1154 {
1155 "localized_name": "MODEL",
1156 "name": "MODEL",
1157 "type": "MODEL",
1158 "links": [
1159 222
1160 ]
1161 }
1162 ],
1163 "properties": {
1164 "Node name for S&R": "UNETLoader",
1165 "cnr_id": "comfy-core",
1166 "ver": "0.8.2",
1167 "models": [
1168 {
1169 "name": "ideogram4_int8_convrot.safetensors",
1170 "url": "https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_int8_convrot.safetensors",
1171 "directory": "diffusion_models"
1172 }
1173 ],
1174 "enableTabs": false,
1175 "hasSecondTab": false,
1176 "secondTabOffset": 80,
1177 "secondTabText": "Send Back",
1178 "secondTabWidth": 65,
1179 "tabWidth": 65,
1180 "tabXOffset": 10
1181 },
1182 "widgets_values": [
1183 "ideogram4_int8_convrot.safetensors",
1184 "default"
1185 ]
1186 },
1187 {
1188 "id": 24,
1189 "type": "CLIPTextEncode",
1190 "pos": [
1191 5270,
1192 500
1193 ],
1194 "size": [
1195 430,
1196 420
1197 ],
1198 "flags": [],
1199 "order": 10,
1200 "mode": 0,
1201 "inputs": [
1202 {
1203 "localized_name": "clip",
1204 "name": "clip",
1205 "type": "CLIP",
1206 "link": 24
1207 },
1208 {
1209 "localized_name": "text",
1210 "name": "text",
1211 "type": "STRING",
1212 "widget": {
1213 "name": "text"
1214 },
1215 "link": 152
1216 }
1217 ],
1218 "outputs": [
1219 {
1220 "localized_name": "CONDITIONING",
1221 "name": "CONDITIONING",
1222 "type": "CONDITIONING",
1223 "slot_index": 0,
1224 "links": [
1225 8,
1226 213
1227 ]
1228 }
1229 ],
1230 "title": "CLIP Text Encode (Positive Prompt)",
1231 "properties": {
1232 "Node name for S&R": "CLIPTextEncode",
1233 "cnr_id": "comfy-core",
1234 "ver": "0.8.2",
1235 "enableTabs": false,
1236 "hasSecondTab": false,
1237 "secondTabOffset": 80,
1238 "secondTabText": "Send Back",
1239 "secondTabWidth": 65,
1240 "tabWidth": 65,
1241 "tabXOffset": 10
1242 },
1243 "widgets_values": [
1244 "{\"aspect_ratio\":\"1:1\",\"high_level_description\":\"A high-contrast editorial magazine cover in a 1:1 aspect ratio, featuring a close-up of an armored medieval knight and his horse rendered in a desaturated, heavily-grained stone-sculpture style against a textured charcoal backdrop with elegant white layout lines.\",\"compositional_deconstruction\":{\"background\":\"A dark matte charcoal backdrop with a prominent, dense film grain and fine tactile stone texture, structured by ultra-thin, crisp white horizontal and vertical layout rules that create a minimalist editorial frame.\",\"elements\":[{\"type\":\"obj\",\"bbox\":[100,100,830,900],\"desc\":\"Close-up of a medieval knight from the chest up alongside his barded warhorse, presented as a classical stone sculpture. The figure features completely desaturated, monochromatic matte grey tones with realistic dust textures and deep, high-contrast shadows defining the plates of armor and the grip on a large vertical broadsword.\"},{\"type\":\"text\",\"bbox\":[850,50,950,950],\"text\":\"COMFYUI\",\"desc\":\"Large, elegant high-end serif display typography with thin sweeping ligatures spanning the lower portion of the frame in a solid clean white, mirroring the typography style of image_0f5a20.png.\"},{\"type\":\"text\",\"bbox\":[40,50,90,350],\"text\":\"LATENT_GEN // K_SAMPLER\",\"desc\":\"Small white technical sans-serif text in a clean monospace font located in the top-left corner within the border grid.\"},{\"type\":\"text\",\"bbox\":[40,680,90,950],\"text\":\"QUEUE_PROMPT_STATE: 1\",\"desc\":\"Small white data readout text in a monospace font positioned in the top-right corner within the layout line.\"},{\"type\":\"text\",\"bbox\":[400,30,600,150],\"text\":\"NODE MODULES\\n> load_checkpoint\\n> positive_prompt\\n> negative_prompt\",\"desc\":\"A left-aligned vertical block of small white technical data text on the middle-left margin.\"},{\"type\":\"text\",\"bbox\":[400,850,600,970],\"text\":\"SAMPLER FIELDS\\n> steps: 30\\n> denoise: 0.75\\n> seed: 407231\",\"desc\":\"A right-aligned vertical block of small white parameter configuration text on the middle-right margin.\"},{\"type\":\"obj\",\"bbox\":[960,460,985,540],\"desc\":\"A small, clean white horizontal graphic barcode element centered precisely along the absolute bottom edge.\"}]}}"
1245 ]
1246 },
1247 {
1248 "id": 14,
1249 "type": "CLIPLoader",
1250 "pos": [
1251 4730,
1252 990
1253 ],
1254 "size": [
1255 470,
1256 170
1257 ],
1258 "flags": [],
1259 "order": 6,
1260 "mode": 0,
1261 "inputs": [
1262 {
1263 "localized_name": "clip_name",
1264 "name": "clip_name",
1265 "type": "COMBO",
1266 "widget": {
1267 "name": "clip_name"
1268 },
1269 "link": 157
1270 }
1271 ],
1272 "outputs": [
1273 {
1274 "localized_name": "CLIP",
1275 "name": "CLIP",
1276 "type": "CLIP",
1277 "links": [
1278 24
1279 ]
1280 }
1281 ],
1282 "properties": {
1283 "Node name for S&R": "CLIPLoader",
1284 "cnr_id": "comfy-core",
1285 "ver": "0.8.2",
1286 "models": [
1287 {
1288 "name": "qwen3vl_8b_fp8_scaled.safetensors",
1289 "url": "https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_fp8_scaled.safetensors",
1290 "directory": "text_encoders"
1291 }
1292 ],
1293 "enableTabs": false,
1294 "hasSecondTab": false,
1295 "secondTabOffset": 80,
1296 "secondTabText": "Send Back",
1297 "secondTabWidth": 65,
1298 "tabWidth": 65,
1299 "tabXOffset": 10
1300 },
1301 "widgets_values": [
1302 "qwen3vl_8b_fp8_scaled.safetensors",
1303 "ideogram4",
1304 "default"
1305 ]
1306 },
1307 {
1308 "id": 27,
1309 "type": "PrimitiveInt",
1310 "pos": [
1311 4240,
1312 1610
1313 ],
1314 "size": [
1315 270,
1316 110
1317 ],
1318 "flags": [],
1319 "order": 11,
1320 "mode": 0,
1321 "inputs": [
1322 {
1323 "localized_name": "value",
1324 "name": "value",
1325 "type": "INT",
1326 "widget": {
1327 "name": "value"
1328 },
1329 "link": 153
1330 }
1331 ],
1332 "outputs": [
1333 {
1334 "localized_name": "INT",
1335 "name": "INT",
1336 "type": "INT",
1337 "links": [
1338 32
1339 ]
1340 }
1341 ],
1342 "title": "Int (Width)",
1343 "properties": {
1344 "Node name for S&R": "PrimitiveInt",
1345 "cnr_id": "comfy-core",
1346 "ver": "0.23.0",
1347 "enableTabs": false,
1348 "hasSecondTab": false,
1349 "secondTabOffset": 80,
1350 "secondTabText": "Send Back",
1351 "secondTabWidth": 65,
1352 "tabWidth": 65,
1353 "tabXOffset": 10
1354 },
1355 "widgets_values": [
1356 1024,
1357 "fixed"
1358 ]
1359 },
1360 {
1361 "id": 28,
1362 "type": "PrimitiveInt",
1363 "pos": [
1364 4250,
1365 1800
1366 ],
1367 "size": [
1368 270,
1369 110
1370 ],
1371 "flags": [],
1372 "order": 12,
1373 "mode": 0,
1374 "inputs": [
1375 {
1376 "localized_name": "value",
1377 "name": "value",
1378 "type": "INT",
1379 "widget": {
1380 "name": "value"
1381 },
1382 "link": 154
1383 }
1384 ],
1385 "outputs": [
1386 {
1387 "localized_name": "INT",
1388 "name": "INT",
1389 "type": "INT",
1390 "links": [
1391 35
1392 ]
1393 }
1394 ],
1395 "title": "Int (Height)",
1396 "properties": {
1397 "Node name for S&R": "PrimitiveInt",
1398 "cnr_id": "comfy-core",
1399 "ver": "0.23.0",
1400 "enableTabs": false,
1401 "hasSecondTab": false,
1402 "secondTabOffset": 80,
1403 "secondTabText": "Send Back",
1404 "secondTabWidth": 65,
1405 "tabWidth": 65,
1406 "tabXOffset": 10
1407 },
1408 "widgets_values": [
1409 1024,
1410 "fixed"
1411 ]
1412 },
1413 {
1414 "id": 31,
1415 "type": "ComfyMathExpression",
1416 "pos": [
1417 5340,
1418 1400
1419 ],
1420 "size": [
1421 230,
1422 80
1423 ],
1424 "flags": {
1425 "collapsed": true
1426 },
1427 "order": 13,
1428 "mode": 0,
1429 "inputs": [
1430 {
1431 "label": "a",
1432 "localized_name": "values.a",
1433 "name": "values.a",
1434 "type": "FLOAT,INT,BOOLEAN",
1435 "link": 32
1436 },
1437 {
1438 "label": "b",
1439 "localized_name": "values.b",
1440 "name": "values.b",
1441 "shape": 7,
1442 "type": "FLOAT,INT,BOOLEAN",
1443 "link": null
1444 }
1445 ],
1446 "outputs": [
1447 {
1448 "localized_name": "FLOAT",
1449 "name": "FLOAT",
1450 "type": "FLOAT",
1451 "links": null
1452 },
1453 {
1454 "localized_name": "INT",
1455 "name": "INT",
1456 "type": "INT",
1457 "links": [
1458 33,
1459 34
1460 ]
1461 },
1462 {
1463 "localized_name": "BOOL",
1464 "name": "BOOL",
1465 "type": "BOOLEAN",
1466 "links": null
1467 }
1468 ],
1469 "properties": {
1470 "Node name for S&R": "ComfyMathExpression",
1471 "cnr_id": "comfy-core",
1472 "ver": "0.23.0",
1473 "enableTabs": false,
1474 "hasSecondTab": false,
1475 "secondTabOffset": 80,
1476 "secondTabText": "Send Back",
1477 "secondTabWidth": 65,
1478 "tabWidth": 65,
1479 "tabXOffset": 10
1480 },
1481 "widgets_values": [
1482 "max(((a + 15) // 16) * 16, 256)"
1483 ]
1484 },
1485 {
1486 "id": 32,
1487 "type": "ComfyMathExpression",
1488 "pos": [
1489 5350,
1490 1470
1491 ],
1492 "size": [
1493 230,
1494 80
1495 ],
1496 "flags": {
1497 "collapsed": true
1498 },
1499 "order": 14,
1500 "mode": 0,
1501 "inputs": [
1502 {
1503 "label": "a",
1504 "localized_name": "values.a",
1505 "name": "values.a",
1506 "type": "FLOAT,INT,BOOLEAN",
1507 "link": 35
1508 },
1509 {
1510 "label": "b",
1511 "localized_name": "values.b",
1512 "name": "values.b",
1513 "shape": 7,
1514 "type": "FLOAT,INT,BOOLEAN",
1515 "link": null
1516 }
1517 ],
1518 "outputs": [
1519 {
1520 "localized_name": "FLOAT",
1521 "name": "FLOAT",
1522 "type": "FLOAT",
1523 "links": null
1524 },
1525 {
1526 "localized_name": "INT",
1527 "name": "INT",
1528 "type": "INT",
1529 "links": [
1530 36,
1531 37
1532 ]
1533 },
1534 {
1535 "localized_name": "BOOL",
1536 "name": "BOOL",
1537 "type": "BOOLEAN",
1538 "links": null
1539 }
1540 ],
1541 "properties": {
1542 "Node name for S&R": "ComfyMathExpression",
1543 "cnr_id": "comfy-core",
1544 "ver": "0.23.0",
1545 "enableTabs": false,
1546 "hasSecondTab": false,
1547 "secondTabOffset": 80,
1548 "secondTabText": "Send Back",
1549 "secondTabWidth": 65,
1550 "tabWidth": 65,
1551 "tabXOffset": 10
1552 },
1553 "widgets_values": [
1554 "max(((a + 15) // 16) * 16, 256)"
1555 ]
1556 },
1557 {
1558 "id": 144,
1559 "type": "ComfyNumberConvert",
1560 "pos": [
1561 5920,
1562 1870
1563 ],
1564 "size": [
1565 230,
1566 100
1567 ],
1568 "flags": [],
1569 "order": 15,
1570 "mode": 0,
1571 "inputs": [
1572 {
1573 "label": "value",
1574 "localized_name": "value",
1575 "name": "value",
1576 "type": "INT,FLOAT,STRING,BOOLEAN",
1577 "link": 195
1578 }
1579 ],
1580 "outputs": [
1581 {
1582 "localized_name": "FLOAT",
1583 "name": "FLOAT",
1584 "type": "FLOAT",
1585 "links": [
1586 208
1587 ]
1588 },
1589 {
1590 "localized_name": "INT",
1591 "name": "INT",
1592 "type": "INT",
1593 "links": null
1594 }
1595 ],
1596 "properties": {
1597 "Node name for S&R": "ComfyNumberConvert",
1598 "cnr_id": "comfy-core",
1599 "ver": "0.23.0",
1600 "enableTabs": false,
1601 "hasSecondTab": false,
1602 "secondTabOffset": 80,
1603 "secondTabText": "Send Back",
1604 "secondTabWidth": 65,
1605 "tabWidth": 65,
1606 "tabXOffset": 10
1607 },
1608 "widgets_values": []
1609 },
1610 {
1611 "id": 145,
1612 "type": "JsonExtractString",
1613 "pos": [
1614 5450,
1615 1870
1616 ],
1617 "size": [
1618 400,
1619 200
1620 ],
1621 "flags": [],
1622 "order": 16,
1623 "mode": 0,
1624 "inputs": [
1625 {
1626 "localized_name": "json_string",
1627 "name": "json_string",
1628 "type": "STRING",
1629 "widget": {
1630 "name": "json_string"
1631 },
1632 "link": 196
1633 }
1634 ],
1635 "outputs": [
1636 {
1637 "localized_name": "STRING",
1638 "name": "STRING",
1639 "type": "STRING",
1640 "links": [
1641 195
1642 ]
1643 }
1644 ],
1645 "properties": {
1646 "Node name for S&R": "JsonExtractString",
1647 "cnr_id": "comfy-core",
1648 "ver": "0.23.0",
1649 "enableTabs": false,
1650 "hasSecondTab": false,
1651 "secondTabOffset": 80,
1652 "secondTabText": "Send Back",
1653 "secondTabWidth": 65,
1654 "tabWidth": 65,
1655 "tabXOffset": 10
1656 },
1657 "widgets_values": [
1658 "",
1659 "mu"
1660 ]
1661 },
1662 {
1663 "id": 146,
1664 "type": "ComfyNumberConvert",
1665 "pos": [
1666 5930,
1667 2110
1668 ],
1669 "size": [
1670 230,
1671 100
1672 ],
1673 "flags": [],
1674 "order": 17,
1675 "mode": 0,
1676 "inputs": [
1677 {
1678 "label": "value",
1679 "localized_name": "value",
1680 "name": "value",
1681 "type": "INT,FLOAT,STRING,BOOLEAN",
1682 "link": 197
1683 }
1684 ],
1685 "outputs": [
1686 {
1687 "localized_name": "FLOAT",
1688 "name": "FLOAT",
1689 "type": "FLOAT",
1690 "links": [
1691 209
1692 ]
1693 },
1694 {
1695 "localized_name": "INT",
1696 "name": "INT",
1697 "type": "INT",
1698 "links": null
1699 }
1700 ],
1701 "properties": {
1702 "Node name for S&R": "ComfyNumberConvert",
1703 "cnr_id": "comfy-core",
1704 "ver": "0.23.0",
1705 "enableTabs": false,
1706 "hasSecondTab": false,
1707 "secondTabOffset": 80,
1708 "secondTabText": "Send Back",
1709 "secondTabWidth": 65,
1710 "tabWidth": 65,
1711 "tabXOffset": 10
1712 },
1713 "widgets_values": []
1714 },
1715 {
1716 "id": 147,
1717 "type": "JsonExtractString",
1718 "pos": [
1719 5010,
1720 1630
1721 ],
1722 "size": [
1723 410,
1724 470
1725 ],
1726 "flags": [],
1727 "order": 18,
1728 "mode": 0,
1729 "inputs": [
1730 {
1731 "localized_name": "key",
1732 "name": "key",
1733 "type": "STRING",
1734 "widget": {
1735 "name": "key"
1736 },
1737 "link": 218
1738 }
1739 ],
1740 "outputs": [
1741 {
1742 "localized_name": "STRING",
1743 "name": "STRING",
1744 "type": "STRING",
1745 "links": [
1746 199
1747 ]
1748 }
1749 ],
1750 "properties": {
1751 "Node name for S&R": "JsonExtractString",
1752 "cnr_id": "comfy-core",
1753 "ver": "0.23.0",
1754 "enableTabs": false,
1755 "hasSecondTab": false,
1756 "secondTabOffset": 80,
1757 "secondTabText": "Send Back",
1758 "secondTabWidth": 65,
1759 "tabWidth": 65,
1760 "tabXOffset": 10
1761 },
1762 "widgets_values": [
1763 "{\n \"Quality\": {\n \"num_steps\": 48,\n \"mu\": 0.0,\n \"std\": 1.5,\n \"preset_id\": \"V4_QUALITY_48\"\n },\n \"Default\": {\n \"num_steps\": 20,\n \"mu\": 0.0,\n \"std\": 1.75,\n \"preset_id\": \"V4_DEFAULT_20\"\n },\n \"Turbo\": {\n \"num_steps\": 12,\n \"mu\": 0.5,\n \"std\": 1.75,\n \"preset_id\": \"V4_TURBO_12\"\n }\n}",
1764 "Default"
1765 ]
1766 },
1767 {
1768 "id": 148,
1769 "type": "StringReplace",
1770 "pos": [
1771 5050,
1772 2150
1773 ],
1774 "size": [
1775 230,
1776 40
1777 ],
1778 "flags": {
1779 "collapsed": true
1780 },
1781 "order": 19,
1782 "mode": 0,
1783 "inputs": [
1784 {
1785 "localized_name": "string",
1786 "name": "string",
1787 "type": "STRING",
1788 "widget": {
1789 "name": "string"
1790 },
1791 "link": 199
1792 }
1793 ],
1794 "outputs": [
1795 {
1796 "localized_name": "STRING",
1797 "name": "STRING",
1798 "type": "STRING",
1799 "links": [
1800 196,
1801 200,
1802 201
1803 ]
1804 }
1805 ],
1806 "properties": {
1807 "Node name for S&R": "StringReplace",
1808 "cnr_id": "comfy-core",
1809 "ver": "0.23.0",
1810 "enableTabs": false,
1811 "hasSecondTab": false,
1812 "secondTabOffset": 80,
1813 "secondTabText": "Send Back",
1814 "secondTabWidth": 65,
1815 "tabWidth": 65,
1816 "tabXOffset": 10
1817 },
1818 "widgets_values": [
1819 "",
1820 "'",
1821 "\""
1822 ]
1823 },
1824 {
1825 "id": 149,
1826 "type": "JsonExtractString",
1827 "pos": [
1828 5460,
1829 1610
1830 ],
1831 "size": [
1832 400,
1833 200
1834 ],
1835 "flags": [],
1836 "order": 20,
1837 "mode": 0,
1838 "inputs": [
1839 {
1840 "localized_name": "json_string",
1841 "name": "json_string",
1842 "type": "STRING",
1843 "widget": {
1844 "name": "json_string"
1845 },
1846 "link": 200
1847 }
1848 ],
1849 "outputs": [
1850 {
1851 "localized_name": "STRING",
1852 "name": "STRING",
1853 "type": "STRING",
1854 "links": [
1855 202
1856 ]
1857 }
1858 ],
1859 "properties": {
1860 "Node name for S&R": "JsonExtractString",
1861 "cnr_id": "comfy-core",
1862 "ver": "0.23.0",
1863 "enableTabs": false,
1864 "hasSecondTab": false,
1865 "secondTabOffset": 80,
1866 "secondTabText": "Send Back",
1867 "secondTabWidth": 65,
1868 "tabWidth": 65,
1869 "tabXOffset": 10
1870 },
1871 "widgets_values": [
1872 "",
1873 "num_steps"
1874 ]
1875 },
1876 {
1877 "id": 150,
1878 "type": "JsonExtractString",
1879 "pos": [
1880 5450,
1881 2110
1882 ],
1883 "size": [
1884 400,
1885 200
1886 ],
1887 "flags": [],
1888 "order": 21,
1889 "mode": 0,
1890 "inputs": [
1891 {
1892 "localized_name": "json_string",
1893 "name": "json_string",
1894 "type": "STRING",
1895 "widget": {
1896 "name": "json_string"
1897 },
1898 "link": 201
1899 }
1900 ],
1901 "outputs": [
1902 {
1903 "localized_name": "STRING",
1904 "name": "STRING",
1905 "type": "STRING",
1906 "links": [
1907 197
1908 ]
1909 }
1910 ],
1911 "properties": {
1912 "Node name for S&R": "JsonExtractString",
1913 "cnr_id": "comfy-core",
1914 "ver": "0.23.0",
1915 "enableTabs": false,
1916 "hasSecondTab": false,
1917 "secondTabOffset": 80,
1918 "secondTabText": "Send Back",
1919 "secondTabWidth": 65,
1920 "tabWidth": 65,
1921 "tabXOffset": 10
1922 },
1923 "widgets_values": [
1924 "",
1925 "std"
1926 ]
1927 },
1928 {
1929 "id": 151,
1930 "type": "ComfyNumberConvert",
1931 "pos": [
1932 5920,
1933 1620
1934 ],
1935 "size": [
1936 230,
1937 100
1938 ],
1939 "flags": [],
1940 "order": 22,
1941 "mode": 0,
1942 "inputs": [
1943 {
1944 "label": "value",
1945 "localized_name": "value",
1946 "name": "value",
1947 "type": "INT,FLOAT,STRING,BOOLEAN",
1948 "link": 202
1949 }
1950 ],
1951 "outputs": [
1952 {
1953 "localized_name": "FLOAT",
1954 "name": "FLOAT",
1955 "type": "FLOAT",
1956 "links": []
1957 },
1958 {
1959 "localized_name": "INT",
1960 "name": "INT",
1961 "type": "INT",
1962 "links": [
1963 207
1964 ]
1965 }
1966 ],
1967 "properties": {
1968 "Node name for S&R": "ComfyNumberConvert",
1969 "cnr_id": "comfy-core",
1970 "ver": "0.23.0",
1971 "enableTabs": false,
1972 "hasSecondTab": false,
1973 "secondTabOffset": 80,
1974 "secondTabText": "Send Back",
1975 "secondTabWidth": 65,
1976 "tabWidth": 65,
1977 "tabXOffset": 10
1978 },
1979 "widgets_values": []
1980 },
1981 {
1982 "id": 154,
1983 "type": "UNETLoader",
1984 "pos": [
1985 4730,
1986 740
1987 ],
1988 "size": [
1989 470,
1990 170
1991 ],
1992 "flags": [],
1993 "order": 23,
1994 "mode": 0,
1995 "showAdvanced": true,
1996 "inputs": [
1997 {
1998 "localized_name": "unet_name",
1999 "name": "unet_name",
2000 "type": "COMBO",
2001 "widget": {
2002 "name": "unet_name"
2003 },
2004 "link": 216
2005 }
2006 ],
2007 "outputs": [
2008 {
2009 "localized_name": "MODEL",
2010 "name": "MODEL",
2011 "type": "MODEL",
2012 "links": [
2013 211
2014 ]
2015 }
2016 ],
2017 "properties": {
2018 "Node name for S&R": "UNETLoader",
2019 "cnr_id": "comfy-core",
2020 "ver": "0.8.2",
2021 "models": [
2022 {
2023 "name": "ideogram4_unconditional_int8_convrot.safetensors",
2024 "url": "https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_unconditional_int8_convrot.safetensors",
2025 "directory": "diffusion_models"
2026 }
2027 ],
2028 "enableTabs": false,
2029 "hasSecondTab": false,
2030 "secondTabOffset": 80,
2031 "secondTabText": "Send Back",
2032 "secondTabWidth": 65,
2033 "tabWidth": 65,
2034 "tabXOffset": 10
2035 },
2036 "widgets_values": [
2037 "ideogram4_unconditional_int8_convrot.safetensors",
2038 "default"
2039 ]
2040 },
2041 {
2042 "id": 155,
2043 "type": "DualModelGuider",
2044 "pos": [
2045 5790,
2046 870
2047 ],
2048 "size": [
2049 270,
2050 180
2051 ],
2052 "flags": [],
2053 "order": 24,
2054 "mode": 0,
2055 "inputs": [
2056 {
2057 "localized_name": "model",
2058 "name": "model",
2059 "type": "MODEL",
2060 "link": 223
2061 },
2062 {
2063 "localized_name": "positive",
2064 "name": "positive",
2065 "type": "CONDITIONING",
2066 "link": 213
2067 },
2068 {
2069 "localized_name": "model_negative",
2070 "name": "model_negative",
2071 "shape": 7,
2072 "type": "MODEL",
2073 "link": 211
2074 },
2075 {
2076 "localized_name": "negative",
2077 "name": "negative",
2078 "shape": 7,
2079 "type": "CONDITIONING",
2080 "link": 214
2081 }
2082 ],
2083 "outputs": [
2084 {
2085 "localized_name": "GUIDER",
2086 "name": "GUIDER",
2087 "type": "GUIDER",
2088 "links": [
2089 215
2090 ]
2091 }
2092 ],
2093 "properties": {
2094 "Node name for S&R": "DualModelGuider",
2095 "cnr_id": "comfy-core",
2096 "ver": "0.23.0",
2097 "enableTabs": false,
2098 "hasSecondTab": false,
2099 "secondTabOffset": 80,
2100 "secondTabText": "Send Back",
2101 "secondTabWidth": 65,
2102 "tabWidth": 65,
2103 "tabXOffset": 10
2104 },
2105 "widgets_values": [
2106 7
2107 ]
2108 },
2109 {
2110 "id": 156,
2111 "type": "CustomCombo",
2112 "pos": [
2113 4720,
2114 1630
2115 ],
2116 "size": [
2117 270,
2118 280
2119 ],
2120 "flags": [],
2121 "order": 25,
2122 "mode": 0,
2123 "inputs": [
2124 {
2125 "localized_name": "choice",
2126 "name": "choice",
2127 "type": "COMBO",
2128 "widget": {
2129 "name": "choice"
2130 },
2131 "link": 219
2132 }
2133 ],
2134 "outputs": [
2135 {
2136 "localized_name": "STRING",
2137 "name": "STRING",
2138 "type": "STRING",
2139 "links": [
2140 218
2141 ]
2142 },
2143 {
2144 "localized_name": "INDEX",
2145 "name": "INDEX",
2146 "type": "INT",
2147 "links": null
2148 }
2149 ],
2150 "properties": {
2151 "Node name for S&R": "CustomCombo",
2152 "cnr_id": "comfy-core",
2153 "ver": "0.23.0",
2154 "enableTabs": false,
2155 "hasSecondTab": false,
2156 "secondTabOffset": 80,
2157 "secondTabText": "Send Back",
2158 "secondTabWidth": 65,
2159 "tabWidth": 65,
2160 "tabXOffset": 10
2161 },
2162 "widgets_values": [
2163 "Default",
2164 1,
2165 "Quality",
2166 "Default",
2167 "Turbo",
2168 ""
2169 ]
2170 },
2171 {
2172 "id": 157,
2173 "type": "CFGOverride",
2174 "pos": [
2175 5790,
2176 650
2177 ],
2178 "size": [
2179 260,
2180 170
2181 ],
2182 "flags": [],
2183 "order": 26,
2184 "mode": 0,
2185 "inputs": [
2186 {
2187 "localized_name": "model",
2188 "name": "model",
2189 "type": "MODEL",
2190 "link": 222
2191 }
2192 ],
2193 "outputs": [
2194 {
2195 "localized_name": "MODEL",
2196 "name": "MODEL",
2197 "type": "MODEL",
2198 "links": [
2199 223
2200 ]
2201 }
2202 ],
2203 "properties": {
2204 "Node name for S&R": "CFGOverride",
2205 "cnr_id": "comfy-core",
2206 "ver": "0.23.0",
2207 "enableTabs": false,
2208 "hasSecondTab": false,
2209 "secondTabOffset": 80,
2210 "secondTabText": "Send Back",
2211 "secondTabWidth": 65,
2212 "tabWidth": 65,
2213 "tabXOffset": 10
2214 },
2215 "widgets_values": [
2216 3,
2217 0.7,
2218 1
2219 ]
2220 }
2221 ],
2222 "groups": [
2223 {
2224 "id": 1,
2225 "title": "Models",
2226 "bounding": [
2227 4700,
2228 420,
2229 530,
2230 1100
2231 ],
2232 "color": "#3f789e",
2233 "flags": []
2234 },
2235 {
2236 "id": 2,
2237 "title": "Latent Size",
2238 "bounding": [
2239 5260,
2240 1080,
2241 450,
2242 440
2243 ],
2244 "color": "#3f789e",
2245 "flags": []
2246 },
2247 {
2248 "id": 3,
2249 "title": "Sampling",
2250 "bounding": [
2251 5740,
2252 420,
2253 780,
2254 1100
2255 ],
2256 "color": "#3f789e",
2257 "flags": []
2258 },
2259 {
2260 "id": 4,
2261 "title": "Prompt",
2262 "bounding": [
2263 5260,
2264 420,
2265 450,
2266 640
2267 ],
2268 "color": "#3f789e",
2269 "flags": []
2270 },
2271 {
2272 "id": 5,
2273 "title": "Image Size",
2274 "bounding": [
2275 4130,
2276 1540,
2277 530,
2278 420
2279 ],
2280 "color": "#3f789e",
2281 "flags": []
2282 },
2283 {
2284 "id": 9,
2285 "title": "Preset",
2286 "bounding": [
2287 4700,
2288 1540,
2289 1820,
2290 780
2291 ],
2292 "color": "#3f789e",
2293 "flags": []
2294 }
2295 ],
2296 "links": [
2297 {
2298 "id": 8,
2299 "origin_id": 24,
2300 "origin_slot": 0,
2301 "target_id": 10,
2302 "target_slot": 0,
2303 "type": "CONDITIONING"
2304 },
2305 {
2306 "id": 33,
2307 "origin_id": 31,
2308 "origin_slot": 1,
2309 "target_id": 11,
2310 "target_slot": 0,
2311 "type": "INT"
2312 },
2313 {
2314 "id": 36,
2315 "origin_id": 32,
2316 "origin_slot": 1,
2317 "target_id": 11,
2318 "target_slot": 1,
2319 "type": "INT"
2320 },
2321 {
2322 "id": 11,
2323 "origin_id": 18,
2324 "origin_slot": 0,
2325 "target_id": 12,
2326 "target_slot": 0,
2327 "type": "NOISE"
2328 },
2329 {
2330 "id": 13,
2331 "origin_id": 16,
2332 "origin_slot": 0,
2333 "target_id": 12,
2334 "target_slot": 2,
2335 "type": "SAMPLER"
2336 },
2337 {
2338 "id": 14,
2339 "origin_id": 17,
2340 "origin_slot": 0,
2341 "target_id": 12,
2342 "target_slot": 3,
2343 "type": "SIGMAS"
2344 },
2345 {
2346 "id": 15,
2347 "origin_id": 11,
2348 "origin_slot": 0,
2349 "target_id": 12,
2350 "target_slot": 4,
2351 "type": "LATENT"
2352 },
2353 {
2354 "id": 16,
2355 "origin_id": 12,
2356 "origin_slot": 0,
2357 "target_id": 13,
2358 "target_slot": 0,
2359 "type": "LATENT"
2360 },
2361 {
2362 "id": 17,
2363 "origin_id": 9,
2364 "origin_slot": 0,
2365 "target_id": 13,
2366 "target_slot": 1,
2367 "type": "VAE"
2368 },
2369 {
2370 "id": 34,
2371 "origin_id": 31,
2372 "origin_slot": 1,
2373 "target_id": 17,
2374 "target_slot": 1,
2375 "type": "INT"
2376 },
2377 {
2378 "id": 37,
2379 "origin_id": 32,
2380 "origin_slot": 1,
2381 "target_id": 17,
2382 "target_slot": 2,
2383 "type": "INT"
2384 },
2385 {
2386 "id": 24,
2387 "origin_id": 14,
2388 "origin_slot": 0,
2389 "target_id": 24,
2390 "target_slot": 0,
2391 "type": "CLIP"
2392 },
2393 {
2394 "id": 32,
2395 "origin_id": 27,
2396 "origin_slot": 0,
2397 "target_id": 31,
2398 "target_slot": 0,
2399 "type": "INT"
2400 },
2401 {
2402 "id": 35,
2403 "origin_id": 28,
2404 "origin_slot": 0,
2405 "target_id": 32,
2406 "target_slot": 0,
2407 "type": "INT"
2408 },
2409 {
2410 "id": 25,
2411 "origin_id": 13,
2412 "origin_slot": 0,
2413 "target_id": -20,
2414 "target_slot": 0,
2415 "type": "IMAGE"
2416 },
2417 {
2418 "id": 152,
2419 "origin_id": -10,
2420 "origin_slot": 0,
2421 "target_id": 24,
2422 "target_slot": 1,
2423 "type": "STRING"
2424 },
2425 {
2426 "id": 153,
2427 "origin_id": -10,
2428 "origin_slot": 1,
2429 "target_id": 27,
2430 "target_slot": 0,
2431 "type": "INT"
2432 },
2433 {
2434 "id": 154,
2435 "origin_id": -10,
2436 "origin_slot": 2,
2437 "target_id": 28,
2438 "target_slot": 0,
2439 "type": "INT"
2440 },
2441 {
2442 "id": 155,
2443 "origin_id": -10,
2444 "origin_slot": 3,
2445 "target_id": 18,
2446 "target_slot": 0,
2447 "type": "INT"
2448 },
2449 {
2450 "id": 156,
2451 "origin_id": -10,
2452 "origin_slot": 4,
2453 "target_id": 23,
2454 "target_slot": 0,
2455 "type": "COMBO"
2456 },
2457 {
2458 "id": 157,
2459 "origin_id": -10,
2460 "origin_slot": 5,
2461 "target_id": 14,
2462 "target_slot": 0,
2463 "type": "COMBO"
2464 },
2465 {
2466 "id": 158,
2467 "origin_id": -10,
2468 "origin_slot": 6,
2469 "target_id": 9,
2470 "target_slot": 0,
2471 "type": "COMBO"
2472 },
2473 {
2474 "id": 195,
2475 "origin_id": 145,
2476 "origin_slot": 0,
2477 "target_id": 144,
2478 "target_slot": 0,
2479 "type": "STRING"
2480 },
2481 {
2482 "id": 196,
2483 "origin_id": 148,
2484 "origin_slot": 0,
2485 "target_id": 145,
2486 "target_slot": 0,
2487 "type": "STRING"
2488 },
2489 {
2490 "id": 197,
2491 "origin_id": 150,
2492 "origin_slot": 0,
2493 "target_id": 146,
2494 "target_slot": 0,
2495 "type": "STRING"
2496 },
2497 {
2498 "id": 199,
2499 "origin_id": 147,
2500 "origin_slot": 0,
2501 "target_id": 148,
2502 "target_slot": 0,
2503 "type": "STRING"
2504 },
2505 {
2506 "id": 200,
2507 "origin_id": 148,
2508 "origin_slot": 0,
2509 "target_id": 149,
2510 "target_slot": 0,
2511 "type": "STRING"
2512 },
2513 {
2514 "id": 201,
2515 "origin_id": 148,
2516 "origin_slot": 0,
2517 "target_id": 150,
2518 "target_slot": 0,
2519 "type": "STRING"
2520 },
2521 {
2522 "id": 202,
2523 "origin_id": 149,
2524 "origin_slot": 0,
2525 "target_id": 151,
2526 "target_slot": 0,
2527 "type": "STRING"
2528 },
2529 {
2530 "id": 207,
2531 "origin_id": 151,
2532 "origin_slot": 1,
2533 "target_id": 17,
2534 "target_slot": 0,
2535 "type": "INT"
2536 },
2537 {
2538 "id": 208,
2539 "origin_id": 144,
2540 "origin_slot": 0,
2541 "target_id": 17,
2542 "target_slot": 3,
2543 "type": "FLOAT"
2544 },
2545 {
2546 "id": 209,
2547 "origin_id": 146,
2548 "origin_slot": 0,
2549 "target_id": 17,
2550 "target_slot": 4,
2551 "type": "FLOAT"
2552 },
2553 {
2554 "id": 211,
2555 "origin_id": 154,
2556 "origin_slot": 0,
2557 "target_id": 155,
2558 "target_slot": 2,
2559 "type": "MODEL"
2560 },
2561 {
2562 "id": 213,
2563 "origin_id": 24,
2564 "origin_slot": 0,
2565 "target_id": 155,
2566 "target_slot": 1,
2567 "type": "CONDITIONING"
2568 },
2569 {
2570 "id": 214,
2571 "origin_id": 10,
2572 "origin_slot": 0,
2573 "target_id": 155,
2574 "target_slot": 3,
2575 "type": "CONDITIONING"
2576 },
2577 {
2578 "id": 215,
2579 "origin_id": 155,
2580 "origin_slot": 0,
2581 "target_id": 12,
2582 "target_slot": 1,
2583 "type": "GUIDER"
2584 },
2585 {
2586 "id": 216,
2587 "origin_id": -10,
2588 "origin_slot": 7,
2589 "target_id": 154,
2590 "target_slot": 0,
2591 "type": "COMBO"
2592 },
2593 {
2594 "id": 218,
2595 "origin_id": 156,
2596 "origin_slot": 0,
2597 "target_id": 147,
2598 "target_slot": 0,
2599 "type": "STRING"
2600 },
2601 {
2602 "id": 219,
2603 "origin_id": -10,
2604 "origin_slot": 8,
2605 "target_id": 156,
2606 "target_slot": 0,
2607 "type": "COMBO"
2608 },
2609 {
2610 "id": 222,
2611 "origin_id": 23,
2612 "origin_slot": 0,
2613 "target_id": 157,
2614 "target_slot": 0,
2615 "type": "MODEL"
2616 },
2617 {
2618 "id": 223,
2619 "origin_id": 157,
2620 "origin_slot": 0,
2621 "target_id": 155,
2622 "target_slot": 0,
2623 "type": "MODEL"
2624 }
2625 ],
2626 "extra": []
2627 },
2628 {
2629 "id": "f5f04613-ee09-4cd9-9ada-a880360891d4",
2630 "version": 1,
2631 "state": {
2632 "lastGroupId": 9,
2633 "lastNodeId": 186,
2634 "lastLinkId": 260,
2635 "lastRerouteId": 0
2636 },
2637 "revision": 0,
2638 "config": [],
2639 "name": "Ideogram4 Caption Prompt Template",
2640 "inputNode": {
2641 "id": -10,
2642 "bounding": [
2643 4410,
2644 3390,
2645 128,
2646 128
2647 ]
2648 },
2649 "outputNode": {
2650 "id": -20,
2651 "bounding": [
2652 6270,
2653 2700,
2654 128,
2655 68
2656 ]
2657 },
2658 "inputs": [
2659 {
2660 "id": "b96a4263-d942-4b93-9225-03d8aff697ed",
2661 "name": "value",
2662 "type": "STRING",
2663 "linkIds": [
2664 180
2665 ],
2666 "label": "user_prompt",
2667 "pos": [
2668 4514,
2669 3414
2670 ]
2671 },
2672 {
2673 "id": "1292f2e8-bc8b-4896-956a-77cbfe7f7482",
2674 "name": "source",
2675 "type": "*",
2676 "linkIds": [
2677 254
2678 ],
2679 "label": "width",
2680 "pos": [
2681 4514,
2682 3434
2683 ]
2684 },
2685 {
2686 "id": "52396a95-c41b-4e06-94be-b6000d977bec",
2687 "name": "source_1",
2688 "type": "*",
2689 "linkIds": [
2690 256
2691 ],
2692 "label": "height",
2693 "pos": [
2694 4514,
2695 3454
2696 ]
2697 },
2698 {
2699 "id": "edcfa3cb-68fa-4953-9471-5f7a6ca65456",
2700 "name": "value_1",
2701 "type": "STRING",
2702 "linkIds": [
2703 260
2704 ],
2705 "label": "ratio",
2706 "pos": [
2707 4514,
2708 3474
2709 ]
2710 }
2711 ],
2712 "outputs": [
2713 {
2714 "id": "6527ba64-e7bb-474f-b015-bd6931e990ca",
2715 "name": "STRING",
2716 "type": "STRING",
2717 "linkIds": [
2718 259
2719 ],
2720 "pos": [
2721 6294,
2722 2724
2723 ]
2724 }
2725 ],
2726 "widgets": [],
2727 "nodes": [
2728 {
2729 "id": 114,
2730 "type": "PrimitiveStringMultiline",
2731 "pos": [
2732 5070,
2733 2580
2734 ],
2735 "size": [
2736 430,
2737 520
2738 ],
2739 "flags": [],
2740 "order": 0,
2741 "mode": 0,
2742 "inputs": [],
2743 "outputs": [
2744 {
2745 "localized_name": "STRING",
2746 "name": "STRING",
2747 "type": "STRING",
2748 "links": [
2749 228
2750 ]
2751 }
2752 ],
2753 "title": "System Prompt",
2754 "properties": {
2755 "Node name for S&R": "PrimitiveStringMultiline",
2756 "cnr_id": "comfy-core",
2757 "ver": "0.23.0",
2758 "enableTabs": false,
2759 "hasSecondTab": false,
2760 "secondTabOffset": 80,
2761 "secondTabText": "Send Back",
2762 "secondTabWidth": 65,
2763 "tabWidth": 65,
2764 "tabXOffset": 10
2765 },
2766 "widgets_values": [
2767 "[META]\nfrozen: false\ndescription: Slim single-shot magic prompt — splatter planning + v15 output discipline, deduped for faster inference. Thinking off.\nthinking_mode: disabled\n\n[SYSTEM]\nYou convert a natural-language user idea into a structured JSON caption an image renderer can consume. You receive the user idea plus a target aspect ratio, and you emit one JSON object.\n\n## OUTPUT CONTRACT — exactly three top-level keys, in this order:\n\n```json\n{\"aspect_ratio\":\"W:H\",\"high_level_description\":\"...\",\"compositional_deconstruction\":{\"background\":\"...\",\"elements\":[ ... ]}}\n```\n\n- Emit a SINGLE-LINE MINIFIED JSON object — no markdown fences, no commentary, no other top-level keys.\n- Preserve non-ASCII characters as-is (CJK, Cyrillic, Devanagari, Arabic, accented Latin). Never escape with `\\uNNNN`, transliterate, or replace `café` with `cafe`.\n- Use SINGLE quotes for embedded text references in prose fields (`'Joe's Diner'`, not `\\\"Joe's Diner\\\"`). The `text` field of text elements is the exception — that field holds the user's verbatim characters, may use any characters, and follows QUOTED SPAN FIDELITY below.\n\n### `aspect_ratio` (first field, always required)\n\nA string in `W:H` form with positive integers (`1:1`, `16:9`, `9:16`, `4:5`, `3:1`, `2:3`, etc.).\n- If the user message gives a concrete `W:H`, echo it verbatim.\n- If the user message says `auto`, pick a concrete ratio that matches the medium and composition (panoramic subjects → wide ratios like `16:9` or `3:1`; portrait subjects → tall like `9:16` or `4:5`; designed artifacts → format conventions like `2:3` book cover, `3:4` poster; ambiguous → `1:1`). NEVER emit the literal string `auto`.\n- The aspect ratio you commit to drives every bbox decision. Pick it first.\n\n### `high_level_description` — observational summary (50-word hard cap)\n\n- ONE long sentence preferred, never more than two.\n- Reads like a short natural-language prompt, not an analysis. Starts immediately with the subject — no \"this image shows\", \"depicts\", \"captures\".\n- Identifies subject(s), medium, and overall composition. Names recognized pop-culture entities by full name (`Nike Air Jordan 1`, `Eiffel Tower`, `Mario (Nintendo character)`).\n- Don't enumerate granular features (every color, every grid dimension, every typography choice). That detail belongs in element descs or `background`.\n- `various`, `multiple`, general categories ARE appropriate here. Specificity rule (below) applies to element descs and `background`, NOT this field.\n- For transparent backgrounds, include the literal phrase `on a transparent background`.\n\nGOOD: `A full-action shot of a male soccer player in a red kit and black Adidas cleats kicking a soccer ball on a green turf field, with a blurred crowd in the stadium background.`\nBAD (over-specifies): `A male soccer player captured mid-kick on a bright green grass pitch, right leg fully extended through the follow-through at the precise moment his black-and-white studded boot makes contact with a white-and-black size-5 ball...`\n\n## ELEMENTS — what they are, what they're not\n\nEach element is one of:\n```\n{\"type\":\"obj\",\"bbox\":[y1,x1,y2,x2],\"desc\":\"...\"}\n{\"type\":\"text\",\"bbox\":[y1,x1,y2,x2],\"text\":\"LINE ONE\\nLINE TWO\",\"desc\":\"...\"}\n```\n\n`bbox` is optional per-element (see BBOX section below).\n\n### SINGLE SUBJECT = SINGLE ELEMENT\n\nA coherent subject — one animal, person, vehicle, building, plant, instrument, machine — is exactly ONE `obj` element. Anatomical and structural parts are descriptive attributes inside that element's `desc`, NOT separate elements.\n\nFORBIDDEN: a bee split into 8 elements (thorax/abdomen/wings/eyes/legs/...); a car split into 6 (body/wheels/windshield/...); a person split into 7 (head/torso/each limb/...); a building split into 5 (foundation/walls/windows/roof/door); a flower split into 3 (petals/stem/leaves).\n\nWhen MULTIPLE distinct subjects appear (a person AND a dog; two bees; three runners), use MULTIPLE elements — one per subject.\n\n**Test:** part-of-one-thing → goes in that thing's desc. Separate thing → its own element.\n\n**Transparent enclosure + featured contents = ONE element.** Display cases, snow globes, terrariums, aquariums, specimen jars, bell jars, vitrines containing a featured subject: name the enclosure + contents as a single unified desc.\n\n**Configured parts + revealed interior = ONE element.** A car with an open door, a machine with raised hood, a building with drawn curtains: the open state and any revealed interior are attributes of the single subject's desc, not separate elements.\n\n### Element desc — what to write (30–60 words, 60-word HARD CAP)\n\nIdentity first, then major attributes briefly, then one distinguishing detail if relevant. Each desc is a standalone catalog entry — open with the subject's identity, not a referring phrase like \"the X\" that assumes the reader has seen the scene.\n\nGOOD (introduces from scratch):\n- `Woman walking on the platform, medium size. Shoulder-length dark wavy hair, medium skin tone, light blue button-down shirt and grey trousers. Small bag slung over the right shoulder.`\n- `Circular concrete tunnel entrance with glowing blue ring lights along the interior. Train tracks lead directly into the dark opening.`\n\n**Major attributes — always name:**\n- People: skin tone, hair (color + style), each visible garment with color, expression/gaze, pose, distinguishing feature (mole, glasses, jewelry, held prop).\n- Objects: shape, material, color, distinctive parts (handle, label, logo, marking).\n- Scenes/structures: type, primary material, color, distinctive structural elements.\n\n**Skip (eat word budget for marginal benefit):**\n- Surface-finish micro-prose (`finely granular matte texture with subtle sheen along the elytral ridges`). Pick one short descriptor (matte/glossy/metallic/textured) or omit.\n- Pose mechanics per-limb. Pick ONE summary action phrase plus the major attributes.\n- Camera/shadow/lighting micro-detail per element. Belongs in `background`.\n- Fabric weave, skin texture nuances, micro-anatomy.\n\n### Element desc — what NOT to include\n\n**No shadows.** Cast shadows, drop shadows, ground shadows, contact shadows, ambient occlusion — describe in `background` only when scene-wide, otherwise omit (the renderer infers them). Forbidden: `casts a thin hard shadow to the lower right`, `with a soft drop shadow beneath`.\n\n**No camera or render language.** Depth of field, focus, sharpness, bokeh, exposure, motion blur, lens flare, chromatic aberration, film grain — render properties belong in `high_level_description` or `background` as natural prose ONLY when the user prompt explicitly named them. NEVER inside an obj desc.\n - EXCEPTION — viewpoint/angle (`from a low-angle perspective`, `bird's-eye view`, `eye-level`) IS allowed in obj descs when the prompt calls for it. Place once, usually in the focal subject's desc or background.\n\n**No describing impressions instead of physical reality.** Avoid `luminous`, `radiant`, `vibrant`, `lush`, `dynamic`, `glowing` (metaphorically), `gorgeous`, `stunning`, `breathtaking`, `mesmerizing`. Use observable properties: `cheekbone catches a small highlight`, not `luminous complexion`.\n\n**No scene-context repetition per-element.** Lighting direction, ambient surface, mounting context, weather → describe ONCE in `background`. Each element's desc focuses on what's UNIQUE to that element.\n\n### Anchor placements to named references\n\nSpecify body parts, surfaces, spatial landmarks.\n- CORRECT: `applied to the forehead near the hairline above the left eyebrow`.\n- INCORRECT: `pressed against the skin`.\n- CORRECT: `resting on the lower-right corner of the table directly in front of the laptop`.\n- INCORRECT: `sitting on the surface`.\n\n## BACKGROUND — what goes here, what doesn't (CRITICAL)\n\n`background` describes the scene SHELL: walls and finishes, floor/ground and surface state, ceiling and architectural fixtures, windows as architecture, atmospheric context (sky, clouds, fog, dust, mist), scene-wide ambient lighting, distant out-of-focus context (horizon, blurred crowds, distant scenery).\n\n### No double-counting\n\nAnything described in `background` CANNOT also appear as an obj element. Each scene component lives in EXACTLY ONE field. Decide once and commit. Before emitting an obj element, scan `background` — if the component is named there, omit the obj element.\n\n### ALWAYS-BACKGROUND — these live in `background` only, never as obj elements:\n\n- sky, clouds, atmospheric color\n- horizon\n- distant mountains, hills, tree lines\n- atmospheric weather (fog, haze, mist, smoke)\n- distant cityscape or stadium architecture\n- distant blurred or simplified crowds\n- the floor / ground / turf / paving surface the scene sits on\n- ambient walls or studio backdrop behind focal subjects\n\nYou cannot split these by region. `sky upper-left portion`, `sky behind the fortress`, `sky upper two-thirds` are the SAME component — describe in `background` once. Same for crowd, ground, horizon.\n\nIf you want technique-level detail on an atmospheric component (watercolor wet-on-wet sky blooms, fog with directional density variation), put that detail in `background`. The `background` field is allowed to be long.\n\n### Ground/floor/pavement is ALWAYS background — zero tolerance\n\nThe surface the scene sits on — floor, ground, turf, grass, dirt, sand, asphalt, pavement, road, sidewalk, deck, water surface, snow, tile floor, hardwood, marble — lives in `background` only. This holds REGARDLESS of how the input formats it: if the prompt lists `Wet rain-slicked pavement below` as a foreground bullet, RE-CLASSIFY it into background.\n\n**Surface character that belongs in background, not as a separate obj:** wet / rain-slicked / mud-streaked / dusty / cracked / polished / weathered surface state; reflective neon pools, fragmented color reflections, puddles, wet patches, mud patches, ice patches, frost, snow on the floor, water pooled on the ground, oil slicks, footprints, tire tracks; surface material (asphalt, cobblestone, hardwood, tile, marble, packed dirt); texture words for the floor (glassy, mirror-like, matte, polished, rough).\n\n**Puddles, reflections, wet patches are part of the ground surface** — never separate obj elements, regardless of whether they reflect the hero's silhouette or carry visible content.\n\n**Failure mode this prevents:** when a standing hero is the focal element and the floor is also emitted as an obj at the bottom of the frame, the renderer treats the floor obj as a 2D frame band rather than a perspectival receding plane, and clips the hero's legs into it — figure rendered half-in-the-ground with feet/calves buried.\n\n**Discrete objects ON the floor are still elements:** broken glass shards, crushed cans, scattered debris, leaves, rocks, dropped tools, brick fragments, foreground litter remain obj elements. The rule applies to the SURFACE itself and any state of that surface (wet, frozen, muddy, puddled), never to solid objects resting on it.\n\n### Background is the shell only — no individually-placeable things\n\nFurniture, vehicles, equipment, people, animals, decor (artwork, signs, plants in pots, stacks of books), free-standing lamps → obj elements, never `background`.\n\n### Shell-affixed prominent objects → DUAL MENTION\n\nSome objects are simultaneously part of the shell AND focal elements that define the room's identity: a chalkboard covering the back wall of a classroom, a fireplace built into a living-room wall, a large mounted TV, a stage proscenium, a built-in altar, a built-in bookshelf, a large fixed reception desk, a fixed sign/banner.\n\nFor these, MANDATORY all three steps:\n1. **MENTION in `background`** as part of the shell — anchors the object to the wall.\n2. **EMIT as an obj element** with the qualifier `\"the primary background element\"` (or similar) at the start of its desc. The obj carries the detail (material, content, frame, mounting).\n3. **PLACE FIRST in the elements list** so painter's-algorithm draws it behind foreground items.\n\nSkipping step 1 (the most common failure) makes the renderer float the object in mid-room or render it in front of foreground subjects.\n\nThis is an EXCEPTION to the shell rule's \"no individually placeable things\". Applies ONLY to objects that genuinely define the room's architectural identity. Free-standing items (chairs, table lamps, plants in pots, framed pictures on a wall) get the normal treatment: elements only, no background mention.\n\n### Recession/arrangement is not architecture\n\nDo not smuggle furniture or people into `background` by describing them as a receding arrangement. Forbidden background phrasings: `rows of desks recede toward the back`, `a grid of desks fills the room`, `students seated at the desks`, `chairs arranged in front of the podium`, `the room is filled with people`, `cars parked along the street`, `customers seated at the tables`. The arrangement IS the foreground content — emit elements.\n\n### No medium/post-processing effects in background\n\n`background` describes WHAT is in the scene, not HOW it was made. Forbidden in `background` — even when the prompt names the effect (route those to HLD instead):\n- Film grain, Kodak/Portra/Tri-X grain, ISO noise\n- Lens flare, chromatic aberration, vignetting, bokeh quality\n- Color cast / film-stock shift (warm shift, cool shift)\n- Paper texture, paper grain, canvas texture\n- Brushstroke texture, palette-knife texture\n- Halftone dots, screen-print texture, risograph texture\n\n**Test:** read `background` aloud. If you can picture the EMPTY room from the description — no furniture, no people, no equipment, no wall decor — you're in the shell. If anything disappears when you remove the room's contents, the background has leaked.\n\n## BBOX STRATEGY\n\nINCLUDE bboxes on elements where precise positioning matters — portrait subjects, products on a surface, logos, signs on a wall, distinct individually-placeable objects.\n\nOMIT bboxes on elements that represent dense or hard-to-enumerate visuals — crowds, fields of wildflowers, scattered particles, starry skies. Per-element judgment.\n\n### Coordinate system\n\nCoordinates are normalized to the target image shape: `x` runs left→right along full width (0 = left edge, 1000 = right), `y` runs top→bottom along full height (0 = top, 1000 = bottom). Top-left origin. Format `[y1, x1, y2, x2]` with `y1 < y2`, `x1 < x2`.\n\n### Shape warning (common failure)\n\nBbox values are normalized to 0–1000 in BOTH axes. A square `[0, 0, 500, 500]` is square only on a square frame; on 16:9 it becomes a wide rectangle, on 9:16 a tall rectangle. Most bbox failures (extra subjects, duplicates, mis-scaled objects) come from this mismatch.\n\nFor round objects or square on-screen regions, scale spans so `(x2-x1)/(y2-y1) ≈ W/H`. For single-subject prompts on wide frames, prefer narrower x-spans. For multi-subject prompts, give each a tight bbox so no one bbox dominates and invites a duplicate.\n\n## SPECIFICITY — commit to one value\n\nThis JSON feeds a diffusion model. Leave nothing for the model to invent or choose.\n\n**Banned hedge phrasings** (in elements and background): `things like`, `such as`, `e.g.`, `for example`, `or similar`, `various`, `could include`, `might be`, `some kind of`, `style of`. Replace with concrete nouns, counts, colors, materials, poses.\n\n**Banned alternative listings for one property:** `pale institutional off-white or pale green`, `oak or walnut`, `cream or ivory`, `late afternoon or early evening`, `italic serif or italic sans-serif`, `bold or semibold`. Pick ONE and commit. `or` is reserved for the loader's exclusive-choice idiom (`'YES' or 'NO'`), not captioner hedging.\n\n**Typography specifically:** name ONE typeface category (serif OR sans-serif OR display OR script OR monospace), ONE weight (bold/regular/light/medium), ONE style (italic OR upright). Never two joined by `or`.\n\n**Banned \"implied/suggested\" hedges:** `a desk corner implied`, `a chair suggested beneath the figure`, `a building hinted at`, `a shadow that reads as a person`. If it's in the scene, paint it concretely. If it isn't, leave it out. Forbidden words: `implied, suggested, hinted, barely visible, possibly, perhaps, maybe, might be, could be, reads as, almost`.\n\n**Exhaustive content preservation.** When the user provides enumerable content — schedules, itineraries, lists, menu items, steps, names, times — every item must appear in the output. Use as many text elements as needed; never sacrifice completeness for layout.\n\n**Named prompt elements MUST appear.** Every explicitly-named visual unit in the user prompt MUST appear as its own element:\n- Input `text:` sections — every entry becomes its own text element, verbatim. Zero tolerance: 3 entries in input → ≥3 text elements in output. Empty `text: []` is the only case where text elements may be omitted on that basis.\n- Quoted strings (single or double quotes) — each is its own text element.\n- Speech bubbles / dialogue callouts / thought bubbles / captions — each gets a text element for the quoted string AND an obj element for the bubble/balloon/container.\n- Named decorative elements (`small medical cross icon top-left`, `airplane arc trajectory`, `flame-lick flourish at the tail`) — each gets its own obj.\n- Named badges / chips / CTAs / strips — each gets its own obj (and text if it carries a quoted string).\n- Named accents / graphic devices (`hairline rule`, `dot grid`, `accent line`, `divider`) — each gets its own obj UNLESS it's a scene-wide overlay belonging in `background`.\n\n**Test before emitting:** count named visual units in the user prompt; element list must contain at least that many.\n\n**No placeholder enumeration.** When the imagined image contains a sequentially-numbered, alphabetically-labeled, or otherwise individually-identified set (stones numbered 1–50, parking spaces A1–A20, place cards `1st`–`12th`, a periodic table of 118 elements, a calendar grid of 31 dates, a 22-name team roster), EACH item is its own element. No `etc.`, no `and so on`, no `6 through 49`, no single obj grouping all into one cluster. List ALL of them.\n\nThe \"dense unenumerable group\" exception (crowd of thousands, field of wildflowers, starry sky) does NOT apply to enumerable sets — if items are sequentially identified, they're enumerable BY DEFINITION.\n\n**Don't invent visual concepts the user didn't ask for.** Forbidden without explicit user request: `glitch art`, `wireframe overlay`, `mesh that fragments the body`, `digital artifacts`, `dissolved`, `decompose`. If the prompt asks for a cinematic photo of a journalist, render a cinematic photo of a journalist — not a glitch-art composite.\n\n## PLANNING — turn the user idea into elements\n\n### 1. Pick a medium\n\n`photograph | illustration | 3D render | graphic design` — applies as natural-language framing inside HLD/background, NOT as a structured slot.\n\nDecision: **DESIGNED artifact vs CAPTURED / DRAWN / RENDERED moment.**\n- **graphic design** — poster, book cover, album cover, magazine cover, flyer, banner, social post, sticker, logo, wordmark, packaging, app icon, UI mockup, infographic, menu, greeting card, ticket, signage. If a human designer would sit at a desk to make it.\n- **photograph** — portrait, landscape, lifestyle, street, sport, wildlife, food, product, fashion editorial (when described as a photograph). Default for ambiguous everyday scenes.\n- **illustration** — cartoon, anime, manga, comic, watercolor, oil painting, ink, vector, pixel art, children's book illustration, named studios (Ghibli, KyoAni, Pixar 2D).\n- **3D render** — CGI, octane/unreal/blender, hyperrealistic product render, arch viz, isometric low-poly, voxel, named 3D studios.\n\nSilent / ambiguous → photograph (default). The subject's reality status does NOT override this default — wizards, dragons, aliens, robots in a photograph are valid; the brief must explicitly ASK for illustration / painting / render to get one.\n\nImperative verbs at the start (\"Illustrate a…\", \"Paint a…\", \"Draw a…\", \"Render a…\") are NOT medium signals — they mean \"depict / show\". Default to photograph unless an explicit medium-noun or style name appears.\n\n### 2. Style commitment\n\nInside HLD/background prose, name the style ONCE (`Studio Ghibli animation`, `Pixar 3D animation`, `35mm film photograph`, `iPhone photo`, `editorial digital painting`, `flat vector illustration`). Keep it short — recognizable style names are enough; the renderer knows them. Don't append technique detail (`with hand-painted gouache backgrounds`) on top of well-known names.\n\n**\"Professional picture/photo/portrait\" of a person means PROFESSIONAL CONTEXT, not professional camera equipment.** Read as corporate headshot, LinkedIn profile, business bio — neutral business attire, soft even daylight, neutral backdrop, friendly approachable expression. NOT dramatic studio rim-lighting, creamy DSLR bokeh, dark moody backdrop.\n\n### 3. Photoreal defaults — AVOID \"warm\"\n\nFor photographic prompts (no specified medium beyond `photo`/`photorealistic`/`selfie`/real-world scene):\n- Default to iPhone aesthetic — phone snapshot, ambient natural light, neutral white balance, accurate (not flattering) skin tones, ordinary framing. AVOID DSLR-magazine markers (creamy bokeh, telephoto compression, dramatic rim lighting, cinematic grade) — those signal AI-generation.\n- Default lighting framing: `natural daylight`, `overcast daylight`, `diffused daylight`, `cool-neutral white balance`. The word **\"warm\"** (in any phrase: `warm light`, `warm window light`, `warm tone`, `warm grading`) is BANNED as a grading adjective — it triggers the amber/golden AI look that ruins photorealism. When a scene physically has a warm-coloured light source (candle, sodium streetlamp, sunset), describe the SOURCE concretely (`candle flame`, `sodium streetlamp`) and the colour of the LIGHT POOL (`amber pool from the candle`) — but the global grade stays neutral.\n- Default composition: prefer non-centered framing (off-center, rule-of-thirds, asymmetrical, leading lines) for portraits, products, single-subject scenes. Use centered framing ONLY when the prompt explicitly calls for it (`centered`, `symmetrical`, `mandala`, `kaleidoscope`) or when the genre is inherently symmetric.\n- No motion blur in candid/realistic/iPhone-aesthetic photos. Motion blur is a craft signature (long-exposure pans, light streaks); using it in a candid signals AI. Real phone snapshots freeze the moment.\n- Saturation: don't stack `vibrant + bright + intense + saturated + electric + neon` for a neutral subject. Mention saturation ONCE (in HLD or background) only when the prompt explicitly asks.\n\n### 4. Populate underspecified scenes\n\nWhen the brief is sparse, don't render only what's explicitly named. Real scenes are populated. Add believable secondary subjects, micro-props that imply the subject's life, environmental texture, small narrative moments. Each invented element should belong in the world the brief implies — a paddy-field food stall plausibly has a chicken, a sauce bowl, a hand-painted price sign, a lantern.\n\n**Populate by depth layer.** Foreground (often-skipped), midground, background — each gets its own content. A foreground crop (an out-of-focus leaf at the bottom corner, the rim of a bowl, a fly mid-air close to camera) separates a real photograph from a postcard.\n\n**Commit to a specific cultural / regional identity.** \"Southeast Asian village\" is a hedge that produces generic AI visuals. \"Vietnamese pho stall by the rice paddies outside Hoi An\" is a real place. Specific commitment shapes architecture, signage script, food, dress, props.\n\n**Built environments need text everywhere.** Real shops, stalls, restaurants, vehicles, signage carry text on practically every surface. Generate text generously: shop name sign, sub-signs (`OPEN` / `TODAY'S SPECIAL`), menu board with handwritten items, price labels, jar/bottle labels, name tags, posters, fortune slips, vehicle/equipment labels, sponsor logos. `text: []` is almost always wrong for built environments — if your scene has a shop/stall/restaurant/workshop/market/vehicle, populate text. Specific content, never `various labels` or `menu items`.\n\n**Override:** when the brief explicitly says `minimal`, `sparse`, `empty`, `lonely`, `isolated`, `quiet`, `still`, `negative space`, `alone`, `single subject`, `in the middle of nowhere`, respect the restraint and skip populate.\n\n**Fantastical / sci-fi / fantasy / futuristic briefs get a populate bonus.** Stack sky drama (galaxies, ringed planets, multiple moons, nebulae), opposing focal points (volcano right / waterfall left), mid-distance scale anchors (crystal columns, futuristic cityscape, megastructures), light/energy effects throughout, exotic architecture/geology, deeply saturated palettes.\n\n## TEXT HANDLING\n\nFor each text element:\n- `text` — literal characters appearing in the image, verbatim. Preserve diacritics, capitalization, punctuation. Never transliterate or strip.\n- `bbox` — optional, same coordinate system as obj elements.\n- `desc` — free-form prose covering size, location, font style, color, orientation, visual effects.\n\n**Sources of text to include:**\n1. **User-quoted text** (single OR double quotes) — verbatim, exact characters.\n2. **Format-required text** — headlines, taglines, author names, dates, venues, CTA copy, brand names, publisher marks, edition numbers (when format implies them).\n3. **In-scene contextual text** — signage, labels, license plates, badges, jersey numbers, t-shirt prints, awnings, neon signs, name tags.\n4. **Numeric content** — race numbers, jersey numbers, dates, prices, scores, time displays, address numbers. Numbers ARE text.\n5. **Prominent product brand text** — if an element names a prominent product (bottle, cosmetic, package, beverage) and the user didn't supply a real brand, invent a complete brand identity and list every label as text elements.\n\n**Rules:**\n- Exhaustive: if a viewer could read it, it goes in the list.\n- Each text element appears ONCE in the list. Do NOT also describe its characters in `description` — refer by role/position instead.\n- Use `\\n` for line breaks WITHIN a single text element (multi-line sign, stacked headline). Use SEPARATE list items for visually distinct text blocks.\n- For stylized hero typography where each letter is a distinct visual unit, stack with `\\n` at natural word breaks — long single-line stylized titles produce typos and dropped letters. e.g., `\"ENTRE\\nVERSOS E\\nCONTOS\"` not `\"ENTRE VERSOS E CONTOS\"`.\n- **Language scoping:** `scene`/`elements`/`description`/position descriptors are always in ENGLISH regardless of the user's brief language. Only the literal `text` field characters follow the user's brief language. Portuguese brief → English prose + Portuguese `text:` content.\n\n## POP CULTURE, BRANDS, NAMED REFERENCES\n\nWhen the user idea names or clearly implies a brand, trademark, product (sneaker/car/device), public figure, athlete, musician, actor, fictional character, film, show, game, franchise, team — the output MUST carry an explicit named reference in the relevant element `desc`, not a generic stand-in describing the look.\n\nDon't replace `Nike Dunk Low Panda` with `black and white retro sneakers`, `Spider-Man` with `a red-and-blue masked superhero`, `The Beatles` with `four men in matching suits` — unless the user asked for an anonymous lookalike. Name the specific thing the user pointed at.\n\n## TRANSPARENT BACKGROUND\n\nIf the user's idea calls for transparent background, transparent canvas, alpha channel, cutout/isolated subject, sticker-style with no backdrop, or similar, the `background` field MUST be exactly this string, verbatim and nothing else: `transparent background`\n\nDo not paraphrase (no `clear backdrop`, `empty alpha`, `no background`, `PNG transparency`).\n\nIn `high_level_description`, include the literal phrase `on a transparent background`.\n\n[USER]\nTARGET IMAGE ASPECT RATIO: {{ratio}} (width:height).\nUser idea: {{original_prompt}}"
2768 ]
2769 },
2770 {
2771 "id": 115,
2772 "type": "PrimitiveStringMultiline",
2773 "pos": [
2774 5070,
2775 3150
2776 ],
2777 "size": [
2778 400,
2779 200
2780 ],
2781 "flags": [],
2782 "order": 1,
2783 "mode": 0,
2784 "inputs": [
2785 {
2786 "localized_name": "value",
2787 "name": "value",
2788 "type": "STRING",
2789 "widget": {
2790 "name": "value"
2791 },
2792 "link": 180
2793 }
2794 ],
2795 "outputs": [
2796 {
2797 "localized_name": "STRING",
2798 "name": "STRING",
2799 "type": "STRING",
2800 "links": [
2801 238
2802 ]
2803 }
2804 ],
2805 "title": "User Prompt",
2806 "properties": {
2807 "Node name for S&R": "PrimitiveStringMultiline",
2808 "cnr_id": "comfy-core",
2809 "ver": "0.23.0",
2810 "enableTabs": false,
2811 "hasSecondTab": false,
2812 "secondTabOffset": 80,
2813 "secondTabText": "Send Back",
2814 "secondTabWidth": 65,
2815 "tabWidth": 65,
2816 "tabXOffset": 10
2817 },
2818 "widgets_values": [
2819 "# Short English Description (Positions & Lines Clear)\nBackground: Grainy black star poster, thin white layout lines cross the whole image.\n## Visual Objects Positions\n1. Lower center: Two glass chrysanthemums. Left gray bloom wrapped in white circle, a thin leader line links down to its caption; right flower iridescent blue-purple.\n2. Mid-upper: Floating shiny blue butterflies between flowers and top title.\n3. Bottom left: Cut-off silver perforated hollow sphere.\n## White Lines\nCurved diagonal dividing lines across frame; circle around left flower; straight tag line to flower note.\n## Text Positions + ComfyUI edits\n1. Top edge (left/mid/right): Date→NODE LOG, VENUS→COMFYUI, code→CFG_SCALE\n2. Four repeated top lines: BELIEF IS A CONSTRUCT → PROMPT IS A WORKFLOW\n3. Large center headline: CONSTRUCT → WORKFLOW\n4. Under left flower: (change is INEVITABLE) → (tweak NODES for variation)\n5. Right side paragraph: Rewritten text about ComfyUI prompts & samplers\n6. Bottom right: Decorative barcode, unchanged.\n\nStyle: Futuristic cyber botanic magazine cover themed around ComfyUI workflows."
2820 ]
2821 },
2822 {
2823 "id": 163,
2824 "type": "StringReplace",
2825 "pos": [
2826 5580,
2827 2540
2828 ],
2829 "size": [
2830 400,
2831 280
2832 ],
2833 "flags": [],
2834 "order": 2,
2835 "mode": 0,
2836 "inputs": [
2837 {
2838 "localized_name": "string",
2839 "name": "string",
2840 "type": "STRING",
2841 "widget": {
2842 "name": "string"
2843 },
2844 "link": 228
2845 },
2846 {
2847 "localized_name": "replace",
2848 "name": "replace",
2849 "type": "STRING",
2850 "widget": {
2851 "name": "replace"
2852 },
2853 "link": 238
2854 }
2855 ],
2856 "outputs": [
2857 {
2858 "localized_name": "STRING",
2859 "name": "STRING",
2860 "type": "STRING",
2861 "links": [
2862 239
2863 ]
2864 }
2865 ],
2866 "properties": {
2867 "Node name for S&R": "StringReplace",
2868 "cnr_id": "comfy-core",
2869 "ver": "0.24.0",
2870 "enableTabs": false,
2871 "hasSecondTab": false,
2872 "secondTabOffset": 80,
2873 "secondTabText": "Send Back",
2874 "secondTabWidth": 65,
2875 "tabWidth": 65,
2876 "tabXOffset": 10
2877 },
2878 "widgets_values": [
2879 "",
2880 "{{original_prompt}}",
2881 ""
2882 ]
2883 },
2884 {
2885 "id": 164,
2886 "type": "PreviewAny",
2887 "pos": [
2888 5400,
2889 3430
2890 ],
2891 "size": [
2892 230,
2893 180
2894 ],
2895 "flags": [],
2896 "order": 3,
2897 "mode": 0,
2898 "inputs": [
2899 {
2900 "localized_name": "source",
2901 "name": "source",
2902 "type": "*",
2903 "link": 235
2904 }
2905 ],
2906 "outputs": [
2907 {
2908 "localized_name": "STRING",
2909 "name": "STRING",
2910 "type": "STRING",
2911 "links": [
2912 240
2913 ]
2914 }
2915 ],
2916 "properties": {
2917 "Node name for S&R": "PreviewAny",
2918 "cnr_id": "comfy-core",
2919 "ver": "0.24.0",
2920 "enableTabs": false,
2921 "hasSecondTab": false,
2922 "secondTabOffset": 80,
2923 "secondTabText": "Send Back",
2924 "secondTabWidth": 65,
2925 "tabWidth": 65,
2926 "tabXOffset": 10
2927 },
2928 "widgets_values": [
2929 null,
2930 null,
2931 null
2932 ]
2933 },
2934 {
2935 "id": 165,
2936 "type": "PreviewAny",
2937 "pos": [
2938 5390,
2939 3850
2940 ],
2941 "size": [
2942 230,
2943 180
2944 ],
2945 "flags": [],
2946 "order": 4,
2947 "mode": 0,
2948 "inputs": [
2949 {
2950 "localized_name": "source",
2951 "name": "source",
2952 "type": "*",
2953 "link": 237
2954 }
2955 ],
2956 "outputs": [
2957 {
2958 "localized_name": "STRING",
2959 "name": "STRING",
2960 "type": "STRING",
2961 "links": [
2962 242
2963 ]
2964 }
2965 ],
2966 "properties": {
2967 "Node name for S&R": "PreviewAny",
2968 "cnr_id": "comfy-core",
2969 "ver": "0.24.0",
2970 "enableTabs": false,
2971 "hasSecondTab": false,
2972 "secondTabOffset": 80,
2973 "secondTabText": "Send Back",
2974 "secondTabWidth": 65,
2975 "tabWidth": 65,
2976 "tabXOffset": 10
2977 },
2978 "widgets_values": [
2979 null,
2980 null,
2981 null
2982 ]
2983 },
2984 {
2985 "id": 166,
2986 "type": "ComfyMathExpression",
2987 "pos": [
2988 5100,
2989 3420
2990 ],
2991 "size": [
2992 230,
2993 190
2994 ],
2995 "flags": {
2996 "collapsed": false
2997 },
2998 "order": 5,
2999 "mode": 0,
3000 "inputs": [
3001 {
3002 "label": "a",
3003 "localized_name": "values.a",
3004 "name": "values.a",
3005 "type": "FLOAT,INT,BOOLEAN",
3006 "link": 253
3007 },
3008 {
3009 "label": "b",
3010 "localized_name": "values.b",
3011 "name": "values.b",
3012 "shape": 7,
3013 "type": "FLOAT,INT,BOOLEAN",
3014 "link": null
3015 }
3016 ],
3017 "outputs": [
3018 {
3019 "localized_name": "FLOAT",
3020 "name": "FLOAT",
3021 "type": "FLOAT",
3022 "links": null
3023 },
3024 {
3025 "localized_name": "INT",
3026 "name": "INT",
3027 "type": "INT",
3028 "links": [
3029 235
3030 ]
3031 },
3032 {
3033 "localized_name": "BOOL",
3034 "name": "BOOL",
3035 "type": "BOOLEAN",
3036 "links": null
3037 }
3038 ],
3039 "properties": {
3040 "Node name for S&R": "ComfyMathExpression",
3041 "cnr_id": "comfy-core",
3042 "ver": "0.23.0",
3043 "enableTabs": false,
3044 "hasSecondTab": false,
3045 "secondTabOffset": 80,
3046 "secondTabText": "Send Back",
3047 "secondTabWidth": 65,
3048 "tabWidth": 65,
3049 "tabXOffset": 10
3050 },
3051 "widgets_values": [
3052 "max(((a + 15) // 16) * 16, 256)"
3053 ]
3054 },
3055 {
3056 "id": 167,
3057 "type": "ComfyMathExpression",
3058 "pos": [
3059 5100,
3060 3840
3061 ],
3062 "size": [
3063 230,
3064 190
3065 ],
3066 "flags": {
3067 "collapsed": false
3068 },
3069 "order": 6,
3070 "mode": 0,
3071 "inputs": [
3072 {
3073 "label": "a",
3074 "localized_name": "values.a",
3075 "name": "values.a",
3076 "type": "FLOAT,INT,BOOLEAN",
3077 "link": 255
3078 },
3079 {
3080 "label": "b",
3081 "localized_name": "values.b",
3082 "name": "values.b",
3083 "shape": 7,
3084 "type": "FLOAT,INT,BOOLEAN",
3085 "link": null
3086 }
3087 ],
3088 "outputs": [
3089 {
3090 "localized_name": "FLOAT",
3091 "name": "FLOAT",
3092 "type": "FLOAT",
3093 "links": null
3094 },
3095 {
3096 "localized_name": "INT",
3097 "name": "INT",
3098 "type": "INT",
3099 "links": [
3100 237
3101 ]
3102 },
3103 {
3104 "localized_name": "BOOL",
3105 "name": "BOOL",
3106 "type": "BOOLEAN",
3107 "links": null
3108 }
3109 ],
3110 "properties": {
3111 "Node name for S&R": "ComfyMathExpression",
3112 "cnr_id": "comfy-core",
3113 "ver": "0.23.0",
3114 "enableTabs": false,
3115 "hasSecondTab": false,
3116 "secondTabOffset": 80,
3117 "secondTabText": "Send Back",
3118 "secondTabWidth": 65,
3119 "tabWidth": 65,
3120 "tabXOffset": 10
3121 },
3122 "widgets_values": [
3123 "max(((a + 15) // 16) * 16, 256)"
3124 ]
3125 },
3126 {
3127 "id": 169,
3128 "type": "StringReplace",
3129 "pos": [
3130 5700,
3131 3240
3132 ],
3133 "size": [
3134 400,
3135 280
3136 ],
3137 "flags": [],
3138 "order": 7,
3139 "mode": 0,
3140 "inputs": [
3141 {
3142 "localized_name": "string",
3143 "name": "string",
3144 "type": "STRING",
3145 "widget": {
3146 "name": "string"
3147 },
3148 "link": 239
3149 },
3150 {
3151 "localized_name": "replace",
3152 "name": "replace",
3153 "type": "STRING",
3154 "widget": {
3155 "name": "replace"
3156 },
3157 "link": 240
3158 }
3159 ],
3160 "outputs": [
3161 {
3162 "localized_name": "STRING",
3163 "name": "STRING",
3164 "type": "STRING",
3165 "links": [
3166 241
3167 ]
3168 }
3169 ],
3170 "properties": {
3171 "Node name for S&R": "StringReplace",
3172 "cnr_id": "comfy-core",
3173 "ver": "0.24.0",
3174 "enableTabs": false,
3175 "hasSecondTab": false,
3176 "secondTabOffset": 80,
3177 "secondTabText": "Send Back",
3178 "secondTabWidth": 65,
3179 "tabWidth": 65,
3180 "tabXOffset": 10
3181 },
3182 "widgets_values": [
3183 "",
3184 "{{width}}",
3185 ""
3186 ]
3187 },
3188 {
3189 "id": 170,
3190 "type": "StringReplace",
3191 "pos": [
3192 5690,
3193 3800
3194 ],
3195 "size": [
3196 400,
3197 280
3198 ],
3199 "flags": [],
3200 "order": 8,
3201 "mode": 0,
3202 "inputs": [
3203 {
3204 "localized_name": "string",
3205 "name": "string",
3206 "type": "STRING",
3207 "widget": {
3208 "name": "string"
3209 },
3210 "link": 241
3211 },
3212 {
3213 "localized_name": "replace",
3214 "name": "replace",
3215 "type": "STRING",
3216 "widget": {
3217 "name": "replace"
3218 },
3219 "link": 242
3220 }
3221 ],
3222 "outputs": [
3223 {
3224 "localized_name": "STRING",
3225 "name": "STRING",
3226 "type": "STRING",
3227 "links": [
3228 257
3229 ]
3230 }
3231 ],
3232 "properties": {
3233 "Node name for S&R": "StringReplace",
3234 "cnr_id": "comfy-core",
3235 "ver": "0.24.0",
3236 "enableTabs": false,
3237 "hasSecondTab": false,
3238 "secondTabOffset": 80,
3239 "secondTabText": "Send Back",
3240 "secondTabWidth": 65,
3241 "tabWidth": 65,
3242 "tabXOffset": 10
3243 },
3244 "widgets_values": [
3245 "",
3246 "{{height}}",
3247 ""
3248 ]
3249 },
3250 {
3251 "id": 180,
3252 "type": "StringReplace",
3253 "pos": [
3254 5710,
3255 4170
3256 ],
3257 "size": [
3258 400,
3259 280
3260 ],
3261 "flags": [],
3262 "order": 9,
3263 "mode": 0,
3264 "inputs": [
3265 {
3266 "localized_name": "string",
3267 "name": "string",
3268 "type": "STRING",
3269 "widget": {
3270 "name": "string"
3271 },
3272 "link": 257
3273 },
3274 {
3275 "localized_name": "replace",
3276 "name": "replace",
3277 "type": "STRING",
3278 "widget": {
3279 "name": "replace"
3280 },
3281 "link": 258
3282 }
3283 ],
3284 "outputs": [
3285 {
3286 "localized_name": "STRING",
3287 "name": "STRING",
3288 "type": "STRING",
3289 "links": [
3290 259
3291 ]
3292 }
3293 ],
3294 "properties": {
3295 "Node name for S&R": "StringReplace",
3296 "cnr_id": "comfy-core",
3297 "ver": "0.24.0",
3298 "enableTabs": false,
3299 "hasSecondTab": false,
3300 "secondTabOffset": 80,
3301 "secondTabText": "Send Back",
3302 "secondTabWidth": 65,
3303 "tabWidth": 65,
3304 "tabXOffset": 10
3305 },
3306 "widgets_values": [
3307 "",
3308 "{{ratio}}",
3309 ""
3310 ]
3311 },
3312 {
3313 "id": 183,
3314 "type": "PrimitiveInt",
3315 "pos": [
3316 4720,
3317 3420
3318 ],
3319 "size": [
3320 270,
3321 110
3322 ],
3323 "flags": [],
3324 "order": 10,
3325 "mode": 0,
3326 "inputs": [
3327 {
3328 "localized_name": "value",
3329 "name": "value",
3330 "type": "INT",
3331 "widget": {
3332 "name": "value"
3333 },
3334 "link": 254
3335 }
3336 ],
3337 "outputs": [
3338 {
3339 "localized_name": "INT",
3340 "name": "INT",
3341 "type": "INT",
3342 "links": [
3343 253
3344 ]
3345 }
3346 ],
3347 "properties": {
3348 "Node name for S&R": "PrimitiveInt"
3349 },
3350 "widgets_values": [
3351 1024,
3352 "fixed"
3353 ]
3354 },
3355 {
3356 "id": 184,
3357 "type": "PrimitiveInt",
3358 "pos": [
3359 4720,
3360 3850
3361 ],
3362 "size": [
3363 270,
3364 110
3365 ],
3366 "flags": [],
3367 "order": 11,
3368 "mode": 0,
3369 "inputs": [
3370 {
3371 "localized_name": "value",
3372 "name": "value",
3373 "type": "INT",
3374 "widget": {
3375 "name": "value"
3376 },
3377 "link": 256
3378 }
3379 ],
3380 "outputs": [
3381 {
3382 "localized_name": "INT",
3383 "name": "INT",
3384 "type": "INT",
3385 "links": [
3386 255
3387 ]
3388 }
3389 ],
3390 "properties": {
3391 "Node name for S&R": "PrimitiveInt"
3392 },
3393 "widgets_values": [
3394 1024,
3395 "fixed"
3396 ]
3397 },
3398 {
3399 "id": 185,
3400 "type": "PrimitiveStringMultiline",
3401 "pos": [
3402 4710,
3403 4340
3404 ],
3405 "size": [
3406 400,
3407 200
3408 ],
3409 "flags": [],
3410 "order": 12,
3411 "mode": 0,
3412 "inputs": [
3413 {
3414 "localized_name": "value",
3415 "name": "value",
3416 "type": "STRING",
3417 "widget": {
3418 "name": "value"
3419 },
3420 "link": 260
3421 }
3422 ],
3423 "outputs": [
3424 {
3425 "localized_name": "STRING",
3426 "name": "STRING",
3427 "type": "STRING",
3428 "links": [
3429 258
3430 ]
3431 }
3432 ],
3433 "title": "Text String (ratio)",
3434 "properties": {
3435 "Node name for S&R": "PrimitiveStringMultiline"
3436 },
3437 "widgets_values": [
3438 "1:1"
3439 ]
3440 }
3441 ],
3442 "groups": [],
3443 "links": [
3444 {
3445 "id": 180,
3446 "origin_id": -10,
3447 "origin_slot": 0,
3448 "target_id": 115,
3449 "target_slot": 0,
3450 "type": "STRING"
3451 },
3452 {
3453 "id": 228,
3454 "origin_id": 114,
3455 "origin_slot": 0,
3456 "target_id": 163,
3457 "target_slot": 0,
3458 "type": "STRING"
3459 },
3460 {
3461 "id": 235,
3462 "origin_id": 166,
3463 "origin_slot": 1,
3464 "target_id": 164,
3465 "target_slot": 0,
3466 "type": "INT"
3467 },
3468 {
3469 "id": 237,
3470 "origin_id": 167,
3471 "origin_slot": 1,
3472 "target_id": 165,
3473 "target_slot": 0,
3474 "type": "INT"
3475 },
3476 {
3477 "id": 238,
3478 "origin_id": 115,
3479 "origin_slot": 0,
3480 "target_id": 163,
3481 "target_slot": 1,
3482 "type": "STRING"
3483 },
3484 {
3485 "id": 239,
3486 "origin_id": 163,
3487 "origin_slot": 0,
3488 "target_id": 169,
3489 "target_slot": 0,
3490 "type": "STRING"
3491 },
3492 {
3493 "id": 240,
3494 "origin_id": 164,
3495 "origin_slot": 0,
3496 "target_id": 169,
3497 "target_slot": 1,
3498 "type": "STRING"
3499 },
3500 {
3501 "id": 241,
3502 "origin_id": 169,
3503 "origin_slot": 0,
3504 "target_id": 170,
3505 "target_slot": 0,
3506 "type": "STRING"
3507 },
3508 {
3509 "id": 242,
3510 "origin_id": 165,
3511 "origin_slot": 0,
3512 "target_id": 170,
3513 "target_slot": 1,
3514 "type": "STRING"
3515 },
3516 {
3517 "id": 253,
3518 "origin_id": 183,
3519 "origin_slot": 0,
3520 "target_id": 166,
3521 "target_slot": 0,
3522 "type": "INT"
3523 },
3524 {
3525 "id": 254,
3526 "origin_id": -10,
3527 "origin_slot": 1,
3528 "target_id": 183,
3529 "target_slot": 0,
3530 "type": "INT"
3531 },
3532 {
3533 "id": 255,
3534 "origin_id": 184,
3535 "origin_slot": 0,
3536 "target_id": 167,
3537 "target_slot": 0,
3538 "type": "INT"
3539 },
3540 {
3541 "id": 256,
3542 "origin_id": -10,
3543 "origin_slot": 2,
3544 "target_id": 184,
3545 "target_slot": 0,
3546 "type": "INT"
3547 },
3548 {
3549 "id": 257,
3550 "origin_id": 170,
3551 "origin_slot": 0,
3552 "target_id": 180,
3553 "target_slot": 0,
3554 "type": "STRING"
3555 },
3556 {
3557 "id": 258,
3558 "origin_id": 185,
3559 "origin_slot": 0,
3560 "target_id": 180,
3561 "target_slot": 1,
3562 "type": "STRING"
3563 },
3564 {
3565 "id": 259,
3566 "origin_id": 180,
3567 "origin_slot": 0,
3568 "target_id": -20,
3569 "target_slot": 0,
3570 "type": "STRING"
3571 },
3572 {
3573 "id": 260,
3574 "origin_id": -10,
3575 "origin_slot": 3,
3576 "target_id": 185,
3577 "target_slot": 0,
3578 "type": "STRING"
3579 }
3580 ],
3581 "extra": []
3582 }
3583 ]
3584 },
3585 "config": [],
3586 "extra": {
3587 "ds": {
3588 "scale": 0.5248135748243258,
3589 "offset": [
3590 -5604.481840084383,
3591 263.1359905047749
3592 ]
3593 },
3594 "frontendVersion": "1.45.15",
3595 "VHS_KeepIntermediate": true,
3596 "VHS_MetadataImage": true,
3597 "VHS_latentpreview": false,
3598 "VHS_latentpreviewrate": 0
3599 },
3600 "version": 0.4
3601}