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

Ideogram v4: 文生图

Ideogram v4: Text to Image

输入文本提示词或结构化JSON描述。使用Ideogram 4.0生成精确布局、颜色和样式控制的图像。

图像 8 个节点 33 次使用 ComfyUI ≥ 0.24.0 ComfyUI 117 KB

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

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

需要的权重

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

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