diff --git a/example_workflows/wanvideo_Stand-In_reference_example_01.json b/example_workflows/wanvideo_Stand-In_reference_example_01.json index 2b93a8d..caa0473 100644 --- a/example_workflows/wanvideo_Stand-In_reference_example_01.json +++ b/example_workflows/wanvideo_Stand-In_reference_example_01.json @@ -1,8 +1,8 @@ { "id": "206247b6-9fec-4ed2-8927-e4f388c674d4", "revision": 0, - "last_node_id": 158, - "last_link_id": 293, + "last_node_id": 159, + "last_link_id": 295, "nodes": [ { "id": 46, @@ -148,45 +148,6 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 11, - "type": "LoadWanVideoT5TextEncoder", - "pos": [ - 172.5333709716797, - -444.4674987792969 - ], - "size": [ - 377.1661376953125, - 130 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "wan_t5_model", - "type": "WANTEXTENCODER", - "slot_index": 0, - "links": [ - 15 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", - "Node name for S&R": "LoadWanVideoT5TextEncoder" - }, - "widgets_values": [ - "umt5-xxl-enc-bf16.safetensors", - "bf16", - "offload_device", - "disabled" - ], - "color": "#332922", - "bgcolor": "#593930" - }, { "id": 48, "type": "CLIPLoader", @@ -199,7 +160,7 @@ 106 ], "flags": {}, - "order": 2, + "order": 1, "mode": 2, "inputs": [], "outputs": [ @@ -236,7 +197,7 @@ 46 ], "flags": {}, - "order": 25, + "order": 24, "mode": 0, "inputs": [ { @@ -269,48 +230,6 @@ "color": "#223", "bgcolor": "#335" }, - { - "id": 35, - "type": "WanVideoTorchCompileSettings", - "pos": [ - -276.8500671386719, - -1050.6326904296875 - ], - "size": [ - 390.5999755859375, - 202 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "torch_compile_args", - "type": "WANCOMPILEARGS", - "slot_index": 0, - "links": [ - 211 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", - "Node name for S&R": "WanVideoTorchCompileSettings" - }, - "widgets_values": [ - "inductor", - false, - "default", - false, - 64, - true, - 128 - ], - "color": "#223", - "bgcolor": "#335" - }, { "id": 28, "type": "WanVideoDecode", @@ -323,7 +242,7 @@ 198 ], "flags": {}, - "order": 42, + "order": 41, "mode": 0, "inputs": [ { @@ -363,93 +282,6 @@ "color": "#322", "bgcolor": "#533" }, - { - "id": 39, - "type": "WanVideoBlockSwap", - "pos": [ - 709.6087646484375, - -658.9224853515625 - ], - "size": [ - 315, - 202 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "block_swap_args", - "type": "BLOCKSWAPARGS", - "slot_index": 0, - "links": [ - 92 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", - "Node name for S&R": "WanVideoBlockSwap" - }, - "widgets_values": [ - 15, - false, - false, - true, - 0, - 1, - false - ], - "color": "#223", - "bgcolor": "#335" - }, - { - "id": 38, - "type": "WanVideoVAELoader", - "pos": [ - 183.16864013671875, - -261.20465087890625 - ], - "size": [ - 372.7727966308594, - 82 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "compile_args", - "shape": 7, - "type": "WANCOMPILEARGS", - "link": null - } - ], - "outputs": [ - { - "name": "vae", - "type": "WANVAE", - "slot_index": 0, - "links": [ - 43, - 175 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", - "Node name for S&R": "WanVideoVAELoader" - }, - "widgets_values": [ - "wanvideo\\Wan2_1_VAE_bf16.safetensors", - "bf16" - ], - "color": "#322", - "bgcolor": "#533" - }, { "id": 79, "type": "WanVideoSetLoRAs", @@ -462,7 +294,7 @@ 46 ], "flags": {}, - "order": 27, + "order": 26, "mode": 0, "inputs": [ { @@ -507,7 +339,7 @@ 82 ], "flags": {}, - "order": 6, + "order": 2, "mode": 0, "inputs": [], "outputs": [ @@ -545,7 +377,7 @@ 82 ], "flags": {}, - "order": 7, + "order": 3, "mode": 0, "inputs": [], "outputs": [ @@ -583,7 +415,7 @@ 82 ], "flags": {}, - "order": 8, + "order": 4, "mode": 0, "inputs": [], "outputs": [ @@ -621,7 +453,7 @@ 143.0945281982422 ], "flags": {}, - "order": 9, + "order": 5, "mode": 0, "inputs": [], "outputs": [], @@ -644,7 +476,7 @@ 292.68145751953125 ], "flags": {}, - "order": 39, + "order": 38, "mode": 0, "inputs": [ { @@ -673,7 +505,7 @@ 150 ], "flags": {}, - "order": 43, + "order": 42, "mode": 0, "inputs": [ { @@ -708,59 +540,6 @@ null ] }, - { - "id": 16, - "type": "WanVideoTextEncode", - "pos": [ - 938.7926025390625, - -17.56817054748535 - ], - "size": [ - 475.7987976074219, - 355.67169189453125 - ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "t5", - "shape": 7, - "type": "WANTEXTENCODER", - "link": 15 - }, - { - "name": "model_to_offload", - "shape": 7, - "type": "WANVIDEOMODEL", - "link": 79 - } - ], - "outputs": [ - { - "name": "text_embeds", - "type": "WANVIDEOTEXTEMBEDS", - "slot_index": 0, - "links": [ - 30 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", - "Node name for S&R": "WanVideoTextEncode" - }, - "widgets_values": [ - "In a corridor where the walls ripple like water, a woman reaches out to touch the flowing surface, causing circles of ripples to spread. The camera moves from a medium shot to a close-up, capturing her curious expression as she sees her distorted reflection", - "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", - true, - false, - "gpu" - ], - "color": "#332922", - "bgcolor": "#593930" - }, { "id": 71, "type": "WanVideoLoraSelect", @@ -773,7 +552,7 @@ 176 ], "flags": {}, - "order": 10, + "order": 6, "mode": 0, "inputs": [ { @@ -812,96 +591,6 @@ "color": "#223", "bgcolor": "#335" }, - { - "id": 22, - "type": "WanVideoModelLoader", - "pos": [ - 150, - -780 - ], - "size": [ - 535.5307006835938, - 294 - ], - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "compile_args", - "shape": 7, - "type": "WANCOMPILEARGS", - "link": 211 - }, - { - "name": "block_swap_args", - "shape": 7, - "type": "BLOCKSWAPARGS", - "link": null - }, - { - "name": "lora", - "shape": 7, - "type": "WANVIDLORA", - "link": 170 - }, - { - "name": "vram_management_args", - "shape": 7, - "type": "VRAM_MANAGEMENTARGS", - "link": null - }, - { - "name": "vace_model", - "shape": 7, - "type": "VACEPATH", - "link": null - }, - { - "name": "fantasytalking_model", - "shape": 7, - "type": "FANTASYTALKINGMODEL", - "link": null - }, - { - "name": "multitalk_model", - "shape": 7, - "type": "MULTITALKMODEL", - "link": null - }, - { - "name": "fantasyportrait_model", - "shape": 7, - "type": "FANTASYPORTRAITMODEL", - "link": null - } - ], - "outputs": [ - { - "name": "model", - "type": "WANVIDEOMODEL", - "slot_index": 0, - "links": [ - 79, - 90 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", - "Node name for S&R": "WanVideoModelLoader" - }, - "widgets_values": [ - "WanVideo\\fp8_scaled_kj\\T2V\\Wan2_1-T2V-14B_fp8_e4m3fn_scaled_KJ.safetensors", - "fp16_fast", - "fp8_e4m3fn_scaled", - "offload_device", - "sageattn" - ], - "color": "#223", - "bgcolor": "#335" - }, { "id": 69, "type": "WanVideoLoraSelect", @@ -914,7 +603,7 @@ 200 ], "flags": {}, - "order": 11, + "order": 7, "mode": 0, "inputs": [ { @@ -964,7 +653,7 @@ 336.0000305175781 ], "flags": {}, - "order": 37, + "order": 36, "mode": 0, "inputs": [ { @@ -1034,7 +723,7 @@ 106 ], "flags": {}, - "order": 28, + "order": 27, "mode": 0, "inputs": [ { @@ -1086,7 +775,7 @@ "flags": { "collapsed": true }, - "order": 26, + "order": 25, "mode": 0, "inputs": [ { @@ -1147,7 +836,7 @@ "flags": { "collapsed": false }, - "order": 30, + "order": 29, "mode": 0, "inputs": [ { @@ -1187,7 +876,7 @@ 82 ], "flags": {}, - "order": 29, + "order": 28, "mode": 0, "inputs": [ { @@ -1236,7 +925,7 @@ 498.3180847167969 ], "flags": {}, - "order": 12, + "order": 8, "mode": 0, "inputs": [], "outputs": [ @@ -1351,7 +1040,7 @@ 246.00003051757812 ], "flags": {}, - "order": 32, + "order": 31, "mode": 0, "inputs": [ { @@ -1380,7 +1069,7 @@ 170 ], "flags": {}, - "order": 31, + "order": 30, "mode": 0, "inputs": [ { @@ -1447,7 +1136,7 @@ 246.00001525878906 ], "flags": {}, - "order": 33, + "order": 32, "mode": 0, "inputs": [ { @@ -1476,7 +1165,7 @@ 82 ], "flags": {}, - "order": 13, + "order": 9, "mode": 0, "inputs": [], "outputs": [ @@ -1510,7 +1199,7 @@ 46 ], "flags": {}, - "order": 34, + "order": 33, "mode": 0, "inputs": [ { @@ -1559,7 +1248,7 @@ "flags": { "collapsed": false }, - "order": 35, + "order": 34, "mode": 0, "inputs": [ { @@ -1613,7 +1302,7 @@ "flags": { "collapsed": true }, - "order": 14, + "order": 10, "mode": 0, "inputs": [], "outputs": [ @@ -1649,7 +1338,7 @@ 262 ], "flags": {}, - "order": 36, + "order": 35, "mode": 4, "inputs": [ { @@ -1717,7 +1406,7 @@ 88 ], "flags": {}, - "order": 15, + "order": 11, "mode": 0, "inputs": [], "outputs": [], @@ -1740,7 +1429,7 @@ 714.8193969726562 ], "flags": {}, - "order": 44, + "order": 43, "mode": 0, "inputs": [ { @@ -1794,17 +1483,465 @@ "hidden": false, "paused": false, "params": { - "filename": "WanVideoWrapper_T2V_Stand_In_00003.mp4", + "filename": "WanVideoWrapper_T2V_Stand_In_00008.mp4", "subfolder": "", "type": "temp", "format": "video/h264-mp4", "frame_rate": 16, - "workflow": "WanVideoWrapper_T2V_Stand_In_00003.png", - "fullpath": "N:\\AI\\ComfyUI\\temp\\WanVideoWrapper_T2V_Stand_In_00003.mp4" + "workflow": "WanVideoWrapper_T2V_Stand_In_00008.png", + "fullpath": "N:\\AI\\ComfyUI\\temp\\WanVideoWrapper_T2V_Stand_In_00008.mp4" } } } }, + { + "id": 102, + "type": "WanVideoAddStandInLatent", + "pos": [ + 626.6787109375, + -36.9838752746582 + ], + "size": [ + 246.94578552246094, + 57.857322692871094 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "embeds", + "type": "WANVIDIMAGE_EMBEDS", + "link": 171 + }, + { + "name": "ip_image_latent", + "type": "LATENT", + "link": 174 + } + ], + "outputs": [ + { + "name": "image_embeds", + "type": "WANVIDIMAGE_EMBEDS", + "links": [ + 172 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "06863fe2d283e89ba2386260ad2700557dda1897", + "Node name for S&R": "WanVideoAddStandInLatent" + }, + "widgets_values": [] + }, + { + "id": 103, + "type": "WanVideoEmptyEmbeds", + "pos": [ + 622.5388793945312, + 96.46371459960938 + ], + "size": [ + 272.431640625, + 126 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "control_embeds", + "shape": 7, + "type": "WANVIDIMAGE_EMBEDS", + "link": null + }, + { + "name": "extra_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 220 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 221 + }, + { + "name": "num_frames", + "type": "INT", + "widget": { + "name": "num_frames" + }, + "link": 222 + } + ], + "outputs": [ + { + "name": "image_embeds", + "type": "WANVIDIMAGE_EMBEDS", + "links": [ + 171 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "06863fe2d283e89ba2386260ad2700557dda1897", + "Node name for S&R": "WanVideoEmptyEmbeds" + }, + "widgets_values": [ + 832, + 480, + 81 + ] + }, + { + "id": 104, + "type": "WanVideoEncode", + "pos": [ + 296.0429382324219, + -27.93423843383789 + ], + "size": [ + 270, + 242 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "WANVAE", + "link": 175 + }, + { + "name": "image", + "type": "IMAGE", + "link": 208 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "samples", + "type": "LATENT", + "links": [ + 174 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "06863fe2d283e89ba2386260ad2700557dda1897", + "Node name for S&R": "WanVideoEncode" + }, + "widgets_values": [ + false, + 272, + 272, + 144, + 128, + 0, + 1 + ] + }, + { + "id": 42, + "type": "Note", + "pos": [ + 568.8908081054688, + -1050.97802734375 + ], + "size": [ + 325.1150207519531, + 196.76773071289062 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Adjust the blocks to swap based on your VRAM, this is a tradeoff between speed and memory usage.\n\nFurther VRAM savings are from torch.compile or alternatively using the chunked rope option in the WanVideoSampler -node" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 36, + "type": "Note", + "pos": [ + 160, + -1010 + ], + "size": [ + 374.3061828613281, + 171.9547576904297 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "fp_16_fast enables \"Full FP16 Accmumulation in FP16 GEMMs\" feature available in the very latest pytorch nightly, this is around 20% speed boost. \n\nSageattn if you have it installed can be used for almost double inference speed" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 159, + "type": "WanVideoTextEncodeCached", + "pos": [ + 953.716796875, + -363.231201171875 + ], + "size": [ + 430.59002685546875, + 373.66790771484375 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "extender_args", + "shape": 7, + "type": "WANVIDEOPROMPTEXTENDER_ARGS", + "link": null + } + ], + "outputs": [ + { + "name": "text_embeds", + "type": "WANVIDEOTEXTEMBEDS", + "links": [ + 294 + ] + }, + { + "name": "negative_text_embeds", + "type": "WANVIDEOTEXTEMBEDS", + "links": null + }, + { + "name": "positive_prompt", + "type": "STRING", + "links": null + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "bbf14ec9e9965c1a8582eea02b50913e79a036d0", + "Node name for S&R": "WanVideoTextEncodeCached" + }, + "widgets_values": [ + "umt5-xxl-enc-bf16.safetensors", + "bf16", + "In a corridor where the walls ripple like water, a woman reaches out to touch the flowing surface, causing circles of ripples to spread. The camera moves from a medium shot to a close-up, capturing her curious expression as she sees her distorted reflection", + "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + "disabled", + true, + "gpu" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 38, + "type": "WanVideoVAELoader", + "pos": [ + 269.694580078125, + -387.9345703125 + ], + "size": [ + 372.7727966308594, + 82 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "WANCOMPILEARGS", + "link": null + } + ], + "outputs": [ + { + "name": "vae", + "type": "WANVAE", + "slot_index": 0, + "links": [ + 43, + 175 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoVAELoader" + }, + "widgets_values": [ + "wanvideo\\Wan2_1_VAE_bf16.safetensors", + "bf16" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 35, + "type": "WanVideoTorchCompileSettings", + "pos": [ + -276.8500671386719, + -1050.6326904296875 + ], + "size": [ + 390.5999755859375, + 202 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "torch_compile_args", + "type": "WANCOMPILEARGS", + "slot_index": 0, + "links": [] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoTorchCompileSettings" + }, + "widgets_values": [ + "inductor", + false, + "default", + false, + 64, + true, + 128 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 22, + "type": "WanVideoModelLoader", + "pos": [ + 150, + -780 + ], + "size": [ + 535.5307006835938, + 294 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "WANCOMPILEARGS", + "link": null + }, + { + "name": "block_swap_args", + "shape": 7, + "type": "BLOCKSWAPARGS", + "link": null + }, + { + "name": "lora", + "shape": 7, + "type": "WANVIDLORA", + "link": 170 + }, + { + "name": "vram_management_args", + "shape": 7, + "type": "VRAM_MANAGEMENTARGS", + "link": null + }, + { + "name": "vace_model", + "shape": 7, + "type": "VACEPATH", + "link": null + }, + { + "name": "fantasytalking_model", + "shape": 7, + "type": "FANTASYTALKINGMODEL", + "link": null + }, + { + "name": "multitalk_model", + "shape": 7, + "type": "MULTITALKMODEL", + "link": null + }, + { + "name": "fantasyportrait_model", + "shape": 7, + "type": "FANTASYPORTRAITMODEL", + "link": null + } + ], + "outputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "slot_index": 0, + "links": [ + 90 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoModelLoader" + }, + "widgets_values": [ + "WanVideo\\fp8_scaled_kj\\T2V\\Wan2_1-T2V-14B_fp8_e4m3fn_scaled_KJ.safetensors", + "fp16_fast", + "fp8_e4m3fn_scaled", + "offload_device", + "sageattn" + ], + "color": "#223", + "bgcolor": "#335" + }, { "id": 27, "type": "WanVideoSampler", @@ -1817,7 +1954,7 @@ 873.39453125 ], "flags": {}, - "order": 41, + "order": 40, "mode": 0, "inputs": [ { @@ -1834,7 +1971,7 @@ "name": "text_embeds", "shape": 7, "type": "WANVIDEOTEXTEMBEDS", - "link": 30 + "link": 294 }, { "name": "samples", @@ -1960,239 +2097,49 @@ ] }, { - "id": 102, - "type": "WanVideoAddStandInLatent", + "id": 39, + "type": "WanVideoBlockSwap", "pos": [ - 626.6787109375, - -36.9838752746582 + 709.6087646484375, + -658.9224853515625 ], "size": [ - 246.94578552246094, - 57.857322692871094 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "embeds", - "type": "WANVIDIMAGE_EMBEDS", - "link": 171 - }, - { - "name": "ip_image_latent", - "type": "LATENT", - "link": 174 - } - ], - "outputs": [ - { - "name": "image_embeds", - "type": "WANVIDIMAGE_EMBEDS", - "links": [ - 172 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "06863fe2d283e89ba2386260ad2700557dda1897", - "Node name for S&R": "WanVideoAddStandInLatent" - }, - "widgets_values": [] - }, - { - "id": 103, - "type": "WanVideoEmptyEmbeds", - "pos": [ - 622.5388793945312, - 96.46371459960938 - ], - "size": [ - 272.431640625, - 126 - ], - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "control_embeds", - "shape": 7, - "type": "WANVIDIMAGE_EMBEDS", - "link": null - }, - { - "name": "extra_latents", - "shape": 7, - "type": "LATENT", - "link": null - }, - { - "name": "width", - "type": "INT", - "widget": { - "name": "width" - }, - "link": 220 - }, - { - "name": "height", - "type": "INT", - "widget": { - "name": "height" - }, - "link": 221 - }, - { - "name": "num_frames", - "type": "INT", - "widget": { - "name": "num_frames" - }, - "link": 222 - } - ], - "outputs": [ - { - "name": "image_embeds", - "type": "WANVIDIMAGE_EMBEDS", - "links": [ - 171 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "06863fe2d283e89ba2386260ad2700557dda1897", - "Node name for S&R": "WanVideoEmptyEmbeds" - }, - "widgets_values": [ - 832, - 480, - 81 - ] - }, - { - "id": 104, - "type": "WanVideoEncode", - "pos": [ - 296.0429382324219, - -27.93423843383789 - ], - "size": [ - 270, - 242 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "vae", - "type": "WANVAE", - "link": 175 - }, - { - "name": "image", - "type": "IMAGE", - "link": 208 - }, - { - "name": "mask", - "shape": 7, - "type": "MASK", - "link": null - } - ], - "outputs": [ - { - "name": "samples", - "type": "LATENT", - "links": [ - 174 - ] - } - ], - "properties": { - "cnr_id": "ComfyUI-WanVideoWrapper", - "ver": "06863fe2d283e89ba2386260ad2700557dda1897", - "Node name for S&R": "WanVideoEncode" - }, - "widgets_values": [ - false, - 272, - 272, - 144, - 128, - 0, - 1 - ] - }, - { - "id": 42, - "type": "Note", - "pos": [ - 568.8908081054688, - -1050.97802734375 - ], - "size": [ - 325.1150207519531, - 196.76773071289062 - ], - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "Adjust the blocks to swap based on your VRAM, this is a tradeoff between speed and memory usage.\n\nFurther VRAM savings are from torch.compile or alternatively using the chunked rope option in the WanVideoSampler -node" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 36, - "type": "Note", - "pos": [ - 160, - -1010 - ], - "size": [ - 374.3061828613281, - 171.9547576904297 + 315, + 202 ], "flags": {}, "order": 17, "mode": 0, "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "fp_16_fast enables \"Full FP16 Accmumulation in FP16 GEMMs\" feature available in the very latest pytorch nightly, this is around 20% speed boost. \n\nSageattn if you have it installed can be used for almost double inference speed" + "outputs": [ + { + "name": "block_swap_args", + "type": "BLOCKSWAPARGS", + "slot_index": 0, + "links": [ + 92 + ] + } ], - "color": "#432", - "bgcolor": "#653" + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoBlockSwap" + }, + "widgets_values": [ + 20, + false, + false, + false, + 0, + 1, + false + ], + "color": "#223", + "bgcolor": "#335" } ], "links": [ - [ - 15, - 11, - 0, - 16, - 0, - "WANTEXTENCODER" - ], - [ - 30, - 16, - 0, - 27, - 2, - "WANVIDEOTEXTEMBEDS" - ], [ 33, 27, @@ -2241,14 +2188,6 @@ 1, "CONDITIONING" ], - [ - 79, - 22, - 0, - 16, - 1, - "WANVIDEOMODEL" - ], [ 90, 22, @@ -2345,14 +2284,6 @@ 1, "WANVIDLORA" ], - [ - 211, - 35, - 0, - 22, - 0, - "WANCOMPILEARGS" - ], [ 215, 68, @@ -2568,6 +2499,14 @@ 142, 0, "IMAGE" + ], + [ + 294, + 159, + 0, + 27, + 2, + "WANVIDEOTEXTEMBEDS" ] ], "groups": [ @@ -2601,10 +2540,10 @@ "config": {}, "extra": { "ds": { - "scale": 0.6934334949441333, + "scale": 0.7627768444385473, "offset": [ - 417.80162764006184, - 993.188273963535 + 150.14488138757767, + 1060.2459615436592 ] }, "frontendVersion": "1.26.2", diff --git a/wanvideo/modules/model.py b/wanvideo/modules/model.py index 8b56ff4..aebbe52 100644 --- a/wanvideo/modules/model.py +++ b/wanvideo/modules/model.py @@ -774,11 +774,16 @@ class WanAttentionBlock(nn.Module): x_main, x_ip_input = input_x[:, : -self.self_attn.cond_size], input_x[:, -self.self_attn.cond_size :] # Compute QKV for main content q, k, v = self.self_attn.qkv_fn(x_main) - q, k = apply_rope_comfy(q, k, freqs) - + if self.rope_func == "comfy": + q, k = apply_rope_comfy(q, k, freqs) + elif self.rope_func == "comfy_chunked": + q, k = apply_rope_comfy_chunked(q, k, freqs) # Compute QKV for IP content q_ip, k_ip, v_ip = self.self_attn.qkv_fn_ip(x_ip_input) - q_ip, k_ip = apply_rope_comfy(q_ip, k_ip, freqs_ip) + if self.rope_func == "comfy": + q_ip, k_ip = apply_rope_comfy(q_ip, k_ip, freqs_ip) + elif self.rope_func == "comfy_chunked": + q_ip, k_ip = apply_rope_comfy_chunked(q_ip, k_ip, freqs_ip) else: q, k, v = self.self_attn.qkv_fn(input_x) if self.rope_func == "comfy":