ComfyPilotComfyPilot
工作流 / 视频工具 / 帧插值: GIMM-VFI
帧插值: GIMM-VFI

帧插值: GIMM-VFI

Frame Interpolation: GIMM-VFI

在现有视频帧之间生成中间帧,以创建更流畅的运动。输入视频并获得流畅、更高帧率的输出,而无需改变总时长。

视频工具 4 个节点 1 个输入 14 次使用 ComfyUI ≥ 0.16.4 PurzBeats 21 KB

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

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

需要的权重

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

gimmvfi_r_arb_lpips_fp32.safetensors 在模型库查看

节点构成

VHS_VideoCombine × 1
VHS_LoadVideo × 1
8d69124f-cc0e-4891-b9ca-9c1b04432c40 × 1
MarkdownNote × 1

官方标注的模型

None

工作流 JSON

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

1{
2 "id": "da7fbefc-14d4-41ff-aaa7-441bb53d76fc",
3 "revision": 0,
4 "last_node_id": 14,
5 "last_link_id": 26,
6 "nodes": [
7 {
8 "id": 7,
9 "type": "VHS_VideoCombine",
10 "pos": [
11 -600,
12 2060
13 ],
14 "size": [
15 260,
16 460
17 ],
18 "flags": [],
19 "order": 3,
20 "mode": 0,
21 "inputs": [
22 {
23 "name": "images",
24 "type": "IMAGE",
25 "link": 20
26 },
27 {
28 "name": "audio",
29 "shape": 7,
30 "type": "AUDIO",
31 "link": 8
32 },
33 {
34 "name": "meta_batch",
35 "shape": 7,
36 "type": "VHS_BatchManager",
37 "link": null
38 },
39 {
40 "name": "vae",
41 "shape": 7,
42 "type": "VAE",
43 "link": null
44 },
45 {
46 "name": "frame_rate",
47 "type": "FLOAT",
48 "widget": {
49 "name": "frame_rate"
50 },
51 "link": 21
52 }
53 ],
54 "outputs": [
55 {
56 "name": "Filenames",
57 "type": "VHS_FILENAMES",
58 "links": null
59 }
60 ],
61 "properties": {
62 "Node name for S&R": "VHS_VideoCombine"
63 },
64 "widgets_values": {
65 "frame_rate": 8,
66 "loop_count": 0,
67 "filename_prefix": "GIMM",
68 "format": "video/h264-mp4",
69 "pix_fmt": "yuv420p",
70 "crf": 13,
71 "save_metadata": true,
72 "trim_to_audio": false,
73 "pingpong": false,
74 "save_output": true,
75 "videopreview": {
76 "hidden": false,
77 "params": {
78 "filename": "02405ebbb1ebc2c23fa39b0a6e86930ff657950a4b94ca296811f99013f6d475.mp4",
79 "format": "video/h264-mp4",
80 "frame_rate": 72,
81 "fullpath": "",
82 "subfolder": "",
83 "type": "output",
84 "workflow": "GIMM_00001.png"
85 },
86 "paused": false
87 }
88 }
89 },
90 {
91 "id": 8,
92 "type": "VHS_LoadVideo",
93 "pos": [
94 -1380,
95 2060
96 ],
97 "size": [
98 280,
99 413.328125
100 ],
101 "flags": [],
102 "order": 0,
103 "mode": 0,
104 "inputs": [
105 {
106 "name": "meta_batch",
107 "shape": 7,
108 "type": "VHS_BatchManager",
109 "link": null
110 },
111 {
112 "name": "vae",
113 "shape": 7,
114 "type": "VAE",
115 "link": null
116 },
117 {
118 "label": "frames_to_load (0 for all)",
119 "name": "frame_load_cap",
120 "type": "INT",
121 "widget": {
122 "name": "frame_load_cap"
123 },
124 "link": null
125 },
126 {
127 "label": "skip_first_frames (0 for none)",
128 "name": "skip_first_frames",
129 "type": "INT",
130 "widget": {
131 "name": "skip_first_frames"
132 },
133 "link": null
134 }
135 ],
136 "outputs": [
137 {
138 "name": "IMAGE",
139 "type": "IMAGE",
140 "links": [
141 18
142 ]
143 },
144 {
145 "name": "frame_count",
146 "type": "INT",
147 "links": []
148 },
149 {
150 "name": "audio",
151 "type": "AUDIO",
152 "links": [
153 8
154 ]
155 },
156 {
157 "name": "video_info",
158 "type": "VHS_VIDEOINFO",
159 "links": [
160 19
161 ]
162 }
163 ],
164 "properties": {
165 "Node name for S&R": "VHS_LoadVideo"
166 },
167 "widgets_values": {
168 "video": "gimm-input.mp4",
169 "force_rate": 0,
170 "custom_width": 0,
171 "custom_height": 0,
172 "frame_load_cap": 0,
173 "skip_first_frames": 0,
174 "select_every_nth": 1,
175 "format": "AnimateDiff",
176 "videopreview": {
177 "hidden": false,
178 "params": {
179 "custom_height": 0,
180 "custom_width": 0,
181 "filename": "gimm-input.mp4",
182 "force_rate": 0,
183 "format": "video/mp4",
184 "frame_load_cap": 0,
185 "select_every_nth": 1,
186 "skip_first_frames": 0,
187 "type": "input"
188 },
189 "paused": false
190 }
191 }
192 },
193 {
194 "id": 12,
195 "type": "8d69124f-cc0e-4891-b9ca-9c1b04432c40",
196 "pos": [
197 -1000.0000362444753,
198 2059.9998935173735
199 ],
200 "size": [
201 330,
202 170
203 ],
204 "flags": [],
205 "order": 2,
206 "mode": 0,
207 "inputs": [
208 {
209 "label": "input_video",
210 "name": "images",
211 "type": "IMAGE",
212 "link": 18
213 },
214 {
215 "name": "video_info",
216 "type": "VHS_VIDEOINFO",
217 "link": 19
218 },
219 {
220 "label": "interpolation_factor",
221 "name": "value",
222 "type": "INT",
223 "widget": {
224 "name": "value"
225 },
226 "link": null
227 }
228 ],
229 "outputs": [
230 {
231 "label": "output_video",
232 "name": "images",
233 "type": "IMAGE",
234 "links": [
235 20
236 ]
237 },
238 {
239 "label": "output_frame_rate",
240 "name": "FLOAT",
241 "type": "FLOAT",
242 "links": [
243 21
244 ]
245 }
246 ],
247 "properties": {
248 "proxyWidgets": [
249 [
250 "11",
251 "value"
252 ],
253 [
254 "5",
255 "model"
256 ]
257 ]
258 },
259 "widgets_values": []
260 },
261 {
262 "id": 13,
263 "type": "MarkdownNote",
264 "pos": [
265 -1890,
266 2060
267 ],
268 "size": [
269 450,
270 900
271 ],
272 "flags": [],
273 "order": 1,
274 "mode": 0,
275 "inputs": [],
276 "outputs": [],
277 "properties": [],
278 "widgets_values": [
279 "# GIMM Frame Interpolation\n\nInserts synthetic frames between existing frames to increase frame density without changing video duration. Output FPS is multiplied so playback time stays identical.\n\n```\noutput_fps = input_fps × interpolation_factor\n// e.g. 30 fps × 3 = 90 fps, same length\n```\n\n---\n\n## GIMM Interpolation Node\n\n| Setting | Notes |\n|---|---|\n| `interpolation_factor` | Multiplier — `3` inserts 2 new frames per gap |\n| `output_frame_rate` | feeds directly into Video Combine's | \n| `frame_rate` | **don't hardcode it** or duration breaks. |\n---\n## Tips\n\n- Higher factors = smoother but slower and more prone to artifacts on fast motion\n- Test on a short clip before running a full video\n\n\n---\n \n> **In plain English:** Videos are made of still images played rapidly one after another. This workflow uses AI to generate *extra* images and slip them in between the originals — making motion look silkier and more fluid. Your video stays the exact same length, it just has more \"steps\" between each moment."
280 ],
281 "color": "#222",
282 "bgcolor": "#000"
283 }
284 ],
285 "links": [
286 [
287 8,
288 8,
289 2,
290 7,
291 1,
292 "AUDIO"
293 ],
294 [
295 18,
296 8,
297 0,
298 12,
299 0,
300 "IMAGE"
301 ],
302 [
303 19,
304 8,
305 3,
306 12,
307 1,
308 "VHS_VIDEOINFO"
309 ],
310 [
311 20,
312 12,
313 0,
314 7,
315 0,
316 "IMAGE"
317 ],
318 [
319 21,
320 12,
321 1,
322 7,
323 4,
324 "FLOAT"
325 ]
326 ],
327 "groups": [],
328 "definitions": {
329 "subgraphs": [
330 {
331 "id": "8d69124f-cc0e-4891-b9ca-9c1b04432c40",
332 "version": 1,
333 "state": {
334 "lastGroupId": 0,
335 "lastNodeId": 14,
336 "lastLinkId": 26,
337 "lastRerouteId": 0
338 },
339 "revision": 0,
340 "config": [],
341 "name": "GIMM Frame Interpolation",
342 "inputNode": {
343 "id": -10,
344 "bounding": [
345 -1360.2699693627085,
346 2039.1932817190036,
347 149.65234375,
348 120
349 ]
350 },
351 "outputNode": {
352 "id": -20,
353 "bounding": [
354 -358.0327342585682,
355 2039.1932817190036,
356 143.201171875,
357 80
358 ]
359 },
360 "inputs": [
361 {
362 "id": "24e9d9f4-e336-4ce8-af40-9056b5823c6b",
363 "name": "images",
364 "type": "IMAGE",
365 "linkIds": [
366 5
367 ],
368 "localized_name": "images",
369 "label": "input_video",
370 "pos": [
371 -1230.6176256127085,
372 2059.1932817190036
373 ]
374 },
375 {
376 "id": "954f9003-3a40-4089-b963-62b5e5be63c2",
377 "name": "video_info",
378 "type": "VHS_VIDEOINFO",
379 "linkIds": [
380 9
381 ],
382 "localized_name": "video_info",
383 "pos": [
384 -1230.6176256127085,
385 2079.1932817190036
386 ]
387 },
388 {
389 "id": "c323dbb0-1d85-49d3-95d4-bb17fe03421f",
390 "name": "value",
391 "type": "INT",
392 "linkIds": [
393 22
394 ],
395 "label": "interpolation_factor",
396 "pos": [
397 -1230.6176256127085,
398 2099.1932817190036
399 ]
400 },
401 {
402 "id": "55bb8928-582a-4956-b5d7-6affdd9ec59c",
403 "name": "model",
404 "type": "COMBO",
405 "linkIds": [
406 23
407 ],
408 "pos": [
409 -1230.6176256127085,
410 2119.1932817190036
411 ]
412 }
413 ],
414 "outputs": [
415 {
416 "id": "112b3487-5d3f-4cfd-b1f1-1a3c9689f221",
417 "name": "images",
418 "type": "IMAGE",
419 "linkIds": [
420 4
421 ],
422 "localized_name": "images",
423 "label": "output_video",
424 "pos": [
425 -338.0327342585682,
426 2059.1932817190036
427 ]
428 },
429 {
430 "id": "384105bf-ba25-41e2-a759-367a6ff3c5df",
431 "name": "FLOAT",
432 "type": "FLOAT",
433 "linkIds": [
434 26
435 ],
436 "localized_name": "FLOAT",
437 "label": "output_frame_rate",
438 "pos": [
439 -338.0327342585682,
440 2079.1932817190036
441 ]
442 }
443 ],
444 "widgets": [],
445 "nodes": [
446 {
447 "id": 4,
448 "type": "GIMMVFI_interpolate",
449 "pos": [
450 -680,
451 1680
452 ],
453 "size": [
454 280,
455 220
456 ],
457 "flags": [],
458 "order": 0,
459 "mode": 0,
460 "inputs": [
461 {
462 "localized_name": "gimmvfi_model",
463 "name": "gimmvfi_model",
464 "type": "GIMMVIF_MODEL",
465 "link": 2
466 },
467 {
468 "localized_name": "images",
469 "name": "images",
470 "type": "IMAGE",
471 "link": 5
472 },
473 {
474 "localized_name": "interpolation_factor",
475 "name": "interpolation_factor",
476 "type": "INT",
477 "widget": {
478 "name": "interpolation_factor"
479 },
480 "link": 13
481 }
482 ],
483 "outputs": [
484 {
485 "localized_name": "images",
486 "name": "images",
487 "type": "IMAGE",
488 "links": [
489 4
490 ]
491 },
492 {
493 "localized_name": "flow_tensors",
494 "name": "flow_tensors",
495 "type": "IMAGE",
496 "links": null
497 }
498 ],
499 "properties": {
500 "Node name for S&R": "GIMMVFI_interpolate"
501 },
502 "widgets_values": [
503 1,
504 2,
505 53516250445155,
506 "randomize",
507 false
508 ]
509 },
510 {
511 "id": 5,
512 "type": "DownloadAndLoadGIMMVFIModel",
513 "pos": [
514 -1180,
515 1680
516 ],
517 "size": [
518 440,
519 170
520 ],
521 "flags": [],
522 "order": 1,
523 "mode": 0,
524 "inputs": [
525 {
526 "localized_name": "model",
527 "name": "model",
528 "type": "COMBO",
529 "widget": {
530 "name": "model"
531 },
532 "link": 23
533 }
534 ],
535 "outputs": [
536 {
537 "localized_name": "gimmvfi_model",
538 "name": "gimmvfi_model",
539 "type": "GIMMVIF_MODEL",
540 "links": [
541 2
542 ]
543 }
544 ],
545 "properties": {
546 "Node name for S&R": "DownloadAndLoadGIMMVFIModel"
547 },
548 "widgets_values": [
549 "gimmvfi_r_arb_lpips_fp32.safetensors",
550 "fp32",
551 false
552 ]
553 },
554 {
555 "id": 10,
556 "type": "VHS_VideoInfo",
557 "pos": [
558 -1120,
559 2070
560 ],
561 "size": [
562 310,
563 290
564 ],
565 "flags": [],
566 "order": 2,
567 "mode": 0,
568 "inputs": [
569 {
570 "localized_name": "video_info",
571 "name": "video_info",
572 "type": "VHS_VIDEOINFO",
573 "link": 9
574 }
575 ],
576 "outputs": [
577 {
578 "localized_name": "source_fps🟨",
579 "name": "source_fps🟨",
580 "type": "FLOAT",
581 "links": [
582 24
583 ]
584 },
585 {
586 "localized_name": "source_frame_count🟨",
587 "name": "source_frame_count🟨",
588 "type": "INT",
589 "links": null
590 },
591 {
592 "localized_name": "source_duration🟨",
593 "name": "source_duration🟨",
594 "type": "FLOAT",
595 "links": null
596 },
597 {
598 "localized_name": "source_width🟨",
599 "name": "source_width🟨",
600 "type": "INT",
601 "links": null
602 },
603 {
604 "localized_name": "source_height🟨",
605 "name": "source_height🟨",
606 "type": "INT",
607 "links": null
608 },
609 {
610 "localized_name": "loaded_fps🟦",
611 "name": "loaded_fps🟦",
612 "type": "FLOAT",
613 "links": null
614 },
615 {
616 "localized_name": "loaded_frame_count🟦",
617 "name": "loaded_frame_count🟦",
618 "type": "INT",
619 "links": null
620 },
621 {
622 "localized_name": "loaded_duration🟦",
623 "name": "loaded_duration🟦",
624 "type": "FLOAT",
625 "links": null
626 },
627 {
628 "localized_name": "loaded_width🟦",
629 "name": "loaded_width🟦",
630 "type": "INT",
631 "links": null
632 },
633 {
634 "localized_name": "loaded_height🟦",
635 "name": "loaded_height🟦",
636 "type": "INT",
637 "links": null
638 }
639 ],
640 "properties": {
641 "Node name for S&R": "VHS_VideoInfo"
642 },
643 "widgets_values": []
644 },
645 {
646 "id": 11,
647 "type": "PrimitiveInt",
648 "pos": [
649 -1110.0000820077362,
650 2419.999997445337
651 ],
652 "size": [
653 300,
654 104
655 ],
656 "flags": [],
657 "order": 3,
658 "mode": 0,
659 "inputs": [
660 {
661 "localized_name": "value",
662 "name": "value",
663 "type": "INT",
664 "widget": {
665 "name": "value"
666 },
667 "link": 22
668 }
669 ],
670 "outputs": [
671 {
672 "localized_name": "INT",
673 "name": "INT",
674 "type": "INT",
675 "links": [
676 13,
677 25
678 ]
679 }
680 ],
681 "title": "Interpolation Factor",
682 "properties": {
683 "Node name for S&R": "PrimitiveInt"
684 },
685 "widgets_values": [
686 3,
687 "fixed"
688 ]
689 },
690 {
691 "id": 14,
692 "type": "ComfyMathExpression",
693 "pos": [
694 -680,
695 2080
696 ],
697 "size": [
698 270,
699 188
700 ],
701 "flags": [],
702 "order": 4,
703 "mode": 0,
704 "inputs": [
705 {
706 "label": "a",
707 "localized_name": "values.a",
708 "name": "values.a",
709 "type": "FLOAT,INT",
710 "link": 24
711 },
712 {
713 "label": "b",
714 "localized_name": "values.b",
715 "name": "values.b",
716 "shape": 7,
717 "type": "FLOAT,INT",
718 "link": 25
719 },
720 {
721 "label": "c",
722 "localized_name": "values.c",
723 "name": "values.c",
724 "shape": 7,
725 "type": "FLOAT,INT",
726 "link": null
727 }
728 ],
729 "outputs": [
730 {
731 "localized_name": "FLOAT",
732 "name": "FLOAT",
733 "type": "FLOAT",
734 "links": [
735 26
736 ]
737 },
738 {
739 "localized_name": "INT",
740 "name": "INT",
741 "type": "INT",
742 "links": null
743 }
744 ],
745 "properties": {
746 "Node name for S&R": "ComfyMathExpression"
747 },
748 "widgets_values": [
749 "a * b"
750 ]
751 }
752 ],
753 "groups": [],
754 "links": [
755 {
756 "id": 2,
757 "origin_id": 5,
758 "origin_slot": 0,
759 "target_id": 4,
760 "target_slot": 0,
761 "type": "GIMMVIF_MODEL"
762 },
763 {
764 "id": 13,
765 "origin_id": 11,
766 "origin_slot": 0,
767 "target_id": 4,
768 "target_slot": 2,
769 "type": "INT"
770 },
771 {
772 "id": 5,
773 "origin_id": -10,
774 "origin_slot": 0,
775 "target_id": 4,
776 "target_slot": 1,
777 "type": "IMAGE"
778 },
779 {
780 "id": 9,
781 "origin_id": -10,
782 "origin_slot": 1,
783 "target_id": 10,
784 "target_slot": 0,
785 "type": "VHS_VIDEOINFO"
786 },
787 {
788 "id": 4,
789 "origin_id": 4,
790 "origin_slot": 0,
791 "target_id": -20,
792 "target_slot": 0,
793 "type": "IMAGE"
794 },
795 {
796 "id": 22,
797 "origin_id": -10,
798 "origin_slot": 2,
799 "target_id": 11,
800 "target_slot": 0,
801 "type": "INT"
802 },
803 {
804 "id": 23,
805 "origin_id": -10,
806 "origin_slot": 3,
807 "target_id": 5,
808 "target_slot": 0,
809 "type": "COMBO"
810 },
811 {
812 "id": 24,
813 "origin_id": 10,
814 "origin_slot": 0,
815 "target_id": 14,
816 "target_slot": 0,
817 "type": "FLOAT"
818 },
819 {
820 "id": 25,
821 "origin_id": 11,
822 "origin_slot": 0,
823 "target_id": 14,
824 "target_slot": 1,
825 "type": "INT"
826 },
827 {
828 "id": 26,
829 "origin_id": 14,
830 "origin_slot": 0,
831 "target_id": -20,
832 "target_slot": 1,
833 "type": "FLOAT"
834 }
835 ],
836 "extra": []
837 }
838 ]
839 },
840 "config": [],
841 "extra": {
842 "VHS_KeepIntermediate": true,
843 "VHS_MetadataImage": true,
844 "VHS_latentpreview": false,
845 "VHS_latentpreviewrate": 0,
846 "ds": {
847 "scale": 1.3475701531707815,
848 "offset": [
849 1213.0453311810168,
850 -1888.3508610649712
851 ]
852 },
853 "frontendVersion": "1.41.13",
854 "linearData": {
855 "inputs": [
856 [
857 "8",
858 "choose video to upload"
859 ],
860 [
861 "8",
862 "videopreview"
863 ],
864 [
865 "11",
866 "value"
867 ],
868 [
869 "8",
870 "frame_load_cap"
871 ],
872 [
873 "8",
874 "skip_first_frames"
875 ]
876 ],
877 "outputs": [
878 "7"
879 ]
880 },
881 "linearMode": false
882 },
883 "version": 0.4
884}