From 92029219209e2b4a21ba0a92a6e364f6b75f3208 Mon Sep 17 00:00:00 2001 From: kijai <40791699+kijai@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:01:34 +0200 Subject: [PATCH] Refactor Fun sampler to be easier to use with Tora (breaks old workflows!) The FunSampler node in old workflows needs to be remade. I moved the forced bucket resize to it's own node if anyone still wants to use that. --- examples/cogvideox_fun_img2vid_tora_01.json | 1315 +++++++++++++++++ ...dex_fun_5b_GGUF_10GB_VRAM_example_02.json} | 418 +++--- ....json => cogvidex_fun_i2v_example_02.json} | 573 +++---- nodes.py | 341 +++-- 4 files changed, 2036 insertions(+), 611 deletions(-) create mode 100644 examples/cogvideox_fun_img2vid_tora_01.json rename examples/{cogvidex_fun_5b_GGUF_10GB_VRAM_example_01.json => cogvidex_fun_5b_GGUF_10GB_VRAM_example_02.json} (78%) rename examples/{cogvidex_fun_i2v_example_01.json => cogvidex_fun_i2v_example_02.json} (78%) diff --git a/examples/cogvideox_fun_img2vid_tora_01.json b/examples/cogvideox_fun_img2vid_tora_01.json new file mode 100644 index 0000000..6df7f35 --- /dev/null +++ b/examples/cogvideox_fun_img2vid_tora_01.json @@ -0,0 +1,1315 @@ +{ + "last_node_id": 83, + "last_link_id": 209, + "nodes": [ + { + "id": 72, + "type": "LoadImage", + "pos": { + "0": -820, + "1": 531 + }, + "size": { + "0": 315, + "1": 314 + }, + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 166 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "6e1a7befce6daa63fc01cb66c1a22ed0.jpg", + "image" + ] + }, + { + "id": 60, + "type": "SplineEditor", + "pos": { + "0": -307, + "1": 868 + }, + "size": { + "0": 557, + "1": 942 + }, + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "bg_image", + "type": "IMAGE", + "link": 188, + "shape": 7 + } + ], + "outputs": [ + { + "name": "mask", + "type": "MASK", + "links": [ + 146 + ], + "slot_index": 0 + }, + { + "name": "coord_str", + "type": "STRING", + "links": [ + 145, + 176 + ], + "slot_index": 1 + }, + { + "name": "float", + "type": "FLOAT", + "links": null + }, + { + "name": "count", + "type": "INT", + "links": null + }, + { + "name": "normalized_str", + "type": "STRING", + "links": null + } + ], + "properties": { + "Node name for S&R": "SplineEditor", + "points": "SplineEditor", + "imgData": { + "name": "bg_image", + "base64": [ + "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" + ] + } + }, + "widgets_values": [ + "[{\"x\":135.5199999999999,\"y\":241.9999999999998},{\"x\":128.2599999999999,\"y\":313.38999999999976},{\"x\":164.55999999999986,\"y\":373.8899999999997}]", + "[{\"x\":135.52000427246094,\"y\":242},{\"x\":135.22706604003906,\"y\":244.880615234375},{\"x\":134.93411254882812,\"y\":247.76124572753906},{\"x\":134.6411590576172,\"y\":250.64186096191406},{\"x\":134.3482208251953,\"y\":253.52247619628906},{\"x\":134.05743408203125,\"y\":256.4033203125},{\"x\":133.77931213378906,\"y\":259.285400390625},{\"x\":133.52249145507812,\"y\":262.1694641113281},{\"x\":133.2918701171875,\"y\":265.05572509765625},{\"x\":133.091064453125,\"y\":267.9442138671875},{\"x\":132.9228973388672,\"y\":270.83477783203125},{\"x\":132.79014587402344,\"y\":273.7272033691406},{\"x\":132.69479370117188,\"y\":276.6210632324219},{\"x\":132.63876342773438,\"y\":279.5159606933594},{\"x\":132.6254119873047,\"y\":282.411376953125},{\"x\":132.65663146972656,\"y\":285.3066711425781},{\"x\":132.73529052734375,\"y\":288.2010498046875},{\"x\":132.86378479003906,\"y\":291.0936279296875},{\"x\":133.04495239257812,\"y\":293.9833679199219},{\"x\":133.28228759765625,\"y\":296.8690490722656},{\"x\":133.5787811279297,\"y\":299.749267578125},{\"x\":133.93820190429688,\"y\":302.6222839355469},{\"x\":134.36431884765625,\"y\":305.48614501953125},{\"x\":134.8612518310547,\"y\":308.33856201171875},{\"x\":135.4333953857422,\"y\":311.1768493652344},{\"x\":136.08445739746094,\"y\":313.9980773925781},{\"x\":136.8114471435547,\"y\":316.80072021484375},{\"x\":137.6095733642578,\"y\":319.58392333984375},{\"x\":138.47413635253906,\"y\":322.3472595214844},{\"x\":139.4008331298828,\"y\":325.0903625488281},{\"x\":140.38595581054688,\"y\":327.81304931640625},{\"x\":141.42547607421875,\"y\":330.51544189453125},{\"x\":142.5164031982422,\"y\":333.1974792480469},{\"x\":143.65553283691406,\"y\":335.85943603515625},{\"x\":144.83985900878906,\"y\":338.5015869140625},{\"x\":146.0667266845703,\"y\":341.1242370605469},{\"x\":147.33367919921875,\"y\":343.7278137207031},{\"x\":148.63796997070312,\"y\":346.3128356933594},{\"x\":149.9779052734375,\"y\":348.87957763671875},{\"x\":151.3503875732422,\"y\":351.4290771484375},{\"x\":152.7532958984375,\"y\":353.96197509765625},{\"x\":154.18373107910156,\"y\":356.47943115234375},{\"x\":155.6393585205078,\"y\":358.982421875},{\"x\":157.114013671875,\"y\":361.4742126464844},{\"x\":158.6011505126953,\"y\":363.9586181640625},{\"x\":160.0908660888672,\"y\":366.44146728515625},{\"x\":161.58058166503906,\"y\":368.92431640625},{\"x\":163.07028198242188,\"y\":371.40716552734375},{\"x\":164.55999755859375,\"y\":373.8900146484375}]", + 512, + 512, + 49, + "path", + "basis", + 0.5, + 1, + "list", + 0, + 1, + null, + null, + null + ] + }, + { + "id": 56, + "type": "CogVideoDecode", + "pos": { + "0": 1585, + "1": 41 + }, + "size": { + "0": 300.396484375, + "1": 198 + }, + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "COGVIDEOPIPE", + "link": 193 + }, + { + "name": "samples", + "type": "LATENT", + "link": 208 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 155 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CogVideoDecode" + }, + "widgets_values": [ + false, + 240, + 360, + 0.2, + 0.2, + true + ] + }, + { + "id": 73, + "type": "ImageResizeKJ", + "pos": { + "0": -436, + "1": 527 + }, + "size": { + "0": 315, + "1": 266 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 166 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": null, + "widget": { + "name": "width_input" + }, + "shape": 7 + }, + { + "name": "height_input", + "type": "INT", + "link": null, + "widget": { + "name": "height_input" + }, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 188, + 203 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + false, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 31, + "type": "CogVideoTextEncode", + "pos": { + "0": 497, + "1": 520 + }, + "size": { + "0": 466.41448974609375, + "1": 167.15626525878906 + }, + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 209 + } + ], + "outputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "links": [ + 202 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null + } + ], + "properties": { + "Node name for S&R": "CogVideoTextEncode" + }, + "widgets_values": [ + "The video is not of a high quality, it has a low resolution. Watermark present in each frame. Strange motion trajectory. ", + 1, + true + ] + }, + { + "id": 20, + "type": "CLIPLoader", + "pos": { + "0": -13, + "1": 307 + }, + "size": { + "0": 451.30548095703125, + "1": 82 + }, + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 54 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "t5\\google_t5-v1_1-xxl_encoderonly-fp8_e4m3fn.safetensors", + "sd3" + ] + }, + { + "id": 68, + "type": "ImageCompositeMasked", + "pos": { + "0": 1845, + "1": 1133 + }, + "size": { + "0": 315, + "1": 146 + }, + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 155 + }, + { + "name": "source", + "type": "IMAGE", + "link": 153 + }, + { + "name": "mask", + "type": "MASK", + "link": 154, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 156 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 66, + "type": "VHS_VideoCombine", + "pos": { + "0": 1185, + "1": 1158 + }, + "size": [ + 605.3909912109375, + 909.3909912109375 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 142 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 8, + "loop_count": 0, + "filename_prefix": "CogVideoX-Tora-trajectory", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "CogVideoX-Tora-trajectory_00002.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 8 + }, + "muted": false + } + } + }, + { + "id": 65, + "type": "CreateShapeImageOnPath", + "pos": { + "0": 818, + "1": 1169 + }, + "size": { + "0": 313.4619445800781, + "1": 286 + }, + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "coordinates", + "type": "STRING", + "link": 145, + "widget": { + "name": "coordinates" + } + }, + { + "name": "size_multiplier", + "type": "FLOAT", + "link": null, + "widget": { + "name": "size_multiplier" + }, + "shape": 7 + }, + { + "name": "frame_width", + "type": "INT", + "link": 149, + "widget": { + "name": "frame_width" + } + }, + { + "name": "frame_height", + "type": "INT", + "link": 150, + "widget": { + "name": "frame_height" + } + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 142, + 153 + ], + "slot_index": 0 + }, + { + "name": "mask", + "type": "MASK", + "links": [ + 154 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "CreateShapeImageOnPath" + }, + "widgets_values": [ + "circle", + "", + 512, + 512, + 12, + 12, + "red", + "black", + 0, + 1, + [ + 1 + ], + 1 + ] + }, + { + "id": 83, + "type": "Note", + "pos": { + "0": 878, + "1": 1512 + }, + "size": [ + 232.98718755357777, + 92.3359134366683 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "This is just for visualization, not necessary otherwise" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 1, + "type": "DownloadAndLoadCogVideoModel", + "pos": { + "0": 633, + "1": 44 + }, + "size": [ + 397.3594142178358, + 194 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "pab_config", + "type": "PAB_CONFIG", + "link": null, + "shape": 7 + }, + { + "name": "block_edit", + "type": "TRANSFORMERBLOCKS", + "link": null, + "shape": 7 + }, + { + "name": "lora", + "type": "COGLORA", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "cogvideo_pipe", + "type": "COGVIDEOPIPE", + "links": [ + 174, + 193, + 200 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadAndLoadCogVideoModel" + }, + "widgets_values": [ + "alibaba-pai/CogVideoX-Fun-V1.1-5b-InP", + "bf16", + "disabled", + "disabled", + false + ] + }, + { + "id": 67, + "type": "GetMaskSizeAndCount", + "pos": { + "0": 364, + "1": 862 + }, + "size": { + "0": 264.5999755859375, + "1": 86 + }, + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 146 + } + ], + "outputs": [ + { + "name": "mask", + "type": "MASK", + "links": null + }, + { + "name": "width", + "type": "INT", + "links": [ + 149, + 171, + 205 + ], + "slot_index": 1 + }, + { + "name": "height", + "type": "INT", + "links": [ + 150, + 172, + 206 + ], + "slot_index": 2 + }, + { + "name": "count", + "type": "INT", + "links": [ + 170, + 207 + ], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "GetMaskSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 75, + "type": "DownloadAndLoadToraModel", + "pos": { + "0": 259, + "1": 55 + }, + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "tora_model", + "type": "TORAMODEL", + "links": [ + 175 + ] + } + ], + "properties": { + "Node name for S&R": "DownloadAndLoadToraModel" + }, + "widgets_values": [ + "kijai/CogVideoX-5b-Tora" + ] + }, + { + "id": 30, + "type": "CogVideoTextEncode", + "pos": { + "0": 493, + "1": 303 + }, + "size": { + "0": 471.90142822265625, + "1": 168.08047485351562 + }, + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 54 + } + ], + "outputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "links": [ + 201 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": [ + 209 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "CogVideoTextEncode" + }, + "widgets_values": [ + "anime chibi toy moving her arm", + 1, + false + ] + }, + { + "id": 80, + "type": "CogVideoXFunSampler", + "pos": { + "0": 1131, + "1": 150 + }, + "size": { + "0": 367.79998779296875, + "1": 434 + }, + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "COGVIDEOPIPE", + "link": 200 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 201 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 202 + }, + { + "name": "start_img", + "type": "IMAGE", + "link": 203, + "shape": 7 + }, + { + "name": "end_img", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "context_options", + "type": "COGCONTEXT", + "link": null, + "shape": 7 + }, + { + "name": "tora_trajectory", + "type": "TORAFEATURES", + "link": 204, + "shape": 7 + }, + { + "name": "fastercache", + "type": "FASTERCACHEARGS", + "link": null, + "shape": 7 + }, + { + "name": "vid2vid_images", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width", + "type": "INT", + "link": 205, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 206, + "widget": { + "name": "height" + } + }, + { + "name": "video_length", + "type": "INT", + "link": 207, + "widget": { + "name": "video_length" + } + } + ], + "outputs": [ + { + "name": "cogvideo_pipe", + "type": "COGVIDEOPIPE", + "links": null + }, + { + "name": "samples", + "type": "LATENT", + "links": [ + 208 + ] + } + ], + "properties": { + "Node name for S&R": "CogVideoXFunSampler" + }, + "widgets_values": [ + 49, + 720, + 480, + 43, + "fixed", + 20, + 6, + "DDIM", + 0.056, + 1 + ] + }, + { + "id": 74, + "type": "ToraEncodeTrajectory", + "pos": { + "0": 1129, + "1": 675 + }, + "size": { + "0": 335.1993408203125, + "1": 230 + }, + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "COGVIDEOPIPE", + "link": 174 + }, + { + "name": "tora_model", + "type": "TORAMODEL", + "link": 175 + }, + { + "name": "coordinates", + "type": "STRING", + "link": 176, + "widget": { + "name": "coordinates" + } + }, + { + "name": "num_frames", + "type": "INT", + "link": 170, + "widget": { + "name": "num_frames" + } + }, + { + "name": "width", + "type": "INT", + "link": 171, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 172, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "tora_trajectory", + "type": "TORAFEATURES", + "links": [ + 204 + ] + }, + { + "name": "video_flow_images", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "Node name for S&R": "ToraEncodeTrajectory" + }, + "widgets_values": [ + "", + 720, + 480, + 49, + 1, + 0, + 0.4, + false + ] + }, + { + "id": 44, + "type": "VHS_VideoCombine", + "pos": { + "0": 2477, + "1": 48 + }, + "size": [ + 1131.619140625, + 1435.619140625 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 156 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 16, + "loop_count": 0, + "filename_prefix": "CogVideoX-Tora", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "CogVideoX-Tora_00005.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 16 + }, + "muted": false + } + } + } + ], + "links": [ + [ + 54, + 20, + 0, + 30, + 0, + "CLIP" + ], + [ + 142, + 65, + 0, + 66, + 0, + "IMAGE" + ], + [ + 145, + 60, + 1, + 65, + 0, + "STRING" + ], + [ + 146, + 60, + 0, + 67, + 0, + "MASK" + ], + [ + 149, + 67, + 1, + 65, + 2, + "INT" + ], + [ + 150, + 67, + 2, + 65, + 3, + "INT" + ], + [ + 153, + 65, + 0, + 68, + 1, + "IMAGE" + ], + [ + 154, + 65, + 1, + 68, + 2, + "MASK" + ], + [ + 155, + 56, + 0, + 68, + 0, + "IMAGE" + ], + [ + 156, + 68, + 0, + 44, + 0, + "IMAGE" + ], + [ + 166, + 72, + 0, + 73, + 0, + "IMAGE" + ], + [ + 170, + 67, + 3, + 74, + 3, + "INT" + ], + [ + 171, + 67, + 1, + 74, + 4, + "INT" + ], + [ + 172, + 67, + 2, + 74, + 5, + "INT" + ], + [ + 174, + 1, + 0, + 74, + 0, + "COGVIDEOPIPE" + ], + [ + 175, + 75, + 0, + 74, + 1, + "TORAMODEL" + ], + [ + 176, + 60, + 1, + 74, + 2, + "STRING" + ], + [ + 188, + 73, + 0, + 60, + 0, + "IMAGE" + ], + [ + 193, + 1, + 0, + 56, + 0, + "COGVIDEOPIPE" + ], + [ + 200, + 1, + 0, + 80, + 0, + "COGVIDEOPIPE" + ], + [ + 201, + 30, + 0, + 80, + 1, + "CONDITIONING" + ], + [ + 202, + 31, + 0, + 80, + 2, + "CONDITIONING" + ], + [ + 203, + 73, + 0, + 80, + 3, + "IMAGE" + ], + [ + 204, + 74, + 0, + 80, + 6, + "TORAFEATURES" + ], + [ + 205, + 67, + 1, + 80, + 9, + "INT" + ], + [ + 206, + 67, + 2, + 80, + 10, + "INT" + ], + [ + 207, + 67, + 3, + 80, + 11, + "INT" + ], + [ + 208, + 80, + 1, + 56, + 1, + "LATENT" + ], + [ + 209, + 30, + 1, + 31, + 0, + "CLIP" + ] + ], + "groups": [ + { + "title": "TrajectoryViz", + "bounding": [ + 758, + 998, + 1508, + 1090 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.513158118230707, + "offset": [ + 1119.103710663005, + 88.72790106693894 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/cogvidex_fun_5b_GGUF_10GB_VRAM_example_01.json b/examples/cogvidex_fun_5b_GGUF_10GB_VRAM_example_02.json similarity index 78% rename from examples/cogvidex_fun_5b_GGUF_10GB_VRAM_example_01.json rename to examples/cogvidex_fun_5b_GGUF_10GB_VRAM_example_02.json index 1dc562c..40c777c 100644 --- a/examples/cogvidex_fun_5b_GGUF_10GB_VRAM_example_01.json +++ b/examples/cogvidex_fun_5b_GGUF_10GB_VRAM_example_02.json @@ -1,6 +1,6 @@ { - "last_node_id": 48, - "last_link_id": 101, + "last_node_id": 51, + "last_link_id": 114, "nodes": [ { "id": 20, @@ -22,8 +22,7 @@ "name": "CLIP", "type": "CLIP", "links": [ - 54, - 56 + 54 ], "slot_index": 0, "shape": 3 @@ -46,16 +45,16 @@ }, "size": { "0": 463.01251220703125, - "1": 124 + "1": 144 }, "flags": {}, - "order": 4, + "order": 5, "mode": 0, "inputs": [ { "name": "clip", "type": "CLIP", - "link": 56 + "link": 108 } ], "outputs": [ @@ -63,10 +62,15 @@ "name": "conditioning", "type": "CONDITIONING", "links": [ - 86 + 111 ], "slot_index": 0, "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null } ], "properties": { @@ -87,7 +91,7 @@ }, "size": [ 855.81494140625, - 927.6441243489584 + 881.2099609375 ], "flags": {}, "order": 8, @@ -101,17 +105,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -139,7 +146,7 @@ "hidden": false, "paused": false, "params": { - "filename": "CogVideoX_Fun_00012.mp4", + "filename": "CogVideoX_Fun_00003.mp4", "subfolder": "", "type": "temp", "format": "video/h264-mp4", @@ -149,61 +156,12 @@ } } }, - { - "id": 11, - "type": "CogVideoDecode", - "pos": { - "0": 1448, - "1": 345 - }, - "size": { - "0": 300.396484375, - "1": 198 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "pipeline", - "type": "COGVIDEOPIPE", - "link": 89 - }, - { - "name": "samples", - "type": "LATENT", - "link": 88 - } - ], - "outputs": [ - { - "name": "images", - "type": "IMAGE", - "links": [ - 97 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CogVideoDecode" - }, - "widgets_values": [ - true, - 240, - 360, - 0.2, - 0.2, - true - ] - }, { "id": 36, "type": "LoadImage", "pos": { - "0": 364, - "1": 715 + "0": 227, + "1": 700 }, "size": { "0": 391.3421325683594, @@ -242,15 +200,15 @@ "id": 37, "type": "ImageResizeKJ", "pos": { - "0": 824, - "1": 715 + "0": 688, + "1": 708 }, "size": { "0": 315, "1": 266 }, "flags": {}, - "order": 5, + "order": 4, "mode": 0, "inputs": [ { @@ -261,7 +219,8 @@ { "name": "get_image_size", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "width_input", @@ -285,7 +244,7 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 87 + 112 ], "slot_index": 0, "shape": 3 @@ -317,6 +276,55 @@ "disabled" ] }, + { + "id": 11, + "type": "CogVideoDecode", + "pos": { + "0": 1477, + "1": 344 + }, + "size": { + "0": 300.396484375, + "1": 198 + }, + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "COGVIDEOPIPE", + "link": 113 + }, + { + "name": "samples", + "type": "LATENT", + "link": 114 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 97 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CogVideoDecode" + }, + "widgets_values": [ + true, + 240, + 360, + 0.2, + 0.2, + true + ] + }, { "id": 30, "type": "CogVideoTextEncode", @@ -343,10 +351,18 @@ "name": "conditioning", "type": "CONDITIONING", "links": [ - 85 + 110 ], "slot_index": 0, "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": [ + 108 + ], + "slot_index": 1 } ], "properties": { @@ -355,55 +371,19 @@ "widgets_values": [ "majestic stag grazing in a forest and basking in the setting sun", 1, - true + false ] }, { - "id": 48, - "type": "DownloadAndLoadCogVideoGGUFModel", - "pos": { - "0": 584, - "1": 103 - }, - "size": { - "0": 378, - "1": 130 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "cogvideo_pipe", - "type": "COGVIDEOPIPE", - "links": [ - 101 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadCogVideoGGUFModel" - }, - "widgets_values": [ - "CogVideoX_5b_fun_GGUF_Q4_0.safetensors", - "bf16", - false, - "offload_device" - ] - }, - { - "id": 41, + "id": 51, "type": "CogVideoXFunSampler", "pos": { "0": 1058, "1": 345 }, "size": { - "0": 315, - "1": 302 + "0": 367.79998779296875, + "1": 434 }, "flags": {}, "order": 6, @@ -412,32 +392,53 @@ { "name": "pipeline", "type": "COGVIDEOPIPE", - "link": 101 + "link": 109 }, { "name": "positive", "type": "CONDITIONING", - "link": 85 + "link": 110 }, { "name": "negative", "type": "CONDITIONING", - "link": 86 + "link": 111 }, { "name": "start_img", "type": "IMAGE", - "link": 87 + "link": 112, + "shape": 7 }, { "name": "end_img", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { - "name": "opt_empty_latent", - "type": "LATENT", - "link": null + "name": "context_options", + "type": "COGCONTEXT", + "link": null, + "shape": 7 + }, + { + "name": "tora_trajectory", + "type": "TORAFEATURES", + "link": null, + "shape": 7 + }, + { + "name": "fastercache", + "type": "FASTERCACHEARGS", + "link": null, + "shape": 7 + }, + { + "name": "vid2vid_images", + "type": "IMAGE", + "link": null, + "shape": 7 } ], "outputs": [ @@ -445,18 +446,15 @@ "name": "cogvideo_pipe", "type": "COGVIDEOPIPE", "links": [ - 89 - ], - "slot_index": 0, - "shape": 3 + 113 + ] }, { "name": "samples", "type": "LATENT", "links": [ - 88 - ], - "shape": 3 + 114 + ] } ], "properties": { @@ -464,12 +462,66 @@ }, "widgets_values": [ 49, - 512, - 44, - "fixed", - 30, + 720, + 480, + 43, + "randomize", + 50, 6, - "CogVideoXDPMScheduler" + "DDIM", + 0.0563, + 1 + ] + }, + { + "id": 48, + "type": "DownloadAndLoadCogVideoGGUFModel", + "pos": { + "0": 585, + "1": 34 + }, + "size": { + "0": 378, + "1": 198 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "pab_config", + "type": "PAB_CONFIG", + "link": null, + "shape": 7 + }, + { + "name": "block_edit", + "type": "TRANSFORMERBLOCKS", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "cogvideo_pipe", + "type": "COGVIDEOPIPE", + "links": [ + 109 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadAndLoadCogVideoGGUFModel" + }, + "widgets_values": [ + "CogVideoX_5b_fun_1_1_GGUF_Q4_0.safetensors", + "bf16", + false, + "offload_device", + false, + "disabled" ] } ], @@ -482,14 +534,6 @@ 0, "CLIP" ], - [ - 56, - 20, - 0, - 31, - 0, - "CLIP" - ], [ 71, 36, @@ -498,46 +542,6 @@ 0, "IMAGE" ], - [ - 85, - 30, - 0, - 41, - 1, - "CONDITIONING" - ], - [ - 86, - 31, - 0, - 41, - 2, - "CONDITIONING" - ], - [ - 87, - 37, - 0, - 41, - 3, - "IMAGE" - ], - [ - 88, - 41, - 1, - 11, - 1, - "LATENT" - ], - [ - 89, - 41, - 0, - 11, - 0, - "COGVIDEOPIPE" - ], [ 97, 11, @@ -547,22 +551,70 @@ "IMAGE" ], [ - 101, + 108, + 30, + 1, + 31, + 0, + "CLIP" + ], + [ + 109, 48, 0, - 41, + 51, 0, "COGVIDEOPIPE" + ], + [ + 110, + 30, + 0, + 51, + 1, + "CONDITIONING" + ], + [ + 111, + 31, + 0, + 51, + 2, + "CONDITIONING" + ], + [ + 112, + 37, + 0, + 51, + 3, + "IMAGE" + ], + [ + 113, + 51, + 0, + 11, + 0, + "COGVIDEOPIPE" + ], + [ + 114, + 51, + 1, + 11, + 1, + "LATENT" ] ], "groups": [], "config": {}, "extra": { "ds": { - "scale": 0.7627768444385654, + "scale": 0.7513148009015784, "offset": [ - 62.58315607223924, - 102.05205752424705 + 724.7448506313632, + 128.336592104936 ] } }, diff --git a/examples/cogvidex_fun_i2v_example_01.json b/examples/cogvidex_fun_i2v_example_02.json similarity index 78% rename from examples/cogvidex_fun_i2v_example_01.json rename to examples/cogvidex_fun_i2v_example_02.json index 5fb8da0..d7023d1 100644 --- a/examples/cogvidex_fun_i2v_example_01.json +++ b/examples/cogvidex_fun_i2v_example_02.json @@ -1,6 +1,6 @@ { - "last_node_id": 45, - "last_link_id": 97, + "last_node_id": 47, + "last_link_id": 110, "nodes": [ { "id": 20, @@ -22,8 +22,7 @@ "name": "CLIP", "type": "CLIP", "links": [ - 54, - 56 + 54 ], "slot_index": 0, "shape": 3 @@ -37,85 +36,6 @@ "sd3" ] }, - { - "id": 37, - "type": "ImageResizeKJ", - "pos": { - "0": 824, - "1": 715 - }, - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 71 - }, - { - "name": "get_image_size", - "type": "IMAGE", - "link": null - }, - { - "name": "width_input", - "type": "INT", - "link": null, - "widget": { - "name": "width_input" - } - }, - { - "name": "height_input", - "type": "INT", - "link": null, - "widget": { - "name": "height_input" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 87 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "height", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageResizeKJ" - }, - "widgets_values": [ - 720, - 480, - "nearest-exact", - false, - 2, - 0, - 0, - "disabled" - ] - }, { "id": 11, "type": "CogVideoDecode", @@ -134,12 +54,12 @@ { "name": "pipeline", "type": "COGVIDEOPIPE", - "link": 89 + "link": 108 }, { "name": "samples", "type": "LATENT", - "link": 88 + "link": 109 } ], "outputs": [ @@ -165,43 +85,6 @@ true ] }, - { - "id": 1, - "type": "DownloadAndLoadCogVideoModel", - "pos": { - "0": 642, - "1": 90 - }, - "size": { - "0": 337.8885192871094, - "1": 154 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "cogvideo_pipe", - "type": "COGVIDEOPIPE", - "links": [ - 84 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadCogVideoModel" - }, - "widgets_values": [ - "kijai/CogVideoX-Fun-5b", - "bf16", - "disabled", - "disabled", - false - ] - }, { "id": 31, "type": "CogVideoTextEncode", @@ -211,16 +94,16 @@ }, "size": { "0": 463.01251220703125, - "1": 98.10446166992188 + "1": 144 }, "flags": {}, - "order": 4, + "order": 5, "mode": 0, "inputs": [ { "name": "clip", "type": "CLIP", - "link": 56 + "link": 110 } ], "outputs": [ @@ -228,17 +111,24 @@ "name": "conditioning", "type": "CONDITIONING", "links": [ - 86 + 106 ], "slot_index": 0, "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null } ], "properties": { "Node name for S&R": "CogVideoTextEncode" }, "widgets_values": [ - "The video is not of a high quality, it has a low resolution. Watermark present in each frame. Strange motion trajectory. " + "The video is not of a high quality, it has a low resolution. Watermark present in each frame. Strange motion trajectory. ", + 1, + true ] }, { @@ -249,8 +139,8 @@ "1": 345 }, "size": [ - 605.3909898931465, - 724.5306772953109 + 605.3909912109375, + 714.2606608072917 ], "flags": {}, "order": 8, @@ -264,17 +154,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -302,7 +195,7 @@ "hidden": false, "paused": false, "params": { - "filename": "CogVideoX_Fun_00003.mp4", + "filename": "CogVideoX_Fun_00001.mp4", "subfolder": "", "type": "temp", "format": "video/h264-mp4", @@ -313,15 +206,191 @@ } }, { - "id": 41, - "type": "CogVideoXFunSampler", + "id": 36, + "type": "LoadImage", "pos": { - "0": 1058, - "1": 345 + "0": 325, + "1": 715 + }, + "size": { + "0": 432.4361877441406, + "1": 361.0254211425781 + }, + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 71 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "6e1a7befce6daa63fc01cb66c1a22ed0.jpg", + "image" + ] + }, + { + "id": 1, + "type": "DownloadAndLoadCogVideoModel", + "pos": { + "0": 602, + "1": 53 + }, + "size": { + "0": 337.8885192871094, + "1": 194 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "pab_config", + "type": "PAB_CONFIG", + "link": null, + "shape": 7 + }, + { + "name": "block_edit", + "type": "TRANSFORMERBLOCKS", + "link": null, + "shape": 7 + }, + { + "name": "lora", + "type": "COGLORA", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "cogvideo_pipe", + "type": "COGVIDEOPIPE", + "links": [ + 104 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadAndLoadCogVideoModel" + }, + "widgets_values": [ + "kijai/CogVideoX-Fun-5b", + "bf16", + "disabled", + "disabled", + false + ] + }, + { + "id": 37, + "type": "ImageResizeKJ", + "pos": { + "0": 824, + "1": 715 }, "size": { "0": 315, - "1": 282 + "1": 266 + }, + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 71 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": null, + "widget": { + "name": "width_input" + } + }, + { + "name": "height_input", + "type": "INT", + "link": null, + "widget": { + "name": "height_input" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 107 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ" + }, + "widgets_values": [ + 720, + 480, + "lanczos", + false, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 47, + "type": "CogVideoXFunSampler", + "pos": { + "0": 1068, + "1": 198 + }, + "size": { + "0": 367.79998779296875, + "1": 434 }, "flags": {}, "order": 6, @@ -330,27 +399,53 @@ { "name": "pipeline", "type": "COGVIDEOPIPE", - "link": 84 + "link": 104 }, { "name": "positive", "type": "CONDITIONING", - "link": 85 + "link": 105 }, { "name": "negative", "type": "CONDITIONING", - "link": 86 + "link": 106 }, { "name": "start_img", "type": "IMAGE", - "link": 87 + "link": 107, + "shape": 7 }, { "name": "end_img", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 + }, + { + "name": "context_options", + "type": "COGCONTEXT", + "link": null, + "shape": 7 + }, + { + "name": "tora_trajectory", + "type": "TORAFEATURES", + "link": null, + "shape": 7 + }, + { + "name": "fastercache", + "type": "FASTERCACHEARGS", + "link": null, + "shape": 7 + }, + { + "name": "vid2vid_images", + "type": "IMAGE", + "link": null, + "shape": 7 } ], "outputs": [ @@ -358,18 +453,15 @@ "name": "cogvideo_pipe", "type": "COGVIDEOPIPE", "links": [ - 89 - ], - "slot_index": 0, - "shape": 3 + 108 + ] }, { "name": "samples", "type": "LATENT", "links": [ - 88 - ], - "shape": 3 + 109 + ] } ], "properties": { @@ -377,12 +469,15 @@ }, "widgets_values": [ 49, - 512, + 720, + 480, 43, "fixed", - 30, + 50, 6, - "DPM++" + "DDIM", + 0.0563, + 1 ] }, { @@ -411,57 +506,27 @@ "name": "conditioning", "type": "CONDITIONING", "links": [ - 85 + 105 ], "slot_index": 0, "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": [ + 110 + ], + "slot_index": 1 } ], "properties": { "Node name for S&R": "CogVideoTextEncode" }, "widgets_values": [ - "fireworks display over night city. The video is of high quality, and the view is very clear. High quality, masterpiece, best quality, highres, ultra-detailed, fantastic." - ] - }, - { - "id": 36, - "type": "LoadImage", - "pos": { - "0": 325, - "1": 715 - }, - "size": { - "0": 432.4361877441406, - "1": 361.0254211425781 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 71 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "6e1a7befce6daa63fc01cb66c1a22ed0.jpg", - "image" + "fireworks display over night city. The video is of high quality, and the view is very clear. High quality, masterpiece, best quality, highres, ultra-detailed, fantastic.", + 1, + false ] } ], @@ -474,14 +539,6 @@ 0, "CLIP" ], - [ - 56, - 20, - 0, - 31, - 0, - "CLIP" - ], [ 71, 36, @@ -490,54 +547,6 @@ 0, "IMAGE" ], - [ - 84, - 1, - 0, - 41, - 0, - "COGVIDEOPIPE" - ], - [ - 85, - 30, - 0, - 41, - 1, - "CONDITIONING" - ], - [ - 86, - 31, - 0, - 41, - 2, - "CONDITIONING" - ], - [ - 87, - 37, - 0, - 41, - 3, - "IMAGE" - ], - [ - 88, - 41, - 1, - 11, - 1, - "LATENT" - ], - [ - 89, - 41, - 0, - 11, - 0, - "COGVIDEOPIPE" - ], [ 97, 11, @@ -545,16 +554,72 @@ 44, 0, "IMAGE" + ], + [ + 104, + 1, + 0, + 47, + 0, + "COGVIDEOPIPE" + ], + [ + 105, + 30, + 0, + 47, + 1, + "CONDITIONING" + ], + [ + 106, + 31, + 0, + 47, + 2, + "CONDITIONING" + ], + [ + 107, + 37, + 0, + 47, + 3, + "IMAGE" + ], + [ + 108, + 47, + 0, + 11, + 0, + "COGVIDEOPIPE" + ], + [ + 109, + 47, + 1, + 11, + 1, + "LATENT" + ], + [ + 110, + 30, + 1, + 31, + 0, + "CLIP" ] ], "groups": [], "config": {}, "extra": { "ds": { - "scale": 0.8264462809917361, + "scale": 0.8264462809917363, "offset": [ - 97.64239267521098, - 39.894747674006986 + 245.90746806300405, + 108.93624646284617 ] } }, diff --git a/nodes.py b/nodes.py index a742dc5..9f613d9 100644 --- a/nodes.py +++ b/nodes.py @@ -101,7 +101,33 @@ class CogVideoPABConfig: return (pab_config, ) +class CogVideoContextOptions: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "context_schedule": (["uniform_standard", "uniform_looped", "static_standard", "temporal_tiling"],), + "context_frames": ("INT", {"default": 48, "min": 2, "max": 100, "step": 1, "tooltip": "Number of pixel frames in the context, NOTE: the latent space has 4 frames in 1"} ), + "context_stride": ("INT", {"default": 4, "min": 4, "max": 100, "step": 1, "tooltip": "Context stride as pixel frames, NOTE: the latent space has 4 frames in 1"} ), + "context_overlap": ("INT", {"default": 4, "min": 4, "max": 100, "step": 1, "tooltip": "Context overlap as pixel frames, NOTE: the latent space has 4 frames in 1"} ), + "freenoise": ("BOOLEAN", {"default": True, "tooltip": "Shuffle the noise"}), + } + } + RETURN_TYPES = ("COGCONTEXT", ) + RETURN_NAMES = ("context_options",) + FUNCTION = "process" + CATEGORY = "CogVideoWrapper" + + def process(self, context_schedule, context_frames, context_stride, context_overlap, freenoise): + context_options = { + "context_schedule":context_schedule, + "context_frames":context_frames, + "context_stride":context_stride, + "context_overlap":context_overlap, + "freenoise":freenoise + } + + return (context_options,) class CogVideoTransformerEdit: @classmethod @@ -155,7 +181,8 @@ class CogVideoLoraSelect: cog_loras_list.append(cog_lora) print(cog_loras_list) return (cog_loras_list,) - + +#region TextEncode class CogVideoEncodePrompt: @classmethod def INPUT_TYPES(s): @@ -257,8 +284,8 @@ class CogVideoTextEncode: } } - RETURN_TYPES = ("CONDITIONING",) - RETURN_NAMES = ("conditioning",) + RETURN_TYPES = ("CONDITIONING", "CLIP",) + RETURN_NAMES = ("conditioning", "clip") FUNCTION = "process" CATEGORY = "CogVideoWrapper" @@ -279,7 +306,7 @@ class CogVideoTextEncode: if force_offload: clip.cond_stage_model.to(offload_device) - return (embeds, ) + return (embeds, clip, ) class CogVideoTextEncodeCombine: @classmethod @@ -311,7 +338,8 @@ class CogVideoTextEncodeCombine: raise ValueError("Invalid combination mode") return (embeds, ) - + +#region ImageEncode class CogVideoImageEncode: @classmethod def INPUT_TYPES(s): @@ -473,7 +501,8 @@ class CogVideoImageInterpolationEncode: vae.to(offload_device) return ({"samples": final_latents}, ) - + +#region Tora from .tora.traj_utils import process_traj, scale_traj_list_to_256 from torchvision.utils import flow_to_image @@ -630,8 +659,94 @@ class ToraEncodeOpticalFlow: } return (tora, ) - + +def add_noise_to_reference_video(image, ratio=None): + if ratio is None: + sigma = torch.normal(mean=-3.0, std=0.5, size=(image.shape[0],)).to(image.device) + sigma = torch.exp(sigma).to(image.dtype) + else: + sigma = torch.ones((image.shape[0],)).to(image.device, image.dtype) * ratio + + image_noise = torch.randn_like(image) * sigma[:, None, None, None, None] + image_noise = torch.where(image==-1, torch.zeros_like(image), image_noise) + image = image + image_noise + return image +class CogVideoControlImageEncode: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "pipeline": ("COGVIDEOPIPE",), + "control_video": ("IMAGE", ), + "base_resolution": ("INT", {"min": 64, "max": 1280, "step": 64, "default": 512, "tooltip": "Base resolution, closest training data bucket resolution is chosen based on the selection."}), + "enable_tiling": ("BOOLEAN", {"default": False, "tooltip": "Enable tiling for the VAE to reduce memory usage"}), + "noise_aug_strength": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + }, + } + + RETURN_TYPES = ("COGCONTROL_LATENTS", "INT", "INT",) + RETURN_NAMES = ("control_latents", "width", "height") + FUNCTION = "encode" + CATEGORY = "CogVideoWrapper" + + def encode(self, pipeline, control_video, base_resolution, enable_tiling, noise_aug_strength=0.0563): + device = mm.get_torch_device() + offload_device = mm.unet_offload_device() + + B, H, W, C = control_video.shape + + vae = pipeline["pipe"].vae + vae.enable_slicing() + + if enable_tiling: + from .mz_enable_vae_encode_tiling import enable_vae_encode_tiling + enable_vae_encode_tiling(vae) + + if not pipeline["cpu_offloading"]: + vae.to(device) + + # Count most suitable height and width + aspect_ratio_sample_size = {key : [x / 512 * base_resolution for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + + control_video = np.array(control_video.cpu().numpy() * 255, np.uint8) + original_width, original_height = Image.fromarray(control_video[0]).size + + closest_size, closest_ratio = get_closest_ratio(original_height, original_width, ratios=aspect_ratio_sample_size) + height, width = [int(x / 16) * 16 for x in closest_size] + log.info(f"Closest bucket size: {width}x{height}") + + video_length = int((B - 1) // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if B != 1 else 1 + input_video, input_video_mask, clip_image = get_video_to_video_latent(control_video, video_length=video_length, sample_size=(height, width)) + + control_video = pipeline["pipe"].image_processor.preprocess(rearrange(input_video, "b c f h w -> (b f) c h w"), height=height, width=width) + control_video = control_video.to(dtype=torch.float32) + control_video = rearrange(control_video, "(b f) c h w -> b c f h w", f=video_length) + + masked_image = control_video.to(device=device, dtype=vae.dtype) + if noise_aug_strength > 0: + masked_image = add_noise_to_reference_video(masked_image, ratio=noise_aug_strength) + bs = 1 + new_mask_pixel_values = [] + for i in range(0, masked_image.shape[0], bs): + mask_pixel_values_bs = masked_image[i : i + bs] + mask_pixel_values_bs = vae.encode(mask_pixel_values_bs)[0] + mask_pixel_values_bs = mask_pixel_values_bs.mode() + new_mask_pixel_values.append(mask_pixel_values_bs) + masked_image_latents = torch.cat(new_mask_pixel_values, dim = 0) + masked_image_latents = masked_image_latents * vae.config.scaling_factor + + vae.to(offload_device) + + control_latents = { + "latents": masked_image_latents, + "num_frames" : B, + "height" : height, + "width" : width, + } + + return (control_latents, width, height) + +#region FasterCache class CogVideoXFasterCache: @classmethod def INPUT_TYPES(s): @@ -659,7 +774,8 @@ class CogVideoXFasterCache: "cache_device" : device if cache_device == "main_device" else offload_device } return (fastercache,) - + +#region Sampler class CogVideoSampler: @classmethod def INPUT_TYPES(s): @@ -782,7 +898,43 @@ class CogVideoSampler: mm.soft_empty_cache() return (pipeline, {"samples": latents}) + +class CogVideoControlNet: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "controlnet": ("COGVIDECONTROLNETMODEL",), + "images": ("IMAGE", ), + "control_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "control_start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "control_end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("COGVIDECONTROLNET",) + RETURN_NAMES = ("cogvideo_controlnet",) + FUNCTION = "encode" + CATEGORY = "CogVideoWrapper" + + def encode(self, controlnet, images, control_strength, control_start_percent, control_end_percent): + device = mm.get_torch_device() + offload_device = mm.unet_offload_device() + + B, H, W, C = images.shape + + control_frames = images.permute(0, 3, 1, 2).unsqueeze(0) * 2 - 1 + + controlnet = { + "control_model": controlnet, + "control_frames": control_frames, + "control_weights": control_strength, + "control_start": control_start_percent, + "control_end": control_end_percent, + } + + return (controlnet,) +#region VideoDecode class CogVideoDecode: @classmethod def INPUT_TYPES(s): @@ -878,7 +1030,8 @@ class CogVideoXFunResizeToClosestBucket: resized_images = resized_images.movedim(1,-1) return (resized_images, width, height) - + +#region FunSamplers class CogVideoXFunSampler: @classmethod def INPUT_TYPES(s): @@ -888,7 +1041,8 @@ class CogVideoXFunSampler: "positive": ("CONDITIONING", ), "negative": ("CONDITIONING", ), "video_length": ("INT", {"default": 49, "min": 5, "max": 2048, "step": 4}), - "base_resolution": ("INT", {"min": 64, "max": 1280, "step": 64, "default": 512, "tooltip": "Base resolution, closest training data bucket resolution is chosen based on the selection."}), + "width": ("INT", {"default": 720, "min": 128, "max": 2048, "step": 8}), + "height": ("INT", {"default": 480, "min": 128, "max": 2048, "step": 8}), "seed": ("INT", {"default": 43, "min": 0, "max": 0xffffffffffffffff}), "steps": ("INT", {"default": 50, "min": 1, "max": 200, "step": 1}), "cfg": ("FLOAT", {"default": 6.0, "min": 1.0, "max": 20.0, "step": 0.01}), @@ -897,7 +1051,6 @@ class CogVideoXFunSampler: "optional":{ "start_img": ("IMAGE",), "end_img": ("IMAGE",), - "opt_empty_latent": ("LATENT",), "noise_aug_strength": ("FLOAT", {"default": 0.0563, "min": 0.0, "max": 1.0, "step": 0.001}), "context_options": ("COGCONTEXT", ), "tora_trajectory": ("TORAFEATURES", ), @@ -912,8 +1065,8 @@ class CogVideoXFunSampler: FUNCTION = "process" CATEGORY = "CogVideoWrapper" - def process(self, pipeline, positive, negative, video_length, base_resolution, seed, steps, cfg, scheduler, - start_img=None, end_img=None, opt_empty_latent=None, noise_aug_strength=0.0563, context_options=None, fastercache=None, + def process(self, pipeline, positive, negative, video_length, width, height, seed, steps, cfg, scheduler, + start_img=None, end_img=None, noise_aug_strength=0.0563, context_options=None, fastercache=None, tora_trajectory=None, vid2vid_images=None, vid2vid_denoise=1.0): device = mm.get_torch_device() offload_device = mm.unet_offload_device() @@ -929,23 +1082,13 @@ class CogVideoXFunSampler: mm.soft_empty_cache() - aspect_ratio_sample_size = {key : [x / 512 * base_resolution for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} #vid2vid if vid2vid_images is not None: validation_video = np.array(vid2vid_images.cpu().numpy() * 255, np.uint8) - original_width, original_height = Image.fromarray(validation_video[0]).size #img2vid elif start_img is not None: start_img = [to_pil(_start_img) for _start_img in start_img] if start_img is not None else None - end_img = [to_pil(_end_img) for _end_img in end_img] if end_img is not None else None - # Count most suitable height and width - original_width, original_height = start_img[0].size if type(start_img) is list else Image.open(start_img).size - else: - original_width = opt_empty_latent["samples"][0].shape[-1] * 8 - original_height = opt_empty_latent["samples"][0].shape[-2] * 8 - closest_size, closest_ratio = get_closest_ratio(original_height, original_width, ratios=aspect_ratio_sample_size) - height, width = [int(x / 16) * 16 for x in closest_size] - log.info(f"Closest bucket size: {width}x{height}") + end_img = [to_pil(_end_img) for _end_img in end_img] if end_img is not None else None # Load Sampler if context_options is not None and context_options["context_schedule"] == "temporal_tiling": @@ -1045,156 +1188,6 @@ class CogVideoXFunVid2VidSampler: DEPRECATED = True def process(self): return () - -def add_noise_to_reference_video(image, ratio=None): - if ratio is None: - sigma = torch.normal(mean=-3.0, std=0.5, size=(image.shape[0],)).to(image.device) - sigma = torch.exp(sigma).to(image.dtype) - else: - sigma = torch.ones((image.shape[0],)).to(image.device, image.dtype) * ratio - - image_noise = torch.randn_like(image) * sigma[:, None, None, None, None] - image_noise = torch.where(image==-1, torch.zeros_like(image), image_noise) - image = image + image_noise - return image - -class CogVideoControlImageEncode: - @classmethod - def INPUT_TYPES(s): - return {"required": { - "pipeline": ("COGVIDEOPIPE",), - "control_video": ("IMAGE", ), - "base_resolution": ("INT", {"min": 64, "max": 1280, "step": 64, "default": 512, "tooltip": "Base resolution, closest training data bucket resolution is chosen based on the selection."}), - "enable_tiling": ("BOOLEAN", {"default": False, "tooltip": "Enable tiling for the VAE to reduce memory usage"}), - "noise_aug_strength": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), - }, - } - - RETURN_TYPES = ("COGCONTROL_LATENTS", "INT", "INT",) - RETURN_NAMES = ("control_latents", "width", "height") - FUNCTION = "encode" - CATEGORY = "CogVideoWrapper" - - def encode(self, pipeline, control_video, base_resolution, enable_tiling, noise_aug_strength=0.0563): - device = mm.get_torch_device() - offload_device = mm.unet_offload_device() - - B, H, W, C = control_video.shape - - vae = pipeline["pipe"].vae - vae.enable_slicing() - - if enable_tiling: - from .mz_enable_vae_encode_tiling import enable_vae_encode_tiling - enable_vae_encode_tiling(vae) - - if not pipeline["cpu_offloading"]: - vae.to(device) - - # Count most suitable height and width - aspect_ratio_sample_size = {key : [x / 512 * base_resolution for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} - - control_video = np.array(control_video.cpu().numpy() * 255, np.uint8) - original_width, original_height = Image.fromarray(control_video[0]).size - - closest_size, closest_ratio = get_closest_ratio(original_height, original_width, ratios=aspect_ratio_sample_size) - height, width = [int(x / 16) * 16 for x in closest_size] - log.info(f"Closest bucket size: {width}x{height}") - - video_length = int((B - 1) // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if B != 1 else 1 - input_video, input_video_mask, clip_image = get_video_to_video_latent(control_video, video_length=video_length, sample_size=(height, width)) - - control_video = pipeline["pipe"].image_processor.preprocess(rearrange(input_video, "b c f h w -> (b f) c h w"), height=height, width=width) - control_video = control_video.to(dtype=torch.float32) - control_video = rearrange(control_video, "(b f) c h w -> b c f h w", f=video_length) - - masked_image = control_video.to(device=device, dtype=vae.dtype) - if noise_aug_strength > 0: - masked_image = add_noise_to_reference_video(masked_image, ratio=noise_aug_strength) - bs = 1 - new_mask_pixel_values = [] - for i in range(0, masked_image.shape[0], bs): - mask_pixel_values_bs = masked_image[i : i + bs] - mask_pixel_values_bs = vae.encode(mask_pixel_values_bs)[0] - mask_pixel_values_bs = mask_pixel_values_bs.mode() - new_mask_pixel_values.append(mask_pixel_values_bs) - masked_image_latents = torch.cat(new_mask_pixel_values, dim = 0) - masked_image_latents = masked_image_latents * vae.config.scaling_factor - - vae.to(offload_device) - - control_latents = { - "latents": masked_image_latents, - "num_frames" : B, - "height" : height, - "width" : width, - } - - return (control_latents, width, height) - -class CogVideoControlNet: - @classmethod - def INPUT_TYPES(s): - return {"required": { - "controlnet": ("COGVIDECONTROLNETMODEL",), - "images": ("IMAGE", ), - "control_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), - "control_start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "control_end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - }, - } - - RETURN_TYPES = ("COGVIDECONTROLNET",) - RETURN_NAMES = ("cogvideo_controlnet",) - FUNCTION = "encode" - CATEGORY = "CogVideoWrapper" - - def encode(self, controlnet, images, control_strength, control_start_percent, control_end_percent): - device = mm.get_torch_device() - offload_device = mm.unet_offload_device() - - B, H, W, C = images.shape - - control_frames = images.permute(0, 3, 1, 2).unsqueeze(0) * 2 - 1 - - controlnet = { - "control_model": controlnet, - "control_frames": control_frames, - "control_weights": control_strength, - "control_start": control_start_percent, - "control_end": control_end_percent, - } - - return (controlnet,) - - -class CogVideoContextOptions: - @classmethod - def INPUT_TYPES(s): - return {"required": { - "context_schedule": (["uniform_standard", "uniform_looped", "static_standard", "temporal_tiling"],), - "context_frames": ("INT", {"default": 48, "min": 2, "max": 100, "step": 1, "tooltip": "Number of pixel frames in the context, NOTE: the latent space has 4 frames in 1"} ), - "context_stride": ("INT", {"default": 4, "min": 4, "max": 100, "step": 1, "tooltip": "Context stride as pixel frames, NOTE: the latent space has 4 frames in 1"} ), - "context_overlap": ("INT", {"default": 4, "min": 4, "max": 100, "step": 1, "tooltip": "Context overlap as pixel frames, NOTE: the latent space has 4 frames in 1"} ), - "freenoise": ("BOOLEAN", {"default": True, "tooltip": "Shuffle the noise"}), - } - } - - RETURN_TYPES = ("COGCONTEXT", ) - RETURN_NAMES = ("context_options",) - FUNCTION = "process" - CATEGORY = "CogVideoWrapper" - - def process(self, context_schedule, context_frames, context_stride, context_overlap, freenoise): - context_options = { - "context_schedule":context_schedule, - "context_frames":context_frames, - "context_stride":context_stride, - "context_overlap":context_overlap, - "freenoise":freenoise - } - - return (context_options,) class CogVideoXFunControlSampler: @classmethod