ComfyPilotComfyPilot
工作流 / 产品与广告 / 产品展示
产品展示

产品展示

Product Placement

将产品交换到参考场景中,同时保留构图和光照。生成最终产品图像和自动视频提示词,用于制作精美的产品视频。

产品与广告 10 个节点 4 个输入 11 次使用 ComfyUI ≥ 0.35.2 Julien | MJM 12 KB

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

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

节点构成

LoadImage × 4
KlingVideoNode × 1
GeminiNode × 1
PreviewAny × 1
SaveVideo × 1
PreviewImage × 1
GeminiNanoBanana2V2 × 1

官方标注的模型

Gemini-3.1-ProKling 3.0Nano Banana 2

工作流 JSON

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

1{
2 "id": "d1881136-0a69-4406-8180-ad455efa57b7",
3 "revision": 0,
4 "last_node_id": 12,
5 "last_link_id": 19,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "LoadImage",
10 "pos": [
11 2869.9995840574766,
12 559.9997282076467
13 ],
14 "size": [
15 290,
16 380
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [
22 {
23 "label": "Product 1",
24 "name": "image",
25 "type": "COMBO",
26 "widget": {
27 "name": "image"
28 },
29 "link": null
30 }
31 ],
32 "outputs": [
33 {
34 "name": "IMAGE",
35 "type": "IMAGE",
36 "links": [
37 15
38 ]
39 },
40 {
41 "name": "MASK",
42 "type": "MASK",
43 "links": null
44 }
45 ],
46 "properties": {
47 "cnr_id": "comfy-core",
48 "ver": "0.20.1",
49 "Node name for S&R": "LoadImage"
50 },
51 "widgets_values": [
52 "product_1_product_placement.png",
53 "image"
54 ]
55 },
56 {
57 "id": 2,
58 "type": "LoadImage",
59 "pos": [
60 2869.9995840574766,
61 1009.9996146513015
62 ],
63 "size": [
64 290,
65 370
66 ],
67 "flags": [],
68 "order": 1,
69 "mode": 0,
70 "inputs": [
71 {
72 "label": "Product 2",
73 "name": "image",
74 "type": "COMBO",
75 "widget": {
76 "name": "image"
77 },
78 "link": null
79 }
80 ],
81 "outputs": [
82 {
83 "name": "IMAGE",
84 "type": "IMAGE",
85 "links": [
86 16
87 ]
88 },
89 {
90 "name": "MASK",
91 "type": "MASK",
92 "links": null
93 }
94 ],
95 "properties": {
96 "cnr_id": "comfy-core",
97 "ver": "0.20.1",
98 "Node name for S&R": "LoadImage"
99 },
100 "widgets_values": [
101 "product_2_product_placement.png",
102 "image"
103 ]
104 },
105 {
106 "id": 3,
107 "type": "LoadImage",
108 "pos": [
109 2869.9995840574766,
110 1429.99936116844
111 ],
112 "size": [
113 290,
114 370
115 ],
116 "flags": [],
117 "order": 2,
118 "mode": 0,
119 "inputs": [
120 {
121 "label": "Product 3",
122 "name": "image",
123 "type": "COMBO",
124 "widget": {
125 "name": "image"
126 },
127 "link": null
128 }
129 ],
130 "outputs": [
131 {
132 "name": "IMAGE",
133 "type": "IMAGE",
134 "links": [
135 17
136 ]
137 },
138 {
139 "name": "MASK",
140 "type": "MASK",
141 "links": null
142 }
143 ],
144 "properties": {
145 "cnr_id": "comfy-core",
146 "ver": "0.20.1",
147 "Node name for S&R": "LoadImage"
148 },
149 "widgets_values": [
150 "product_3_product_placement.png",
151 "image"
152 ]
153 },
154 {
155 "id": 8,
156 "type": "KlingVideoNode",
157 "pos": [
158 4289.999855234904,
159 519.999970327225
160 ],
161 "size": [
162 400,
163 503.65625
164 ],
165 "flags": [],
166 "order": 7,
167 "mode": 0,
168 "inputs": [
169 {
170 "name": "start_frame",
171 "shape": 7,
172 "type": "IMAGE",
173 "link": 13
174 },
175 {
176 "name": "multi_shot.prompt",
177 "type": "STRING",
178 "widget": {
179 "name": "multi_shot.prompt"
180 },
181 "link": 9
182 }
183 ],
184 "outputs": [
185 {
186 "name": "VIDEO",
187 "type": "VIDEO",
188 "links": [
189 10
190 ]
191 }
192 ],
193 "properties": {
194 "cnr_id": "comfy-core",
195 "ver": "0.20.1",
196 "Node name for S&R": "KlingVideoNode"
197 },
198 "widgets_values": [
199 "disabled",
200 "",
201 "",
202 5,
203 true,
204 "kling-v3",
205 "1080p",
206 "1:1",
207 757799685,
208 "randomize"
209 ],
210 "color": "#432",
211 "bgcolor": "#653"
212 },
213 {
214 "id": 9,
215 "type": "GeminiNode",
216 "pos": [
217 3800.000037452948,
218 960.0000345858114
219 ],
220 "size": [
221 400,
222 350
223 ],
224 "flags": [],
225 "order": 6,
226 "mode": 0,
227 "inputs": [
228 {
229 "name": "images",
230 "shape": 7,
231 "type": "IMAGE",
232 "link": 14
233 },
234 {
235 "name": "audio",
236 "shape": 7,
237 "type": "AUDIO",
238 "link": null
239 },
240 {
241 "name": "video",
242 "shape": 7,
243 "type": "VIDEO",
244 "link": null
245 },
246 {
247 "name": "files",
248 "shape": 7,
249 "type": "GEMINI_INPUT_FILES",
250 "link": null
251 }
252 ],
253 "outputs": [
254 {
255 "name": "STRING",
256 "type": "STRING",
257 "links": [
258 9,
259 11
260 ]
261 }
262 ],
263 "properties": {
264 "cnr_id": "comfy-core",
265 "ver": "0.20.1",
266 "Node name for S&R": "GeminiNode"
267 },
268 "widgets_values": [
269 "Write a prompt to create a realistic and dynamic motion for a video model based on this image",
270 "gemini-3-1-pro",
271 966989889712511,
272 "randomize",
273 ""
274 ],
275 "color": "#432",
276 "bgcolor": "#653"
277 },
278 {
279 "id": 11,
280 "type": "PreviewAny",
281 "pos": [
282 4289.999869185175,
283 1079.9999630309526
284 ],
285 "size": [
286 410,
287 220
288 ],
289 "flags": [],
290 "order": 8,
291 "mode": 0,
292 "inputs": [
293 {
294 "name": "source",
295 "type": "*",
296 "link": 11
297 }
298 ],
299 "outputs": [
300 {
301 "name": "STRING",
302 "type": "STRING",
303 "links": null
304 }
305 ],
306 "properties": {
307 "cnr_id": "comfy-core",
308 "ver": "0.20.1",
309 "Node name for S&R": "PreviewAny"
310 },
311 "widgets_values": [
312 null,
313 null,
314 null
315 ]
316 },
317 {
318 "id": 5,
319 "type": "LoadImage",
320 "pos": [
321 2869.9995840574766,
322 1869.9993765615166
323 ],
324 "size": [
325 290,
326 370
327 ],
328 "flags": [],
329 "order": 3,
330 "mode": 0,
331 "inputs": [
332 {
333 "label": "Composition",
334 "name": "image",
335 "type": "COMBO",
336 "widget": {
337 "name": "image"
338 },
339 "link": null
340 }
341 ],
342 "outputs": [
343 {
344 "name": "IMAGE",
345 "type": "IMAGE",
346 "links": [
347 18
348 ]
349 },
350 {
351 "name": "MASK",
352 "type": "MASK",
353 "links": null
354 }
355 ],
356 "title": "Load Image (Composition)",
357 "properties": {
358 "cnr_id": "comfy-core",
359 "ver": "0.20.1",
360 "Node name for S&R": "LoadImage"
361 },
362 "widgets_values": [
363 "reference_image_product_placement.png",
364 "image"
365 ]
366 },
367 {
368 "id": 10,
369 "type": "SaveVideo",
370 "pos": [
371 4739.9998663856695,
372 520.0000491244932
373 ],
374 "size": [
375 580,
376 780
377 ],
378 "flags": [],
379 "order": 9,
380 "mode": 0,
381 "inputs": [
382 {
383 "name": "video",
384 "type": "VIDEO",
385 "link": 10
386 }
387 ],
388 "outputs": [],
389 "properties": {
390 "cnr_id": "comfy-core",
391 "ver": "0.20.1"
392 },
393 "widgets_values": [
394 "video/ComfyUI",
395 "auto",
396 "auto"
397 ]
398 },
399 {
400 "id": 7,
401 "type": "PreviewImage",
402 "pos": [
403 3800.000037452948,
404 520.0000491244932
405 ],
406 "size": [
407 410,
408 350
409 ],
410 "flags": [],
411 "order": 5,
412 "mode": 0,
413 "inputs": [
414 {
415 "name": "images",
416 "type": "IMAGE",
417 "link": 12
418 }
419 ],
420 "outputs": [],
421 "properties": {
422 "cnr_id": "comfy-core",
423 "ver": "0.20.1",
424 "Node name for S&R": "PreviewImage"
425 },
426 "widgets_values": []
427 },
428 {
429 "id": 12,
430 "type": "GeminiNanoBanana2V2",
431 "pos": [
432 3330.000016774102,
433 520.0000491244932
434 ],
435 "size": [
436 400,
437 494.65625
438 ],
439 "flags": [],
440 "order": 4,
441 "mode": 0,
442 "inputs": [
443 {
444 "label": "image_1",
445 "name": "model.images.image_1",
446 "shape": 7,
447 "type": "IMAGE",
448 "link": 15
449 },
450 {
451 "label": "image_2",
452 "name": "model.images.image_2",
453 "shape": 7,
454 "type": "IMAGE",
455 "link": 16
456 },
457 {
458 "label": "image_3",
459 "name": "model.images.image_3",
460 "shape": 7,
461 "type": "IMAGE",
462 "link": 17
463 },
464 {
465 "label": "image_4",
466 "name": "model.images.image_4",
467 "shape": 7,
468 "type": "IMAGE",
469 "link": 18
470 },
471 {
472 "label": "image_5",
473 "name": "model.images.image_5",
474 "shape": 7,
475 "type": "IMAGE",
476 "link": null
477 },
478 {
479 "label": "files",
480 "name": "model.files",
481 "shape": 7,
482 "type": "GEMINI_INPUT_FILES",
483 "link": null
484 }
485 ],
486 "outputs": [
487 {
488 "name": "IMAGE",
489 "type": "IMAGE",
490 "links": [
491 12,
492 13,
493 14
494 ]
495 },
496 {
497 "name": "STRING",
498 "type": "STRING",
499 "links": null
500 },
501 {
502 "name": "thought_image",
503 "type": "IMAGE",
504 "links": null
505 }
506 ],
507 "properties": {
508 "cnr_id": "comfy-core",
509 "ver": "0.20.1",
510 "Node name for S&R": "GeminiNanoBanana2V2"
511 },
512 "widgets_values": [
513 "Using image 4 as the composition reference, recreate the scene replacing the products in the hand with the products from images 1, 2, and 3. Maintain the exact hand pose, angle, lighting, and background. Reproduce all packaging details, colors, and label text accurately on each product. Keep the same fanned arrangement and finger positioning as the reference.",
514 "Nano Banana 2 (Gemini 3.1 Flash Image)",
515 "auto",
516 "1K",
517 "MINIMAL",
518 108061699706383,
519 "randomize",
520 "IMAGE",
521 "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."
522 ],
523 "color": "#432",
524 "bgcolor": "#653"
525 }
526 ],
527 "links": [
528 [
529 9,
530 9,
531 0,
532 8,
533 1,
534 "STRING"
535 ],
536 [
537 10,
538 8,
539 0,
540 10,
541 0,
542 "VIDEO"
543 ],
544 [
545 11,
546 9,
547 0,
548 11,
549 0,
550 "STRING"
551 ],
552 [
553 12,
554 12,
555 0,
556 7,
557 0,
558 "IMAGE"
559 ],
560 [
561 13,
562 12,
563 0,
564 8,
565 0,
566 "IMAGE"
567 ],
568 [
569 14,
570 12,
571 0,
572 9,
573 0,
574 "IMAGE"
575 ],
576 [
577 15,
578 1,
579 0,
580 12,
581 0,
582 "IMAGE"
583 ],
584 [
585 16,
586 2,
587 0,
588 12,
589 1,
590 "IMAGE"
591 ],
592 [
593 17,
594 3,
595 0,
596 12,
597 2,
598 "IMAGE"
599 ],
600 [
601 18,
602 5,
603 0,
604 12,
605 3,
606 "IMAGE"
607 ]
608 ],
609 "groups": [
610 {
611 "id": 1,
612 "title": "Products",
613 "bounding": [
614 2820,
615 470,
616 400,
617 1350
618 ],
619 "color": "#3f789e",
620 "font_size": 24,
621 "flags": []
622 }
623 ],
624 "config": [],
625 "extra": {
626 "ds": {
627 "scale": 0.2690431394095022,
628 "offset": [
629 -1041.2451125516877,
630 1034.5504627232824
631 ]
632 },
633 "frontendVersion": "1.42.15",
634 "workflowRendererVersion": "LG",
635 "linearMode": false,
636 "linearData": {
637 "inputs": [
638 [
639 "12",
640 "prompt"
641 ],
642 [
643 1,
644 "image"
645 ],
646 [
647 2,
648 "image"
649 ],
650 [
651 3,
652 "image"
653 ],
654 [
655 5,
656 "image"
657 ],
658 [
659 "4",
660 "prompt"
661 ]
662 ],
663 "outputs": [
664 7,
665 10
666 ]
667 },
668 "VHS_latentpreview": false,
669 "VHS_latentpreviewrate": 0,
670 "VHS_MetadataImage": true,
671 "VHS_KeepIntermediate": true
672 },
673 "version": 0.4
674}