ComfyPilotComfyPilot
工作流 / 图像 / MOSS-Image Base:版式控制生图
MOSS-Image Base:版式控制生图

MOSS-Image Base:版式控制生图

MOSS-Image Base: Layout-Guided Text to Image

使用 MOSS-Image 基础检查点,在「创建边界框」版式与文本提示下生成图像。每个框带有独立说明,文字框会渲染其中的文字。便于在相同版式上对比基础版与指令微调检查点。

图像 10 个节点 44 次使用 ComfyUI ≥ 0.42.0 ComfyUI 85 KB

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

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

需要的权重

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

flux2-vae_small.safetensors 在模型库查看
moss_image_base_int8_convrot.safetensors 在模型库查看
qwen3.5_9b_w4a8_gptq.safetensors 在模型库查看

节点构成

MarkdownNote × 4
SaveImage × 1
3301b744-2960-415a-83b0-fe8a89d99fdb × 1
ResolutionSelector × 1
CreateBoundingBoxes × 1
MOSSImageLayoutPrompt × 1
PreviewAny × 1

官方标注的模型

MOSS-Image

工作流 JSON

和上面「下载工作流 JSON」是同一份文件。

1{
2 "id": "e8f30439-267f-45de-b260-db0d114b2c85",
3 "revision": 0,
4 "last_node_id": 38,
5 "last_link_id": 78,
6 "nodes": [
7 {
8 "id": 9,
9 "type": "SaveImage",
10 "pos": [
11 1210,
12 -40
13 ],
14 "size": [
15 570,
16 700
17 ],
18 "flags": [],
19 "order": 9,
20 "mode": 0,
21 "inputs": [
22 {
23 "name": "images",
24 "type": "IMAGE",
25 "link": 22
26 }
27 ],
28 "outputs": [
29 {
30 "name": "images",
31 "type": "IMAGE",
32 "links": null
33 }
34 ],
35 "properties": {
36 "Node name for S&R": "SaveImage"
37 },
38 "widgets_values": [
39 "moss_image"
40 ],
41 "widgets_values_named": {
42 "filename_prefix": "moss_image"
43 }
44 },
45 {
46 "id": 18,
47 "type": "3301b744-2960-415a-83b0-fe8a89d99fdb",
48 "pos": [
49 710,
50 -40
51 ],
52 "size": [
53 430,
54 680
55 ],
56 "flags": [],
57 "order": 8,
58 "mode": 0,
59 "inputs": [
60 {
61 "label": "positive_prompt",
62 "name": "value",
63 "type": "STRING",
64 "widget": {
65 "name": "value"
66 },
67 "link": 73
68 },
69 {
70 "label": "enable_prompt_enhancer",
71 "name": "switch",
72 "type": "BOOLEAN",
73 "widget": {
74 "name": "switch"
75 },
76 "link": null
77 },
78 {
79 "label": "prompt_enhancer_seed",
80 "name": "sampling_mode.seed",
81 "type": "INT",
82 "widget": {
83 "name": "sampling_mode.seed"
84 },
85 "link": null
86 },
87 {
88 "label": "negative_prompt",
89 "name": "text",
90 "type": "STRING",
91 "widget": {
92 "name": "text"
93 },
94 "link": null
95 },
96 {
97 "name": "width",
98 "type": "INT",
99 "widget": {
100 "name": "width"
101 },
102 "link": 74
103 },
104 {
105 "name": "height",
106 "type": "INT",
107 "widget": {
108 "name": "height"
109 },
110 "link": 75
111 },
112 {
113 "label": "SLG",
114 "name": "switch_1",
115 "type": "BOOLEAN",
116 "widget": {
117 "name": "switch_1"
118 },
119 "link": null
120 },
121 {
122 "label": "unet_model",
123 "name": "unet_name",
124 "type": "COMBO",
125 "widget": {
126 "name": "unet_name"
127 },
128 "link": null
129 },
130 {
131 "label": "clip_model",
132 "name": "clip_name",
133 "type": "COMBO",
134 "widget": {
135 "name": "clip_name"
136 },
137 "link": null
138 },
139 {
140 "label": "vae_model",
141 "name": "vae_name",
142 "type": "COMBO",
143 "widget": {
144 "name": "vae_name"
145 },
146 "link": null
147 },
148 {
149 "label": "ref_image (for llm)",
150 "name": "video",
151 "shape": 7,
152 "type": "IMAGE",
153 "link": null
154 }
155 ],
156 "outputs": [
157 {
158 "name": "IMAGE",
159 "type": "IMAGE",
160 "links": [
161 22
162 ]
163 }
164 ],
165 "properties": {
166 "previewExposures": []
167 },
168 "widgets_values": [
169 "",
170 false,
171 0,
172 "nsfw, worst quality, bad anatomy, watermark, jpeg artifact",
173 1024,
174 1024,
175 246188418917220,
176 25,
177 2.5,
178 true,
179 "er_sde",
180 "simple",
181 "moss_image_base_int8_convrot.safetensors",
182 "qwen3.5_9b_w4a8_gptq.safetensors",
183 "flux2-vae_small.safetensors"
184 ],
185 "widgets_values_named": {
186 "value": "",
187 "switch": false,
188 "sampling_mode.seed": 0,
189 "text": "nsfw, worst quality, bad anatomy, watermark, jpeg artifact",
190 "width": 1024,
191 "height": 1024,
192 "seed": 246188418917220,
193 "steps": 25,
194 "cfg": 2.5,
195 "switch_1": true,
196 "sampler_name": "er_sde",
197 "scheduler": "simple",
198 "unet_name": "moss_image_base_int8_convrot.safetensors",
199 "clip_name": "qwen3.5_9b_w4a8_gptq.safetensors",
200 "vae_name": "flux2-vae_small.safetensors"
201 }
202 },
203 {
204 "id": 20,
205 "type": "MarkdownNote",
206 "pos": [
207 -2360,
208 -70
209 ],
210 "size": [
211 580,
212 630
213 ],
214 "flags": [],
215 "order": 0,
216 "mode": 0,
217 "inputs": [],
218 "outputs": [],
219 "properties": [],
220 "widgets_values": [
221 "Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Links\n\n- [Hugging Face:Comfy-Org/MOSS-Image](https://huggingface.co/Comfy-Org/MOSS-Image)\n- [ModelScope:Comfy-Org/MOSS-Image](https://modelscope.cn/models/Comfy-Org/MOSS-Image)\n\n**diffusion_models**\n\n- [moss_image_base_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/diffusion_models/moss_image_base_int8_convrot.safetensors) (5.04 GB)\n\n**text_encoders**\n\n- [qwen3.5_9b_w4a8_gptq.safetensors](https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/text_encoders/qwen3.5_9b_w4a8_gptq.safetensors) (9.08 GB)\n\n**vae**\n\n- [flux2-vae_small.safetensors](https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/vae/flux2-vae_small.safetensors) (249.5 MB)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 diffusion_models/\n│ │ └── moss_image_base_int8_convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ └── qwen3.5_9b_w4a8_gptq.safetensors\n│ └── 📂 vae/\n│ └── flux2-vae_small.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"
222 ],
223 "widgets_values_named": {
224 "text": "Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Links\n\n- [Hugging Face:Comfy-Org/MOSS-Image](https://huggingface.co/Comfy-Org/MOSS-Image)\n- [ModelScope:Comfy-Org/MOSS-Image](https://modelscope.cn/models/Comfy-Org/MOSS-Image)\n\n**diffusion_models**\n\n- [moss_image_base_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/diffusion_models/moss_image_base_int8_convrot.safetensors) (5.04 GB)\n\n**text_encoders**\n\n- [qwen3.5_9b_w4a8_gptq.safetensors](https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/text_encoders/qwen3.5_9b_w4a8_gptq.safetensors) (9.08 GB)\n\n**vae**\n\n- [flux2-vae_small.safetensors](https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/vae/flux2-vae_small.safetensors) (249.5 MB)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 diffusion_models/\n│ │ └── moss_image_base_int8_convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ └── qwen3.5_9b_w4a8_gptq.safetensors\n│ └── 📂 vae/\n│ └── flux2-vae_small.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"
225 },
226 "color": "#222",
227 "bgcolor": "#000"
228 },
229 {
230 "id": 29,
231 "type": "MarkdownNote",
232 "pos": [
233 -1750,
234 -70
235 ],
236 "size": [
237 520,
238 1200
239 ],
240 "flags": [],
241 "order": 1,
242 "mode": 0,
243 "inputs": [],
244 "outputs": [],
245 "properties": [],
246 "widgets_values": [
247 "## MOSS-Image capabilities and limits\n\nSources: [USERGUIDE](https://github.com/OpenMOSS/MOSS-Image/blob/main/USERGUIDE.md), README, HF Base/SFT cards; cross-checked against community benchmark notes.\n\n### Resolution\n\n| Item | Official |\n|------|----------|\n| Recommended total pixels | **1M, 1.5M, or 2M** |\n| Extrapolation range | **0.25M (512×512) to 4M (~2K)** |\n| Aspect ratio | Arbitrary; width/height must be positive multiples of **16** |\n| This template default | 1024×1024 (~1M) |\n\n### Strengths\n\n- ~**5B** single-stream DiT (Muon); FLUX.2 small VAE; Qwen-family text encoder.\n- Strong bilingual English and Chinese text rendering and auto layout; JSON Layout control for text/objects; long prompts (~**4K** tokens); anime and photorealistic.\n- **SFT** clearer text grouping/layouts; **Base** has no post-training / CFG distillation (better for community LoRAs).\n- Inputs: natural language, tag sequences, JSON layout (layout is experimental). Prefer English (most training data); Chinese supported.\n\n### Limits / notes\n\n- Auto line breaks may not match intent — use `\\n` or real newlines for precise text.\n- Turning off SLG looks more realistic but can collapse details; official negative-branch skip layer **22** (24/26 also help). kijai notes SLG can overblow anime styles.\n- Recommended negative prompt: `nsfw, worst quality, bad anatomy, watermark, jpeg artifact`\n- If VRAM is tight, lower resolution or use Sequential / CPU offload.\n- When training LoRA yourself, **freeze the text encoder**.\n- License: Apache 2.0.\n\n---\n\n## Sampling settings vs. official defaults\n\n| Setting | This template | OpenMOSS official |\n|---------|---------------|-------------------|\n| Steps | 25 | 50 |\n| CFG | 2.5 | 3 |\n| Sampler | er_sde | Euler |\n| Scheduler | simple | default |\n| Denoise | 1 | 1 |\n| Shift | 5 (model default) | 5 (same) |\n\nThis template follows the faster settings from kijai's ComfyUI MOSS-Image PR [#17095](https://github.com/comfyanonymous/ComfyUI/pull/17095). That is a speed trade-off, not a bug. For results closer to the official ones, try 50 steps and CFG 3.\n\n### Community notes\n\n- **Skip layer guidance:** can overblow anime styles; no alternative values were suggested (template keeps official layer 22). You can check the detail settings inside the subgraph\n- **Shift:** adjust with ModelSamplingAuraFlow or ModelSamplingFlux — ModelSamplingSD3 uses a completely different scale. You can enter the subgraph to adjust it\n- **SFT banding:** experimental LoRA at about −0.5 strength: [moss_image_sft_lora_blocks_21_to_49…](https://huggingface.co/Kijai/MOSS-image_experimental/blob/main/loras/moss_image_sft_lora_blocks_21_to_49_rank_512_bf16.safetensors)\n\n\n## Prompt skill\n\nThe system prompt driving the upsampler is written from the official [MOSS-Image Prompt Enhancer skill](https://github.com/OpenMOSS/MOSS-Image/blob/main/skills/moss-image-prompt-enhancer/SKILL.md). The same skill turns an idea into a caption or a Layout prompt outside ComfyUI, and it is the reference for the caption style this model was trained on."
248 ],
249 "widgets_values_named": {
250 "text": "## MOSS-Image capabilities and limits\n\nSources: [USERGUIDE](https://github.com/OpenMOSS/MOSS-Image/blob/main/USERGUIDE.md), README, HF Base/SFT cards; cross-checked against community benchmark notes.\n\n### Resolution\n\n| Item | Official |\n|------|----------|\n| Recommended total pixels | **1M, 1.5M, or 2M** |\n| Extrapolation range | **0.25M (512×512) to 4M (~2K)** |\n| Aspect ratio | Arbitrary; width/height must be positive multiples of **16** |\n| This template default | 1024×1024 (~1M) |\n\n### Strengths\n\n- ~**5B** single-stream DiT (Muon); FLUX.2 small VAE; Qwen-family text encoder.\n- Strong bilingual English and Chinese text rendering and auto layout; JSON Layout control for text/objects; long prompts (~**4K** tokens); anime and photorealistic.\n- **SFT** clearer text grouping/layouts; **Base** has no post-training / CFG distillation (better for community LoRAs).\n- Inputs: natural language, tag sequences, JSON layout (layout is experimental). Prefer English (most training data); Chinese supported.\n\n### Limits / notes\n\n- Auto line breaks may not match intent — use `\\n` or real newlines for precise text.\n- Turning off SLG looks more realistic but can collapse details; official negative-branch skip layer **22** (24/26 also help). kijai notes SLG can overblow anime styles.\n- Recommended negative prompt: `nsfw, worst quality, bad anatomy, watermark, jpeg artifact`\n- If VRAM is tight, lower resolution or use Sequential / CPU offload.\n- When training LoRA yourself, **freeze the text encoder**.\n- License: Apache 2.0.\n\n---\n\n## Sampling settings vs. official defaults\n\n| Setting | This template | OpenMOSS official |\n|---------|---------------|-------------------|\n| Steps | 25 | 50 |\n| CFG | 2.5 | 3 |\n| Sampler | er_sde | Euler |\n| Scheduler | simple | default |\n| Denoise | 1 | 1 |\n| Shift | 5 (model default) | 5 (same) |\n\nThis template follows the faster settings from kijai's ComfyUI MOSS-Image PR [#17095](https://github.com/comfyanonymous/ComfyUI/pull/17095). That is a speed trade-off, not a bug. For results closer to the official ones, try 50 steps and CFG 3.\n\n### Community notes\n\n- **Skip layer guidance:** can overblow anime styles; no alternative values were suggested (template keeps official layer 22). You can check the detail settings inside the subgraph\n- **Shift:** adjust with ModelSamplingAuraFlow or ModelSamplingFlux — ModelSamplingSD3 uses a completely different scale. You can enter the subgraph to adjust it\n- **SFT banding:** experimental LoRA at about −0.5 strength: [moss_image_sft_lora_blocks_21_to_49…](https://huggingface.co/Kijai/MOSS-image_experimental/blob/main/loras/moss_image_sft_lora_blocks_21_to_49_rank_512_bf16.safetensors)\n\n\n## Prompt skill\n\nThe system prompt driving the upsampler is written from the official [MOSS-Image Prompt Enhancer skill](https://github.com/OpenMOSS/MOSS-Image/blob/main/skills/moss-image-prompt-enhancer/SKILL.md). The same skill turns an idea into a caption or a Layout prompt outside ComfyUI, and it is the reference for the caption style this model was trained on."
251 },
252 "color": "#222",
253 "bgcolor": "#000"
254 },
255 {
256 "id": 33,
257 "type": "ResolutionSelector",
258 "pos": [
259 -1160,
260 10
261 ],
262 "size": [
263 280,
264 190
265 ],
266 "flags": [],
267 "order": 2,
268 "mode": 0,
269 "showAdvanced": true,
270 "inputs": [],
271 "outputs": [
272 {
273 "name": "width",
274 "type": "INT",
275 "links": [
276 66,
277 69,
278 74
279 ]
280 },
281 {
282 "name": "height",
283 "type": "INT",
284 "links": [
285 67,
286 70,
287 75
288 ]
289 }
290 ],
291 "properties": {
292 "Node name for S&R": "ResolutionSelector"
293 },
294 "widgets_values": [
295 "1:1 (Square)",
296 1,
297 16
298 ],
299 "widgets_values_named": {
300 "aspect_ratio": "1:1 (Square)",
301 "megapixels": 1,
302 "multiple": 16
303 }
304 },
305 {
306 "id": 34,
307 "type": "CreateBoundingBoxes",
308 "pos": [
309 -770,
310 10
311 ],
312 "size": [
313 440,
314 680
315 ],
316 "flags": [],
317 "order": 5,
318 "mode": 0,
319 "inputs": [
320 {
321 "name": "background",
322 "shape": 7,
323 "type": "IMAGE",
324 "link": null
325 },
326 {
327 "name": "bboxes",
328 "shape": 7,
329 "type": "BOUNDING_BOX,ARRAY,STRING",
330 "link": null
331 },
332 {
333 "name": "width",
334 "type": "INT",
335 "widget": {
336 "name": "width"
337 },
338 "link": 66
339 },
340 {
341 "name": "height",
342 "type": "INT",
343 "widget": {
344 "name": "height"
345 },
346 "link": 67
347 }
348 ],
349 "outputs": [
350 {
351 "name": "preview",
352 "type": "IMAGE",
353 "links": []
354 },
355 {
356 "name": "bboxes",
357 "type": "BOUNDING_BOX",
358 "links": []
359 },
360 {
361 "name": "elements",
362 "type": "ARRAY",
363 "links": [
364 72
365 ]
366 }
367 ],
368 "properties": {
369 "Node name for S&R": "CreateBoundingBoxes"
370 },
371 "widgets_values": [
372 1024,
373 1024,
374 [
375 {
376 "x": 154,
377 "y": 123,
378 "width": 748,
379 "height": 676,
380 "metadata": {
381 "type": "obj",
382 "text": "",
383 "desc": "A floating weathered bark fragment covered in velvet moss, pale pink peonies and tiny white umbel flowers, clusters of translucent quartz crystals growing out of the wood, dark olive gradient background, cinematic soft light",
384 "palette": []
385 }
386 },
387 {
388 "x": 635,
389 "y": 799,
390 "width": 384,
391 "height": 164,
392 "metadata": {
393 "type": "text",
394 "text": "MOSS",
395 "desc": "The word MOSS in a lime-green geometric display face, two stacked rows, bottom right",
396 "palette": []
397 }
398 },
399 {
400 "x": 41,
401 "y": 41,
402 "width": 594,
403 "height": 215,
404 "metadata": {
405 "type": "text",
406 "text": "floating bark, velvet moss, pale peonies, quartz crystals, dark olive gradient",
407 "desc": "Small white monospaced text block in the top left, like a prompt readout",
408 "palette": []
409 }
410 },
411 {
412 "x": 41,
413 "y": 922,
414 "width": 51,
415 "height": 51,
416 "metadata": {
417 "type": "text",
418 "text": "+",
419 "desc": "A thin white plus mark, bottom left",
420 "palette": []
421 }
422 }
423 ],
424 [
425 {
426 "x": 154,
427 "y": 123,
428 "width": 748,
429 "height": 676,
430 "metadata": {
431 "type": "obj",
432 "text": "",
433 "desc": "A floating weathered bark fragment covered in velvet moss, pale pink peonies and tiny white umbel flowers, clusters of translucent quartz crystals growing out of the wood, dark olive gradient background, cinematic soft light",
434 "palette": []
435 }
436 },
437 {
438 "x": 635,
439 "y": 799,
440 "width": 384,
441 "height": 164,
442 "metadata": {
443 "type": "text",
444 "text": "MOSS",
445 "desc": "The word MOSS in a lime-green geometric display face, two stacked rows, bottom right",
446 "palette": []
447 }
448 },
449 {
450 "x": 41,
451 "y": 41,
452 "width": 594,
453 "height": 215,
454 "metadata": {
455 "type": "text",
456 "text": "floating bark, velvet moss, pale peonies, quartz crystals, dark olive gradient",
457 "desc": "Small white monospaced text block in the top left, like a prompt readout",
458 "palette": []
459 }
460 },
461 {
462 "x": 41,
463 "y": 922,
464 "width": 51,
465 "height": 51,
466 "metadata": {
467 "type": "text",
468 "text": "+",
469 "desc": "A thin white plus mark, bottom left",
470 "palette": []
471 }
472 }
473 ]
474 ],
475 "widgets_values_named": {
476 "width": 1024,
477 "height": 1024,
478 "editor_state": [
479 {
480 "x": 154,
481 "y": 123,
482 "width": 748,
483 "height": 676,
484 "metadata": {
485 "type": "obj",
486 "text": "",
487 "desc": "A floating weathered bark fragment covered in velvet moss, pale pink peonies and tiny white umbel flowers, clusters of translucent quartz crystals growing out of the wood, dark olive gradient background, cinematic soft light",
488 "palette": []
489 }
490 },
491 {
492 "x": 635,
493 "y": 799,
494 "width": 384,
495 "height": 164,
496 "metadata": {
497 "type": "text",
498 "text": "MOSS",
499 "desc": "The word MOSS in a lime-green geometric display face, two stacked rows, bottom right",
500 "palette": []
501 }
502 },
503 {
504 "x": 41,
505 "y": 41,
506 "width": 594,
507 "height": 215,
508 "metadata": {
509 "type": "text",
510 "text": "floating bark, velvet moss, pale peonies, quartz crystals, dark olive gradient",
511 "desc": "Small white monospaced text block in the top left, like a prompt readout",
512 "palette": []
513 }
514 },
515 {
516 "x": 41,
517 "y": 922,
518 "width": 51,
519 "height": 51,
520 "metadata": {
521 "type": "text",
522 "text": "+",
523 "desc": "A thin white plus mark, bottom left",
524 "palette": []
525 }
526 }
527 ],
528 "last_incoming": [
529 {
530 "x": 154,
531 "y": 123,
532 "width": 748,
533 "height": 676,
534 "metadata": {
535 "type": "obj",
536 "text": "",
537 "desc": "A floating weathered bark fragment covered in velvet moss, pale pink peonies and tiny white umbel flowers, clusters of translucent quartz crystals growing out of the wood, dark olive gradient background, cinematic soft light",
538 "palette": []
539 }
540 },
541 {
542 "x": 635,
543 "y": 799,
544 "width": 384,
545 "height": 164,
546 "metadata": {
547 "type": "text",
548 "text": "MOSS",
549 "desc": "The word MOSS in a lime-green geometric display face, two stacked rows, bottom right",
550 "palette": []
551 }
552 },
553 {
554 "x": 41,
555 "y": 41,
556 "width": 594,
557 "height": 215,
558 "metadata": {
559 "type": "text",
560 "text": "floating bark, velvet moss, pale peonies, quartz crystals, dark olive gradient",
561 "desc": "Small white monospaced text block in the top left, like a prompt readout",
562 "palette": []
563 }
564 },
565 {
566 "x": 41,
567 "y": 922,
568 "width": 51,
569 "height": 51,
570 "metadata": {
571 "type": "text",
572 "text": "+",
573 "desc": "A thin white plus mark, bottom left",
574 "palette": []
575 }
576 }
577 ]
578 }
579 },
580 {
581 "id": 35,
582 "type": "MarkdownNote",
583 "pos": [
584 -270,
585 420
586 ],
587 "size": [
588 420,
589 240
590 ],
591 "flags": [],
592 "order": 3,
593 "mode": 0,
594 "inputs": [],
595 "outputs": [],
596 "properties": [],
597 "widgets_values": [
598 "## Layout / bounding-box flow\n\n`CreateBoundingBoxes` is where the layout is drawn: it outputs the boxes as `BOUNDING_BOX` plus an element list → `MOSS-Image Layout Prompt` turns those elements into the Layout prompt → that `prompt` is wired into `positive_prompt` of the **Text to Image (MOSS-Image)** subgraph. Remove the link to fall back to a plain text prompt.\n\nPrompt upsampler is **on** in this template, so it can rewrite the prompt and drop the layout — set `enable_prompt_upsampler` to `false` (inside the subgraph) when the boxes must survive verbatim."
599 ],
600 "widgets_values_named": {
601 "text": "## Layout / bounding-box flow\n\n`CreateBoundingBoxes` is where the layout is drawn: it outputs the boxes as `BOUNDING_BOX` plus an element list → `MOSS-Image Layout Prompt` turns those elements into the Layout prompt → that `prompt` is wired into `positive_prompt` of the **Text to Image (MOSS-Image)** subgraph. Remove the link to fall back to a plain text prompt.\n\nPrompt upsampler is **on** in this template, so it can rewrite the prompt and drop the layout — set `enable_prompt_upsampler` to `false` (inside the subgraph) when the boxes must survive verbatim."
602 },
603 "color": "#222",
604 "bgcolor": "#000"
605 },
606 {
607 "id": 36,
608 "type": "MOSSImageLayoutPrompt",
609 "pos": [
610 -260,
611 10
612 ],
613 "size": [
614 420,
615 340
616 ],
617 "flags": [],
618 "order": 6,
619 "mode": 0,
620 "inputs": [
621 {
622 "name": "element",
623 "type": "ARRAY",
624 "link": 72
625 },
626 {
627 "name": "width",
628 "type": "INT",
629 "widget": {
630 "name": "width"
631 },
632 "link": 69
633 },
634 {
635 "name": "height",
636 "type": "INT",
637 "widget": {
638 "name": "height"
639 },
640 "link": 70
641 }
642 ],
643 "outputs": [
644 {
645 "name": "prompt",
646 "type": "STRING",
647 "links": [
648 71
649 ]
650 }
651 ],
652 "properties": {
653 "Node name for S&R": "MOSSImageLayoutPrompt"
654 },
655 "widgets_values": [
656 "Premium 3D render on a dark olive gradient background: a floating weathered bark fragment covered in velvet moss, pale pink peonies and tiny white umbel flowers, clusters of translucent quartz crystals growing out of the wood, cinematic rim light, soft shadow, ultra realistic product photography. Bottom right the word MOSS is set in a lime-green geometric display face stacked on two rows, a small block of white monospaced text sits in the top left, and a thin white plus mark in the bottom left corner. 4k, no watermark.",
657 1024,
658 1024,
659 "1"
660 ],
661 "widgets_values_named": {
662 "prompt": "Premium 3D render on a dark olive gradient background: a floating weathered bark fragment covered in velvet moss, pale pink peonies and tiny white umbel flowers, clusters of translucent quartz crystals growing out of the wood, cinematic rim light, soft shadow, ultra realistic product photography. Bottom right the word MOSS is set in a lime-green geometric display face stacked on two rows, a small block of white monospaced text sits in the top left, and a thin white plus mark in the bottom left corner. 4k, no watermark.",
663 "width": 1024,
664 "height": 1024,
665 "character_boxes": "1"
666 }
667 },
668 {
669 "id": 37,
670 "type": "PreviewAny",
671 "pos": [
672 190,
673 10
674 ],
675 "size": [
676 440,
677 580
678 ],
679 "flags": [],
680 "order": 7,
681 "mode": 0,
682 "inputs": [
683 {
684 "name": "source",
685 "type": "*",
686 "link": 71
687 }
688 ],
689 "outputs": [
690 {
691 "name": "STRING",
692 "type": "STRING",
693 "links": [
694 73
695 ]
696 }
697 ],
698 "properties": {
699 "Node name for S&R": "PreviewAny"
700 },
701 "widgets_values": [],
702 "widgets_values_named": []
703 },
704 {
705 "id": 38,
706 "type": "MarkdownNote",
707 "pos": [
708 710,
709 -210
710 ],
711 "size": [
712 420,
713 110
714 ],
715 "flags": [],
716 "order": 4,
717 "mode": 0,
718 "inputs": [],
719 "outputs": [],
720 "title": "Note: ref_image and PE",
721 "properties": [],
722 "widgets_values": [
723 "The `ref_image` is fed to the LLM only for prompt enhancement and cannot be used directly by the model. Enable the prompt enhancer if you wish to use it. The model itself doesn't support `ref_image`.\n\nWhen using the bboxes, enabling PE will rewrite the json input totally, so it's disabled by default in the current workflow."
724 ],
725 "widgets_values_named": {
726 "text": "The `ref_image` is fed to the LLM only for prompt enhancement and cannot be used directly by the model. Enable the prompt enhancer if you wish to use it. The model itself doesn't support `ref_image`.\n\nWhen using the bboxes, enabling PE will rewrite the json input totally, so it's disabled by default in the current workflow."
727 },
728 "color": "#222",
729 "bgcolor": "#000"
730 }
731 ],
732 "links": [
733 [
734 22,
735 18,
736 0,
737 9,
738 0,
739 "IMAGE"
740 ],
741 [
742 66,
743 33,
744 0,
745 34,
746 2,
747 "INT"
748 ],
749 [
750 67,
751 33,
752 1,
753 34,
754 3,
755 "INT"
756 ],
757 [
758 71,
759 36,
760 0,
761 37,
762 0,
763 "STRING"
764 ],
765 [
766 72,
767 34,
768 2,
769 36,
770 0,
771 "ARRAY"
772 ],
773 [
774 73,
775 37,
776 0,
777 18,
778 0,
779 "STRING"
780 ],
781 [
782 74,
783 33,
784 0,
785 18,
786 4,
787 "INT"
788 ],
789 [
790 75,
791 33,
792 1,
793 18,
794 5,
795 "INT"
796 ],
797 [
798 69,
799 33,
800 0,
801 36,
802 1,
803 "INT"
804 ],
805 [
806 70,
807 33,
808 1,
809 36,
810 2,
811 "INT"
812 ]
813 ],
814 "groups": [
815 {
816 "id": 6,
817 "title": "Create bounding boxes for precise control",
818 "bounding": [
819 -820,
820 -80,
821 1490,
822 1080
823 ],
824 "color": "#444",
825 "flags": []
826 }
827 ],
828 "definitions": {
829 "subgraphs": [
830 {
831 "id": "3301b744-2960-415a-83b0-fe8a89d99fdb",
832 "version": 1,
833 "state": {
834 "lastGroupId": 6,
835 "lastNodeId": 38,
836 "lastLinkId": 78,
837 "lastRerouteId": 0
838 },
839 "revision": 0,
840 "config": [],
841 "name": "Text to Image (MOSS-Image)",
842 "inputNode": {
843 "id": -10,
844 "bounding": [
845 -1020,
846 -120,
847 191.44921875,
848 368
849 ]
850 },
851 "outputNode": {
852 "id": -20,
853 "bounding": [
854 1790,
855 30,
856 128,
857 68
858 ]
859 },
860 "inputs": [
861 {
862 "id": "35437e31-565b-4d42-bc06-d95c5929e7d8",
863 "name": "value",
864 "type": "STRING",
865 "linkIds": [
866 25
867 ],
868 "label": "positive_prompt",
869 "pos": [
870 -852.55078125,
871 -96
872 ]
873 },
874 {
875 "id": "853a4192-ebce-42de-bdff-77c36b59cc1a",
876 "name": "switch",
877 "type": "BOOLEAN",
878 "linkIds": [
879 26
880 ],
881 "label": "enable_prompt_enhancer",
882 "pos": [
883 -852.55078125,
884 -76
885 ]
886 },
887 {
888 "id": "b31905fc-03b2-4913-80ea-7288f0604eb1",
889 "name": "sampling_mode.seed",
890 "type": "INT",
891 "linkIds": [
892 78
893 ],
894 "label": "prompt_enhancer_seed",
895 "pos": [
896 -852.55078125,
897 -56
898 ]
899 },
900 {
901 "id": "c11f1876-7b42-4679-a736-8deaa8f21fd7",
902 "name": "text",
903 "type": "STRING",
904 "linkIds": [
905 43
906 ],
907 "label": "negative_prompt",
908 "pos": [
909 -852.55078125,
910 -36
911 ]
912 },
913 {
914 "id": "1514590b-7a78-450b-82b4-cfbe7820a9db",
915 "name": "width",
916 "type": "INT",
917 "linkIds": [
918 27
919 ],
920 "pos": [
921 -852.55078125,
922 -16
923 ]
924 },
925 {
926 "id": "f2e18bfe-65b0-4d24-9c78-bec0b9573e97",
927 "name": "height",
928 "type": "INT",
929 "linkIds": [
930 28
931 ],
932 "pos": [
933 -852.55078125,
934 4
935 ]
936 },
937 {
938 "id": "32c26da2-7e60-44bf-851a-72690937b4b4",
939 "name": "seed",
940 "type": "INT",
941 "linkIds": [
942 30
943 ],
944 "pos": [
945 -852.55078125,
946 24
947 ]
948 },
949 {
950 "id": "dae5d571-ced0-46d6-8a0a-5a71b8ca945a",
951 "name": "steps",
952 "type": "INT",
953 "linkIds": [
954 42
955 ],
956 "pos": [
957 -852.55078125,
958 44
959 ]
960 },
961 {
962 "id": "6c064d6f-9925-4808-83cc-7e3409190ca7",
963 "name": "cfg",
964 "type": "FLOAT",
965 "linkIds": [
966 44
967 ],
968 "pos": [
969 -852.55078125,
970 64
971 ]
972 },
973 {
974 "id": "e3037e0e-7d1a-43ce-9585-b255c7017615",
975 "name": "switch_1",
976 "type": "BOOLEAN",
977 "linkIds": [
978 64
979 ],
980 "label": "SLG",
981 "pos": [
982 -852.55078125,
983 84
984 ]
985 },
986 {
987 "id": "46e71c72-9f95-4c32-89d2-2dab4b63b284",
988 "name": "sampler_name",
989 "type": "COMBO",
990 "linkIds": [
991 33
992 ],
993 "pos": [
994 -852.55078125,
995 104
996 ]
997 },
998 {
999 "id": "8ba10fc2-8e73-4ece-8f77-27515bbe2698",
1000 "name": "scheduler",
1001 "type": "COMBO",
1002 "linkIds": [
1003 34
1004 ],
1005 "pos": [
1006 -852.55078125,
1007 124
1008 ]
1009 },
1010 {
1011 "id": "bc8e2627-1b51-4333-9d88-0cb6307f7545",
1012 "name": "unet_name",
1013 "type": "COMBO",
1014 "linkIds": [
1015 35
1016 ],
1017 "label": "unet_model",
1018 "pos": [
1019 -852.55078125,
1020 144
1021 ]
1022 },
1023 {
1024 "id": "fe422dee-acbe-4c34-898b-62bb878ddb83",
1025 "name": "clip_name",
1026 "type": "COMBO",
1027 "linkIds": [
1028 36
1029 ],
1030 "label": "clip_model",
1031 "pos": [
1032 -852.55078125,
1033 164
1034 ]
1035 },
1036 {
1037 "id": "29a73fdf-7b55-4612-8966-bba0b4cab854",
1038 "name": "vae_name",
1039 "type": "COMBO",
1040 "linkIds": [
1041 37
1042 ],
1043 "label": "vae_model",
1044 "pos": [
1045 -852.55078125,
1046 184
1047 ]
1048 },
1049 {
1050 "id": "0ea04977-55b5-46d7-b7cb-53eda9e38387",
1051 "name": "video",
1052 "type": "IMAGE",
1053 "linkIds": [
1054 77
1055 ],
1056 "label": "ref_image (for llm)",
1057 "pos": [
1058 -852.55078125,
1059 204
1060 ]
1061 }
1062 ],
1063 "outputs": [
1064 {
1065 "id": "fa9fefe4-677e-4f8b-aba5-35459b097c37",
1066 "name": "IMAGE",
1067 "type": "IMAGE",
1068 "linkIds": [
1069 6
1070 ],
1071 "localized_name": "IMAGE",
1072 "pos": [
1073 1814,
1074 54
1075 ]
1076 }
1077 ],
1078 "widgets": [],
1079 "nodes": [
1080 {
1081 "id": 17,
1082 "type": "PrimitiveStringMultiline",
1083 "pos": [
1084 -130,
1085 -780
1086 ],
1087 "size": [
1088 490,
1089 280
1090 ],
1091 "flags": [],
1092 "order": 13,
1093 "mode": 0,
1094 "inputs": [
1095 {
1096 "localized_name": "value",
1097 "name": "value",
1098 "type": "STRING",
1099 "widget": {
1100 "name": "value"
1101 },
1102 "link": 25
1103 }
1104 ],
1105 "outputs": [
1106 {
1107 "localized_name": "STRING",
1108 "name": "STRING",
1109 "type": "STRING",
1110 "links": [
1111 15,
1112 17
1113 ]
1114 }
1115 ],
1116 "properties": {
1117 "Node name for S&R": "PrimitiveStringMultiline"
1118 },
1119 "widgets_values": [
1120 "Dark fantasy editorial poster in a lush overgrown ruin: a knight in moss-covered plate armour sits on a mound of dark earth overgrown with moss, ferns and blooming wildflowers, knees together and hands folded, a dense bouquet of daisies and pink roses growing out of the open helmet instead of a face, ivy and crumbling columns behind, petals drifting in the air, soft volumetric light from above, deep green and moss palette with muted cream type. Behind everything the word MOSS is set in enormous cream serif capitals cropped by both edges. Small cream caps sit in the corners, a paragraph of tiny type on the right, a large quoted line at the bottom right. Fine grain, painterly, film-poster finish."
1121 ],
1122 "widgets_values_named": {
1123 "value": "Dark fantasy editorial poster in a lush overgrown ruin: a knight in moss-covered plate armour sits on a mound of dark earth overgrown with moss, ferns and blooming wildflowers, knees together and hands folded, a dense bouquet of daisies and pink roses growing out of the open helmet instead of a face, ivy and crumbling columns behind, petals drifting in the air, soft volumetric light from above, deep green and moss palette with muted cream type. Behind everything the word MOSS is set in enormous cream serif capitals cropped by both edges. Small cream caps sit in the corners, a paragraph of tiny type on the right, a large quoted line at the bottom right. Fine grain, painterly, film-poster finish."
1124 }
1125 },
1126 {
1127 "id": 14,
1128 "type": "PrimitiveStringMultiline",
1129 "pos": [
1130 -130,
1131 -430
1132 ],
1133 "size": [
1134 470,
1135 270
1136 ],
1137 "flags": [],
1138 "order": 0,
1139 "mode": 0,
1140 "inputs": [],
1141 "outputs": [
1142 {
1143 "localized_name": "STRING",
1144 "name": "STRING",
1145 "type": "STRING",
1146 "links": [
1147 13
1148 ]
1149 }
1150 ],
1151 "title": "Text (System prompt)",
1152 "properties": {
1153 "Node name for S&R": "PrimitiveStringMultiline"
1154 },
1155 "widgets_values": [
1156 "You are a prompt engineer for an image generation model. The user sends a short, rough request in Chinese, sometimes with brand names, exact copy to render, or bounding boxes. Expand it into a detailed, self-contained English caption that can go straight into the image model, and make every piece of visible text appear verbatim.\n\nOutput only the caption. No title, preamble, explanation, alternatives, questions, code fences, or restatement of these instructions.\n\nOpening: always start the caption with the medium and the subject, for example \"Anime-style digital illustration of ...\", \"Studio photograph of ...\", \"Mixed-media poster of ...\". Never start with a verb. If the request is an edit, work out the final scene and open on it directly.\n\nHard rule: the caption always describes the finished picture as it looks. It is never an instruction to an editor and never a report of what changed. Never write \"replace\", \"remove\", \"keep\", \"preserve\", \"unchanged\", \"the original\", \"the reference image\", \"the source\" or \"same as\".\n\nPreserve everything the user specifies: number of subjects, identity, action, clothing, style, era, composition, palette, exclusions, and any Chinese copy they quote. Add only plausible visual detail the user left open. Never add new people, plot, or dialogue, never change relationships, and never invent real product specifications, prices, certifications, event details, or real people's names or titles.\n\nBuild the caption from these eight facets. Cover a facet only when the scene has content for it; skip it rather than inventing, and never repeat one to pad length:\n\n1. Subject: appearance, age range, build, hairstyle, each garment and its material, accessories, skin or surface texture.\n2. Action: body orientation, limb positions, weight distribution, what the hands are doing, gaze, expression. The pose must hold in a single frame and never contradict itself.\n3. Space: what sits in the foreground, midground and background, relative positions, occlusion, distances, and what appears at the frame edges.\n4. Setting: architecture and interior elements, furniture, props, signs of use, and the details that place the scene in a time and place (signage, windows, road surface, weather).\n5. Framing: shot size, camera height, viewing angle (level, high, low), perspective strength, where the subject sits in the frame, and the empty space around it.\n6. Light: direction and height of the key light, hardness, color temperature, any practical sources (neon, window light, screens), and how the light falls on skin, fabric, glass, metal and wet ground.\n7. Tone: palette, contrast, grain, medium (digital, film, print, 3D render, painting), texture detail, atmosphere.\n8. Text: see the next section. This is the most common failure point.\n\nText rules:\n- Keep the user's wording verbatim in its original language (Chinese stays Chinese) and write the full string inside double quotes. Never rewrite, translate, shorten, or paste the same copy twice.\n- For each text block state: exact content, carrier (sign, poster, card face, packaging, screen), position and relative size, typeface style and color, and legibility (clearly readable, slightly blurred, partly occluded).\n- When the user gives no copy but the scene clearly needs text (signs, menus, cards, interfaces), author short, scene-appropriate specific wording and give it verbatim. Never write placeholders such as \"headline here\" or \"some text\".\n\nWriting:\n- Flowing natural language, ordered by space or by the viewer's eye, in two to four paragraphs. No tag soup, no \"masterpiece, 8k, best quality\", no empty quality words.\n- Every sentence must add new visible information. Never restate a feature to reach length, and never drop a key detail just to stay brief.\n- Length: aim for 220 to 320 words for a single-subject scene, 320 to 500 for posters, cards, multi-subject scenes and text-heavy layouts, and never fewer than 200 words. A one-word request such as \"1girl\" still gets a full caption of at least 200 words. Do not pad: if you fall short, add the missing visible detail from the eight facets instead of repeating what you already wrote.\n- Describe only what is visible. No tool steps, generation parameters, or coordinate arithmetic.\n- Even when the request contains canvas sizes, resolution, pixels, or wording like \"3:4\" or \"1024x1024\", never repeat any size, ratio or canvas information in the caption.\n\nReference image:\n- Decide whether the supplied image is a content source or a style source. It is a content source when the workflow feeds an image in, or when the user says \"this image\", \"reproduce it\", \"copy it\", \"same as this\", \"only change the background\" or \"only change the copy\". Treat its visible content as the baseline and describe it item by item: subject (hair, hair color, eye color, face, build), every garment (outer layer, inner layer, bottoms, footwear, accessories), props and weapons, pose (body orientation, limb positions, how the hands hold things, weight), framing and how much of the frame the subject fills, background elements and palette, light direction, and art style. Change only what the user asks to change and keep the rest.\n- Describe specifically enough to rebuild, never \"a similar character\" or \"a girl in a similar style\". Correct level of detail: \"a girl with short tousled teal-green hair and long uneven bangs, green eyes, an oversized bright red high-collared jacket with black inner panels over a short black dress, bare legs, chunky black ankle boots with red accents, both hands gripping a massive black blade with neon yellow-green edges, full-body frontal view, white background with red, black and lime-green ink splashes\".\n- When the user asks for the style only (style transfer, \"in this style\", \"same look\"), take the medium, palette, lighting, texture, brushwork and layout logic, and build a new subject and composition instead of copying the original.\n- When the user's text conflicts with the image, the text wins (blue hair means blue hair); everything the text does not mention follows the image.\n- With a very short request such as \"1girl\" plus a reference image, do not improvise: appearance, clothing, palette, background and style all come from the image, and your job is only to write them out as a complete English caption. Do not add accessories, weapons, props or scenery the image does not show.\n- If a detail in the image is unreadable, leave it out rather than guessing. Never guess brands, identities or real names.\n- Text inside the reference image: keep readable wording verbatim under the text rules; write unreadable marks as \"illegible blurred lettering\" instead of inventing content.\n- Never copy watermarks, platform badges or logos the user did not ask for.\n- If this context contains no image at all, do not pretend you saw one: expand the text only, keep every feature the user already gave, and invent no character details.\n- A reference is evidence, not the deliverable. Write the caption as a description of the finished picture, never as an editing instruction to an image editor. Ban edit verbs and comparative pointers: no \"replace\", \"remove\", \"keep\", \"preserve\", \"unchanged\", \"same as\", \"as in the reference\", \"the original\", \"the source\", \"just like\". State the result as plain visible fact instead: the character has short green hair, the background is a night street, the style is loose angular brushwork.\n- Keep the number of subjects consistent with what the user asks for. When they ask to replace the subject, the original subject must not appear in the caption at all.\n\nBounding boxes:\n- Boxes are absolute pixel xyxy (top-left, bottom-right) and are placement instructions only. Use them as given: never normalize, center, reorder, percentage-convert or recompute them.\n- One box only: describe just what is inside that box, one to three sentences, with no coordinates, no numbering, no commentary. Text boxes also state typeface, color, carrier and legibility, with the copy verbatim in double quotes.\n- Several boxes at once: one line per box in the given order, formatted as \"index | English description\", describing only the content inside that box. No coordinates, no JSON, no prose paragraphs.\n- A box marks a placement, not a border, panel, divider or sticker to draw. Overlap and natural occlusion are allowed.\n- With no boxes, write a normal caption and never invent coordinates.\n"
1157 ],
1158 "widgets_values_named": {
1159 "value": "You are a prompt engineer for an image generation model. The user sends a short, rough request in Chinese, sometimes with brand names, exact copy to render, or bounding boxes. Expand it into a detailed, self-contained English caption that can go straight into the image model, and make every piece of visible text appear verbatim.\n\nOutput only the caption. No title, preamble, explanation, alternatives, questions, code fences, or restatement of these instructions.\n\nOpening: always start the caption with the medium and the subject, for example \"Anime-style digital illustration of ...\", \"Studio photograph of ...\", \"Mixed-media poster of ...\". Never start with a verb. If the request is an edit, work out the final scene and open on it directly.\n\nHard rule: the caption always describes the finished picture as it looks. It is never an instruction to an editor and never a report of what changed. Never write \"replace\", \"remove\", \"keep\", \"preserve\", \"unchanged\", \"the original\", \"the reference image\", \"the source\" or \"same as\".\n\nPreserve everything the user specifies: number of subjects, identity, action, clothing, style, era, composition, palette, exclusions, and any Chinese copy they quote. Add only plausible visual detail the user left open. Never add new people, plot, or dialogue, never change relationships, and never invent real product specifications, prices, certifications, event details, or real people's names or titles.\n\nBuild the caption from these eight facets. Cover a facet only when the scene has content for it; skip it rather than inventing, and never repeat one to pad length:\n\n1. Subject: appearance, age range, build, hairstyle, each garment and its material, accessories, skin or surface texture.\n2. Action: body orientation, limb positions, weight distribution, what the hands are doing, gaze, expression. The pose must hold in a single frame and never contradict itself.\n3. Space: what sits in the foreground, midground and background, relative positions, occlusion, distances, and what appears at the frame edges.\n4. Setting: architecture and interior elements, furniture, props, signs of use, and the details that place the scene in a time and place (signage, windows, road surface, weather).\n5. Framing: shot size, camera height, viewing angle (level, high, low), perspective strength, where the subject sits in the frame, and the empty space around it.\n6. Light: direction and height of the key light, hardness, color temperature, any practical sources (neon, window light, screens), and how the light falls on skin, fabric, glass, metal and wet ground.\n7. Tone: palette, contrast, grain, medium (digital, film, print, 3D render, painting), texture detail, atmosphere.\n8. Text: see the next section. This is the most common failure point.\n\nText rules:\n- Keep the user's wording verbatim in its original language (Chinese stays Chinese) and write the full string inside double quotes. Never rewrite, translate, shorten, or paste the same copy twice.\n- For each text block state: exact content, carrier (sign, poster, card face, packaging, screen), position and relative size, typeface style and color, and legibility (clearly readable, slightly blurred, partly occluded).\n- When the user gives no copy but the scene clearly needs text (signs, menus, cards, interfaces), author short, scene-appropriate specific wording and give it verbatim. Never write placeholders such as \"headline here\" or \"some text\".\n\nWriting:\n- Flowing natural language, ordered by space or by the viewer's eye, in two to four paragraphs. No tag soup, no \"masterpiece, 8k, best quality\", no empty quality words.\n- Every sentence must add new visible information. Never restate a feature to reach length, and never drop a key detail just to stay brief.\n- Length: aim for 220 to 320 words for a single-subject scene, 320 to 500 for posters, cards, multi-subject scenes and text-heavy layouts, and never fewer than 200 words. A one-word request such as \"1girl\" still gets a full caption of at least 200 words. Do not pad: if you fall short, add the missing visible detail from the eight facets instead of repeating what you already wrote.\n- Describe only what is visible. No tool steps, generation parameters, or coordinate arithmetic.\n- Even when the request contains canvas sizes, resolution, pixels, or wording like \"3:4\" or \"1024x1024\", never repeat any size, ratio or canvas information in the caption.\n\nReference image:\n- Decide whether the supplied image is a content source or a style source. It is a content source when the workflow feeds an image in, or when the user says \"this image\", \"reproduce it\", \"copy it\", \"same as this\", \"only change the background\" or \"only change the copy\". Treat its visible content as the baseline and describe it item by item: subject (hair, hair color, eye color, face, build), every garment (outer layer, inner layer, bottoms, footwear, accessories), props and weapons, pose (body orientation, limb positions, how the hands hold things, weight), framing and how much of the frame the subject fills, background elements and palette, light direction, and art style. Change only what the user asks to change and keep the rest.\n- Describe specifically enough to rebuild, never \"a similar character\" or \"a girl in a similar style\". Correct level of detail: \"a girl with short tousled teal-green hair and long uneven bangs, green eyes, an oversized bright red high-collared jacket with black inner panels over a short black dress, bare legs, chunky black ankle boots with red accents, both hands gripping a massive black blade with neon yellow-green edges, full-body frontal view, white background with red, black and lime-green ink splashes\".\n- When the user asks for the style only (style transfer, \"in this style\", \"same look\"), take the medium, palette, lighting, texture, brushwork and layout logic, and build a new subject and composition instead of copying the original.\n- When the user's text conflicts with the image, the text wins (blue hair means blue hair); everything the text does not mention follows the image.\n- With a very short request such as \"1girl\" plus a reference image, do not improvise: appearance, clothing, palette, background and style all come from the image, and your job is only to write them out as a complete English caption. Do not add accessories, weapons, props or scenery the image does not show.\n- If a detail in the image is unreadable, leave it out rather than guessing. Never guess brands, identities or real names.\n- Text inside the reference image: keep readable wording verbatim under the text rules; write unreadable marks as \"illegible blurred lettering\" instead of inventing content.\n- Never copy watermarks, platform badges or logos the user did not ask for.\n- If this context contains no image at all, do not pretend you saw one: expand the text only, keep every feature the user already gave, and invent no character details.\n- A reference is evidence, not the deliverable. Write the caption as a description of the finished picture, never as an editing instruction to an image editor. Ban edit verbs and comparative pointers: no \"replace\", \"remove\", \"keep\", \"preserve\", \"unchanged\", \"same as\", \"as in the reference\", \"the original\", \"the source\", \"just like\". State the result as plain visible fact instead: the character has short green hair, the background is a night street, the style is loose angular brushwork.\n- Keep the number of subjects consistent with what the user asks for. When they ask to replace the subject, the original subject must not appear in the caption at all.\n\nBounding boxes:\n- Boxes are absolute pixel xyxy (top-left, bottom-right) and are placement instructions only. Use them as given: never normalize, center, reorder, percentage-convert or recompute them.\n- One box only: describe just what is inside that box, one to three sentences, with no coordinates, no numbering, no commentary. Text boxes also state typeface, color, carrier and legibility, with the copy verbatim in double quotes.\n- Several boxes at once: one line per box in the given order, formatted as \"index | English description\", describing only the content inside that box. No coordinates, no JSON, no prose paragraphs.\n- A box marks a placement, not a border, panel, divider or sticker to draw. Overlap and natural occlusion are allowed.\n- With no boxes, write a normal caption and never invent coordinates.\n"
1160 }
1161 },
1162 {
1163 "id": 11,
1164 "type": "TextGenerate",
1165 "pos": [
1166 470,
1167 -780
1168 ],
1169 "size": [
1170 400,
1171 550
1172 ],
1173 "flags": [],
1174 "order": 9,
1175 "mode": 0,
1176 "inputs": [
1177 {
1178 "localized_name": "clip",
1179 "name": "clip",
1180 "type": "CLIP",
1181 "link": 10
1182 },
1183 {
1184 "localized_name": "image",
1185 "name": "image",
1186 "shape": 7,
1187 "type": "IMAGE",
1188 "link": 77
1189 },
1190 {
1191 "localized_name": "video",
1192 "name": "video",
1193 "shape": 7,
1194 "type": "IMAGE",
1195 "link": null
1196 },
1197 {
1198 "localized_name": "audio",
1199 "name": "audio",
1200 "shape": 7,
1201 "type": "AUDIO",
1202 "link": null
1203 },
1204 {
1205 "localized_name": "system_prompt",
1206 "name": "system_prompt",
1207 "shape": 7,
1208 "type": "STRING",
1209 "link": 13
1210 },
1211 {
1212 "localized_name": "prompt",
1213 "name": "prompt",
1214 "type": "STRING",
1215 "widget": {
1216 "name": "prompt"
1217 },
1218 "link": 17
1219 },
1220 {
1221 "localized_name": "seed",
1222 "name": "sampling_mode.seed",
1223 "type": "INT",
1224 "widget": {
1225 "name": "sampling_mode.seed"
1226 },
1227 "link": 78
1228 }
1229 ],
1230 "outputs": [
1231 {
1232 "localized_name": "generated_text",
1233 "name": "generated_text",
1234 "type": "STRING",
1235 "links": [
1236 19
1237 ]
1238 },
1239 {
1240 "localized_name": "thinking",
1241 "name": "thinking",
1242 "type": "STRING",
1243 "links": null
1244 }
1245 ],
1246 "properties": {
1247 "Node name for S&R": "TextGenerate"
1248 },
1249 "widgets_values": [
1250 "",
1251 4096,
1252 "on",
1253 0.7,
1254 64,
1255 0.95,
1256 0.05,
1257 1,
1258 0,
1259 0,
1260 false,
1261 true,
1262 "auto"
1263 ],
1264 "widgets_values_named": {
1265 "prompt": "",
1266 "max_length": 4096,
1267 "sampling_mode": "on",
1268 "sampling_mode.temperature": 0.7,
1269 "sampling_mode.top_k": 64,
1270 "sampling_mode.top_p": 0.95,
1271 "sampling_mode.min_p": 0.05,
1272 "sampling_mode.repetition_penalty": 1,
1273 "sampling_mode.seed": 0,
1274 "sampling_mode.presence_penalty": 0,
1275 "thinking": false,
1276 "use_default_template": true,
1277 "mtp": "auto"
1278 }
1279 },
1280 {
1281 "id": 1,
1282 "type": "UNETLoader",
1283 "pos": [
1284 -150,
1285 80
1286 ],
1287 "size": [
1288 350,
1289 90
1290 ],
1291 "flags": [],
1292 "order": 1,
1293 "mode": 0,
1294 "inputs": [
1295 {
1296 "localized_name": "unet_name",
1297 "name": "unet_name",
1298 "type": "COMBO",
1299 "widget": {
1300 "name": "unet_name"
1301 },
1302 "link": 35
1303 }
1304 ],
1305 "outputs": [
1306 {
1307 "localized_name": "MODEL",
1308 "name": "MODEL",
1309 "type": "MODEL",
1310 "slot_index": 0,
1311 "links": [
1312 1,
1313 63
1314 ]
1315 }
1316 ],
1317 "properties": {
1318 "Node name for S&R": "UNETLoader",
1319 "models": [
1320 {
1321 "name": "moss_image_base_int8_convrot.safetensors",
1322 "url": "https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/diffusion_models/moss_image_base_int8_convrot.safetensors",
1323 "directory": "diffusion_models"
1324 }
1325 ]
1326 },
1327 "widgets_values": [
1328 "moss_image_base_int8_convrot.safetensors",
1329 "default"
1330 ],
1331 "widgets_values_named": {
1332 "unet_name": "moss_image_base_int8_convrot.safetensors",
1333 "weight_dtype": "default"
1334 },
1335 "color": "#223",
1336 "bgcolor": "#335"
1337 },
1338 {
1339 "id": 4,
1340 "type": "CLIPTextEncode",
1341 "pos": [
1342 380,
1343 80
1344 ],
1345 "size": [
1346 450,
1347 520
1348 ],
1349 "flags": [],
1350 "order": 4,
1351 "mode": 0,
1352 "inputs": [
1353 {
1354 "localized_name": "clip",
1355 "name": "clip",
1356 "type": "CLIP",
1357 "link": 2
1358 },
1359 {
1360 "localized_name": "text",
1361 "name": "text",
1362 "type": "STRING",
1363 "widget": {
1364 "name": "text"
1365 },
1366 "link": 20
1367 }
1368 ],
1369 "outputs": [
1370 {
1371 "localized_name": "CONDITIONING",
1372 "name": "CONDITIONING",
1373 "type": "CONDITIONING",
1374 "slot_index": 0,
1375 "links": [
1376 8
1377 ]
1378 }
1379 ],
1380 "title": "Positive Prompt",
1381 "properties": {
1382 "Node name for S&R": "CLIPTextEncode"
1383 },
1384 "widgets_values": [
1385 "Editorial studio photograph of a model in a structured ivory wool coat standing against a seamless warm grey backdrop, single softbox from the left carving sculpted shadows, 85mm lens, muted cream and charcoal palette, subtle film grain"
1386 ],
1387 "widgets_values_named": {
1388 "text": "Editorial studio photograph of a model in a structured ivory wool coat standing against a seamless warm grey backdrop, single softbox from the left carving sculpted shadows, 85mm lens, muted cream and charcoal palette, subtle film grain"
1389 },
1390 "color": "#232",
1391 "bgcolor": "#353"
1392 },
1393 {
1394 "id": 2,
1395 "type": "CLIPLoader",
1396 "pos": [
1397 -150,
1398 690
1399 ],
1400 "size": [
1401 350,
1402 140
1403 ],
1404 "flags": [],
1405 "order": 2,
1406 "mode": 0,
1407 "inputs": [
1408 {
1409 "localized_name": "clip_name",
1410 "name": "clip_name",
1411 "type": "COMBO",
1412 "widget": {
1413 "name": "clip_name"
1414 },
1415 "link": 36
1416 }
1417 ],
1418 "outputs": [
1419 {
1420 "localized_name": "CLIP",
1421 "name": "CLIP",
1422 "type": "CLIP",
1423 "slot_index": 0,
1424 "links": [
1425 2,
1426 3,
1427 10
1428 ]
1429 }
1430 ],
1431 "properties": {
1432 "Node name for S&R": "CLIPLoader",
1433 "models": [
1434 {
1435 "name": "qwen3.5_9b_w4a8_gptq.safetensors",
1436 "url": "https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/text_encoders/qwen3.5_9b_w4a8_gptq.safetensors",
1437 "directory": "text_encoders"
1438 }
1439 ]
1440 },
1441 "widgets_values": [
1442 "qwen3.5_9b_w4a8_gptq.safetensors",
1443 "moss_image",
1444 "default"
1445 ],
1446 "widgets_values_named": {
1447 "clip_name": "qwen3.5_9b_w4a8_gptq.safetensors",
1448 "type": "moss_image",
1449 "device": "default"
1450 },
1451 "color": "#432",
1452 "bgcolor": "#653"
1453 },
1454 {
1455 "id": 7,
1456 "type": "KSampler",
1457 "pos": [
1458 930,
1459 50
1460 ],
1461 "size": [
1462 290,
1463 290
1464 ],
1465 "flags": [],
1466 "order": 7,
1467 "mode": 0,
1468 "inputs": [
1469 {
1470 "localized_name": "model",
1471 "name": "model",
1472 "type": "MODEL",
1473 "link": 61
1474 },
1475 {
1476 "localized_name": "positive",
1477 "name": "positive",
1478 "type": "CONDITIONING",
1479 "link": 8
1480 },
1481 {
1482 "localized_name": "negative",
1483 "name": "negative",
1484 "type": "CONDITIONING",
1485 "link": 9
1486 },
1487 {
1488 "localized_name": "latent_image",
1489 "name": "latent_image",
1490 "type": "LATENT",
1491 "link": 39
1492 },
1493 {
1494 "localized_name": "seed",
1495 "name": "seed",
1496 "type": "INT",
1497 "widget": {
1498 "name": "seed"
1499 },
1500 "link": 30
1501 },
1502 {
1503 "localized_name": "steps",
1504 "name": "steps",
1505 "type": "INT",
1506 "widget": {
1507 "name": "steps"
1508 },
1509 "link": 42
1510 },
1511 {
1512 "localized_name": "cfg",
1513 "name": "cfg",
1514 "type": "FLOAT",
1515 "widget": {
1516 "name": "cfg"
1517 },
1518 "link": 44
1519 },
1520 {
1521 "localized_name": "sampler_name",
1522 "name": "sampler_name",
1523 "type": "COMBO",
1524 "widget": {
1525 "name": "sampler_name"
1526 },
1527 "link": 33
1528 },
1529 {
1530 "localized_name": "scheduler",
1531 "name": "scheduler",
1532 "type": "COMBO",
1533 "widget": {
1534 "name": "scheduler"
1535 },
1536 "link": 34
1537 }
1538 ],
1539 "outputs": [
1540 {
1541 "localized_name": "LATENT",
1542 "name": "LATENT",
1543 "type": "LATENT",
1544 "slot_index": 0,
1545 "links": [
1546 4
1547 ]
1548 }
1549 ],
1550 "properties": {
1551 "Node name for S&R": "KSampler"
1552 },
1553 "widgets_values": [
1554 0,
1555 "randomize",
1556 25,
1557 2.5,
1558 "er_sde",
1559 "simple",
1560 1
1561 ],
1562 "widgets_values_named": {
1563 "seed": 0,
1564 "control_after_generate": "randomize",
1565 "steps": 25,
1566 "cfg": 2.5,
1567 "sampler_name": "er_sde",
1568 "scheduler": "simple",
1569 "denoise": 1
1570 }
1571 },
1572 {
1573 "id": 3,
1574 "type": "VAELoader",
1575 "pos": [
1576 -150,
1577 910
1578 ],
1579 "size": [
1580 350,
1581 60
1582 ],
1583 "flags": [],
1584 "order": 3,
1585 "mode": 0,
1586 "inputs": [
1587 {
1588 "localized_name": "vae_name",
1589 "name": "vae_name",
1590 "type": "COMBO",
1591 "widget": {
1592 "name": "vae_name"
1593 },
1594 "link": 37
1595 }
1596 ],
1597 "outputs": [
1598 {
1599 "localized_name": "VAE",
1600 "name": "VAE",
1601 "type": "VAE",
1602 "slot_index": 0,
1603 "links": [
1604 5
1605 ]
1606 }
1607 ],
1608 "properties": {
1609 "Node name for S&R": "VAELoader",
1610 "models": [
1611 {
1612 "name": "flux2-vae_small.safetensors",
1613 "url": "https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/vae/flux2-vae_small.safetensors",
1614 "directory": "vae"
1615 }
1616 ]
1617 },
1618 "widgets_values": [
1619 "flux2-vae_small.safetensors"
1620 ],
1621 "widgets_values_named": {
1622 "vae_name": "flux2-vae_small.safetensors"
1623 },
1624 "color": "#323",
1625 "bgcolor": "#535"
1626 },
1627 {
1628 "id": 13,
1629 "type": "PreviewAny",
1630 "pos": [
1631 1270,
1632 -780
1633 ],
1634 "size": [
1635 350,
1636 600
1637 ],
1638 "flags": [],
1639 "order": 10,
1640 "mode": 0,
1641 "inputs": [
1642 {
1643 "localized_name": "source",
1644 "name": "source",
1645 "type": "*",
1646 "link": 21
1647 }
1648 ],
1649 "outputs": [
1650 {
1651 "localized_name": "STRING",
1652 "name": "STRING",
1653 "type": "STRING",
1654 "links": [
1655 20
1656 ]
1657 }
1658 ],
1659 "properties": {
1660 "Node name for S&R": "PreviewAny"
1661 },
1662 "widgets_values": [],
1663 "widgets_values_named": []
1664 },
1665 {
1666 "id": 16,
1667 "type": "ComfySwitchNode",
1668 "pos": [
1669 930,
1670 -780
1671 ],
1672 "size": [
1673 280,
1674 110
1675 ],
1676 "flags": [],
1677 "order": 12,
1678 "mode": 0,
1679 "inputs": [
1680 {
1681 "localized_name": "on_false",
1682 "name": "on_false",
1683 "shape": 7,
1684 "type": "STRING",
1685 "link": 15
1686 },
1687 {
1688 "localized_name": "on_true",
1689 "name": "on_true",
1690 "shape": 7,
1691 "type": "STRING",
1692 "link": 19
1693 },
1694 {
1695 "localized_name": "switch",
1696 "name": "switch",
1697 "type": "BOOLEAN",
1698 "widget": {
1699 "name": "switch"
1700 },
1701 "link": 26
1702 }
1703 ],
1704 "outputs": [
1705 {
1706 "localized_name": "output",
1707 "name": "output",
1708 "type": "STRING",
1709 "links": [
1710 21
1711 ]
1712 }
1713 ],
1714 "properties": {
1715 "Node name for S&R": "ComfySwitchNode"
1716 },
1717 "widgets_values": [
1718 true
1719 ],
1720 "widgets_values_named": {
1721 "switch": true
1722 }
1723 },
1724 {
1725 "id": 6,
1726 "type": "EmptyFlux2LatentImage",
1727 "pos": [
1728 -140,
1729 1140
1730 ],
1731 "size": [
1732 300,
1733 120
1734 ],
1735 "flags": [],
1736 "order": 6,
1737 "mode": 0,
1738 "inputs": [
1739 {
1740 "localized_name": "width",
1741 "name": "width",
1742 "type": "INT",
1743 "widget": {
1744 "name": "width"
1745 },
1746 "link": 27
1747 },
1748 {
1749 "localized_name": "height",
1750 "name": "height",
1751 "type": "INT",
1752 "widget": {
1753 "name": "height"
1754 },
1755 "link": 28
1756 }
1757 ],
1758 "outputs": [
1759 {
1760 "localized_name": "LATENT",
1761 "name": "LATENT",
1762 "type": "LATENT",
1763 "slot_index": 0,
1764 "links": [
1765 39
1766 ]
1767 }
1768 ],
1769 "properties": {
1770 "Node name for S&R": "EmptyFlux2LatentImage"
1771 },
1772 "widgets_values": [
1773 1024,
1774 1024,
1775 1
1776 ],
1777 "widgets_values_named": {
1778 "width": 1024,
1779 "height": 1024,
1780 "batch_size": 1
1781 },
1782 "color": "#323",
1783 "bgcolor": "#535"
1784 },
1785 {
1786 "id": 5,
1787 "type": "CLIPTextEncode",
1788 "pos": [
1789 380,
1790 660
1791 ],
1792 "size": [
1793 460,
1794 180
1795 ],
1796 "flags": [],
1797 "order": 5,
1798 "mode": 0,
1799 "inputs": [
1800 {
1801 "localized_name": "clip",
1802 "name": "clip",
1803 "type": "CLIP",
1804 "link": 3
1805 },
1806 {
1807 "localized_name": "text",
1808 "name": "text",
1809 "type": "STRING",
1810 "widget": {
1811 "name": "text"
1812 },
1813 "link": 43
1814 }
1815 ],
1816 "outputs": [
1817 {
1818 "localized_name": "CONDITIONING",
1819 "name": "CONDITIONING",
1820 "type": "CONDITIONING",
1821 "slot_index": 0,
1822 "links": [
1823 9
1824 ]
1825 }
1826 ],
1827 "title": "Negative Prompt (empty = reference default)",
1828 "properties": {
1829 "Node name for S&R": "CLIPTextEncode"
1830 },
1831 "widgets_values": [
1832 ""
1833 ],
1834 "widgets_values_named": {
1835 "text": ""
1836 },
1837 "color": "#223",
1838 "bgcolor": "#335"
1839 },
1840 {
1841 "id": 8,
1842 "type": "VAEDecode",
1843 "pos": [
1844 1270,
1845 50
1846 ],
1847 "size": [
1848 230,
1849 70
1850 ],
1851 "flags": [],
1852 "order": 8,
1853 "mode": 0,
1854 "inputs": [
1855 {
1856 "localized_name": "samples",
1857 "name": "samples",
1858 "type": "LATENT",
1859 "link": 4
1860 },
1861 {
1862 "localized_name": "vae",
1863 "name": "vae",
1864 "type": "VAE",
1865 "link": 5
1866 }
1867 ],
1868 "outputs": [
1869 {
1870 "localized_name": "IMAGE",
1871 "name": "IMAGE",
1872 "type": "IMAGE",
1873 "slot_index": 0,
1874 "links": [
1875 6
1876 ]
1877 }
1878 ],
1879 "properties": {
1880 "Node name for S&R": "VAEDecode"
1881 }
1882 },
1883 {
1884 "id": 15,
1885 "type": "SkipLayerGuidanceDiTSimple",
1886 "pos": [
1887 -160,
1888 230
1889 ],
1890 "size": [
1891 350,
1892 210
1893 ],
1894 "flags": [],
1895 "order": 11,
1896 "mode": 0,
1897 "showAdvanced": true,
1898 "inputs": [
1899 {
1900 "localized_name": "model",
1901 "name": "model",
1902 "type": "MODEL",
1903 "link": 1
1904 }
1905 ],
1906 "outputs": [
1907 {
1908 "localized_name": "MODEL",
1909 "name": "MODEL",
1910 "type": "MODEL",
1911 "links": [
1912 62
1913 ]
1914 }
1915 ],
1916 "properties": {
1917 "Node name for S&R": "SkipLayerGuidanceDiTSimple"
1918 },
1919 "widgets_values": [
1920 "",
1921 "22",
1922 0,
1923 0.5
1924 ],
1925 "widgets_values_named": {
1926 "double_layers": "",
1927 "single_layers": "22",
1928 "start_percent": 0,
1929 "end_percent": 0.5
1930 }
1931 },
1932 {
1933 "id": 32,
1934 "type": "ComfySwitchNode",
1935 "pos": [
1936 -150,
1937 500
1938 ],
1939 "size": [
1940 340,
1941 110
1942 ],
1943 "flags": [],
1944 "order": 14,
1945 "mode": 0,
1946 "inputs": [
1947 {
1948 "localized_name": "on_false",
1949 "name": "on_false",
1950 "shape": 7,
1951 "type": "MODEL",
1952 "link": 63
1953 },
1954 {
1955 "localized_name": "on_true",
1956 "name": "on_true",
1957 "shape": 7,
1958 "type": "MODEL",
1959 "link": 62
1960 },
1961 {
1962 "localized_name": "switch",
1963 "name": "switch",
1964 "type": "BOOLEAN",
1965 "widget": {
1966 "name": "switch"
1967 },
1968 "link": 64
1969 }
1970 ],
1971 "outputs": [
1972 {
1973 "localized_name": "output",
1974 "name": "output",
1975 "type": "MODEL",
1976 "links": [
1977 61
1978 ]
1979 }
1980 ],
1981 "properties": {
1982 "Node name for S&R": "ComfySwitchNode"
1983 },
1984 "widgets_values": [
1985 false
1986 ],
1987 "widgets_values_named": {
1988 "switch": false
1989 }
1990 }
1991 ],
1992 "groups": [
1993 {
1994 "id": 1,
1995 "title": "Models",
1996 "bounding": [
1997 -210,
1998 -10,
1999 480,
2000 1010
2001 ],
2002 "color": "#3f789e",
2003 "flags": []
2004 },
2005 {
2006 "id": 2,
2007 "title": "Prompt",
2008 "bounding": [
2009 300,
2010 -10,
2011 580,
2012 880
2013 ],
2014 "color": "#3f789e",
2015 "flags": []
2016 },
2017 {
2018 "id": 3,
2019 "title": "Image Size",
2020 "bounding": [
2021 -220,
2022 1030,
2023 490,
2024 290
2025 ],
2026 "color": "#3f789e",
2027 "flags": []
2028 },
2029 {
2030 "id": 4,
2031 "title": "Prompt Enhancer",
2032 "bounding": [
2033 -210,
2034 -880,
2035 1900,
2036 840
2037 ],
2038 "color": "#444",
2039 "flags": []
2040 }
2041 ],
2042 "links": [
2043 {
2044 "id": 2,
2045 "origin_id": 2,
2046 "origin_slot": 0,
2047 "target_id": 4,
2048 "target_slot": 0,
2049 "type": "CLIP"
2050 },
2051 {
2052 "id": 20,
2053 "origin_id": 13,
2054 "origin_slot": 0,
2055 "target_id": 4,
2056 "target_slot": 1,
2057 "type": "STRING"
2058 },
2059 {
2060 "id": 1,
2061 "origin_id": 1,
2062 "origin_slot": 0,
2063 "target_id": 15,
2064 "target_slot": 0,
2065 "type": "MODEL"
2066 },
2067 {
2068 "id": 8,
2069 "origin_id": 4,
2070 "origin_slot": 0,
2071 "target_id": 7,
2072 "target_slot": 1,
2073 "type": "CONDITIONING"
2074 },
2075 {
2076 "id": 9,
2077 "origin_id": 5,
2078 "origin_slot": 0,
2079 "target_id": 7,
2080 "target_slot": 2,
2081 "type": "CONDITIONING"
2082 },
2083 {
2084 "id": 21,
2085 "origin_id": 16,
2086 "origin_slot": 0,
2087 "target_id": 13,
2088 "target_slot": 0,
2089 "type": "STRING"
2090 },
2091 {
2092 "id": 15,
2093 "origin_id": 17,
2094 "origin_slot": 0,
2095 "target_id": 16,
2096 "target_slot": 0,
2097 "type": "STRING"
2098 },
2099 {
2100 "id": 19,
2101 "origin_id": 11,
2102 "origin_slot": 0,
2103 "target_id": 16,
2104 "target_slot": 1,
2105 "type": "STRING"
2106 },
2107 {
2108 "id": 3,
2109 "origin_id": 2,
2110 "origin_slot": 0,
2111 "target_id": 5,
2112 "target_slot": 0,
2113 "type": "CLIP"
2114 },
2115 {
2116 "id": 4,
2117 "origin_id": 7,
2118 "origin_slot": 0,
2119 "target_id": 8,
2120 "target_slot": 0,
2121 "type": "LATENT"
2122 },
2123 {
2124 "id": 5,
2125 "origin_id": 3,
2126 "origin_slot": 0,
2127 "target_id": 8,
2128 "target_slot": 1,
2129 "type": "VAE"
2130 },
2131 {
2132 "id": 6,
2133 "origin_id": 8,
2134 "origin_slot": 0,
2135 "target_id": -20,
2136 "target_slot": 0,
2137 "type": "IMAGE"
2138 },
2139 {
2140 "id": 39,
2141 "origin_id": 6,
2142 "origin_slot": 0,
2143 "target_id": 7,
2144 "target_slot": 3,
2145 "type": "LATENT"
2146 },
2147 {
2148 "id": 61,
2149 "origin_id": 32,
2150 "origin_slot": 0,
2151 "target_id": 7,
2152 "target_slot": 0,
2153 "type": "MODEL"
2154 },
2155 {
2156 "id": 62,
2157 "origin_id": 15,
2158 "origin_slot": 0,
2159 "target_id": 32,
2160 "target_slot": 1,
2161 "type": "MODEL"
2162 },
2163 {
2164 "id": 63,
2165 "origin_id": 1,
2166 "origin_slot": 0,
2167 "target_id": 32,
2168 "target_slot": 0,
2169 "type": "MODEL"
2170 },
2171 {
2172 "id": 25,
2173 "origin_id": -10,
2174 "origin_slot": 0,
2175 "target_id": 17,
2176 "target_slot": 0,
2177 "type": "STRING"
2178 },
2179 {
2180 "id": 26,
2181 "origin_id": -10,
2182 "origin_slot": 1,
2183 "target_id": 16,
2184 "target_slot": 2,
2185 "type": "BOOLEAN"
2186 },
2187 {
2188 "id": 43,
2189 "origin_id": -10,
2190 "origin_slot": 3,
2191 "target_id": 5,
2192 "target_slot": 1,
2193 "type": "STRING"
2194 },
2195 {
2196 "id": 27,
2197 "origin_id": -10,
2198 "origin_slot": 4,
2199 "target_id": 6,
2200 "target_slot": 0,
2201 "type": "INT"
2202 },
2203 {
2204 "id": 28,
2205 "origin_id": -10,
2206 "origin_slot": 5,
2207 "target_id": 6,
2208 "target_slot": 1,
2209 "type": "INT"
2210 },
2211 {
2212 "id": 30,
2213 "origin_id": -10,
2214 "origin_slot": 6,
2215 "target_id": 7,
2216 "target_slot": 4,
2217 "type": "INT"
2218 },
2219 {
2220 "id": 42,
2221 "origin_id": -10,
2222 "origin_slot": 7,
2223 "target_id": 7,
2224 "target_slot": 5,
2225 "type": "INT"
2226 },
2227 {
2228 "id": 44,
2229 "origin_id": -10,
2230 "origin_slot": 8,
2231 "target_id": 7,
2232 "target_slot": 6,
2233 "type": "FLOAT"
2234 },
2235 {
2236 "id": 64,
2237 "origin_id": -10,
2238 "origin_slot": 9,
2239 "target_id": 32,
2240 "target_slot": 2,
2241 "type": "BOOLEAN"
2242 },
2243 {
2244 "id": 33,
2245 "origin_id": -10,
2246 "origin_slot": 10,
2247 "target_id": 7,
2248 "target_slot": 7,
2249 "type": "COMBO"
2250 },
2251 {
2252 "id": 34,
2253 "origin_id": -10,
2254 "origin_slot": 11,
2255 "target_id": 7,
2256 "target_slot": 8,
2257 "type": "COMBO"
2258 },
2259 {
2260 "id": 35,
2261 "origin_id": -10,
2262 "origin_slot": 12,
2263 "target_id": 1,
2264 "target_slot": 0,
2265 "type": "COMBO"
2266 },
2267 {
2268 "id": 36,
2269 "origin_id": -10,
2270 "origin_slot": 13,
2271 "target_id": 2,
2272 "target_slot": 0,
2273 "type": "COMBO"
2274 },
2275 {
2276 "id": 37,
2277 "origin_id": -10,
2278 "origin_slot": 14,
2279 "target_id": 3,
2280 "target_slot": 0,
2281 "type": "COMBO"
2282 },
2283 {
2284 "id": 10,
2285 "origin_id": 2,
2286 "origin_slot": 0,
2287 "target_id": 11,
2288 "target_slot": 0,
2289 "type": "CLIP"
2290 },
2291 {
2292 "id": 77,
2293 "origin_id": -10,
2294 "origin_slot": 15,
2295 "target_id": 11,
2296 "target_slot": 1,
2297 "type": "IMAGE"
2298 },
2299 {
2300 "id": 13,
2301 "origin_id": 14,
2302 "origin_slot": 0,
2303 "target_id": 11,
2304 "target_slot": 4,
2305 "type": "STRING"
2306 },
2307 {
2308 "id": 17,
2309 "origin_id": 17,
2310 "origin_slot": 0,
2311 "target_id": 11,
2312 "target_slot": 5,
2313 "type": "STRING"
2314 },
2315 {
2316 "id": 78,
2317 "origin_id": -10,
2318 "origin_slot": 2,
2319 "target_id": 11,
2320 "target_slot": 6,
2321 "type": "INT"
2322 }
2323 ],
2324 "extra": []
2325 }
2326 ]
2327 },
2328 "config": [],
2329 "extra": {
2330 "ds": {
2331 "scale": 0.3221100785107128,
2332 "offset": [
2333 2714.0896369109605,
2334 1088.8074191764954
2335 ]
2336 },
2337 "frontendVersion": "1.55.18"
2338 },
2339 "version": 0.4
2340}