ComfyPilotComfyPilot
工作流 / 品牌与设计 / 图形设计重组器
图形设计重组器

图形设计重组器

Graphic Design Recomposer

上传图形设计并选择所需宽高比。生成并重新构图以适应新的宽高比。

品牌与设计 3 个节点 1 个输入 25 次使用 ComfyUI ≥ 0.20.3 hellorob 21 KB

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

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

节点构成

LoadImage × 1
SaveImage × 1
172f1008-9337-4d2f-9212-ee081cb4faf5 × 1

官方标注的模型

Nano Banana 2Nano Banana Pro

工作流 JSON

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

1{
2 "id": "73b6b198-be12-4114-9363-c1dcd74bf81c",
3 "revision": 0,
4 "last_node_id": 157,
5 "last_link_id": 248,
6 "nodes": [
7 {
8 "id": 125,
9 "type": "LoadImage",
10 "pos": [
11 2860,
12 4920
13 ],
14 "size": [
15 380,
16 480
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "name": "IMAGE",
25 "type": "IMAGE",
26 "links": [
27 233
28 ]
29 },
30 {
31 "name": "MASK",
32 "type": "MASK",
33 "links": null
34 }
35 ],
36 "properties": {
37 "Node name for S&R": "LoadImage"
38 },
39 "widgets_values": [
40 "latent_space_clud.png",
41 "image"
42 ]
43 },
44 {
45 "id": 131,
46 "type": "SaveImage",
47 "pos": [
48 3670,
49 4920
50 ],
51 "size": [
52 580,
53 480
54 ],
55 "flags": [],
56 "order": 2,
57 "mode": 0,
58 "inputs": [
59 {
60 "name": "images",
61 "type": "IMAGE",
62 "link": 234
63 }
64 ],
65 "outputs": [],
66 "properties": [],
67 "widgets_values": [
68 "graphic_design_recompose"
69 ]
70 },
71 {
72 "id": 143,
73 "type": "172f1008-9337-4d2f-9212-ee081cb4faf5",
74 "pos": [
75 3280,
76 4920
77 ],
78 "size": [
79 340,
80 180
81 ],
82 "flags": [],
83 "order": 1,
84 "mode": 0,
85 "inputs": [
86 {
87 "name": "images",
88 "shape": 7,
89 "type": "IMAGE",
90 "link": 233
91 }
92 ],
93 "outputs": [
94 {
95 "name": "output",
96 "type": "IMAGE",
97 "links": [
98 234
99 ]
100 }
101 ],
102 "properties": {
103 "proxyWidgets": [
104 [
105 "135",
106 "choice"
107 ],
108 [
109 "156",
110 "value"
111 ],
112 [
113 "142",
114 "value"
115 ]
116 ]
117 },
118 "widgets_values": []
119 }
120 ],
121 "links": [
122 [
123 233,
124 125,
125 0,
126 143,
127 0,
128 "IMAGE"
129 ],
130 [
131 234,
132 143,
133 0,
134 131,
135 0,
136 "IMAGE"
137 ]
138 ],
139 "groups": [],
140 "definitions": {
141 "subgraphs": [
142 {
143 "id": "172f1008-9337-4d2f-9212-ee081cb4faf5",
144 "version": 1,
145 "state": {
146 "lastGroupId": 15,
147 "lastNodeId": 157,
148 "lastLinkId": 248,
149 "lastRerouteId": 0
150 },
151 "revision": 0,
152 "config": [],
153 "name": "Recompose Image",
154 "inputNode": {
155 "id": -10,
156 "bounding": [
157 4690,
158 7430,
159 128,
160 68
161 ]
162 },
163 "outputNode": {
164 "id": -20,
165 "bounding": [
166 7680,
167 7470,
168 128,
169 68
170 ]
171 },
172 "inputs": [
173 {
174 "id": "7cbedb18-b324-4f1b-96d7-4517996bc432",
175 "name": "images",
176 "type": "IMAGE",
177 "linkIds": [
178 212,
179 244
180 ],
181 "localized_name": "images",
182 "shape": 7,
183 "pos": [
184 4794,
185 7454
186 ]
187 }
188 ],
189 "outputs": [
190 {
191 "id": "cde817df-cc4a-4726-9aca-fb1e9200a1e6",
192 "name": "output",
193 "type": "IMAGE",
194 "linkIds": [
195 230
196 ],
197 "localized_name": "output",
198 "pos": [
199 7704,
200 7494
201 ]
202 }
203 ],
204 "widgets": [],
205 "nodes": [
206 {
207 "id": 2,
208 "type": "PrimitiveStringMultiline",
209 "pos": [
210 5190,
211 7570
212 ],
213 "size": [
214 560,
215 580
216 ],
217 "flags": {
218 "collapsed": false
219 },
220 "order": 0,
221 "mode": 0,
222 "inputs": [],
223 "outputs": [
224 {
225 "localized_name": "STRING",
226 "name": "STRING",
227 "type": "STRING",
228 "links": [
229 211,
230 247
231 ]
232 }
233 ],
234 "title": "Prompt",
235 "properties": {
236 "Node name for S&R": "PrimitiveStringMultiline"
237 },
238 "widgets_values": [
239 "Role: Act as an expert art director and compositing specialist. Your objective is to adapt the provided image to a new aspect ratio by expanding the background and rearranging its core elements. Never stretch, squish, or letterbox the image.\n\n1. Canvas Expansion & Outpainting\n\nSeamless Extension: Expand the canvas to the target dimensions using generative outpainting. Seamlessly continue the existing environment (sky, textures, walls, floors) while perfectly matching the original lighting, grain, and perspective.\n\nStrict Limitations: Do not shrink the original image onto a blurred or colored background. Do not introduce new focal objects, characters, or decorative borders. Only continue existing environmental elements.\n\n2. Element Redistribution\n\nTreat as Layers: Separate the main components (typography, logos, hero imagery, credits) into distinct, movable elements.\n\nSmart Rearrangement: Reposition these elements to suit the new aspect ratio using professional layout principles (e.g., shifting a vertical stack into a horizontal, side-by-side composition). Use the newly generated space intentionally to avoid awkward negative space.\n\nPreserve Proportions: Maintain the exact original aspect ratio of every individual element. Keep all font styles, weights, and text styling identical. Scale elements uniformly only if required for layout balance.\n\n3. Visual Integrity & Polish\n\nMaintain Hierarchy: Preserve the original visual dominance of the headline, hero image, and logo placement.\n\nNative Feel: The final composition must look cohesive, breathable, and deliberately designed from scratch for this specific format."
240 ]
241 },
242 {
243 "id": 130,
244 "type": "GeminiImage2Node",
245 "pos": [
246 6020,
247 6910
248 ],
249 "size": [
250 470,
251 350
252 ],
253 "flags": [],
254 "order": 5,
255 "mode": 0,
256 "inputs": [
257 {
258 "localized_name": "images",
259 "name": "images",
260 "shape": 7,
261 "type": "IMAGE",
262 "link": 212
263 },
264 {
265 "localized_name": "files",
266 "name": "files",
267 "shape": 7,
268 "type": "GEMINI_INPUT_FILES",
269 "link": null
270 },
271 {
272 "localized_name": "prompt",
273 "name": "prompt",
274 "type": "STRING",
275 "widget": {
276 "name": "prompt"
277 },
278 "link": 211
279 },
280 {
281 "localized_name": "aspect_ratio",
282 "name": "aspect_ratio",
283 "type": "COMBO",
284 "widget": {
285 "name": "aspect_ratio"
286 },
287 "link": 229
288 },
289 {
290 "localized_name": "resolution",
291 "name": "resolution",
292 "type": "COMBO",
293 "widget": {
294 "name": "resolution"
295 },
296 "link": 243
297 }
298 ],
299 "outputs": [
300 {
301 "localized_name": "IMAGE",
302 "name": "IMAGE",
303 "type": "IMAGE",
304 "links": [
305 232
306 ]
307 },
308 {
309 "localized_name": "STRING",
310 "name": "STRING",
311 "type": "STRING",
312 "links": null
313 }
314 ],
315 "properties": {
316 "Node name for S&R": "GeminiImage2Node"
317 },
318 "widgets_values": [
319 "",
320 "gemini-3-pro-image-preview",
321 314507571392615,
322 "randomize",
323 "16:9",
324 "2K",
325 "IMAGE+TEXT",
326 "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input—regardless of format, intent, or abstraction—as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests."
327 ],
328 "color": "#432",
329 "bgcolor": "#653"
330 },
331 {
332 "id": 134,
333 "type": "ComfySwitchNode",
334 "pos": [
335 7280,
336 7470
337 ],
338 "size": [
339 280,
340 130
341 ],
342 "flags": [],
343 "order": 6,
344 "mode": 0,
345 "inputs": [
346 {
347 "localized_name": "on_false",
348 "name": "on_false",
349 "type": "IMAGE",
350 "link": 232
351 },
352 {
353 "localized_name": "on_true",
354 "name": "on_true",
355 "type": "IMAGE",
356 "link": 248
357 },
358 {
359 "localized_name": "switch",
360 "name": "switch",
361 "type": "BOOLEAN",
362 "widget": {
363 "name": "switch"
364 },
365 "link": 222
366 }
367 ],
368 "outputs": [
369 {
370 "localized_name": "output",
371 "name": "output",
372 "type": "IMAGE",
373 "links": [
374 230
375 ]
376 }
377 ],
378 "properties": {
379 "Node name for S&R": "ComfySwitchNode"
380 },
381 "widgets_values": [
382 true
383 ]
384 },
385 {
386 "id": 135,
387 "type": "CustomCombo",
388 "pos": [
389 6030,
390 8030
391 ],
392 "size": [
393 280,
394 250
395 ],
396 "flags": [],
397 "order": 1,
398 "mode": 0,
399 "inputs": [
400 {
401 "label": "model",
402 "localized_name": "choice",
403 "name": "choice",
404 "type": "COMBO",
405 "widget": {
406 "name": "choice"
407 },
408 "link": null
409 }
410 ],
411 "outputs": [
412 {
413 "localized_name": "STRING",
414 "name": "STRING",
415 "type": "STRING",
416 "links": [
417 217
418 ]
419 },
420 {
421 "localized_name": "INDEX",
422 "name": "INDEX",
423 "type": "INT",
424 "links": null
425 }
426 ],
427 "properties": {
428 "Node name for S&R": "CustomCombo"
429 },
430 "widgets_values": [
431 "Nano Banana 2",
432 0,
433 "Nano Banana 2",
434 "Nano Banana Pro",
435 ""
436 ]
437 },
438 {
439 "id": 157,
440 "type": "GeminiNanoBanana2V2",
441 "pos": [
442 6020,
443 7540
444 ],
445 "size": [
446 400,
447 350
448 ],
449 "flags": [],
450 "order": 7,
451 "mode": 0,
452 "inputs": [
453 {
454 "localized_name": "prompt",
455 "name": "prompt",
456 "type": "STRING",
457 "widget": {
458 "name": "prompt"
459 },
460 "link": 247
461 },
462 {
463 "localized_name": "model.aspect_ratio",
464 "name": "model.aspect_ratio",
465 "type": "COMBO",
466 "widget": {
467 "name": "model.aspect_ratio"
468 },
469 "link": 245
470 },
471 {
472 "localized_name": "model.resolution",
473 "name": "model.resolution",
474 "type": "COMBO",
475 "widget": {
476 "name": "model.resolution"
477 },
478 "link": 246
479 },
480 {
481 "label": "image_1",
482 "localized_name": "model.images.image_1",
483 "name": "model.images.image_1",
484 "shape": 7,
485 "type": "IMAGE",
486 "link": 244
487 },
488 {
489 "label": "image_2",
490 "localized_name": "model.images.image_2",
491 "name": "model.images.image_2",
492 "shape": 7,
493 "type": "IMAGE",
494 "link": null
495 },
496 {
497 "label": "files",
498 "localized_name": "model.files",
499 "name": "model.files",
500 "shape": 7,
501 "type": "GEMINI_INPUT_FILES",
502 "link": null
503 }
504 ],
505 "outputs": [
506 {
507 "localized_name": "IMAGE",
508 "name": "IMAGE",
509 "type": "IMAGE",
510 "links": [
511 248
512 ]
513 },
514 {
515 "localized_name": "STRING",
516 "name": "STRING",
517 "type": "STRING",
518 "links": null
519 },
520 {
521 "localized_name": "thought_image",
522 "name": "thought_image",
523 "type": "IMAGE",
524 "links": null
525 }
526 ],
527 "properties": {
528 "Node name for S&R": "GeminiNanoBanana2V2"
529 },
530 "widgets_values": [
531 "",
532 "Nano Banana 2 (Gemini 3.1 Flash Image)",
533 "16:9",
534 "2K",
535 "MINIMAL",
536 42,
537 "randomize",
538 "IMAGE",
539 "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input—regardless of format, intent, or abstraction—as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests."
540 ],
541 "color": "#432",
542 "bgcolor": "#653"
543 },
544 {
545 "id": 156,
546 "type": "PrimitiveNode",
547 "pos": [
548 5280,
549 7090
550 ],
551 "size": [
552 450,
553 150
554 ],
555 "flags": [],
556 "order": 3,
557 "mode": 0,
558 "inputs": [],
559 "outputs": [
560 {
561 "name": "COMBO",
562 "type": "COMBO",
563 "widget": {
564 "name": "resolution"
565 },
566 "links": [
567 243,
568 246
569 ]
570 }
571 ],
572 "title": "resolution",
573 "properties": {
574 "Run widget replace on values": false
575 },
576 "widgets_values": [
577 "2K",
578 "fixed",
579 ""
580 ]
581 },
582 {
583 "id": 142,
584 "type": "PrimitiveNode",
585 "pos": [
586 5280,
587 7310
588 ],
589 "size": [
590 450,
591 150
592 ],
593 "flags": [],
594 "order": 2,
595 "mode": 0,
596 "inputs": [],
597 "outputs": [
598 {
599 "name": "COMBO",
600 "type": "COMBO",
601 "widget": {
602 "name": "aspect_ratio"
603 },
604 "links": [
605 229,
606 245
607 ]
608 }
609 ],
610 "title": "aspect_ratio",
611 "properties": {
612 "Run widget replace on values": false
613 },
614 "widgets_values": [
615 "16:9",
616 "fixed",
617 ""
618 ]
619 },
620 {
621 "id": 136,
622 "type": "StringCompare",
623 "pos": [
624 6430,
625 8020
626 ],
627 "size": [
628 300,
629 280
630 ],
631 "flags": [],
632 "order": 4,
633 "mode": 0,
634 "showAdvanced": true,
635 "inputs": [
636 {
637 "localized_name": "string_a",
638 "name": "string_a",
639 "type": "STRING",
640 "widget": {
641 "name": "string_a"
642 },
643 "link": 217
644 }
645 ],
646 "outputs": [
647 {
648 "localized_name": "BOOLEAN",
649 "name": "BOOLEAN",
650 "type": "BOOLEAN",
651 "links": [
652 222
653 ]
654 }
655 ],
656 "properties": {
657 "Node name for S&R": "StringCompare"
658 },
659 "widgets_values": [
660 "Nano Banana 2",
661 "nano banana 2",
662 "Starts With",
663 false
664 ]
665 }
666 ],
667 "groups": [],
668 "links": [
669 {
670 "id": 211,
671 "origin_id": 2,
672 "origin_slot": 0,
673 "target_id": 130,
674 "target_slot": 2,
675 "type": "STRING"
676 },
677 {
678 "id": 229,
679 "origin_id": 142,
680 "origin_slot": 0,
681 "target_id": 130,
682 "target_slot": 3,
683 "type": "COMBO"
684 },
685 {
686 "id": 232,
687 "origin_id": 130,
688 "origin_slot": 0,
689 "target_id": 134,
690 "target_slot": 0,
691 "type": "IMAGE"
692 },
693 {
694 "id": 222,
695 "origin_id": 136,
696 "origin_slot": 0,
697 "target_id": 134,
698 "target_slot": 2,
699 "type": "BOOLEAN"
700 },
701 {
702 "id": 217,
703 "origin_id": 135,
704 "origin_slot": 0,
705 "target_id": 136,
706 "target_slot": 0,
707 "type": "STRING"
708 },
709 {
710 "id": 212,
711 "origin_id": -10,
712 "origin_slot": 0,
713 "target_id": 130,
714 "target_slot": 0,
715 "type": "IMAGE"
716 },
717 {
718 "id": 230,
719 "origin_id": 134,
720 "origin_slot": 0,
721 "target_id": -20,
722 "target_slot": 0,
723 "type": "IMAGE"
724 },
725 {
726 "id": 243,
727 "origin_id": 156,
728 "origin_slot": 0,
729 "target_id": 130,
730 "target_slot": 4,
731 "type": "COMBO"
732 },
733 {
734 "id": 244,
735 "origin_id": -10,
736 "origin_slot": 0,
737 "target_id": 157,
738 "target_slot": 3,
739 "type": "IMAGE"
740 },
741 {
742 "id": 245,
743 "origin_id": 142,
744 "origin_slot": 0,
745 "target_id": 157,
746 "target_slot": 1,
747 "type": "COMBO"
748 },
749 {
750 "id": 246,
751 "origin_id": 156,
752 "origin_slot": 0,
753 "target_id": 157,
754 "target_slot": 2,
755 "type": "COMBO"
756 },
757 {
758 "id": 247,
759 "origin_id": 2,
760 "origin_slot": 0,
761 "target_id": 157,
762 "target_slot": 0,
763 "type": "STRING"
764 },
765 {
766 "id": 248,
767 "origin_id": 157,
768 "origin_slot": 0,
769 "target_id": 134,
770 "target_slot": 1,
771 "type": "IMAGE"
772 }
773 ],
774 "extra": {
775 "workflowRendererVersion": "Vue-corrected"
776 }
777 }
778 ]
779 },
780 "config": [],
781 "extra": {
782 "frontendVersion": "1.44.15",
783 "workflowRendererVersion": "Vue-corrected",
784 "linearMode": false,
785 "linearData": {
786 "inputs": [
787 [
788 "125",
789 "image"
790 ],
791 [
792 "135",
793 "choice"
794 ],
795 [
796 "156",
797 "value"
798 ],
799 [
800 "142",
801 "value"
802 ]
803 ],
804 "outputs": [
805 "131"
806 ]
807 },
808 "VHS_KeepIntermediate": true,
809 "VHS_MetadataImage": true,
810 "VHS_latentpreview": false,
811 "VHS_latentpreviewrate": 0,
812 "ds": {
813 "scale": 0.4022323830016147,
814 "offset": [
815 -4682.813818294955,
816 -5898.263907601024
817 ]
818 }
819 },
820 "version": 0.4
821}