From 029636d2a79986afa74577d1a633a4e370bd6206 Mon Sep 17 00:00:00 2001 From: kijai <40791699+kijai@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:41:35 +0200 Subject: [PATCH 1/4] Update pipeline_hunyuan_video.py --- hyvideo/diffusion/pipelines/pipeline_hunyuan_video.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hyvideo/diffusion/pipelines/pipeline_hunyuan_video.py b/hyvideo/diffusion/pipelines/pipeline_hunyuan_video.py index 7d1f154..c7cf3f3 100644 --- a/hyvideo/diffusion/pipelines/pipeline_hunyuan_video.py +++ b/hyvideo/diffusion/pipelines/pipeline_hunyuan_video.py @@ -178,7 +178,6 @@ class HunyuanVideoPipeline(DiffusionPipeline): height, width, video_length, - dtype, device, timesteps, generator, @@ -197,7 +196,7 @@ class HunyuanVideoPipeline(DiffusionPipeline): f"You have passed a list of generators of length {len(generator)}, but requested an effective batch" f" size of {batch_size}. Make sure the batch size matches the length of the generators." ) - noise = randn_tensor(shape, generator=generator, device=device, dtype=dtype) + noise = randn_tensor(shape, generator=generator, device=device, dtype=self.base_dtype) if latents is None: latents = noise else: @@ -493,7 +492,6 @@ class HunyuanVideoPipeline(DiffusionPipeline): height, width, latent_video_length, - prompt_embeds.dtype, device, timesteps, generator, From 2d00a9ad7cc5b68dab07a413b02519a7d434026f Mon Sep 17 00:00:00 2001 From: kijai <40791699+kijai@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:56:12 +0200 Subject: [PATCH 2/4] fix vae node defaults --- nodes.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nodes.py b/nodes.py index 39d1c70..6464793 100644 --- a/nodes.py +++ b/nodes.py @@ -856,7 +856,6 @@ class HyVideoSampler: "samples": out_latents },) - #region VideoDecode class HyVideoDecode: @classmethod @@ -865,7 +864,7 @@ class HyVideoDecode: "vae": ("VAE",), "samples": ("LATENT",), "enable_vae_tiling": ("BOOLEAN", {"default": True, "tooltip": "Drastically reduces memory use but may introduce seams"}), - "temporal_tiling_sample_size": ("INT", {"default": 16, "min": 4, "max": 256, "tooltip": "Smaller values use less VRAM, model default is 64, any other value will cause stutter"}), + "temporal_tiling_sample_size": ("INT", {"default": 64, "min": 4, "max": 256, "tooltip": "Smaller values use less VRAM, model default is 64, any other value will cause stutter"}), "spatial_tile_sample_min_size": ("INT", {"default": 256, "min": 32, "max": 2048, "step": 32, "tooltip": "Spatial tile minimum size in pixels, smaller values use less VRAM, may introduce more seams"}), "auto_tile_size": ("BOOLEAN", {"default": True, "tooltip": "Automatically set tile size based on defaults, above settings are ignored"}), }, @@ -949,7 +948,7 @@ class HyVideoEncode: "vae": ("VAE",), "image": ("IMAGE",), "enable_vae_tiling": ("BOOLEAN", {"default": True, "tooltip": "Drastically reduces memory use but may introduce seams"}), - "temporal_tiling_sample_size": ("INT", {"default": 16, "min": 4, "max": 256, "tooltip": "Smaller values use less VRAM, model default is 64, any other value will cause stutter"}), + "temporal_tiling_sample_size": ("INT", {"default": 64, "min": 4, "max": 256, "tooltip": "Smaller values use less VRAM, model default is 64, any other value will cause stutter"}), "spatial_tile_sample_min_size": ("INT", {"default": 256, "min": 32, "max": 2048, "step": 32, "tooltip": "Spatial tile minimum size in pixels, smaller values use less VRAM, may introduce more seams"}), "auto_tile_size": ("BOOLEAN", {"default": True, "tooltip": "Automatically set tile size based on defaults, above settings are ignored"}), }, From 6ab3d0ae62bcdc878e4e68db35d5b9566745613c Mon Sep 17 00:00:00 2001 From: kijai <40791699+kijai@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:27:10 +0200 Subject: [PATCH 3/4] initial RF-inversion for testing --- .gitignore | 1 - __init__.py | 5 +- .../hunhyuan_rf_inversion_testing_01.json | 1126 +++++++++++++++++ hunyuan_empty_prompt_embeds_dict.pt | Bin 0 -> 2103720 bytes .../pipelines/pipeline_hunyuan_video.py | 10 +- latent_preview.py | 85 ++ nodes.py | 38 +- nodes_rf_inversion.py | 437 +++++++ 8 files changed, 1686 insertions(+), 16 deletions(-) create mode 100644 examples/hunhyuan_rf_inversion_testing_01.json create mode 100644 hunyuan_empty_prompt_embeds_dict.pt create mode 100644 latent_preview.py create mode 100644 nodes_rf_inversion.py diff --git a/.gitignore b/.gitignore index d75870d..fe5defd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,4 @@ master_ip logs/ *.DS_Store .idea -*.pt tools/ \ No newline at end of file diff --git a/__init__.py b/__init__.py index f4e09a9..a7bf0b9 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,7 @@ -from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS +from .nodes import NODE_CLASS_MAPPINGS as NODES_CLASS, NODE_DISPLAY_NAME_MAPPINGS as NODES_DISPLAY +from .nodes_rf_inversion import NODE_CLASS_MAPPINGS as NODE_CLASS_MAPPINGS_RF_INVERSION, NODE_DISPLAY_NAME_MAPPINGS as NODE_DISPLAY_NAME_MAPPINGS_RF_INVERSION +NODE_CLASS_MAPPINGS = {**NODES_CLASS, **NODE_CLASS_MAPPINGS_RF_INVERSION} +NODE_DISPLAY_NAME_MAPPINGS = {**NODES_DISPLAY, **NODE_DISPLAY_NAME_MAPPINGS_RF_INVERSION} __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] \ No newline at end of file diff --git a/examples/hunhyuan_rf_inversion_testing_01.json b/examples/hunhyuan_rf_inversion_testing_01.json new file mode 100644 index 0000000..34d24f1 --- /dev/null +++ b/examples/hunhyuan_rf_inversion_testing_01.json @@ -0,0 +1,1126 @@ +{ + "last_node_id": 82, + "last_link_id": 154, + "nodes": [ + { + "id": 60, + "type": "VHS_LoadVideo", + "pos": [ + -528.7080688476562, + 58.57748794555664 + ], + "size": [ + 247.455078125, + 503.455078125 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 75 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": [], + "slot_index": 1 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "wolf_interpolated.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 49, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 49, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "wolf_interpolated.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + }, + "muted": false + } + } + }, + { + "id": 7, + "type": "HyVideoVAELoader", + "pos": [ + -442.0136413574219, + -457.50823974609375 + ], + "size": [ + 466.5, + 82 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "type": "COMPILEARGS", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "vae", + "type": "VAE", + "links": [ + 73, + 105 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoVAELoader" + }, + "widgets_values": [ + "hyvid\\hunyuan_video_vae_bf16.safetensors", + "bf16" + ] + }, + { + "id": 71, + "type": "GetImageSizeAndCount", + "pos": [ + -66.3104019165039, + 135.95004272460938 + ], + "size": [ + 277.20001220703125, + 86 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 120 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 117 + ], + "slot_index": 0 + }, + { + "name": "512 width", + "type": "INT", + "links": [], + "slot_index": 1 + }, + { + "name": "512 height", + "type": "INT", + "links": [], + "slot_index": 2 + }, + { + "name": "49 count", + "type": "INT", + "links": [], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 72, + "type": "SetNode", + "pos": [ + 159.51576232910156, + 332.2814636230469 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 119 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 120 + ], + "slot_index": 0 + } + ], + "title": "Set_InputVideo", + "properties": { + "previousName": "InputVideo" + }, + "widgets_values": [ + "InputVideo" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 81, + "type": "Reroute", + "pos": [ + 665.5242309570312, + -279.5227966308594 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 151 + } + ], + "outputs": [ + { + "name": "", + "type": "HYVIDEOMODEL", + "links": [ + 152, + 153 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 61, + "type": "HyVideoEncode", + "pos": [ + 269.31317138671875, + -177.6795196533203 + ], + "size": [ + 315, + 150 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 73 + }, + { + "name": "image", + "type": "IMAGE", + "link": 117 + } + ], + "outputs": [ + { + "name": "samples", + "type": "LATENT", + "links": [ + 140, + 148 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoEncode" + }, + "widgets_values": [ + true, + 64, + 256, + true + ] + }, + { + "id": 62, + "type": "ImageResizeKJ", + "pos": [ + -220.3394775390625, + 298.1787414550781 + ], + "size": [ + 315, + 266 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 75 + }, + { + "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": [ + 119 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1 + }, + { + "name": "height", + "type": "INT", + "links": [], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + false, + 16, + 0, + 0, + "disabled" + ] + }, + { + "id": 1, + "type": "HyVideoModelLoader", + "pos": [ + -473.4425964355469, + -289.11212158203125 + ], + "size": [ + 509.7506103515625, + 178 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "type": "COMPILEARGS", + "link": 154, + "shape": 7 + }, + { + "name": "block_swap_args", + "type": "BLOCKSWAPARGS", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "model", + "type": "HYVIDEOMODEL", + "links": [ + 151 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoModelLoader" + }, + "widgets_values": [ + "hyvideo\\hunyuan_video_720_fp8_e4m3fn.safetensors", + "bf16", + "fp8_e4m3fn_fast", + "offload_device", + "sageattn_varlen" + ] + }, + { + "id": 82, + "type": "HyVideoTorchCompileSettings", + "pos": [ + -965.2777099609375, + -357.0115051269531 + ], + "size": [ + 441, + 274 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "torch_compile_args", + "type": "COMPILEARGS", + "links": [ + 154 + ] + } + ], + "properties": { + "Node name for S&R": "HyVideoTorchCompileSettings" + }, + "widgets_values": [ + "inductor", + false, + "default", + false, + 64, + true, + true, + false, + false, + false + ] + }, + { + "id": 68, + "type": "ImageConcatMulti", + "pos": [ + 1430, + -440 + ], + "size": [ + 210, + 150 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 121 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 113 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 114 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + 2, + "right", + false, + null + ] + }, + { + "id": 73, + "type": "GetNode", + "pos": [ + 1430, + -240 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 121 + ], + "slot_index": 0 + } + ], + "title": "Get_InputVideo", + "properties": {}, + "widgets_values": [ + "InputVideo" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 66, + "type": "HyVideoDecode", + "pos": [ + 1030, + -450 + ], + "size": [ + 292.81866455078125, + 150 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 105 + }, + { + "name": "samples", + "type": "LATENT", + "link": 142 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 113 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoDecode" + }, + "widgets_values": [ + true, + 64, + 128, + true + ] + }, + { + "id": 16, + "type": "DownloadAndLoadHyVideoTextEncoder", + "pos": [ + -439.28472900390625, + -858.833984375 + ], + "size": [ + 429.6711730957031, + 178 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "hyvid_text_encoder", + "type": "HYVIDTEXTENCODER", + "links": [ + 102 + ] + } + ], + "properties": { + "Node name for S&R": "DownloadAndLoadHyVideoTextEncoder" + }, + "widgets_values": [ + "Kijai/llava-llama-3-8b-text-encoder-tokenizer", + "disabled", + "fp16", + false, + 2, + "disabled" + ] + }, + { + "id": 43, + "type": "CLIPLoader", + "pos": [ + -406.4485168457031, + -611.748046875 + ], + "size": [ + 369.7733154296875, + 86.28006744384766 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 103 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "clip_l.safetensors", + "stable_diffusion" + ] + }, + { + "id": 65, + "type": "HyVideoTextEncode", + "pos": [ + 535.5712890625, + -847.4974365234375 + ], + "size": [ + 459.8385009765625, + 345.2080383300781 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "text_encoders", + "type": "HYVIDTEXTENCODER", + "link": 102 + }, + { + "name": "custom_prompt_template", + "type": "PROMPT_TEMPLATE", + "link": null, + "shape": 7 + }, + { + "name": "clip_l", + "type": "CLIP", + "link": 103, + "shape": 7 + } + ], + "outputs": [ + { + "name": "hyvid_embeds", + "type": "HYVIDEMBEDS", + "links": [ + 139 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoTextEncode" + }, + "widgets_values": [ + "Main content and theme: cinematic and photorealistic video of a wolf wearing sunglasses\nObject details:\na wolf\nsunglasses\nForest background\nThe video style is very cinematic and has dramatic lighting\nActions and movements: a wolf wearing sunglsses is turning it's head\nBackground and atmosphere:\nThe background is a peaceful forest, which creates a serene, calm atmosphere\nmasterpiece, best quality", + true, + "video" + ] + }, + { + "id": 70, + "type": "HyVideoEmptyTextEmbeds", + "pos": [ + 286.3083190917969, + 52.262840270996094 + ], + "size": [ + 302.1732177734375, + 26 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "hyvid_embeds", + "type": "HYVIDEMBEDS", + "links": [ + 147 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoEmptyTextEmbeds" + }, + "widgets_values": [] + }, + { + "id": 80, + "type": "HyVideoInverseSampler", + "pos": [ + 694.1298217773438, + -4.059940338134766 + ], + "size": [ + 300.78759765625, + 522.9332885742188 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "HYVIDEOMODEL", + "link": 152 + }, + { + "name": "hyvid_embeds", + "type": "HYVIDEMBEDS", + "link": 147 + }, + { + "name": "samples", + "type": "LATENT", + "link": 148 + } + ], + "outputs": [ + { + "name": "samples", + "type": "LATENT", + "links": [ + 150 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoInverseSampler" + }, + "widgets_values": [ + 30, + 0, + 1, + 1, + "fixed", + true, + 0.5 + ] + }, + { + "id": 69, + "type": "VHS_VideoCombine", + "pos": [ + 1788.1004638671875, + -439.3926696777344 + ], + "size": [ + 1098.79248046875, + 863.396240234375 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 114 + }, + { + "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 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "HunyuanVideo", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "HunyuanVideo_00079.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 24 + }, + "muted": false + } + } + }, + { + "id": 78, + "type": "HyVideoReSampler", + "pos": [ + 1308.6800537109375, + -132.41998291015625 + ], + "size": [ + 326.2127380371094, + 568.9866943359375 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "HYVIDEOMODEL", + "link": 153 + }, + { + "name": "hyvid_embeds", + "type": "HYVIDEMBEDS", + "link": 139 + }, + { + "name": "samples", + "type": "LATENT", + "link": 140 + }, + { + "name": "inversed_latents", + "type": "LATENT", + "link": 150 + } + ], + "outputs": [ + { + "name": "samples", + "type": "LATENT", + "links": [ + 142 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "HyVideoReSampler" + }, + "widgets_values": [ + 30, + 6, + 1, + true, + 0, + 13, + 0.7000000000000001, + "linear_decrease" + ] + } + ], + "links": [ + [ + 73, + 7, + 0, + 61, + 0, + "VAE" + ], + [ + 75, + 60, + 0, + 62, + 0, + "IMAGE" + ], + [ + 102, + 16, + 0, + 65, + 0, + "HYVIDTEXTENCODER" + ], + [ + 103, + 43, + 0, + 65, + 2, + "CLIP" + ], + [ + 105, + 7, + 0, + 66, + 0, + "VAE" + ], + [ + 113, + 66, + 0, + 68, + 1, + "IMAGE" + ], + [ + 114, + 68, + 0, + 69, + 0, + "IMAGE" + ], + [ + 117, + 71, + 0, + 61, + 1, + "IMAGE" + ], + [ + 119, + 62, + 0, + 72, + 0, + "*" + ], + [ + 120, + 72, + 0, + 71, + 0, + "IMAGE" + ], + [ + 121, + 73, + 0, + 68, + 0, + "IMAGE" + ], + [ + 139, + 65, + 0, + 78, + 1, + "HYVIDEMBEDS" + ], + [ + 140, + 61, + 0, + 78, + 2, + "LATENT" + ], + [ + 142, + 78, + 0, + 66, + 1, + "LATENT" + ], + [ + 147, + 70, + 0, + 80, + 1, + "HYVIDEMBEDS" + ], + [ + 148, + 61, + 0, + 80, + 2, + "LATENT" + ], + [ + 150, + 80, + 0, + 78, + 3, + "LATENT" + ], + [ + 151, + 1, + 0, + 81, + 0, + "*" + ], + [ + 152, + 81, + 0, + 80, + 0, + "HYVIDEOMODEL" + ], + [ + 153, + 81, + 0, + 78, + 0, + "HYVIDEOMODEL" + ], + [ + 154, + 82, + 0, + 1, + 0, + "COMPILEARGS" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.5644739300537778, + "offset": [ + 1051.95782812112, + 1072.9689374346237 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/hunyuan_empty_prompt_embeds_dict.pt b/hunyuan_empty_prompt_embeds_dict.pt new file mode 100644 index 0000000000000000000000000000000000000000..f6856fd80de62092f2216eebe8a413c384691a26 GIT binary patch literal 2103720 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 0 and end_step <= len(timesteps), "Invalid start_step and end_step" + # timesteps are monotonically decreasing, from 1.0 to 0.0 + print("eta timesteps", timesteps) + eta_values = [0.0] * (len(timesteps) - 1) + + if eta_trend == 'constant': + for i in range(start_step, end_step): + eta_values[i] = eta + elif eta_trend == 'linear_increase': + total_time = timesteps[start_step] - timesteps[end_step - 1] + for i in range(start_step, end_step): + eta_values[i] = eta * (timesteps[start_step] - timesteps[i]) / total_time + elif eta_trend == 'linear_decrease': + total_time = timesteps[start_step] - timesteps[end_step - 1] + for i in range(start_step, end_step): + eta_values[i] = eta * (timesteps[i] - timesteps[end_step - 1]) / total_time + else: + raise NotImplementedError(f"Unsupported eta_trend: {eta_trend}") + + return eta_values + +class HyVideoEmptyTextEmbeds: + @classmethod + def INPUT_TYPES(s): + return {"required": { + } + } + + RETURN_TYPES = ("HYVIDEMBEDS", ) + RETURN_NAMES = ("hyvid_embeds",) + FUNCTION = "process" + CATEGORY = "HunyuanVideoWrapper" + DESCRIPTION = "Empty Text Embeds for HunyuanVideoWrapper, to avoid having to encode prompts for inverse sampling" + + def process(self): + device = mm.text_encoder_device() + offload_device = mm.text_encoder_offload_device() + + prompt_embeds_dict = torch.load(os.path.join(script_directory, "hunyuan_empty_prompt_embeds_dict.pt")) + return (prompt_embeds_dict,) + +class HyVideoInverseSampler: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("HYVIDEOMODEL",), + "hyvid_embeds": ("HYVIDEMBEDS", ), + "samples": ("LATENT", {"tooltip": "init Latents to use for video2video process"} ), + "steps": ("INT", {"default": 30, "min": 1}), + "embedded_guidance_scale": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 30.0, "step": 0.01}), + "flow_shift": ("FLOAT", {"default": 1.0, "min": 1.0, "max": 30.0, "step": 0.01}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "force_offload": ("BOOLEAN", {"default": True}), + "gamma": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("LATENT",) + RETURN_NAMES = ("samples",) + FUNCTION = "process" + CATEGORY = "HunyuanVideoWrapper" + + def process(self, model, hyvid_embeds, flow_shift, steps, embedded_guidance_scale, seed, samples, gamma, force_offload): + device = mm.get_torch_device() + offload_device = mm.unet_offload_device() + dtype = model["dtype"] + transformer = model["pipe"].transformer + pipeline = model["pipe"] + + generator = torch.Generator(device=torch.device("cpu")).manual_seed(seed) + + latents = samples["samples"] if samples is not None else None + batch_size, num_channels_latents, latent_num_frames, latent_height, latent_width = latents.shape + height = latent_height * pipeline.vae_scale_factor + width = latent_width * pipeline.vae_scale_factor + num_frames = (latent_num_frames - 1) * 4 + 1 + + + if width <= 0 or height <= 0 or num_frames <= 0: + raise ValueError( + f"`height` and `width` and `video_length` must be positive integers, got height={height}, width={width}, video_length={num_frames}" + ) + if (num_frames - 1) % 4 != 0: + raise ValueError( + f"`video_length-1` must be a multiple of 4, got {num_frames}" + ) + + log.info( + f"Input (height, width, video_length) = ({height}, {width}, {num_frames})" + ) + + freqs_cos, freqs_sin = get_rotary_pos_embed(transformer, num_frames, height, width) + + pipeline.scheduler.shift = flow_shift + + if model["block_swap_args"] is not None: + for name, param in transformer.named_parameters(): + #print(name, param.data.device) + if "single" not in name and "double" not in name: + param.data = param.data.to(device) + + transformer.block_swap( + model["block_swap_args"]["double_blocks_to_swap"] - 1 , + model["block_swap_args"]["single_blocks_to_swap"] - 1, + offload_txt_in = model["block_swap_args"]["offload_txt_in"], + offload_img_in = model["block_swap_args"]["offload_img_in"], + ) + elif model["manual_offloading"]: + transformer.to(device) + + mm.unload_all_models() + mm.soft_empty_cache() + gc.collect() + + try: + torch.cuda.reset_peak_memory_stats(device) + except: + pass + + pipeline.scheduler.set_timesteps(steps, device=device) + timesteps = pipeline.scheduler.timesteps + timesteps = timesteps.flip(0) + print("timesteps", timesteps) + print("pipeline.scheduler.order", pipeline.scheduler.order) + print("len(timesteps)", len(timesteps)) + + latent_video_length = (num_frames - 1) // 4 + 1 + + # 5. Prepare latent variables + num_channels_latents = transformer.config.in_channels + + + latents = latents.to(device) + + shape = ( + 1, + num_channels_latents, + latent_video_length, + int(height) // pipeline.vae_scale_factor, + int(width) // pipeline.vae_scale_factor, + ) + noise = randn_tensor(shape, generator=generator, device=device, dtype=dtype) + + frames_needed = noise.shape[1] + current_frames = latents.shape[1] + + if frames_needed > current_frames: + repeat_factor = frames_needed - current_frames + additional_frame = torch.randn((latents.size(0), repeat_factor, latents.size(2), latents.size(3), latents.size(4)), dtype=latents.dtype, device=latents.device) + latents = torch.cat((additional_frame, latents), dim=1) + self.additional_frames = repeat_factor + elif frames_needed < current_frames: + latents = latents[:, :frames_needed, :, :, :] + + + + # 7. Denoising loop + num_warmup_steps = len(timesteps) - steps * pipeline.scheduler.order + self._num_timesteps = len(timesteps) + + from .latent_preview import prepare_callback + callback = prepare_callback(transformer, steps) + + from comfy.utils import ProgressBar + from tqdm import tqdm + log.info(f"Sampling {num_frames} frames in {latents.shape[2]} latents at {width}x{height} with {len(timesteps)} inference steps") + comfy_pbar = ProgressBar(len(timesteps)) + with tqdm(total=len(timesteps)) as progress_bar: + for idx, (t, t_prev) in enumerate(zip(timesteps[:-1], timesteps[1:])): + latent_model_input = latents + + t_expand = t.repeat(latent_model_input.shape[0]) + guidance_expand = ( + torch.tensor( + [embedded_guidance_scale] * latent_model_input.shape[0], + dtype=torch.float32, + device=device, + ).to(pipeline.base_dtype) + * 1000.0 + if embedded_guidance_scale is not None + else None + ) + + # predict the noise residual + with torch.autocast( + device_type="cuda", dtype=pipeline.base_dtype, enabled=True + ): + noise_pred = transformer( # For an input image (129, 192, 336) (1, 256, 256) + latent_model_input, # [2, 16, 33, 24, 42] + t_expand, # [2] + text_states=hyvid_embeds["prompt_embeds"], # [2, 256, 4096] + text_mask=hyvid_embeds["attention_mask"], # [2, 256] + text_states_2=hyvid_embeds["prompt_embeds_2"], # [2, 768] + freqs_cos=freqs_cos, # [seqlen, head_dim] + freqs_sin=freqs_sin, # [seqlen, head_dim] + guidance=guidance_expand, + stg_block_idx=-1, + stg_mode=None, + return_dict=True, + )["x"] + sigma = t / 1000.0 + sigma_prev = t_prev / 1000.0 + target_noise_velocity = (noise - latents) / (1.0 - sigma) + interpolated_velocity = gamma * target_noise_velocity + (1 - gamma) * noise_pred + + latents = latents + (sigma_prev - sigma) * interpolated_velocity + + # compute the previous noisy sample x_t -> x_t-1 + #latents = pipeline.scheduler.step(noise_pred, t, latents, return_dict=False)[0] + + + progress_bar.update() + if callback is not None: + print("callback", latents.shape) + callback(idx, latents.detach()[-1].permute(1,0,2,3), None, steps) + else: + comfy_pbar.update(1) + + + print_memory(device) + try: + torch.cuda.reset_peak_memory_stats(device) + except: + pass + + if force_offload: + if model["manual_offloading"]: + transformer.to(offload_device) + mm.soft_empty_cache() + gc.collect() + + return ({ + "samples": latents + },) + +class HyVideoReSampler: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("HYVIDEOMODEL",), + "hyvid_embeds": ("HYVIDEMBEDS", ), + "samples": ("LATENT", {"tooltip": "init Latents to use for video2video process"} ), + "inversed_latents": ("LATENT", {"tooltip": "inversed latents from HyVideoInverseSampler"} ), + "steps": ("INT", {"default": 30, "min": 1}), + "embedded_guidance_scale": ("FLOAT", {"default": 6.0, "min": 0.0, "max": 30.0, "step": 0.01}), + "flow_shift": ("FLOAT", {"default": 1.0, "min": 1.0, "max": 30.0, "step": 0.01}), + "force_offload": ("BOOLEAN", {"default": True}), + "start_step": ("INT", {"default": 0, "min": 0}), + "end_step": ("INT", {"default": 18, "min": 0}), + "eta_base": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "eta_trend": (['constant', 'linear_increase', 'linear_decrease'], {"default": "constant"}), + }, + } + + RETURN_TYPES = ("LATENT",) + RETURN_NAMES = ("samples",) + FUNCTION = "process" + CATEGORY = "HunyuanVideoWrapper" + + def process(self, model, hyvid_embeds, flow_shift, steps, embedded_guidance_scale, + samples, inversed_latents, force_offload, start_step, end_step, eta_base, eta_trend): + device = mm.get_torch_device() + offload_device = mm.unet_offload_device() + dtype = model["dtype"] + transformer = model["pipe"].transformer + pipeline = model["pipe"] + + target_latents = samples["samples"] + + batch_size, num_channels_latents, latent_num_frames, latent_height, latent_width = target_latents.shape + height = latent_height * pipeline.vae_scale_factor + width = latent_width * pipeline.vae_scale_factor + num_frames = (latent_num_frames - 1) * 4 + 1 + + if width <= 0 or height <= 0 or num_frames <= 0: + raise ValueError( + f"`height` and `width` and `video_length` must be positive integers, got height={height}, width={width}, video_length={num_frames}" + ) + if (num_frames - 1) % 4 != 0: + raise ValueError( + f"`video_length-1` must be a multiple of 4, got {num_frames}" + ) + + log.info( + f"Input (height, width, video_length) = ({height}, {width}, {num_frames})" + ) + + freqs_cos, freqs_sin = get_rotary_pos_embed(transformer, num_frames, height, width) + + pipeline.scheduler.shift = flow_shift + + if model["block_swap_args"] is not None: + for name, param in transformer.named_parameters(): + #print(name, param.data.device) + if "single" not in name and "double" not in name: + param.data = param.data.to(device) + + transformer.block_swap( + model["block_swap_args"]["double_blocks_to_swap"] - 1 , + model["block_swap_args"]["single_blocks_to_swap"] - 1, + offload_txt_in = model["block_swap_args"]["offload_txt_in"], + offload_img_in = model["block_swap_args"]["offload_img_in"], + ) + elif model["manual_offloading"]: + transformer.to(device) + + mm.unload_all_models() + mm.soft_empty_cache() + gc.collect() + + try: + torch.cuda.reset_peak_memory_stats(device) + except: + pass + + pipeline.scheduler.set_timesteps(steps, device=device) + timesteps = pipeline.scheduler.timesteps + + eta_values = generate_eta_values(timesteps / 1000, start_step, end_step, eta_base, eta_trend) + + + target_latents = target_latents.to(device) + latents = inversed_latents["samples"] + + # 7. Denoising loop + self._num_timesteps = len(timesteps) + + from .latent_preview import prepare_callback + callback = prepare_callback(transformer, steps) + + from comfy.utils import ProgressBar + from tqdm import tqdm + log.info(f"Sampling {num_frames} frames in {latents.shape[2]} latents at {width}x{height} with {len(timesteps)} inference steps") + comfy_pbar = ProgressBar(len(timesteps)) + + with tqdm(total=len(timesteps)) as progress_bar: + for idx, (t, t_prev) in enumerate(zip(timesteps[:-1], timesteps[1:])): + + latent_model_input = latents + + t_expand = t.repeat(latent_model_input.shape[0]) + guidance_expand = ( + torch.tensor( + [embedded_guidance_scale] * latent_model_input.shape[0], + dtype=torch.float32, + device=device, + ).to(pipeline.base_dtype) + * 1000.0 + if embedded_guidance_scale is not None + else None + ) + + # predict the noise residual + with torch.autocast( + device_type="cuda", dtype=pipeline.base_dtype, enabled=True + ): + noise_pred = transformer( # For an input image (129, 192, 336) (1, 256, 256) + latent_model_input, # [2, 16, 33, 24, 42] + t_expand, # [2] + text_states=hyvid_embeds["prompt_embeds"], # [2, 256, 4096] + text_mask=hyvid_embeds["attention_mask"], # [2, 256] + text_states_2=hyvid_embeds["prompt_embeds_2"], # [2, 768] + freqs_cos=freqs_cos, # [seqlen, head_dim] + freqs_sin=freqs_sin, # [seqlen, head_dim] + guidance=guidance_expand, + stg_block_idx=-1, + stg_mode=None, + return_dict=True, + )["x"] + sigma = t / 1000.0 + sigma_prev = t_prev / 1000.0 + noise_pred = noise_pred.to(torch.float32) + latents = latents.to(torch.float32) + target_latents = target_latents.to(torch.float32) + target_img_velocity = -(target_latents - latents) / sigma + + # interpolated velocity + eta = eta_values[idx] + interpolated_velocity = eta * target_img_velocity + (1 - eta) * noise_pred + latents = latents + (sigma_prev - sigma) * interpolated_velocity + + print(f"X_{sigma_prev:.3f} = X_{sigma:.3f} + {sigma_prev - sigma:.3f} * ({eta:.3f} * target_img_velocity + {1 - eta:.3f} * noise_pred)") + latents = latents.to(torch.bfloat16) + + if callback is not None: + callback(idx, latents.detach()[-1].permute(1,0,2,3), None, steps) + else: + comfy_pbar.update(1) + + print_memory(device) + try: + torch.cuda.reset_peak_memory_stats(device) + except: + pass + + if force_offload: + if model["manual_offloading"]: + transformer.to(offload_device) + mm.soft_empty_cache() + gc.collect() + + return ({ + "samples": latents + },) + +NODE_CLASS_MAPPINGS = { + "HyVideoInverseSampler": HyVideoInverseSampler, + "HyVideoReSampler": HyVideoReSampler, + "HyVideoEmptyTextEmbeds": HyVideoEmptyTextEmbeds +} +NODE_DISPLAY_NAME_MAPPINGS = { + "HyVideoInverseSampler": "HunyuanVideo Inverse Sampler", + "HyVideoReSampler": "HunyuanVideo ReSampler", + "HyVideoEmptyTextEmbeds": "HunyuanVideo Empty Text Embeds" +} \ No newline at end of file From 5b349848d458c1036efeaf78f97f9d27bc303c59 Mon Sep 17 00:00:00 2001 From: kijai <40791699+kijai@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:30:45 +0200 Subject: [PATCH 4/4] remove prints --- nodes_rf_inversion.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nodes_rf_inversion.py b/nodes_rf_inversion.py index 62b482d..15ce7d7 100644 --- a/nodes_rf_inversion.py +++ b/nodes_rf_inversion.py @@ -232,7 +232,6 @@ class HyVideoInverseSampler: progress_bar.update() if callback is not None: - print("callback", latents.shape) callback(idx, latents.detach()[-1].permute(1,0,2,3), None, steps) else: comfy_pbar.update(1) @@ -401,7 +400,7 @@ class HyVideoReSampler: interpolated_velocity = eta * target_img_velocity + (1 - eta) * noise_pred latents = latents + (sigma_prev - sigma) * interpolated_velocity - print(f"X_{sigma_prev:.3f} = X_{sigma:.3f} + {sigma_prev - sigma:.3f} * ({eta:.3f} * target_img_velocity + {1 - eta:.3f} * noise_pred)") + #print(f"X_{sigma_prev:.3f} = X_{sigma:.3f} + {sigma_prev - sigma:.3f} * ({eta:.3f} * target_img_velocity + {1 - eta:.3f} * noise_pred)") latents = latents.to(torch.bfloat16) if callback is not None: