From ee11be3ce229c3afd5fadf8a1258eb8b84af33b1 Mon Sep 17 00:00:00 2001 From: sync-bot Date: Wed, 16 Jul 2025 14:19:39 +0000 Subject: [PATCH] Automated PR - 2025-07-16 --- README.md | 30 + __init__.py | 5 +- easy_samplers.py | 136 +- .../ltxv-13b-dist-i2v-base-fp8.json | 4 +- .../13b-distilled/ltxv-13b-dist-i2v-base.json | 4 +- .../ltxv-13b-dist-i2v-extend.json | 4 +- .../ltxv-13b-dist-i2v-keyframes.json | 4 +- example_workflows/chimpanzee.webp | Bin 0 -> 81384 bytes example_workflows/depth-surfing.mp4 | 3 + example_workflows/ic_lora/ic-lora.json | 4 +- example_workflows/ltxv-13b-i2v-base-fp8.json | 4 +- example_workflows/ltxv-13b-i2v-base.json | 4 +- example_workflows/ltxv-13b-i2v-extend.json | 4 +- example_workflows/ltxv-13b-i2v-keyframes.json | 4 +- .../ltxv-13b-i2v-long-multi-prompt.json | 4726 ++++++++++++++++ .../ltxv-13b-i2v-mixed-multiscale.json | 4 +- example_workflows/ltxv-13b-upscale.json | 2604 +++++++++ .../ltxv-13b-v2v-long-depth.json | 4864 +++++++++++++++++ film_grain.py | 28 +- looping_sampler.py | 726 +++ tiled_sampler.py | 294 - tiled_vae_decode.py | 197 + 22 files changed, 13285 insertions(+), 368 deletions(-) create mode 100644 example_workflows/chimpanzee.webp create mode 100644 example_workflows/depth-surfing.mp4 create mode 100644 example_workflows/ltxv-13b-i2v-long-multi-prompt.json create mode 100644 example_workflows/ltxv-13b-upscale.json create mode 100644 example_workflows/ltxv-13b-v2v-long-depth.json create mode 100644 looping_sampler.py create mode 100644 tiled_vae_decode.py diff --git a/README.md b/README.md index 0f1c335..3d952a2 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,29 @@ ComfyUI-LTXVideo is a collection of custom nodes for ComfyUI, designed to provid The model itself is supported in the core ComfyUI [code](https://github.com/comfyanonymous/ComfyUI/tree/master/comfy/ldm/lightricks). The main LTXVideo repository can be found [here](https://github.com/Lightricks/LTX-Video). + + +# ⭐ 16.07.2025 - LTXV 0.9.8 Release ⭐ + +### πŸš€ What's New +1. **LTXV 0.9.8 Model**
+ The new model and its distilled variants offer improved prompt understanding and detail generation
+ πŸ‘‰ [13B Distilled model](https://huggingface.co/Lightricks/LTX-Video/blob/main/ltxv-13b-0.9.8-distilled.safetensors)
+ πŸ‘‰ [13B Distilled model 8-bit](https://huggingface.co/Lightricks/LTX-Video/blob/main/ltxv-13b-0.9.8-distilled-fp8.safetensors)
+ πŸ‘‰ [2B from 13B Distilled model](https://huggingface.co/Lightricks/LTX-Video/blob/main/ltxv-2b-0.9.8-distilled.safetensors)
+ πŸ‘‰ [2B from 13B Distilled model 8-bit](https://huggingface.co/Lightricks/LTX-Video/blob/main/ltxv-2b-0.9.8-distilled-fp8.safetensors)
+ πŸ‘‰ [IC Lora Detailer](https://huggingface.co/Lightricks/LTX-Video-ICLoRA-detailer-13b-0.9.8/resolve/main/ltxv-098-ic-lora-detailer-comfyui.safetensors)
+ + +2. **Autoregressive Generation** + Introducing new ComfyUI nodes that enable virtually infinite video generation. The new **LTXV Looping Sampler** node allows generation of videos with arbitrary length and consistent motion. **ICLoRAs** are supported as wellβ€”by providing guidance from existing videos (e.g., depth, pose, or Canny edges), you can generate long videos in a video-to-video manner. + πŸ‘‰ [Long Img2Video Generation Flow](#long-video-generation) + πŸ‘‰ [Long Video2Video Generation Flow](#long-video-generation) + +3. **Detailer ICLoRA** + Introducing the **Detailer ICLoRA**, which enhances generated latents with fine details by applying a few additional diffusion steps. This results in significantly more detailed generations. + πŸ‘‰ [Detailer ICLoRA Flow](#video-upscaling) + # ⭐ 8.07.2025 - LTXVideo ICLora Release ⭐ ### πŸš€ What's New in LTXVideo ICLoRA @@ -165,6 +188,13 @@ For portable ComfyUI installations, run Note that to run the example workflows, you need to have some additional custom nodes, like [ComfyUI-VideoHelperSuite](https://github.com/kosinkadink/ComfyUI-VideoHelperSuite) and others, installed. You can do it by pressing "Install Missing Custom Nodes" button in ComfyUI Manager. +### Long Video Generation +🧩 [Image to Video Long Video](example_workflows/ltxv-13b-i2v-long-multi-prompt.json): Long video generation with support for multiple prompts along the video duration. +🧩 [Video to Video Long Video](example_workflows/ltxv-13b-v2v-long-depth.json): Long video-to-video generation. Given a guiding videoβ€”such as depth, pose, or edgesβ€”the flow generates a new video. + +### Video Upscaling +🧩 [Video Upscaling](example_workflows/ltxv-13b-upscale.json): Upscales and adds fine details to any given video, increasing its spatial resolution by 2Γ—. + ### Easy to use multi scale generation workflows 🧩 [Image to video mixed](example_workflows/ltxv13b-i2v-mixed-multiscale.json): mixed flow with full and distilled model for best quality and speed trade-off.
diff --git a/__init__.py b/__init__.py index 940067c..d77e324 100644 --- a/__init__.py +++ b/__init__.py @@ -10,6 +10,7 @@ from .guide import LTXVAddGuideAdvanced from .latent_adain import LTXVAdainLatent from .latent_upsampler import LTXVLatentUpsampler from .latents import LTXVSelectLatents, LTXVSetVideoLatentNoiseMasks +from .looping_sampler import LTXVLoopingSampler, MultiPromptProvider from .masks import LTXVPreprocessMasks from .nodes_registry import NODE_CLASS_MAPPINGS as RUNTIME_NODE_CLASS_MAPPINGS from .nodes_registry import ( @@ -24,7 +25,8 @@ from .stg import ( STGGuiderAdvancedNode, STGGuiderNode, ) -from .tiled_sampler import LTXVLoopingSampler, LTXVTiledSampler, MultiPromptProvider +from .tiled_sampler import LTXVTiledSampler +from .tiled_vae_decode import LTXVTiledVAEDecode from .tricks import NODE_CLASS_MAPPINGS as TRICKS_NODE_CLASS_MAPPINGS from .tricks import NODE_DISPLAY_NAME_MAPPINGS as TRICKS_NODE_DISPLAY_NAME_MAPPINGS from .utiltily_nodes import ImageToCPU @@ -52,6 +54,7 @@ NODE_CLASS_MAPPINGS = { "LTXVSetVideoLatentNoiseMasks": LTXVSetVideoLatentNoiseMasks, "LTXVTiledSampler": LTXVTiledSampler, "LTXVLoopingSampler": LTXVLoopingSampler, + "LTXVTiledVAEDecode": LTXVTiledVAEDecode, "STGAdvancedPresets": STGAdvancedPresetsNode, "STGGuiderAdvanced": STGGuiderAdvancedNode, "STGGuiderNode": STGGuiderNode, diff --git a/easy_samplers.py b/easy_samplers.py index 0a4f50a..b42e905 100644 --- a/easy_samplers.py +++ b/easy_samplers.py @@ -5,12 +5,7 @@ import comfy_extras import nodes import torch from comfy_extras.nodes_custom_sampler import SamplerCustomAdvanced -from comfy_extras.nodes_lt import ( - EmptyLTXVLatentVideo, - LTXVAddGuide, - LTXVCropGuides, - LTXVImgToVideo, -) +from comfy_extras.nodes_lt import EmptyLTXVLatentVideo, LTXVAddGuide, LTXVCropGuides from nodes import VAEEncode from .guide import blur_internal @@ -130,6 +125,10 @@ class LTXVBaseSampler: crop="disabled", crf=35, blur=0, + optional_negative_index_latents=None, + optional_negative_index=-1, + optional_negative_index_strength=1.0, + optional_initialization_latents=None, ): if optional_cond_images is not None: @@ -167,26 +166,36 @@ class LTXVBaseSampler: "Please use STGGuiderAdvanced." ) - if optional_cond_images is None: + if optional_initialization_latents is None: (latents,) = EmptyLTXVLatentVideo().generate(width, height, num_frames, 1) - elif optional_cond_images.shape[0] == 1 and optional_cond_indices[0] == 0: - ( - positive, - negative, - latents, - ) = LTXVImgToVideo().generate( - positive=positive, - negative=negative, - vae=vae, - image=optional_cond_images[0].unsqueeze(0), - width=width, - height=height, - length=num_frames, - batch_size=1, - strength=strength, - ) else: - (latents,) = EmptyLTXVLatentVideo().generate(width, height, num_frames, 1) + latents = optional_initialization_latents + + if ( + optional_cond_images is not None + and optional_cond_images.shape[0] == 1 + and optional_cond_indices[0] == 0 + ): + pixels = comfy.utils.common_upscale( + optional_cond_images[0].unsqueeze(0).movedim(-1, 1), + width, + height, + "bilinear", + "center", + ).movedim(1, -1) + encode_pixels = pixels[:, :, :, :3] + t = vae.encode(encode_pixels) + latents["samples"][:, :, : t.shape[2]] = t + + conditioning_latent_frames_mask = torch.ones( + (1, 1, latents["samples"].shape[2], 1, 1), + dtype=torch.float32, + device=latents["samples"].device, + ) + conditioning_latent_frames_mask[:, :, : t.shape[2]] = 1.0 - strength + latents["noise_mask"] = conditioning_latent_frames_mask + + elif optional_cond_images is not None: for cond_image, cond_idx in zip( optional_cond_images, optional_cond_indices ): @@ -204,6 +213,21 @@ class LTXVBaseSampler: strength=strength, ) + if optional_negative_index_latents is not None: + ( + positive, + negative, + latents, + ) = LTXVAddLatentGuide().generate( + vae=vae, + positive=positive, + negative=negative, + latent=latents, + guiding_latent=optional_negative_index_latents, + latent_idx=optional_negative_index, + strength=optional_negative_index_strength, + ) + guider = copy.copy(guider) guider.set_conds(positive, negative) @@ -247,7 +271,7 @@ class LTXVExtendSampler: "default": 80, "min": -1, "max": nodes.MAX_RESOLUTION, - "step": 8, + "step": 1, "tooltip": "If -1, the number of frames will be based on the number of frames in the optional_guiding_latents.", }, ), @@ -306,6 +330,7 @@ class LTXVExtendSampler: guiding_strength=1.0, optional_guiding_latents=None, optional_reference_latents=None, + optional_initialization_latents=None, adain_factor=0.0, optional_negative_index_latents=None, optional_negative_index=-1, @@ -336,12 +361,19 @@ class LTXVExtendSampler: latents, -overlap, -1 ) - new_latents = EmptyLTXVLatentVideo().generate( - width=width * width_scale_factor, - height=height * height_scale_factor, - length=overlap * time_scale_factor + num_new_frames, - batch_size=1, - )[0] + if optional_initialization_latents is None: + new_latents = EmptyLTXVLatentVideo().generate( + width=width * width_scale_factor, + height=height * height_scale_factor, + length=overlap * time_scale_factor + num_new_frames, + batch_size=1, + )[0] + else: + new_latents = optional_initialization_latents + + last_overlap_latents["samples"] = last_overlap_latents["samples"].to( + new_latents["samples"].device + ) ( positive, @@ -486,8 +518,13 @@ class LTXVInContextSampler: guiding_latents, optional_cond_image=None, num_frames=0, + optional_initialization_latents=None, + optional_negative_index_latents=None, + optional_negative_index=-1, + optional_negative_index_strength=1.0, + optional_cond_strength=1.0, + optional_guiding_strength=1.0, ): - try: positive, negative = guider.raw_conds except AttributeError: @@ -504,12 +541,15 @@ class LTXVInContextSampler: if num_frames != -1: frames = (num_frames - 1) // time_scale_factor + 1 - new_latents = EmptyLTXVLatentVideo().generate( - width=width * width_scale_factor, - height=height * height_scale_factor, - length=(frames - 1) * time_scale_factor + 1, - batch_size=1, - )[0] + if optional_initialization_latents is not None: + new_latents = optional_initialization_latents + else: + new_latents = EmptyLTXVLatentVideo().generate( + width=width * width_scale_factor, + height=height * height_scale_factor, + length=(frames - 1) * time_scale_factor + 1, + batch_size=1, + )[0] if optional_cond_image is not None: optional_cond_image = ( @@ -535,7 +575,7 @@ class LTXVInContextSampler: latent=new_latents, guiding_latent=cond_image_latent, latent_idx=0, - strength=1.0, + strength=optional_cond_strength, ) if optional_cond_image is not None: @@ -553,9 +593,23 @@ class LTXVInContextSampler: negative=negative, latent=new_latents, guiding_latent=guiding_latents, - latent_idx=0 if optional_cond_image is None else 1, - strength=1.0, + latent_idx=1 if optional_cond_image is not None else 0, + strength=optional_guiding_strength, ) + if optional_negative_index_latents is not None: + ( + positive, + negative, + new_latents, + ) = LTXVAddLatentGuide().generate( + vae=vae, + positive=positive, + negative=negative, + latent=new_latents, + guiding_latent=optional_negative_index_latents, + latent_idx=optional_negative_index, + strength=optional_negative_index_strength, + ) guider = copy.copy(guider) guider.set_conds(positive, negative) diff --git a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base-fp8.json b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base-fp8.json index e098bda..a1e3754 100644 --- a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base-fp8.json +++ b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base-fp8.json @@ -182,7 +182,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -3113,7 +3113,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base.json b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base.json index 93fc092..3951fd7 100644 --- a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base.json +++ b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-base.json @@ -182,7 +182,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -3056,7 +3056,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-extend.json b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-extend.json index a708227..fd7ac74 100644 --- a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-extend.json +++ b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-extend.json @@ -182,7 +182,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -3501,7 +3501,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-keyframes.json b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-keyframes.json index 05c4e9c..07ec106 100644 --- a/example_workflows/13b-distilled/ltxv-13b-dist-i2v-keyframes.json +++ b/example_workflows/13b-distilled/ltxv-13b-dist-i2v-keyframes.json @@ -250,7 +250,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -3275,7 +3275,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/chimpanzee.webp b/example_workflows/chimpanzee.webp new file mode 100644 index 0000000000000000000000000000000000000000..6085d15113a2a2e47d6480bfec4f64d6980ebbc6 GIT binary patch literal 81384 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 #TSPl_lgtlf#RU7z($QC=1hQ!u5 z1sq4V_W#KF^6pQ=y-Z$irC^s~ye#L6=|Lb`X2FLRDsUmmF%0zhV6d&QJG!)6M4zT@ z4rBi%5@3`z0WRf1t^Imb87>r})0q7&f4C6V_bb=wH^-H}+ZY4Kkp2XBJ@%r%L){;3 zus2{slFwlq?FTYk%R|&va6Z;^-x5{XPnNV3Tkub^(2`YUVmHsArySx%sph^(7o4QV z6iGKGLajW+P> z#}_#{0iJMXL@JOWS?t^rw>pFg8zvyN#1Sb}O8NfWplP>tIVh-rYB3r{b4Rse~bBWM`OG`xBpj)TiK@Pi4QW~z*G?j2HT`Q4n$F6!;+ETP58V?+QRB}1+^ZD_d^1w8a%YU)J_ah zu~ZqwJW!_I(?%)VI!Z6=K}jx#w-H@p?t9VT`2kZ<+k?cqWlf7yl(d8{Z79vGw9Bj) zA-15m#95F)dZH5q)&0#@DsNp6f}%DtF)TvbK4MI#_26YKmeoI&><@;O#CrvLQ;z&1 zEN{tthNp`|E70-)duN!jSVv06u)3SRx`#daSuak?LXMG~Cx3OUM;V{n+>Dw`(cuGS z+fr1g1cH3694@+4O$dQLWZfYmZR!#CcOji{^>=`A`coeC2yay3l68je(?x{weQ zA>opVC7GI-)Y+dThDg!#G_BsBL`*;VJa=ogo-DcG<%n~l&k~1(0N9i=@WcdzTBXLP z_SEu-1cOB5%fHFxZ1NC(hbpwTc7DI53oRqyxqSrb+I**lH9bCTNpAHC)Rh z3S8KQ+Y5vgDWX#oMXgC65N~+>O*b0C?;4tBvUP3R`&>Yz3CqoDKOK0<_Gi(U>6)B~ zne@vFw{%<(9OMS?PI21sbH$BTtzvO9O90=_K^O3xUF; z@d%xBndOAKPvE>s3#Y!3pSf4)^^xp){H=Xr44$r2Vk#8k@Q= z4x~2cL;PCS#lfP*CdTT)2bB)Xrv7DCL@&R=CMJIJfDQpK8kWnr8`I-R3CS_4FzqA& z!-PmUK=;tYvZE*yjSocYy~_p77{2(kk#taVdu_$50@qK_tXtr};&vGxDI39!PwgY2 z;O$fWLPI<-bvD4S`ZQLu74v*u2>WKQ5QyBzBF<9=1832j%qRo`f|3dXw(~xnacuAH z32@{evX-F4HV7atg}5<#9lG*a=ZrZGm$jFjp4vrO*g$gh$+yY04QI06Gb|d#V!>>3 z=Wr3x<${g`P=CJKinir4;uPdS*%cm@YB)u(sB!*MchC!HIv!Lh{E2KwX%pn+yA^|2hL2v|t5a5N-wDBzl}n5LWY9!9rw56adWRNpCGqyAJOu zw2u)*t|yfejZ$fs)-t!#>Xu32y#k-XROoCQk-J&fR7DksCfQV~Zz%RDMy%Ki+o}3& zi%z_kpw9ExNC$1``(NqPXYSBvNRaM5m(=)OT$W%OfT_?KaC06if$B`w>WmPm;GoP* zsM{ZpdLcg+*F)xSyYK^=)n+n7kuSu;ATooe)>|aD3+`10uDD5BUuIjV`pGs~R~xM^ z%Txf(_1as?VE%&0_sI)jvS47=5OG)Q)#^=f+} zK#pT1(jMXB3(vkZmAdhlV07pl=eJ?IVYWO7KXkl#E|Oz$w*^$mb`ED{dwJ-bFk# z_N})Fl9xTFVawaaK3e3;iG*Bf8EpY&^I4q@w#!8^j+!%O5#MlgCL3m}*j1|{b`--+ z9sritrl8}z}*|oNtoU zp|8wa?Nqo?_UaW=i@{~+y8r7OybR1-nSo+JR$>Y+F}!u&*C9+(tT7ntzwc9P;oJv` zjMbfpOSO4po$-KX@uruoH~l^gw)F#%JDcKk{wN` zf?BiZ=&V^r2Ir-0hH{I@L=%R-4%L6Mw7c$%cPGk09Chel@_TP;mdO_m|@}54U1U0r>5SGVXjNl=&V^} zJ6>DmjAS^y%}b+;u=hszv53=dw(0x$s<{<`0MG=VAaA?{u4sf)kK)&R(2N1M(^i0% z;hhFeyV6w?dt1X9^&ENES~?8IePf_d5XpPdL(i=L#+VD^g)^p$MJatG!Wy`6 z5E;%T_+WgScu3`0j$1O!C+hEgQ+fw&t4rZdUzkzY?b9k9ri-Q1y`laZ7$#{I0;4XW8 zPock~L0j#&7C?2t|L*};#|{CV&I_E`@(AT~cx}`IH7SlV| z;px9H{ZIbr1T5P z4Ij1~k60d~q!sA;t&>xeR=DLAHsR4I`cbVIOIjQPP6<4Oca#w4x;VBl0g)YqGxuHR=(o|_m7Q#oKtF9wZF#do#ISOp zzNQP9a>vSNWV9`sEsY*XVu@V^QC(WV4zJMZr1|vRb#G%lYtzVQ>-F^?RQ4*#8c;qEkVZ-bQ@M?Ar{)IuQ0@3d<>56&P@ z9FS#)v5u@B&hg_(R1}%~JPz`4(SmZHUm4NvtD~4phJNkVN^=H1V>2t{Je(RS(m_-k z$`m8ocV(`Kih>lbB^rhj2sz{9s7*e>nAFVYvQNOM@&}IB?6li)g#2=S?c=PPCWL== zudG9uK99>M@M4HdQ;~n|^aV|&7Z>2pya8Twt4rv}s!)AYH9C_#f{>dH@6NDzB0t)U z>P!>QkROBm^wLi-v731r2eIlBNf&o6{^B6}toA#8bC5bdrvM7pzBKiWq{et8cxW-O zg%6HQMrN0Ph4pH8^>qzA@xNdTPG@#0_aPcsO}qd7?+et+xRlr#K72WHfWi67f@OE5 zbD9hf@mDU(OA9@Id^QC&8g{m>P~6YP>Z*+KQ;|P&E-@H<+mo@zNfv!;9)M@~yzwHbch*iQL|4lZyDY%=#HT zqzWUIE8mWhuP&CNs~ej!glVBVCfIjnL{}M|0 zc=N@lJF;p2ldZ0)rS)WD&4nH0|8<;n0tPiT&}@IR&9;G;Nyx7Vnip`n&#PbY`V60T z{Nc*Yd8NF2daQl*b1!rDZm)U_OXqwDfNMwt>up?)E5TdDM71cLICy`eI3t%? zjvPf10={~D?B^)>rHYRo^dK?p6SV9MAT18fFacTPaJz7n?cJ9Ebsoy-w{B%meyzN} zR}N@tdKfbwic|bL9TF`3ka_Y;MMGXRKND{O>9eZORQu`=)F#)WwqE$j_jb_d)HVM~(1k9d7?ou4!;bkP zR#xkx`B0z>!yImmUJhKNc>VNN(LMxYhnlmG6-hz2)YK~wSPs1&b337Sj5`t(hm>PAbjU}qJ%kb2Q&k8ktGn7X9_R=5 za(9@mHGTpf-dGXx(!OB#+y)vZk`cHToMFqxd@h$ZIQWm)t104ODligK^G%Ma-pgWR z?1S$+DDi6?Inkn$=ohgi9ojBAdAh7}<^EKxtMi%=={q>OUBy5x>) zi{1z_izG8Qnb!g**(npGYO*H98Ta(n^}np{YnpOGxKudSCkPW4X%4c?9cO ziTFtf?Gm|%hH$a}?6$wxF`upNxiMAGlhN*CpLgj!xnFP|qCH_ABsU^C--d?861Uq< zJ5cU2BN!4OuhAI#p*OThAZ}HWBC5(*s<|MgC-gf;NvaTcM021{NpIi6m#*Mk{;VY% zs95Cr6n}Hv!Q1ONXEyGx8#DgmM0JAS=MV4AYrEjlU}k#lzJmu7#cU3c*T4xv6v}F5$-Ng;}1wNd4*on9*VIG9wzE1`Tnh}y5=4+Oo6~E zjtNzRV!L;KvBDf6s2T&|g0!LJ^IY<-2w0E>M>QMb^~5#Y)B$|0^To-2EFJ=i*FvfB zU|G`z)dr`Tt*75TeC`2L8oCefK17>73n~Sapw&+NcI6F zQyRxWyvU}8U=A#;6)--zM@5pKY3LUk3ixUWLG~c_STWO+!L-#h`fekwm5rSl)u)AhEZW`hUR2Q9HsDkKx`Z(P*siB+=Uz-b9<}73QiTb) zQRSTGC>%9+1VyxkuReFIvu258k*_|%^~%c3;mA(*T4M;IQ>!pD*3V>HqXNZ9gF3CP z+-HJ7F+0&7EGwemc<;Gq`6>bB^r_();~)!xgvFmxScATR$o~+>zkGqep-GMe_%ykx znZ_!}#b2`Y2k;9Z@4UeP@CEyRy3#$k+BL#Y@=m3{--!AxDZIIi4Kz#H~6S6|T)4cWM0S`6liHRomy8701Oek64?sX16Sv0P$oVa!mzj(Lf#CjZ|AMx^4MN(FxnFCUJ^-p zMYd7cR7Z-f;4!pJmDBg97&#uKyJnojVI8eMRewOD4?LQ{-!PfwZY8L9NNCrYg^Jz` zk}v=>K+L~BD+Jk_1@voX9>C;sa$rqTy!Dl{BGhu*As9MTIYOIv%ibC~no(OgXgPC5<8&t4Y}==&2>zC-}EoHkT%?CJcvUi~HAg%z^zV=jl>yuXmAoM9?lG4;$MKT8eqPSZ(i=xF zNL+&Yr>c+nR+kd|t}*vIV=_etIYmQm=W9BuXU=o7&UsiSPN>iAK0@M^WUz{{Lur-1 z|D~TeXoLx+>utw5bIMI|zk4c)gN|%EvCSP9e4Z`?dJMqDg(4`|w$hz4W?%e?h4ZgR zid{A%6Z!472_~6Os`}GiJYTm%gaiavPghT-d8t|6(L+uJSPd?A>mWu?)(}X5buVlL zC>hRiaxwyARMxZM^!JgnzPoqZ1o&6c#&wR!bt!Ym$OeO9O>}^IRmh8;B~~K<6_HqF zjvjA!*fD|k?elK5Ur$c8bBx@arM5R$Lc&^CS!X<$**1W%`3$T*zeer_uj$$=zvrx? zn2NBn?4DMLxjupm?v=puLTW1`@;HBRL@{i1C zl>I=Q^v~MWBf~&0k=QdTTzr;d8~W&Zty5$8pj^9h(GU%WnV5Pu{h(82e_48MG<#}6 za}-3fc>otIh@QgQpEV^!gZp+(#t?8+N}Hx4uZG0K-YazAuUOWtJDs~Lykj8p+1TY0 zNk?wC{=fn2?dL5XxTHe^+6;(UrkxaU8aas8Bvfcq0pjUz5p*rrL(hNPk~PknQvG|8 zij6c3X%KpBoS&KPX6;RBXy3x@|8#Us{@XH{V9=9w8F4jJJ=g=485&IEOnaQT;;h5U zM(*HgmklUCo^ke`A^Lx--=?jOA~9Vz>G25t@6&~ zS}f^q$0axlTa(?R1MA}H3G`#K=+GUtc?U^#ZQ@~p$+}rEZM>OcBPi{zVlJUC3+xC1$)-zwK!r3^#@V^ zpQEmX0s1g=eTawvqZ9u_N_ua6vnxd|5rBQOY)xVv% z^;hd1+ zBkn)x>^5Lp*n>Hemp9772n$wOba%z=fI~}$y8XnyIg51R8!~&l_oZ)(oVNQ7P3Ih? zoYQ2-k=UM9cTJ3EWzoN@czFUAuV`C?;fR6=z=@OQ%OK)DEjL z^DYi}TWzEOkmbQx)ebTh2C(fmno1?CZdPVBn&==rd#me>QTaTSg@rdS1OONZK%;Df z;u`u8yufC&hA54_GCz4uT}Rf?US(m1zg&t77kH`R6S1Fm|ASoIt&Jvj(xyf0b#%{j zR38C96J=L37DYmVBG%4JaDPJa9mDi zBEd%NrH>_jQLZ?;DE=Z&vfAvYV0W&mUEsJZAyD8~7|#Fu^O&=>$6WPLlaTnNkb`e3 zlu`PWD-sdYayQHmzHEQa6on3p&;G&Go}}|V@By{b{_w)H!d~I7m+=S;fThgEoia7I z5rElTx4~#q^JyPHb&SpMe3g*IkSn>eQGIqpD3P>S{>kzi+gzL|{mNW8QbY3We-=_> zyg=v*sKU5eRiAcXLnDx0VbS@pY6_`^4xp*@d5Odgq!={TDtnOYi1ILm;d3%12Mq;^ zH^Qj?>bUcMinv-4VAl+rpqI*~;s-`Ejm#{-B^iEd=63|0Z%`%*5JEHBcKUfl(GM8$ zuQ{+r7K~=*@ljDj@FTAq%O6;&x45~@(p?`Dgz0-|)vF4BdFg~ctaJ6FmZ1ZOpm7_v zcUiqDjzqkuBi^fK!8VwlE?J`GlscSCgQRoh>sk-R&lv(eAt zLEEjdF@v}&RBr*LQb6y_HtIQXfmS?K9Zo&Lt0g3p41Xtc^Y4s2ZOm%P(NsQ#`Kd2B zoGZ6XHy1uc6936a8`KmWgfXmpor>0lkz!W_B`a$Dsybg2>qOd{e6KCj&uf?CH!C4s za-LRV6EjB0NfnLmDL6!CSWEW*g02HhUN9C5xe)ROSWnlBNR@?9VNbl8@zhJQ73}Dv zx{(lQL$I2wjHMRHM#2X1Z&pUl-KL&7U&1^P5Sa+46$4KgF+ZAyw8MoBKOO0B@F@XxBi?@Ah*F^2%T zgJT6evSi9iXdkAycTAq+WK|nT+WL5*8K;CH7WQv`gPoI_7r)LcRjE8nzgeeq*uge+ zmNa6hkgZ|4{7QD;_vkjJC{iq%RB2Blohdx+w!tqXWagvdi^sOv)+((W9x@_HAKnZk z=6ulM1KfW4SNDduUb(Es!~Ot(t7d@J*fEP~H9BGBA)!AgRH7C$0vOKceAt&rm<&jw zc;Np1oB_6)Bnxe0$IfzdPCr%WB$;fL8rUkwqaEzlxM)gyZvQ$r=;VhlyI{jTasX0G zJ2>0|1Qe;2Jb_kvH)!otBQ^QtmLv*s1Z7_pq9<;a$u@dFMaxhZ-ElOAG6&ik&x#t2AP1hM4($Ide!sz*Rx?G((7|^t0FJb`V4xIM@dB~}% zoScUxS?fR4ZDd;ZXsIc$-N$nzI%h|Lw-k`NDZV;6V|o=>2b27>J&SrFE{tp1DW%UX zEKFNdKBAwOEB|l2qA*q|h>5X7v4}K&PAXry`r>cXtl1(0!l5`LKGkAFhBZqzwM_?y z42g)^)D+eXT(@vBB~`BR*8_~y%KFZOw5r@zS3<&$(s%x`#BqL?Zpm>MNBL$_0u}7< zm-nsg&)J8cIKB1%u-@}EwMwIBUjuz`jIU;@G(m`o?vcrT_o`Io4pZq#%F6zqtboT{ zDNaEL|9*z64cW7;THoXL+u&g{qEj6VWo0(7)h4L#fb~F6S(5-3lm)NFftxu4-yb)3 z;k};L-JLTbJQiSo1aUD{cj~esaD|;tOSG2o!v6icL*m^$MVMlWc{Lb#$F1&%e>5c% z{85;RmW7<{U}FHn+AHO;V_GUl(qODDP11T;u9vXbbTRmHrUa3)Uz#c*y`Qdg6Ag~1 zVTc0?G-&qhgJ2tA{TChoR;|>b-Lco+bOXs5B>5{Oe(Xdrjh{geI@ctw`k zI$?sfKh^TRScEEoWIsbXx5+T#CunpWpQlri24mNqi;}9DtB!glR5QpdZQ?G zGJSh$zlO;-c528Kg!;H+y0O>1QOgLi$ zu3&A~`0yLSknbHd=;Fkx;juT+Pb!#oSO)KUmsQ}^Xg*?Pwhi~ugi@)zjx=00+me*; zBD0#&pl(&bUPaCGGy7f@T7l}j1Nb#7=*E8^(*1Lq$yJZJEnZ-(418k78@J;x94^Bp zV6+$+Q{vPUEd|RpdELBqmmBO}$}u%wqZ`}NDq@A*E=l#D+`6*+30a=?f^lbOE4uBf z7a<62A4(%oltQ0a$=k))JR5(7I z$^>;{yPI!!CVr<)b)v1jqMcFI3?kPFQJ{c0{ZbF+07nXtYi=Qn(reCSV0ElWg(Bjd zX5ROs`?tAWEff%&ClH{3;UJPI=;x{ZG!1|0#K{zcFzc@f2iPh?VpV;6x-dByVHvqi zuXpc2!I9*ypasszb{p2aC)C|_`!$MY@l7-qUxx@!k)}R>uyyTegH=t%i& zCuZC-YiNn_$ssG75`As=t5XF|)OYIJs@>&*L`aqREDo6&|$p7o%>orwj7lrshNNK zqjx*4h2=p45k3(#NUA>%`|MT%VO4{xV)j8|UYsiJ4ZsvKWH$ljg=xx>k&xv10Liq8 z3HYAb+AxnK>p+Qp&yiT`e4-ta@34G1q`sotHaYIlAY~l>@I{oDlo4Z&sJ$!0bfMdV zTF?yqFCu@F((ubIo|KA64+Y8%(W=LYY8811vy@~C;@o}U6yYus*Cap=j_`a(TQHb8 z>lxR{K8>SM+mmRcd*~ehl!^7xT&+tN=s;t4HYgJAm6dF9nwo^uuLqle$gCC~YAaQK zBEKjh5n5)K&vW6!AzzKao*Fkq*0ji8J_J7UMJbF|uszM@o0s6AZYo|$;G;E|$rL7Q z;C$^W9O~+vP(swCJV;cpGiJSg0qHAZI>e0)eGl?cOBPkU|ZNc$N{)@`IreHqZGJQ^lzIn>Z^h{#Gu_U_T9R%+kdBS+I^W-ULuX4rZ(W{L%Y+)EB;vM(=-sG=o^ z)1GO5Z)cLgOlABx7MWVf>&8d3vf?a6{>NA1YpzBKl>t`~*|7#JY7Tvxok71>Dw#A2 zD?KBnMu_|8ZUy7O+RmzN(dO$#n!>o>&?)N>F205{>UM^2;a@*_QHp313$&U-GEUbPCcUA(DYXNI0UdEk!o!(lA2Jp#DL3OG3&Fg$P)XV5r=X- zQfyOv$KU^?k%2NXv$+V9Mv<4!ynxB^p!_{-2%y#*AB_v9}m|wlS4$ zx0a_ZO#gARFnIA|&OotF_a$O$1X{Wp$oyp9(%tI#S}e$RQ|I-oS0L-^c{Lcpcr5^8 zhdeBhsxp4uc$^V6%|_JP?8Cq-)2HBp!ANO>X-Oc!E{~S9*JHA1^A>?;_Wl1Xvxh%4 zPR$8t0GfN2XE$;;A_^q}M=0W;;+sDNvRX%5SZ^naTDVL1A!tk&Dn3|=WWdxkFYIXG z&8W#f0Ox=q_hN!zV6|o9QIpu&?g?7qzo6b7^}b%)b?>beJ1MsxBdI`!5Igp<>5{E( z5jk}wKXjZX^Ke-7!WU^KC>ke*(Iz0EWQwarv6*Ij5K*tBOXTG%J(ush%T1j+??Y^z z6S|FsQ?$}5(i1C`m*7`)E*D6>&5_+iQ_*{ybX&hOM_=8?s(KtRQFwTGb7LX?CP>_H zfRl0B>41o?mDlK$Y=63kQO)fIOAG4*+7UJCWZET!@^jVew;<6*&(m9Pg#_y`6)C2` z(V(hV{m(kSEFG1(gl_BM);mI8X91FwGK4I5ci3Ep~p}}Ty-LsJEy(~8MezM zq+`@g$nw2b8HU7Tcx#_^j`7qC4N245!s8pjf~r@Vs9|ne@Ri=-Lk89f7&hEw`^=Zt zpc-CCYQUO(%F=wfP=@}&7i@i5VJYcD#d{_yzUxYtr3KZ0F6H{xQifQ{5^$W;Cy-yV zYzyO-RX*be1MzCBtqFVhF2kQ+&D}1%aERSMTtvSkQ{#~|ZjeB1w6}oPnkBN`Q)2Wv zjm>s2O$5|d7OJg&V6r-0^(G|zEs$s+6ey^T1}G?}dd0hYhFX3yg-AVn+;L%bMBV5_ zt`iqtMzxOVBDSI|u0ct+F3pmTq=ybiz8`$OI5tSrh#g2j)yuN7rLT+~K($=dl(y#c zA(rGL#Wm@YDmimMVb$ zLu|;Z`F=1pm_4v42LtM+fu=-s<_v*V4|#e03C6|ECXL=DfoF!-qzd1~@p47Ou)NTM z^+$Zrpz`oJ5ux+OV3pzDeSH_Fv^(@B+`^HI*-bu#=Hc_(CcyAL95-|2QaF%3{E&!b z0si*&;^kVfls(NCfPE(DM!9XH?cioEACB~~d0!u@U~X-)nf3RBd{Y%cf_(F~`K4LF zQF&S)L+-Rz?lt^%T_r0uxuI+RHF?T{waz@Q^5Es2*p{sS97D4mK8+axc;#@^J=p2W z;GfW76E+cGM#NiuGv*Tc#;hEv2;2L>FCb76D^3+ViVQ&PmdM+72JDUTAQ^wIm+3o-vSxc*8 zRb6n}5M$HnaT5FjZ|w)~+?oAjU{f>kjBb}RoGJ+kOYs-GZ94zMT#YFyxk-}s8aIRE zk3zGqblq%7jvIn;`@>eO#vXlGas?A&FAvhpU#IrayN4!k8{UX4z$*lSvQnV)lQXhE z=_yU9;7R1!vOLuaU%>i&0(wL84u^UIc#iBS_y-j0TCjaPw_+VNZEooit zzGtL#8QcOvBrS2pjr}?J{ZH0Ij3k-VeiG)K}CW0o!*ddaOR549%VwDUa+eXoai|2oah0L`eSN;LHK}Y zJj?`$zwN8iOJuyf-S!)DdxKbzba4!?fsIhVCU+CA}+8SS;w0SXmx7=ym>)P z<+9UhT5=H#rfLfYj(kY`ZFzWLJCu$Rw?aKui58y}H-RpNz1pI>Wk8}HcjKjGR#G)s zIN4J6t{eM$+d;XZF20T=zis)41R6k?+&=Yl;+}>AFX#023>$#J>#xq}D~?{;;j?*H zuA7luyJsjdP!#5{heZUk0dWC+5es=<6Uhnk+1+w!C0QarQAiW)yB>Zwmi^RD``0;S zidftS4xHp}ZHqex3QPw&FG}~ij{H;S!Z%Y{!RL$2v`Z3$!sBcWBI^}WhjiE3!hwQR zeIrEH4o(FX`p5`rjqGCmmJc|A_CR+Dh2!OscgVS#stxIRwK38;Oy-08R|Vj)k<$p{ z6iz_fiKc4B!f&VgS$G@ulP$`t<6gYq(3lhfYIq$`C8NG4exq6b$6b+ zmtF>e-zWrwH{HfJS%OBRm*$zYh*EAm(E1X9eakGEgUrJFFQr`=kJt0brJlpXU7%l*GIEnR|%&ZrU)t8kz+-@H~u5<^(Y30ESZd6fqV|ER*j0_#YbGo6T@N7Ka4VJ8#w zIHSUwhASX|CnPR~;iW{QZN9J*w}&S?3wYtW<@oDc0~LjhUyc*nGNkK} z*G9i>Kc2%&pSoM*7)G(mvuG(fBVirQTDIK2#!Fl#?p#+6C`F|)E77ELWe#GaV4XA* z!*`=$3G%)PWFGQOuq63Q>+(TGibX(Wr;3;jDsG+MJ~&P;>SuD7zPBX(y8{Er^yK7gKFfgGBg+b@E?ho<{y5s!ycoxOZ9V-lLE_y09bDO;&% z*g2v1`AU%y8dR!9vPJ1~SrFxbD{T}Qf#!)em+7?v{GYSWl^SrgsYJy`O*tRji z&8~@vdbMMS$>bh5-Yo|o?4YqmF@F{QdF96Olfd9PyGD`q@kch!4=reefo>niBk5JQ z%}Jj>ZAQ*9d_F8xk}oIH2UV}DP%M|-mX@CR)z7yZrg9HyIoG{oF2%9R-OW!{d)`Yt z)U>?%cVIovkTXKRD-Gz?Vz%cpx2E8yv8Gyw3G#>*4)hO?-)ly{z{*!TlKLriEG znChLOVM#a-tT7K%wB5 z5X7fhLz#^>R%4p7yQnecoU*QCrj>%CY#?77kvxF{^x>&u3i>6pNrO*qiJ<21y&zv) zj!GDE`8K6$K7MJh_b0y)z~b>kvyp0$?P?F*?Y)*@v@fWX4UL7T<$+)x715HEYv8>- zqP2JhXa{+Z)MgRkbM-Ksoh8V2$_^)ZU5_R&wD;DKUHnN;m#Z^M4KbL{e5cC%0VR=; zWYx@-FzQ|Q244WIlZV&c066p}rvni>9MN(A!c0TKWu5F13vz+yu_MKYEj;jOY82W- zy)i{o3f{UYzMIaJH1Je$aBi0;k|M>af7R$J5JxTzVz=9){Qv%}|Cumz)9Q=oL=tAnjL>NEv(_n;jK;arg+>0<3RvVBO;dHw7mx?HllbP{Y=V zDZDi>!Q%Naw}xJc+~7o@l#un?O!e1KVLX&!A4hRPDd4aL)By1J9UX5n?%AHV8e*FJ zC>5Ku6U?nKz`DK^TKF7ruv>ZyF?xyTvCAW@LmlB?Y#Q#~p8XCPx%z=k1_xKur7vN+8ZpM?&V* z>m=NBUp z*&xp3=?GBF@3E;r(Ix%ET^A~*-2__YM9?rQ#T!|8v5+)@^)7(^{gTIdYmu0U%`yLq1(G?rT8guf(5#aUoQ2|o1X-K}zR-?22;!Z967uvskJu@%7HDRT z%$s+;uQLZGZpE~5oyeU0gZ+Q;s@Q)E38u-4&Q_Q6jER%aD2Ns<0z*m{Ba%@ANjQcp zBhmdwk(dQ{{wf=SGi&$=yA^lg2&90+4E$3{hFculp0G)zj8wPoF^yWig5*5+6IpPh7W=lHmtn zx+I0r-6Y#V=21G6bGtKeJ@o}!?YU;zKdX`14jl3 z5SO{KU;*tY&RC4lp!Gl7Z2EZ=kU5-9JoHy5Wtadabo)N**KI$EeFw+~c>;I)@Qp^ms%Tq7atn z%uPeps`~gQPbzL@?c>mlHdPNsS1VOGHYbBalhzDnL?wYBpclFH3^#7c#B+ThIxL@S zGARC8(3#V|c$|>fzL$wpC0%TTx-3}3xrZ6Ejkj!dJ9$Ev9Vd|L)_BbJdd5Ca)6e!d z@SXrXl|4<^^4-jfo3FS1zEA-Cl=D6Ud`|5%^D55V35$y8os}dK+!KVZ4>reDwjper zY-g?vZI-#}+|{B0BnV)NYelQq1=;lLTg46#TFHE3gp7z^7p4V?Jgg7(sOHSPecouq zyUKFbzCoVYcNPA?sFLK5VEFG}?L@s>4JsYjN+zNqoiY}SKcV;40|j2q5nISLW|@e> z2R+8bLS&@P<{ZgY!JnCMMJ?fiLse1gU8?iC0o(WCaEv|UH{t4NWU5-q2kXzCRIx`4 z5PU3z!=GI+UeaR9$+NZPd}eJ%pz0|H$my}ApKxt9kEGb0HG9etLU_I%0i}M%Hjt$j zeglG4QLtuX&W9>y|CZ#5I0~4*i-(smVxipw$^A871dIVeL0=0~|9*ITgC=lx)a#_F zb>b&^-Lk=!V=cY89@mt2Ml`ktw@oB*C^1$2XwZZuKEsP5Ql?|9UwBRv&Fb5$+At>0 zdY+Y*Nw|~HpRxb;j+%5Rd>p`t>Fp_tc&cvIxZ>+FRbCC*zE+f!D3H)wW1yZz6ij>! za~FK1>bk*~v4s^aVbg}ZF#Vgl@i`ec!6Tb=h1A7p&^pG|#roK^KA3A%J&=#=2K&63 zpOm}Kr0xjtJjXaIklbR?|HuTOM5c7P;V(!F{I&GgEQ4*%3_%c~7y`~w%%BF_bMWXM>Jko`%Kd$|5;Ai|;usGzi_%!ME~mnN+X%%ByF(2uwv8GAMimQJh^ zHkCCAVCx!F;3&tXS(b(fLOLQ4O{8t9dYZKOI`(!j=cb#d0%$19o%|12!bOan@AJL! zk{H)9QGsK@p*xKr+&G_mDJ2H#Hq1E0NPGKtGt@uzXfoKS^yr3%D^qEHrFwJtfC(S)A2iP)^$B^U&b3{&TAcFA96;h>!M}_1b&d)uYQ; z#?38jH^Zb?Es5cdV#&Fx&!TGHHeb`{>kWScdd9ER1x|9AjE>!t-g{)Ue*Yn@S)WGpa)d~7oCX5}IM=d_=D;7<_Eyu_q0hx4&r%vyDenyZ zThVUdJjA!6?>D`>U=ZQQPXo{b--(B^?uZN&BFz@*66TITC5g5;GTKWs80?N|ECvB> za_M?MLyfFjJV`)O91)DtIzdaqZx(NAB2%3g&R7SF-*h+Vro3{dP+wc$f2E;{IHAg8 zv}pl8)g$~e7MCKZ3TrEWpQFlU18QAtzJgDjSi5Di{+uyIaP?P8Z;JQ(ym0b$L}!_^ z+-)6fIBk8J*kcmo!uY-y7V%wfAef`aXLFQ!mB>@j#FcOWZi6A*KZ~|Sy!AZk!dfl-b!i6_Wy_9+MzM1prbHv3;UVDFcq3sU(12`2fV3RKLQahD4i{1{Ehp7J(&DJBE zbtVMDk4Hkj-@5_GJ1tNeDE-!)9xaQd(hy+hx>*IAA4D0LKy}W|J2CHIHEQtvwe1hb)WphnVl;YlhcWGx zjJnxf*#+=NcBFsonoBZD_A~L7K)R-Bv!TOfYI!a&Z5!HsI&a?HrzJKTbg~pw$&#{7 z&Tb|$7zajee=ydJYmJdg&yO909Nr}kYbAVdIE8x($!o9dlpa;vu`r`sn=aPTcI*hX z==6@DPuNpj49S6*~VnpvA-zeM6z2UefShe#fvE1hoy~=yX3Z? z@E3+=@o^OTwGk3J=d+@%%Ouga{uTR^d@!tx2{cF-_AodU!D?a1~YxCSLP;7`;9kpOA!QXp&+6gA2q9co-o&N zeYd#aB5z3v2V9KQ)mmRP)v%uPH06rXs&xaYaXzxG*#FhK!Tx+a|aZHC2f{s zBx^d0a2N|Z4)3>X*{l>{RRJoW4}%-S^U4kg*KfA79VkqDc`586oV*Ct^-{$sV#Zd2 zrH20QutvmWPj;4Xr{9#1!GjJScN>EvIW30~POi zKi6DRz0j#F&sUE%{^bMqM^d&1&C95}2u2HTk)lakqJ~}K;H@f@)(`xFnR5X}6@T^; zl^r~a_~|OkkT#3W{a#&za^xU8PoeEYImfu zwza@Q0_aDu7ql}Wz_>s8_Z2c)Ct{LG@1og@fAZxT62CC)i=DHyH~WjEpl#YU26rz|f#2*$(l} z$5-4{=IoL2^}CD;rNB5r+(><`1rOce-NT{r7gRWP?ybwZV=jo=Aif^@bjVMaZra+p z@i@&)(8by84MQ~nI7gcwfakc{<_V;@Dx|?knL65Cv$))1P~Nl7rJG(m0yI6_@Dypg z;Nynz=5axIH?(UG<-xTOL!c=wZ^;i?k4!@A_PyEvlYG$r3doaRW8Oe2#}vqjYNKdG z+JMpWDIHB{mhar`BHL~ZG(ejW*_ySiBtx(~ffi`6oyG=>Y@r3IATo;C34LE`{%>XG zl{(hwKRc%I;C>!eW==*$cf8B}+BP*7ih8mDTfC2nLdbB`PvF(StAGMSCQY5mXH3x~ zIoU>SdDdMB6LSFosP8G68m?aj49HrSL3@X0T@Rz}5~kksK`JQUk;jm!PKzMPRnFp) z1P~^eG6*f8c_xV@qF?c|#K|W0_!4B`RQnJpY(RFahgSE!W&NnjTh0)2GQ`sF1w6=# zuJ4oZRXXY|A17jFD=tXqW?=mIZNG_QP4OcCWX?N7ZmX3r9b0=X!`o=sFO+R8Em~J3 z{tXttNiFW{>Q*p$QJVu+Sh%~6;TSNiW;$gB#rlWuSe?KgG{jB(Z@ zd~MYDEGwxtYMw4! zKPP`F3+NGFv>yl8x&w^1mk5^hKH0!=M$@`AtbUU;^3zQ>W8)d*)|562LcuI5 z#$EqTuZrEp9%?n&=VRL8KS_wt(7Z@)r@| zq_Jz+*Rxu0d%V7abKST7s3h#tOjmBGHJxJPec8%W7%OV8>Rr>aO41nxzIDdP zv&>NAxOHq(DTc-aTqeDU<=}h?hAdpU z6n5ITB+_^Ae#(BVgZWViRcAuD*_hsaVAGu-%lccbxiXD#OBKoItdlBRZ2paR;IRY2%@y>S#-Gj7*8^as~6-u%)F}j4g^SLVt;0zr)i|V zb2vM5xB^^XSC|?48gv%2BF;V|F;-?aD=n(c@L^=l_xfChL)d34%4jz6 zV`?Wnc1y&~98_~B79;B5f?-)A>+@WhV`vNFA4Bgp>o+XtC%}aW$dUp21ORmXa5aC_ zg4aw^_%DVZXCAhOjqGTE)sHf?>;KzITs)HC=!-eBn~S`(sB_JiLF4#7)Bd@`LpDA{ zrmBxpR(!UggES6~7h6GY?gXX6Tum!Kn(6c{wV%RF6)?rZ=%ZB=Jk~I?c@*r`b!r*S zYSoGpox_V#GndW`UGllT1rkw`+c4rYLZG-stEdS%RX=}4orlkUDv~1h-ZXr^v3!66 zCks_Um?8;v0^226wG#Lrg6-(M$=2<@EYgHk*2g=NWy;%rU3^37Y88?mR@FnM9^dhm zhXc(n?C5`Lj_mL8IqW52(fZ=CE=pHJT=Gs!K6+VNK2r^Aa?l^fGkbkB3&8LC6iC2E zT#!W?Y@w?ZPGxcItgB=qBEP>_W`8|Y3gc7;U+7q=SLm!u*>UKu&7+F}V;=%V z*{0KJFi~(k|9Xx1S!GRRSNWNB#c}ZxP>*vlU{b%~{l-yNf)-v!G_|Z`U)Imh$cGdM zjW%zPE(opRp=F`WVMl-EZ%>isOzSrORLkt2HInfB?26(I5DCB0Y4_WLXT43W+UMR@ zi~$^JL9dh&UxcxTw4LG-Z~>MM<i2hIGt;XMBIcd9XJ=}>1p%yDzTm={)fUstko%IbLE{?4Il4GMMtqeirsNm zXX(T^mg_lB{iqR1-Ff6am7XYouD1eA5~$ODimt=(2Fca^c#wz~Adi#L&V}(VcodQC z>uodrmdtu&415wEI^r$b!2Rz$uS*^i0Zq$ME_|?WpxMc}l5P0&uC~Bc+s4)zJ0qv4 zG?Kq3AIOwXzR03^OHI$2acYyo)`;g7$D}B)=hY3)FbG&+zVMuTyXknB=zT`ML^?F2 zP_QKiRF=6~Gqd_NMlCwUaQTZ(%>)7RV?)0*TJK{B0;nuGSyZ-nv&wWyNLkET8PmkR zX>vACmpUHul|PZ4P#GP=A?l!>WL-l=nY6`Ce}szLnZUYyv28(~OiVg=POYBjqru0Z zdNhIRy@c)+n|Fd2ruV8$Qx{ZxiiC#8d0J&l&~;0j`AyPpI#ju)lQFla3j9TG8x46W zeR$kNy`x;STF=e=K)v>CbYLc+_3D!*yH-#<%B|<(p@G3$LTp4(vE@t;W)a+^vI?WK z?=6&&C2mcr6aw66WtH|%M;LmfmaEe#*SjX71jbKx7r4+q?%CjMZ_yWzeO}MC?YfHj za}!icR!tatP@N?xLJk>HRT;F;zb#Z%*+HK8>%D@1ZxJr7oLcdiM=3+{bWzvacc6^S zn1W?Po4&TIJwp9V6#7MshO5ry-g*95l_3};kD&ab;% zOpqwXi1Yebsjj~$NX3RZv>c$|V2+@0fT%#wP$i1YXmL8~>!SKK%)A-h#c551zwAy; zA?5EkWAHdoK6bOgzXCaF`fH+{@knGGEAR;Jx0HB-z-; zWJSmo^f5|C1NTy@Zhh>vQ(?PAEga*@9EP|5#839mCP8AbgTH@b3$B*7pw;>L2&%c> zvul!g6qM~h>au0ELJkYP}4u3F8M=QbLhwa-fy6Q|65C&>y{J zUAghpmYfyDZIKYV1@M0-k(*nVcFVb(VEY~S9Y*Tr;AOElTrMl6gw8go;%XM1GrK!s z;O-Mo&|LMuj#lh8*Zi8js6T>V1ZmH^7j=$+|IbP*2{{sC(JO=2tTH8xCDAD~oaDAs zEG$t*?4Jg~+M4N5azc~V^GDi0Q@GzXF8LDw$jIgfG1{m@51GO=pwAD_lXB3ZCO{E{ zj0E^4R=IDso_UhrdqXYpWd}&$I^YXwKW5sneyyM`+HN0o@i}L!lTi#^B-VC>iZLN= zG^h`!Ms9Dv2^G}AHFKWFf}V7I1!(T#Mo`etur}lhkHbE88v_aXZRJUrQjW>wZG??l zjB>~i1N}E6r!sNci? z*jsUMu{?fqErJQWf;Bie2*PmhfD$w8#dt7u@Zj@v7Zy`R>vg33l&vJiH?SN2hwue1 zdI)sb8Y~IDls^07b5LVid!KEBq~jFkT;whRH!P+?4l1v}aj5ZHsAjw*Mtv*#8mC3F z%I*1TWxA}oEJ0o$1VayB5`SYLOjK6W^(b}S9PH5R#}EVwvVaP}{Bd4xKkxumpevJ%jq`I9}*fQSn$&9U$$A_`qu z8;fGH-MUGEM>HVEJ3*F%o4_AThjg4>_dnV-7<2Xin{UCnzo@n)hftJ9S zaqW~htjh~O{eckr9`AaZoUJ-@73O=Jv~kQ{kmXGZMp1y5KGf2YToKQF{Sesfl!7(6 zTId>UQtcux5pC+4cfNCo#Ym; zjx21F6PAtcW>MWq0{yJuy(hJve}rA&7+7D8vMo?jp=!yw)vXSAdoqLmfYvpoQd$Av zXPhMV>`aQMDRX-FJYE1^vUb#BU{k5Hbc&oFQ@?6%eVUVH}5^9`u!u!|zf z;lkDxja0517bED@cp|}iw>_s_Ygma1L6C=!e4uEAOKUKDrf}IxuBGfXzo{F8MireK zt}1F&rEv1hY@jl?s@~Hx-+nV$Lt>?V9$9AJioLXHgH(0Pfx|)Hr4qTep_~3{E<{Ge zPi{)Wmx`QE= zuiVbouTAu@C4dD{BdTe0_F}Lt0%|cyr|X75DaX zM%Au9+p#9NUOW9YQIj3l=IpjBL3j1~eGegIK#2-HV)CQ6!I;mY(U-N`RjZAL9&s=| zuvsxPj=5ogYOHzj6SP%&r;GAHQhNW$A1?sRQoJeoM&04M90jAlCYR}$@a4v&UgD0G z8n}0@bysCXcNMUTl3su?e+Z8LhS2ET&W4xc{3O8tg=BsJO-s;@Yjhk|uq$-2_!DUA z5s1RE!Twa;qQG5jfdVvCWWWsS93+z=rMWrwy1(m$OxmX2Ax{5CWj*jGJv?s>ip?7r zja?=A0j@jI-1v?Wn+z#|M2$GZ8}tr$geppf5?j+k+EaeLF)(+JjPInJtC&dpJ0&7J zIj9z5i{e)!a}ZfXlLUuhfBTcE!pP)ipi$Mm47jd)i~-&IqUt?=gZw;64_o$eW01V&ZfnT(jAnn#xJmfG8ZXef?b>bnG}iP*^Pi^TftON`c3S^zTFWZ zx46mIM!J_r5L~~-8xeCY&KEyH-KlCYKY>ia6<%NI?-B-VnfHF5d%?~|E|dtCfy|$q zk6o#!kx_J-YY=l>pk;`YXPD#oYzzxpe8qS2h1VEU3- zj}Gb!Z9k;<2PbIVRtgjt_fjj(=pGItncm_|2@Gf4+tR~ewQiuKxM7$711!Ah-)SqM ze!^x07=AeCQ{OwLI_$?AfNVy@t4e{ciK^ae+*Oi`0jU>9G_`a-CufvGBq(JZ*06hd zHonQnWiLr)MBHC*$gty$u7g*a4`g!D?$FD#=^b?MQouJbC`-Tp{rpWEVzD3 zVB5$h1nEwyi3a*JH)&K!t6kiU2qKH~W|;{KQ1fUJ?Bv*s=2jQWfPkVaQU`1;9MQa@ z_(HB6IR(`sZ0od&Eif;tydhfbqwYsT2P;s-%gCDJsdG&wmxknbh|;1R-tvVoe95b^ z@O%))5Zw$Yri-p{xGHpTXb+JerX%;vi5>u6ZA%$NekK*ia>tTmx7DNl!DG}p8x8a_ z{HWB~6(&%{)(~i7`@n1}7=Y4WPl}JS&Z-2qs9(~wsW+{TyVL<2ql+N*>8r#d#2Gt0TfYpF zPzwZieEW7n=Ulx2K>2y`+>J@T(pbYSOdrI#N<3Q5n-QTM5!}^n$%&}|ZMT}4H`3sp zfI)i$0^HuZK4gv4krNvCqjy{kFb%qL*$%gX<@tC`s2`2-K&w~Zo=A&&(paHopRuSGe?1D% z^B8ChuM*(mcjn^=!-d;j+Hgq%yl?aWQhCn1Fu3QOk4s{{d-hNl>xxdmHZ3wD(^{FS zY1A#8SH;gMJQ5&9L=L~|Hq>3F>U3brm$+hTANRLrMe zlGnhcQdU-oqO@0E{>4X+zMo!!Id{t3QR}LO!qAKPby-dm_48=(m{3DqI#uO3xsYFY zf6!I|{fAB=z3b{G%NMoB#w&IK&I;;eOBF)i1JI9Q7<7QUz(Bn;odPG;0S7-M6roU; z%f8i=*0K5ayGAQP;RO3TeXdB6q3i4%jS+4ygkp1;_skMqq(v*tlOLLT0$pt0cBcWR?G1D? zzf(pgD%y#+SSBJfws)v3C;^+s%-Ya?6?WaFmY`Bk{U6I#U^SeUWXj@hdXkSvDf*8u z0eA(5q2hG(0uV+LgSfn+G<^zd7#pnTpCw@(9r9K~#hT)?g$|jxW=Nh0AzZ_RhFk1U zZO)fKt4Q4+4q3g&MudnTZmBOzVKX74_q|f!ReuH&!k=H_9G}2AjS-`WEI?={^ZDRn z-LK<0cW^35wYoC2L;%iHSZOF(z=Vz_?gWWOa~0?7JSZh+@@9X>9u}kg7G8rh2ODK( z?2|MwxxQGjed+8f8WtXxq}8InjVD{kh8Tb>YNeIiB`=NPL6!}@X=@O)RQLo5E{TZi z;D2Ws_hPKFP{d{XqDg89>%adLXe8{__HctGMgr)u>Px;bxvHqO*XppBwGhTMl#}{3(|S z)Y+JYR?XMCUc$SiL!8{ib|iyrIZ=#{WyfWD!+wZ^z{@{g9|`oBBU~gh?&wF&3LU=$ zSHrY3tGl2G!sj>va{T$h1DV$4l^>W{=~2lyc{xv<$}wll?=@IZ&&9bnKFEZrm7pa& z6IM3E;wWm?m7|iWV9>-W2TYjcJN>Wq;L$G977OPSQK|WdMs1D0${wp6cXduG)s1po zb%`jcpXmiq_d^>NvAQ>U%EM~SCy538RSBdX)`jl#m4=V1!HQo{M-jsLZXy~SE~P{BPiarKb5%IN@({|zbdxQiR}3Us)xNmx z))g-VWq8Fjh;cv@z5e^sz$>c@yItOLW^vagR&^*EM%|>i0G+o%Ekdktu^2h!j%)d7 z;+Gv5?GmFchQ%GP9`L0RB=CyRJuKgtm#^DG4>}!a7de~Q05sw|ocf3Pg*ti{R?|iL zX;ksU5oz#2TYbPvfLX=h=!>jdq}RnUSq*If)#G&I7Kd1*?kc4A(5WR!Yz?ntHvkX|!jJc-`9@av_=L6ER?3M_V9)6QAMxU2cwo4uDU85r@AagC zh#{dmv9y+R9Q(w#T%~gu$wy8TnG>{4L1K{mO3PcMFr86PW0XF#eeIvO={J3|MT0GA z($(u7x}^6jD^wVN9mjU1d#L(`(fa0Gh=aV;cHUBIzc4E#0GdO%Op%JBp%en#psB)6 zQt#26oqpGGtb(P%S))%-=sdn-(Hhfpn0LhWR0a?rzF$58otNLZg5t=@O1!Iyh~+l4 zEFVp>mH!&pCWJxlnhDL>xm+Wakb^L2o*dubY#*qckYp>1=EO!_giPU<)?Um7d7vZykM4u!bX+Z7;a(;3N7M0I)dSTmvhH=@i5erepddaH6V|lsjIp& z^_}HoUyluN*q&(}@yg#9F(jgA9ei0w60IVsR8(Sqv|C1G1-adgB&wB`x;?fpY`GSv zIs6nm7^W^V)B%sDnS??~*-)MR?RbS(X-o;q&2qV!c^dudDKHX&lXUgkW(o*gLkS_b zFQR8HX7!y*ONkZ_tE%-yDnb+_ZVH99kRBAjep?IAp#zlqIuyra<7R3#poV=j zWwjH_d}u_22;hf|!QsRiXTrb2b<7|i`P9f^pYCPf=V%Tw?{O@2R79LugWiN%@d5o9 z$OclUtXjpPflHD|+ykn2C=u>UfIzQ5^qvDQ$e;{_3z& zhnpc~?bd+MQ87DYa#$7AMQVLYkLBEqbJI1T98sAwQVDySA(urQbz3&p9PA+S0X5dV zO%;XoWkV&Br}YPMNdOr&nfrPvF!-=b{;5hhh)!A+AdK~#P@I^ne%)-PSuH-=qfLit zwZdU+G9y?WZx?V?@BTnuO31O<`oa1e6+r$SGpReRLe$&7!L1DP957kw zc7(g1$o{*4dN8<^_qX?jJxKH^7{z1>9q}JXH$a^3$%Ab{fJ}N@fZb&cYJ3z&4LuDx zhE;bn8r+*S4h_66ov4>Y2oBp2*T`k7=;a8k-k#Ll{>85VW{WTev%&>!vB$OjjTi_W zXzyFqZk^_Yb2oKtk^nLbQVhQUy_U+TcloolMuCDX=o8}E zok5(t!uy}v+dg6kB0L5xhR`djL&f8FUDS&xq`(9uG%h~r?j}|Y=A<)%Zk@6UGQT-u ze4AIxH!XZ>C2qAjbe3*1G@ui`VRTtjmJj)nG;~V-)!FT$=4zrsJ#LSO;0Ky;R+5FW zk}g>;wmhGclrsk%lByp>wf8bql@;W4?ZEX9s99DbSk`S!hJ+keH}8-&33>Wm|E(0Y z<|Bo8-3j7^3>+>NYQ~y!wd+!y8W=2!m|CF(&*umRX*@&WM!Uy!+?0wdoBTR7B8x4v zO2bf*e>)od#8`i(f~j{3M?vwi|XEFa*PI1gKH0HV6GDoR#V?NLD10-Ds9Ke)* zX2z#N>=A#6c|;O9awcIBNNQPhxapT+AL2wb&g;L3!RU$avH$HER|f0VrB498l169H z-gCDPuldzch*=F}S%OTQpf3lzo?3ZiKNFcGl+kK=+*h~1CHp$P_N8Yaoj4S3)JZsR zamueuZS8H1Zv+R_zRJVmXc-L5{Hnt~BUb1lo5@XtS9eLXaD|5jFm&dU(lscr!hH8*4G-|2qLVW@EmsoS;Ny>D+ty9&zgoPfgd2ZUFCwn`F?NCC^NorW+m8gwjmk%kGz%soiN!7Fx^O@n9*M~zNHWpDJy}7PkRq;5lhkj3f zNXM(r`q=n(b9j>K)D=Oo9PwQB(zb>rh68;?@+1_pZ^t?+Cpb9jjg@ zrda<32m5t|sg_)UyjC95&c6;E+9H))q#1mQQ8(R5Wbv7-Q-L0l^WpH7fdU{}rPVo{ z-TlHS5m8B{UzvDL-vkQgWV0FlLeeEFWpq}GMU(GiR+}*|xl3J+n0AqUI!7#HkrgLZ z39S&5Kyf8Z-r)aJp#6OQL+ohrAPkTn1@$mlq)kqeci~#OVUDG)Xo7STgNsFA)XLFB zj7t29H_D2+w`ty$BJC3u;HQqYP2QE%K{|40iApyk1qx{hzpztCC5sU=yMa#CVKs+| z0^fcitj^%b)0Rv~Qyw{-tb}sLvLzDEcZ7P3fhOn6M-98)i47YEqUb85Z1e!?yhzES zN55v)*S`@R$|!)ntaDBsFHJVQ*L2N?!%H9y!jRAIe;p8ZC6(Z^R`)XVMJ3D}T5O^? zF292F#b&;qCU_KiryS&CxmXTEE2KdJ!Azq*hkLZ#BIG{O(*zUWg}Anh0Y2ZRjg|`K zxm}MMsQugFl$7`Us0xA_qwH2+OwR~l(~Mzue7?wT1*Enhk*@g^I(O#pc&o8Xh*VB| zw)A>r*q;_-O%&or6!mKy(%oDWHF&kdRANCT7iT}S#)vg#LImMwLuC~s;{DC9aquVv z^?A4#;p41&$sR>j^QXgO&m1DVpH_t030viz0Ny~P(bqqL zmpk1xv!ynsPyGLeOeWP*q4g4HD4ox-2-!~n?JspyG*0&sV@F@we-k%r<-imaaT!i| z<^i_?o^iyAj0-JZJaCj3IO-mOrV{O%t?!sk8$6~A)!p)cJ}Yon7vJKV+7fo+ zVV>&dgASq_U8>rJjGZzbPX&45UU{h22wM2Xw?v{i5I(231O*SAI?N)5JvNbPM@W-N>sDP}30~tFOavjx%Zr z{K;)zM7UnGiB82gA4CHyA2TRdPrgYs<^ri4`0Vh!C^^Av3DsuYsHg+P3-xj7N`BqM-t(0~!RnIdTw46%zPyJBf;mKEZ%nYhV!++tAkR4?{F=o4DBEB6_ z#>z$9QjL9rC2{P;G3y&QpxONAEezj%y;mOe@3isFAT-K%F(yhJo2BFt;}SN62+`3^ z;1u&-;8+NXr_gpWvb3ArY!;Vtwl`~+I_-ZW%|2I;Tc%6{rL?WFZA}_v%&2hGQD1zO zv1f;w>H#3ZP}m8)tyi1=UO-GydCxL%4!4YcSZ;kuu%DtIK}+_)OU~DLYZW2z?R@?c zq|W{2#Zy=OBTso}j(GBbX=;;4pXb`#3>fWEquaNC>-gkKujd5ac9dt@_&gnwR9&N` zH|WNZ8*#eA{m)NK?(O4qd#CFIVUBb9Q{Mg~YniIXQqFJI?@F_&q+=f)tmH5r9lb!c zk(ZR}T*4cWKhA0P`p&F5tHD+aCRU}h$KJK4YsS62My)?5;7K2)fOOZq%Q=XdyCs^q z9@z~|I}RH9klu>s_*hx3e8O7$e|BoVbQuT&B=tntoPC(h;RVZGoU$z!oCaHUMTReO zYt#!p8ft`~+U6{;Bx#u!Kz0X5nlaXoj&5CFqokRdt>tRJ_a_!*t8I&X{oKQ=U2@%5 zvJd-{4+$9uGWeS4YhKxNOmg6AAWzUIJ98fK?QYi9U0E^pDFFF&uDA&Bu-d1}Q2!BE zm6Vu?)N4CDRDs}74~i=VBkT;Mzq(mubM}&De(*@0EP{`Tj4@nZ7})W`+tHaa1q@pz zalXnMP^e?LIka>@GRa7%o4xaxpNI!PEw7>Ko{e5L)u}Rq9glD3pI#=g1V8t_h7h4h z?2BX}R)t_VIU{7N+C$O#Z-Qz2!yNVovUW0-mdg6x$zZ!je9qsKMI?M)Me^Ogw)uA( z#TDDMbE%Ppz>pr2sI+{jZHa4pyn!lr&1)U_%?pN)?zkm7MHWtPZR_6irK3u+&r`L4 zvJt^?nSz2ouE)byBtnnH5R*R8Dd0+*W(y}!f&jk-PEe?YvNOEEB-ETy{y)2)bA4b; z_T1E5Lz-`N%KlLVNcnj3^eIhQ?>W5iAa1Y!216zqVk*RUe-Ro{a{2CWgZY`-R}xz7 z1EaO1jBg_C0m8qOq}V#5vHOe8Rfo^YQzkgUDPKJE(uGu8m9=_1f)Q8{w1YuCg)>oX z81RE}K!64}Wn7j_`7wmwJKSh%{+=0WeWvQI`N<%>8Fu8xUKE7~!537WNd!T$HGYSY z+o$q;+*Ca}6$H6xPKRg3qmqX#IhTa5WTDg1BhaE<$hofCzX4b4bc;IASHS=}mc8q{ z4>LT0T@YKGX*%0hgeA!g{n*8q@eZHypIn5Dxn#;m#n`Xvl(pDBMW857R1^8W>X!7g znmYlKluKXN#RulUsLgH#Gqr_Z@;xORuCqMz0Hwo3`DTKJnUqqOZz0;J9Ny1I#`-{) zU-=;lm=3PwPMBaJ#NfDPH@~;FPMX==3d>f-GUIQ!iVsBw2W8TXloh7Ad&B8py?e2T zn8P9iwhk7nADpmYb1+ys>cX$H=Ehz1W-cvxY~AyUUQ%f)6gt6Zp}PWuU3PM%ZQdB(yc^BGDvG&1 zi#Xu3<8>piP^oU3r8L#kVl<;^I(0~L@U1F}EB$$x7=CywVDnO`_~T%&O26t(&!bz8 z-6{vA>(19=`^cI?4<{+Y$3Hu|diTK1RG&nv-J9^2OLP#MxaOo$kQ7i>QMBR{=9MVS zol7Sa*g<`=*=n<9Gt_PElEqyPQxUc%pY z=goMEz73npyvh?ipt*fH3fj180c3UpnQq{}baePTWD?SF$)(JR*L;;d-P1K+*>ZoB zuX2&0s8(?lU=FOX0|#wW%YRADDe|{_PCeUr+IWfFp3GeLc0h<#O1|1OGYE8I>)~pb zY!OFsOemWBl=+=CiVwA(H}G50s*3LVsrZ6w3~-PANqxC&0)Mo$Od38qAP2p*dI|ag z%Ep)UhebqVbPqY#pr+?!}Z9X!#nz{B{?%WG|1-)Hyyi!Hq-TsJb_iSb27Q=B)G%R`qNQ*60Sr9B)0 zs#}|XpXq$&-hs(CBDHfl8>FTT)7a@P_ZCx?>o@Lh-KJVeAoQRkKiowCZ&x(63?oA; z1O|&OgIgiP*~2c&s57V3mK=~cNf6X^XZtE4x#-*jo%_rL@Dczgyw$%4QZsvERmbc9 zcK}>dQ`GZWFhI-W?b6;yp)mYw>*~C`ZSTQEmhIJ>Bl#$0#>STplk4zm*Tgvr=)!@_ zm{VTqD3}E7_N{=B5lxxDFJlI=JX@wzTNFiAhTTid5b0$7%6WfC59n)HrWYqie3+-U z)6iuQHm~P@de&Se0u>t`pSH7SH70n#3Ef0CNNb@Zt;dIR*0orapgOvp@*AjVd$|%* zfFKXxdphN^82-!*wuf2wLDXB4#Pwzm&*-v}SeCnb_re=PcfWn*VR(|?^{nOQhdQl} zn02oy%6I^NWy{cFl-8d|CNom)xs;Fc z)pMrqxSN)(L3uoX3Y%A#!cm+3z9DPA4L{Ek2d2JHg!2T11Ksuk^UhLT44cxOXh1Ly z0dbsH>Q1d(`_mN#CDqP-P{8q-eQQFS-n&zU%n=-Z872c3aRcdB-z3)<=KPIY0} zGMQSRLG6E-U~+2_KHS))CE5Y;5eY56THYh5Y9j)nrLq>3x@y2MK%*_}VdyJ)`WS zVfW})85BlAmPQ60NkM-(uJ55BTj_~Q7U%9T5NvjM3)4|RM(-aI6n1;0j3hmu&airG zpIQCAwoXx0HpDfw^%bKlbpofT7>LQ8=#<@W30ks)68nR zTy$ei9Qm+zndlz+>5rp|=WaygZD`D1M~Few$J}9>{s&um_~RnU!q$N@$$VTU$Vvsa zLIuI{NHBRf)#^ZU211cfn6ggTS-Aw0)X0J$BLXU)^m|bpm(A!bUwzEGal}l)=sZY3 z_RJ}R1}Xe}oG3PUIQ9KV#?lphb}Z^a2!gikn+Y_- zWB3+<+9GzkfDCT5MF_Tn=x8aX6XFMnSHG`X*XS7nYcS*B!rI{z( z_Fa!js9roejj2M3U(lH@x%rf13iq>$7pH0|CdFaMf_ziMxO{8h2^9(Jl~|NL9c3RM!}y|H&2OyFn# z#H05;Rkg_x-v`dXoFMPVpdSMc@-@Uw<`xvTQR>$T&4=Ax84`bZ3zWb!DO5+pE@SEI zw>`9)Dh(yac&e8u^Wp$EgAK>{<_7N5h$VNw9(qdX(4~faPF9O|LYl%Yt5cje@R(`X z3{fnitby8eZNMYVlO$lof-0dsTOVr?*U|qDFoY$(#@R>*Qm*8Um->Gu4Ml9tf2juTv%gD#obC7-{6lfbe(79t9{Hc`?KUW-}!L(nwCeq&&>vIMq|$@H+mwA ztoYkTF`CxDeuq8qsrZoiC)sw9h?O7E&S0`zX!^2cWD~!Yx4t>ymWt2d)FEoicbCZ8 zgp`q9*APe?KnLq&(LQ*#wp|HLTs82aUYc?4^(r3zXCD4M(k_HTK9BP~WXe_7d&|U+ z)0mk=^t4MOo9?z>=Gznpv=x8D>7bKsHjBVI&OcFcHjnD$J(b+L$>eGsAGPPbJJ4`=D|5ljSUu~%FI9aOG`d!(wSQrsHmK}rV<-G|4oO_IdDye2LLjZLBXLi zYd{DGDcDjaNFzV>6H{{G6020)gY0Umz0C?z`v49%mIwEy!pl+*S393q18dV6%wrOi zTW~V!N=nM$F#7ZN_~O{_sU%;;b73qt(l9LVup?(p$X}K>)-dk$*!1MssO(X#S%>ud zJEJ%KV-dG>d=416TR`3Se|X95Rq{p#y66n3eKRU^@>XA`ZtjrCcEY8+S#hDMlk$s| z@v|sauk~-*&`ydXS;@Um5tmp*-2scIOs_*5mgC+ov(p*qU6Bk4b$^FIRV5FKUbuh{J;b)Pw zQu{>|u$2*vZTeWAXhH??6ChXpmf5=yjH)tDit(7;{tk0^e>4^}4M!QhrIM1FeHd9i z*Z@cfs>xo^+XS*iIv&AL|61~b$v$4gB$Rfc=nmd)E8HCPtlVLVYZCO%VHn}*Rw4~@>t4qVOEA~19}cC~fbB5c-BN`# zGx_*%{Xr>)Yin2`jL#DH8?&Oq-Ozbb$Nw27bmt$!NYkUmOXFGM86b}Wj`Ltu+q#*JVE*V(!E{^egX*yj|~4|AkWP&_rZ+j|?1iRQ0sM zr;lAI0E=pfe`+gEWfHU}ua!^7J4m1-kY~?J{fc}UInF#n?~z*tpsV9VI5!AG3jU5u%N-?}QhJDcgpoh2|$sj!D2 z$m)yxS|QSFQ@=w22&7DkGIWc1xtXL37F{pAX7W9}IvMXZ?<<3@?umYn-?ZRfSVmQ1 zUQXpQCCLxaU}FZJezH9v^wn&I5silMZtyPQ@-j%>7JJOu_5@hufkE7mg|IpZZ_J_v zCuPIpjG{h&!lL1EvgiZC{Olc@*Qu5_W%gvtpUU3R6LTy(YfXwIq|FgsyowCjpIclW zd%n_6qf)#s;5@2|45Tt}`4QHunU|^}rO3p+guKj0fklKaD%b4pUfj5!$vm7enN&nI zCv`Lz1TO-eKPQ0qt3kINli=3%d)m-~U0nToUk6!?Gy{J3kcOV<+N^5ecT0W7ZSY6; z8@&c222Ash-2UmM1)@!~hZlFGN?h*vW=$j*b%-lTZ2P4VVQE{!-EO z+u-27A9;($)L79KeGbVTPk#A|fBgE3u$wr7KRj5%BZSM<+gRT_9vl_IzH+XMTJY-Q z-hPnL51N8e5hA+0SS>&sX%v+)##uR?B=->hmZFkhiwJt z!yw_8UdQhR8QHduXD=KG#Ly4)m^`u(`7h@ygG+C1)%L8eH29jQV$@fbkW%4BH)7!j;49%01}6P8w$45+Y$3buQ! zt}qC~U`Q}-U@8y62YYiB6Y;6V_}o6_`w;$i$M{K;(nBmPkX)*H0h_N91a~+(@b#_)kf6Zd>C0lsY*Z?3cOy&cDl`jG>j*hMxR<(`K z9B`EqiTC;|u$fV(pgeKZcsBv>V({Swz}GAGfeFGrM8A9$WwAy5I`&LpGkyo3G|*zKht}Rsmstp zaE~wDV%&T#QSa*qD6;R% zj#^ry*VHu22TwX2vQ7RbPcGeo4%E;kK`q%;nJj)B+bI_E1ngTlm-A_W(fl7(V7V`h=s#v_$;eW0H$E5P{bkkMi#PpfTZh} zxzpE!v;pdMQv7q(tIrW7%Gx4D`6aeJ=EwU0;R`0a-aGQMy>!>OrNC4EKpErg z6qxJ8)fB6^bx=%UVD119g~@`sAd(QF?X*{cT%l`hl-@eDP$uAV+|{xlY(udw^ZNKh zK_(j01Gwt_E4hSl;G|RNIv9Kfikcw!dS3;I0gy^NtMTam%Ca(om)nboPpC@0rzueLm)FjlN`#7e zMgb!MQVif5^tkM{?z?_YH=URU#UKJ?Nr8nmHiXB#{kKxc6|X%xOfAc7*xRy6*yewg2vq-?9vfY!lTUk0kk;vdiCHFVvfklr(0T@Qd-GMqhx+6H_ec`Q|`gA zQ$4}WH<&q0y$l@37DDpHr1^(5ub6%N3ZJm#a_J^gz}gwJvxz*#kPystkvqbsw(b`i9uSxu`FP`fv=9Q2G*eh3*3A0BtN}W& zj_q-yv>xej7m0jRWtkvt!ssHHt=sESv$nS>idNDG?O#Nf&AlGnO&%;^Mn<$2x0>N) zg)AM6?@^Rn6vqj*#y!sqXmwVD*D4(43f7%cldOOMS;2Sk-?{I!ny+%H?_qC~Xhk)l z8H9ss5Orxk+kriqMJ@ro@bwb*No-cEnrq;0U|FfFNRn=%J_PffJrb_zoglo!0n@Qi z3_8pT0C*-zMDb@+jADqimg5z9zT z#_uquJmvBU8-6nFG};&nRo?r{jX0Em-EvO$ki&z|>JsFDmB|-x)_4pcmNIv=p-RW1 zf)qHmFmt9kd4{s(?@l#2u4o?>iLA@+Yh_5imz@Cn7^>)>50x?5kE}=J;i2cAUBpQy zx|Nsn&WseuE^+N`po~UvopsVpmZ!ixIuv_fd+MF*$Po84co>daNeXQd1Yf14D<*f@ zmBTZ{1SvMQ_HHVI&9Y&_6m6;ip{ditJ`VvRqb%hPnWsdqw$?~ji@oy z?RoTcU@BkjdFDmHpirm*XSf*y5u7sGXWkQ9L*;h@g6t~OVf%c_;PKf>H4&iT$@agQ z^xZFix0JGc3g$ZB!QHTTgm?%EbD1c5#WbnySlF$f^n{q#_45|^Z|DI+Z(&g)9E|dl z>E_P!_~qvM;rTrL;8@Q=A?aoK-#XIRAcbh#N4V-$n)DQ`py=J5Bbgj;|JqL&oI#NA zcACCEMHGuuFgh`LPcajm^-Q}!ZWAUv<3kQLfSZzTW*C*WC=gE*n1DP$x02MNc9aW2=jSOlMq`7{wgz={r)((B!gtZA%cfx zihgPKI2r$8j`TD3ikXX;MX})pv^|_otC~;$CJ>Y8K~(R_o*ZLkN|x7~_#ax*rRMb^ zx2fUM%M%t(@fY3SD19EDohNr(oVf+7Obi^Uyq+z@fT6YC{DU1pmNa)WE_012d5J|n zNx~XnK1zjPn;~LUDg1)s#4Jc^mW4jFLKc5lT8k@}iLfx>v)8xU4u3gFLH^K)mV+YS zs*=F3>~g21l+0EGi!GyY&tda(lgXP~T9`P%_2Ic3oNgo!#D@gS z*Z+Pj44YheNAqA0?wgTt!Qv<2yLTaVMjSE60FX6ihWT}TA5eC7kMI}-R(%Ap&i@kf z((_9RuXct6yv?-tR~?hRm7Iem3p$==Ldw8DXS7>N-%v$DYL$ie@MAg&?E&0Psz?Gu zC}XtM$6ip9fKR-j zwL&Z7WrBTjn_SNs6dBFC&^POw5Tsou)53%|K_5}~Q*{;quRM4;bc1@i%#GlR&0mSN z5Qo%%?`6t$E-CkS^9|)Ov#QxN%n>W<_cz#vLcY!qMXgK0Iu**jue^(?Tg};Sva<^u z4U`((4>qxIrRj^*U$jL#xI}C_O%K8mFhJ;VxwSpv;$OBKll+itK>xa>?^A{RCB2xI z&X=$yKQB-iXth3Ea(lHD?`C&cC2&iF>z|FB$b~^Kl5+|;w~lQH9n)`^MR@LZDgny} z9LT*dJ{A}d!S!EaZI36ar2qr@traW@!B@O+S{#R1Y}X%m<$SjGwrY+xZKBVMwgHzY z&()rZ!4#)qAXYVvOhqPqT-68_-%z%0bTrJu>e@+eff zSbxVyKP3Ukr{70^Y0Ir7ZDh2N$68g^C5+pKo&QXXpO{OSsuA;O86Hra+W3J5mwD8VR%9Ao7`PR^nA#FLFOl7rmh4<4w>!6+y3)TaJ+E4RDuFHf|h%OoL-BY||L8DCrj>z=($+e3bWnP<*A z7BJTCdc}DFb3{AjDun@37TI&JcVe3yen}ZLUBme8nPi%WNCP&sDSq6@CowOq;7vuQrY$hj4vBt&4uQCLc$0=T^6y za;w9!XuqRc@2!ILKGHl@ zs#A04d56CP5L`?tncuwD3QB;O+>QpmmVW^@PXE5PC$DnA)?TH7I|9z167_>ruyUz_ z5}*`67)1z-^?ytt6?S@S1t7Ad%gL}UI4o=ad`7^|z=*I@6POrD@6lxa zsk_T+J^JfDi)zB<;-9&OX5z9yZ*QER_MQ~rp&pCdU6;#Hfzfp6Z!LhB90oIoGq@Zr z@2QyyA@b_-JPpqVDJd%)HLX91ZCmgQbiI$I{yRZO!g;kJJ93KTF4|j+Y5Yzx|5M431m_P zmN1cxC#a1XkbU3Dc?{MeVLAs2GBt(JL$yuS16>$i%mRwOeG7+6J&T$%NW8 zQ0}9O_9a1hJL&{j;+yCNZ9ZwU)aGBfdI2ai&@)J>1{*A0_=Epvc|EMh!|x;MQZ#iG z@)GJx1$7h!V4!crFd?oGSX=(J?}ZBiLbPeH=$aA|RIAZL2bz-u9fISlh}6PPlWEd= zz)LOaWx#lCbVHIbxXpYM#>DtX45A_$Y$>5YJq-{}%~gMvmzEgVzq%`6`LBof*N#~% zd#LVZ8iw=u{ZFqOp~5oQ6><26@QbGK=I#i@geB3BcBbEfJ&&LhQ8`c3Jo^@*BQIW5 z$l+e38!5=o)1;bQVa3a}G^ct6{-kd$TY z+9$j9)=>M{W%sIC==0bA+um`wneLBN=kgMY{eW?YL zqi)-E&W9I`!NUZg^;)NEB0%*$S2uWpXB*i8TvCnDH9H2{aP~;E8-JRfsLj6AQ*h@q zn=i*Py)+8!?60P>vW>l_@FrMK85>v@qafs=6vWlQWvgda2bCO;t4Q1*6D$H79*k#I zdLC{rgIsf9Z3Aeq)Cqn$BJvV1CyM@P^sNb!+t`Am4_~>)r?QrN;)|S|^^%X#w49foQI^vlaOviUL?ujPS?@O7)SFd}bIZ_mW|#JLW+@Kr=#nGat3MsjC+G={4$ zyEC>g44NWBvaQ*(q0v@clr1Yl&6IS+i>HLsTQoM(_(0d#__rI9L*lYBeu;gf4PYQ8(#x6*T_6GJNo#J; z*r+(eX~Ln=_!X~(DD%Is&$Ko8L03hl_Mv!Tga{|mG6&dA8x(c{Lyvs8S#0l9k9T^0 zx?oG&?tSQ>e8-dHURj5PBJOvTxMxMTtr^2(zD1`)D(tguFFGrmL}54jitxf5nT&h-V?TA9L= z^n>E-rxkr|{0Fltp1}iVU#(;1)AX~%_x>Gvdvs27}<)SSG}O- zZgjXSEMT8#gKMLT&3my*+#>m4k@qGG^G4Y*$6`+85D#H&hRCNpT66C|Dxqg_!X7CG zgdzJyojC8Nyxd@Dn?TGHq1>=mHY=1ird6TTwWuGAULU)Ke;YlUc-0ezouXhQf4Q6J zs7-%5mb9?(nP`Np>eoF!uY8stx5z4RFFFbvPY_IZFC1-D_ql&xP=E`fZdW(ZqOG1@&Rmq=Ma^H(wJ>IZS3?r8 z_2Tx~BGtK01c)qQ;ueaQbB@({MLR26R~5~jqlR6#n!XJGk`!1G6b0+LZ;;6zHbGH< znxV%`hMn_h*&%kKMLlcfRb5nbcVIQ?IwNu6s|>tl9f2SRpWhFVVj22qGihe(-u%xXMWN4AOGIDjgPZta=j=FRnMu3 zXYvP&XdHsB*=iv?FB^Y9?JvgMn8Io=dc?PYgyXBQ@};jwkeNVQcEk?BkI&&NyW+-W zM>88m-~Loj?ZojBe}c_TXV0ly6cy}+)x*qMvI1p?k+6M{A-351@ i?3c=BAVdvjZ5TY->UITc%V(PzeAARqWEna?AOHY06r+;> literal 0 HcmV?d00001 diff --git a/example_workflows/depth-surfing.mp4 b/example_workflows/depth-surfing.mp4 new file mode 100644 index 0000000..c59e91b --- /dev/null +++ b/example_workflows/depth-surfing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d177d33a43e5f7b87dfa24726f55a0aa698f06d7dad255b759560d1b23e2e3be +size 1481235 diff --git a/example_workflows/ic_lora/ic-lora.json b/example_workflows/ic_lora/ic-lora.json index 142cc7f..d9440e4 100644 --- a/example_workflows/ic_lora/ic-lora.json +++ b/example_workflows/ic_lora/ic-lora.json @@ -4272,7 +4272,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -5749,7 +5749,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/ltxv-13b-i2v-base-fp8.json b/example_workflows/ltxv-13b-i2v-base-fp8.json index 52f7874..298d6e3 100644 --- a/example_workflows/ltxv-13b-i2v-base-fp8.json +++ b/example_workflows/ltxv-13b-i2v-base-fp8.json @@ -214,7 +214,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -2396,7 +2396,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/ltxv-13b-i2v-base.json b/example_workflows/ltxv-13b-i2v-base.json index 3e4df62..e96dc78 100644 --- a/example_workflows/ltxv-13b-i2v-base.json +++ b/example_workflows/ltxv-13b-i2v-base.json @@ -214,7 +214,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -2397,7 +2397,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/ltxv-13b-i2v-extend.json b/example_workflows/ltxv-13b-i2v-extend.json index ce7f717..a79876b 100644 --- a/example_workflows/ltxv-13b-i2v-extend.json +++ b/example_workflows/ltxv-13b-i2v-extend.json @@ -243,7 +243,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -2744,7 +2744,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/ltxv-13b-i2v-keyframes.json b/example_workflows/ltxv-13b-i2v-keyframes.json index 42a1ca1..c3fc7cb 100644 --- a/example_workflows/ltxv-13b-i2v-keyframes.json +++ b/example_workflows/ltxv-13b-i2v-keyframes.json @@ -214,7 +214,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -2619,7 +2619,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/ltxv-13b-i2v-long-multi-prompt.json b/example_workflows/ltxv-13b-i2v-long-multi-prompt.json new file mode 100644 index 0000000..8cb0cdc --- /dev/null +++ b/example_workflows/ltxv-13b-i2v-long-multi-prompt.json @@ -0,0 +1,4726 @@ +{ + "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", + "revision": 0, + "last_node_id": 2145, + "last_link_id": 5985, + "nodes": [ + { + "id": 1335, + "type": "VAEDecode", + "pos": [ + 4524.71875, + 2618.7578125 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 48, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 5884 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5363 + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3578 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.29", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1926, + "type": "KSamplerSelect", + "pos": [ + 7169.62451171875, + 2627.34912109375 + ], + "size": [ + 251.94110107421875, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "localized_name": "sampler_name", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SAMPLER", + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 5904 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_ancestral" + ] + }, + { + "id": 2038, + "type": "Reroute", + "pos": [ + 6695.60791015625, + 2234.832763671875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5742 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5740 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2037, + "type": "Reroute", + "pos": [ + 6693.35400390625, + 2192.606689453125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5741 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5739 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2073, + "type": "FloatToSigmas", + "pos": [ + 7252.814453125, + 2838.02490234375 + ], + "size": [ + 216.59999084472656, + 26 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "localized_name": "float_list", + "name": "float_list", + "type": "FLOAT", + "link": 5782 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5905 + ] + } + ], + "properties": { + "Node name for S&R": "FloatToSigmas", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [] + }, + { + "id": 1952, + "type": "StringToFloatList", + "pos": [ + 3031.37158203125, + 2693.744384765625 + ], + "size": [ + 290, + 130 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "string", + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5567 + ] + } + ], + "properties": { + "Node name for S&R": "StringToFloatList", + "cnr_id": "comfyui-kjnodes", + "ver": "0addfc6101f7a834c7fb6e0a1b26529360ab5350" + }, + "widgets_values": [ + "1.0000, 0.9937, 0.9875, 0.9812, 0.9750, 0.9094, 0.7250, 0.4219, 0.0\n" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1598, + "type": "RandomNoise", + "pos": [ + 7239.3369140625, + 2308.76806640625 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "localized_name": "noise_seed", + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "NOISE", + "name": "NOISE", + "type": "NOISE", + "links": [ + 5903 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.30", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1625, + "fixed" + ] + }, + { + "id": 2101, + "type": "Reroute", + "pos": [ + 4516.3046875, + 2895.996337890625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 49, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5885 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5838 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1973, + "type": "VHS_VideoCombine", + "pos": [ + 8381.2939453125, + 2244.07470703125 + ], + "size": [ + 770.2554931640625, + 848.1703491210938 + ], + "flags": {}, + "order": 57, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 5920 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + }, + { + "localized_name": "loop_count", + "name": "loop_count", + "type": "INT", + "widget": { + "name": "loop_count" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + }, + { + "localized_name": "pingpong", + "name": "pingpong", + "type": "BOOLEAN", + "widget": { + "name": "pingpong" + }, + "link": null + }, + { + "localized_name": "save_output", + "name": "save_output", + "type": "BOOLEAN", + "widget": { + "name": "save_output" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Filenames", + "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": "ltxv-ic-lora", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "ltxv-ic-lora_00001.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "ltxv-ic-lora_00001.png", + "fullpath": "/opt/ComfyUI/output/ltxv-ic-lora_00001.mp4" + } + } + } + }, + { + "id": 2116, + "type": "STGAdvancedPresets", + "pos": [ + 6526.765625, + 2525.401123046875 + ], + "size": [ + 292.0787048339844, + 58 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "localized_name": "preset", + "name": "preset", + "type": "COMBO", + "widget": { + "name": "preset" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "STG_ADVANCED_PRESET", + "name": "STG_ADVANCED_PRESET", + "type": "STG_ADVANCED_PRESET", + "links": [ + 5873 + ] + } + ], + "properties": { + "Node name for S&R": "STGAdvancedPresets" + }, + "widgets_values": [ + "13b Distilled" + ] + }, + { + "id": 2117, + "type": "Set VAE Decoder Noise", + "pos": [ + 7948.51708984375, + 2248.662841796875 + ], + "size": [ + 294.1568298339844, + 130 + ], + "flags": {}, + "order": 50, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5874 + }, + { + "localized_name": "timestep", + "name": "timestep", + "type": "FLOAT", + "widget": { + "name": "timestep" + }, + "link": null + }, + { + "localized_name": "scale", + "name": "scale", + "type": "FLOAT", + "widget": { + "name": "scale" + }, + "link": null + }, + { + "localized_name": "seed", + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 5917 + ] + } + ], + "properties": { + "Node name for S&R": "Set VAE Decoder Noise" + }, + "widgets_values": [ + 0.05, + 0.025, + 42, + "fixed" + ] + }, + { + "id": 2096, + "type": "Reroute", + "pos": [ + 3950, + 2050 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5829 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5831, + 5876 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2072, + "type": "StringToFloatList", + "pos": [ + 6769.21875, + 2838.73681640625 + ], + "size": [ + 395.74224853515625, + 88 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "string", + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5782 + ] + } + ], + "properties": { + "Node name for S&R": "StringToFloatList", + "cnr_id": "comfyui-kjnodes", + "ver": "0addfc6101f7a834c7fb6e0a1b26529360ab5350" + }, + "widgets_values": [ + "0.99, 0.9094, 0.0" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1871, + "type": "STGGuiderAdvanced", + "pos": [ + 6852.89599609375, + 2435.40283203125 + ], + "size": [ + 278.79998779296875, + 262 + ], + "flags": {}, + "order": 46, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5896 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5739 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 5740 + }, + { + "localized_name": "preset", + "name": "preset", + "shape": 7, + "type": "STG_ADVANCED_PRESET", + "link": 5873 + }, + { + "localized_name": "skip_steps_sigma_threshold", + "name": "skip_steps_sigma_threshold", + "type": "FLOAT", + "widget": { + "name": "skip_steps_sigma_threshold" + }, + "link": null + }, + { + "localized_name": "cfg_star_rescale", + "name": "cfg_star_rescale", + "type": "BOOLEAN", + "widget": { + "name": "cfg_star_rescale" + }, + "link": null + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { + "name": "sigmas" + }, + "link": null + }, + { + "localized_name": "cfg_values", + "name": "cfg_values", + "type": "STRING", + "widget": { + "name": "cfg_values" + }, + "link": null + }, + { + "localized_name": "stg_scale_values", + "name": "stg_scale_values", + "type": "STRING", + "widget": { + "name": "stg_scale_values" + }, + "link": null + }, + { + "localized_name": "stg_rescale_values", + "name": "stg_rescale_values", + "type": "STRING", + "widget": { + "name": "stg_rescale_values" + }, + "link": null + }, + { + "localized_name": "stg_layers_indices", + "name": "stg_layers_indices", + "type": "STRING", + "widget": { + "name": "stg_layers_indices" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 5906 + ] + } + ], + "properties": { + "Node name for S&R": "STGGuiderAdvanced" + }, + "widgets_values": [ + 0.9970000000000002, + true, + "1", + "1", + "0", + "1", + "[42]" + ] + }, + { + "id": 2124, + "type": "LTXVLoopingSampler", + "pos": [ + 7551.111328125, + 2227.607177734375 + ], + "size": [ + 365.21484375, + 522 + ], + "flags": {}, + "order": 55, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5901 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5902 + }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 5903 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 5904 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5905 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 5906 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5961 + }, + { + "localized_name": "optional_cond_image", + "name": "optional_cond_image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "optional_guiding_latents", + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": 5912 + }, + { + "localized_name": "optional_positive_conditionings", + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": null + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { + "name": "guiding_strength" + }, + "link": null + }, + { + "localized_name": "temporal_tile_size", + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": null + }, + { + "localized_name": "temporal_overlap_cond_strength", + "name": "temporal_overlap_cond_strength", + "type": "FLOAT", + "widget": { + "name": "temporal_overlap_cond_strength" + }, + "link": null + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { + "name": "spatial_overlap" + }, + "link": null + }, + { + "localized_name": "adain_factor", + "name": "adain_factor", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "adain_factor" + }, + "link": null + }, + { + "localized_name": "optional_negative_index", + "name": "optional_negative_index", + "shape": 7, + "type": "INT", + "widget": { + "name": "optional_negative_index" + }, + "link": null + }, + { + "localized_name": "optional_negative_index_strength", + "name": "optional_negative_index_strength", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "optional_negative_index_strength" + }, + "link": null + }, + { + "localized_name": "per_tile_seed_offsets", + "name": "per_tile_seed_offsets", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_seed_offsets" + }, + "link": null + }, + { + "localized_name": "per_tile_use_negative_latents", + "name": "per_tile_use_negative_latents", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_use_negative_latents" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "links": [ + 5918 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 1, + 80, + 24, + 0.5, + 1, + 1, + 1, + 0, + -1, + 1, + "0", + "1" + ] + }, + { + "id": 2127, + "type": "LTXVTiledVAEDecode", + "pos": [ + 7952.56640625, + 2443.8046875 + ], + "size": [ + 290.6636657714844, + 150 + ], + "flags": {}, + "order": 56, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5917 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5918 + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "overlap", + "name": "overlap", + "type": "INT", + "widget": { + "name": "overlap" + }, + "link": null + }, + { + "localized_name": "last_frame_fix", + "name": "last_frame_fix", + "type": "BOOLEAN", + "widget": { + "name": "last_frame_fix" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 5920 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 5, + false + ] + }, + { + "id": 2090, + "type": "Reroute", + "pos": [ + 1915.3045654296875, + 2041.6649169921875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5818 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5829 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2088, + "type": "Reroute", + "pos": [ + 2018.0771484375, + 2067.719970703125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5938 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5815 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2129, + "type": "Reroute", + "pos": [ + 2004.1419677734375, + 2654.619873046875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5941 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5938 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2094, + "type": "Reroute", + "pos": [ + 2371.384765625, + 2891.617919921875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5825 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5826, + 5979 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2122, + "type": "LoraLoaderModelOnly", + "pos": [ + 6476.05859375, + 2317.96484375 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5898 + }, + { + "localized_name": "lora_name", + "name": "lora_name", + "type": "COMBO", + "widget": { + "name": "lora_name" + }, + "link": null + }, + { + "localized_name": "strength_model", + "name": "strength_model", + "type": "FLOAT", + "widget": { + "name": "strength_model" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 5896, + 5901 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltx-video-ICLoRA-detailer-13B-0.9.8", + 1 + ] + }, + { + "id": 2091, + "type": "Reroute", + "pos": [ + 5967.08837890625, + 2053.210205078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5831 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5820, + 5821 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2125, + "type": "Reroute", + "pos": [ + 7255.9951171875, + 2484.927001953125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 54, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5971 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5912, + 5961 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 38, + "type": "CLIPLoader", + "pos": [ + 1916.6739501953125, + 2303.91259765625 + ], + "size": [ + 245.33026123046875, + 106 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + }, + "link": null + }, + { + "localized_name": "type", + "name": "type", + "type": "COMBO", + "widget": { + "name": "type" + }, + "link": null + }, + { + "localized_name": "device", + "name": "device", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "device" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5603, + 5964, + 5966 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "ltxv", + "default" + ] + }, + { + "id": 1949, + "type": "PrintSigmas", + "pos": [ + 3674.795654296875, + 2763.217529296875 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5641 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5881 + ] + } + ], + "properties": { + "Node name for S&R": "PrintSigmas" + }, + "widgets_values": [] + }, + { + "id": 1953, + "type": "FloatToSigmas", + "pos": [ + 3391.44384765625, + 2769.8349609375 + ], + "size": [ + 216.59999084472656, + 26 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "localized_name": "float_list", + "name": "float_list", + "type": "FLOAT", + "link": 5567 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5641 + ] + } + ], + "properties": { + "Node name for S&R": "FloatToSigmas", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [] + }, + { + "id": 2022, + "type": "Reroute", + "pos": [ + 3229.825439453125, + 1977.3233642578125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5715 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5741 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2023, + "type": "Reroute", + "pos": [ + 3223.71728515625, + 2017.1053466796875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5716 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5742 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2097, + "type": "Note", + "pos": [ + 2233.589111328125, + 2181.5400390625 + ], + "size": [ + 285.2653503417969, + 88 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Leave the positive conditioning text blank. Use multi prompt provider node on the right." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2095, + "type": "Reroute", + "pos": [ + 3925.002197265625, + 2883.0654296875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5826 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5828 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 73, + "type": "KSamplerSelect", + "pos": [ + 3586.90478515625, + 2493.794189453125 + ], + "size": [ + 251.94110107421875, + 58 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "sampler_name", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SAMPLER", + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 5879 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_ancestral" + ] + }, + { + "id": 2131, + "type": "Reroute", + "pos": [ + 3853.322021484375, + 2818.027587890625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5970 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5952 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1896, + "type": "CheckpointLoaderSimple", + "pos": [ + 1923.9993896484375, + 2810.05615234375 + ], + "size": [ + 315, + 98 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { + "name": "ckpt_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5941, + 5969, + 5970 + ] + }, + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": null + }, + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 2, + "links": [ + 5818, + 5825 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "ltxv-13b-0.9.8-distilled.safetensors" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1870, + "type": "Set VAE Decoder Noise", + "pos": [ + 4506.759765625, + 2418.0849609375 + ], + "size": [ + 235.1999969482422, + 130 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5828 + }, + { + "localized_name": "timestep", + "name": "timestep", + "type": "FLOAT", + "widget": { + "name": "timestep" + }, + "link": null + }, + { + "localized_name": "scale", + "name": "scale", + "type": "FLOAT", + "widget": { + "name": "scale" + }, + "link": null + }, + { + "localized_name": "seed", + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 5363 + ] + } + ], + "properties": { + "Node name for S&R": "Set VAE Decoder Noise" + }, + "widgets_values": [ + 0.05000000000000001, + 0.025000000000000005, + 42, + "fixed" + ] + }, + { + "id": 1336, + "type": "VHS_VideoCombine", + "pos": [ + 4850.5517578125, + 2275.85302734375 + ], + "size": [ + 430.260498046875, + 621.5070190429688 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 3578 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + }, + { + "localized_name": "loop_count", + "name": "loop_count", + "type": "INT", + "widget": { + "name": "loop_count" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + }, + { + "localized_name": "pingpong", + "name": "pingpong", + "type": "BOOLEAN", + "widget": { + "name": "pingpong" + }, + "link": null + }, + { + "localized_name": "save_output", + "name": "save_output", + "type": "BOOLEAN", + "widget": { + "name": "save_output" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Filenames", + "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": "ltxv-base", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "ltxv-base_00001.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "ltxv-base_00001.png", + "fullpath": "/opt/ComfyUI/temp/ltxv-base_00001.mp4" + } + } + } + }, + { + "id": 1507, + "type": "RandomNoise", + "pos": [ + 3535.158203125, + 2604.37841796875 + ], + "size": [ + 239.2462158203125, + 82 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "localized_name": "noise_seed", + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "NOISE", + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 5880 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 0, + "fixed" + ] + }, + { + "id": 2083, + "type": "Note", + "pos": [ + 1389.35400390625, + 2180.90380859375 + ], + "size": [ + 301.8587951660156, + 88.58767700195312 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If you want to generate in text-to-video mode, simply bypass the conditioning reference image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 2199.7548828125, + 2475.3994140625 + ], + "size": [ + 324.2440490722656, + 138.9625701904297 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 5603 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3365 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "low quality, worst quality, deformed, distorted, disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, weird hand, ugly" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2137, + "type": "CLIPTextEncode", + "pos": [ + 2207.601806640625, + 2326.387451171875 + ], + "size": [ + 306.794921875, + 108.2911605834961 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 5966 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5967 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 1241, + "type": "LTXVConditioning", + "pos": [ + 2554.75439453125, + 2188.283203125 + ], + "size": [ + 328.21636962890625, + 78 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5967 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 3365 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5584, + 5715 + ] + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5585, + 5716 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "LTXVConditioning" + }, + "widgets_values": [ + 24.000000000000004 + ] + }, + { + "id": 1921, + "type": "STGGuiderAdvanced", + "pos": [ + 3237.193359375, + 2187.70556640625 + ], + "size": [ + 278.79998779296875, + 262 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5969 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5584 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 5585 + }, + { + "localized_name": "preset", + "name": "preset", + "shape": 7, + "type": "STG_ADVANCED_PRESET", + "link": 5613 + }, + { + "localized_name": "skip_steps_sigma_threshold", + "name": "skip_steps_sigma_threshold", + "type": "FLOAT", + "widget": { + "name": "skip_steps_sigma_threshold" + }, + "link": null + }, + { + "localized_name": "cfg_star_rescale", + "name": "cfg_star_rescale", + "type": "BOOLEAN", + "widget": { + "name": "cfg_star_rescale" + }, + "link": null + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { + "name": "sigmas" + }, + "link": null + }, + { + "localized_name": "cfg_values", + "name": "cfg_values", + "type": "STRING", + "widget": { + "name": "cfg_values" + }, + "link": null + }, + { + "localized_name": "stg_scale_values", + "name": "stg_scale_values", + "type": "STRING", + "widget": { + "name": "stg_scale_values" + }, + "link": null + }, + { + "localized_name": "stg_rescale_values", + "name": "stg_rescale_values", + "type": "STRING", + "widget": { + "name": "stg_rescale_values" + }, + "link": null + }, + { + "localized_name": "stg_layers_indices", + "name": "stg_layers_indices", + "type": "STRING", + "widget": { + "name": "stg_layers_indices" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 5878 + ] + } + ], + "properties": { + "Node name for S&R": "STGGuiderAdvanced" + }, + "widgets_values": [ + 0.9970000000000002, + true, + "1", + "1", + "0,0,0,0,0,0", + "1", + "[25]" + ] + }, + { + "id": 2119, + "type": "EmptyLTXVLatentVideo", + "pos": [ + 3248.267578125, + 2490.9853515625 + ], + "size": [ + 270, + 130 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "localized_name": "width", + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 5973 + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 5974 + }, + { + "localized_name": "length", + "name": "length", + "type": "INT", + "widget": { + "name": "length" + }, + "link": null + }, + { + "localized_name": "batch_size", + "name": "batch_size", + "type": "INT", + "widget": { + "name": "batch_size" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 5895 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "EmptyLTXVLatentVideo" + }, + "widgets_values": [ + 768, + 512, + 361, + 1 + ] + }, + { + "id": 2142, + "type": "ImageResizeKJ", + "pos": [ + 2788.995361328125, + 2546.055419921875 + ], + "size": [ + 210, + 238 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 5982 + }, + { + "localized_name": "width_input", + "name": "width_input", + "shape": 7, + "type": "INT", + "link": 5976 + }, + { + "localized_name": "height_input", + "name": "height_input", + "shape": 7, + "type": "INT", + "link": 5977 + }, + { + "localized_name": "get_image_size", + "name": "get_image_size", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "width", + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": null + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": null + }, + { + "localized_name": "upscale_method", + "name": "upscale_method", + "type": "COMBO", + "widget": { + "name": "upscale_method" + }, + "link": null + }, + { + "localized_name": "keep_proportion", + "name": "keep_proportion", + "type": "BOOLEAN", + "widget": { + "name": "keep_proportion" + }, + "link": null + }, + { + "localized_name": "divisible_by", + "name": "divisible_by", + "type": "INT", + "widget": { + "name": "divisible_by" + }, + "link": null + }, + { + "localized_name": "crop", + "name": "crop", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "crop" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5978 + ] + }, + { + "localized_name": "width", + "name": "width", + "type": "INT", + "links": null + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [ + 512, + 512, + "bilinear", + false, + 32, + "center" + ] + }, + { + "id": 2143, + "type": "VAEEncode", + "pos": [ + 3093.18896484375, + 2610.00048828125 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "localized_name": "pixels", + "name": "pixels", + "type": "IMAGE", + "link": 5978 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5979 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 5980 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 2141, + "type": "PrimitiveInt", + "pos": [ + 2528.516357421875, + 2724.28271484375 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 5974, + 5977 + ] + } + ], + "title": "Height", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [ + 512, + "fixed" + ] + }, + { + "id": 1828, + "type": "LTXVLatentUpsamplerModelLoader", + "pos": [ + 5633.87890625, + 2243.88720703125 + ], + "size": [ + 349.8224792480469, + 113.41394805908203 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "COMBO", + "widget": { + "name": "upscale_model" + }, + "link": null + }, + { + "localized_name": "spatial_upsample", + "name": "spatial_upsample", + "type": "BOOLEAN", + "widget": { + "name": "spatial_upsample" + }, + "link": null + }, + { + "localized_name": "temporal_upsample", + "name": "temporal_upsample", + "type": "BOOLEAN", + "widget": { + "name": "temporal_upsample" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "UPSCALE_MODEL", + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 5303 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsamplerModelLoader" + }, + "widgets_values": [ + "ltxv-spatial-upscaler-0.9.8.safetensors", + true, + false + ] + }, + { + "id": 1691, + "type": "LTXVLatentUpsampler", + "pos": [ + 6005.61767578125, + 2431.710205078125 + ], + "size": [ + 235.1999969482422, + 66 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 5839 + }, + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 5303 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5820 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 5971 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsampler" + }, + "widgets_values": [] + }, + { + "id": 2089, + "type": "Reroute", + "pos": [ + 6366.45947265625, + 2080.94482421875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5815 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5898 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2092, + "type": "Reroute", + "pos": [ + 7432.23681640625, + 2050.378173828125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5821 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5823, + 5902 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2093, + "type": "Reroute", + "pos": [ + 7849.55517578125, + 2052.93408203125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5823 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5874 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2102, + "type": "Reroute", + "pos": [ + 5431.9970703125, + 2652.271240234375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 52, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5838 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5839 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1967, + "type": "STGAdvancedPresets", + "pos": [ + 2984.207275390625, + 2431.851318359375 + ], + "size": [ + 232.07870483398438, + 58 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "localized_name": "preset", + "name": "preset", + "type": "COMBO", + "widget": { + "name": "preset" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "STG_ADVANCED_PRESET", + "name": "STG_ADVANCED_PRESET", + "type": "STG_ADVANCED_PRESET", + "links": [ + 5613 + ] + } + ], + "properties": { + "Node name for S&R": "STGAdvancedPresets" + }, + "widgets_values": [ + "13b Distilled" + ] + }, + { + "id": 2144, + "type": "Reroute", + "pos": [ + 1959.7939453125, + 2957.10400390625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5983 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5982, + 5984 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2145, + "type": "Reroute", + "pos": [ + 3833.28857421875, + 2968.962646484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5984 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5985 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2140, + "type": "PrimitiveInt", + "pos": [ + 2536.9140625, + 2594.824462890625 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 5973, + 5976 + ] + } + ], + "title": "Width", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [ + 768, + "fixed" + ] + }, + { + "id": 1960, + "type": "LoadImage", + "pos": [ + 1113.742919921875, + 2334.58203125 + ], + "size": [ + 741.6028442382812, + 428.4986877441406 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "COMBO", + "widget": { + "name": "image" + }, + "link": null + }, + { + "localized_name": "choose file to upload", + "name": "upload", + "type": "IMAGEUPLOAD", + "widget": { + "name": "upload" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5983 + ] + }, + { + "localized_name": "MASK", + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.30", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "chimpanzee.webp", + "image" + ] + }, + { + "id": 2118, + "type": "LTXVLoopingSampler", + "pos": [ + 4011.846923828125, + 2252.72412109375 + ], + "size": [ + 365.21484375, + 522 + ], + "flags": {}, + "order": 45, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5952 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5876 + }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 5880 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 5879 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5881 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 5878 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5895 + }, + { + "localized_name": "optional_cond_image", + "name": "optional_cond_image", + "shape": 7, + "type": "IMAGE", + "link": 5985 + }, + { + "localized_name": "optional_guiding_latents", + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "optional_positive_conditionings", + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": 5968 + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": 5980 + }, + { + "localized_name": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { + "name": "guiding_strength" + }, + "link": null + }, + { + "localized_name": "temporal_tile_size", + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": null + }, + { + "localized_name": "temporal_overlap_cond_strength", + "name": "temporal_overlap_cond_strength", + "type": "FLOAT", + "widget": { + "name": "temporal_overlap_cond_strength" + }, + "link": null + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { + "name": "spatial_overlap" + }, + "link": null + }, + { + "localized_name": "adain_factor", + "name": "adain_factor", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "adain_factor" + }, + "link": null + }, + { + "localized_name": "optional_negative_index", + "name": "optional_negative_index", + "shape": 7, + "type": "INT", + "widget": { + "name": "optional_negative_index" + }, + "link": null + }, + { + "localized_name": "optional_negative_index_strength", + "name": "optional_negative_index_strength", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "optional_negative_index_strength" + }, + "link": null + }, + { + "localized_name": "per_tile_seed_offsets", + "name": "per_tile_seed_offsets", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_seed_offsets" + }, + "link": null + }, + { + "localized_name": "per_tile_use_negative_latents", + "name": "per_tile_use_negative_latents", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_use_negative_latents" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "links": [ + 5884, + 5885 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 1, + 120, + 32, + 0.5, + 1, + 1, + 1, + 0.25000000000000006, + -1, + 1, + "0", + "1" + ] + }, + { + "id": 2136, + "type": "MultiPromptProvider", + "pos": [ + 2547.635009765625, + 2312.775390625 + ], + "size": [ + 314.39056396484375, + 151.14501953125 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 5964 + }, + { + "localized_name": "prompts", + "name": "prompts", + "type": "STRING", + "widget": { + "name": "prompts" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "conditionings", + "name": "conditionings", + "type": "CONDITIONING", + "links": [ + 5968 + ] + } + ], + "properties": { + "Node name for S&R": "MultiPromptProvider" + }, + "widgets_values": [ + "a chimpanzee walks in the jungle |\na chimpanzee stops and eats a snack |\na chimpanzee lays on the ground" + ] + } + ], + "links": [ + [ + 3365, + 7, + 0, + 1241, + 1, + "CONDITIONING" + ], + [ + 3578, + 1335, + 0, + 1336, + 0, + "IMAGE" + ], + [ + 5303, + 1828, + 0, + 1691, + 1, + "UPSCALE_MODEL" + ], + [ + 5363, + 1870, + 0, + 1335, + 1, + "VAE" + ], + [ + 5567, + 1952, + 0, + 1953, + 0, + "FLOAT" + ], + [ + 5584, + 1241, + 0, + 1921, + 1, + "CONDITIONING" + ], + [ + 5585, + 1241, + 1, + 1921, + 2, + "CONDITIONING" + ], + [ + 5603, + 38, + 0, + 7, + 0, + "CLIP" + ], + [ + 5613, + 1967, + 0, + 1921, + 3, + "STG_ADVANCED_PRESET" + ], + [ + 5641, + 1953, + 0, + 1949, + 0, + "SIGMAS" + ], + [ + 5715, + 1241, + 0, + 2022, + 0, + "*" + ], + [ + 5716, + 1241, + 1, + 2023, + 0, + "*" + ], + [ + 5739, + 2037, + 0, + 1871, + 1, + "CONDITIONING" + ], + [ + 5740, + 2038, + 0, + 1871, + 2, + "CONDITIONING" + ], + [ + 5741, + 2022, + 0, + 2037, + 0, + "*" + ], + [ + 5742, + 2023, + 0, + 2038, + 0, + "*" + ], + [ + 5782, + 2072, + 0, + 2073, + 0, + "FLOAT" + ], + [ + 5815, + 2088, + 0, + 2089, + 0, + "*" + ], + [ + 5818, + 1896, + 2, + 2090, + 0, + "*" + ], + [ + 5820, + 2091, + 0, + 1691, + 2, + "VAE" + ], + [ + 5821, + 2091, + 0, + 2092, + 0, + "*" + ], + [ + 5823, + 2092, + 0, + 2093, + 0, + "*" + ], + [ + 5825, + 1896, + 2, + 2094, + 0, + "*" + ], + [ + 5826, + 2094, + 0, + 2095, + 0, + "*" + ], + [ + 5828, + 2095, + 0, + 1870, + 0, + "VAE" + ], + [ + 5829, + 2090, + 0, + 2096, + 0, + "*" + ], + [ + 5831, + 2096, + 0, + 2091, + 0, + "*" + ], + [ + 5838, + 2101, + 0, + 2102, + 0, + "*" + ], + [ + 5839, + 2102, + 0, + 1691, + 0, + "LATENT" + ], + [ + 5873, + 2116, + 0, + 1871, + 3, + "STG_ADVANCED_PRESET" + ], + [ + 5874, + 2093, + 0, + 2117, + 0, + "VAE" + ], + [ + 5876, + 2096, + 0, + 2118, + 1, + "VAE" + ], + [ + 5878, + 1921, + 0, + 2118, + 5, + "GUIDER" + ], + [ + 5879, + 73, + 0, + 2118, + 3, + "SAMPLER" + ], + [ + 5880, + 1507, + 0, + 2118, + 2, + "NOISE" + ], + [ + 5881, + 1949, + 0, + 2118, + 4, + "SIGMAS" + ], + [ + 5884, + 2118, + 0, + 1335, + 0, + "LATENT" + ], + [ + 5885, + 2118, + 0, + 2101, + 0, + "*" + ], + [ + 5895, + 2119, + 0, + 2118, + 6, + "LATENT" + ], + [ + 5896, + 2122, + 0, + 1871, + 0, + "MODEL" + ], + [ + 5898, + 2089, + 0, + 2122, + 0, + "MODEL" + ], + [ + 5901, + 2122, + 0, + 2124, + 0, + "MODEL" + ], + [ + 5902, + 2092, + 0, + 2124, + 1, + "VAE" + ], + [ + 5903, + 1598, + 0, + 2124, + 2, + "NOISE" + ], + [ + 5904, + 1926, + 0, + 2124, + 3, + "SAMPLER" + ], + [ + 5905, + 2073, + 0, + 2124, + 4, + "SIGMAS" + ], + [ + 5906, + 1871, + 0, + 2124, + 5, + "GUIDER" + ], + [ + 5912, + 2125, + 0, + 2124, + 8, + "LATENT" + ], + [ + 5917, + 2117, + 0, + 2127, + 0, + "VAE" + ], + [ + 5918, + 2124, + 0, + 2127, + 1, + "LATENT" + ], + [ + 5920, + 2127, + 0, + 1973, + 0, + "IMAGE" + ], + [ + 5938, + 2129, + 0, + 2088, + 0, + "*" + ], + [ + 5941, + 1896, + 0, + 2129, + 0, + "*" + ], + [ + 5952, + 2131, + 0, + 2118, + 0, + "MODEL" + ], + [ + 5961, + 2125, + 0, + 2124, + 6, + "LATENT" + ], + [ + 5964, + 38, + 0, + 2136, + 0, + "CLIP" + ], + [ + 5966, + 38, + 0, + 2137, + 0, + "CLIP" + ], + [ + 5967, + 2137, + 0, + 1241, + 0, + "CONDITIONING" + ], + [ + 5968, + 2136, + 0, + 2118, + 9, + "CONDITIONING" + ], + [ + 5969, + 1896, + 0, + 1921, + 0, + "MODEL" + ], + [ + 5970, + 1896, + 0, + 2131, + 0, + "*" + ], + [ + 5971, + 1691, + 0, + 2125, + 0, + "*" + ], + [ + 5973, + 2140, + 0, + 2119, + 0, + "INT" + ], + [ + 5974, + 2141, + 0, + 2119, + 1, + "INT" + ], + [ + 5976, + 2140, + 0, + 2142, + 1, + "INT" + ], + [ + 5977, + 2141, + 0, + 2142, + 2, + "INT" + ], + [ + 5978, + 2142, + 0, + 2143, + 0, + "IMAGE" + ], + [ + 5979, + 2094, + 0, + 2143, + 1, + "VAE" + ], + [ + 5980, + 2143, + 0, + 2118, + 10, + "LATENT" + ], + [ + 5982, + 2144, + 0, + 2142, + 0, + "IMAGE" + ], + [ + 5983, + 1960, + 0, + 2144, + 0, + "*" + ], + [ + 5984, + 2144, + 0, + 2145, + 0, + "*" + ], + [ + 5985, + 2145, + 0, + 2118, + 7, + "IMAGE" + ] + ], + "groups": [ + { + "id": 34, + "title": "Latent Upscaler", + "bounding": [ + 5585.8896484375, + 2108.431640625, + 720.9568481445312, + 582.6881103515625 + ], + "color": "#a1309b", + "font_size": 24, + "flags": {}, + "nodes": [ + 1828, + 1691 + ] + }, + { + "id": 42, + "title": "Add Details", + "bounding": [ + 6335.14013671875, + 2116.384521484375, + 2866.58203125, + 1085.7049560546875 + ], + "color": "#a1309b", + "font_size": 24, + "flags": {}, + "nodes": [ + 1926, + 2038, + 2037, + 2073, + 1598, + 1973, + 2116, + 2117, + 2072, + 1871, + 2124, + 2127, + 2122, + 2125 + ] + }, + { + "id": 46, + "title": "Reference Image", + "bounding": [ + 1103.742919921875, + 2107.3037109375, + 778.158203125, + 820.155029296875 + ], + "color": "#8A8", + "font_size": 24, + "flags": {}, + "nodes": [ + 2083, + 1960 + ] + }, + { + "id": 48, + "title": "LTXV Base Video", + "bounding": [ + 1902.1943359375, + 2103.927490234375, + 3663.2529296875, + 825.6270751953125 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {}, + "nodes": [ + 1335, + 1952, + 2101, + 2129, + 2094, + 38, + 1949, + 1953, + 2097, + 2095, + 73, + 2131, + 1896, + 1870, + 1336, + 1507, + 7, + 2137, + 1241, + 1921, + 2119, + 2142, + 2143, + 2141, + 2102, + 1967, + 2140, + 2118, + 2136 + ] + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.8954302432552395, + "offset": [ + -2265.7314583089683, + -2087.6123877936175 + ] + }, + "frontendVersion": "1.17.11", + "VHS_latentpreview": true, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true, + "prompt": { + "7": { + "inputs": { + "text": "low quality, worst quality, deformed, distorted, disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, weird hand, ugly", + "clip": [ + "38", + 0 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Negative Prompt)" + } + }, + "38": { + "inputs": { + "clip_name": "t5xxl_fp16.safetensors", + "type": "ltxv", + "device": "default" + }, + "class_type": "CLIPLoader", + "_meta": { + "title": "Load CLIP" + } + }, + "73": { + "inputs": { + "sampler_name": "euler_ancestral" + }, + "class_type": "KSamplerSelect", + "_meta": { + "title": "KSamplerSelect" + } + }, + "1241": { + "inputs": { + "frame_rate": 24.000000000000004, + "positive": [ + "2137", + 0 + ], + "negative": [ + "7", + 0 + ] + }, + "class_type": "LTXVConditioning", + "_meta": { + "title": "LTXVConditioning" + } + }, + "1335": { + "inputs": { + "samples": [ + "2118", + 0 + ], + "vae": [ + "1870", + 0 + ] + }, + "class_type": "VAEDecode", + "_meta": { + "title": "VAE Decode" + } + }, + "1336": { + "inputs": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-base", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "images": [ + "1335", + 0 + ] + }, + "class_type": "VHS_VideoCombine", + "_meta": { + "title": "Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "1507": { + "inputs": { + "noise_seed": 0 + }, + "class_type": "RandomNoise", + "_meta": { + "title": "RandomNoise" + } + }, + "1598": { + "inputs": { + "noise_seed": 1625 + }, + "class_type": "RandomNoise", + "_meta": { + "title": "RandomNoise" + } + }, + "1691": { + "inputs": { + "samples": [ + "2118", + 0 + ], + "upscale_model": [ + "1828", + 0 + ], + "vae": [ + "1896", + 2 + ] + }, + "class_type": "LTXVLatentUpsampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Latent Upsampler" + } + }, + "1828": { + "inputs": { + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", + "spatial_upsample": true, + "temporal_upsample": false + }, + "class_type": "LTXVLatentUpsamplerModelLoader", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Latent Upsampler Model Loader" + } + }, + "1870": { + "inputs": { + "timestep": 0.05000000000000001, + "scale": 0.025000000000000005, + "seed": 42, + "vae": [ + "1896", + 2 + ] + }, + "class_type": "Set VAE Decoder Noise", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ Set VAE Decoder Noise" + } + }, + "1871": { + "inputs": { + "skip_steps_sigma_threshold": 0.9970000000000002, + "cfg_star_rescale": true, + "sigmas": "1", + "cfg_values": "1", + "stg_scale_values": "0", + "stg_rescale_values": "1", + "stg_layers_indices": "[42]", + "model": [ + "2122", + 0 + ], + "positive": [ + "1241", + 0 + ], + "negative": [ + "1241", + 1 + ], + "preset": [ + "2116", + 0 + ] + }, + "class_type": "STGGuiderAdvanced", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Guider Advanced" + } + }, + "1896": { + "inputs": { + "ckpt_name": "ltxv-13b-0.9.8-distilled.safetensors" + }, + "class_type": "CheckpointLoaderSimple", + "_meta": { + "title": "Load Checkpoint" + } + }, + "1921": { + "inputs": { + "skip_steps_sigma_threshold": 0.9970000000000002, + "cfg_star_rescale": true, + "sigmas": "1", + "cfg_values": "1", + "stg_scale_values": "0,0,0,0,0,0", + "stg_rescale_values": "1", + "stg_layers_indices": "[25]", + "model": [ + "1896", + 0 + ], + "positive": [ + "1241", + 0 + ], + "negative": [ + "1241", + 1 + ], + "preset": [ + "1967", + 0 + ] + }, + "class_type": "STGGuiderAdvanced", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Guider Advanced" + } + }, + "1926": { + "inputs": { + "sampler_name": "euler_ancestral" + }, + "class_type": "KSamplerSelect", + "_meta": { + "title": "KSamplerSelect" + } + }, + "1949": { + "inputs": { + "sigmas": [ + "1953", + 0 + ] + }, + "class_type": "PrintSigmas", + "_meta": { + "title": "PrintSigmas" + } + }, + "1952": { + "inputs": { + "string": "1.0000, 0.9937, 0.9875, 0.9812, 0.9750, 0.9094, 0.7250, 0.4219, 0.0\n" + }, + "class_type": "StringToFloatList", + "_meta": { + "title": "String to Float List" + } + }, + "1953": { + "inputs": { + "float_list": [ + "1952", + 0 + ] + }, + "class_type": "FloatToSigmas", + "_meta": { + "title": "Float To Sigmas" + } + }, + "1960": { + "inputs": { + "image": "chimpanzee.webp" + }, + "class_type": "LoadImage", + "_meta": { + "title": "Load Image" + } + }, + "1967": { + "inputs": { + "preset": "13b Distilled" + }, + "class_type": "STGAdvancedPresets", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Advanced Presets" + } + }, + "1973": { + "inputs": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-ic-lora", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "images": [ + "2127", + 0 + ] + }, + "class_type": "VHS_VideoCombine", + "_meta": { + "title": "Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "2072": { + "inputs": { + "string": "0.99, 0.9094, 0.0" + }, + "class_type": "StringToFloatList", + "_meta": { + "title": "String to Float List" + } + }, + "2073": { + "inputs": { + "float_list": [ + "2072", + 0 + ] + }, + "class_type": "FloatToSigmas", + "_meta": { + "title": "Float To Sigmas" + } + }, + "2116": { + "inputs": { + "preset": "13b Distilled" + }, + "class_type": "STGAdvancedPresets", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Advanced Presets" + } + }, + "2117": { + "inputs": { + "timestep": 0.05, + "scale": 0.025, + "seed": 42, + "vae": [ + "1896", + 2 + ] + }, + "class_type": "Set VAE Decoder Noise", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ Set VAE Decoder Noise" + } + }, + "2118": { + "inputs": { + "guiding_strength": 1, + "temporal_tile_size": 120, + "temporal_overlap": 32, + "temporal_overlap_cond_strength": 0.5, + "horizontal_tiles": 1, + "vertical_tiles": 1, + "spatial_overlap": 1, + "adain_factor": 0.25000000000000006, + "optional_negative_index": -1, + "optional_negative_index_strength": 1, + "per_tile_seed_offsets": "0", + "per_tile_use_negative_latents": "1", + "model": [ + "1896", + 0 + ], + "vae": [ + "1896", + 2 + ], + "noise": [ + "1507", + 0 + ], + "sampler": [ + "73", + 0 + ], + "sigmas": [ + "1949", + 0 + ], + "guider": [ + "1921", + 0 + ], + "latents": [ + "2119", + 0 + ], + "optional_cond_image": [ + "1960", + 0 + ], + "optional_positive_conditionings": [ + "2136", + 0 + ], + "optional_negative_index_latents": [ + "2143", + 0 + ] + }, + "class_type": "LTXVLoopingSampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Looping Sampler" + } + }, + "2119": { + "inputs": { + "width": [ + "2140", + 0 + ], + "height": [ + "2141", + 0 + ], + "length": 361, + "batch_size": 1 + }, + "class_type": "EmptyLTXVLatentVideo", + "_meta": { + "title": "EmptyLTXVLatentVideo" + } + }, + "2122": { + "inputs": { + "lora_name": "ltx-video-ICLoRA-detailer-13B-0.9.8", + "strength_model": 1, + "model": [ + "1896", + 0 + ] + }, + "class_type": "LoraLoaderModelOnly", + "_meta": { + "title": "LoraLoaderModelOnly" + } + }, + "2124": { + "inputs": { + "guiding_strength": 1, + "temporal_tile_size": 80, + "temporal_overlap": 24, + "temporal_overlap_cond_strength": 0.5, + "horizontal_tiles": 1, + "vertical_tiles": 1, + "spatial_overlap": 1, + "adain_factor": 0, + "optional_negative_index": -1, + "optional_negative_index_strength": 1, + "per_tile_seed_offsets": "0", + "per_tile_use_negative_latents": "1", + "model": [ + "2122", + 0 + ], + "vae": [ + "1896", + 2 + ], + "noise": [ + "1598", + 0 + ], + "sampler": [ + "1926", + 0 + ], + "sigmas": [ + "2073", + 0 + ], + "guider": [ + "1871", + 0 + ], + "latents": [ + "1691", + 0 + ], + "optional_guiding_latents": [ + "1691", + 0 + ] + }, + "class_type": "LTXVLoopingSampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Looping Sampler" + } + }, + "2127": { + "inputs": { + "horizontal_tiles": 2, + "vertical_tiles": 2, + "overlap": 5, + "last_frame_fix": false, + "vae": [ + "2117", + 0 + ], + "latents": [ + "2124", + 0 + ] + }, + "class_type": "LTXVTiledVAEDecode", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Tiled VAE Decode" + } + }, + "2136": { + "inputs": { + "prompts": "a chimpanzee walks in the jungle |\na chimpanzee stops and eats a snack |\na chimpanzee lays on the ground", + "clip": [ + "38", + 0 + ] + }, + "class_type": "MultiPromptProvider", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ Multi Prompt Provider" + } + }, + "2137": { + "inputs": { + "text": "", + "clip": [ + "38", + 0 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Prompt)" + } + }, + "2140": { + "inputs": { + "value": 768 + }, + "class_type": "PrimitiveInt", + "_meta": { + "title": "Width" + } + }, + "2141": { + "inputs": { + "value": 512 + }, + "class_type": "PrimitiveInt", + "_meta": { + "title": "Height" + } + }, + "2142": { + "inputs": { + "width": 512, + "height": 512, + "upscale_method": "bilinear", + "keep_proportion": false, + "divisible_by": 32, + "crop": "center", + "image": [ + "1960", + 0 + ], + "width_input": [ + "2140", + 0 + ], + "height_input": [ + "2141", + 0 + ] + }, + "class_type": "ImageResizeKJ", + "_meta": { + "title": "Resize Image" + } + }, + "2143": { + "inputs": { + "pixels": [ + "2142", + 0 + ], + "vae": [ + "1896", + 2 + ] + }, + "class_type": "VAEEncode", + "_meta": { + "title": "VAE Encode" + } + } + }, + "comfy_fork_version": "develop@ba9dad4", + "workspace_info": { + "id": "elBQFQknIoLYTEwIloQuw" + }, + "node_versions": { + "comfy-core": "0.3.20" + } + }, + "version": 0.4 +} diff --git a/example_workflows/ltxv-13b-i2v-mixed-multiscale.json b/example_workflows/ltxv-13b-i2v-mixed-multiscale.json index 36d9c74..d2a583b 100644 --- a/example_workflows/ltxv-13b-i2v-mixed-multiscale.json +++ b/example_workflows/ltxv-13b-i2v-mixed-multiscale.json @@ -116,7 +116,7 @@ "Node name for S&R": "LTXVLatentUpsamplerModelLoader" }, "widgets_values": [ - "ltxv-spatial-upscaler-0.9.7.safetensors", + "ltxv-spatial-upscaler-0.9.8.safetensors", true, false ] @@ -3049,7 +3049,7 @@ }, "1828": { "inputs": { - "upscale_model": "ltxv-spatial-upscaler-0.9.7.safetensors", + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", "spatial_upsample": true, "temporal_upsample": false }, diff --git a/example_workflows/ltxv-13b-upscale.json b/example_workflows/ltxv-13b-upscale.json new file mode 100644 index 0000000..2ab6787 --- /dev/null +++ b/example_workflows/ltxv-13b-upscale.json @@ -0,0 +1,2604 @@ +{ + "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", + "revision": 0, + "last_node_id": 2008, + "last_link_id": 5770, + "nodes": [ + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 722.5008544921875, + 2398.3359375 + ], + "size": [ + 317.832275390625, + 213.2843780517578 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 75 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3365 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "low quality, worst quality, deformed, distorted, disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, weird hand, ugly" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1894, + "type": "LTXVLoopingSampler", + "pos": [ + 2618.935791015625, + 2138.807861328125 + ], + "size": [ + 305.21484375, + 474 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5447 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5456 + }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 5453 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 5751 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5449 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 5452 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5744 + }, + { + "localized_name": "optional_cond_image", + "name": "optional_cond_image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "optional_guiding_latents", + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": 5745 + }, + { + "localized_name": "optional_positive_conditionings", + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": null + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { + "name": "guiding_strength" + }, + "link": null + }, + { + "localized_name": "temporal_tile_size", + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": null + }, + { + "localized_name": "temporal_overlap_cond_strength", + "name": "temporal_overlap_cond_strength", + "type": "FLOAT", + "widget": { + "name": "temporal_overlap_cond_strength" + }, + "link": null + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { + "name": "spatial_overlap" + }, + "link": null + }, + { + "localized_name": "adain_factor", + "name": "adain_factor", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "adain_factor" + }, + "link": null + }, + { + "localized_name": "optional_negative_index", + "name": "optional_negative_index", + "shape": 7, + "type": "INT", + "widget": { + "name": "optional_negative_index" + }, + "link": null + }, + { + "localized_name": "optional_negative_index_strength", + "name": "optional_negative_index_strength", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "optional_negative_index_strength" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "links": [ + 5762 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 1, + 64, + 16, + 0.25000000000000006, + 2, + 2, + 3, + 0.25000000000000006, + -1, + 1 + ] + }, + { + "id": 1998, + "type": "LTXVLatentUpsamplerModelLoader", + "pos": [ + 1485.9312744140625, + 2118.88525390625 + ], + "size": [ + 344.3999938964844, + 106 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "COMBO", + "widget": { + "name": "upscale_model" + }, + "link": null + }, + { + "localized_name": "spatial_upsample", + "name": "spatial_upsample", + "type": "BOOLEAN", + "widget": { + "name": "spatial_upsample" + }, + "link": null + }, + { + "localized_name": "temporal_upsample", + "name": "temporal_upsample", + "type": "BOOLEAN", + "widget": { + "name": "temporal_upsample" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "UPSCALE_MODEL", + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 5753 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsamplerModelLoader" + }, + "widgets_values": [ + "ltxv-spatial-upscaler-0.9.8.safetensors", + true, + false + ] + }, + { + "id": 1999, + "type": "LTXVLatentUpsampler", + "pos": [ + 1555.3997802734375, + 2777.468017578125 + ], + "size": [ + 235.1999969482422, + 66 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 5754 + }, + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 5753 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5755 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 5756 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsampler" + }, + "widgets_values": [] + }, + { + "id": 1996, + "type": "VAEEncode", + "pos": [ + 1146.9952392578125, + 2610.52783203125 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "localized_name": "pixels", + "name": "pixels", + "type": "IMAGE", + "link": 5749 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5748 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 5754 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 717.5663452148438, + 2114.04638671875 + ], + "size": [ + 307.2346496582031, + 204.2556610107422 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 74 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3364 + ] + } + ], + "title": "CLIP Text Encode (Positive Prompt)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1241, + "type": "LTXVConditioning", + "pos": [ + 1082.930419921875, + 2271.91064453125 + ], + "size": [ + 328.21636962890625, + 78 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 3364 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 3365 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5274 + ] + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5275 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "LTXVConditioning" + }, + "widgets_values": [ + 24.000000000000004 + ] + }, + { + "id": 38, + "type": "CLIPLoader", + "pos": [ + 365.0711975097656, + 2209.521484375 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + }, + "link": null + }, + { + "localized_name": "type", + "name": "type", + "type": "COMBO", + "widget": { + "name": "type" + }, + "link": null + }, + { + "localized_name": "device", + "name": "device", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "device" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 74, + 75 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "t5xxl_fp8.safetensors", + "ltxv", + "default" + ] + }, + { + "id": 1990, + "type": "LTXVTiledVAEDecode", + "pos": [ + 3016.148193359375, + 2142.771728515625 + ], + "size": [ + 290.6636657714844, + 150 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5769 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5762 + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "overlap", + "name": "overlap", + "type": "INT", + "widget": { + "name": "overlap" + }, + "link": null + }, + { + "localized_name": "last_frame_fix", + "name": "last_frame_fix", + "type": "BOOLEAN", + "widget": { + "name": "last_frame_fix" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 5711 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 5, + false + ] + }, + { + "id": 1599, + "type": "VHS_VideoCombine", + "pos": [ + 3926.94921875, + 2162.355224609375 + ], + "size": [ + 610.8043212890625, + 741.8695678710938 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 5739 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + }, + { + "localized_name": "loop_count", + "name": "loop_count", + "type": "INT", + "widget": { + "name": "loop_count" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + }, + { + "localized_name": "pingpong", + "name": "pingpong", + "type": "BOOLEAN", + "widget": { + "name": "pingpong" + }, + "link": null + }, + { + "localized_name": "save_output", + "name": "save_output", + "type": "BOOLEAN", + "widget": { + "name": "save_output" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Filenames", + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine", + "cnr_id": "comfyui-videohelpersuite", + "ver": "2c25b8b53835aaeb63f831b3137c705cf9f85dce" + }, + "widgets_values": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-hd", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 18, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "ltxv-hd_00001.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "ltxv-hd_00001.png", + "fullpath": "/home/michael/src/comfyui_worker_serving/src/comfyui/temp/ltxv-hd_00001.mp4" + }, + "muted": true + } + } + }, + { + "id": 2003, + "type": "Reroute", + "pos": [ + 3891.437255859375, + 2089.540283203125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5763 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5765 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2004, + "type": "Reroute", + "pos": [ + 4466.16455078125, + 2084.887939453125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5765 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5766 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1992, + "type": "Reroute", + "pos": [ + 2468.88232421875, + 2783.16748046875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5756 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5744, + 5745 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1598, + "type": "RandomNoise", + "pos": [ + 1930.61865234375, + 2137.015625 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "localized_name": "noise_seed", + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "NOISE", + "name": "NOISE", + "type": "NOISE", + "links": [ + 5453 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.30", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1256, + "fixed" + ] + }, + { + "id": 1813, + "type": "STGGuiderAdvanced", + "pos": [ + 1941.501953125, + 2278.861083984375 + ], + "size": [ + 278.79998779296875, + 262 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5448 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5274 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 5275 + }, + { + "localized_name": "preset", + "name": "preset", + "shape": 7, + "type": "STG_ADVANCED_PRESET", + "link": null + }, + { + "localized_name": "skip_steps_sigma_threshold", + "name": "skip_steps_sigma_threshold", + "type": "FLOAT", + "widget": { + "name": "skip_steps_sigma_threshold" + }, + "link": null + }, + { + "localized_name": "cfg_star_rescale", + "name": "cfg_star_rescale", + "type": "BOOLEAN", + "widget": { + "name": "cfg_star_rescale" + }, + "link": null + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { + "name": "sigmas" + }, + "link": null + }, + { + "localized_name": "cfg_values", + "name": "cfg_values", + "type": "STRING", + "widget": { + "name": "cfg_values" + }, + "link": null + }, + { + "localized_name": "stg_scale_values", + "name": "stg_scale_values", + "type": "STRING", + "widget": { + "name": "stg_scale_values" + }, + "link": null + }, + { + "localized_name": "stg_rescale_values", + "name": "stg_rescale_values", + "type": "STRING", + "widget": { + "name": "stg_rescale_values" + }, + "link": null + }, + { + "localized_name": "stg_layers_indices", + "name": "stg_layers_indices", + "type": "STRING", + "widget": { + "name": "stg_layers_indices" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 5452 + ] + } + ], + "properties": { + "Node name for S&R": "STGGuiderAdvanced" + }, + "widgets_values": [ + 0.9970000000000002, + true, + "1", + "1", + "0", + "1", + "[42]" + ] + }, + { + "id": 1989, + "type": "StringToFloatList", + "pos": [ + 1954.6505126953125, + 2621.100830078125 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "localized_name": "string", + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5740 + ] + } + ], + "properties": { + "cnr_id": "comfyui-kjnodes", + "ver": "0addfc6101f7a834c7fb6e0a1b26529360ab5350", + "Node name for S&R": "StringToFloatList" + }, + "widgets_values": [ + "0.99, 0.9094, 0.0" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1889, + "type": "FloatToSigmas", + "pos": [ + 2219.18115234375, + 2627.6787109375 + ], + "size": [ + 216.59999084472656, + 26 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "localized_name": "float_list", + "name": "float_list", + "type": "FLOAT", + "link": 5740 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5449 + ] + } + ], + "properties": { + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8", + "Node name for S&R": "FloatToSigmas" + }, + "widgets_values": [] + }, + { + "id": 1997, + "type": "KSamplerSelect", + "pos": [ + 2223.688232421875, + 2715.1572265625 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "sampler_name", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SAMPLER", + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 5751 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_ancestral" + ] + }, + { + "id": 44, + "type": "CheckpointLoaderSimple", + "pos": [ + 700.7203369140625, + 2717.640625 + ], + "size": [ + 339.6689147949219, + 126.58426666259766 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { + "name": "ckpt_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5445 + ] + }, + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [] + }, + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 2, + "links": [ + 5456, + 5748, + 5755, + 5767 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "ltxv-13b-0.9.8-distilled.safetensors" + ] + }, + { + "id": 2006, + "type": "Reroute", + "pos": [ + 1307.743408203125, + 2852.38916015625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5767 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5768 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2007, + "type": "Reroute", + "pos": [ + 2954.07861328125, + 2859.37255859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5768 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5769 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1902, + "type": "VHS_VideoCombine", + "pos": [ + 4568.09326171875, + 2160.841796875 + ], + "size": [ + 1224.197998046875, + 749.3993530273438 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 5766 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + }, + { + "localized_name": "loop_count", + "name": "loop_count", + "type": "INT", + "widget": { + "name": "loop_count" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + }, + { + "localized_name": "pingpong", + "name": "pingpong", + "type": "BOOLEAN", + "widget": { + "name": "pingpong" + }, + "link": null + }, + { + "localized_name": "save_output", + "name": "save_output", + "type": "BOOLEAN", + "widget": { + "name": "save_output" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Filenames", + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine", + "cnr_id": "comfyui-videohelpersuite", + "ver": "2c25b8b53835aaeb63f831b3137c705cf9f85dce" + }, + "widgets_values": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-hd-sd", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 18, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "ltxv-hd-sd_00002.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "ltxv-hd-sd_00002.png", + "fullpath": "/home/michael/src/comfyui_worker_serving/src/comfyui/temp/ltxv-hd-sd_00002.mp4" + }, + "muted": true + } + } + }, + { + "id": 1699, + "type": "LTXVFilmGrain", + "pos": [ + 3346.66015625, + 2149.525634765625 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 5711 + }, + { + "localized_name": "grain_intensity", + "name": "grain_intensity", + "type": "FLOAT", + "widget": { + "name": "grain_intensity" + }, + "link": null + }, + { + "localized_name": "saturation", + "name": "saturation", + "type": "FLOAT", + "widget": { + "name": "saturation" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5667, + 5739 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVFilmGrain" + }, + "widgets_values": [ + 0.010000000000000002, + 0.5 + ] + }, + { + "id": 1895, + "type": "LoraLoaderModelOnly", + "pos": [ + 1089.3231201171875, + 2413.4921875 + ], + "size": [ + 313.3110046386719, + 82 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5445 + }, + { + "localized_name": "lora_name", + "name": "lora_name", + "type": "COMBO", + "widget": { + "name": "lora_name" + }, + "link": null + }, + { + "localized_name": "strength_model", + "name": "strength_model", + "type": "FLOAT", + "widget": { + "name": "strength_model" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 5447, + 5448 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltx-video-ICLoRA-detailer-13B-0.9.8", + 1.5000000000000002 + ] + }, + { + "id": 1995, + "type": "VHS_LoadVideo", + "pos": [ + 383.91558837890625, + 2422.13671875 + ], + "size": [ + 252.056640625, + 479.037841796875 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "video", + "name": "video", + "type": "COMBO", + "widget": { + "name": "video" + }, + "link": null + }, + { + "localized_name": "force_rate", + "name": "force_rate", + "type": "FLOAT", + "widget": { + "name": "force_rate" + }, + "link": null + }, + { + "localized_name": "custom_width", + "name": "custom_width", + "type": "INT", + "widget": { + "name": "custom_width" + }, + "link": null + }, + { + "localized_name": "custom_height", + "name": "custom_height", + "type": "INT", + "widget": { + "name": "custom_height" + }, + "link": null + }, + { + "localized_name": "frame_load_cap", + "name": "frame_load_cap", + "type": "INT", + "widget": { + "name": "frame_load_cap" + }, + "link": null + }, + { + "localized_name": "skip_first_frames", + "name": "skip_first_frames", + "type": "INT", + "widget": { + "name": "skip_first_frames" + }, + "link": null + }, + { + "localized_name": "select_every_nth", + "name": "select_every_nth", + "type": "INT", + "widget": { + "name": "select_every_nth" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5749, + 5770 + ] + }, + { + "localized_name": "frame_count", + "name": "frame_count", + "type": "INT", + "links": null + }, + { + "localized_name": "audio", + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "localized_name": "video_info", + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "AnimateDiff_00151.mp4", + "force_rate": 0, + "custom_width": 0, + "custom_height": 0, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "format": "LTXV", + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_00151.mp4", + "type": "input", + "format": "video/mp4", + "force_rate": 0, + "custom_width": 0, + "custom_height": 0, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1 + } + } + } + }, + { + "id": 1901, + "type": "ImageConcanate", + "pos": [ + 3582.269287109375, + 2386.01611328125 + ], + "size": [ + 270, + 102 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "localized_name": "image1", + "name": "image1", + "type": "IMAGE", + "link": 5667 + }, + { + "localized_name": "image2", + "name": "image2", + "type": "IMAGE", + "link": 5770 + }, + { + "localized_name": "direction", + "name": "direction", + "type": "COMBO", + "widget": { + "name": "direction" + }, + "link": null + }, + { + "localized_name": "match_image_size", + "name": "match_image_size", + "type": "BOOLEAN", + "widget": { + "name": "match_image_size" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5763 + ] + } + ], + "properties": { + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8", + "Node name for S&R": "ImageConcanate" + }, + "widgets_values": [ + "right", + true + ] + }, + { + "id": 2008, + "type": "Note", + "pos": [ + 4842.8349609375, + 1924.749267578125 + ], + "size": [ + 566.965087890625, + 107.72560119628906 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Left is the generated video, right is the original one." + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 74, + 38, + 0, + 6, + 0, + "CLIP" + ], + [ + 75, + 38, + 0, + 7, + 0, + "CLIP" + ], + [ + 3364, + 6, + 0, + 1241, + 0, + "CONDITIONING" + ], + [ + 3365, + 7, + 0, + 1241, + 1, + "CONDITIONING" + ], + [ + 5274, + 1241, + 0, + 1813, + 1, + "CONDITIONING" + ], + [ + 5275, + 1241, + 1, + 1813, + 2, + "CONDITIONING" + ], + [ + 5445, + 44, + 0, + 1895, + 0, + "MODEL" + ], + [ + 5447, + 1895, + 0, + 1894, + 0, + "MODEL" + ], + [ + 5448, + 1895, + 0, + 1813, + 0, + "MODEL" + ], + [ + 5449, + 1889, + 0, + 1894, + 4, + "SIGMAS" + ], + [ + 5452, + 1813, + 0, + 1894, + 5, + "GUIDER" + ], + [ + 5453, + 1598, + 0, + 1894, + 2, + "NOISE" + ], + [ + 5456, + 44, + 2, + 1894, + 1, + "VAE" + ], + [ + 5667, + 1699, + 0, + 1901, + 0, + "IMAGE" + ], + [ + 5711, + 1990, + 0, + 1699, + 0, + "IMAGE" + ], + [ + 5739, + 1699, + 0, + 1599, + 0, + "IMAGE" + ], + [ + 5740, + 1989, + 0, + 1889, + 0, + "FLOAT" + ], + [ + 5744, + 1992, + 0, + 1894, + 6, + "LATENT" + ], + [ + 5745, + 1992, + 0, + 1894, + 8, + "LATENT" + ], + [ + 5748, + 44, + 2, + 1996, + 1, + "VAE" + ], + [ + 5749, + 1995, + 0, + 1996, + 0, + "IMAGE" + ], + [ + 5751, + 1997, + 0, + 1894, + 3, + "SAMPLER" + ], + [ + 5753, + 1998, + 0, + 1999, + 1, + "UPSCALE_MODEL" + ], + [ + 5754, + 1996, + 0, + 1999, + 0, + "LATENT" + ], + [ + 5755, + 44, + 2, + 1999, + 2, + "VAE" + ], + [ + 5756, + 1999, + 0, + 1992, + 0, + "*" + ], + [ + 5762, + 1894, + 0, + 1990, + 1, + "LATENT" + ], + [ + 5763, + 1901, + 0, + 2003, + 0, + "*" + ], + [ + 5765, + 2003, + 0, + 2004, + 0, + "*" + ], + [ + 5766, + 2004, + 0, + 1902, + 0, + "IMAGE" + ], + [ + 5767, + 44, + 2, + 2006, + 0, + "*" + ], + [ + 5768, + 2006, + 0, + 2007, + 0, + "*" + ], + [ + 5769, + 2007, + 0, + 1990, + 0, + "VAE" + ], + [ + 5770, + 1995, + 0, + 1901, + 1, + "IMAGE" + ] + ], + "groups": [ + { + "id": 41, + "title": "Setup", + "bounding": [ + 329.9997863769531, + 2040.44580078125, + 1101.9881591796875, + 875.8268432617188 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {}, + "nodes": [ + 7, + 1996, + 6, + 1241, + 38, + 44, + 2006, + 1895, + 1995 + ] + }, + { + "id": 42, + "title": "Add Details", + "bounding": [ + 1880.87255859375, + 2053.541259765625, + 3920.83447265625, + 860.0048217773438 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {}, + "nodes": [ + 1894, + 1990, + 1599, + 2003, + 2004, + 1992, + 1598, + 1813, + 1989, + 1889, + 1997, + 2007, + 1902, + 1699, + 1901 + ] + }, + { + "id": 43, + "title": "Latent Upscaler", + "bounding": [ + 1479.4404296875, + 2047.81640625, + 375.705078125, + 868.5703125 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {}, + "nodes": [ + 1998, + 1999 + ] + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.6303940863128579, + "offset": [ + -3473.6268617369606, + -1759.5003971014191 + ] + }, + "frontendVersion": "1.17.11", + "VHS_latentpreview": true, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true, + "prompt": { + "6": { + "inputs": { + "text": "", + "clip": [ + "38", + 0 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Positive Prompt)" + } + }, + "7": { + "inputs": { + "text": "low quality, worst quality, deformed, distorted, disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, weird hand, ugly", + "clip": [ + "38", + 0 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Negative Prompt)" + } + }, + "38": { + "inputs": { + "clip_name": "t5xxl_fp8.safetensors", + "type": "ltxv", + "device": "default" + }, + "class_type": "CLIPLoader", + "_meta": { + "title": "Load CLIP" + } + }, + "44": { + "inputs": { + "ckpt_name": "ltxv-13b-0.9.8-distilled.safetensors" + }, + "class_type": "CheckpointLoaderSimple", + "_meta": { + "title": "Load Checkpoint" + } + }, + "1241": { + "inputs": { + "frame_rate": 24.000000000000004, + "positive": [ + "6", + 0 + ], + "negative": [ + "7", + 0 + ] + }, + "class_type": "LTXVConditioning", + "_meta": { + "title": "LTXVConditioning" + } + }, + "1598": { + "inputs": { + "noise_seed": 1256 + }, + "class_type": "RandomNoise", + "_meta": { + "title": "RandomNoise" + } + }, + "1599": { + "inputs": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-hd", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 18, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "images": [ + "1699", + 0 + ] + }, + "class_type": "VHS_VideoCombine", + "_meta": { + "title": "Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "1699": { + "inputs": { + "grain_intensity": 0.010000000000000002, + "saturation": 0.5, + "images": [ + "1990", + 0 + ] + }, + "class_type": "LTXVFilmGrain", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Film Grain" + } + }, + "1813": { + "inputs": { + "skip_steps_sigma_threshold": 0.9970000000000002, + "cfg_star_rescale": true, + "sigmas": "1", + "cfg_values": "1", + "stg_scale_values": "0", + "stg_rescale_values": "1", + "stg_layers_indices": "[42]", + "model": [ + "1895", + 0 + ], + "positive": [ + "1241", + 0 + ], + "negative": [ + "1241", + 1 + ] + }, + "class_type": "STGGuiderAdvanced", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Guider Advanced" + } + }, + "1889": { + "inputs": { + "float_list": [ + "1989", + 0 + ] + }, + "class_type": "FloatToSigmas", + "_meta": { + "title": "Float To Sigmas" + } + }, + "1894": { + "inputs": { + "guiding_strength": 1, + "temporal_tile_size": 64, + "temporal_overlap": 16, + "temporal_overlap_cond_strength": 0.25000000000000006, + "horizontal_tiles": 2, + "vertical_tiles": 2, + "spatial_overlap": 3, + "adain_factor": 0.25000000000000006, + "optional_negative_index": -1, + "optional_negative_index_strength": 1, + "model": [ + "1895", + 0 + ], + "vae": [ + "44", + 2 + ], + "noise": [ + "1598", + 0 + ], + "sampler": [ + "1997", + 0 + ], + "sigmas": [ + "1889", + 0 + ], + "guider": [ + "1813", + 0 + ], + "latents": [ + "1999", + 0 + ], + "optional_guiding_latents": [ + "1999", + 0 + ] + }, + "class_type": "LTXVLoopingSampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Looping Sampler" + } + }, + "1895": { + "inputs": { + "lora_name": "ltx-video-ICLoRA-detailer-13B-0.9.8", + "strength_model": 1.5000000000000002, + "model": [ + "44", + 0 + ] + }, + "class_type": "LoraLoaderModelOnly", + "_meta": { + "title": "LoraLoaderModelOnly" + } + }, + "1901": { + "inputs": { + "direction": "right", + "match_image_size": true, + "image1": [ + "1699", + 0 + ], + "image2": [ + "1995", + 0 + ] + }, + "class_type": "ImageConcanate", + "_meta": { + "title": "Image Concatenate" + } + }, + "1902": { + "inputs": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-hd-sd", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 18, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "images": [ + "1901", + 0 + ] + }, + "class_type": "VHS_VideoCombine", + "_meta": { + "title": "Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "1989": { + "inputs": { + "string": "0.99, 0.9094, 0.0" + }, + "class_type": "StringToFloatList", + "_meta": { + "title": "String to Float List" + } + }, + "1990": { + "inputs": { + "horizontal_tiles": 2, + "vertical_tiles": 2, + "overlap": 5, + "last_frame_fix": false, + "vae": [ + "44", + 2 + ], + "latents": [ + "1894", + 0 + ] + }, + "class_type": "LTXVTiledVAEDecode", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Tiled VAE Decode" + } + }, + "1995": { + "inputs": { + "video": "AnimateDiff_00151.mp4", + "force_rate": 0, + "custom_width": 0, + "custom_height": 0, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "format": "LTXV" + }, + "class_type": "VHS_LoadVideo", + "_meta": { + "title": "Load Video (Upload) πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "1996": { + "inputs": { + "pixels": [ + "1995", + 0 + ], + "vae": [ + "44", + 2 + ] + }, + "class_type": "VAEEncode", + "_meta": { + "title": "VAE Encode" + } + }, + "1997": { + "inputs": { + "sampler_name": "euler_ancestral" + }, + "class_type": "KSamplerSelect", + "_meta": { + "title": "KSamplerSelect" + } + }, + "1998": { + "inputs": { + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", + "spatial_upsample": true, + "temporal_upsample": false + }, + "class_type": "LTXVLatentUpsamplerModelLoader", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Latent Upsampler Model Loader" + } + }, + "1999": { + "inputs": { + "samples": [ + "1996", + 0 + ], + "upscale_model": [ + "1998", + 0 + ], + "vae": [ + "44", + 2 + ] + }, + "class_type": "LTXVLatentUpsampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Latent Upsampler" + } + } + }, + "comfy_fork_version": "develop@c8755c7d", + "workspace_info": { + "id": "elBQFQknIoLYTEwIloQuw" + }, + "node_versions": { + "comfy-core": "0.3.30", + "comfyui-kjnodes": "1.0.8" + } + }, + "version": 0.4 +} diff --git a/example_workflows/ltxv-13b-v2v-long-depth.json b/example_workflows/ltxv-13b-v2v-long-depth.json new file mode 100644 index 0000000..5f2a6ad --- /dev/null +++ b/example_workflows/ltxv-13b-v2v-long-depth.json @@ -0,0 +1,4864 @@ +{ + "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", + "revision": 0, + "last_node_id": 2149, + "last_link_id": 6004, + "nodes": [ + { + "id": 1335, + "type": "VAEDecode", + "pos": [ + 4524.71875, + 2618.7578125 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 6003 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5363 + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3578 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.29", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1926, + "type": "KSamplerSelect", + "pos": [ + 7206.24755859375, + 2623.925537109375 + ], + "size": [ + 251.94110107421875, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "localized_name": "sampler_name", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SAMPLER", + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 5904 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_ancestral" + ] + }, + { + "id": 2038, + "type": "Reroute", + "pos": [ + 6732.23095703125, + 2231.4091796875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5742 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5740 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2037, + "type": "Reroute", + "pos": [ + 6729.97705078125, + 2189.18310546875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5741 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5739 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2073, + "type": "FloatToSigmas", + "pos": [ + 7289.4375, + 2834.601318359375 + ], + "size": [ + 216.59999084472656, + 26 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "localized_name": "float_list", + "name": "float_list", + "type": "FLOAT", + "link": 5782 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5905 + ] + } + ], + "properties": { + "Node name for S&R": "FloatToSigmas", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [] + }, + { + "id": 1952, + "type": "StringToFloatList", + "pos": [ + 3031.37158203125, + 2693.744384765625 + ], + "size": [ + 290, + 130 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "string", + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5567 + ] + } + ], + "properties": { + "Node name for S&R": "StringToFloatList", + "cnr_id": "comfyui-kjnodes", + "ver": "0addfc6101f7a834c7fb6e0a1b26529360ab5350" + }, + "widgets_values": [ + "1.0000, 0.9937, 0.9875, 0.9812, 0.9750, 0.9094, 0.7250, 0.4219, 0.0\n" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1598, + "type": "RandomNoise", + "pos": [ + 7275.9599609375, + 2305.344482421875 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "localized_name": "noise_seed", + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "NOISE", + "name": "NOISE", + "type": "NOISE", + "links": [ + 5903 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.30", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1625, + "fixed" + ] + }, + { + "id": 2102, + "type": "Reroute", + "pos": [ + 5964.9345703125, + 2899.48828125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5838 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5839 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2101, + "type": "Reroute", + "pos": [ + 4516.3046875, + 2895.996337890625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 48, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6004 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5838 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1973, + "type": "VHS_VideoCombine", + "pos": [ + 8417.9189453125, + 2240.651123046875 + ], + "size": [ + 770.2554931640625, + 334 + ], + "flags": {}, + "order": 56, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 5920 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + }, + { + "localized_name": "loop_count", + "name": "loop_count", + "type": "INT", + "widget": { + "name": "loop_count" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + }, + { + "localized_name": "pingpong", + "name": "pingpong", + "type": "BOOLEAN", + "widget": { + "name": "pingpong" + }, + "link": null + }, + { + "localized_name": "save_output", + "name": "save_output", + "type": "BOOLEAN", + "widget": { + "name": "save_output" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Filenames", + "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": "ltxv-ic-lora", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "ltxv-ic-lora_00025.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "ltxv-ic-lora_00025.png", + "fullpath": "/home/michael/src/comfyui_worker_serving/src/comfyui/output/ltxv-ic-lora_00025.mp4" + } + } + } + }, + { + "id": 2116, + "type": "STGAdvancedPresets", + "pos": [ + 6563.388671875, + 2521.9775390625 + ], + "size": [ + 292.0787048339844, + 58 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "localized_name": "preset", + "name": "preset", + "type": "COMBO", + "widget": { + "name": "preset" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "STG_ADVANCED_PRESET", + "name": "STG_ADVANCED_PRESET", + "type": "STG_ADVANCED_PRESET", + "links": [ + 5873 + ] + } + ], + "properties": { + "Node name for S&R": "STGAdvancedPresets" + }, + "widgets_values": [ + "13b Distilled" + ] + }, + { + "id": 2117, + "type": "Set VAE Decoder Noise", + "pos": [ + 7985.1396484375, + 2245.2392578125 + ], + "size": [ + 294.1568298339844, + 130 + ], + "flags": {}, + "order": 49, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5874 + }, + { + "localized_name": "timestep", + "name": "timestep", + "type": "FLOAT", + "widget": { + "name": "timestep" + }, + "link": null + }, + { + "localized_name": "scale", + "name": "scale", + "type": "FLOAT", + "widget": { + "name": "scale" + }, + "link": null + }, + { + "localized_name": "seed", + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 5917 + ] + } + ], + "properties": { + "Node name for S&R": "Set VAE Decoder Noise" + }, + "widgets_values": [ + 0.05, + 0.025, + 42, + "fixed" + ] + }, + { + "id": 2096, + "type": "Reroute", + "pos": [ + 3950, + 2050 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5829 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5831, + 5995 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1921, + "type": "STGGuiderAdvanced", + "pos": [ + 3176.751953125, + 2356.80322265625 + ], + "size": [ + 278.79998779296875, + 262 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5992 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5584 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 5585 + }, + { + "localized_name": "preset", + "name": "preset", + "shape": 7, + "type": "STG_ADVANCED_PRESET", + "link": 5613 + }, + { + "localized_name": "skip_steps_sigma_threshold", + "name": "skip_steps_sigma_threshold", + "type": "FLOAT", + "widget": { + "name": "skip_steps_sigma_threshold" + }, + "link": null + }, + { + "localized_name": "cfg_star_rescale", + "name": "cfg_star_rescale", + "type": "BOOLEAN", + "widget": { + "name": "cfg_star_rescale" + }, + "link": null + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { + "name": "sigmas" + }, + "link": null + }, + { + "localized_name": "cfg_values", + "name": "cfg_values", + "type": "STRING", + "widget": { + "name": "cfg_values" + }, + "link": null + }, + { + "localized_name": "stg_scale_values", + "name": "stg_scale_values", + "type": "STRING", + "widget": { + "name": "stg_scale_values" + }, + "link": null + }, + { + "localized_name": "stg_rescale_values", + "name": "stg_rescale_values", + "type": "STRING", + "widget": { + "name": "stg_rescale_values" + }, + "link": null + }, + { + "localized_name": "stg_layers_indices", + "name": "stg_layers_indices", + "type": "STRING", + "widget": { + "name": "stg_layers_indices" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 5999 + ] + } + ], + "properties": { + "Node name for S&R": "STGGuiderAdvanced" + }, + "widgets_values": [ + 0.9970000000000002, + true, + "1", + "1", + "0,0,0,0,0,0", + "1", + "[25]" + ] + }, + { + "id": 2072, + "type": "StringToFloatList", + "pos": [ + 6805.841796875, + 2835.313232421875 + ], + "size": [ + 395.74224853515625, + 88 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "string", + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5782 + ] + } + ], + "properties": { + "Node name for S&R": "StringToFloatList", + "cnr_id": "comfyui-kjnodes", + "ver": "0addfc6101f7a834c7fb6e0a1b26529360ab5350" + }, + "widgets_values": [ + "0.99, 0.9094, 0.0" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1871, + "type": "STGGuiderAdvanced", + "pos": [ + 6889.51904296875, + 2431.979248046875 + ], + "size": [ + 278.79998779296875, + 262 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5896 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5739 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 5740 + }, + { + "localized_name": "preset", + "name": "preset", + "shape": 7, + "type": "STG_ADVANCED_PRESET", + "link": 5873 + }, + { + "localized_name": "skip_steps_sigma_threshold", + "name": "skip_steps_sigma_threshold", + "type": "FLOAT", + "widget": { + "name": "skip_steps_sigma_threshold" + }, + "link": null + }, + { + "localized_name": "cfg_star_rescale", + "name": "cfg_star_rescale", + "type": "BOOLEAN", + "widget": { + "name": "cfg_star_rescale" + }, + "link": null + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { + "name": "sigmas" + }, + "link": null + }, + { + "localized_name": "cfg_values", + "name": "cfg_values", + "type": "STRING", + "widget": { + "name": "cfg_values" + }, + "link": null + }, + { + "localized_name": "stg_scale_values", + "name": "stg_scale_values", + "type": "STRING", + "widget": { + "name": "stg_scale_values" + }, + "link": null + }, + { + "localized_name": "stg_rescale_values", + "name": "stg_rescale_values", + "type": "STRING", + "widget": { + "name": "stg_rescale_values" + }, + "link": null + }, + { + "localized_name": "stg_layers_indices", + "name": "stg_layers_indices", + "type": "STRING", + "widget": { + "name": "stg_layers_indices" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 5906 + ] + } + ], + "properties": { + "Node name for S&R": "STGGuiderAdvanced" + }, + "widgets_values": [ + 0.9970000000000002, + true, + "1", + "1", + "0", + "1", + "[42]" + ] + }, + { + "id": 2124, + "type": "LTXVLoopingSampler", + "pos": [ + 7587.734375, + 2224.18359375 + ], + "size": [ + 365.21484375, + 546 + ], + "flags": {}, + "order": 54, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5901 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5902 + }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 5903 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 5904 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5905 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 5906 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5961 + }, + { + "localized_name": "optional_cond_image", + "name": "optional_cond_image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "optional_guiding_latents", + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": 5912 + }, + { + "localized_name": "optional_positive_conditionings", + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": null + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { + "name": "guiding_strength" + }, + "link": null + }, + { + "localized_name": "temporal_tile_size", + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": null + }, + { + "localized_name": "temporal_overlap_cond_strength", + "name": "temporal_overlap_cond_strength", + "type": "FLOAT", + "widget": { + "name": "temporal_overlap_cond_strength" + }, + "link": null + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { + "name": "spatial_overlap" + }, + "link": null + }, + { + "localized_name": "adain_factor", + "name": "adain_factor", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "adain_factor" + }, + "link": null + }, + { + "localized_name": "optional_negative_index", + "name": "optional_negative_index", + "shape": 7, + "type": "INT", + "widget": { + "name": "optional_negative_index" + }, + "link": null + }, + { + "localized_name": "optional_negative_index_strength", + "name": "optional_negative_index_strength", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "optional_negative_index_strength" + }, + "link": null + }, + { + "localized_name": "per_tile_seed_offsets", + "name": "per_tile_seed_offsets", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_seed_offsets" + }, + "link": null + }, + { + "localized_name": "per_tile_use_negative_latents", + "name": "per_tile_use_negative_latents", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_use_negative_latents" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "links": [ + 5918 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 1, + 80, + 24, + 0.5, + 1, + 1, + 1, + 0, + -1, + 1, + "0", + "1" + ] + }, + { + "id": 2127, + "type": "LTXVTiledVAEDecode", + "pos": [ + 7989.189453125, + 2440.381103515625 + ], + "size": [ + 290.6636657714844, + 150 + ], + "flags": {}, + "order": 55, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5917 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 5918 + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "overlap", + "name": "overlap", + "type": "INT", + "widget": { + "name": "overlap" + }, + "link": null + }, + { + "localized_name": "last_frame_fix", + "name": "last_frame_fix", + "type": "BOOLEAN", + "widget": { + "name": "last_frame_fix" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 5920 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 5, + false + ] + }, + { + "id": 2129, + "type": "Reroute", + "pos": [ + 2004.1419677734375, + 2654.619873046875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5941 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5938 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2094, + "type": "Reroute", + "pos": [ + 2371.384765625, + 2891.617919921875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5825 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5826, + 5979 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2122, + "type": "LoraLoaderModelOnly", + "pos": [ + 6512.681640625, + 2314.541259765625 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5898 + }, + { + "localized_name": "lora_name", + "name": "lora_name", + "type": "COMBO", + "widget": { + "name": "lora_name" + }, + "link": null + }, + { + "localized_name": "strength_model", + "name": "strength_model", + "type": "FLOAT", + "widget": { + "name": "strength_model" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 5896, + 5901 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltx-video-ICLoRA-detailer-13B-0.9.8", + 1 + ] + }, + { + "id": 2125, + "type": "Reroute", + "pos": [ + 7292.6181640625, + 2481.50341796875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5971 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5912, + 5961 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1241, + "type": "LTXVConditioning", + "pos": [ + 2569.50537109375, + 2276.412109375 + ], + "size": [ + 328.21636962890625, + 78 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5967 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 3365 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5584, + 5715 + ] + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5585, + 5716 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "LTXVConditioning" + }, + "widgets_values": [ + 24.000000000000004 + ] + }, + { + "id": 38, + "type": "CLIPLoader", + "pos": [ + 1916.6739501953125, + 2303.91259765625 + ], + "size": [ + 245.33026123046875, + 106 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + }, + "link": null + }, + { + "localized_name": "type", + "name": "type", + "type": "COMBO", + "widget": { + "name": "type" + }, + "link": null + }, + { + "localized_name": "device", + "name": "device", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "device" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5603, + 5964, + 5966 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "ltxv", + "default" + ] + }, + { + "id": 1949, + "type": "PrintSigmas", + "pos": [ + 3674.795654296875, + 2763.217529296875 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5641 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5998 + ] + } + ], + "properties": { + "Node name for S&R": "PrintSigmas" + }, + "widgets_values": [] + }, + { + "id": 1953, + "type": "FloatToSigmas", + "pos": [ + 3391.44384765625, + 2769.8349609375 + ], + "size": [ + 216.59999084472656, + 26 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "localized_name": "float_list", + "name": "float_list", + "type": "FLOAT", + "link": 5567 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 5641 + ] + } + ], + "properties": { + "Node name for S&R": "FloatToSigmas", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [] + }, + { + "id": 2022, + "type": "Reroute", + "pos": [ + 3229.825439453125, + 1977.3233642578125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5715 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5741 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2023, + "type": "Reroute", + "pos": [ + 3223.71728515625, + 2017.1053466796875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5716 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5742 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2097, + "type": "Note", + "pos": [ + 2233.589111328125, + 2181.5400390625 + ], + "size": [ + 285.2653503417969, + 88 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Leave the positive conditioning text blank. Use multi prompt provider node on the right." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2095, + "type": "Reroute", + "pos": [ + 3925.002197265625, + 2883.0654296875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5826 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5828 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 73, + "type": "KSamplerSelect", + "pos": [ + 3586.90478515625, + 2493.794189453125 + ], + "size": [ + 251.94110107421875, + 58 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "sampler_name", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SAMPLER", + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 5997 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_ancestral" + ] + }, + { + "id": 1896, + "type": "CheckpointLoaderSimple", + "pos": [ + 1923.9993896484375, + 2810.05615234375 + ], + "size": [ + 315, + 98 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { + "name": "ckpt_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5941 + ] + }, + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": null + }, + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 2, + "links": [ + 5818, + 5825 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "ltxv-13b-0.9.8-distilled.safetensors" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1870, + "type": "Set VAE Decoder Noise", + "pos": [ + 4506.759765625, + 2418.0849609375 + ], + "size": [ + 235.1999969482422, + 130 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5828 + }, + { + "localized_name": "timestep", + "name": "timestep", + "type": "FLOAT", + "widget": { + "name": "timestep" + }, + "link": null + }, + { + "localized_name": "scale", + "name": "scale", + "type": "FLOAT", + "widget": { + "name": "scale" + }, + "link": null + }, + { + "localized_name": "seed", + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 5363 + ] + } + ], + "properties": { + "Node name for S&R": "Set VAE Decoder Noise" + }, + "widgets_values": [ + 0.05000000000000001, + 0.025000000000000005, + 42, + "fixed" + ] + }, + { + "id": 2119, + "type": "EmptyLTXVLatentVideo", + "pos": [ + 2818.27294921875, + 2537.522705078125 + ], + "size": [ + 270, + 130 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "localized_name": "width", + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 5973 + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 5974 + }, + { + "localized_name": "length", + "name": "length", + "type": "INT", + "widget": { + "name": "length" + }, + "link": 5990 + }, + { + "localized_name": "batch_size", + "name": "batch_size", + "type": "INT", + "widget": { + "name": "batch_size" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 6000 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "EmptyLTXVLatentVideo" + }, + "widgets_values": [ + 768, + 512, + 361, + 1 + ] + }, + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 2187.339599609375, + 2528.894775390625 + ], + "size": [ + 324.2440490722656, + 138.9625701904297 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 5603 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3365 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "low quality, worst quality, deformed, distorted, disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, weird hand, ugly" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2137, + "type": "CLIPTextEncode", + "pos": [ + 2207.601806640625, + 2326.387451171875 + ], + "size": [ + 277.42706298828125, + 104.5481948852539 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 5966 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5967 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.44", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 2143, + "type": "VAEEncode", + "pos": [ + 2871.01513671875, + 2827.94580078125 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "localized_name": "pixels", + "name": "pixels", + "type": "IMAGE", + "link": 5989 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5979 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 6001 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 1967, + "type": "STGAdvancedPresets", + "pos": [ + 2914.488037109375, + 2417.88720703125 + ], + "size": [ + 232.07870483398438, + 58 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "localized_name": "preset", + "name": "preset", + "type": "COMBO", + "widget": { + "name": "preset" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "STG_ADVANCED_PRESET", + "name": "STG_ADVANCED_PRESET", + "type": "STG_ADVANCED_PRESET", + "links": [ + 5613 + ] + } + ], + "properties": { + "Node name for S&R": "STGAdvancedPresets" + }, + "widgets_values": [ + "13b Distilled" + ] + }, + { + "id": 1336, + "type": "VHS_VideoCombine", + "pos": [ + 4850.5517578125, + 2275.85302734375 + ], + "size": [ + 430.260498046875, + 334 + ], + "flags": {}, + "order": 50, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 3578 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": null + }, + { + "localized_name": "loop_count", + "name": "loop_count", + "type": "INT", + "widget": { + "name": "loop_count" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + }, + { + "localized_name": "pingpong", + "name": "pingpong", + "type": "BOOLEAN", + "widget": { + "name": "pingpong" + }, + "link": null + }, + { + "localized_name": "save_output", + "name": "save_output", + "type": "BOOLEAN", + "widget": { + "name": "save_output" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Filenames", + "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": "ltxv-base", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "ltxv-base_00003.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "ltxv-base_00003.png", + "fullpath": "/home/michael/src/comfyui_worker_serving/src/comfyui/temp/ltxv-base_00003.mp4" + } + } + } + }, + { + "id": 1507, + "type": "RandomNoise", + "pos": [ + 3535.158203125, + 2604.37841796875 + ], + "size": [ + 239.2462158203125, + 82 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "localized_name": "noise_seed", + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "NOISE", + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 5996 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1828, + "type": "LTXVLatentUpsamplerModelLoader", + "pos": [ + 5665.14599609375, + 2265.11572265625 + ], + "size": [ + 349.8224792480469, + 113.41394805908203 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "COMBO", + "widget": { + "name": "upscale_model" + }, + "link": null + }, + { + "localized_name": "spatial_upsample", + "name": "spatial_upsample", + "type": "BOOLEAN", + "widget": { + "name": "spatial_upsample" + }, + "link": null + }, + { + "localized_name": "temporal_upsample", + "name": "temporal_upsample", + "type": "BOOLEAN", + "widget": { + "name": "temporal_upsample" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "UPSCALE_MODEL", + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 5303 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsamplerModelLoader" + }, + "widgets_values": [ + "ltxv-spatial-upscaler-0.9.8.safetensors", + true, + false + ] + }, + { + "id": 1691, + "type": "LTXVLatentUpsampler", + "pos": [ + 6055.61474609375, + 2476.571533203125 + ], + "size": [ + 235.1999969482422, + 66 + ], + "flags": {}, + "order": 52, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 5839 + }, + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 5303 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5820 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 5971 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsampler" + }, + "widgets_values": [] + }, + { + "id": 2091, + "type": "Reroute", + "pos": [ + 5588.74267578125, + 2046.29345703125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5831 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5820, + 5821 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2089, + "type": "Reroute", + "pos": [ + 6374.76953125, + 2075.138427734375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5815 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5898 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2092, + "type": "Reroute", + "pos": [ + 7487.28955078125, + 2057.455078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5821 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5823, + 5902 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2093, + "type": "Reroute", + "pos": [ + 7880.1572265625, + 2062.468505859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 46, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5823 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5874 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2148, + "type": "LTXVLoopingSampler", + "pos": [ + 4011.846923828125, + 2252.72412109375 + ], + "size": [ + 365.21484375, + 522 + ], + "flags": {}, + "order": 45, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5994 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 5995 + }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 5996 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 5997 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 5998 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 5999 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 6000 + }, + { + "localized_name": "optional_cond_image", + "name": "optional_cond_image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "optional_guiding_latents", + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": 6001 + }, + { + "localized_name": "optional_positive_conditionings", + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": 6002 + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { + "name": "guiding_strength" + }, + "link": null + }, + { + "localized_name": "temporal_tile_size", + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": null + }, + { + "localized_name": "temporal_overlap_cond_strength", + "name": "temporal_overlap_cond_strength", + "type": "FLOAT", + "widget": { + "name": "temporal_overlap_cond_strength" + }, + "link": null + }, + { + "localized_name": "horizontal_tiles", + "name": "horizontal_tiles", + "type": "INT", + "widget": { + "name": "horizontal_tiles" + }, + "link": null + }, + { + "localized_name": "vertical_tiles", + "name": "vertical_tiles", + "type": "INT", + "widget": { + "name": "vertical_tiles" + }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { + "name": "spatial_overlap" + }, + "link": null + }, + { + "localized_name": "adain_factor", + "name": "adain_factor", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "adain_factor" + }, + "link": null + }, + { + "localized_name": "optional_negative_index", + "name": "optional_negative_index", + "shape": 7, + "type": "INT", + "widget": { + "name": "optional_negative_index" + }, + "link": null + }, + { + "localized_name": "optional_negative_index_strength", + "name": "optional_negative_index_strength", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "optional_negative_index_strength" + }, + "link": null + }, + { + "localized_name": "per_tile_seed_offsets", + "name": "per_tile_seed_offsets", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_seed_offsets" + }, + "link": null + }, + { + "localized_name": "per_tile_use_negative_latents", + "name": "per_tile_use_negative_latents", + "shape": 7, + "type": "STRING", + "widget": { + "name": "per_tile_use_negative_latents" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "links": [ + 6003, + 6004 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 1, + 80, + 24, + 0.5, + 1, + 1, + 1, + 0, + -1, + 1, + "0", + "1" + ] + }, + { + "id": 2147, + "type": "LoraLoaderModelOnly", + "pos": [ + 3079.407958984375, + 2192.917236328125 + ], + "size": [ + 369.5658264160156, + 82 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 5991 + }, + { + "localized_name": "lora_name", + "name": "lora_name", + "type": "COMBO", + "widget": { + "name": "lora_name" + }, + "link": null + }, + { + "localized_name": "strength_model", + "name": "strength_model", + "type": "FLOAT", + "widget": { + "name": "strength_model" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 5992, + 5994 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltxv/13b/ltxv-097-ic-lora-depth-control.safetensors", + 1.0000000000000002 + ] + }, + { + "id": 2141, + "type": "PrimitiveInt", + "pos": [ + 2603.194091796875, + 2755.296630859375 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 5974, + 5983 + ] + } + ], + "title": "Height", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [ + 512, + "fixed" + ] + }, + { + "id": 2140, + "type": "PrimitiveInt", + "pos": [ + 2371.451416015625, + 2757.50048828125 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 5973, + 5982 + ] + } + ], + "title": "Width", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.43", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [ + 768, + "fixed" + ] + }, + { + "id": 2149, + "type": "Note", + "pos": [ + 1921.96630859375, + 3036.942626953125 + ], + "size": [ + 264.2660827636719, + 194.1212615966797 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If changing guiding video to pose or canny edges needs select relevant lora in the lora loader node." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2144, + "type": "VHS_LoadVideo", + "pos": [ + 2209.757568359375, + 3033.856689453125 + ], + "size": [ + 313.7864074707031, + 310 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "localized_name": "meta_batch", + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "localized_name": "video", + "name": "video", + "type": "COMBO", + "widget": { + "name": "video" + }, + "link": null + }, + { + "localized_name": "force_rate", + "name": "force_rate", + "type": "FLOAT", + "widget": { + "name": "force_rate" + }, + "link": null + }, + { + "localized_name": "custom_width", + "name": "custom_width", + "type": "INT", + "widget": { + "name": "custom_width" + }, + "link": null + }, + { + "localized_name": "custom_height", + "name": "custom_height", + "type": "INT", + "widget": { + "name": "custom_height" + }, + "link": null + }, + { + "localized_name": "frame_load_cap", + "name": "frame_load_cap", + "type": "INT", + "widget": { + "name": "frame_load_cap" + }, + "link": null + }, + { + "localized_name": "skip_first_frames", + "name": "skip_first_frames", + "type": "INT", + "widget": { + "name": "skip_first_frames" + }, + "link": null + }, + { + "localized_name": "select_every_nth", + "name": "select_every_nth", + "type": "INT", + "widget": { + "name": "select_every_nth" + }, + "link": null + }, + { + "localized_name": "format", + "name": "format", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "format" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5981 + ] + }, + { + "localized_name": "frame_count", + "name": "frame_count", + "type": "INT", + "links": null + }, + { + "localized_name": "audio", + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "localized_name": "video_info", + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "depth-surfing.mp4", + "force_rate": 0, + "custom_width": 0, + "custom_height": 0, + "frame_load_cap": 481, + "skip_first_frames": 0, + "select_every_nth": 1, + "format": "LTXV", + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": true, + "params": { + "frame_load_cap": 481, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "depth-surfing.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + } + } + } + }, + { + "id": 2146, + "type": "GetImageSizeAndCount", + "pos": [ + 2905.13330078125, + 3033.642333984375 + ], + "size": [ + 190.86483764648438, + 86 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 5988 + } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 5989 + ] + }, + { + "label": "768 width", + "localized_name": "width", + "name": "width", + "type": "INT", + "links": null + }, + { + "label": "512 height", + "localized_name": "height", + "name": "height", + "type": "INT", + "links": null + }, + { + "label": "481 count", + "localized_name": "count", + "name": "count", + "type": "INT", + "links": [ + 5990 + ] + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [] + }, + { + "id": 2145, + "type": "ImageResizeKJ", + "pos": [ + 2580.661865234375, + 3032.484619140625 + ], + "size": [ + 270, + 238 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 5981 + }, + { + "localized_name": "width_input", + "name": "width_input", + "shape": 7, + "type": "INT", + "link": 5982 + }, + { + "localized_name": "height_input", + "name": "height_input", + "shape": 7, + "type": "INT", + "link": 5983 + }, + { + "localized_name": "get_image_size", + "name": "get_image_size", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "width", + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": null + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": null + }, + { + "localized_name": "upscale_method", + "name": "upscale_method", + "type": "COMBO", + "widget": { + "name": "upscale_method" + }, + "link": null + }, + { + "localized_name": "keep_proportion", + "name": "keep_proportion", + "type": "BOOLEAN", + "widget": { + "name": "keep_proportion" + }, + "link": null + }, + { + "localized_name": "divisible_by", + "name": "divisible_by", + "type": "INT", + "widget": { + "name": "divisible_by" + }, + "link": null + }, + { + "localized_name": "crop", + "name": "crop", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "crop" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5988 + ] + }, + { + "localized_name": "width", + "name": "width", + "type": "INT", + "links": null + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ", + "cnr_id": "comfyui-kjnodes", + "ver": "1.0.8" + }, + "widgets_values": [ + 768, + 512, + "bilinear", + false, + 32, + "center" + ] + }, + { + "id": 2088, + "type": "Reroute", + "pos": [ + 2091.060302734375, + 2069.913330078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5938 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5815, + 5991 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2090, + "type": "Reroute", + "pos": [ + 1989.3577880859375, + 2035.9425048828125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5818 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 5829 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2136, + "type": "MultiPromptProvider", + "pos": [ + 2630.412841796875, + 1869.997802734375 + ], + "size": [ + 1002.2837524414062, + 88 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 5964 + }, + { + "localized_name": "prompts", + "name": "prompts", + "type": "STRING", + "widget": { + "name": "prompts" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "conditionings", + "name": "conditionings", + "type": "CONDITIONING", + "links": [ + 6002 + ] + } + ], + "properties": { + "Node name for S&R": "MultiPromptProvider" + }, + "widgets_values": [ + "ultra-realistic cinematic scene of a smiling snowboarder racing down a steep mountain slope with a massive avalanche thundering behind them |\nUltra-realistic cinematic scene of a determined jet skier carving across a stormy open ocean, massive waves crashing around them as a towering wall of water" + ] + } + ], + "links": [ + [ + 3365, + 7, + 0, + 1241, + 1, + "CONDITIONING" + ], + [ + 3578, + 1335, + 0, + 1336, + 0, + "IMAGE" + ], + [ + 5303, + 1828, + 0, + 1691, + 1, + "UPSCALE_MODEL" + ], + [ + 5363, + 1870, + 0, + 1335, + 1, + "VAE" + ], + [ + 5567, + 1952, + 0, + 1953, + 0, + "FLOAT" + ], + [ + 5584, + 1241, + 0, + 1921, + 1, + "CONDITIONING" + ], + [ + 5585, + 1241, + 1, + 1921, + 2, + "CONDITIONING" + ], + [ + 5603, + 38, + 0, + 7, + 0, + "CLIP" + ], + [ + 5613, + 1967, + 0, + 1921, + 3, + "STG_ADVANCED_PRESET" + ], + [ + 5641, + 1953, + 0, + 1949, + 0, + "SIGMAS" + ], + [ + 5715, + 1241, + 0, + 2022, + 0, + "*" + ], + [ + 5716, + 1241, + 1, + 2023, + 0, + "*" + ], + [ + 5739, + 2037, + 0, + 1871, + 1, + "CONDITIONING" + ], + [ + 5740, + 2038, + 0, + 1871, + 2, + "CONDITIONING" + ], + [ + 5741, + 2022, + 0, + 2037, + 0, + "*" + ], + [ + 5742, + 2023, + 0, + 2038, + 0, + "*" + ], + [ + 5782, + 2072, + 0, + 2073, + 0, + "FLOAT" + ], + [ + 5815, + 2088, + 0, + 2089, + 0, + "*" + ], + [ + 5818, + 1896, + 2, + 2090, + 0, + "*" + ], + [ + 5820, + 2091, + 0, + 1691, + 2, + "VAE" + ], + [ + 5821, + 2091, + 0, + 2092, + 0, + "*" + ], + [ + 5823, + 2092, + 0, + 2093, + 0, + "*" + ], + [ + 5825, + 1896, + 2, + 2094, + 0, + "*" + ], + [ + 5826, + 2094, + 0, + 2095, + 0, + "*" + ], + [ + 5828, + 2095, + 0, + 1870, + 0, + "VAE" + ], + [ + 5829, + 2090, + 0, + 2096, + 0, + "*" + ], + [ + 5831, + 2096, + 0, + 2091, + 0, + "*" + ], + [ + 5838, + 2101, + 0, + 2102, + 0, + "*" + ], + [ + 5839, + 2102, + 0, + 1691, + 0, + "LATENT" + ], + [ + 5873, + 2116, + 0, + 1871, + 3, + "STG_ADVANCED_PRESET" + ], + [ + 5874, + 2093, + 0, + 2117, + 0, + "VAE" + ], + [ + 5896, + 2122, + 0, + 1871, + 0, + "MODEL" + ], + [ + 5898, + 2089, + 0, + 2122, + 0, + "MODEL" + ], + [ + 5901, + 2122, + 0, + 2124, + 0, + "MODEL" + ], + [ + 5902, + 2092, + 0, + 2124, + 1, + "VAE" + ], + [ + 5903, + 1598, + 0, + 2124, + 2, + "NOISE" + ], + [ + 5904, + 1926, + 0, + 2124, + 3, + "SAMPLER" + ], + [ + 5905, + 2073, + 0, + 2124, + 4, + "SIGMAS" + ], + [ + 5906, + 1871, + 0, + 2124, + 5, + "GUIDER" + ], + [ + 5912, + 2125, + 0, + 2124, + 8, + "LATENT" + ], + [ + 5917, + 2117, + 0, + 2127, + 0, + "VAE" + ], + [ + 5918, + 2124, + 0, + 2127, + 1, + "LATENT" + ], + [ + 5920, + 2127, + 0, + 1973, + 0, + "IMAGE" + ], + [ + 5938, + 2129, + 0, + 2088, + 0, + "*" + ], + [ + 5941, + 1896, + 0, + 2129, + 0, + "*" + ], + [ + 5961, + 2125, + 0, + 2124, + 6, + "LATENT" + ], + [ + 5964, + 38, + 0, + 2136, + 0, + "CLIP" + ], + [ + 5966, + 38, + 0, + 2137, + 0, + "CLIP" + ], + [ + 5967, + 2137, + 0, + 1241, + 0, + "CONDITIONING" + ], + [ + 5971, + 1691, + 0, + 2125, + 0, + "*" + ], + [ + 5973, + 2140, + 0, + 2119, + 0, + "INT" + ], + [ + 5974, + 2141, + 0, + 2119, + 1, + "INT" + ], + [ + 5979, + 2094, + 0, + 2143, + 1, + "VAE" + ], + [ + 5981, + 2144, + 0, + 2145, + 0, + "IMAGE" + ], + [ + 5982, + 2140, + 0, + 2145, + 1, + "INT" + ], + [ + 5983, + 2141, + 0, + 2145, + 2, + "INT" + ], + [ + 5988, + 2145, + 0, + 2146, + 0, + "IMAGE" + ], + [ + 5989, + 2146, + 0, + 2143, + 0, + "IMAGE" + ], + [ + 5990, + 2146, + 3, + 2119, + 2, + "INT" + ], + [ + 5991, + 2088, + 0, + 2147, + 0, + "MODEL" + ], + [ + 5992, + 2147, + 0, + 1921, + 0, + "MODEL" + ], + [ + 5994, + 2147, + 0, + 2148, + 0, + "MODEL" + ], + [ + 5995, + 2096, + 0, + 2148, + 1, + "VAE" + ], + [ + 5996, + 1507, + 0, + 2148, + 2, + "NOISE" + ], + [ + 5997, + 73, + 0, + 2148, + 3, + "SAMPLER" + ], + [ + 5998, + 1949, + 0, + 2148, + 4, + "SIGMAS" + ], + [ + 5999, + 1921, + 0, + 2148, + 5, + "GUIDER" + ], + [ + 6000, + 2119, + 0, + 2148, + 6, + "LATENT" + ], + [ + 6001, + 2143, + 0, + 2148, + 8, + "LATENT" + ], + [ + 6002, + 2136, + 0, + 2148, + 9, + "CONDITIONING" + ], + [ + 6003, + 2148, + 0, + 1335, + 0, + "LATENT" + ], + [ + 6004, + 2148, + 0, + 2101, + 0, + "*" + ] + ], + "groups": [ + { + "id": 34, + "title": "Latent Upscaler", + "bounding": [ + 5585.8896484375, + 2108.431640625, + 761.7763671875, + 493.7742614746094 + ], + "color": "#a1309b", + "font_size": 24, + "flags": {}, + "nodes": [ + 1828, + 1691 + ] + }, + { + "id": 42, + "title": "Add Details", + "bounding": [ + 6371.76318359375, + 2112.9609375, + 2866.58203125, + 1085.7049560546875 + ], + "color": "#a1309b", + "font_size": 24, + "flags": {}, + "nodes": [ + 1926, + 2038, + 2037, + 2073, + 1598, + 1973, + 2116, + 2117, + 2072, + 1871, + 2124, + 2127, + 2122, + 2125 + ] + }, + { + "id": 48, + "title": "LTXV Base Video", + "bounding": [ + 1902.1943359375, + 2103.927490234375, + 3663.2529296875, + 825.6270751953125 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {}, + "nodes": [ + 1335, + 1952, + 2101, + 1921, + 2129, + 2094, + 1241, + 38, + 1949, + 1953, + 2097, + 2095, + 73, + 1896, + 1870, + 2119, + 7, + 2137, + 2143, + 1967, + 1336, + 1507, + 2148, + 2147, + 2141, + 2140 + ] + }, + { + "id": 49, + "title": "Load guiding video", + "bounding": [ + 1905.921630859375, + 2950.99853515625, + 1304.6558837890625, + 651.2169799804688 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {}, + "nodes": [ + 2149, + 2144, + 2146, + 2145 + ] + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.8954302432552734, + "offset": [ + -2308.495116040538, + -1635.1741240123174 + ] + }, + "frontendVersion": "1.17.11", + "VHS_latentpreview": true, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true, + "prompt": { + "7": { + "inputs": { + "text": "low quality, worst quality, deformed, distorted, disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, weird hand, ugly", + "clip": [ + "38", + 0 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Negative Prompt)" + } + }, + "38": { + "inputs": { + "clip_name": "t5xxl_fp16.safetensors", + "type": "ltxv", + "device": "default" + }, + "class_type": "CLIPLoader", + "_meta": { + "title": "Load CLIP" + } + }, + "73": { + "inputs": { + "sampler_name": "euler_ancestral" + }, + "class_type": "KSamplerSelect", + "_meta": { + "title": "KSamplerSelect" + } + }, + "1241": { + "inputs": { + "frame_rate": 24.000000000000004, + "positive": [ + "2137", + 0 + ], + "negative": [ + "7", + 0 + ] + }, + "class_type": "LTXVConditioning", + "_meta": { + "title": "LTXVConditioning" + } + }, + "1335": { + "inputs": { + "samples": [ + "2148", + 0 + ], + "vae": [ + "1870", + 0 + ] + }, + "class_type": "VAEDecode", + "_meta": { + "title": "VAE Decode" + } + }, + "1336": { + "inputs": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-base", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": false, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "images": [ + "1335", + 0 + ] + }, + "class_type": "VHS_VideoCombine", + "_meta": { + "title": "Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "1507": { + "inputs": { + "noise_seed": 1 + }, + "class_type": "RandomNoise", + "_meta": { + "title": "RandomNoise" + } + }, + "1598": { + "inputs": { + "noise_seed": 1625 + }, + "class_type": "RandomNoise", + "_meta": { + "title": "RandomNoise" + } + }, + "1691": { + "inputs": { + "samples": [ + "2148", + 0 + ], + "upscale_model": [ + "1828", + 0 + ], + "vae": [ + "1896", + 2 + ] + }, + "class_type": "LTXVLatentUpsampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Latent Upsampler" + } + }, + "1828": { + "inputs": { + "upscale_model": "ltxv-spatial-upscaler-0.9.8.safetensors", + "spatial_upsample": true, + "temporal_upsample": false + }, + "class_type": "LTXVLatentUpsamplerModelLoader", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Latent Upsampler Model Loader" + } + }, + "1870": { + "inputs": { + "timestep": 0.05000000000000001, + "scale": 0.025000000000000005, + "seed": 42, + "vae": [ + "1896", + 2 + ] + }, + "class_type": "Set VAE Decoder Noise", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ Set VAE Decoder Noise" + } + }, + "1871": { + "inputs": { + "skip_steps_sigma_threshold": 0.9970000000000002, + "cfg_star_rescale": true, + "sigmas": "1", + "cfg_values": "1", + "stg_scale_values": "0", + "stg_rescale_values": "1", + "stg_layers_indices": "[42]", + "model": [ + "2122", + 0 + ], + "positive": [ + "1241", + 0 + ], + "negative": [ + "1241", + 1 + ], + "preset": [ + "2116", + 0 + ] + }, + "class_type": "STGGuiderAdvanced", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Guider Advanced" + } + }, + "1896": { + "inputs": { + "ckpt_name": "ltxv-13b-0.9.8-distilled.safetensors" + }, + "class_type": "CheckpointLoaderSimple", + "_meta": { + "title": "Load Checkpoint" + } + }, + "1921": { + "inputs": { + "skip_steps_sigma_threshold": 0.9970000000000002, + "cfg_star_rescale": true, + "sigmas": "1", + "cfg_values": "1", + "stg_scale_values": "0,0,0,0,0,0", + "stg_rescale_values": "1", + "stg_layers_indices": "[25]", + "model": [ + "2147", + 0 + ], + "positive": [ + "1241", + 0 + ], + "negative": [ + "1241", + 1 + ], + "preset": [ + "1967", + 0 + ] + }, + "class_type": "STGGuiderAdvanced", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Guider Advanced" + } + }, + "1926": { + "inputs": { + "sampler_name": "euler_ancestral" + }, + "class_type": "KSamplerSelect", + "_meta": { + "title": "KSamplerSelect" + } + }, + "1949": { + "inputs": { + "sigmas": [ + "1953", + 0 + ] + }, + "class_type": "PrintSigmas", + "_meta": { + "title": "PrintSigmas" + } + }, + "1952": { + "inputs": { + "string": "1.0000, 0.9937, 0.9875, 0.9812, 0.9750, 0.9094, 0.7250, 0.4219, 0.0\n" + }, + "class_type": "StringToFloatList", + "_meta": { + "title": "String to Float List" + } + }, + "1953": { + "inputs": { + "float_list": [ + "1952", + 0 + ] + }, + "class_type": "FloatToSigmas", + "_meta": { + "title": "Float To Sigmas" + } + }, + "1967": { + "inputs": { + "preset": "13b Distilled" + }, + "class_type": "STGAdvancedPresets", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Advanced Presets" + } + }, + "1973": { + "inputs": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "ltxv-ic-lora", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "images": [ + "2127", + 0 + ] + }, + "class_type": "VHS_VideoCombine", + "_meta": { + "title": "Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "2072": { + "inputs": { + "string": "0.99, 0.9094, 0.0" + }, + "class_type": "StringToFloatList", + "_meta": { + "title": "String to Float List" + } + }, + "2073": { + "inputs": { + "float_list": [ + "2072", + 0 + ] + }, + "class_type": "FloatToSigmas", + "_meta": { + "title": "Float To Sigmas" + } + }, + "2116": { + "inputs": { + "preset": "13b Distilled" + }, + "class_type": "STGAdvancedPresets", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ STG Advanced Presets" + } + }, + "2117": { + "inputs": { + "timestep": 0.05, + "scale": 0.025, + "seed": 42, + "vae": [ + "1896", + 2 + ] + }, + "class_type": "Set VAE Decoder Noise", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ Set VAE Decoder Noise" + } + }, + "2119": { + "inputs": { + "width": [ + "2140", + 0 + ], + "height": [ + "2141", + 0 + ], + "length": [ + "2146", + 3 + ], + "batch_size": 1 + }, + "class_type": "EmptyLTXVLatentVideo", + "_meta": { + "title": "EmptyLTXVLatentVideo" + } + }, + "2122": { + "inputs": { + "lora_name": "ltx-video-ICLoRA-detailer-13B-0.9.8", + "strength_model": 1, + "model": [ + "1896", + 0 + ] + }, + "class_type": "LoraLoaderModelOnly", + "_meta": { + "title": "LoraLoaderModelOnly" + } + }, + "2124": { + "inputs": { + "guiding_strength": 1, + "temporal_tile_size": 80, + "temporal_overlap": 24, + "temporal_overlap_cond_strength": 0.5, + "horizontal_tiles": 1, + "vertical_tiles": 1, + "spatial_overlap": 1, + "adain_factor": 0, + "optional_negative_index": -1, + "optional_negative_index_strength": 1, + "per_tile_seed_offsets": "0", + "per_tile_use_negative_latents": "1", + "model": [ + "2122", + 0 + ], + "vae": [ + "1896", + 2 + ], + "noise": [ + "1598", + 0 + ], + "sampler": [ + "1926", + 0 + ], + "sigmas": [ + "2073", + 0 + ], + "guider": [ + "1871", + 0 + ], + "latents": [ + "1691", + 0 + ], + "optional_guiding_latents": [ + "1691", + 0 + ] + }, + "class_type": "LTXVLoopingSampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Looping Sampler" + } + }, + "2127": { + "inputs": { + "horizontal_tiles": 2, + "vertical_tiles": 2, + "overlap": 5, + "last_frame_fix": false, + "vae": [ + "2117", + 0 + ], + "latents": [ + "2124", + 0 + ] + }, + "class_type": "LTXVTiledVAEDecode", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Tiled VAE Decode" + } + }, + "2136": { + "inputs": { + "prompts": "ultra-realistic cinematic scene of a smiling snowboarder racing down a steep mountain slope with a massive avalanche thundering behind them |\nUltra-realistic cinematic scene of a determined jet skier carving across a stormy open ocean, massive waves crashing around them as a towering wall of water", + "clip": [ + "38", + 0 + ] + }, + "class_type": "MultiPromptProvider", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ Multi Prompt Provider" + } + }, + "2137": { + "inputs": { + "text": "", + "clip": [ + "38", + 0 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Prompt)" + } + }, + "2140": { + "inputs": { + "value": 768 + }, + "class_type": "PrimitiveInt", + "_meta": { + "title": "Width" + } + }, + "2141": { + "inputs": { + "value": 512 + }, + "class_type": "PrimitiveInt", + "_meta": { + "title": "Height" + } + }, + "2143": { + "inputs": { + "pixels": [ + "2146", + 0 + ], + "vae": [ + "1896", + 2 + ] + }, + "class_type": "VAEEncode", + "_meta": { + "title": "VAE Encode" + } + }, + "2144": { + "inputs": { + "video": "depth-surfing.mp4", + "force_rate": 0, + "custom_width": 0, + "custom_height": 0, + "frame_load_cap": 481, + "skip_first_frames": 0, + "select_every_nth": 1, + "format": "LTXV" + }, + "class_type": "VHS_LoadVideo", + "_meta": { + "title": "Load Video (Upload) πŸŽ₯πŸ…₯πŸ…—πŸ…’" + } + }, + "2145": { + "inputs": { + "width": 768, + "height": 512, + "upscale_method": "bilinear", + "keep_proportion": false, + "divisible_by": 32, + "crop": "center", + "image": [ + "2144", + 0 + ], + "width_input": [ + "2140", + 0 + ], + "height_input": [ + "2141", + 0 + ] + }, + "class_type": "ImageResizeKJ", + "_meta": { + "title": "Resize Image" + } + }, + "2146": { + "inputs": { + "image": [ + "2145", + 0 + ] + }, + "class_type": "GetImageSizeAndCount", + "_meta": { + "title": "Get Image Size & Count" + } + }, + "2147": { + "inputs": { + "lora_name": "ltxv/13b/ltxv-097-ic-lora-depth-control.safetensors", + "strength_model": 1.0000000000000002, + "model": [ + "1896", + 0 + ] + }, + "class_type": "LoraLoaderModelOnly", + "_meta": { + "title": "LoraLoaderModelOnly" + } + }, + "2148": { + "inputs": { + "guiding_strength": 1, + "temporal_tile_size": 80, + "temporal_overlap": 24, + "temporal_overlap_cond_strength": 0.5, + "horizontal_tiles": 1, + "vertical_tiles": 1, + "spatial_overlap": 1, + "adain_factor": 0, + "optional_negative_index": -1, + "optional_negative_index_strength": 1, + "per_tile_seed_offsets": "0", + "per_tile_use_negative_latents": "1", + "model": [ + "2147", + 0 + ], + "vae": [ + "1896", + 2 + ], + "noise": [ + "1507", + 0 + ], + "sampler": [ + "73", + 0 + ], + "sigmas": [ + "1949", + 0 + ], + "guider": [ + "1921", + 0 + ], + "latents": [ + "2119", + 0 + ], + "optional_guiding_latents": [ + "2143", + 0 + ], + "optional_positive_conditionings": [ + "2136", + 0 + ] + }, + "class_type": "LTXVLoopingSampler", + "_meta": { + "title": "πŸ…›πŸ…£πŸ…§ LTXV Looping Sampler" + } + } + }, + "comfy_fork_version": "develop@ba9dad4", + "workspace_info": { + "id": "elBQFQknIoLYTEwIloQuw" + }, + "node_versions": { + "comfy-core": "0.3.20" + } + }, + "version": 0.4 +} diff --git a/film_grain.py b/film_grain.py index 67d6dd9..3ebe3b0 100644 --- a/film_grain.py +++ b/film_grain.py @@ -37,20 +37,24 @@ class LTXVFilmGrain: ) -> Tuple[torch.Tensor]: if grain_intensity < 0 or grain_intensity > 1: raise ValueError("Grain intensity must be between 0 and 1.") - device = comfy.model_management.get_torch_device() images = images.to(device) - grain = torch.randn_like(images, device=device) - grain[:, :, :, 0] *= 2 - grain[:, :, :, 2] *= 3 - grain = grain * saturation + grain[:, :, :, 1].unsqueeze(3).repeat( - 1, 1, 1, 3 - ) * (1 - saturation) + grain = torch.zeros(images[0:1].shape, device=device) - # Blend the grain with the image - noised_images = images + grain_intensity * grain - noised_images.clamp_(0, 1) - noised_images = noised_images.to(comfy.model_management.intermediate_device()) + # Process images in-place to reduce memory usage + for i in range(images.shape[0]): + # Generate grain for single image + torch.randn(grain.shape, device=device, out=grain) + grain[:, :, :, 0] *= 2 + grain[:, :, :, 2] *= 3 + grain = grain * saturation + grain[:, :, :, 1].unsqueeze(3).expand( + -1, -1, -1, 3 + ) * (1 - saturation) - return (noised_images,) + # Blend the grain with the image in-place + images[i : i + 1].add_(grain_intensity * grain) + images[i : i + 1].clamp_(0, 1) + + images = images.to(comfy.model_management.intermediate_device()) + return (images,) diff --git a/looping_sampler.py b/looping_sampler.py new file mode 100644 index 0000000..78409ce --- /dev/null +++ b/looping_sampler.py @@ -0,0 +1,726 @@ +import copy +from dataclasses import dataclass + +import comfy +import torch + +from .easy_samplers import LTXVBaseSampler, LTXVExtendSampler, LTXVInContextSampler +from .latents import LTXVSelectLatents +from .nodes_registry import comfy_node + + +@dataclass +class TileConfig: + """Configuration for spatial tile processing.""" + + tile_latents: dict + tile_guiding_latents: dict + tile_negative_index_latents: dict + tile_cond_image: torch.Tensor + tile_height: int + tile_width: int + v: int + h: int + vertical_tiles: int + horizontal_tiles: int + first_seed: int + + +@dataclass +class SamplingConfig: + """Configuration for sampling parameters.""" + + temporal_tile_size: int + temporal_overlap: int + temporal_overlap_cond_strength: float + guiding_strength: float + adain_factor: float + optional_negative_index: int + optional_negative_index_strength: float + optional_positive_conditionings: list + time_scale_factor: int + width_scale_factor: int + height_scale_factor: int + per_tile_seed_offsets: list + per_tile_use_negative_latents: list + + +@dataclass +class ModelConfig: + """Configuration for model components.""" + + model: object + vae: object + noise: object + sampler: object + sigmas: object + guider: object + + +@comfy_node( + name="LTXVLoopingSampler", +) +class LTXVLoopingSampler: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL", {"tooltip": "The diffusion model to use."}), + "vae": ("VAE", {"tooltip": "The VAE to use."}), + "noise": ("NOISE", {"tooltip": "The noise to use."}), + "sampler": ("SAMPLER", {"tooltip": "The sampler to use."}), + "sigmas": ("SIGMAS", {"tooltip": "The sigmas to use."}), + "guider": ( + "GUIDER", + {"tooltip": "The guider to use, must be a STGGuiderAdvanced."}, + ), + "latents": ( + "LATENT", + { + "tooltip": "The latents to use for creating the long video, they can be guiding latents or empty latents when no guidance is used." + }, + ), + "guiding_strength": ( + "FLOAT", + { + "default": 1.0, + "min": 0.0, + "max": 1.0, + "step": 0.01, + "tooltip": "The strength of the conditioning on guiding latents, when optional_guiding_latents are provided.", + }, + ), + "temporal_tile_size": ( + "INT", + { + "default": 80, + "min": 24, + "max": 1000, + "step": 8, + "tooltip": "The size of the temporal tile to use for the sampling, in pixel frames, in addition to the overlapping region.", + }, + ), + "temporal_overlap": ( + "INT", + { + "default": 24, + "min": 16, + "max": 80, + "step": 8, + "tooltip": "The overlap between the temporal tiles, in pixel frames.", + }, + ), + "temporal_overlap_cond_strength": ( + "FLOAT", + { + "default": 0.5, + "min": 0.0, + "max": 1.0, + "step": 0.01, + "tooltip": "The strength of the conditioning on the latents from the previous temporal tile.", + }, + ), + "horizontal_tiles": ( + "INT", + { + "default": 1, + "min": 1, + "max": 6, + "tooltip": "Number of horizontal spatial tiles.", + }, + ), + "vertical_tiles": ( + "INT", + { + "default": 1, + "min": 1, + "max": 6, + "tooltip": "Number of vertical spatial tiles.", + }, + ), + "spatial_overlap": ( + "INT", + { + "default": 1, + "min": 1, + "max": 8, + "tooltip": "Overlap between spatial tiles.", + }, + ), + }, + "optional": { + "optional_cond_image": ( + "IMAGE", + { + "tooltip": "The image to use for conditioning the first frame in the video (i2v setup). If not provided, the first frame will be unconditioned (t2v setup). The image will be resized to the size of the first frame." + }, + ), + "optional_guiding_latents": ( + "LATENT", + { + "tooltip": "The latents to use for guiding the sampling, typically with an IC-LoRA." + }, + ), + "adain_factor": ( + "FLOAT", + { + "default": 0.0, + "min": 0.0, + "max": 1.0, + "step": 0.01, + "tooltip": "The strength of the AdaIn operation used to fix the statistics of each new generated temporal tile, to prevent accumulated oversaturation.", + }, + ), + "optional_positive_conditionings": ( + "CONDITIONING", + { + "tooltip": "Optional way to provide changing positive prompts, one per temporal tile, using the MultiPromptProvider node." + }, + ), + "optional_negative_index_latents": ( + "LATENT", + { + "tooltip": "Special optional latents to condition on a negative index before each new temporal tile as a way to provide long term context during video generation." + }, + ), + }, + } + + RETURN_TYPES = ("LATENT",) + RETURN_NAMES = ("denoised_output",) + + FUNCTION = "sample" + CATEGORY = "sampling" + + def _extract_latent_spatial_tile(self, latent_dict, v_start, v_end, h_start, h_end): + """Extract spatial tile from a latent dictionary.""" + if latent_dict is None: + return None + tile_samples = latent_dict["samples"][:, :, :, v_start:v_end, h_start:h_end] + return {"samples": tile_samples} + + def _extract_spatial_tile( + self, + samples, + optional_guiding_latents, + optional_negative_index_latents, + optional_cond_image, + v_start, + v_end, + h_start, + h_end, + height_scale_factor, + width_scale_factor, + ): + """Extract spatial tiles from all inputs for a given spatial region.""" + # Extract spatial tile from latents + tile_latents = self._extract_latent_spatial_tile( + {"samples": samples}, v_start, v_end, h_start, h_end + ) + + # Extract spatial tile from guiding latents if provided + tile_guiding_latents = self._extract_latent_spatial_tile( + optional_guiding_latents, v_start, v_end, h_start, h_end + ) + + # Extract spatial tile from negative index latents if provided + tile_negative_index_latents = self._extract_latent_spatial_tile( + optional_negative_index_latents, v_start, v_end, h_start, h_end + ) + + # Extract spatial tile from conditioning image if provided + tile_cond_image = None + if optional_cond_image is not None: + # Scale coordinates for image + img_h_start = v_start * height_scale_factor + img_h_end = v_end * height_scale_factor + img_w_start = h_start * width_scale_factor + img_w_end = h_end * width_scale_factor + + # Extract image tile + tile_cond_image = optional_cond_image[ + :, img_h_start:img_h_end, img_w_start:img_w_end, : + ] + + return ( + tile_latents, + tile_guiding_latents, + tile_negative_index_latents, + tile_cond_image, + ) + + def _process_temporal_chunks( + self, + tile_config: TileConfig, + sampling_config: SamplingConfig, + model_config: ModelConfig, + ): + """Process all temporal chunks for a single spatial tile.""" + chunk_index = 0 + tile_out_latents = None + first_tile_out_latents = None + + for i_temporal_tile, (start_index, end_index) in enumerate( + zip( + range( + 0, + tile_config.tile_latents["samples"].shape[2] + + sampling_config.temporal_tile_size + - sampling_config.temporal_overlap, + sampling_config.temporal_tile_size + - sampling_config.temporal_overlap, + ), + range( + sampling_config.temporal_tile_size, + tile_config.tile_latents["samples"].shape[2] + + sampling_config.temporal_tile_size + - sampling_config.temporal_overlap, + sampling_config.temporal_tile_size + - sampling_config.temporal_overlap, + ), + ) + ): + if tile_config.tile_guiding_latents is not None: + guiding_latent_chunk = LTXVSelectLatents().select_latents( + tile_config.tile_guiding_latents, + start_index, + min( + end_index - 1, + tile_config.tile_guiding_latents["samples"].shape[2] - 1, + ), + )[0] + else: + guiding_latent_chunk = None + + latent_chunk = LTXVSelectLatents().select_latents( + tile_config.tile_latents, + start_index, + min(end_index - 1, tile_config.tile_latents["samples"].shape[2] - 1), + )[0] + + print( + "Processing temporal chunk at index", + start_index, + "to", + min(end_index - 1, tile_config.tile_latents["samples"].shape[2] - 1), + ) + + seed_offset = self._get_per_tile_value( + sampling_config.per_tile_seed_offsets, i_temporal_tile + ) + use_negative_latents = self._get_per_tile_value( + sampling_config.per_tile_use_negative_latents, i_temporal_tile + ) + + model_config.noise.seed = self._calculate_tile_seed( + tile_config.first_seed, + start_index, + tile_config.vertical_tiles, + tile_config.horizontal_tiles, + tile_config.v, + tile_config.h, + seed_offset, + ) + + # Handle optional positive conditionings + new_guider = self._prepare_guider_for_chunk( + model_config.guider, + sampling_config.optional_positive_conditionings, + chunk_index, + ) + + if start_index == 0: + if tile_config.tile_guiding_latents is not None: + tile_out_latents = LTXVInContextSampler().sample( + vae=model_config.vae, + guider=new_guider, + sampler=model_config.sampler, + sigmas=model_config.sigmas, + noise=model_config.noise, + guiding_latents=guiding_latent_chunk, + optional_cond_image=tile_config.tile_cond_image, + num_frames=-1, + optional_negative_index_latents=( + tile_config.tile_negative_index_latents + if use_negative_latents + else None + ), + optional_negative_index=sampling_config.optional_negative_index, + optional_negative_index_strength=sampling_config.optional_negative_index_strength, + optional_initialization_latents=latent_chunk, + optional_cond_strength=sampling_config.temporal_overlap_cond_strength, + optional_guiding_strength=sampling_config.guiding_strength, + )[0] + else: + tile_out_latents = LTXVBaseSampler().sample( + model=model_config.model, + vae=model_config.vae, + noise=model_config.noise, + sampler=model_config.sampler, + sigmas=model_config.sigmas, + guider=new_guider, + num_frames=( + min( + sampling_config.temporal_tile_size, + tile_config.tile_latents["samples"].shape[2], + ) + - 1 + ) + * sampling_config.time_scale_factor + + 1, + width=tile_config.tile_width + * sampling_config.width_scale_factor, + height=tile_config.tile_height + * sampling_config.height_scale_factor, + optional_cond_images=tile_config.tile_cond_image, + optional_cond_indices="0", + crop="center", + crf=30, + strength=sampling_config.temporal_overlap_cond_strength, + optional_negative_index_latents=( + tile_config.tile_negative_index_latents + if use_negative_latents + else None + ), + optional_negative_index=sampling_config.optional_negative_index, + optional_negative_index_strength=sampling_config.optional_negative_index_strength, + optional_initialization_latents=latent_chunk, + )[0] + first_tile_out_latents = copy.deepcopy(tile_out_latents) + else: + tile_out_latents = LTXVExtendSampler().sample( + model=model_config.model, + vae=model_config.vae, + sampler=model_config.sampler, + sigmas=model_config.sigmas, + noise=model_config.noise, + latents=tile_out_latents, + num_new_frames=( + latent_chunk["samples"].shape[2] + - sampling_config.temporal_overlap + ) + * sampling_config.time_scale_factor, + frame_overlap=sampling_config.temporal_overlap + * sampling_config.time_scale_factor, + guider=new_guider, + strength=sampling_config.temporal_overlap_cond_strength, + guiding_strength=sampling_config.guiding_strength, + optional_guiding_latents=guiding_latent_chunk, + optional_reference_latents=first_tile_out_latents, + adain_factor=sampling_config.adain_factor, + optional_negative_index_latents=( + tile_config.tile_negative_index_latents + if use_negative_latents + else None + ), + optional_negative_index=sampling_config.optional_negative_index, + optional_negative_index_strength=sampling_config.optional_negative_index_strength, + optional_initialization_latents=latent_chunk, + )[0] + + chunk_index += 1 + + return tile_out_latents + + def _create_spatial_weights( + self, tile_samples, v, h, horizontal_tiles, vertical_tiles, spatial_overlap + ): + """Create blending weights for spatial tiles.""" + tile_weights = torch.ones_like(tile_samples, device=tile_samples.device) + + # Apply horizontal blending weights + if h > 0: # Left overlap + h_blend = torch.linspace(0, 1, spatial_overlap, device=tile_samples.device) + tile_weights[:, :, :, :, :spatial_overlap] *= h_blend.view(1, 1, 1, 1, -1) + if h < horizontal_tiles - 1: # Right overlap + h_blend = torch.linspace(1, 0, spatial_overlap, device=tile_samples.device) + tile_weights[:, :, :, :, -spatial_overlap:] *= h_blend.view(1, 1, 1, 1, -1) + + # Apply vertical blending weights + if v > 0: # Top overlap + v_blend = torch.linspace(0, 1, spatial_overlap, device=tile_samples.device) + tile_weights[:, :, :, :spatial_overlap, :] *= v_blend.view(1, 1, 1, -1, 1) + if v < vertical_tiles - 1: # Bottom overlap + v_blend = torch.linspace(1, 0, spatial_overlap, device=tile_samples.device) + tile_weights[:, :, :, -spatial_overlap:, :] *= v_blend.view(1, 1, 1, -1, 1) + + return tile_weights + + def _calculate_tile_seed( + self, + first_seed, + start_index, + vertical_tiles, + horizontal_tiles, + v, + h, + seed_offset, + ): + """Calculate the seed value for a specific temporal and spatial tile.""" + return ( + first_seed + + start_index * (vertical_tiles * horizontal_tiles) + + v * horizontal_tiles + + h + + seed_offset + ) + + def _get_per_tile_value(self, value_list, tile_index): + """Get a value from a per-tile configuration list, using the last value if the list is shorter.""" + return value_list[min(tile_index, len(value_list) - 1)] + + def _parse_per_tile_config(self, config_string, default_value, converter_func): + """Parse a comma-separated per-tile configuration string into a list with type conversion.""" + if config_string == "": + config_string = default_value + return [converter_func(item.strip()) for item in config_string.split(",")] + + def _prepare_guider_for_chunk( + self, guider, optional_positive_conditionings, chunk_index + ): + """Prepare the guider for a specific chunk, handling optional positive conditionings.""" + if optional_positive_conditionings is not None: + new_guider = copy.copy(guider) + positive, negative = guider.raw_conds + # Use the conditioning at chunk_index, or the last one if we've run out + conditioning_index = min( + chunk_index, len(optional_positive_conditionings) - 1 + ) + new_guider.set_conds( + optional_positive_conditionings[conditioning_index], + negative, + ) + new_guider.raw_conds = ( + optional_positive_conditionings[conditioning_index], + negative, + ) + return new_guider + else: + return guider + + def sample( + self, + model, + vae, + noise, + sampler, + sigmas, + guider, + latents, + guiding_strength, + adain_factor, + temporal_tile_size, + temporal_overlap, + temporal_overlap_cond_strength, + horizontal_tiles, + vertical_tiles, + spatial_overlap, + optional_cond_image=None, + optional_guiding_latents=None, + optional_negative_index_latents=None, + optional_negative_index=-1, + optional_negative_index_strength=1.0, + optional_positive_conditionings=None, + per_tile_seed_offsets="0", + per_tile_use_negative_latents="1", + ): + + # Get dimensions and prepare for spatial tiling + samples = latents["samples"] + batch, channels, frames, height, width = samples.shape + time_scale_factor, width_scale_factor, height_scale_factor = ( + vae.downscale_index_formula + ) + temporal_tile_size = temporal_tile_size // time_scale_factor + temporal_overlap = temporal_overlap // time_scale_factor + first_seed = noise.seed + + per_tile_seed_offsets = self._parse_per_tile_config( + per_tile_seed_offsets, "0", int + ) + per_tile_use_negative_latents = self._parse_per_tile_config( + per_tile_use_negative_latents, "1", lambda x: bool(int(x)) + ) + + if optional_guiding_latents is not None: + assert ( + latents["samples"].shape[2] + == optional_guiding_latents["samples"].shape[2] + ), "The number of frames in the latents and optional_guiding_latents must be the same" + + # Calculate tile sizes with overlap + base_tile_height = ( + height + (vertical_tiles - 1) * spatial_overlap + ) // vertical_tiles + base_tile_width = ( + width + (horizontal_tiles - 1) * spatial_overlap + ) // horizontal_tiles + + # Initialize output tensor and weight tensor + final_output = torch.zeros_like(samples, device=samples.device) + weights = torch.zeros_like(samples, device=samples.device) + + if optional_cond_image is not None: + img_height = height * height_scale_factor + img_width = width * width_scale_factor + optional_cond_image = comfy.utils.common_upscale( + optional_cond_image.movedim(-1, 1), + img_width, + img_height, + "bicubic", + crop="center", + ).movedim(1, -1) + img_batch, img_height, img_width, img_channels = optional_cond_image.shape + + # Process each spatial tile + for v in range(vertical_tiles): + for h in range(horizontal_tiles): + # Calculate tile boundaries + h_start = h * (base_tile_width - spatial_overlap) + v_start = v * (base_tile_height - spatial_overlap) + + # Adjust end positions for edge tiles + h_end = ( + min(h_start + base_tile_width, width) + if h < horizontal_tiles - 1 + else width + ) + v_end = ( + min(v_start + base_tile_height, height) + if v < vertical_tiles - 1 + else height + ) + + # Calculate actual tile dimensions + tile_height = v_end - v_start + tile_width = h_end - h_start + + print(f"Processing spatial tile at row {v}, col {h}:") + print(f" Position: ({v_start}:{v_end}, {h_start}:{h_end})") + print(f" Size: {tile_height}x{tile_width}") + + # Extract spatial tiles from all inputs + ( + tile_latents, + tile_guiding_latents, + tile_negative_index_latents, + tile_cond_image, + ) = self._extract_spatial_tile( + samples, + optional_guiding_latents, + optional_negative_index_latents, + optional_cond_image, + v_start, + v_end, + h_start, + h_end, + height_scale_factor, + width_scale_factor, + ) + + # Process all temporal chunks for this spatial tile + tile_config = TileConfig( + tile_latents=tile_latents, + tile_guiding_latents=tile_guiding_latents, + tile_negative_index_latents=tile_negative_index_latents, + tile_cond_image=tile_cond_image, + tile_height=tile_height, + tile_width=tile_width, + v=v, + h=h, + vertical_tiles=vertical_tiles, + horizontal_tiles=horizontal_tiles, + first_seed=first_seed, + ) + + sampling_config = SamplingConfig( + temporal_tile_size=temporal_tile_size, + temporal_overlap=temporal_overlap, + temporal_overlap_cond_strength=temporal_overlap_cond_strength, + guiding_strength=guiding_strength, + adain_factor=adain_factor, + optional_negative_index=optional_negative_index, + optional_negative_index_strength=optional_negative_index_strength, + optional_positive_conditionings=optional_positive_conditionings, + time_scale_factor=time_scale_factor, + width_scale_factor=width_scale_factor, + height_scale_factor=height_scale_factor, + per_tile_seed_offsets=per_tile_seed_offsets, + per_tile_use_negative_latents=per_tile_use_negative_latents, + ) + + model_config = ModelConfig( + model=model, + vae=vae, + noise=noise, + sampler=sampler, + sigmas=sigmas, + guider=guider, + ) + + tile_out_latents = self._process_temporal_chunks( + tile_config, + sampling_config, + model_config, + ) + + # Create weight mask for this spatial tile + tile_weights = self._create_spatial_weights( + tile_latents["samples"], + v, + h, + horizontal_tiles, + vertical_tiles, + spatial_overlap, + ) + + # Add weighted tile to final output + final_output[:, :, :, v_start:v_end, h_start:h_end] += ( + tile_out_latents["samples"].to(final_output.device) * tile_weights + ) + weights[:, :, :, v_start:v_end, h_start:h_end] += tile_weights + + # Normalize by weights + final_output = final_output / (weights + 1e-8) + out_latents = {"samples": final_output} + + noise.seed = first_seed + return (out_latents,) + + +@comfy_node( + name="MultiPromptProvider", +) +class MultiPromptProvider: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "prompts": ( + "STRING", + { + "multiline": True, + "dynamicPrompts": True, + "tooltip": "Prompts to encode, one per line. Each prompt will be encoded separately. Each prompt will be used in one temporal_tile in LTXVLoopingSampler.", + }, + ), + "clip": ("CLIP", {"tooltip": "CLIP model to encode the prompts."}), + }, + } + + RETURN_TYPES = ("CONDITIONING",) + RETURN_NAMES = ("conditionings",) + + FUNCTION = "get_prompt_list" + CATEGORY = "prompt" + + def get_prompt_list(self, prompts, clip): + prompt_list = prompts.split("|") + prompt_list = [prompt.strip() for prompt in prompt_list] + encoded_prompt_list = [ + clip.encode_from_tokens_scheduled(clip.tokenize(prompt)) + for prompt in prompt_list + ] + return (encoded_prompt_list,) diff --git a/tiled_sampler.py b/tiled_sampler.py index c97847a..7723c22 100644 --- a/tiled_sampler.py +++ b/tiled_sampler.py @@ -5,7 +5,6 @@ import torch from comfy_extras.nodes_custom_sampler import SamplerCustomAdvanced from comfy_extras.nodes_lt import LTXVAddGuide, LTXVCropGuides -from .easy_samplers import LTXVBaseSampler, LTXVExtendSampler, LTXVInContextSampler from .latents import LTXVAddLatentGuide, LTXVSelectLatents from .nodes_registry import comfy_node @@ -315,296 +314,3 @@ class LTXVTiledSampler: denoised_output = denoised_output / (weights + 1e-8) return {"samples": output}, {"samples": denoised_output} - - -@comfy_node( - name="LTXVLoopingSampler", -) -class LTXVLoopingSampler: - - @classmethod - def INPUT_TYPES(s): - return { - "required": { - "model": ("MODEL", {"tooltip": "The diffusion model to use."}), - "vae": ("VAE", {"tooltip": "The VAE to use."}), - "noise": ("NOISE", {"tooltip": "The noise to use."}), - "sampler": ("SAMPLER", {"tooltip": "The sampler to use."}), - "sigmas": ("SIGMAS", {"tooltip": "The sigmas to use."}), - "guider": ( - "GUIDER", - {"tooltip": "The guider to use, must be a STGGuiderAdvanced."}, - ), - "latents": ( - "LATENT", - { - "tooltip": "The latents to use for creating the long video, they can be guiding latents or empty latents when no guidance is used." - }, - ), - "use_latents_to_guide": ( - "BOOLEAN", - { - "default": True, - "tooltip": "Whether to use the latents to guide the sampling, such as with IC-LoRAs. If False, just the shape of the latents will be used.", - }, - ), - "guiding_strength": ( - "FLOAT", - { - "default": 1.0, - "min": 0.0, - "max": 1.0, - "step": 0.01, - "tooltip": "The strength of the conditioning on guiding latents, when use_latents_to_guide is True.", - }, - ), - "temporal_tile_size": ( - "INT", - { - "default": 80, - "min": 24, - "max": 1000, - "step": 8, - "tooltip": "The size of the temporal tile to use for the sampling, in pixel frames, in addition to the overlapping region.", - }, - ), - "overlap": ( - "INT", - { - "default": 24, - "min": 16, - "max": 80, - "step": 8, - "tooltip": "The overlap between the temporal tiles, in pixel frames.", - }, - ), - "overlap_cond_strength": ( - "FLOAT", - { - "default": 0.5, - "min": 0.0, - "max": 1.0, - "step": 0.01, - "tooltip": "The strength of the conditioning on the latents from the previous temporal tile.", - }, - ), - }, - "optional": { - "optional_cond_image": ( - "IMAGE", - { - "tooltip": "The image to use for conditioning the first frame in the video (i2v setup). If not provided, the first frame will be unconditioned (t2v setup). The image will be resized to the size of the first frame." - }, - ), - "adain_factor": ( - "FLOAT", - { - "default": 0.0, - "min": 0.0, - "max": 1.0, - "step": 0.01, - "tooltip": "The strength of the AdaIn operation used to fix the statistics of each new generated temporal tile, to prevent accumulated oversaturation.", - }, - ), - "optional_positive_conditionings": ( - "CONDITIONING", - { - "tooltip": "Optional way to provide changing positive prompts, one per temporal tile, using the MultiPromptProvider node." - }, - ), - "optional_negative_index_latents": ( - "LATENT", - { - "tooltip": "Special optional latents to condition on a negative index before each new temporal tile as a way to provide long term context during video generation." - }, - ), - "optional_negative_index": ( - "INT", - { - "default": -1, - "min": -1000, - "max": 1000, - "tooltip": "The index in which to condition using the optional_negative_index_latents.", - }, - ), - "optional_negative_index_strength": ( - "FLOAT", - { - "default": 1.0, - "min": 0.0, - "max": 1.0, - "step": 0.01, - "tooltip": "The strength of the conditioning with the optional_negative_index_latents.", - }, - ), - }, - } - - RETURN_TYPES = ("LATENT",) - RETURN_NAMES = ("denoised_output",) - - FUNCTION = "sample" - CATEGORY = "sampling" - - def sample( - self, - model, - vae, - noise, - sampler, - sigmas, - guider, - latents, - use_latents_to_guide, - guiding_strength, - adain_factor, - temporal_tile_size, - overlap, - overlap_cond_strength, - optional_cond_image=None, - optional_negative_index_latents=None, - optional_negative_index=-1, - optional_negative_index_strength=1.0, - optional_positive_conditionings=None, - ): - time_scale_factor, width_scale_factor, height_scale_factor = ( - vae.downscale_index_formula - ) - temporal_tile_size = temporal_tile_size // time_scale_factor - overlap = overlap // time_scale_factor - first_seed = noise.seed - chunk_index = 0 - for start_index, end_index in zip( - range( - 0, - latents["samples"].shape[2] + temporal_tile_size - overlap, - temporal_tile_size - overlap, - ), - range( - temporal_tile_size, - latents["samples"].shape[2] + temporal_tile_size - overlap, - temporal_tile_size - overlap, - ), - ): - guiding_latent_chunk = LTXVSelectLatents().select_latents( - latents, - start_index, - min(end_index - 1, latents["samples"].shape[2] - 1), - )[0] - noise.seed = first_seed + start_index - - # Handle optional positive conditionings - if optional_positive_conditionings is not None: - new_guider = copy.copy(guider) - positive, negative = guider.raw_conds - # Use the conditioning at chunk_index, or the last one if we've run out - conditioning_index = min( - chunk_index, len(optional_positive_conditionings) - 1 - ) - new_guider.set_conds( - optional_positive_conditionings[conditioning_index], negative - ) - new_guider.raw_conds = ( - optional_positive_conditionings[conditioning_index], - negative, - ) - else: - new_guider = guider - - if start_index == 0: - if use_latents_to_guide: - out_latents = LTXVInContextSampler().sample( - vae=vae, - guider=new_guider, - sampler=sampler, - sigmas=sigmas, - noise=noise, - guiding_latents=guiding_latent_chunk, - optional_cond_image=optional_cond_image, - num_frames=-1, - )[0] - else: - out_latents = LTXVBaseSampler().sample( - model=model, - vae=vae, - noise=noise, - sampler=sampler, - sigmas=sigmas, - guider=new_guider, - num_frames=( - min(temporal_tile_size, latents["samples"].shape[2]) - 1 - ) - * time_scale_factor - + 1, - width=latents["samples"].shape[4] * width_scale_factor, - height=latents["samples"].shape[3] * height_scale_factor, - optional_cond_images=optional_cond_image, - optional_cond_indices="0", - strength=overlap_cond_strength, - )[0] - first_out_latents = copy.deepcopy(out_latents) - else: - out_latents = LTXVExtendSampler().sample( - model=model, - vae=vae, - sampler=sampler, - sigmas=sigmas, - noise=noise, - latents=out_latents, - num_new_frames=(guiding_latent_chunk["samples"].shape[2] - overlap) - * time_scale_factor, - frame_overlap=overlap * time_scale_factor, - guider=new_guider, - strength=overlap_cond_strength, - guiding_strength=guiding_strength, - optional_guiding_latents=( - guiding_latent_chunk if use_latents_to_guide else None - ), - optional_reference_latents=first_out_latents, - adain_factor=adain_factor, - optional_negative_index_latents=optional_negative_index_latents, - optional_negative_index=optional_negative_index, - optional_negative_index_strength=optional_negative_index_strength, - )[0] - - chunk_index += 1 - - noise.seed = first_seed - return (out_latents,) - - -@comfy_node( - name="MultiPromptProvider", -) -class MultiPromptProvider: - - @classmethod - def INPUT_TYPES(s): - return { - "required": { - "prompts": ( - "STRING", - { - "multiline": True, - "dynamicPrompts": True, - "tooltip": "Prompts to encode, one per line. Each prompt will be encoded separately. Each prompt will be used in one temporal_tile in LTXVLoopingSampler.", - }, - ), - "clip": ("CLIP", {"tooltip": "CLIP model to encode the prompts."}), - }, - } - - RETURN_TYPES = ("CONDITIONING",) - RETURN_NAMES = ("conditionings",) - - FUNCTION = "get_prompt_list" - CATEGORY = "prompt" - - def get_prompt_list(self, prompts, clip): - prompt_list = prompts.split("\n") - prompt_list = [prompt.strip() for prompt in prompt_list] - encoded_prompt_list = [ - clip.encode_from_tokens_scheduled(clip.tokenize(prompt)) - for prompt in prompt_list - ] - return (encoded_prompt_list,) diff --git a/tiled_vae_decode.py b/tiled_vae_decode.py new file mode 100644 index 0000000..9a8ab66 --- /dev/null +++ b/tiled_vae_decode.py @@ -0,0 +1,197 @@ +import torch + +from .nodes_registry import comfy_node + + +@comfy_node( + name="LTXVTiledVAEDecode", +) +class LTXVTiledVAEDecode: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "vae": ("VAE",), + "latents": ("LATENT",), + "horizontal_tiles": ("INT", {"default": 1, "min": 1, "max": 6}), + "vertical_tiles": ("INT", {"default": 1, "min": 1, "max": 6}), + "overlap": ("INT", {"default": 1, "min": 1, "max": 8}), + "last_frame_fix": ("BOOLEAN", {"default": False}), + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + + FUNCTION = "decode" + + CATEGORY = "latent" + + def decode( + self, + vae, + latents, + horizontal_tiles, + vertical_tiles, + overlap, + last_frame_fix, + ): + # Get the latent samples + samples = latents["samples"] + + if last_frame_fix: + # Repeat the last frame along dimension 2 (frames) + # samples: [batch, channels, frames, height, width] + last_frame = samples[ + :, :, -1:, :, : + ] # shape: [batch, channels, 1, height, width] + samples = torch.cat([samples, last_frame], dim=2) + + batch, channels, frames, height, width = samples.shape + time_scale_factor, width_scale_factor, height_scale_factor = ( + vae.downscale_index_formula + ) + image_frames = 1 + (frames - 1) * time_scale_factor + + # Calculate output image dimensions + output_height = height * height_scale_factor + output_width = width * width_scale_factor + + # Calculate tile sizes with overlap + base_tile_height = (height + (vertical_tiles - 1) * overlap) // vertical_tiles + base_tile_width = (width + (horizontal_tiles - 1) * overlap) // horizontal_tiles + + # Initialize output tensor and weight tensor + # VAE decode returns images in format [batch, height, width, channels] + output = None + weights = None + + # Process each tile + for v in range(vertical_tiles): + for h in range(horizontal_tiles): + # Calculate tile boundaries + h_start = h * (base_tile_width - overlap) + v_start = v * (base_tile_height - overlap) + + # Adjust end positions for edge tiles + h_end = ( + min(h_start + base_tile_width, width) + if h < horizontal_tiles - 1 + else width + ) + v_end = ( + min(v_start + base_tile_height, height) + if v < vertical_tiles - 1 + else height + ) + + # Calculate actual tile dimensions + tile_height = v_end - v_start + tile_width = h_end - h_start + + print(f"Processing VAE decode tile at row {v}, col {h}:") + print(f" Position: ({v_start}:{v_end}, {h_start}:{h_end})") + print(f" Size: {tile_height}x{tile_width}") + + # Extract tile + tile = samples[:, :, :, v_start:v_end, h_start:h_end] + + # Create tile latents dict + tile_latents = {"samples": tile} + + # Decode the tile + decoded_tile = vae.decode(tile_latents["samples"]) + + # Initialize output tensors on first tile + if output is None: + output = torch.zeros( + ( + batch, + image_frames, + output_height, + output_width, + decoded_tile.shape[-1], + ), + device=decoded_tile.device, + dtype=decoded_tile.dtype, + ) + weights = torch.zeros( + (batch, image_frames, output_height, output_width, 1), + device=decoded_tile.device, + dtype=decoded_tile.dtype, + ) + + # Calculate output tile boundaries + out_h_start = v_start * height_scale_factor + out_h_end = v_end * height_scale_factor + out_w_start = h_start * width_scale_factor + out_w_end = h_end * width_scale_factor + + # Create weight mask for this tile + tile_out_height = out_h_end - out_h_start + tile_out_width = out_w_end - out_w_start + tile_weights = torch.ones( + (batch, image_frames, tile_out_height, tile_out_width, 1), + device=decoded_tile.device, + dtype=decoded_tile.dtype, + ) + + # Calculate overlap regions in output space + overlap_out_h = overlap * height_scale_factor + overlap_out_w = overlap * width_scale_factor + + # Apply horizontal blending weights + if h > 0: # Left overlap + h_blend = torch.linspace( + 0, 1, overlap_out_w, device=decoded_tile.device + ) + tile_weights[:, :, :, :overlap_out_w, :] *= h_blend.view( + 1, 1, 1, -1, 1 + ) + if h < horizontal_tiles - 1: # Right overlap + h_blend = torch.linspace( + 1, 0, overlap_out_w, device=decoded_tile.device + ) + tile_weights[:, :, :, -overlap_out_w:, :] *= h_blend.view( + 1, 1, 1, -1, 1 + ) + + # Apply vertical blending weights + if v > 0: # Top overlap + v_blend = torch.linspace( + 0, 1, overlap_out_h, device=decoded_tile.device + ) + tile_weights[:, :, :overlap_out_h, :, :] *= v_blend.view( + 1, 1, -1, 1, 1 + ) + if v < vertical_tiles - 1: # Bottom overlap + v_blend = torch.linspace( + 1, 0, overlap_out_h, device=decoded_tile.device + ) + tile_weights[:, :, -overlap_out_h:, :, :] *= v_blend.view( + 1, 1, -1, 1, 1 + ) + + # Add weighted tile to output + output[:, :, out_h_start:out_h_end, out_w_start:out_w_end, :] += ( + decoded_tile * tile_weights + ) + + # Add weights to weight tensor + weights[ + :, :, out_h_start:out_h_end, out_w_start:out_w_end, : + ] += tile_weights + + # Normalize by weights + output = output / (weights + 1e-8) + + # Reshape output to match expected format [batch * frames, height, width, channels] + output = output.view( + batch * image_frames, output_height, output_width, output.shape[-1] + ) + + if last_frame_fix: + output = output[:-time_scale_factor, :, :] + + return (output,)