diff --git a/README.md b/README.md index dc99b4e..4e959c1 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ All input & output slots are AnyType (*). They can hook onto any node, including loader nodes like "Load Model", "Load VAE", "Load CLIP", etc. that usually don't have any connectable input slots, making linear connection/chaining of all node types possible - enforcing a single, sequential & deterministic flow of execution. This node adaptively expands its input & output slots to support infinitely many passthrough data (persist_any_N), passing every input to their corresponding "N"th output slot unchanged. -The memory clean up + linear passthrough of data facilitated by this node can help to **speed up workflows** involving multiple models (e.g. CLIP, VAE, Diffusion Model, etc.) that compete for the same VRAM/RAM but don't all need to be loaded at the same time, by separating each model's operation into its own segment and linearly chaining them together with multiple instances of this node, where only the necessary outputs of each segment (e.g. latents, conditioning, images, models, etc.) are passed on to the next segment while unloading all/some models that are no longer needed in the workflow. +The memory clean up + linear passthrough of data facilitated by this node can help to **speed up certain workflows** involving multiple models (e.g. CLIP, VAE, Diffusion Model, etc.) that compete for the same VRAM/RAM but don't all need to be loaded at the same time, by separating each model's operation into its own segment and linearly chaining them together with multiple instances of this node, where only the necessary outputs of each segment (e.g. latents, conditioning, images, models, etc.) are passed on to the next segment while unloading all/some models that are no longer needed in the workflow. -This becomes especially effective in freeing VRAM/RAM between multiple KSamplers (e.g. Wan 2.2 High & Low KSamplers), or before & after VAE Encode / VAE Decode / Load CLIP / Load Model / etc. that allow more of the models' layers to be loaded onto the GPU VRAM and less offloaded to the slower System RAM, resulting in faster overall inference times and letting the user push to higher resolution media outputs before hitting OOM. I have personally seen great reductions in total execution time of my workflows using this node. +This becomes especially effective in freeing VRAM/RAM between multiple KSamplers (e.g. Wan 2.2 High & Low KSamplers), or before & after VAE Encode / VAE Decode / Load CLIP / Load Model / etc. that allow more of the models' layers to be loaded onto the GPU VRAM and less offloaded to the slower System RAM, resulting in faster overall inference times and letting the user push to higher resolution media outputs before hitting OOM. Please do note that as ComfyUI and its model management logic is consistently evolving, any performance benefits offered by this node may change at any time. ## 🛠️ Installation @@ -35,7 +35,7 @@ This becomes especially effective in freeing VRAM/RAM between multiple KSamplers ## 🎨 Example Workflow -In the `example_workflows/` folder of this repo, I have included example Wan 2.2 and LTX 2.3 T2V & I2V ComfyUI workflows using this node. Simply drag and drop the .json files into the ComfyUI browser tab to start using them. These workflows demonstrate how this node can be used to achieve a single sequential flow of execution, loading & unloading only the necessary model at each section of the workflow before progressing to the next. +In the `example_workflows/` folder of this repo, I have included example Wan 2.2 and LTX 2.3 (T2V & I2V) ComfyUI workflows using this node. Simply drag and drop the .json files into the ComfyUI browser tab to start using them. These workflows demonstrate how this node can be used to achieve a single sequential flow of execution, loading & unloading only the necessary model at each section of the workflow before progressing to the next. ## 🚀 Usage & Tips @@ -70,7 +70,7 @@ In the `example_workflows/` folder of this repo, I have included example Wan 2.2 - You may notice that system RAM usage often does not drop as significantly as GPU VRAM does after this node's "free_memory" operation runs. This is expected behavior in the current implementation of ComfyUI, as ComfyUI intentionally caches the output of every executed node in RAM (e.g. latents, images, conditionings, tensors, etc.) with strong references that survive any py garbage collection invoked from inside the custom node's logic, and only releases those references after the entire "prompt execution" finishes (see [execution.py](https://github.com/Comfy-Org/ComfyUI/blob/master/execution.py), [comfy_execution/caching.py](https://github.com/Comfy-Org/ComfyUI/blob/master/comfy_execution/caching.py)). This is an intentional optimization design by ComfyUI so that downstream nodes can reuse upstream outputs instantly without re-computation. The "free_memory" operation of this custom node already does the maximum possible cleanup with (model unloading + explicit gc.collect() + double device cache clearing before and after the garbage collection to collect as much lingering tensors as possible, etc.). Hence, any RAM that remains allocated after this node runs is ComfyUI's deliberate output caching, which is best to leave up to ComfyUI to manage & optimize behind the scenes across multiple workflow runs. - CLIP models (and other text encoders) behave differently from diffusion models. In most workflows, ComfyUI automatically unloads the CLIP model immediately after the conditioning nodes (CLIPTextEncode, CLIPTextEncodeFlux, etc.) finish (see [comfy/model_management.py](https://github.com/Comfy-Org/ComfyUI/blob/master/comfy/model_management.py)). Hence, if you route the CLIP model through this node, the node will often receive an already-unloaded “husk” object, and passing this object to a later conditioning node can cause malformed conditioning outputs or OutOfMemory errors when you feed them into KSamplers. This is an inherent behaviour of the `Load CLIP (Comfy Core)` node which my custom node (that executes later in the graph) cannot prevent. As a workaround, do not rely on passing the CLIP model itself through this node. Instead, you could generate the conditioning immediately after loading CLIP, and only pass the resulting conditioning outputs through to persist_any_N. If you need the CLIP model later, you can always reload it with a new `Load CLIP (Comfy Core)` node in the subsequent chains. Diffusion models, VAEs, and most other large models managed by ComfyUI do persist correctly when routed through this node. - Some GGUF / Quantized model loaders have custom unloading logic that may not always respect the keep_loaded feature of this node's free_memory operation, hence may drop itself before entering the node much like how CLIP models behave. But again, this can be mitigated by loading the model back in on the subsequent chains whenever you need them. -- As ComfyUI is evolving constantly, its internal model management logic can also change at any moment. So if any of the models routed through this node fail to persist or produce unexpected outcomes (e.g. CLIPTextEncode or KSamplers hang indefinitely or throw OutOfMemory errors, etc.), you can always fallback to using the models immediately after loading instead of routing them through this node, and load them back in on later chains only when they are needed again. +- As ComfyUI is evolving constantly, its internal model management logic can also change at any moment. Hence, if any of the models routed through this node fail to persist or produce unexpected outcomes (e.g. CLIPTextEncode or KSamplers hanging indefinitely or throwing OutOfMemory errors, etc.), you can always fallback to using the models immediately after loading instead of routing them through this node, and load them back in on later chains only when they are needed again. ## ❤️ Inspired By diff --git a/example_workflows/video_ltx2_3_i2v_t2v.json b/example_workflows/video_ltx2_3_i2v_t2v.json index e345519..b712abc 100644 --- a/example_workflows/video_ltx2_3_i2v_t2v.json +++ b/example_workflows/video_ltx2_3_i2v_t2v.json @@ -1356,52 +1356,6 @@ "a" ] }, - { - "id": 436, - "type": "UNETLoader", - "pos": [ - -351.6820425296172, - 2158.5517060127604 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 62, - "mode": 0, - "inputs": [ - { - "name": "weight_dtype", - "type": "COMBO", - "widget": { - "name": "weight_dtype" - }, - "link": 996 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 919 - ] - } - ], - "properties": { - "Node name for S&R": "UNETLoader", - "ue_properties": { - "widget_ue_connectable": {}, - "input_ue_unconnectable": {}, - "version": "7.6.2" - } - }, - "widgets_values": [ - "ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors", - "default" - ] - }, { "id": 393, "type": "FileNameSelector", @@ -1721,50 +1675,6 @@ "1 + 8 * round((a*b)/8)" ] }, - { - "id": 455, - "type": "LoraLoaderModelOnly", - "pos": [ - -352.37109212158714, - 2286.180019060933 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 64, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 919 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 923 - ] - } - ], - "title": "Load LoRA (for dev model)", - "properties": { - "Node name for S&R": "LoraLoaderModelOnly", - "ue_properties": { - "widget_ue_connectable": {}, - "input_ue_unconnectable": {}, - "version": "7.6.2" - } - }, - "widgets_values": [ - "ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors", - 0.6 - ] - }, { "id": 460, "type": "MarkdownNote", @@ -1794,35 +1704,6 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 459, - "type": "MarkdownNote", - "pos": [ - -6228.904559518782, - 2293.5167936377493 - ], - "size": [ - 379.2498331397801, - 416.6872558946461 - ], - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "ue_properties": { - "widget_ue_connectable": {}, - "version": "7.6.2", - "input_ue_unconnectable": {} - } - }, - "widgets_values": [ - "# LTX-2.3 22b Models\n\nSource Repos:\n\n - Kijai: [https://huggingface.co/Kijai/LTX2.3_comfy](https://huggingface.co/Kijai/LTX2.3_comfy)\n\n - Lightricks Official: [https://huggingface.co/Lightricks/LTX-2.3](https://huggingface.co/Lightricks/LTX-2.3)\n\n - Comfy-Org Official: [https://huggingface.co/Comfy-Org/ltx-2](https://huggingface.co/Comfy-Org/ltx-2)\n\ndiffusion_models/\n- [ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors)\n- [ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors)\n\ntext_encoders/\n- [gemma_3_12B_it_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/ltx-2/blob/main/split_files/text_encoders/gemma_3_12B_it_fp8_scaled.safetensors)\n\n- [ltx-2.3_text_projection_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/text_encoders/ltx-2.3_text_projection_bf16.safetensors)\n\nvae/\n- [LTX23_video_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_video_vae_bf16.safetensors)\n- [LTX23_audio_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_audio_vae_bf16.safetensors)\n- [taeltx2_3.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/taeltx2_3.safetensors)\n\nloras/\n- [ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/loras/ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors) (for dev model)\n\nlatent_upscale_models/\n- [ltx-2.3-spatial-upscaler-x2-1.0.safetensors](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x2-1.0.safetensors)" - ], - "color": "#432", - "bgcolor": "#653" - }, { "id": 445, "type": "Note", @@ -1835,7 +1716,7 @@ 131.10720043651034 ], "flags": {}, - "order": 15, + "order": 14, "mode": 0, "inputs": [], "outputs": [], @@ -2035,7 +1916,7 @@ 58 ], "flags": {}, - "order": 16, + "order": 15, "mode": 0, "inputs": [], "outputs": [ @@ -2134,7 +2015,7 @@ 58 ], "flags": {}, - "order": 17, + "order": 16, "mode": 0, "inputs": [], "outputs": [ @@ -2287,7 +2168,7 @@ 60 ], "flags": {}, - "order": 18, + "order": 17, "mode": 0, "inputs": [], "outputs": [ @@ -2603,7 +2484,7 @@ 58 ], "flags": {}, - "order": 19, + "order": 18, "mode": 0, "inputs": [], "outputs": [ @@ -2752,7 +2633,7 @@ 58 ], "flags": {}, - "order": 20, + "order": 19, "mode": 0, "inputs": [], "outputs": [ @@ -2844,7 +2725,7 @@ 82 ], "flags": {}, - "order": 21, + "order": 20, "mode": 0, "inputs": [], "outputs": [ @@ -2883,7 +2764,7 @@ "flags": { "collapsed": false }, - "order": 22, + "order": 21, "mode": 0, "inputs": [], "outputs": [ @@ -2961,96 +2842,6 @@ 4096 ] }, - { - "id": 492, - "type": "LoraLoaderModelOnly", - "pos": [ - 3985.786516076594, - 2288.831777706322 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 81, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 1044 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 1043 - ] - } - ], - "title": "Load LoRA (for dev model)", - "properties": { - "Node name for S&R": "LoraLoaderModelOnly", - "ue_properties": { - "widget_ue_connectable": {}, - "input_ue_unconnectable": {}, - "version": "7.6.2" - } - }, - "widgets_values": [ - "ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors", - 0.6 - ] - }, - { - "id": 490, - "type": "UNETLoader", - "pos": [ - 3986.475565668564, - 2161.2034646581506 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "weight_dtype", - "type": "COMBO", - "widget": { - "name": "weight_dtype" - }, - "link": 1045 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 1044 - ] - } - ], - "properties": { - "Node name for S&R": "UNETLoader", - "ue_properties": { - "widget_ue_connectable": {}, - "input_ue_unconnectable": {}, - "version": "7.6.2" - } - }, - "widgets_values": [ - "ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors", - "default" - ] - }, { "id": 493, "type": "RandomNoise", @@ -3063,7 +2854,7 @@ 82 ], "flags": {}, - "order": 23, + "order": 22, "mode": 0, "inputs": [], "outputs": [ @@ -3174,7 +2965,7 @@ 58 ], "flags": {}, - "order": 24, + "order": 23, "mode": 0, "inputs": [], "outputs": [ @@ -3286,7 +3077,7 @@ 68.88020833333334 ], "flags": {}, - "order": 25, + "order": 24, "mode": 0, "inputs": [], "outputs": [ @@ -3331,7 +3122,7 @@ 82 ], "flags": {}, - "order": 26, + "order": 25, "mode": 0, "inputs": [], "outputs": [ @@ -3428,7 +3219,7 @@ 82 ], "flags": {}, - "order": 27, + "order": 26, "mode": 0, "inputs": [], "outputs": [ @@ -3608,7 +3399,7 @@ 58 ], "flags": {}, - "order": 28, + "order": 27, "mode": 0, "inputs": [], "outputs": [ @@ -3648,7 +3439,7 @@ 125.31187414319356 ], "flags": {}, - "order": 29, + "order": 28, "mode": 0, "inputs": [], "outputs": [], @@ -3819,7 +3610,7 @@ 200 ], "flags": {}, - "order": 30, + "order": 29, "mode": 0, "inputs": [], "outputs": [ @@ -4044,7 +3835,7 @@ 60 ], "flags": {}, - "order": 31, + "order": 30, "mode": 0, "inputs": [], "outputs": [ @@ -4771,7 +4562,7 @@ 82 ], "flags": {}, - "order": 32, + "order": 31, "mode": 0, "inputs": [], "outputs": [ @@ -4808,7 +4599,7 @@ 58 ], "flags": {}, - "order": 33, + "order": 32, "mode": 0, "inputs": [], "outputs": [ @@ -4891,7 +4682,7 @@ 106.0909722995716 ], "flags": {}, - "order": 34, + "order": 33, "mode": 0, "inputs": [], "outputs": [], @@ -4908,6 +4699,215 @@ "color": "#432", "bgcolor": "#653" }, + { + "id": 459, + "type": "MarkdownNote", + "pos": [ + -6228.904559518782, + 2293.5167936377493 + ], + "size": [ + 379.2498331397801, + 416.6872558946461 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.6.2", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "# LTX-2.3 22b Models\n\nSource Repos:\n\n - Kijai: [https://huggingface.co/Kijai/LTX2.3_comfy](https://huggingface.co/Kijai/LTX2.3_comfy)\n\n - Lightricks Official: [https://huggingface.co/Lightricks/LTX-2.3](https://huggingface.co/Lightricks/LTX-2.3)\n\n - Comfy-Org Official: [https://huggingface.co/Comfy-Org/ltx-2](https://huggingface.co/Comfy-Org/ltx-2)\n\ndiffusion_models/\n- [ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors)\n- [ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors)\n\ntext_encoders/\n- [gemma_3_12B_it_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/ltx-2/blob/main/split_files/text_encoders/gemma_3_12B_it_fp8_scaled.safetensors)\n\n- [ltx-2.3_text_projection_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/text_encoders/ltx-2.3_text_projection_bf16.safetensors)\n\nvae/\n- [LTX23_video_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_video_vae_bf16.safetensors)\n- [LTX23_audio_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_audio_vae_bf16.safetensors)\n- [taeltx2_3.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/taeltx2_3.safetensors)\n\nloras/\n- [ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/loras/ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors) (for dev model)\n\nlatent_upscale_models/\n- [ltx-2.3-spatial-upscaler-x2-1.0.safetensors](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x2-1.0.safetensors)" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 436, + "type": "UNETLoader", + "pos": [ + -351.6820425296172, + 2158.5517060127604 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "weight_dtype", + "type": "COMBO", + "widget": { + "name": "weight_dtype" + }, + "link": 996 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 919 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.6.2" + } + }, + "widgets_values": [ + "ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors", + "default" + ] + }, + { + "id": 455, + "type": "LoraLoaderModelOnly", + "pos": [ + -352.37109212158714, + 2286.180019060933 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 64, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 919 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 923 + ] + } + ], + "title": "Load LoRA (for dev model)", + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.6.2" + } + }, + "widgets_values": [ + "ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors", + 0.6 + ] + }, + { + "id": 490, + "type": "UNETLoader", + "pos": [ + 3986.475565668564, + 2161.2034646581506 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 80, + "mode": 0, + "inputs": [ + { + "name": "weight_dtype", + "type": "COMBO", + "widget": { + "name": "weight_dtype" + }, + "link": 1045 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1044 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.6.2" + } + }, + "widgets_values": [ + "ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors", + "default" + ] + }, + { + "id": 492, + "type": "LoraLoaderModelOnly", + "pos": [ + 3985.786516076594, + 2288.831777706322 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 81, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1044 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1043 + ] + } + ], + "title": "Load LoRA (for dev model)", + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.6.2" + } + }, + "widgets_values": [ + "ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors", + 0.6 + ] + }, { "id": 411, "type": "SaveVideo", @@ -4950,7 +4950,7 @@ "ver": "0.5.1" }, "widgets_values": [ - "video/LTX_2.3_i2v", + "video/LTX_2.3", "auto", "auto" ] @@ -6056,10 +6056,10 @@ "config": {}, "extra": { "ds": { - "scale": 0.8390545288824014, + "scale": 0.8390545288824015, "offset": [ - 6404.566442360716, - -1682.942536374039 + 6433.820222803895, + -1689.4432673583635 ] }, "frontendVersion": "1.42.10", diff --git a/example_workflows/video_ltx2_3_i2v_t2v_single_pass.json b/example_workflows/video_ltx2_3_i2v_t2v_single_pass.json index 5efb4d3..4a27bad 100644 --- a/example_workflows/video_ltx2_3_i2v_t2v_single_pass.json +++ b/example_workflows/video_ltx2_3_i2v_t2v_single_pass.json @@ -2083,52 +2083,6 @@ "a" ] }, - { - "id": 436, - "type": "UNETLoader", - "pos": [ - -351.6820425296172, - 2158.5517060127604 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "weight_dtype", - "type": "COMBO", - "widget": { - "name": "weight_dtype" - }, - "link": 928 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 919 - ] - } - ], - "properties": { - "Node name for S&R": "UNETLoader", - "ue_properties": { - "widget_ue_connectable": {}, - "input_ue_unconnectable": {}, - "version": "7.6.2" - } - }, - "widgets_values": [ - "ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors", - "default" - ] - }, { "id": 393, "type": "FileNameSelector", @@ -2629,50 +2583,6 @@ "1 + 8 * round((a*b)/8)" ] }, - { - "id": 455, - "type": "LoraLoaderModelOnly", - "pos": [ - -352.37109212158714, - 2286.180019060933 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 53, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 919 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 923 - ] - } - ], - "title": "Load LoRA (for dev model)", - "properties": { - "Node name for S&R": "LoraLoaderModelOnly", - "ue_properties": { - "widget_ue_connectable": {}, - "input_ue_unconnectable": {}, - "version": "7.6.2" - } - }, - "widgets_values": [ - "ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors", - 0.6 - ] - }, { "id": 460, "type": "MarkdownNote", @@ -2702,35 +2612,6 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 459, - "type": "MarkdownNote", - "pos": [ - -6228.904559518782, - 2293.5167936377493 - ], - "size": [ - 379.2498331397801, - 416.6872558946461 - ], - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "ue_properties": { - "widget_ue_connectable": {}, - "version": "7.6.2", - "input_ue_unconnectable": {} - } - }, - "widgets_values": [ - "# LTX-2.3 22b Models\n\nSource Repos:\n\n - Kijai: [https://huggingface.co/Kijai/LTX2.3_comfy](https://huggingface.co/Kijai/LTX2.3_comfy)\n\n - Lightricks Official: [https://huggingface.co/Lightricks/LTX-2.3](https://huggingface.co/Lightricks/LTX-2.3)\n\n - Comfy-Org Official: [https://huggingface.co/Comfy-Org/ltx-2](https://huggingface.co/Comfy-Org/ltx-2)\n\ndiffusion_models/\n- [ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors)\n- [ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-distilled_transformer_only_fp8_scaled.safetensors)\n\ntext_encoders/\n- [gemma_3_12B_it_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/ltx-2/blob/main/split_files/text_encoders/gemma_3_12B_it_fp8_scaled.safetensors)\n\n- [ltx-2.3_text_projection_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/text_encoders/ltx-2.3_text_projection_bf16.safetensors)\n\nvae/\n- [LTX23_video_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_video_vae_bf16.safetensors)\n- [LTX23_audio_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_audio_vae_bf16.safetensors)\n- [taeltx2_3.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/taeltx2_3.safetensors)\n\nloras/\n- [ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/loras/ltx-2.3-22b-distilled-lora-dynamic_fro09_avg_rank_105_bf16.safetensors) (for dev model)\n\nlatent_upscale_models/\n- [ltx-2.3-spatial-upscaler-x2-1.0.safetensors](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x2-1.0.safetensors)" - ], - "color": "#432", - "bgcolor": "#653" - }, { "id": 445, "type": "Note", @@ -2743,7 +2624,7 @@ 131.10720043651034 ], "flags": {}, - "order": 20, + "order": 19, "mode": 0, "inputs": [], "outputs": [], @@ -2943,7 +2824,7 @@ 82 ], "flags": {}, - "order": 21, + "order": 20, "mode": 0, "inputs": [], "outputs": [ @@ -2968,53 +2849,6 @@ "fixed" ] }, - { - "id": 411, - "type": "SaveVideo", - "pos": [ - 3294.8472213576238, - 2160.766067097663 - ], - "size": [ - 458.704910457438, - 556.704910457438 - ], - "flags": { - "collapsed": false - }, - "order": 68, - "mode": 0, - "inputs": [ - { - "name": "video", - "type": "VIDEO", - "link": 809 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "SaveVideo", - "ue_properties": { - "widget_ue_connectable": {}, - "version": "7.6.2", - "input_ue_unconnectable": {} - }, - "enableTabs": false, - "tabWidth": 65, - "tabXOffset": 10, - "hasSecondTab": false, - "secondTabText": "Send Back", - "secondTabOffset": 80, - "secondTabWidth": 65, - "cnr_id": "comfy-core", - "ver": "0.5.1" - }, - "widgets_values": [ - "video/LTX_2.3_i2v", - "auto", - "auto" - ] - }, { "id": 376, "type": "ResizeImagesByLongerEdge", @@ -3119,7 +2953,7 @@ 125.31187414319356 ], "flags": {}, - "order": 22, + "order": 21, "mode": 0, "inputs": [], "outputs": [], @@ -3148,7 +2982,7 @@ 106.0909722995716 ], "flags": {}, - "order": 23, + "order": 22, "mode": 0, "inputs": [], "outputs": [], @@ -3177,7 +3011,7 @@ 58 ], "flags": {}, - "order": 24, + "order": 23, "mode": 0, "inputs": [], "outputs": [ @@ -3214,7 +3048,7 @@ 200 ], "flags": {}, - "order": 25, + "order": 24, "mode": 0, "inputs": [], "outputs": [ @@ -3473,6 +3307,125 @@ "bf16" ] }, + { + "id": 436, + "type": "UNETLoader", + "pos": [ + -351.6820425296172, + 2158.5517060127604 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "weight_dtype", + "type": "COMBO", + "widget": { + "name": "weight_dtype" + }, + "link": 928 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 919 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.6.2" + } + }, + "widgets_values": [ + "ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors", + "default" + ] + }, + { + "id": 455, + "type": "LoraLoaderModelOnly", + "pos": [ + -352.37109212158714, + 2286.180019060933 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 53, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 919 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 923 + ] + } + ], + "title": "Load LoRA (for dev model)", + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.6.2" + } + }, + "widgets_values": [ + "ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors", + 0.6 + ] + }, + { + "id": 459, + "type": "MarkdownNote", + "pos": [ + -6228.904559518782, + 2293.5167936377493 + ], + "size": [ + 379.2498331397801, + 416.6872558946461 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.6.2", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "# LTX-2.3 22b Models\n\nSource Repos:\n\n - Kijai: [https://huggingface.co/Kijai/LTX2.3_comfy](https://huggingface.co/Kijai/LTX2.3_comfy)\n\n - Lightricks Official: [https://huggingface.co/Lightricks/LTX-2.3](https://huggingface.co/Lightricks/LTX-2.3)\n\n - Comfy-Org Official: [https://huggingface.co/Comfy-Org/ltx-2](https://huggingface.co/Comfy-Org/ltx-2)\n\ndiffusion_models/\n- [ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors)\n- [ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/diffusion_models/ltx-2.3-22b-distilled-1.1_transformer_only_fp8_scaled.safetensors)\n\ntext_encoders/\n- [gemma_3_12B_it_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/ltx-2/blob/main/split_files/text_encoders/gemma_3_12B_it_fp8_scaled.safetensors)\n\n- [ltx-2.3_text_projection_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/text_encoders/ltx-2.3_text_projection_bf16.safetensors)\n\nvae/\n- [LTX23_video_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_video_vae_bf16.safetensors)\n- [LTX23_audio_vae_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/LTX23_audio_vae_bf16.safetensors)\n- [taeltx2_3.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/vae/taeltx2_3.safetensors)\n\nloras/\n- [ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors](https://huggingface.co/Kijai/LTX2.3_comfy/blob/main/loras/ltx-2.3-22b-distilled-1.1_lora-dynamic_fro09_avg_rank_111_bf16.safetensors) (for dev model)\n\nlatent_upscale_models/\n- [ltx-2.3-spatial-upscaler-x2-1.0.safetensors](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x2-1.0.safetensors)" + ], + "color": "#432", + "bgcolor": "#653" + }, { "id": 400, "type": "PrimitiveInt", @@ -3510,6 +3463,53 @@ 0, "increment" ] + }, + { + "id": 411, + "type": "SaveVideo", + "pos": [ + 3294.8472213576238, + 2160.766067097663 + ], + "size": [ + 458.704910457438, + 556.704910457438 + ], + "flags": { + "collapsed": false + }, + "order": 68, + "mode": 0, + "inputs": [ + { + "name": "video", + "type": "VIDEO", + "link": 809 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "SaveVideo", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.6.2", + "input_ue_unconnectable": {} + }, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.5.1" + }, + "widgets_values": [ + "video/LTX_2.3", + "auto", + "auto" + ] } ], "links": [ @@ -4214,10 +4214,10 @@ "config": {}, "extra": { "ds": { - "scale": 0.8390545288824024, + "scale": 0.8390545288824038, "offset": [ - 6400.16664151835, - -1690.197282689644 + 6430.265240927054, + -1687.9215074928024 ] }, "frontendVersion": "1.42.10",