From 38f065d276dc3c5fd2789267b470625a6e23c7d2 Mon Sep 17 00:00:00 2001 From: "Jean J. de Jong" Date: Thu, 9 Apr 2026 12:34:11 +0200 Subject: [PATCH 1/4] Add audio-visual latent support to LTXVLoopingSampler and LTXVExtendSampler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The looping and extend samplers currently reject AV latents with a ValueError, forcing users to generate audio in a separate low-sigma pass. This produces inferior results because audio is not refined jointly with video across temporal tiles. This change removes the AV rejection guard and carries audio latents through the temporal tiling loop alongside video: - LTXVLoopingSampler: separates AV input into video + audio, passes audio slices to each tile's sampler, accumulates audio output across tiles, and reassembles the AV NestedTensor on output. - LTXVExtendSampler: accepts audio tile data, computes audio overlap and new-frame geometry matching the video tile structure, creates proper audio noise masks, and wraps/unwraps AV latents around all SamplerCustomAdvanced calls. - LTXVBaseSampler / LTXVInContextSampler: accept optional audio tile, wrap into AV latent before sampling, split on output. For stage-2 refinement (low-sigma upscale pass), the input audio data is used to initialize each tile's audio frames instead of zeros, enabling the model to refine lipsync and audio-visual coherence at higher resolution — matching the behavior of the standard two-stage workflow using SamplerCustomAdvanced directly. Helper functions _make_av_latent_dict() and _split_av_latent_dict() handle the NestedTensor packing/unpacking with proper noise mask propagation for both modalities. Co-Authored-By: Claude Opus 4.6 --- easy_samplers.py | 155 ++++++++++++++++++++++++++++++++++++++++++--- looping_sampler.py | 144 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 287 insertions(+), 12 deletions(-) diff --git a/easy_samplers.py b/easy_samplers.py index d44e77c..86b5df1 100644 --- a/easy_samplers.py +++ b/easy_samplers.py @@ -16,6 +16,50 @@ from .nodes_registry import comfy_node +def _make_av_latent_dict(video_latent_dict, audio_tensor, audio_noise_mask=None): + """Wrap video latent dict + audio tensor into AV latent dict with NestedTensor. + + If audio_tensor is None, returns video_latent_dict unchanged. + Creates matching noise masks for both modalities when either is present. + """ + if audio_tensor is None: + return video_latent_dict + result = video_latent_dict.copy() + result["samples"] = NestedTensor([result["samples"], audio_tensor]) + video_mask = result.get("noise_mask") + if video_mask is not None or audio_noise_mask is not None: + if video_mask is None: + vs = result["samples"].tensors[0] + video_mask = torch.ones( + vs.shape[0], 1, vs.shape[2], vs.shape[3], vs.shape[4], + device=vs.device, dtype=vs.dtype, + ) + if audio_noise_mask is None: + audio_noise_mask = torch.ones( + audio_tensor.shape[0], 1, audio_tensor.shape[2], audio_tensor.shape[3], + device=audio_tensor.device, dtype=audio_tensor.dtype, + ) + result["noise_mask"] = NestedTensor([video_mask, audio_noise_mask]) + return result + + +def _split_av_latent_dict(latent_dict): + """Split AV latent dict into (video_latent_dict, audio_tensor). + + If the latent is not an AV NestedTensor, returns (latent_dict, None). + """ + samples = latent_dict["samples"] + if not isinstance(samples, NestedTensor) or len(samples.tensors) < 2: + return latent_dict, None + result = latent_dict.copy() + result["samples"] = samples.tensors[0] + audio = samples.tensors[1] + nm = result.get("noise_mask") + if nm is not None and isinstance(nm, NestedTensor): + result["noise_mask"] = nm.tensors[0] + return result, audio + + def _get_raw_conds_from_guider(guider): if not hasattr(guider, "raw_conds"): if "negative" not in guider.original_conds: @@ -148,6 +192,7 @@ def sample( optional_initialization_latents=None, guiding_start_step=0, guiding_end_step=1000, + _audio_tile=None, ): guider = copy.copy(guider) guider.original_conds = copy.deepcopy(guider.original_conds) @@ -262,13 +307,15 @@ def sample( # Denoise the latent video print("Denoising with conditioning on sigmas: ", middle_sigmas) + _av = _make_av_latent_dict(latents, _audio_tile) (output_latents, denoised_output_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=middle_sigmas, - latent_image=latents, + latent_image=_av, ) + denoised_output_latents, _audio_tile = _split_av_latent_dict(denoised_output_latents) # Clean up guides if image conditioning was used positive, negative, denoised_output_latents = LTXVCropGuides.execute( @@ -284,13 +331,18 @@ def sample( "Denoising with no conditioning but with classical i2v noise mask on sigmas: ", low_sigmas, ) + _av = _make_av_latent_dict(denoised_output_latents, _audio_tile) (_, denoised_output_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=low_sigmas, - latent_image=denoised_output_latents, + latent_image=_av, ) + denoised_output_latents, _audio_tile = _split_av_latent_dict(denoised_output_latents) + + if _audio_tile is not None: + denoised_output_latents["_audio"] = _audio_tile return (denoised_output_latents, positive, negative) @@ -399,6 +451,8 @@ def sample( guiding_start_step=0, guiding_end_step=1000, normalize_per_frame=False, + _audio_tile=None, + _audio_new_init=None, ): guider = copy.copy(guider) guider.original_conds = copy.deepcopy(guider.original_conds) @@ -412,7 +466,20 @@ def sample( positive, negative = _get_raw_conds_from_guider(guider) + # Handle AV latents (standalone mode) + _standalone_av = False + _accumulated_audio = _audio_tile samples = latents["samples"] + if isinstance(samples, NestedTensor) and len(samples.tensors) == 2: + if _accumulated_audio is None: + _accumulated_audio = samples.tensors[1] + _standalone_av = True + latents = latents.copy() + latents["samples"] = samples.tensors[0] + if "noise_mask" in latents and isinstance(latents["noise_mask"], NestedTensor): + latents["noise_mask"] = latents["noise_mask"].tensors[0] + samples = latents["samples"] + batch, channels, frames, height, width = samples.shape time_scale_factor, width_scale_factor, height_scale_factor = ( vae.downscale_index_formula @@ -428,6 +495,52 @@ def sample( latents, -overlap, -1 ) + # Set up audio extend tile if audio is available + _audio_extend_tile = None + _audio_noise_mask = None + _audio_overlap = 0 + if _accumulated_audio is not None: + audio_T = _accumulated_audio.shape[2] + video_T = frames + audio_ratio = audio_T / max(video_T, 1) + _audio_overlap = max(1, round(overlap * audio_ratio)) + video_new_latent_frames = num_new_frames // time_scale_factor + audio_new_frames = max(1, round(video_new_latent_frames * audio_ratio)) + + # Build audio tile: overlap (already denoised) + new frames. + # If _audio_new_init is provided (stage-2 refinement), use it + # as initialization for the new frames instead of zeros. + audio_overlap_data = _accumulated_audio[:, :, -_audio_overlap:] + if _audio_new_init is not None: + available = min(audio_new_frames, _audio_new_init.shape[2]) + audio_new_data = _audio_new_init[:, :, :available].clone() + if available < audio_new_frames: + pad = torch.zeros( + _accumulated_audio.shape[0], _accumulated_audio.shape[1], + audio_new_frames - available, _accumulated_audio.shape[3], + device=_accumulated_audio.device, dtype=_accumulated_audio.dtype, + ) + audio_new_data = torch.cat([audio_new_data, pad], dim=2) + else: + audio_new_data = torch.zeros( + _accumulated_audio.shape[0], _accumulated_audio.shape[1], + audio_new_frames, _accumulated_audio.shape[3], + device=_accumulated_audio.device, dtype=_accumulated_audio.dtype, + ) + _audio_extend_tile = torch.cat([audio_overlap_data, audio_new_data], dim=2) + + # Audio noise mask: preserve overlap, denoise new + _audio_noise_mask = torch.ones( + _audio_extend_tile.shape[0], 1, + _audio_extend_tile.shape[2], _audio_extend_tile.shape[3], + device=_audio_extend_tile.device, dtype=_audio_extend_tile.dtype, + ) + _audio_noise_mask[:, :, :_audio_overlap] = 1.0 - strength + print( + f"[ExtendSampler] Audio extend tile: overlap={_audio_overlap}, " + f"new={audio_new_frames}, total={_audio_extend_tile.shape[2]}" + ) + if optional_initialization_latents is None: new_latents = EmptyLTXVLatentVideo.execute( width=width * width_scale_factor, @@ -488,13 +601,15 @@ def sample( if len(high_sigmas) > 1: guider.set_conds(positive, negative) print("Denoising with overlap conditioning only on sigmas: ", high_sigmas) + _av = _make_av_latent_dict(new_latents, _audio_extend_tile, _audio_noise_mask) (_, new_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=high_sigmas, - latent_image=new_latents, + latent_image=_av, ) + new_latents, _audio_extend_tile = _split_av_latent_dict(new_latents) if optional_guiding_latents is not None: optional_guiding_latents = LTXVSelectLatents().select_latents( @@ -533,13 +648,15 @@ def sample( # Denoise the latent video print("Denoising with full conditioning on sigmas: ", middle_sigmas) + _av = _make_av_latent_dict(new_latents, _audio_extend_tile, _audio_noise_mask) (output_latents, denoised_output_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=middle_sigmas, - latent_image=new_latents, + latent_image=_av, ) + denoised_output_latents, _audio_extend_tile = _split_av_latent_dict(denoised_output_latents) positive, negative, denoised_output_latents = LTXVCropGuides.execute( positive=positive, @@ -591,13 +708,15 @@ def sample( "Denoising with overlap + keyframes conditioning only on sigmas: ", low_sigmas, ) + _av = _make_av_latent_dict(denoised_output_latents, _audio_extend_tile, _audio_noise_mask) (_, denoised_output_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=low_sigmas, - latent_image=denoised_output_latents, + latent_image=_av, ) + denoised_output_latents, _audio_extend_tile = _split_av_latent_dict(denoised_output_latents) positive, negative, denoised_output_latents = LTXVCropGuides.execute( positive=positive, negative=negative, @@ -621,6 +740,16 @@ def sample( (latents,) = LinearOverlapLatentTransition().process( latents, truncated_denoised_output_latents, overlap - 1, axis=2 ) + + # Accumulate audio: append new (non-overlap) audio frames + if _accumulated_audio is not None and _audio_extend_tile is not None: + new_audio = _audio_extend_tile[:, :, _audio_overlap:] + accumulated_audio_out = torch.cat([_accumulated_audio, new_audio], dim=2) + if _standalone_av: + latents["samples"] = NestedTensor([latents["samples"], accumulated_audio_out]) + else: + latents["_audio"] = accumulated_audio_out + return (latents, positive, negative) @@ -692,6 +821,7 @@ def sample( guiding_strength=1.0, guiding_start_step=0, guiding_end_step=1000, + _audio_tile=None, ): guider = copy.copy(guider) guider.original_conds = copy.deepcopy(guider.original_conds) @@ -735,13 +865,15 @@ def sample( "Denoising with keyframes only [if available] on sigmas: ", high_sigmas, ) + _av = _make_av_latent_dict(new_latents, _audio_tile) (_, new_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=high_sigmas, - latent_image=new_latents, + latent_image=_av, ) + new_latents, _audio_tile = _split_av_latent_dict(new_latents) if optional_cond_indices is not None and 0 in optional_cond_indices: guiding_latents = LTXVSelectLatents().select_latents( @@ -806,13 +938,15 @@ def sample( # Denoise the latent video print("Denoising with full conditioning on sigmas: ", middle_sigmas) + _av = _make_av_latent_dict(new_latents, _audio_tile) (_, denoised_output_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=middle_sigmas, - latent_image=new_latents, + latent_image=_av, ) + denoised_output_latents, _audio_tile = _split_av_latent_dict(denoised_output_latents) # Clean up guides if image conditioning was used positive, negative, denoised_output_latents = LTXVCropGuides.execute( @@ -827,19 +961,24 @@ def sample( "Denoising with keyframes only [if available] conditioning on sigmas: ", low_sigmas, ) + _av = _make_av_latent_dict(denoised_output_latents, _audio_tile) (_, denoised_output_latents) = SamplerCustomAdvanced().sample( noise=noise, guider=guider, sampler=sampler, sigmas=low_sigmas, - latent_image=denoised_output_latents, + latent_image=_av, ) + denoised_output_latents, _audio_tile = _split_av_latent_dict(denoised_output_latents) positive, negative, denoised_output_latents = LTXVCropGuides.execute( positive=positive, negative=negative, latent=denoised_output_latents, ) + if _audio_tile is not None: + denoised_output_latents["_audio"] = _audio_tile + return (denoised_output_latents, positive, negative) diff --git a/looping_sampler.py b/looping_sampler.py index 874a06a..061c04f 100644 --- a/looping_sampler.py +++ b/looping_sampler.py @@ -1,8 +1,10 @@ import copy from dataclasses import dataclass +from typing import Optional import comfy import torch +from comfy.nested_tensor import NestedTensor from .easy_samplers import LTXVBaseSampler, LTXVExtendSampler, LTXVInContextSampler from .latents import LTXVDilateLatent, LTXVSelectLatents @@ -312,11 +314,13 @@ def _process_temporal_chunks( tile_config: TileConfig, sampling_config: SamplingConfig, model_config: ModelConfig, + audio_info: Optional[dict] = None, ): """Process all temporal chunks for a single spatial tile.""" chunk_index = 0 tile_out_latents = None first_tile_out_latents = None + accumulated_audio = None for i_temporal_tile, (start_index, end_index) in enumerate( zip( @@ -431,6 +435,55 @@ def _process_temporal_chunks( [str(i) for i in this_chunk_keyframe_indices] ) if start_index == 0: + # Create audio tile for the base tile. + # If input audio data is available (stage-2 refinement), + # use the corresponding slice; otherwise create zeros + # (stage-1 generation from scratch). + audio_tile = None + if audio_info is not None: + video_tile_frames = min( + sampling_config.temporal_tile_size, + tile_config.tile_latents["samples"].shape[2], + ) + audio_tile_frames = max( + 1, + round( + video_tile_frames + * audio_info["total_audio_frames"] + / max(audio_info["total_video_frames"], 1) + ), + ) + src_audio = audio_info.get("tensor") + if src_audio is not None: + # Refinement: use input audio slice + available = min(audio_tile_frames, src_audio.shape[2]) + audio_tile = src_audio[:, :, :available].clone() + if available < audio_tile_frames: + pad = torch.zeros( + 1, audio_info["channels"], + audio_tile_frames - available, + audio_info["freq_bins"], + device=audio_info["device"], + dtype=audio_info["dtype"], + ) + audio_tile = torch.cat([audio_tile, pad], dim=2) + print( + f"[LoopingSampler] Base tile audio (from input): {audio_tile.shape}" + ) + else: + # Generation: start from zeros + audio_tile = torch.zeros( + 1, + audio_info["channels"], + audio_tile_frames, + audio_info["freq_bins"], + device=audio_info["device"], + dtype=audio_info["dtype"], + ) + print( + f"[LoopingSampler] Base tile audio (zeros): {audio_tile.shape}" + ) + if tile_config.tile_guiding_latents is not None: tile_out_latents = LTXVInContextSampler().sample( vae=model_config.vae, @@ -450,6 +503,7 @@ def _process_temporal_chunks( guiding_strength=sampling_config.guiding_strength, guiding_start_step=sampling_config.guiding_start_step, guiding_end_step=sampling_config.guiding_end_step, + _audio_tile=audio_tile, )[0] else: tile_out_latents = LTXVBaseSampler().sample( @@ -483,9 +537,43 @@ def _process_temporal_chunks( optional_initialization_latents=latent_chunk, guiding_start_step=sampling_config.guiding_start_step, guiding_end_step=sampling_config.guiding_end_step, + _audio_tile=audio_tile, )[0] + + # Extract denoised audio from base tile + accumulated_audio = tile_out_latents.pop("_audio", None) first_tile_out_latents = copy.deepcopy(tile_out_latents) else: + # Compute audio init data for the "new frames" portion of + # this extend tile (for stage-2 refinement). + _audio_new_init = None + src_audio = audio_info.get("tensor") if audio_info else None + if src_audio is not None and accumulated_audio is not None: + # The extend tile adds new video frames after the overlap. + # Map the video new-frame region to audio frames. + acc_audio_T = accumulated_audio.shape[2] + audio_ratio = ( + audio_info["total_audio_frames"] + / max(audio_info["total_video_frames"], 1) + ) + video_new_latent = ( + latent_chunk["samples"].shape[2] + - sampling_config.temporal_overlap + ) + audio_new_frames = max( + 1, round(video_new_latent * audio_ratio) + ) + # The new audio starts where accumulated audio ends + audio_start = acc_audio_T + audio_end = min( + audio_start + audio_new_frames, + src_audio.shape[2], + ) + if audio_start < src_audio.shape[2]: + _audio_new_init = src_audio[ + :, :, audio_start:audio_end + ] + tile_out_latents = LTXVExtendSampler().sample( model=model_config.model, vae=model_config.vae, @@ -516,10 +604,19 @@ def _process_temporal_chunks( optional_initialization_latents=latent_chunk, guiding_start_step=sampling_config.guiding_start_step, guiding_end_step=sampling_config.guiding_end_step, + _audio_tile=accumulated_audio, + _audio_new_init=_audio_new_init, )[0] + # Update accumulated audio from extend tile + accumulated_audio = tile_out_latents.pop("_audio", accumulated_audio) + chunk_index += 1 + # Store accumulated audio in the output for the caller + if accumulated_audio is not None: + tile_out_latents["_audio"] = accumulated_audio + return tile_out_latents def _create_spatial_weights( @@ -720,13 +817,36 @@ def sample( ): # Get dimensions and prepare for spatial tiling samples = latents["samples"] + + # Handle AV latents: separate video and audio, process video through + # the tile loop, then reassemble AV output at the end. + audio_info = None if ( - isinstance(samples, comfy.nested_tensor.NestedTensor) + isinstance(samples, NestedTensor) and len(samples.tensors) == 2 ): - raise ValueError( - "LoopingSampler currently does not support Audio Visual latents. please only use video latents." + video_tensor = samples.tensors[0] + audio_tensor = samples.tensors[1] + audio_info = { + "channels": audio_tensor.shape[1], + "freq_bins": audio_tensor.shape[3], + "total_video_frames": video_tensor.shape[2], + "total_audio_frames": audio_tensor.shape[2], + "device": audio_tensor.device, + "dtype": audio_tensor.dtype, + "tensor": audio_tensor, # preserve for stage-2 refinement + } + # Switch to video-only for existing tiling logic + latents = latents.copy() + latents["samples"] = video_tensor + if "noise_mask" in latents and isinstance(latents["noise_mask"], NestedTensor): + latents["noise_mask"] = latents["noise_mask"].tensors[0] + samples = video_tensor + print( + f"[LoopingSampler] AV latent detected: video={video_tensor.shape}, " + f"audio={audio_tensor.shape}. Audio will be generated jointly." ) + batch, channels, frames, height, width = samples.shape time_scale_factor, width_scale_factor, height_scale_factor = ( vae.downscale_index_formula @@ -890,12 +1010,19 @@ def sample( guider=guider, ) + # Only process audio for the first spatial tile (audio has no spatial dim) + tile_audio_info = audio_info if (v == 0 and h == 0) else None tile_out_latents = self._process_temporal_chunks( tile_config, sampling_config, model_config, + audio_info=tile_audio_info, ) + # Extract accumulated audio from first spatial tile + if v == 0 and h == 0 and audio_info is not None: + accumulated_audio = tile_out_latents.pop("_audio", None) + # Initialize output tensors on first tile (to get correct temporal dimension) if final_output is None: out_temporal = tile_out_latents["samples"].shape[2] @@ -931,7 +1058,16 @@ def sample( # Normalize by weights final_output = final_output / (weights + 1e-8) - out_latents = {"samples": final_output} + + # Reassemble AV output if audio was processed + if audio_info is not None and accumulated_audio is not None: + out_latents = {"samples": NestedTensor([final_output, accumulated_audio])} + print( + f"[LoopingSampler] AV output: video={final_output.shape}, " + f"audio={accumulated_audio.shape}" + ) + else: + out_latents = {"samples": final_output} noise.seed = first_seed return (out_latents,) From 8547a6862cc39970261b68f52e3348dabcc50b60 Mon Sep 17 00:00:00 2001 From: "Jean J. de Jong" Date: Thu, 9 Apr 2026 14:11:44 +0200 Subject: [PATCH 2/4] Add example workflows and documentation for AV looping - Two-pass I2V looping workflow (single-tile and 30s 3-tile variants) with reference image conditioning at tile boundaries - 30s variant adds MultiPromptProvider for per-tile prompt variation and RepeatImageBatch for guiding images at transitions - V2V Detailer doc with Strix Halo OOM prevention and arbitrary-length video handling notes - Python generator script for the two-pass workflow Co-Authored-By: Claude Opus 4.6 --- .../LTX-2.3_Two_Pass_I2V_Looping.json | 1 + .../LTX-2.3_Two_Pass_I2V_Looping.md | 180 ++++++ .../LTX-2.3_Two_Pass_I2V_Looping_30s.json | 1 + example_workflows/LTX-2_V2V_Detailer.md | 191 +++++++ .../generate_two_pass_i2v_looping.py | 527 ++++++++++++++++++ 5 files changed, 900 insertions(+) create mode 100644 example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json create mode 100644 example_workflows/LTX-2.3_Two_Pass_I2V_Looping.md create mode 100644 example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json create mode 100644 example_workflows/LTX-2_V2V_Detailer.md create mode 100644 example_workflows/generate_two_pass_i2v_looping.py diff --git a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json new file mode 100644 index 0000000..43a3d83 --- /dev/null +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json @@ -0,0 +1 @@ +{"id":"6442f6ec-19f9-4ded-93a2-00c286be6dab","revision":0,"last_node_id":75,"last_link_id":65,"nodes":[{"id":1,"type":"LoadImage","pos":[0,0],"size":[300,300],"flags":{},"order":0,"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","slot_index":0,"links":[1,8]},{"localized_name":"MASK","name":"MASK","type":"MASK","slot_index":1,"links":[]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoadImage"},"widgets_values":["reference_image.png","image"]},{"id":3,"type":"PrimitiveInt","pos":[0,800],"size":[210,100],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"INT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"INT","name":"INT","type":"INT","slot_index":0,"links":[9,11]}],"title":"Frame Count","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveInt"},"widgets_values":[241,"fixed"]},{"id":20,"type":"CLIPTextEncode","pos":[900,0],"size":[400,180],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":3},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[5]}],"title":"Positive Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["A woman walks through a sunlit meadow. Warm breeze rustles the tall grass. Birds sing in the distance. She pauses to admire wildflowers."]},{"id":21,"type":"CLIPTextEncode","pos":[900,220],"size":[400,120],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":4},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[6]}],"title":"Negative Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["pc game, console game, video game, cartoon, childish, ugly, blurry"]},{"id":40,"type":"RandomNoise","pos":[1950,-80],"size":[210,100],"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","slot_index":0,"links":[27]}],"title":"Stage 1 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[42,"fixed"]},{"id":41,"type":"KSamplerSelect","pos":[1950,40],"size":[250,80],"flags":{},"order":3,"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","slot_index":0,"links":[28]}],"title":"Stage 1 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_ancestral_cfg_pp"]},{"id":42,"type":"ManualSigmas","pos":[1950,140],"size":[350,80],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[29]}],"title":"Stage 1 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0"]},{"id":44,"type":"LTXVLoopingSampler","pos":[1950,400],"size":[400,580],"flags":{},"order":28,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":25},{"localized_name":"vae","name":"vae","type":"VAE","link":26},{"localized_name":"noise","name":"noise","type":"NOISE","link":27},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":28},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":29},{"localized_name":"guider","name":"guider","type":"GUIDER","link":30},{"localized_name":"latents","name":"latents","type":"LATENT","link":31},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":32},{"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":null},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":33},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[34]}],"title":"Stage 1 — Generate","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[128,24,1,0.5,1,1,1,1,0.15,0,1000,"0"],"color":"#335533","bgcolor":"#223322"},{"id":4,"type":"PrimitiveFloat","pos":[0,930],"size":[210,100],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"FLOAT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"FLOAT","name":"FLOAT","type":"FLOAT","slot_index":0,"links":[7,62,64]}],"title":"Frame Rate","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveFloat"},"widgets_values":[24]},{"id":75,"type":"FloatToInt","pos":[991.6666666666669,928.3333333333287],"size":[270,82],"flags":{"collapsed":true},"order":17,"mode":0,"inputs":[{"localized_name":"float_value","name":"float_value","type":"FLOAT","widget":{"name":"float_value"},"link":64},{"localized_name":"rounding_mode","name":"rounding_mode","type":"COMBO","widget":{"name":"rounding_mode"},"link":null}],"outputs":[{"localized_name":"int_value","name":"int_value","type":"INT","links":[65]}],"properties":{"aux_id":"danTheMonk/comfyui-int-and-float","ver":"a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720","Node name for S&R":"FloatToInt"},"widgets_values":[0,"down (floor)"]},{"id":2,"type":"LTXVPreprocess","pos":[11.666666666666666,355.00000000000017],"size":[220,58],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":1},{"localized_name":"img_compression","name":"img_compression","type":"INT","widget":{"name":"img_compression"},"link":null}],"outputs":[{"localized_name":"output_image","name":"output_image","type":"IMAGE","slot_index":0,"links":[15,20,32]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVPreprocess"},"widgets_values":[18]},{"id":23,"type":"ResizeImageMaskNode","pos":[8.333333333333284,505.00000000000085],"size":[300,106],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"input","name":"input","type":"IMAGE,MASK","link":8},{"localized_name":"resize_type","name":"resize_type","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"resize_type"},"link":null},{"localized_name":"resize_type.longer_size","name":"resize_type.longer_size","type":"INT","widget":{"name":"resize_type.longer_size"},"link":null},{"localized_name":"scale_method","name":"scale_method","type":"COMBO","widget":{"name":"scale_method"},"link":null}],"outputs":[{"localized_name":"resized","name":"resized","type":"IMAGE","slot_index":0,"links":[39,54]}],"title":"Resize Reference","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ResizeImageMaskNode"},"widgets_values":["scale longer dimension",1536,"lanczos"]},{"id":14,"type":"LatentUpscaleModelLoader","pos":[452.82236965026885,683.519747085575],"size":[376.2368404663082,58],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"model_name","name":"model_name","type":"COMBO","widget":{"name":"model_name"},"link":null}],"outputs":[{"localized_name":"LATENT_UPSCALE_MODEL","name":"LATENT_UPSCALE_MODEL","type":"LATENT_UPSCALE_MODEL","slot_index":0,"links":[36]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LatentUpscaleModelLoader"},"widgets_values":["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"]},{"id":13,"type":"LoraLoaderModelOnly","pos":[451.8815797668459,542.2302684844991],"size":[373.4144708160393,82],"flags":{},"order":20,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":2},{"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","slot_index":0,"links":[22,25,44,47]}],"title":"Distilled LoRA (both stages)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoraLoaderModelOnly"},"widgets_values":["LTX/ltx-2.3-22b-distilled-lora-384.safetensors",0.5]},{"id":12,"type":"LTXVAudioVAELoader","pos":[450,400],"size":[369.75658755188215,58],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"Audio VAE","name":"Audio VAE","type":"VAE","slot_index":0,"links":[10,59]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAELoader"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":11,"type":"LTXAVTextEncoderLoader","pos":[448.1184202331541,213.86843580322656],"size":[373.41447081603906,106],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"text_encoder","name":"text_encoder","type":"COMBO","widget":{"name":"text_encoder"},"link":null},{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null},{"localized_name":"device","name":"device","type":"COMBO","widget":{"name":"device"},"link":null}],"outputs":[{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":0,"links":[3,4]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXAVTextEncoderLoader"},"widgets_values":["gemma_3_12B_it.safetensors","ltx-2.3-22b-dev.safetensors","default"]},{"id":10,"type":"CheckpointLoaderSimple","pos":[445.29605058288524,31.046066152957746],"size":[371.63816731872794,98],"flags":{},"order":9,"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":[2]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[]},{"localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[14,21,26,37,38,48,57]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":22,"type":"LTXVConditioning","pos":[999.7237276428352,409.4078988342295],"size":[210,78],"flags":{},"order":24,"mode":0,"inputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":5},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":6},{"localized_name":"frame_rate","name":"frame_rate","type":"FLOAT","widget":{"name":"frame_rate"},"link":7}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","slot_index":0,"links":[23,45]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","slot_index":1,"links":[24,46]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConditioning"},"widgets_values":[24]},{"id":31,"type":"LTXVEmptyLatentAudio","pos":[1400.940789883423,211.9868560363806],"size":[252.82236965026914,106],"flags":{},"order":23,"mode":0,"inputs":[{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":10},{"localized_name":"frames_number","name":"frames_number","type":"INT","widget":{"name":"frames_number"},"link":11},{"localized_name":"frame_rate","name":"frame_rate","type":"INT","widget":{"name":"frame_rate"},"link":65},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"Latent","name":"Latent","type":"LATENT","slot_index":0,"links":[19]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVEmptyLatentAudio"},"widgets_values":[97,25,1]},{"id":30,"type":"EmptyLTXVLatentVideo","pos":[1400,0],"size":[252.82236965026868,130],"flags":{},"order":16,"mode":0,"inputs":[{"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":"length","name":"length","type":"INT","widget":{"name":"length"},"link":9},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[16]}],"title":"Stage 1 Empty Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"EmptyLTXVLatentVideo"},"widgets_values":[960,544,241,1]},{"id":43,"type":"CFGGuider","pos":[1960.3486887176518,256.9342179016131],"size":[250,98],"flags":{},"order":26,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":22},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":23},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":24},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[30]}],"title":"Stage 1 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#335533","bgcolor":"#223322"},{"id":63,"type":"CFGGuider","pos":[2563.9220909318396,255.9369806251849],"size":[235.2013751337572,98],"flags":{},"order":27,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":44},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":45},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":46},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[52]}],"title":"Stage 2 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#333355","bgcolor":"#222233"},{"id":62,"type":"ManualSigmas","pos":[3047.723288482116,178.70409580402023],"size":[277.23288482116413,58],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[51]}],"title":"Stage 2 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["0.85, 0.7250, 0.4219, 0.0"]},{"id":61,"type":"KSamplerSelect","pos":[3050,69.5972497324864],"size":[250,58],"flags":{},"order":11,"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","slot_index":0,"links":[50]}],"title":"Stage 2 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_cfg_pp"]},{"id":60,"type":"RandomNoise","pos":[3050,-80],"size":[210,82],"flags":{},"order":12,"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":[49]}],"title":"Stage 2 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[43,"fixed"]},{"id":74,"type":"SaveVideo","pos":[3975.7575757575723,1040.9090909090924],"size":[250,106],"flags":{},"order":38,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":63},{"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":"codec","name":"codec","type":"COMBO","widget":{"name":"codec"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"SaveVideo"},"widgets_values":["LTX-2.3/Looping","auto","auto"]},{"id":73,"type":"CreateVideo","pos":[3649.9999999999995,1049.9999999999995],"size":[243.939393939394,78],"flags":{},"order":37,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":60},{"localized_name":"audio","name":"audio","shape":7,"type":"AUDIO","link":61},{"localized_name":"fps","name":"fps","type":"FLOAT","widget":{"name":"fps"},"link":62}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","slot_index":0,"links":[63]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CreateVideo"},"widgets_values":[30]},{"id":72,"type":"LTXVAudioVAEDecode","pos":[3643.9393939393935,899.3939393939382],"size":[203.00000610351563,46],"flags":{},"order":36,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":58},{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":59}],"outputs":[{"localized_name":"Audio","name":"Audio","type":"AUDIO","slot_index":0,"links":[61]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAEDecode"},"widgets_values":[]},{"id":71,"type":"LTXVSpatioTemporalTiledVAEDecode","pos":[3615.151515151515,569.393939393939],"size":[350,242],"flags":{},"order":35,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":57},{"localized_name":"latents","name":"latents","type":"LATENT","link":null},{"localized_name":"spatial_tiles","name":"spatial_tiles","type":"INT","widget":{"name":"spatial_tiles"},"link":null},{"localized_name":"spatial_overlap","name":"spatial_overlap","type":"INT","widget":{"name":"spatial_overlap"},"link":null},{"localized_name":"temporal_tile_length","name":"temporal_tile_length","type":"INT","widget":{"name":"temporal_tile_length"},"link":null},{"localized_name":"temporal_overlap","name":"temporal_overlap","type":"INT","widget":{"name":"temporal_overlap"},"link":null},{"localized_name":"last_frame_fix","name":"last_frame_fix","type":"BOOLEAN","widget":{"name":"last_frame_fix"},"link":null},{"localized_name":"working_device","name":"working_device","type":"COMBO","widget":{"name":"working_device"},"link":null},{"localized_name":"working_dtype","name":"working_dtype","type":"COMBO","widget":{"name":"working_dtype"},"link":null},{"name":"samples","type":"LATENT","link":56}],"outputs":[{"localized_name":"image","name":"image","type":"IMAGE","slot_index":0,"links":[60]}],"title":"Decode Video (Tiled)","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVSpatioTemporalTiledVAEDecode"},"widgets_values":[6,4,16,4,false,"auto","auto"]},{"id":70,"type":"LTXVSeparateAVLatent","pos":[3600,400],"size":[233.33333333333348,46],"flags":{},"order":34,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":55}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[56]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[58]}],"title":"Split Final AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":64,"type":"LTXVLoopingSampler","pos":[3073.801984050594,392.75591789764337],"size":[400,580],"flags":{},"order":33,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":47},{"localized_name":"vae","name":"vae","type":"VAE","link":48},{"localized_name":"noise","name":"noise","type":"NOISE","link":49},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":50},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":51},{"localized_name":"guider","name":"guider","type":"GUIDER","link":52},{"localized_name":"latents","name":"latents","type":"LATENT","link":53},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":54},{"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":null},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":null},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[55]}],"title":"Stage 2 — Refine","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[128,24,1,0.5,1,2,1,1,0,0,1000,"0"],"color":"#333355","bgcolor":"#222233"},{"id":53,"type":"LTXVConcatAVLatent","pos":[2807.97697623735,524.995187859747],"size":[190.80550053502748,46],"flags":{},"order":32,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":42},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":43}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[53]}],"title":"Stage 2 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#333355","bgcolor":"#222233"},{"id":51,"type":"LTXVLatentUpsampler","pos":[2494.204734318114,557.0100775530725],"size":[249.9123466065612,66],"flags":{},"order":30,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":35},{"localized_name":"upscale_model","name":"upscale_model","type":"LATENT_UPSCALE_MODEL","link":36},{"localized_name":"vae","name":"vae","type":"VAE","link":37}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[40]}],"title":"Spatial Upscale 2x","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVLatentUpsampler"},"widgets_values":[]},{"id":50,"type":"LTXVSeparateAVLatent","pos":[2429.214969171252,400.10348688717687],"size":[172.5918083919587,46],"flags":{},"order":29,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":34}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[35]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[43]}],"title":"Split Stage 1 AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":33,"type":"LTXVConcatAVLatent","pos":[1435.7500155700718,795.296050582885],"size":[174.92496730284756,46],"flags":{},"order":25,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":18},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":19}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[31]}],"title":"Stage 1 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#335533","bgcolor":"#223322"},{"id":35,"type":"VAEEncode","pos":[1383.3333333333328,1164.9999999999995],"size":[206.36665954589844,46],"flags":{},"order":21,"mode":0,"inputs":[{"localized_name":"pixels","name":"pixels","type":"IMAGE","link":20},{"localized_name":"vae","name":"vae","type":"VAE","link":21}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[33]}],"title":"Encode Reference Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"VAEEncode"},"widgets_values":[]},{"id":32,"type":"LTXVImgToVideoConditionOnly","pos":[1399.999999999999,604.9999999999992],"size":[210,122],"flags":{},"order":22,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":14},{"localized_name":"image","name":"image","type":"IMAGE","link":15},{"localized_name":"latent","name":"latent","type":"LATENT","link":16},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[18]}],"title":"Stage 1 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[0.7,false],"color":"#335533","bgcolor":"#223322"},{"id":52,"type":"LTXVImgToVideoConditionOnly","pos":[2492.238483461759,791.1178860526603],"size":[210,122],"flags":{},"order":31,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":38},{"localized_name":"image","name":"image","type":"IMAGE","link":39},{"localized_name":"latent","name":"latent","type":"LATENT","link":40},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[42]}],"title":"Stage 2 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[1,false],"color":"#333355","bgcolor":"#222233"},{"id":6,"type":"Note","pos":[281.1738724586202,1016.7247228103745],"size":[631.0862190651818,273.1698654463494],"flags":{},"order":13,"mode":0,"inputs":[],"outputs":[],"properties":{"Node name for S&R":"Note"},"widgets_values":["## Guiding Image Indices\n\nSet `optional_cond_image_indices` on the Stage 1 Looping Sampler.\nDefault: \"0\" (reference image at first frame only).\n\nFor multi-tile conditioning, set indices at tile boundaries.\nWith tile_size=128, overlap=24, new content starts every 104 frames:\n \"0, 104, 208\" for a 241-frame (3-tile) clip.\n\nThe number of images in the guiding batch must match the indices.\nUse LatentBatch or ImageBatch to provide multiple images.\nBy default, a single reference image at index 0 is used."],"color":"#432","bgcolor":"#653"}],"links":[[1,1,0,2,0,"IMAGE"],[2,10,0,13,0,"MODEL"],[3,11,0,20,0,"CLIP"],[4,11,0,21,0,"CLIP"],[5,20,0,22,0,"CONDITIONING"],[6,21,0,22,1,"CONDITIONING"],[7,4,0,22,2,"FLOAT"],[8,1,0,23,0,"IMAGE"],[9,3,0,30,2,"INT"],[10,12,0,31,0,"VAE"],[11,3,0,31,1,"INT"],[14,10,2,32,0,"VAE"],[15,2,0,32,1,"IMAGE"],[16,30,0,32,2,"LATENT"],[18,32,0,33,0,"LATENT"],[19,31,0,33,1,"LATENT"],[20,2,0,35,0,"IMAGE"],[21,10,2,35,1,"VAE"],[22,13,0,43,0,"MODEL"],[23,22,0,43,1,"CONDITIONING"],[24,22,1,43,2,"CONDITIONING"],[25,13,0,44,0,"MODEL"],[26,10,2,44,1,"VAE"],[27,40,0,44,2,"NOISE"],[28,41,0,44,3,"SAMPLER"],[29,42,0,44,4,"SIGMAS"],[30,43,0,44,5,"GUIDER"],[31,33,0,44,6,"LATENT"],[32,2,0,44,7,"IMAGE"],[33,35,0,44,10,"LATENT"],[34,44,0,50,0,"LATENT"],[35,50,0,51,0,"LATENT"],[36,14,0,51,1,"LATENT_UPSCALE_MODEL"],[37,10,2,51,2,"VAE"],[38,10,2,52,0,"VAE"],[39,23,0,52,1,"IMAGE"],[40,51,0,52,2,"LATENT"],[42,52,0,53,0,"LATENT"],[43,50,1,53,1,"LATENT"],[44,13,0,63,0,"MODEL"],[45,22,0,63,1,"CONDITIONING"],[46,22,1,63,2,"CONDITIONING"],[47,13,0,64,0,"MODEL"],[48,10,2,64,1,"VAE"],[49,60,0,64,2,"NOISE"],[50,61,0,64,3,"SAMPLER"],[51,62,0,64,4,"SIGMAS"],[52,63,0,64,5,"GUIDER"],[53,53,0,64,6,"LATENT"],[54,23,0,64,7,"IMAGE"],[55,64,0,70,0,"LATENT"],[56,70,0,71,9,"LATENT"],[57,10,2,71,0,"VAE"],[58,70,1,72,0,"LATENT"],[59,12,0,72,1,"VAE"],[60,71,0,73,0,"IMAGE"],[61,72,0,73,1,"AUDIO"],[62,4,0,73,2,"FLOAT"],[63,73,0,74,0,"VIDEO"],[64,4,0,75,0,"FLOAT"],[65,75,0,31,2,"INT"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.878460000000002,"offset":[-147.93391628437732,99.35113851569274]},"info":{"name":"LTX-2.3 Two-Pass I2V Looping","description":"Two-pass I2V workflow for arbitrary-length video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Soft guiding images at tile boundaries maintain subject continuity."}},"version":0.4} \ No newline at end of file diff --git a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.md b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.md new file mode 100644 index 0000000..b777fe1 --- /dev/null +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.md @@ -0,0 +1,180 @@ +# LTX-2.3 Two-Pass I2V Looping — Arbitrary-Length Video + +## Overview + +Two-pass image-to-video workflow for generating videos of any duration using +LTX-2.3 (22B) with `LTXVLoopingSampler`. A batch of soft guiding images at +tile boundaries maintains subject and scene continuity across temporal tiles. + +**Stage 1** generates video+audio at base resolution (~544p) with temporal +tiling. +**Stage 2** spatially upscales 2x and refines at high resolution with the +same prompts. + +**Model:** `ltx-2.3-22b-dev.safetensors` + distilled LoRA (0.5 strength) +**Text encoder:** Gemma 3 12B +**No detailer LoRA required** (none exists for 2.3) + +--- + +## Data Flow + +``` +LoadImage (reference) + | + +-- LTXVPreprocess --> Stage 1 I2V Cond --> Stage 1 AV Concat + | | + +-- VAEEncode (negative_index_latents) LTXVLoopingSampler (Stage 1) + | | + +-- ResizeImage (for stage 2) LTXVSeparateAVLatent + | | + LTXVLatentUpsampler | + | | + Stage 2 I2V Cond | + | | + Stage 2 AV Concat------+ + | + LTXVLoopingSampler (Stage 2) + (AV refinement) + | + LTXVSeparateAVLatent + | | + VAEDecodeTiled AudioVAEDecode + | | + CreateVideo------+ + | + SaveVideo +``` + +**Audio refinement:** Both stages process AV latents jointly. Stage 1 +generates video and audio from scratch. Stage 2 receives the upscaled video ++ stage 1 audio as an AV latent and refines both together — the looping +sampler initializes each tile's audio from the input audio data (not zeros), +so the model refines lipsync and audio-visual coherence at the higher +resolution. This matches the behaviour of the standard two-stage workflow +using `SamplerCustomAdvanced`. + +--- + +## Key Parameters + +### Stage 1 — Generate + +| Parameter | Value | Notes | +|---|---|---| +| Resolution | 960x544 | Base res; 2x upscale yields ~1920x1088 | +| temporal_tile_size | 128 | Pixel frames per tile | +| temporal_overlap | 24 | Overlap between tiles | +| temporal_overlap_cond_strength | 0.5 | How strongly previous tile conditions next | +| cond_image_strength | 1.0 | Guiding image influence | +| adain_factor | 0.15 | Prevents color drift across tiles | +| horizontal_tiles / vertical_tiles | 1 / 1 | No spatial tiling at 544p | +| Sigmas | `1.0, 0.994, 0.988, 0.981, 0.975, 0.909, 0.725, 0.422, 0.0` | Distilled schedule | +| Sampler | euler_ancestral_cfg_pp | Good for generation | +| CFG | 1 | With distilled LoRA | + +### Stage 2 — Refine + +| Parameter | Value | Notes | +|---|---|---| +| Resolution | ~1920x1088 | 2x from stage 1 | +| temporal_tile_size | 128 | Same as stage 1 | +| temporal_overlap | 24 | Same | +| horizontal_tiles / vertical_tiles | 2 / 1 | Spatial tiling for memory | +| adain_factor | 0.0 | Not needed for refinement | +| Sigmas | `0.85, 0.725, 0.422, 0.0` | Low — refinement only | +| Sampler | euler_cfg_pp | Deterministic for refinement | +| CFG | 1 | With distilled LoRA | + +--- + +## Guiding Images + +### Default: Reference image at frame 0 + +By default, `optional_cond_images` is connected to the preprocessed reference +image and `optional_cond_image_indices` is set to `"0"`. This provides soft +I2V conditioning at the first frame only. + +For global subject anchoring across ALL tiles, `optional_negative_index_latents` +is connected to the VAE-encoded reference image. This attaches the reference +with negative positional embeddings to every tile, providing identity context +without pinning a specific frame position. + +### Transition images at tile boundaries + +To guide content at specific points in the video: + +1. Batch multiple images using `ImageBatch` (or any node that produces an + IMAGE batch). +2. Set `optional_cond_image_indices` to the pixel frame positions where each + image should appear, e.g. `"0, 104, 208"`. +3. Connect the batch to `optional_cond_images`. + +**The number of images must match the number of indices.** + +Frame positions for tile boundaries with `tile_size=128, overlap=24`: + +| Tiles | Total frames | Indices | +|---|---|---| +| 2 | 241 | `0, 104` | +| 3 | 345 | `0, 104, 208` | +| 4 | 449 | `0, 104, 208, 312` | +| N | 128 + (N-1)*104 + 1 | `0, 104, 208, ..., (N-1)*104` | + +Frame indices must be divisible by 8 (except 0). The formula for new content +start per tile is: `tile_size - overlap = 128 - 24 = 104`. + +### Per-tile prompts + +Connect `LTXVMultiPromptProvider` to `optional_positive_conditionings` on the +Stage 1 looping sampler. Prompts are separated by `|`: + +``` +A woman walks through a meadow | She reaches a stream | She crosses a bridge +``` + +Each prompt maps to one temporal tile. If more tiles than prompts, the last +prompt repeats. Use the same provider for Stage 2 to keep prompts aligned. + +--- + +## Duration and Tile Count + +| Duration (24fps) | Pixel frames | Tiles (128/24) | Est. time (Strix Halo) | +|---|---|---|---| +| 5 sec | 121 | 1 | ~5 min | +| 10 sec | 241 | 3 | ~15 min | +| 30 sec | 721 | 7 | ~45 min | +| 1 min | 1441 | 14 | ~1.5 hr | +| 5 min | 7201 | 69 | ~7 hr | + +Frame count must satisfy `8n+1` (e.g. 121, 241, 361...). +Times are rough estimates for both stages combined on Strix Halo 128GB. + +--- + +## Strix Halo / Unified Memory Notes + +See `LTX-2_V2V_Detailer.md` for full Strix Halo tuning. + +- Stage 1 at 544p with 1x1 spatial tiles fits easily. +- Stage 2 at ~1088p needs 2x1 spatial tiling (set in the workflow). + Increase to 2x2 if OOM occurs. +- Add `LTXVChunkFeedForward` (from KJNodes) between the LoRA loader and + the guiders if stage 2 still OOMs. Set `chunks=2, dim_threshold=4096`. +- VAE decode uses `LTXVSpatioTemporalTiledVAEDecode` with `spatial_tiles=6`. + Increase to 8 if needed. + +--- + +## Regenerating the Workflow + +The workflow JSON is generated by the companion script: + +```bash +cd custom_nodes/ComfyUI-LTXVideo/example_workflows +python generate_two_pass_i2v_looping.py +``` + +Edit the script to change default parameters, add nodes, or adjust layout. diff --git a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json new file mode 100644 index 0000000..fb2edc7 --- /dev/null +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json @@ -0,0 +1 @@ +{"id":"6442f6ec-19f9-4ded-93a2-00c286be6dab","revision":0,"last_node_id":82,"last_link_id":72,"nodes":[{"id":1,"type":"LoadImage","pos":[0,0],"size":[300,300],"flags":{},"order":0,"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","slot_index":0,"links":[1,8]},{"localized_name":"MASK","name":"MASK","type":"MASK","slot_index":1,"links":[]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoadImage"},"widgets_values":["reference_image.png","image"]},{"id":3,"type":"PrimitiveInt","pos":[0,800],"size":[210,100],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"INT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"INT","name":"INT","type":"INT","slot_index":0,"links":[9,11]}],"title":"Frame Count","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveInt"},"widgets_values":[713,"fixed"]},{"id":20,"type":"CLIPTextEncode","pos":[900,0],"size":[400,180],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":3},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[5]}],"title":"Positive Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["A beautiful woman in a flowing dress walks through a sunlit garden on a warm summer day. Soft natural lighting, cinematic composition, gentle breeze."]},{"id":21,"type":"CLIPTextEncode","pos":[900,220],"size":[400,120],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":4},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[6]}],"title":"Negative Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["pc game, console game, video game, cartoon, childish, ugly, blurry"]},{"id":40,"type":"RandomNoise","pos":[1950,-80],"size":[210,100],"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","slot_index":0,"links":[27]}],"title":"Stage 1 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[42,"fixed"]},{"id":41,"type":"KSamplerSelect","pos":[1950,40],"size":[250,80],"flags":{},"order":3,"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","slot_index":0,"links":[28]}],"title":"Stage 1 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_ancestral_cfg_pp"]},{"id":42,"type":"ManualSigmas","pos":[1950,140],"size":[350,80],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[29]}],"title":"Stage 1 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0"]},{"id":44,"type":"LTXVLoopingSampler","pos":[1950,400],"size":[400,580],"flags":{},"order":28,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":25},{"localized_name":"vae","name":"vae","type":"VAE","link":26},{"localized_name":"noise","name":"noise","type":"NOISE","link":27},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":28},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":29},{"localized_name":"guider","name":"guider","type":"GUIDER","link":30},{"localized_name":"latents","name":"latents","type":"LATENT","link":31},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":67},{"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":71},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":33},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[34]}],"title":"Stage 1 \u2014 Generate","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[264,24,1,0.5,1,1,1,1,0.15,0,1000,"0, 240, 480"],"color":"#335533","bgcolor":"#223322"},{"id":4,"type":"PrimitiveFloat","pos":[0,930],"size":[210,100],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"FLOAT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"FLOAT","name":"FLOAT","type":"FLOAT","slot_index":0,"links":[7,62,64]}],"title":"Frame Rate","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveFloat"},"widgets_values":[24]},{"id":75,"type":"FloatToInt","pos":[991.6666666666669,928.3333333333287],"size":[270,82],"flags":{"collapsed":true},"order":17,"mode":0,"inputs":[{"localized_name":"float_value","name":"float_value","type":"FLOAT","widget":{"name":"float_value"},"link":64},{"localized_name":"rounding_mode","name":"rounding_mode","type":"COMBO","widget":{"name":"rounding_mode"},"link":null}],"outputs":[{"localized_name":"int_value","name":"int_value","type":"INT","links":[65]}],"properties":{"aux_id":"danTheMonk/comfyui-int-and-float","ver":"a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720","Node name for S&R":"FloatToInt"},"widgets_values":[0,"down (floor)"]},{"id":2,"type":"LTXVPreprocess","pos":[11.666666666666666,355.00000000000017],"size":[220,58],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":1},{"localized_name":"img_compression","name":"img_compression","type":"INT","widget":{"name":"img_compression"},"link":null}],"outputs":[{"localized_name":"output_image","name":"output_image","type":"IMAGE","slot_index":0,"links":[15,20,66]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVPreprocess"},"widgets_values":[18]},{"id":23,"type":"ResizeImageMaskNode","pos":[8.333333333333284,505.00000000000085],"size":[300,106],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"input","name":"input","type":"IMAGE,MASK","link":8},{"localized_name":"resize_type","name":"resize_type","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"resize_type"},"link":null},{"localized_name":"resize_type.longer_size","name":"resize_type.longer_size","type":"INT","widget":{"name":"resize_type.longer_size"},"link":null},{"localized_name":"scale_method","name":"scale_method","type":"COMBO","widget":{"name":"scale_method"},"link":null}],"outputs":[{"localized_name":"resized","name":"resized","type":"IMAGE","slot_index":0,"links":[39,68]}],"title":"Resize Reference","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ResizeImageMaskNode"},"widgets_values":["scale longer dimension",1536,"lanczos"]},{"id":14,"type":"LatentUpscaleModelLoader","pos":[452.82236965026885,683.519747085575],"size":[376.2368404663082,58],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"model_name","name":"model_name","type":"COMBO","widget":{"name":"model_name"},"link":null}],"outputs":[{"localized_name":"LATENT_UPSCALE_MODEL","name":"LATENT_UPSCALE_MODEL","type":"LATENT_UPSCALE_MODEL","slot_index":0,"links":[36]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LatentUpscaleModelLoader"},"widgets_values":["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"]},{"id":13,"type":"LoraLoaderModelOnly","pos":[451.8815797668459,542.2302684844991],"size":[373.4144708160393,82],"flags":{},"order":20,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":2},{"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","slot_index":0,"links":[22,25,44,47]}],"title":"Distilled LoRA (both stages)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoraLoaderModelOnly"},"widgets_values":["LTX/ltx-2.3-22b-distilled-lora-384.safetensors",0.5]},{"id":12,"type":"LTXVAudioVAELoader","pos":[450,400],"size":[369.75658755188215,58],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"Audio VAE","name":"Audio VAE","type":"VAE","slot_index":0,"links":[10,59]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAELoader"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":11,"type":"LTXAVTextEncoderLoader","pos":[448.1184202331541,213.86843580322656],"size":[373.41447081603906,106],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"text_encoder","name":"text_encoder","type":"COMBO","widget":{"name":"text_encoder"},"link":null},{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null},{"localized_name":"device","name":"device","type":"COMBO","widget":{"name":"device"},"link":null}],"outputs":[{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":0,"links":[3,4,70]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXAVTextEncoderLoader"},"widgets_values":["gemma_3_12B_it.safetensors","ltx-2.3-22b-dev.safetensors","default"]},{"id":10,"type":"CheckpointLoaderSimple","pos":[445.29605058288524,31.046066152957746],"size":[371.63816731872794,98],"flags":{},"order":9,"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":[2]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[]},{"localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[14,21,26,37,38,48,57]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":22,"type":"LTXVConditioning","pos":[999.7237276428352,409.4078988342295],"size":[210,78],"flags":{},"order":24,"mode":0,"inputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":5},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":6},{"localized_name":"frame_rate","name":"frame_rate","type":"FLOAT","widget":{"name":"frame_rate"},"link":7}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","slot_index":0,"links":[23,45]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","slot_index":1,"links":[24,46]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConditioning"},"widgets_values":[24]},{"id":31,"type":"LTXVEmptyLatentAudio","pos":[1400.940789883423,211.9868560363806],"size":[252.82236965026914,106],"flags":{},"order":23,"mode":0,"inputs":[{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":10},{"localized_name":"frames_number","name":"frames_number","type":"INT","widget":{"name":"frames_number"},"link":11},{"localized_name":"frame_rate","name":"frame_rate","type":"INT","widget":{"name":"frame_rate"},"link":65},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"Latent","name":"Latent","type":"LATENT","slot_index":0,"links":[19]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVEmptyLatentAudio"},"widgets_values":[97,25,1]},{"id":30,"type":"EmptyLTXVLatentVideo","pos":[1400,0],"size":[252.82236965026868,130],"flags":{},"order":16,"mode":0,"inputs":[{"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":"length","name":"length","type":"INT","widget":{"name":"length"},"link":9},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[16]}],"title":"Stage 1 Empty Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"EmptyLTXVLatentVideo"},"widgets_values":[960,544,713,1]},{"id":43,"type":"CFGGuider","pos":[1960.3486887176518,256.9342179016131],"size":[250,98],"flags":{},"order":26,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":22},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":23},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":24},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[30]}],"title":"Stage 1 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#335533","bgcolor":"#223322"},{"id":63,"type":"CFGGuider","pos":[2563.9220909318396,255.9369806251849],"size":[235.2013751337572,98],"flags":{},"order":27,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":44},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":45},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":46},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[52]}],"title":"Stage 2 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#333355","bgcolor":"#222233"},{"id":62,"type":"ManualSigmas","pos":[3047.723288482116,178.70409580402023],"size":[277.23288482116413,58],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[51]}],"title":"Stage 2 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["0.85, 0.7250, 0.4219, 0.0"]},{"id":61,"type":"KSamplerSelect","pos":[3050,69.5972497324864],"size":[250,58],"flags":{},"order":11,"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","slot_index":0,"links":[50]}],"title":"Stage 2 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_cfg_pp"]},{"id":60,"type":"RandomNoise","pos":[3050,-80],"size":[210,82],"flags":{},"order":12,"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":[49]}],"title":"Stage 2 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[43,"fixed"]},{"id":74,"type":"SaveVideo","pos":[3975.7575757575723,1040.9090909090924],"size":[250,106],"flags":{},"order":38,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":63},{"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":"codec","name":"codec","type":"COMBO","widget":{"name":"codec"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"SaveVideo"},"widgets_values":["LTX-2.3/Looping","auto","auto"]},{"id":73,"type":"CreateVideo","pos":[3649.9999999999995,1049.9999999999995],"size":[243.939393939394,78],"flags":{},"order":37,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":60},{"localized_name":"audio","name":"audio","shape":7,"type":"AUDIO","link":61},{"localized_name":"fps","name":"fps","type":"FLOAT","widget":{"name":"fps"},"link":62}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","slot_index":0,"links":[63]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CreateVideo"},"widgets_values":[30]},{"id":72,"type":"LTXVAudioVAEDecode","pos":[3643.9393939393935,899.3939393939382],"size":[203.00000610351563,46],"flags":{},"order":36,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":58},{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":59}],"outputs":[{"localized_name":"Audio","name":"Audio","type":"AUDIO","slot_index":0,"links":[61]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAEDecode"},"widgets_values":[]},{"id":71,"type":"LTXVSpatioTemporalTiledVAEDecode","pos":[3615.151515151515,569.393939393939],"size":[350,242],"flags":{},"order":35,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":57},{"localized_name":"latents","name":"latents","type":"LATENT","link":null},{"localized_name":"spatial_tiles","name":"spatial_tiles","type":"INT","widget":{"name":"spatial_tiles"},"link":null},{"localized_name":"spatial_overlap","name":"spatial_overlap","type":"INT","widget":{"name":"spatial_overlap"},"link":null},{"localized_name":"temporal_tile_length","name":"temporal_tile_length","type":"INT","widget":{"name":"temporal_tile_length"},"link":null},{"localized_name":"temporal_overlap","name":"temporal_overlap","type":"INT","widget":{"name":"temporal_overlap"},"link":null},{"localized_name":"last_frame_fix","name":"last_frame_fix","type":"BOOLEAN","widget":{"name":"last_frame_fix"},"link":null},{"localized_name":"working_device","name":"working_device","type":"COMBO","widget":{"name":"working_device"},"link":null},{"localized_name":"working_dtype","name":"working_dtype","type":"COMBO","widget":{"name":"working_dtype"},"link":null},{"name":"samples","type":"LATENT","link":56}],"outputs":[{"localized_name":"image","name":"image","type":"IMAGE","slot_index":0,"links":[60]}],"title":"Decode Video (Tiled)","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVSpatioTemporalTiledVAEDecode"},"widgets_values":[6,4,16,4,false,"auto","auto"]},{"id":70,"type":"LTXVSeparateAVLatent","pos":[3600,400],"size":[233.33333333333348,46],"flags":{},"order":34,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":55}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[56]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[58]}],"title":"Split Final AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":64,"type":"LTXVLoopingSampler","pos":[3073.801984050594,392.75591789764337],"size":[400,580],"flags":{},"order":33,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":47},{"localized_name":"vae","name":"vae","type":"VAE","link":48},{"localized_name":"noise","name":"noise","type":"NOISE","link":49},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":50},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":51},{"localized_name":"guider","name":"guider","type":"GUIDER","link":52},{"localized_name":"latents","name":"latents","type":"LATENT","link":53},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":69},{"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":72},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":null},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[55]}],"title":"Stage 2 \u2014 Refine","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[264,24,1,0.5,1,2,1,1,0,0,1000,"0, 240, 480"],"color":"#333355","bgcolor":"#222233"},{"id":53,"type":"LTXVConcatAVLatent","pos":[2807.97697623735,524.995187859747],"size":[190.80550053502748,46],"flags":{},"order":32,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":42},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":43}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[53]}],"title":"Stage 2 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#333355","bgcolor":"#222233"},{"id":51,"type":"LTXVLatentUpsampler","pos":[2494.204734318114,557.0100775530725],"size":[249.9123466065612,66],"flags":{},"order":30,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":35},{"localized_name":"upscale_model","name":"upscale_model","type":"LATENT_UPSCALE_MODEL","link":36},{"localized_name":"vae","name":"vae","type":"VAE","link":37}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[40]}],"title":"Spatial Upscale 2x","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVLatentUpsampler"},"widgets_values":[]},{"id":50,"type":"LTXVSeparateAVLatent","pos":[2429.214969171252,400.10348688717687],"size":[172.5918083919587,46],"flags":{},"order":29,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":34}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[35]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[43]}],"title":"Split Stage 1 AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":33,"type":"LTXVConcatAVLatent","pos":[1435.7500155700718,795.296050582885],"size":[174.92496730284756,46],"flags":{},"order":25,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":18},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":19}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[31]}],"title":"Stage 1 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#335533","bgcolor":"#223322"},{"id":35,"type":"VAEEncode","pos":[1383.3333333333328,1164.9999999999995],"size":[206.36665954589844,46],"flags":{},"order":21,"mode":0,"inputs":[{"localized_name":"pixels","name":"pixels","type":"IMAGE","link":20},{"localized_name":"vae","name":"vae","type":"VAE","link":21}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[33]}],"title":"Encode Reference Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"VAEEncode"},"widgets_values":[]},{"id":32,"type":"LTXVImgToVideoConditionOnly","pos":[1399.999999999999,604.9999999999992],"size":[210,122],"flags":{},"order":22,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":14},{"localized_name":"image","name":"image","type":"IMAGE","link":15},{"localized_name":"latent","name":"latent","type":"LATENT","link":16},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[18]}],"title":"Stage 1 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[0.7,false],"color":"#335533","bgcolor":"#223322"},{"id":52,"type":"LTXVImgToVideoConditionOnly","pos":[2492.238483461759,791.1178860526603],"size":[210,122],"flags":{},"order":31,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":38},{"localized_name":"image","name":"image","type":"IMAGE","link":39},{"localized_name":"latent","name":"latent","type":"LATENT","link":40},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[42]}],"title":"Stage 2 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[1,false],"color":"#333355","bgcolor":"#222233"},{"id":6,"type":"Note","pos":[281.1738724586202,1016.7247228103745],"size":[631.0862190651818,273.1698654463494],"flags":{},"order":13,"mode":0,"inputs":[],"outputs":[],"properties":{"Node name for S&R":"Note"},"widgets_values":["## Three 10-Second Tiles \u2014 30s Video\n\n**Frame count:** 713 (29.7s at 24fps)\n**Tile size:** 264 (10.7s context per tile), Overlap: 24 (1s)\n**Tiles:** 3 temporal tiles, each ~10 seconds\n\n### Tile Prompts (MultiPromptProvider)\nPipe-separated prompts, one per tile. Edit to change per-tile narration.\nIf fewer prompts than tiles, the last prompt is reused.\n\n### Guiding Images\nThe reference image is repeated 3x and placed at tile boundaries:\n indices \"0, 240, 480\" \u2014 start of each tile in pixel frames.\nThis anchors subject identity across tile transitions.\n\n### Conditioning Image Indices\nIndices must be divisible by 8 (except 0).\nWith tile_size=264, overlap=24, pixel-space tile starts are:\n Tile 0: frame 0, Tile 1: frame 240, Tile 2: frame 480."],"color":"#432","bgcolor":"#653"},{"id":80,"type":"RepeatImageBatch","pos":[11,430],"size":[220,58],"flags":{},"order":15,"mode":0,"inputs":[{"name":"image","type":"IMAGE","link":66},{"name":"amount","type":"INT","widget":{"name":"amount"},"link":null}],"outputs":[{"name":"IMAGE","type":"IMAGE","slot_index":0,"links":[67]}],"title":"Repeat Ref Image (3x)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RepeatImageBatch"},"widgets_values":[3]},{"id":81,"type":"RepeatImageBatch","pos":[11,650],"size":[220,58],"flags":{},"order":16,"mode":0,"inputs":[{"name":"image","type":"IMAGE","link":68},{"name":"amount","type":"INT","widget":{"name":"amount"},"link":null}],"outputs":[{"name":"IMAGE","type":"IMAGE","slot_index":0,"links":[69]}],"title":"Repeat Resized Ref (3x)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RepeatImageBatch"},"widgets_values":[3]},{"id":82,"type":"MultiPromptProvider","pos":[900,440],"size":[400,220],"flags":{},"order":20,"mode":0,"inputs":[{"name":"prompts","type":"STRING","widget":{"name":"prompts"},"link":null},{"name":"clip","type":"CLIP","link":70}],"outputs":[{"name":"conditionings","type":"CONDITIONING","slot_index":0,"links":[71,72]}],"title":"Per-Tile Prompts (3 tiles)","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"MultiPromptProvider"},"widgets_values":["A woman walks through a sunlit garden, birds singing overhead. She smiles as petals fall gently around her. | She pauses by a fountain, trailing her fingers through the water. The camera slowly orbits around her as light plays on the surface. | She walks along a tree-lined path toward a distant gate. Leaves drift in the warm breeze as she disappears into golden light."]}],"links":[[1,1,0,2,0,"IMAGE"],[2,10,0,13,0,"MODEL"],[3,11,0,20,0,"CLIP"],[4,11,0,21,0,"CLIP"],[5,20,0,22,0,"CONDITIONING"],[6,21,0,22,1,"CONDITIONING"],[7,4,0,22,2,"FLOAT"],[8,1,0,23,0,"IMAGE"],[9,3,0,30,2,"INT"],[10,12,0,31,0,"VAE"],[11,3,0,31,1,"INT"],[14,10,2,32,0,"VAE"],[15,2,0,32,1,"IMAGE"],[16,30,0,32,2,"LATENT"],[18,32,0,33,0,"LATENT"],[19,31,0,33,1,"LATENT"],[20,2,0,35,0,"IMAGE"],[21,10,2,35,1,"VAE"],[22,13,0,43,0,"MODEL"],[23,22,0,43,1,"CONDITIONING"],[24,22,1,43,2,"CONDITIONING"],[25,13,0,44,0,"MODEL"],[26,10,2,44,1,"VAE"],[27,40,0,44,2,"NOISE"],[28,41,0,44,3,"SAMPLER"],[29,42,0,44,4,"SIGMAS"],[30,43,0,44,5,"GUIDER"],[31,33,0,44,6,"LATENT"],[33,35,0,44,10,"LATENT"],[34,44,0,50,0,"LATENT"],[35,50,0,51,0,"LATENT"],[36,14,0,51,1,"LATENT_UPSCALE_MODEL"],[37,10,2,51,2,"VAE"],[38,10,2,52,0,"VAE"],[39,23,0,52,1,"IMAGE"],[40,51,0,52,2,"LATENT"],[42,52,0,53,0,"LATENT"],[43,50,1,53,1,"LATENT"],[44,13,0,63,0,"MODEL"],[45,22,0,63,1,"CONDITIONING"],[46,22,1,63,2,"CONDITIONING"],[47,13,0,64,0,"MODEL"],[48,10,2,64,1,"VAE"],[49,60,0,64,2,"NOISE"],[50,61,0,64,3,"SAMPLER"],[51,62,0,64,4,"SIGMAS"],[52,63,0,64,5,"GUIDER"],[53,53,0,64,6,"LATENT"],[55,64,0,70,0,"LATENT"],[56,70,0,71,9,"LATENT"],[57,10,2,71,0,"VAE"],[58,70,1,72,0,"LATENT"],[59,12,0,72,1,"VAE"],[60,71,0,73,0,"IMAGE"],[61,72,0,73,1,"AUDIO"],[62,4,0,73,2,"FLOAT"],[63,73,0,74,0,"VIDEO"],[64,4,0,75,0,"FLOAT"],[65,75,0,31,2,"INT"],[66,2,0,80,0,"IMAGE"],[67,80,0,44,7,"IMAGE"],[68,23,0,81,0,"IMAGE"],[69,81,0,64,7,"IMAGE"],[70,11,0,82,1,"CLIP"],[71,82,0,44,9,"CONDITIONING"],[72,82,0,64,9,"CONDITIONING"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.878460000000002,"offset":[-147.93391628437732,99.35113851569274]},"info":{"name":"LTX-2.3 Two-Pass I2V Looping","description":"Two-pass I2V workflow for arbitrary-length video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Soft guiding images at tile boundaries maintain subject continuity."}},"version":0.4} \ No newline at end of file diff --git a/example_workflows/LTX-2_V2V_Detailer.md b/example_workflows/LTX-2_V2V_Detailer.md new file mode 100644 index 0000000..5ec259e --- /dev/null +++ b/example_workflows/LTX-2_V2V_Detailer.md @@ -0,0 +1,191 @@ +# LTX-2 V2V Detailer — Tuning Notes + +## Workflow Overview + +Video-to-video detailer using LTX-2 19B with the IC-LoRA detailer. Upscales and refines +an input video by adding noise and denoising at the target resolution. + +**Default upscale target:** 1920px max dimension (via `ImageScaleToMaxDimension`) +**Sampler:** Euler +**Text encoder:** Gemma 3 12B IT + +--- + +## Known Issues at Large Upscale Ratios (e.g. 544 → 1920) + +A 3.5× upscale in a single pass forces the model to invent ~12× more pixel area than +the source. This causes two symptoms at the default sigma settings: + +- **Oversaturated colors** — model rebuilds rather than refines, drifting from source colors +- **Dithering/noise on fine textures** (hair, fabric) — hallucinated high-frequency detail + +--- + +## Key Parameters & Recommended Values + +### ManualSigmas — most impactful setting + +Controls how aggressively the model re-generates the video. Lower = preserves original more. + +| Scenario | Values | +|---|---| +| Default (too aggressive for large upscales) | `0.909375, 0.725, 0.421875, 0.0` | +| Recommended starting point | `0.5, 0.35, 0.2, 0.0` | +| Conservative (colors still drifting) | `0.35, 0.2, 0.1, 0.0` | + +### LoRA Strength (LoraLoaderModelOnly) + +The detailer LoRA at full strength over-sharpens fine structures. + +| Default | Recommended | +|---|---| +| 1.0 | 0.65 – 0.75 | + +### LTXVLoopingSampler + +| Parameter | Default | Notes | +|---|---|---| +| guiding_strength | 1.0 | Keep at 1.0 — lowering causes drift from source | +| temporal_overlap_cond_strength | 0.5 | Leave as-is | +| horizontal_tiles / vertical_tiles | 1 / 1 | Single spatial tile at 1920px is fine | + +### LTXVSpatioTemporalTiledVAEDecode + +| Parameter | Default | Notes | +|---|---|---| +| spatial_tiles | 4 | Fine for 1920px | +| spatial_overlap | 4 | Fine as-is | +| temporal_tile_length | 16 | Fine as-is | + +--- + +## Recommended Tuning Order + +1. Set ManualSigmas to `0.5, 0.35, 0.2, 0.0` → run and compare +2. If hair/texture still dithers → reduce LoRA strength to 0.7 +3. If colors still saturated → drop sigmas further to `0.35, 0.2, 0.1, 0.0` +4. If quality still insufficient → split into two upscale passes (see below) + +--- + +## Two-Stage Upscaling (Best Quality for Large Ratios) + +Rather than one 3.5× jump, run the workflow twice: + +**Pass 1:** 544 → 1024, sigmas `0.5, 0.35, 0.2, 0.0` +**Pass 2:** 1024 → 1920, sigmas `0.25, 0.15, 0.05, 0.0` + +Pass 2 needs very low sigmas — most detail is already correct, it is only sharpening. + +--- + +## Handling Arbitrary-Length Videos + +The workflow can process videos of any length. `LoadVideo` loads the full clip, +`ImageScaleToMaxDimension` rescales every frame, `VAEEncodeTiled` encodes the +full sequence into a latent, and `LTXVLoopingSampler` tiles along the temporal +axis with overlapping chunks. + +For a video with N latent frames, the sampler produces tiles as: + +``` +Tile 0: frames [0, temporal_tile_size) +Tile 1: frames [temporal_tile_size - temporal_overlap, 2*temporal_tile_size - temporal_overlap) +Tile 2: ... +``` + +Each tile is denoised independently (conditioned on the overlap region from the +previous tile), then the results are stitched. There is no hard upper bound on +video length — the sampler simply produces more temporal tiles. + +**Practical limits** are set by: + +- **VAE encode/decode memory**: the full video must be encoded and decoded. + `VAEEncodeTiled` and `LTXVSpatioTemporalTiledVAEDecode` tile spatially and + temporally, so this scales to long clips. Increase `spatial_tiles` or reduce + `temporal_tile_length` in the VAE decode node if the VAE step OOMs. +- **Latent tensor size**: the full video latent (shape `[1, 128, T, H, W]`) + must fit in memory at once. At 1280px, each latent frame is ~0.26MB (128 + channels × 40 × 40 × bf16). A 10-minute clip at 24fps (14400 frames → + ~1800 latent frames) is ~470MB — easily fits. +- **Wall-clock time**: each temporal tile requires a full sampling pass. On + unified memory (~130GB/s bandwidth), a single tile at 1280px takes minutes. + A 10-minute clip with `temporal_tile_size=32, temporal_overlap=16` produces + ~113 tiles, which could take many hours. +- **Quality drift over many tiles**: temporal overlap conditioning keeps + adjacent tiles coherent, but over very long sequences the style can drift + gradually. `optional_normalizing_latents` and `adain_factor` can mitigate + this by anchoring color/contrast statistics. + +In practice, "infinite length" means you can process clips of any duration if +you have the patience. Memory is not the bottleneck — compute time is. + +--- + +## Strix Halo 128GB Unified Memory — OOM Prevention + +The default settings (1920px, single spatial tile, `temporal_tile_size=56`) +are tuned for discrete GPUs with fast HBM. On Strix Halo with ~120GB unified +memory allocated via TTM, the peak activation memory during sampling at 1920px +can exceed available GPU memory. + +### Where the memory goes + +| Component | Approximate size | +|---|---| +| LTX-2 19B (BF16) | ~38GB | +| Gemma 3 12B (Q4 quantized) | ~7GB | +| VAE | ~0.5GB | +| Activations during sampling (resolution-dependent) | 40–80GB+ at 1920px | + +With `--highvram` keeping all models resident, ~46GB is consumed before any +activations are allocated. + +### Recommended settings + +| Parameter | Default | Recommended | +|---|---|---| +| `ImageScaleToMaxDimension` | 1920 | **1280** (or 1024) | +| `horizontal_tiles` | 1 | **2** (at 1920px) or **1** (at 1280px) | +| `vertical_tiles` | 1 | **2** (at 1920px) or **1** (at 1280px) | +| `temporal_tile_size` | 56 | **32** | +| `temporal_overlap` | 24 | **16** | +| `ManualSigmas` | `0.909, 0.725, 0.422, 0.0` | `0.5, 0.35, 0.2, 0.0` | +| `LoRA strength` | 1.0 | **0.7** | +| `LTXVSpatioTemporalTiledVAEDecode spatial_tiles` | 4 | **6–8** if VAE OOMs | + +**Spatial tiling** (`horizontal_tiles × vertical_tiles`) is the most impactful +setting. It tiles the spatial dimension during sampling so that attention and +feedforward layers operate on a fraction of the full resolution. 2×2 at 1920px +reduces per-tile activation memory by roughly 4×. + +**Temporal tile size** reduction also helps: fewer frames per tile means a +shorter sequence length for the transformer, reducing both attention (O(n²)) +and feedforward memory. + +### LTXV Chunk FeedForward (KJNodes) + +The `LTXV Chunk FeedForward` node from comfyui-kjnodes can be added between +the model loader and the guider. It patches the feedforward layers in each +transformer block to process the token sequence in chunks rather than all at +once, reducing peak activation memory in the FFN (which expands hidden dim +by 4×). + +| Parameter | Recommended | +|---|---| +| `chunks` | **2** (start here; increase to 3–4 if still tight) | +| `dim_threshold` | **4096** (default — only activates for large sequences) | + +This is a secondary optimization — spatial tiling has more impact because it +reduces memory for both attention and FFN. Use Chunk FeedForward in addition +to spatial tiling, not instead of it. Note the node is marked experimental and +may cause minor numerical differences in output. + +### If 1920px is required + +Use the two-stage approach: + +**Pass 1:** source → 1024, sigmas `0.5, 0.35, 0.2, 0.0`, 1×1 spatial tiles +**Pass 2:** 1024 → 1920, sigmas `0.25, 0.15, 0.05, 0.0`, 2×2 spatial tiles + +Each pass individually fits in memory. diff --git a/example_workflows/generate_two_pass_i2v_looping.py b/example_workflows/generate_two_pass_i2v_looping.py new file mode 100644 index 0000000..7ebaaa8 --- /dev/null +++ b/example_workflows/generate_two_pass_i2v_looping.py @@ -0,0 +1,527 @@ +#!/usr/bin/env python3 +"""Generate a two-pass I2V arbitrary-length workflow for LTX-2.3. + +Stage 1: LTXVLoopingSampler at base resolution (~544p) with soft guiding + images at tile boundaries for subject/scene continuity. +Stage 2: Spatial upscale (2x) → LTXVLoopingSampler refinement at high + resolution with spatial tiling. + +Run: python generate_two_pass_i2v_looping.py +Out: LTX-2.3_Two_Pass_I2V_Looping.json (importable ComfyUI workflow) +""" + +import json +import uuid + +# ─── Workflow builder ──────────────────────────────────────────────── + +_link_counter = 0 +_nodes: list[dict] = [] +_links: list[list] = [] + + +def _next_link_id(): + global _link_counter + _link_counter += 1 + return _link_counter + + +def node( + nid: int, + ntype: str, + pos: tuple[int, int], + widgets: list | None = None, + size: tuple[int, int] = (300, 200), + title: str | None = None, + color: str | None = None, + bgcolor: str | None = None, +): + """Register a node and return its id for wiring.""" + n = { + "id": nid, + "type": ntype, + "pos": list(pos), + "size": list(size), + "flags": {}, + "order": nid, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {"Node name for S&R": ntype}, + "widgets_values": widgets if widgets is not None else [], + } + if title: + n["title"] = title + if color: + n["color"] = color + if bgcolor: + n["bgcolor"] = bgcolor + _nodes.append(n) + return nid + + +def inp(nid: int, name: str, typ: str): + """Declare an input slot on a node (call in slot order).""" + for n in _nodes: + if n["id"] == nid: + n["inputs"].append({"name": name, "type": typ, "link": None}) + return + raise ValueError(f"node {nid} not found") + + +def out(nid: int, name: str, typ: str): + """Declare an output slot on a node (call in slot order).""" + for n in _nodes: + if n["id"] == nid: + n["outputs"].append( + { + "name": name, + "type": typ, + "links": [], + "slot_index": len(n["outputs"]), + } + ) + return + raise ValueError(f"node {nid} not found") + + +def link(from_id: int, from_slot: int, to_id: int, to_slot: int, typ: str): + """Wire from_id:from_slot → to_id:to_slot.""" + lid = _next_link_id() + _links.append([lid, from_id, from_slot, to_id, to_slot, typ]) + # Update node bookkeeping + for n in _nodes: + if n["id"] == from_id and from_slot < len(n["outputs"]): + n["outputs"][from_slot]["links"].append(lid) + if n["id"] == to_id and to_slot < len(n["inputs"]): + n["inputs"][to_slot]["link"] = lid + + +def build(): + return { + "id": str(uuid.uuid4()), + "revision": 0, + "last_node_id": max(n["id"] for n in _nodes), + "last_link_id": _link_counter, + "nodes": _nodes, + "links": _links, + "groups": [], + "config": {}, + "extra": { + "ds": {"scale": 0.6, "offset": [0, 0]}, + "info": { + "name": "LTX-2.3 Two-Pass I2V Looping", + "description": ( + "Two-pass I2V workflow for arbitrary-length video. " + "Stage 1 generates at base resolution with temporal tiling. " + "Stage 2 spatially upscales and refines. " + "Soft guiding images at tile boundaries maintain subject continuity." + ), + }, + }, + "version": 0.4, + } + + +# ─── Layout constants ─────────────────────────────────────────────── + +COL_INPUT = 0 +COL_MODELS = 450 +COL_TEXT = 900 +COL_S1_PREP = 1400 +COL_S1_SAMPLE = 1950 +COL_MID = 2500 +COL_S2_SAMPLE = 3050 +COL_OUTPUT = 3600 + +ROW_TOP = 0 +ROW_MID = 400 +ROW_BOT = 800 +ROW_DEEP = 1200 + +# Group colors +S1_COLOR = "#335533" +S1_BG = "#223322" +S2_COLOR = "#333355" +S2_BG = "#222233" + +# ─── Nodes ─────────────────────────────────────────────────────────── + +# ── Shared primitives ── + +node(1, "LoadImage", (COL_INPUT, ROW_TOP), ["reference_image.png", "image"], (300, 300)) +out(1, "IMAGE", "IMAGE") +out(1, "MASK", "MASK") + +node(2, "LTXVPreprocess", (COL_INPUT, ROW_TOP + 340), [18]) +inp(2, "image", "IMAGE") +out(2, "output_image", "IMAGE") +link(1, 0, 2, 0, "IMAGE") # LoadImage → Preprocess + +node(3, "PrimitiveInt", (COL_INPUT, ROW_BOT), [241, "fixed"], (200, 100), + title="Frame Count") +out(3, "INT", "INT") + +node(4, "PrimitiveFloat", (COL_INPUT, ROW_BOT + 130), [24], (200, 100), + title="Frame Rate") +out(4, "FLOAT", "FLOAT") + +node(5, "PrimitiveBoolean", (COL_INPUT, ROW_BOT + 260), [True], (200, 80), + title="I2V Enable") +out(5, "BOOLEAN", "BOOLEAN") + +# Guiding image indices — comma-separated pixel frame positions. +# Default "0" = reference at first frame only. +# For 3 tiles (241 frames, tile_size=128, overlap=24): +# "0, 104, 208" places the guiding image at each tile boundary. +# The number of indices must match the number of guiding images. +# With a single image and "0", only frame 0 gets soft conditioning. +# Use optional_negative_index_latents for global subject anchoring. +node(6, "Note", (COL_INPUT, ROW_DEEP), [ + "## Guiding Image Indices\n\n" + "Set `optional_cond_image_indices` on the Stage 1 Looping Sampler.\n" + "Default: \"0\" (reference image at first frame only).\n\n" + "For multi-tile conditioning, set indices at tile boundaries.\n" + "With tile_size=128, overlap=24, new content starts every 104 frames:\n" + " \"0, 104, 208\" for a 241-frame (3-tile) clip.\n\n" + "The number of images in the guiding batch must match the indices.\n" + "Use LatentBatch or ImageBatch to provide multiple images.\n" + "By default, a single reference image at index 0 is used." +], (400, 280)) + +# ── Model loading ── + +node(10, "CheckpointLoaderSimple", (COL_MODELS, ROW_TOP), + ["ltx-2.3-22b-dev.safetensors"], (350, 150)) +out(10, "MODEL", "MODEL") +out(10, "CLIP", "CLIP") +out(10, "VAE", "VAE") + +node(11, "LTXAVTextEncoderLoader", (COL_MODELS, ROW_TOP + 180), + ["comfy_gemma_3_12B_it.safetensors", "ltx-2.3-22b-dev.safetensors", "default"], + (380, 130)) +out(11, "CLIP", "CLIP") + +node(12, "LTXVAudioVAELoader", (COL_MODELS, ROW_MID), + ["ltx-2.3-22b-dev.safetensors"], (350, 100)) +out(12, "Audio VAE", "VAE") + +node(13, "LoraLoaderModelOnly", (COL_MODELS, ROW_MID + 130), + ["ltx-2.3-22b-distilled-lora-384.safetensors", 0.5], (380, 100), + title="Distilled LoRA (both stages)") +inp(13, "model", "MODEL") +out(13, "MODEL", "MODEL") +link(10, 0, 13, 0, "MODEL") # Checkpoint → LoRA + +node(14, "LatentUpscaleModelLoader", (COL_MODELS, ROW_MID + 260), + ["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"], (380, 100)) +out(14, "LATENT_UPSCALE_MODEL", "LATENT_UPSCALE_MODEL") + +# ── Text encoding ── + +node(20, "CLIPTextEncode", (COL_TEXT, ROW_TOP), + ["A woman walks through a sunlit meadow. Warm breeze rustles the tall grass. " + "Birds sing in the distance. She pauses to admire wildflowers."], + (400, 180), title="Positive Prompt") +inp(20, "clip", "CLIP") +out(20, "CONDITIONING", "CONDITIONING") +link(11, 0, 20, 0, "CLIP") + +node(21, "CLIPTextEncode", (COL_TEXT, ROW_TOP + 220), + ["pc game, console game, video game, cartoon, childish, ugly, blurry"], + (400, 120), title="Negative Prompt") +inp(21, "clip", "CLIP") +out(21, "CONDITIONING", "CONDITIONING") +link(11, 0, 21, 0, "CLIP") + +node(22, "LTXVConditioning", (COL_TEXT, ROW_MID), [24], (300, 120)) +inp(22, "positive", "CONDITIONING") +inp(22, "negative", "CONDITIONING") +inp(22, "frame_rate", "FLOAT") +out(22, "positive", "CONDITIONING") +out(22, "negative", "CONDITIONING") +link(20, 0, 22, 0, "CONDITIONING") +link(21, 0, 22, 1, "CONDITIONING") +link(4, 0, 22, 2, "FLOAT") + +# ── Resize reference image (for both stages) ── + +node(23, "ResizeImageMaskNode", (COL_INPUT + 340, ROW_TOP + 340), + ["scale longer dimension", 1536, "lanczos"], (300, 120), + title="Resize Reference") +inp(23, "input", "IMAGE,MASK") +out(23, "resized", "IMAGE") +link(1, 0, 23, 0, "IMAGE") # Original image → resize + +# ── Stage 1 prep ── + +node(30, "EmptyLTXVLatentVideo", (COL_S1_PREP, ROW_TOP), [960, 544, 241, 1], + (250, 150), title="Stage 1 Empty Latent") +inp(30, "length", "INT") +out(30, "LATENT", "LATENT") +link(3, 0, 30, 0, "INT") # Frame count + +node(31, "LTXVEmptyLatentAudio", (COL_S1_PREP, ROW_TOP + 180), [97, 25, 1], + (250, 130)) +inp(31, "audio_vae", "VAE") +inp(31, "frames_number", "INT") +inp(31, "frame_rate", "INT") +out(31, "Latent", "LATENT") +link(12, 0, 31, 0, "VAE") # Audio VAE +link(3, 0, 31, 1, "INT") # Frame count + +node(34, "CM_FloatToInt", (COL_S1_PREP - 100, ROW_MID + 60), [0], (150, 80), + title="FPS→Int") +inp(34, "a", "FLOAT") +out(34, "INT", "INT") +link(4, 0, 34, 0, "FLOAT") +link(34, 0, 31, 2, "INT") # Frame rate int → audio + +node(32, "LTXVImgToVideoConditionOnly", (COL_S1_PREP, ROW_MID), + [0.7, False], (300, 130), title="Stage 1 I2V Cond", + color=S1_COLOR, bgcolor=S1_BG) +inp(32, "vae", "VAE") +inp(32, "image", "IMAGE") +inp(32, "latent", "LATENT") +inp(32, "bypass", "BOOLEAN") +out(32, "latent", "LATENT") +link(10, 2, 32, 0, "VAE") # Checkpoint VAE +link(2, 0, 32, 1, "IMAGE") # Preprocessed reference +link(30, 0, 32, 2, "LATENT") # Empty latent +link(5, 0, 32, 3, "BOOLEAN") # I2V enable + +node(33, "LTXVConcatAVLatent", (COL_S1_PREP, ROW_BOT), [], + (250, 100), title="Stage 1 AV Concat", + color=S1_COLOR, bgcolor=S1_BG) +inp(33, "video_latent", "LATENT") +inp(33, "audio_latent", "LATENT") +out(33, "latent", "LATENT") +link(32, 0, 33, 0, "LATENT") # Conditioned video latent +link(31, 0, 33, 1, "LATENT") # Empty audio latent + +# VAE-encode reference for negative_index_latents (global subject anchor) +node(35, "VAEEncode", (COL_S1_PREP, ROW_DEEP), [], (250, 100), + title="Encode Reference Latent") +inp(35, "pixels", "IMAGE") +inp(35, "vae", "VAE") +out(35, "LATENT", "LATENT") +link(2, 0, 35, 0, "IMAGE") # Preprocessed reference +link(10, 2, 35, 1, "VAE") # Checkpoint VAE + +# ── Stage 1 sampling ── + +node(40, "RandomNoise", (COL_S1_SAMPLE, ROW_TOP - 80), [42, "fixed"], + (200, 100), title="Stage 1 Noise") +out(40, "NOISE", "NOISE") + +node(41, "KSamplerSelect", (COL_S1_SAMPLE, ROW_TOP + 40), + ["euler_ancestral_cfg_pp"], (250, 80), title="Stage 1 Sampler") +out(41, "SAMPLER", "SAMPLER") + +node(42, "ManualSigmas", (COL_S1_SAMPLE, ROW_TOP + 140), + ["1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0"], + (350, 80), title="Stage 1 Sigmas") +out(42, "SIGMAS", "SIGMAS") + +node(43, "CFGGuider", (COL_S1_SAMPLE, ROW_TOP + 240), [1], (250, 130), + title="Stage 1 Guider", color=S1_COLOR, bgcolor=S1_BG) +inp(43, "model", "MODEL") +inp(43, "positive", "CONDITIONING") +inp(43, "negative", "CONDITIONING") +out(43, "GUIDER", "GUIDER") +link(13, 0, 43, 0, "MODEL") # Model with distilled LoRA +link(22, 0, 43, 1, "CONDITIONING") # Positive +link(22, 1, 43, 2, "CONDITIONING") # Negative + +# LTXVLoopingSampler — Stage 1 +# Widgets: temporal_tile_size, temporal_overlap, guiding_strength, +# temporal_overlap_cond_strength, cond_image_strength, +# horizontal_tiles, vertical_tiles, spatial_overlap, +# adain_factor, guiding_start_step, guiding_end_step, +# optional_cond_image_indices +node(44, "LTXVLoopingSampler", (COL_S1_SAMPLE, ROW_MID), + [128, 24, 1.0, 0.5, 1.0, 1, 1, 1, 0.15, 0, 1000, "0"], + (400, 580), title="Stage 1 — Generate", + color=S1_COLOR, bgcolor=S1_BG) +# Required inputs (slots 0-6) +inp(44, "model", "MODEL") +inp(44, "vae", "VAE") +inp(44, "noise", "NOISE") +inp(44, "sampler", "SAMPLER") +inp(44, "sigmas", "SIGMAS") +inp(44, "guider", "GUIDER") +inp(44, "latents", "LATENT") +# Optional inputs (slots 7-11) +inp(44, "optional_cond_images", "IMAGE") +inp(44, "optional_guiding_latents", "LATENT") +inp(44, "optional_positive_conditionings", "CONDITIONING") +inp(44, "optional_negative_index_latents", "LATENT") +inp(44, "optional_normalizing_latents", "LATENT") +out(44, "denoised_output", "LATENT") + +link(13, 0, 44, 0, "MODEL") # Model with distilled LoRA +link(10, 2, 44, 1, "VAE") # Checkpoint VAE +link(40, 0, 44, 2, "NOISE") # Noise +link(41, 0, 44, 3, "SAMPLER") # Sampler +link(42, 0, 44, 4, "SIGMAS") # Sigmas +link(43, 0, 44, 5, "GUIDER") # Guider +link(33, 0, 44, 6, "LATENT") # AV latent (video + audio) +link(2, 0, 44, 7, "IMAGE") # Guiding images (preprocessed reference) +# slot 8: optional_guiding_latents — not connected (no IC-LoRA guide) +# slot 9: optional_positive_conditionings — not connected (single prompt) +link(35, 0, 44, 10, "LATENT") # Negative index latents (global subject anchor) +# slot 11: optional_normalizing_latents — not connected + +# ── Between stages ── +# Single split of stage 1 AV output: +# video → upscaler → stage 2 looping sampler +# audio → directly to final audio decode (bypasses stage 2) + +node(50, "LTXVSeparateAVLatent", (COL_MID, ROW_MID), [], (250, 100), + title="Split Stage 1 AV") +inp(50, "av_latent", "LATENT") +out(50, "video_latent", "LATENT") +out(50, "audio_latent", "LATENT") +link(44, 0, 50, 0, "LATENT") # Stage 1 output → split + +node(51, "LTXVLatentUpsampler", (COL_MID, ROW_MID + 130), [], (300, 100), + title="Spatial Upscale 2x") +inp(51, "samples", "LATENT") +inp(51, "upscale_model", "LATENT_UPSCALE_MODEL") +inp(51, "vae", "VAE") +out(51, "LATENT", "LATENT") +link(50, 0, 51, 0, "LATENT") # Video latent only +link(14, 0, 51, 1, "LATENT_UPSCALE_MODEL") # Upscale model +link(10, 2, 51, 2, "VAE") # VAE + +node(52, "LTXVImgToVideoConditionOnly", (COL_MID, ROW_MID + 260), + [1.0, False], (300, 130), title="Stage 2 I2V Cond", + color=S2_COLOR, bgcolor=S2_BG) +inp(52, "vae", "VAE") +inp(52, "image", "IMAGE") +inp(52, "latent", "LATENT") +inp(52, "bypass", "BOOLEAN") +out(52, "latent", "LATENT") +link(10, 2, 52, 0, "VAE") # VAE +link(23, 0, 52, 1, "IMAGE") # Resized reference (full res for stage 2) +link(51, 0, 52, 2, "LATENT") # Upscaled video latent +link(5, 0, 52, 3, "BOOLEAN") # I2V enable + +# Stage 2 receives AV latent (upscaled video + stage 1 audio). +# The looping sampler preserves input audio data for refinement: +# base tile uses the corresponding input audio slice, extend tiles +# pass source audio for new-frame initialization via _audio_new_init. +node(53, "LTXVConcatAVLatent", (COL_MID, ROW_BOT + 200), [], (250, 100), + title="Stage 2 AV Concat", color=S2_COLOR, bgcolor=S2_BG) +inp(53, "video_latent", "LATENT") +inp(53, "audio_latent", "LATENT") +out(53, "latent", "LATENT") +link(52, 0, 53, 0, "LATENT") # Conditioned upscaled video +link(50, 1, 53, 1, "LATENT") # Audio from stage 1 + +# ── Stage 2 sampling ── + +node(60, "RandomNoise", (COL_S2_SAMPLE, ROW_TOP - 80), [43, "fixed"], + (200, 100), title="Stage 2 Noise") +out(60, "NOISE", "NOISE") + +node(61, "KSamplerSelect", (COL_S2_SAMPLE, ROW_TOP + 40), + ["euler_cfg_pp"], (250, 80), title="Stage 2 Sampler") +out(61, "SAMPLER", "SAMPLER") + +node(62, "ManualSigmas", (COL_S2_SAMPLE, ROW_TOP + 140), + ["0.85, 0.7250, 0.4219, 0.0"], (300, 80), title="Stage 2 Sigmas") +out(62, "SIGMAS", "SIGMAS") + +node(63, "CFGGuider", (COL_S2_SAMPLE, ROW_TOP + 240), [1], (250, 130), + title="Stage 2 Guider", color=S2_COLOR, bgcolor=S2_BG) +inp(63, "model", "MODEL") +inp(63, "positive", "CONDITIONING") +inp(63, "negative", "CONDITIONING") +out(63, "GUIDER", "GUIDER") +link(13, 0, 63, 0, "MODEL") # Same model with distilled LoRA +link(22, 0, 63, 1, "CONDITIONING") # Same positive +link(22, 1, 63, 2, "CONDITIONING") # Same negative + +# LTXVLoopingSampler — Stage 2 +# spatial tiling 2x1 for upscaled resolution +node(64, "LTXVLoopingSampler", (COL_S2_SAMPLE, ROW_MID), + [128, 24, 1.0, 0.5, 1.0, 2, 1, 1, 0.0, 0, 1000, "0"], + (400, 580), title="Stage 2 — Refine", + color=S2_COLOR, bgcolor=S2_BG) +inp(64, "model", "MODEL") +inp(64, "vae", "VAE") +inp(64, "noise", "NOISE") +inp(64, "sampler", "SAMPLER") +inp(64, "sigmas", "SIGMAS") +inp(64, "guider", "GUIDER") +inp(64, "latents", "LATENT") +inp(64, "optional_cond_images", "IMAGE") +inp(64, "optional_guiding_latents", "LATENT") +inp(64, "optional_positive_conditionings", "CONDITIONING") +inp(64, "optional_negative_index_latents", "LATENT") +inp(64, "optional_normalizing_latents", "LATENT") +out(64, "denoised_output", "LATENT") + +link(13, 0, 64, 0, "MODEL") # Model with distilled LoRA +link(10, 2, 64, 1, "VAE") # VAE +link(60, 0, 64, 2, "NOISE") # Noise +link(61, 0, 64, 3, "SAMPLER") # Sampler +link(62, 0, 64, 4, "SIGMAS") # Sigmas +link(63, 0, 64, 5, "GUIDER") # Guider +link(53, 0, 64, 6, "LATENT") # Stage 2 AV latent (upscaled video + stage 1 audio) +link(23, 0, 64, 7, "IMAGE") # Guiding images (resized reference) +# slot 8-11: not connected for stage 2 + +# ── Output ── +# Both video and audio from stage 2 (refined jointly). + +node(70, "LTXVSeparateAVLatent", (COL_OUTPUT, ROW_MID), [], (250, 100), + title="Split Final AV") +inp(70, "av_latent", "LATENT") +out(70, "video_latent", "LATENT") +out(70, "audio_latent", "LATENT") +link(64, 0, 70, 0, "LATENT") # Stage 2 AV output + +node(71, "LTXVSpatioTemporalTiledVAEDecode", (COL_OUTPUT, ROW_MID + 130), + [6, 4, 16, 4, False, "auto", "auto"], (350, 200), + title="Decode Video (Tiled)") +inp(71, "samples", "LATENT") +inp(71, "vae", "VAE") +out(71, "IMAGE", "IMAGE") +link(70, 0, 71, 0, "LATENT") # Refined video +link(10, 2, 71, 1, "VAE") # VAE + +node(72, "LTXVAudioVAEDecode", (COL_OUTPUT, ROW_MID + 360), [], (250, 100)) +inp(72, "samples", "LATENT") +inp(72, "audio_vae", "VAE") +out(72, "Audio", "AUDIO") +link(70, 1, 72, 0, "LATENT") # Refined audio +link(12, 0, 72, 1, "VAE") # Audio VAE + +node(73, "CreateVideo", (COL_OUTPUT, ROW_BOT + 200), [30], (250, 100)) +inp(73, "images", "IMAGE") +inp(73, "audio", "AUDIO") +inp(73, "fps", "FLOAT") +out(73, "VIDEO", "VIDEO") +link(71, 0, 73, 0, "IMAGE") +link(72, 0, 73, 1, "AUDIO") +link(4, 0, 73, 2, "FLOAT") # Frame rate + +node(74, "SaveVideo", (COL_OUTPUT, ROW_DEEP), ["LTX-2.3/Looping", "auto", "auto"], + (250, 100)) +inp(74, "video", "VIDEO") +link(73, 0, 74, 0, "VIDEO") + + +# ─── Generate ──────────────────────────────────────────────────────── + +if __name__ == "__main__": + import os + + wf = build() + out_path = os.path.join(os.path.dirname(__file__), "LTX-2.3_Two_Pass_I2V_Looping.json") + with open(out_path, "w") as f: + json.dump(wf, f, indent=2) + print(f"Wrote {out_path}") + print(f" {len(_nodes)} nodes, {len(_links)} links") From 77006fd90dd4092b0fe6af8ec8376adb76488a6b Mon Sep 17 00:00:00 2001 From: "Jean J. de Jong" Date: Thu, 9 Apr 2026 14:27:56 +0200 Subject: [PATCH 3/4] Reformatted the json --- .../LTX-2.3_Two_Pass_I2V_Looping.json | 2049 +++++++++++++++- .../LTX-2.3_Two_Pass_I2V_Looping_30s.json | 2171 ++++++++++++++++- 2 files changed, 4218 insertions(+), 2 deletions(-) diff --git a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json index 43a3d83..6ef2f4e 100644 --- a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json @@ -1 +1,2048 @@ -{"id":"6442f6ec-19f9-4ded-93a2-00c286be6dab","revision":0,"last_node_id":75,"last_link_id":65,"nodes":[{"id":1,"type":"LoadImage","pos":[0,0],"size":[300,300],"flags":{},"order":0,"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","slot_index":0,"links":[1,8]},{"localized_name":"MASK","name":"MASK","type":"MASK","slot_index":1,"links":[]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoadImage"},"widgets_values":["reference_image.png","image"]},{"id":3,"type":"PrimitiveInt","pos":[0,800],"size":[210,100],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"INT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"INT","name":"INT","type":"INT","slot_index":0,"links":[9,11]}],"title":"Frame Count","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveInt"},"widgets_values":[241,"fixed"]},{"id":20,"type":"CLIPTextEncode","pos":[900,0],"size":[400,180],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":3},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[5]}],"title":"Positive Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["A woman walks through a sunlit meadow. Warm breeze rustles the tall grass. Birds sing in the distance. She pauses to admire wildflowers."]},{"id":21,"type":"CLIPTextEncode","pos":[900,220],"size":[400,120],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":4},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[6]}],"title":"Negative Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["pc game, console game, video game, cartoon, childish, ugly, blurry"]},{"id":40,"type":"RandomNoise","pos":[1950,-80],"size":[210,100],"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","slot_index":0,"links":[27]}],"title":"Stage 1 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[42,"fixed"]},{"id":41,"type":"KSamplerSelect","pos":[1950,40],"size":[250,80],"flags":{},"order":3,"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","slot_index":0,"links":[28]}],"title":"Stage 1 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_ancestral_cfg_pp"]},{"id":42,"type":"ManualSigmas","pos":[1950,140],"size":[350,80],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[29]}],"title":"Stage 1 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0"]},{"id":44,"type":"LTXVLoopingSampler","pos":[1950,400],"size":[400,580],"flags":{},"order":28,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":25},{"localized_name":"vae","name":"vae","type":"VAE","link":26},{"localized_name":"noise","name":"noise","type":"NOISE","link":27},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":28},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":29},{"localized_name":"guider","name":"guider","type":"GUIDER","link":30},{"localized_name":"latents","name":"latents","type":"LATENT","link":31},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":32},{"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":null},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":33},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[34]}],"title":"Stage 1 — Generate","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[128,24,1,0.5,1,1,1,1,0.15,0,1000,"0"],"color":"#335533","bgcolor":"#223322"},{"id":4,"type":"PrimitiveFloat","pos":[0,930],"size":[210,100],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"FLOAT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"FLOAT","name":"FLOAT","type":"FLOAT","slot_index":0,"links":[7,62,64]}],"title":"Frame Rate","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveFloat"},"widgets_values":[24]},{"id":75,"type":"FloatToInt","pos":[991.6666666666669,928.3333333333287],"size":[270,82],"flags":{"collapsed":true},"order":17,"mode":0,"inputs":[{"localized_name":"float_value","name":"float_value","type":"FLOAT","widget":{"name":"float_value"},"link":64},{"localized_name":"rounding_mode","name":"rounding_mode","type":"COMBO","widget":{"name":"rounding_mode"},"link":null}],"outputs":[{"localized_name":"int_value","name":"int_value","type":"INT","links":[65]}],"properties":{"aux_id":"danTheMonk/comfyui-int-and-float","ver":"a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720","Node name for S&R":"FloatToInt"},"widgets_values":[0,"down (floor)"]},{"id":2,"type":"LTXVPreprocess","pos":[11.666666666666666,355.00000000000017],"size":[220,58],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":1},{"localized_name":"img_compression","name":"img_compression","type":"INT","widget":{"name":"img_compression"},"link":null}],"outputs":[{"localized_name":"output_image","name":"output_image","type":"IMAGE","slot_index":0,"links":[15,20,32]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVPreprocess"},"widgets_values":[18]},{"id":23,"type":"ResizeImageMaskNode","pos":[8.333333333333284,505.00000000000085],"size":[300,106],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"input","name":"input","type":"IMAGE,MASK","link":8},{"localized_name":"resize_type","name":"resize_type","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"resize_type"},"link":null},{"localized_name":"resize_type.longer_size","name":"resize_type.longer_size","type":"INT","widget":{"name":"resize_type.longer_size"},"link":null},{"localized_name":"scale_method","name":"scale_method","type":"COMBO","widget":{"name":"scale_method"},"link":null}],"outputs":[{"localized_name":"resized","name":"resized","type":"IMAGE","slot_index":0,"links":[39,54]}],"title":"Resize Reference","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ResizeImageMaskNode"},"widgets_values":["scale longer dimension",1536,"lanczos"]},{"id":14,"type":"LatentUpscaleModelLoader","pos":[452.82236965026885,683.519747085575],"size":[376.2368404663082,58],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"model_name","name":"model_name","type":"COMBO","widget":{"name":"model_name"},"link":null}],"outputs":[{"localized_name":"LATENT_UPSCALE_MODEL","name":"LATENT_UPSCALE_MODEL","type":"LATENT_UPSCALE_MODEL","slot_index":0,"links":[36]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LatentUpscaleModelLoader"},"widgets_values":["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"]},{"id":13,"type":"LoraLoaderModelOnly","pos":[451.8815797668459,542.2302684844991],"size":[373.4144708160393,82],"flags":{},"order":20,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":2},{"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","slot_index":0,"links":[22,25,44,47]}],"title":"Distilled LoRA (both stages)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoraLoaderModelOnly"},"widgets_values":["LTX/ltx-2.3-22b-distilled-lora-384.safetensors",0.5]},{"id":12,"type":"LTXVAudioVAELoader","pos":[450,400],"size":[369.75658755188215,58],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"Audio VAE","name":"Audio VAE","type":"VAE","slot_index":0,"links":[10,59]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAELoader"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":11,"type":"LTXAVTextEncoderLoader","pos":[448.1184202331541,213.86843580322656],"size":[373.41447081603906,106],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"text_encoder","name":"text_encoder","type":"COMBO","widget":{"name":"text_encoder"},"link":null},{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null},{"localized_name":"device","name":"device","type":"COMBO","widget":{"name":"device"},"link":null}],"outputs":[{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":0,"links":[3,4]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXAVTextEncoderLoader"},"widgets_values":["gemma_3_12B_it.safetensors","ltx-2.3-22b-dev.safetensors","default"]},{"id":10,"type":"CheckpointLoaderSimple","pos":[445.29605058288524,31.046066152957746],"size":[371.63816731872794,98],"flags":{},"order":9,"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":[2]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[]},{"localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[14,21,26,37,38,48,57]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":22,"type":"LTXVConditioning","pos":[999.7237276428352,409.4078988342295],"size":[210,78],"flags":{},"order":24,"mode":0,"inputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":5},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":6},{"localized_name":"frame_rate","name":"frame_rate","type":"FLOAT","widget":{"name":"frame_rate"},"link":7}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","slot_index":0,"links":[23,45]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","slot_index":1,"links":[24,46]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConditioning"},"widgets_values":[24]},{"id":31,"type":"LTXVEmptyLatentAudio","pos":[1400.940789883423,211.9868560363806],"size":[252.82236965026914,106],"flags":{},"order":23,"mode":0,"inputs":[{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":10},{"localized_name":"frames_number","name":"frames_number","type":"INT","widget":{"name":"frames_number"},"link":11},{"localized_name":"frame_rate","name":"frame_rate","type":"INT","widget":{"name":"frame_rate"},"link":65},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"Latent","name":"Latent","type":"LATENT","slot_index":0,"links":[19]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVEmptyLatentAudio"},"widgets_values":[97,25,1]},{"id":30,"type":"EmptyLTXVLatentVideo","pos":[1400,0],"size":[252.82236965026868,130],"flags":{},"order":16,"mode":0,"inputs":[{"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":"length","name":"length","type":"INT","widget":{"name":"length"},"link":9},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[16]}],"title":"Stage 1 Empty Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"EmptyLTXVLatentVideo"},"widgets_values":[960,544,241,1]},{"id":43,"type":"CFGGuider","pos":[1960.3486887176518,256.9342179016131],"size":[250,98],"flags":{},"order":26,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":22},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":23},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":24},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[30]}],"title":"Stage 1 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#335533","bgcolor":"#223322"},{"id":63,"type":"CFGGuider","pos":[2563.9220909318396,255.9369806251849],"size":[235.2013751337572,98],"flags":{},"order":27,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":44},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":45},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":46},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[52]}],"title":"Stage 2 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#333355","bgcolor":"#222233"},{"id":62,"type":"ManualSigmas","pos":[3047.723288482116,178.70409580402023],"size":[277.23288482116413,58],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[51]}],"title":"Stage 2 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["0.85, 0.7250, 0.4219, 0.0"]},{"id":61,"type":"KSamplerSelect","pos":[3050,69.5972497324864],"size":[250,58],"flags":{},"order":11,"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","slot_index":0,"links":[50]}],"title":"Stage 2 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_cfg_pp"]},{"id":60,"type":"RandomNoise","pos":[3050,-80],"size":[210,82],"flags":{},"order":12,"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":[49]}],"title":"Stage 2 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[43,"fixed"]},{"id":74,"type":"SaveVideo","pos":[3975.7575757575723,1040.9090909090924],"size":[250,106],"flags":{},"order":38,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":63},{"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":"codec","name":"codec","type":"COMBO","widget":{"name":"codec"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"SaveVideo"},"widgets_values":["LTX-2.3/Looping","auto","auto"]},{"id":73,"type":"CreateVideo","pos":[3649.9999999999995,1049.9999999999995],"size":[243.939393939394,78],"flags":{},"order":37,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":60},{"localized_name":"audio","name":"audio","shape":7,"type":"AUDIO","link":61},{"localized_name":"fps","name":"fps","type":"FLOAT","widget":{"name":"fps"},"link":62}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","slot_index":0,"links":[63]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CreateVideo"},"widgets_values":[30]},{"id":72,"type":"LTXVAudioVAEDecode","pos":[3643.9393939393935,899.3939393939382],"size":[203.00000610351563,46],"flags":{},"order":36,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":58},{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":59}],"outputs":[{"localized_name":"Audio","name":"Audio","type":"AUDIO","slot_index":0,"links":[61]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAEDecode"},"widgets_values":[]},{"id":71,"type":"LTXVSpatioTemporalTiledVAEDecode","pos":[3615.151515151515,569.393939393939],"size":[350,242],"flags":{},"order":35,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":57},{"localized_name":"latents","name":"latents","type":"LATENT","link":null},{"localized_name":"spatial_tiles","name":"spatial_tiles","type":"INT","widget":{"name":"spatial_tiles"},"link":null},{"localized_name":"spatial_overlap","name":"spatial_overlap","type":"INT","widget":{"name":"spatial_overlap"},"link":null},{"localized_name":"temporal_tile_length","name":"temporal_tile_length","type":"INT","widget":{"name":"temporal_tile_length"},"link":null},{"localized_name":"temporal_overlap","name":"temporal_overlap","type":"INT","widget":{"name":"temporal_overlap"},"link":null},{"localized_name":"last_frame_fix","name":"last_frame_fix","type":"BOOLEAN","widget":{"name":"last_frame_fix"},"link":null},{"localized_name":"working_device","name":"working_device","type":"COMBO","widget":{"name":"working_device"},"link":null},{"localized_name":"working_dtype","name":"working_dtype","type":"COMBO","widget":{"name":"working_dtype"},"link":null},{"name":"samples","type":"LATENT","link":56}],"outputs":[{"localized_name":"image","name":"image","type":"IMAGE","slot_index":0,"links":[60]}],"title":"Decode Video (Tiled)","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVSpatioTemporalTiledVAEDecode"},"widgets_values":[6,4,16,4,false,"auto","auto"]},{"id":70,"type":"LTXVSeparateAVLatent","pos":[3600,400],"size":[233.33333333333348,46],"flags":{},"order":34,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":55}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[56]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[58]}],"title":"Split Final AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":64,"type":"LTXVLoopingSampler","pos":[3073.801984050594,392.75591789764337],"size":[400,580],"flags":{},"order":33,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":47},{"localized_name":"vae","name":"vae","type":"VAE","link":48},{"localized_name":"noise","name":"noise","type":"NOISE","link":49},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":50},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":51},{"localized_name":"guider","name":"guider","type":"GUIDER","link":52},{"localized_name":"latents","name":"latents","type":"LATENT","link":53},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":54},{"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":null},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":null},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[55]}],"title":"Stage 2 — Refine","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[128,24,1,0.5,1,2,1,1,0,0,1000,"0"],"color":"#333355","bgcolor":"#222233"},{"id":53,"type":"LTXVConcatAVLatent","pos":[2807.97697623735,524.995187859747],"size":[190.80550053502748,46],"flags":{},"order":32,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":42},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":43}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[53]}],"title":"Stage 2 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#333355","bgcolor":"#222233"},{"id":51,"type":"LTXVLatentUpsampler","pos":[2494.204734318114,557.0100775530725],"size":[249.9123466065612,66],"flags":{},"order":30,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":35},{"localized_name":"upscale_model","name":"upscale_model","type":"LATENT_UPSCALE_MODEL","link":36},{"localized_name":"vae","name":"vae","type":"VAE","link":37}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[40]}],"title":"Spatial Upscale 2x","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVLatentUpsampler"},"widgets_values":[]},{"id":50,"type":"LTXVSeparateAVLatent","pos":[2429.214969171252,400.10348688717687],"size":[172.5918083919587,46],"flags":{},"order":29,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":34}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[35]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[43]}],"title":"Split Stage 1 AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":33,"type":"LTXVConcatAVLatent","pos":[1435.7500155700718,795.296050582885],"size":[174.92496730284756,46],"flags":{},"order":25,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":18},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":19}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[31]}],"title":"Stage 1 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#335533","bgcolor":"#223322"},{"id":35,"type":"VAEEncode","pos":[1383.3333333333328,1164.9999999999995],"size":[206.36665954589844,46],"flags":{},"order":21,"mode":0,"inputs":[{"localized_name":"pixels","name":"pixels","type":"IMAGE","link":20},{"localized_name":"vae","name":"vae","type":"VAE","link":21}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[33]}],"title":"Encode Reference Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"VAEEncode"},"widgets_values":[]},{"id":32,"type":"LTXVImgToVideoConditionOnly","pos":[1399.999999999999,604.9999999999992],"size":[210,122],"flags":{},"order":22,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":14},{"localized_name":"image","name":"image","type":"IMAGE","link":15},{"localized_name":"latent","name":"latent","type":"LATENT","link":16},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[18]}],"title":"Stage 1 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[0.7,false],"color":"#335533","bgcolor":"#223322"},{"id":52,"type":"LTXVImgToVideoConditionOnly","pos":[2492.238483461759,791.1178860526603],"size":[210,122],"flags":{},"order":31,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":38},{"localized_name":"image","name":"image","type":"IMAGE","link":39},{"localized_name":"latent","name":"latent","type":"LATENT","link":40},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[42]}],"title":"Stage 2 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[1,false],"color":"#333355","bgcolor":"#222233"},{"id":6,"type":"Note","pos":[281.1738724586202,1016.7247228103745],"size":[631.0862190651818,273.1698654463494],"flags":{},"order":13,"mode":0,"inputs":[],"outputs":[],"properties":{"Node name for S&R":"Note"},"widgets_values":["## Guiding Image Indices\n\nSet `optional_cond_image_indices` on the Stage 1 Looping Sampler.\nDefault: \"0\" (reference image at first frame only).\n\nFor multi-tile conditioning, set indices at tile boundaries.\nWith tile_size=128, overlap=24, new content starts every 104 frames:\n \"0, 104, 208\" for a 241-frame (3-tile) clip.\n\nThe number of images in the guiding batch must match the indices.\nUse LatentBatch or ImageBatch to provide multiple images.\nBy default, a single reference image at index 0 is used."],"color":"#432","bgcolor":"#653"}],"links":[[1,1,0,2,0,"IMAGE"],[2,10,0,13,0,"MODEL"],[3,11,0,20,0,"CLIP"],[4,11,0,21,0,"CLIP"],[5,20,0,22,0,"CONDITIONING"],[6,21,0,22,1,"CONDITIONING"],[7,4,0,22,2,"FLOAT"],[8,1,0,23,0,"IMAGE"],[9,3,0,30,2,"INT"],[10,12,0,31,0,"VAE"],[11,3,0,31,1,"INT"],[14,10,2,32,0,"VAE"],[15,2,0,32,1,"IMAGE"],[16,30,0,32,2,"LATENT"],[18,32,0,33,0,"LATENT"],[19,31,0,33,1,"LATENT"],[20,2,0,35,0,"IMAGE"],[21,10,2,35,1,"VAE"],[22,13,0,43,0,"MODEL"],[23,22,0,43,1,"CONDITIONING"],[24,22,1,43,2,"CONDITIONING"],[25,13,0,44,0,"MODEL"],[26,10,2,44,1,"VAE"],[27,40,0,44,2,"NOISE"],[28,41,0,44,3,"SAMPLER"],[29,42,0,44,4,"SIGMAS"],[30,43,0,44,5,"GUIDER"],[31,33,0,44,6,"LATENT"],[32,2,0,44,7,"IMAGE"],[33,35,0,44,10,"LATENT"],[34,44,0,50,0,"LATENT"],[35,50,0,51,0,"LATENT"],[36,14,0,51,1,"LATENT_UPSCALE_MODEL"],[37,10,2,51,2,"VAE"],[38,10,2,52,0,"VAE"],[39,23,0,52,1,"IMAGE"],[40,51,0,52,2,"LATENT"],[42,52,0,53,0,"LATENT"],[43,50,1,53,1,"LATENT"],[44,13,0,63,0,"MODEL"],[45,22,0,63,1,"CONDITIONING"],[46,22,1,63,2,"CONDITIONING"],[47,13,0,64,0,"MODEL"],[48,10,2,64,1,"VAE"],[49,60,0,64,2,"NOISE"],[50,61,0,64,3,"SAMPLER"],[51,62,0,64,4,"SIGMAS"],[52,63,0,64,5,"GUIDER"],[53,53,0,64,6,"LATENT"],[54,23,0,64,7,"IMAGE"],[55,64,0,70,0,"LATENT"],[56,70,0,71,9,"LATENT"],[57,10,2,71,0,"VAE"],[58,70,1,72,0,"LATENT"],[59,12,0,72,1,"VAE"],[60,71,0,73,0,"IMAGE"],[61,72,0,73,1,"AUDIO"],[62,4,0,73,2,"FLOAT"],[63,73,0,74,0,"VIDEO"],[64,4,0,75,0,"FLOAT"],[65,75,0,31,2,"INT"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.878460000000002,"offset":[-147.93391628437732,99.35113851569274]},"info":{"name":"LTX-2.3 Two-Pass I2V Looping","description":"Two-pass I2V workflow for arbitrary-length video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Soft guiding images at tile boundaries maintain subject continuity."}},"version":0.4} \ No newline at end of file +{ + "id": "6442f6ec-19f9-4ded-93a2-00c286be6dab", + "revision": 0, + "last_node_id": 75, + "last_link_id": 65, + "nodes": [ + { + "id": 1, + "type": "LoadImage", + "pos": [0, 0], + "size": [300, 300], + "flags": {}, + "order": 0, + "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", + "slot_index": 0, + "links": [1, 8] + }, + { + "localized_name": "MASK", + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LoadImage" + }, + "widgets_values": ["reference_image.png", "image"] + }, + { + "id": 3, + "type": "PrimitiveInt", + "pos": [0, 800], + "size": [210, 100], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { "name": "value" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [9, 11] + } + ], + "title": "Frame Count", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [241, "fixed"] + }, + { + "id": 20, + "type": "CLIPTextEncode", + "pos": [900, 0], + "size": [400, 180], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 3 }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { "name": "text" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [5] + } + ], + "title": "Positive Prompt", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "A woman walks through a sunlit meadow. Warm breeze rustles the tall grass. Birds sing in the distance. She pauses to admire wildflowers." + ] + }, + { + "id": 21, + "type": "CLIPTextEncode", + "pos": [900, 220], + "size": [400, 120], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 4 }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { "name": "text" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [6] + } + ], + "title": "Negative Prompt", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "pc game, console game, video game, cartoon, childish, ugly, blurry" + ] + }, + { + "id": 40, + "type": "RandomNoise", + "pos": [1950, -80], + "size": [210, 100], + "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", + "slot_index": 0, + "links": [27] + } + ], + "title": "Stage 1 Noise", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [42, "fixed"] + }, + { + "id": 41, + "type": "KSamplerSelect", + "pos": [1950, 40], + "size": [250, 80], + "flags": {}, + "order": 3, + "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", + "slot_index": 0, + "links": [28] + } + ], + "title": "Stage 1 Sampler", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": ["euler_ancestral_cfg_pp"] + }, + { + "id": 42, + "type": "ManualSigmas", + "pos": [1950, 140], + "size": [350, 80], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { "name": "sigmas" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, + "links": [29] + } + ], + "title": "Stage 1 Sigmas", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "ManualSigmas" + }, + "widgets_values": [ + "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0" + ] + }, + { + "id": 44, + "type": "LTXVLoopingSampler", + "pos": [1950, 400], + "size": [400, 580], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 25 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 26 }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 27 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 28 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 29 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 30 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 31 + }, + { + "localized_name": "optional_cond_images", + "name": "optional_cond_images", + "shape": 7, + "type": "IMAGE", + "link": 32 + }, + { + "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": null + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": 33 + }, + { + "localized_name": "optional_normalizing_latents", + "name": "optional_normalizing_latents", + "shape": 7, + "type": "LATENT", + "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": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { "name": "guiding_strength" }, + "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": "cond_image_strength", + "name": "cond_image_strength", + "type": "FLOAT", + "widget": { "name": "cond_image_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": "guiding_start_step", + "name": "guiding_start_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_start_step" }, + "link": null + }, + { + "localized_name": "guiding_end_step", + "name": "guiding_end_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_end_step" }, + "link": null + }, + { + "localized_name": "optional_cond_image_indices", + "name": "optional_cond_image_indices", + "shape": 7, + "type": "STRING", + "widget": { "name": "optional_cond_image_indices" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "slot_index": 0, + "links": [34] + } + ], + "title": "Stage 1 — Generate", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [128, 24, 1, 0.5, 1, 1, 1, 1, 0.15, 0, 1000, "0"], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 4, + "type": "PrimitiveFloat", + "pos": [0, 930], + "size": [210, 100], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "FLOAT", + "widget": { "name": "value" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [7, 62, 64] + } + ], + "title": "Frame Rate", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "PrimitiveFloat" + }, + "widgets_values": [24] + }, + { + "id": 75, + "type": "FloatToInt", + "pos": [991.6666666666669, 928.3333333333287], + "size": [270, 82], + "flags": { "collapsed": true }, + "order": 17, + "mode": 0, + "inputs": [ + { + "localized_name": "float_value", + "name": "float_value", + "type": "FLOAT", + "widget": { "name": "float_value" }, + "link": 64 + }, + { + "localized_name": "rounding_mode", + "name": "rounding_mode", + "type": "COMBO", + "widget": { "name": "rounding_mode" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "int_value", + "name": "int_value", + "type": "INT", + "links": [65] + } + ], + "properties": { + "aux_id": "danTheMonk/comfyui-int-and-float", + "ver": "a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720", + "Node name for S&R": "FloatToInt" + }, + "widgets_values": [0, "down (floor)"] + }, + { + "id": 2, + "type": "LTXVPreprocess", + "pos": [11.666666666666666, 355.00000000000017], + "size": [220, 58], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 1 + }, + { + "localized_name": "img_compression", + "name": "img_compression", + "type": "INT", + "widget": { "name": "img_compression" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "output_image", + "name": "output_image", + "type": "IMAGE", + "slot_index": 0, + "links": [15, 20, 32] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVPreprocess" + }, + "widgets_values": [18] + }, + { + "id": 23, + "type": "ResizeImageMaskNode", + "pos": [8.333333333333284, 505.00000000000085], + "size": [300, 106], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "localized_name": "input", + "name": "input", + "type": "IMAGE,MASK", + "link": 8 + }, + { + "localized_name": "resize_type", + "name": "resize_type", + "type": "COMFY_DYNAMICCOMBO_V3", + "widget": { "name": "resize_type" }, + "link": null + }, + { + "localized_name": "resize_type.longer_size", + "name": "resize_type.longer_size", + "type": "INT", + "widget": { "name": "resize_type.longer_size" }, + "link": null + }, + { + "localized_name": "scale_method", + "name": "scale_method", + "type": "COMBO", + "widget": { "name": "scale_method" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "resized", + "name": "resized", + "type": "IMAGE", + "slot_index": 0, + "links": [39, 54] + } + ], + "title": "Resize Reference", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "ResizeImageMaskNode" + }, + "widgets_values": ["scale longer dimension", 1536, "lanczos"] + }, + { + "id": 14, + "type": "LatentUpscaleModelLoader", + "pos": [452.82236965026885, 683.519747085575], + "size": [376.2368404663082, 58], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "localized_name": "model_name", + "name": "model_name", + "type": "COMBO", + "widget": { "name": "model_name" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "LATENT_UPSCALE_MODEL", + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "slot_index": 0, + "links": [36] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LatentUpscaleModelLoader" + }, + "widgets_values": ["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"] + }, + { + "id": 13, + "type": "LoraLoaderModelOnly", + "pos": [451.8815797668459, 542.2302684844991], + "size": [373.4144708160393, 82], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 2 + }, + { + "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", + "slot_index": 0, + "links": [22, 25, 44, 47] + } + ], + "title": "Distilled LoRA (both stages)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": ["LTX/ltx-2.3-22b-distilled-lora-384.safetensors", 0.5] + }, + { + "id": 12, + "type": "LTXVAudioVAELoader", + "pos": [450, 400], + "size": [369.75658755188215, 58], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { "name": "ckpt_name" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Audio VAE", + "name": "Audio VAE", + "type": "VAE", + "slot_index": 0, + "links": [10, 59] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVAudioVAELoader" + }, + "widgets_values": ["ltx-2.3-22b-dev.safetensors"] + }, + { + "id": 11, + "type": "LTXAVTextEncoderLoader", + "pos": [448.1184202331541, 213.86843580322656], + "size": [373.41447081603906, 106], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "text_encoder", + "name": "text_encoder", + "type": "COMBO", + "widget": { "name": "text_encoder" }, + "link": null + }, + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { "name": "ckpt_name" }, + "link": null + }, + { + "localized_name": "device", + "name": "device", + "type": "COMBO", + "widget": { "name": "device" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [3, 4] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXAVTextEncoderLoader" + }, + "widgets_values": [ + "gemma_3_12B_it.safetensors", + "ltx-2.3-22b-dev.safetensors", + "default" + ] + }, + { + "id": 10, + "type": "CheckpointLoaderSimple", + "pos": [445.29605058288524, 31.046066152957746], + "size": [371.63816731872794, 98], + "flags": {}, + "order": 9, + "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": [2] + }, + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 1, + "links": [] + }, + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 2, + "links": [14, 21, 26, 37, 38, 48, 57] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": ["ltx-2.3-22b-dev.safetensors"] + }, + { + "id": 22, + "type": "LTXVConditioning", + "pos": [999.7237276428352, 409.4078988342295], + "size": [210, 78], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 6 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { "name": "frame_rate" }, + "link": 7 + } + ], + "outputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [23, 45] + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [24, 46] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVConditioning" + }, + "widgets_values": [24] + }, + { + "id": 31, + "type": "LTXVEmptyLatentAudio", + "pos": [1400.940789883423, 211.9868560363806], + "size": [252.82236965026914, 106], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "localized_name": "audio_vae", + "name": "audio_vae", + "type": "VAE", + "link": 10 + }, + { + "localized_name": "frames_number", + "name": "frames_number", + "type": "INT", + "widget": { "name": "frames_number" }, + "link": 11 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "INT", + "widget": { "name": "frame_rate" }, + "link": 65 + }, + { + "localized_name": "batch_size", + "name": "batch_size", + "type": "INT", + "widget": { "name": "batch_size" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Latent", + "name": "Latent", + "type": "LATENT", + "slot_index": 0, + "links": [19] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVEmptyLatentAudio" + }, + "widgets_values": [97, 25, 1] + }, + { + "id": 30, + "type": "EmptyLTXVLatentVideo", + "pos": [1400, 0], + "size": [252.82236965026868, 130], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "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": "length", + "name": "length", + "type": "INT", + "widget": { "name": "length" }, + "link": 9 + }, + { + "localized_name": "batch_size", + "name": "batch_size", + "type": "INT", + "widget": { "name": "batch_size" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [16] + } + ], + "title": "Stage 1 Empty Latent", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "EmptyLTXVLatentVideo" + }, + "widgets_values": [960, 544, 241, 1] + }, + { + "id": 43, + "type": "CFGGuider", + "pos": [1960.3486887176518, 256.9342179016131], + "size": [250, 98], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 22 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 23 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 24 + }, + { + "localized_name": "cfg", + "name": "cfg", + "type": "FLOAT", + "widget": { "name": "cfg" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [30] + } + ], + "title": "Stage 1 Guider", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CFGGuider" + }, + "widgets_values": [1], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 63, + "type": "CFGGuider", + "pos": [2563.9220909318396, 255.9369806251849], + "size": [235.2013751337572, 98], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 44 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 45 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 46 + }, + { + "localized_name": "cfg", + "name": "cfg", + "type": "FLOAT", + "widget": { "name": "cfg" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [52] + } + ], + "title": "Stage 2 Guider", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CFGGuider" + }, + "widgets_values": [1], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 62, + "type": "ManualSigmas", + "pos": [3047.723288482116, 178.70409580402023], + "size": [277.23288482116413, 58], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { "name": "sigmas" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, + "links": [51] + } + ], + "title": "Stage 2 Sigmas", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "ManualSigmas" + }, + "widgets_values": ["0.85, 0.7250, 0.4219, 0.0"] + }, + { + "id": 61, + "type": "KSamplerSelect", + "pos": [3050, 69.5972497324864], + "size": [250, 58], + "flags": {}, + "order": 11, + "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", + "slot_index": 0, + "links": [50] + } + ], + "title": "Stage 2 Sampler", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": ["euler_cfg_pp"] + }, + { + "id": 60, + "type": "RandomNoise", + "pos": [3050, -80], + "size": [210, 82], + "flags": {}, + "order": 12, + "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": [49] + } + ], + "title": "Stage 2 Noise", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [43, "fixed"] + }, + { + "id": 74, + "type": "SaveVideo", + "pos": [3975.7575757575723, 1040.9090909090924], + "size": [250, 106], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "localized_name": "video", + "name": "video", + "type": "VIDEO", + "link": 63 + }, + { + "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": "codec", + "name": "codec", + "type": "COMBO", + "widget": { "name": "codec" }, + "link": null + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "SaveVideo" + }, + "widgets_values": ["LTX-2.3/Looping", "auto", "auto"] + }, + { + "id": 73, + "type": "CreateVideo", + "pos": [3649.9999999999995, 1049.9999999999995], + "size": [243.939393939394, 78], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 60 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 61 + }, + { + "localized_name": "fps", + "name": "fps", + "type": "FLOAT", + "widget": { "name": "fps" }, + "link": 62 + } + ], + "outputs": [ + { + "localized_name": "VIDEO", + "name": "VIDEO", + "type": "VIDEO", + "slot_index": 0, + "links": [63] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CreateVideo" + }, + "widgets_values": [30] + }, + { + "id": 72, + "type": "LTXVAudioVAEDecode", + "pos": [3643.9393939393935, 899.3939393939382], + "size": [203.00000610351563, 46], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 58 + }, + { + "localized_name": "audio_vae", + "name": "audio_vae", + "type": "VAE", + "link": 59 + } + ], + "outputs": [ + { + "localized_name": "Audio", + "name": "Audio", + "type": "AUDIO", + "slot_index": 0, + "links": [61] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVAudioVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 71, + "type": "LTXVSpatioTemporalTiledVAEDecode", + "pos": [3615.151515151515, 569.393939393939], + "size": [350, 242], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 57 }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": null + }, + { + "localized_name": "spatial_tiles", + "name": "spatial_tiles", + "type": "INT", + "widget": { "name": "spatial_tiles" }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { "name": "spatial_overlap" }, + "link": null + }, + { + "localized_name": "temporal_tile_length", + "name": "temporal_tile_length", + "type": "INT", + "widget": { "name": "temporal_tile_length" }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { "name": "temporal_overlap" }, + "link": null + }, + { + "localized_name": "last_frame_fix", + "name": "last_frame_fix", + "type": "BOOLEAN", + "widget": { "name": "last_frame_fix" }, + "link": null + }, + { + "localized_name": "working_device", + "name": "working_device", + "type": "COMBO", + "widget": { "name": "working_device" }, + "link": null + }, + { + "localized_name": "working_dtype", + "name": "working_dtype", + "type": "COMBO", + "widget": { "name": "working_dtype" }, + "link": null + }, + { "name": "samples", "type": "LATENT", "link": 56 } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [60] + } + ], + "title": "Decode Video (Tiled)", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVSpatioTemporalTiledVAEDecode" + }, + "widgets_values": [6, 4, 16, 4, false, "auto", "auto"] + }, + { + "id": 70, + "type": "LTXVSeparateAVLatent", + "pos": [3600, 400], + "size": [233.33333333333348, 46], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "localized_name": "av_latent", + "name": "av_latent", + "type": "LATENT", + "link": 55 + } + ], + "outputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "slot_index": 0, + "links": [56] + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "slot_index": 1, + "links": [58] + } + ], + "title": "Split Final AV", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [] + }, + { + "id": 64, + "type": "LTXVLoopingSampler", + "pos": [3073.801984050594, 392.75591789764337], + "size": [400, 580], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 47 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 48 }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 49 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 50 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 51 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 52 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 53 + }, + { + "localized_name": "optional_cond_images", + "name": "optional_cond_images", + "shape": 7, + "type": "IMAGE", + "link": 54 + }, + { + "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": null + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "optional_normalizing_latents", + "name": "optional_normalizing_latents", + "shape": 7, + "type": "LATENT", + "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": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { "name": "guiding_strength" }, + "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": "cond_image_strength", + "name": "cond_image_strength", + "type": "FLOAT", + "widget": { "name": "cond_image_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": "guiding_start_step", + "name": "guiding_start_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_start_step" }, + "link": null + }, + { + "localized_name": "guiding_end_step", + "name": "guiding_end_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_end_step" }, + "link": null + }, + { + "localized_name": "optional_cond_image_indices", + "name": "optional_cond_image_indices", + "shape": 7, + "type": "STRING", + "widget": { "name": "optional_cond_image_indices" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "slot_index": 0, + "links": [55] + } + ], + "title": "Stage 2 — Refine", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [128, 24, 1, 0.5, 1, 2, 1, 1, 0, 0, 1000, "0"], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 53, + "type": "LTXVConcatAVLatent", + "pos": [2807.97697623735, 524.995187859747], + "size": [190.80550053502748, 46], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "link": 42 + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "link": 43 + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [53] + } + ], + "title": "Stage 2 AV Concat", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVConcatAVLatent" + }, + "widgets_values": [], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 51, + "type": "LTXVLatentUpsampler", + "pos": [2494.204734318114, 557.0100775530725], + "size": [249.9123466065612, 66], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 35 + }, + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "LATENT_UPSCALE_MODEL", + "link": 36 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 37 } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [40] + } + ], + "title": "Spatial Upscale 2x", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVLatentUpsampler" + }, + "widgets_values": [] + }, + { + "id": 50, + "type": "LTXVSeparateAVLatent", + "pos": [2429.214969171252, 400.10348688717687], + "size": [172.5918083919587, 46], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "localized_name": "av_latent", + "name": "av_latent", + "type": "LATENT", + "link": 34 + } + ], + "outputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "slot_index": 0, + "links": [35] + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "slot_index": 1, + "links": [43] + } + ], + "title": "Split Stage 1 AV", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [] + }, + { + "id": 33, + "type": "LTXVConcatAVLatent", + "pos": [1435.7500155700718, 795.296050582885], + "size": [174.92496730284756, 46], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "link": 18 + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "link": 19 + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [31] + } + ], + "title": "Stage 1 AV Concat", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVConcatAVLatent" + }, + "widgets_values": [], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 35, + "type": "VAEEncode", + "pos": [1383.3333333333328, 1164.9999999999995], + "size": [206.36665954589844, 46], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "localized_name": "pixels", + "name": "pixels", + "type": "IMAGE", + "link": 20 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 21 } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [33] + } + ], + "title": "Encode Reference Latent", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 32, + "type": "LTXVImgToVideoConditionOnly", + "pos": [1399.999999999999, 604.9999999999992], + "size": [210, 122], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 14 }, + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 15 + }, + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "link": 16 + }, + { + "localized_name": "strength", + "name": "strength", + "type": "FLOAT", + "widget": { "name": "strength" }, + "link": null + }, + { + "localized_name": "bypass", + "name": "bypass", + "shape": 7, + "type": "BOOLEAN", + "widget": { "name": "bypass" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [18] + } + ], + "title": "Stage 1 I2V Cond", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVImgToVideoConditionOnly" + }, + "widgets_values": [0.7, false], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 52, + "type": "LTXVImgToVideoConditionOnly", + "pos": [2492.238483461759, 791.1178860526603], + "size": [210, 122], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 38 }, + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 39 + }, + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "link": 40 + }, + { + "localized_name": "strength", + "name": "strength", + "type": "FLOAT", + "widget": { "name": "strength" }, + "link": null + }, + { + "localized_name": "bypass", + "name": "bypass", + "shape": 7, + "type": "BOOLEAN", + "widget": { "name": "bypass" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [42] + } + ], + "title": "Stage 2 I2V Cond", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVImgToVideoConditionOnly" + }, + "widgets_values": [1, false], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 6, + "type": "Note", + "pos": [281.1738724586202, 1016.7247228103745], + "size": [631.0862190651818, 273.1698654463494], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { "Node name for S&R": "Note" }, + "widgets_values": [ + "## Guiding Image Indices\n\nSet `optional_cond_image_indices` on the Stage 1 Looping Sampler.\nDefault: \"0\" (reference image at first frame only).\n\nFor multi-tile conditioning, set indices at tile boundaries.\nWith tile_size=128, overlap=24, new content starts every 104 frames:\n \"0, 104, 208\" for a 241-frame (3-tile) clip.\n\nThe number of images in the guiding batch must match the indices.\nUse LatentBatch or ImageBatch to provide multiple images.\nBy default, a single reference image at index 0 is used." + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [1, 1, 0, 2, 0, "IMAGE"], + [2, 10, 0, 13, 0, "MODEL"], + [3, 11, 0, 20, 0, "CLIP"], + [4, 11, 0, 21, 0, "CLIP"], + [5, 20, 0, 22, 0, "CONDITIONING"], + [6, 21, 0, 22, 1, "CONDITIONING"], + [7, 4, 0, 22, 2, "FLOAT"], + [8, 1, 0, 23, 0, "IMAGE"], + [9, 3, 0, 30, 2, "INT"], + [10, 12, 0, 31, 0, "VAE"], + [11, 3, 0, 31, 1, "INT"], + [14, 10, 2, 32, 0, "VAE"], + [15, 2, 0, 32, 1, "IMAGE"], + [16, 30, 0, 32, 2, "LATENT"], + [18, 32, 0, 33, 0, "LATENT"], + [19, 31, 0, 33, 1, "LATENT"], + [20, 2, 0, 35, 0, "IMAGE"], + [21, 10, 2, 35, 1, "VAE"], + [22, 13, 0, 43, 0, "MODEL"], + [23, 22, 0, 43, 1, "CONDITIONING"], + [24, 22, 1, 43, 2, "CONDITIONING"], + [25, 13, 0, 44, 0, "MODEL"], + [26, 10, 2, 44, 1, "VAE"], + [27, 40, 0, 44, 2, "NOISE"], + [28, 41, 0, 44, 3, "SAMPLER"], + [29, 42, 0, 44, 4, "SIGMAS"], + [30, 43, 0, 44, 5, "GUIDER"], + [31, 33, 0, 44, 6, "LATENT"], + [32, 2, 0, 44, 7, "IMAGE"], + [33, 35, 0, 44, 10, "LATENT"], + [34, 44, 0, 50, 0, "LATENT"], + [35, 50, 0, 51, 0, "LATENT"], + [36, 14, 0, 51, 1, "LATENT_UPSCALE_MODEL"], + [37, 10, 2, 51, 2, "VAE"], + [38, 10, 2, 52, 0, "VAE"], + [39, 23, 0, 52, 1, "IMAGE"], + [40, 51, 0, 52, 2, "LATENT"], + [42, 52, 0, 53, 0, "LATENT"], + [43, 50, 1, 53, 1, "LATENT"], + [44, 13, 0, 63, 0, "MODEL"], + [45, 22, 0, 63, 1, "CONDITIONING"], + [46, 22, 1, 63, 2, "CONDITIONING"], + [47, 13, 0, 64, 0, "MODEL"], + [48, 10, 2, 64, 1, "VAE"], + [49, 60, 0, 64, 2, "NOISE"], + [50, 61, 0, 64, 3, "SAMPLER"], + [51, 62, 0, 64, 4, "SIGMAS"], + [52, 63, 0, 64, 5, "GUIDER"], + [53, 53, 0, 64, 6, "LATENT"], + [54, 23, 0, 64, 7, "IMAGE"], + [55, 64, 0, 70, 0, "LATENT"], + [56, 70, 0, 71, 9, "LATENT"], + [57, 10, 2, 71, 0, "VAE"], + [58, 70, 1, 72, 0, "LATENT"], + [59, 12, 0, 72, 1, "VAE"], + [60, 71, 0, 73, 0, "IMAGE"], + [61, 72, 0, 73, 1, "AUDIO"], + [62, 4, 0, 73, 2, "FLOAT"], + [63, 73, 0, 74, 0, "VIDEO"], + [64, 4, 0, 75, 0, "FLOAT"], + [65, 75, 0, 31, 2, "INT"] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.878460000000002, + "offset": [-147.93391628437732, 99.35113851569274] + }, + "info": { + "name": "LTX-2.3 Two-Pass I2V Looping", + "description": "Two-pass I2V workflow for arbitrary-length video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Soft guiding images at tile boundaries maintain subject continuity." + } + }, + "version": 0.4 +} diff --git a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json index fb2edc7..551d47b 100644 --- a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping_30s.json @@ -1 +1,2170 @@ -{"id":"6442f6ec-19f9-4ded-93a2-00c286be6dab","revision":0,"last_node_id":82,"last_link_id":72,"nodes":[{"id":1,"type":"LoadImage","pos":[0,0],"size":[300,300],"flags":{},"order":0,"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","slot_index":0,"links":[1,8]},{"localized_name":"MASK","name":"MASK","type":"MASK","slot_index":1,"links":[]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoadImage"},"widgets_values":["reference_image.png","image"]},{"id":3,"type":"PrimitiveInt","pos":[0,800],"size":[210,100],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"INT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"INT","name":"INT","type":"INT","slot_index":0,"links":[9,11]}],"title":"Frame Count","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveInt"},"widgets_values":[713,"fixed"]},{"id":20,"type":"CLIPTextEncode","pos":[900,0],"size":[400,180],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":3},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[5]}],"title":"Positive Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["A beautiful woman in a flowing dress walks through a sunlit garden on a warm summer day. Soft natural lighting, cinematic composition, gentle breeze."]},{"id":21,"type":"CLIPTextEncode","pos":[900,220],"size":[400,120],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":4},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","slot_index":0,"links":[6]}],"title":"Negative Prompt","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CLIPTextEncode"},"widgets_values":["pc game, console game, video game, cartoon, childish, ugly, blurry"]},{"id":40,"type":"RandomNoise","pos":[1950,-80],"size":[210,100],"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","slot_index":0,"links":[27]}],"title":"Stage 1 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[42,"fixed"]},{"id":41,"type":"KSamplerSelect","pos":[1950,40],"size":[250,80],"flags":{},"order":3,"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","slot_index":0,"links":[28]}],"title":"Stage 1 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_ancestral_cfg_pp"]},{"id":42,"type":"ManualSigmas","pos":[1950,140],"size":[350,80],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[29]}],"title":"Stage 1 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0"]},{"id":44,"type":"LTXVLoopingSampler","pos":[1950,400],"size":[400,580],"flags":{},"order":28,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":25},{"localized_name":"vae","name":"vae","type":"VAE","link":26},{"localized_name":"noise","name":"noise","type":"NOISE","link":27},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":28},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":29},{"localized_name":"guider","name":"guider","type":"GUIDER","link":30},{"localized_name":"latents","name":"latents","type":"LATENT","link":31},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":67},{"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":71},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":33},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[34]}],"title":"Stage 1 \u2014 Generate","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[264,24,1,0.5,1,1,1,1,0.15,0,1000,"0, 240, 480"],"color":"#335533","bgcolor":"#223322"},{"id":4,"type":"PrimitiveFloat","pos":[0,930],"size":[210,100],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"value","name":"value","type":"FLOAT","widget":{"name":"value"},"link":null}],"outputs":[{"localized_name":"FLOAT","name":"FLOAT","type":"FLOAT","slot_index":0,"links":[7,62,64]}],"title":"Frame Rate","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"PrimitiveFloat"},"widgets_values":[24]},{"id":75,"type":"FloatToInt","pos":[991.6666666666669,928.3333333333287],"size":[270,82],"flags":{"collapsed":true},"order":17,"mode":0,"inputs":[{"localized_name":"float_value","name":"float_value","type":"FLOAT","widget":{"name":"float_value"},"link":64},{"localized_name":"rounding_mode","name":"rounding_mode","type":"COMBO","widget":{"name":"rounding_mode"},"link":null}],"outputs":[{"localized_name":"int_value","name":"int_value","type":"INT","links":[65]}],"properties":{"aux_id":"danTheMonk/comfyui-int-and-float","ver":"a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720","Node name for S&R":"FloatToInt"},"widgets_values":[0,"down (floor)"]},{"id":2,"type":"LTXVPreprocess","pos":[11.666666666666666,355.00000000000017],"size":[220,58],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":1},{"localized_name":"img_compression","name":"img_compression","type":"INT","widget":{"name":"img_compression"},"link":null}],"outputs":[{"localized_name":"output_image","name":"output_image","type":"IMAGE","slot_index":0,"links":[15,20,66]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVPreprocess"},"widgets_values":[18]},{"id":23,"type":"ResizeImageMaskNode","pos":[8.333333333333284,505.00000000000085],"size":[300,106],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"input","name":"input","type":"IMAGE,MASK","link":8},{"localized_name":"resize_type","name":"resize_type","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"resize_type"},"link":null},{"localized_name":"resize_type.longer_size","name":"resize_type.longer_size","type":"INT","widget":{"name":"resize_type.longer_size"},"link":null},{"localized_name":"scale_method","name":"scale_method","type":"COMBO","widget":{"name":"scale_method"},"link":null}],"outputs":[{"localized_name":"resized","name":"resized","type":"IMAGE","slot_index":0,"links":[39,68]}],"title":"Resize Reference","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ResizeImageMaskNode"},"widgets_values":["scale longer dimension",1536,"lanczos"]},{"id":14,"type":"LatentUpscaleModelLoader","pos":[452.82236965026885,683.519747085575],"size":[376.2368404663082,58],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"model_name","name":"model_name","type":"COMBO","widget":{"name":"model_name"},"link":null}],"outputs":[{"localized_name":"LATENT_UPSCALE_MODEL","name":"LATENT_UPSCALE_MODEL","type":"LATENT_UPSCALE_MODEL","slot_index":0,"links":[36]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LatentUpscaleModelLoader"},"widgets_values":["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"]},{"id":13,"type":"LoraLoaderModelOnly","pos":[451.8815797668459,542.2302684844991],"size":[373.4144708160393,82],"flags":{},"order":20,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":2},{"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","slot_index":0,"links":[22,25,44,47]}],"title":"Distilled LoRA (both stages)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LoraLoaderModelOnly"},"widgets_values":["LTX/ltx-2.3-22b-distilled-lora-384.safetensors",0.5]},{"id":12,"type":"LTXVAudioVAELoader","pos":[450,400],"size":[369.75658755188215,58],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"Audio VAE","name":"Audio VAE","type":"VAE","slot_index":0,"links":[10,59]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAELoader"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":11,"type":"LTXAVTextEncoderLoader","pos":[448.1184202331541,213.86843580322656],"size":[373.41447081603906,106],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"text_encoder","name":"text_encoder","type":"COMBO","widget":{"name":"text_encoder"},"link":null},{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null},{"localized_name":"device","name":"device","type":"COMBO","widget":{"name":"device"},"link":null}],"outputs":[{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":0,"links":[3,4,70]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXAVTextEncoderLoader"},"widgets_values":["gemma_3_12B_it.safetensors","ltx-2.3-22b-dev.safetensors","default"]},{"id":10,"type":"CheckpointLoaderSimple","pos":[445.29605058288524,31.046066152957746],"size":[371.63816731872794,98],"flags":{},"order":9,"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":[2]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[]},{"localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[14,21,26,37,38,48,57]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["ltx-2.3-22b-dev.safetensors"]},{"id":22,"type":"LTXVConditioning","pos":[999.7237276428352,409.4078988342295],"size":[210,78],"flags":{},"order":24,"mode":0,"inputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":5},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":6},{"localized_name":"frame_rate","name":"frame_rate","type":"FLOAT","widget":{"name":"frame_rate"},"link":7}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","slot_index":0,"links":[23,45]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","slot_index":1,"links":[24,46]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConditioning"},"widgets_values":[24]},{"id":31,"type":"LTXVEmptyLatentAudio","pos":[1400.940789883423,211.9868560363806],"size":[252.82236965026914,106],"flags":{},"order":23,"mode":0,"inputs":[{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":10},{"localized_name":"frames_number","name":"frames_number","type":"INT","widget":{"name":"frames_number"},"link":11},{"localized_name":"frame_rate","name":"frame_rate","type":"INT","widget":{"name":"frame_rate"},"link":65},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"Latent","name":"Latent","type":"LATENT","slot_index":0,"links":[19]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVEmptyLatentAudio"},"widgets_values":[97,25,1]},{"id":30,"type":"EmptyLTXVLatentVideo","pos":[1400,0],"size":[252.82236965026868,130],"flags":{},"order":16,"mode":0,"inputs":[{"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":"length","name":"length","type":"INT","widget":{"name":"length"},"link":9},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[16]}],"title":"Stage 1 Empty Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"EmptyLTXVLatentVideo"},"widgets_values":[960,544,713,1]},{"id":43,"type":"CFGGuider","pos":[1960.3486887176518,256.9342179016131],"size":[250,98],"flags":{},"order":26,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":22},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":23},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":24},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[30]}],"title":"Stage 1 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#335533","bgcolor":"#223322"},{"id":63,"type":"CFGGuider","pos":[2563.9220909318396,255.9369806251849],"size":[235.2013751337572,98],"flags":{},"order":27,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":44},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":45},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":46},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null}],"outputs":[{"localized_name":"GUIDER","name":"GUIDER","type":"GUIDER","slot_index":0,"links":[52]}],"title":"Stage 2 Guider","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CFGGuider"},"widgets_values":[1],"color":"#333355","bgcolor":"#222233"},{"id":62,"type":"ManualSigmas","pos":[3047.723288482116,178.70409580402023],"size":[277.23288482116413,58],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"sigmas","name":"sigmas","type":"STRING","widget":{"name":"sigmas"},"link":null}],"outputs":[{"localized_name":"SIGMAS","name":"SIGMAS","type":"SIGMAS","slot_index":0,"links":[51]}],"title":"Stage 2 Sigmas","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"ManualSigmas"},"widgets_values":["0.85, 0.7250, 0.4219, 0.0"]},{"id":61,"type":"KSamplerSelect","pos":[3050,69.5972497324864],"size":[250,58],"flags":{},"order":11,"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","slot_index":0,"links":[50]}],"title":"Stage 2 Sampler","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"KSamplerSelect"},"widgets_values":["euler_cfg_pp"]},{"id":60,"type":"RandomNoise","pos":[3050,-80],"size":[210,82],"flags":{},"order":12,"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":[49]}],"title":"Stage 2 Noise","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RandomNoise"},"widgets_values":[43,"fixed"]},{"id":74,"type":"SaveVideo","pos":[3975.7575757575723,1040.9090909090924],"size":[250,106],"flags":{},"order":38,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":63},{"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":"codec","name":"codec","type":"COMBO","widget":{"name":"codec"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"SaveVideo"},"widgets_values":["LTX-2.3/Looping","auto","auto"]},{"id":73,"type":"CreateVideo","pos":[3649.9999999999995,1049.9999999999995],"size":[243.939393939394,78],"flags":{},"order":37,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":60},{"localized_name":"audio","name":"audio","shape":7,"type":"AUDIO","link":61},{"localized_name":"fps","name":"fps","type":"FLOAT","widget":{"name":"fps"},"link":62}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","slot_index":0,"links":[63]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"CreateVideo"},"widgets_values":[30]},{"id":72,"type":"LTXVAudioVAEDecode","pos":[3643.9393939393935,899.3939393939382],"size":[203.00000610351563,46],"flags":{},"order":36,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":58},{"localized_name":"audio_vae","name":"audio_vae","type":"VAE","link":59}],"outputs":[{"localized_name":"Audio","name":"Audio","type":"AUDIO","slot_index":0,"links":[61]}],"properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVAudioVAEDecode"},"widgets_values":[]},{"id":71,"type":"LTXVSpatioTemporalTiledVAEDecode","pos":[3615.151515151515,569.393939393939],"size":[350,242],"flags":{},"order":35,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":57},{"localized_name":"latents","name":"latents","type":"LATENT","link":null},{"localized_name":"spatial_tiles","name":"spatial_tiles","type":"INT","widget":{"name":"spatial_tiles"},"link":null},{"localized_name":"spatial_overlap","name":"spatial_overlap","type":"INT","widget":{"name":"spatial_overlap"},"link":null},{"localized_name":"temporal_tile_length","name":"temporal_tile_length","type":"INT","widget":{"name":"temporal_tile_length"},"link":null},{"localized_name":"temporal_overlap","name":"temporal_overlap","type":"INT","widget":{"name":"temporal_overlap"},"link":null},{"localized_name":"last_frame_fix","name":"last_frame_fix","type":"BOOLEAN","widget":{"name":"last_frame_fix"},"link":null},{"localized_name":"working_device","name":"working_device","type":"COMBO","widget":{"name":"working_device"},"link":null},{"localized_name":"working_dtype","name":"working_dtype","type":"COMBO","widget":{"name":"working_dtype"},"link":null},{"name":"samples","type":"LATENT","link":56}],"outputs":[{"localized_name":"image","name":"image","type":"IMAGE","slot_index":0,"links":[60]}],"title":"Decode Video (Tiled)","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVSpatioTemporalTiledVAEDecode"},"widgets_values":[6,4,16,4,false,"auto","auto"]},{"id":70,"type":"LTXVSeparateAVLatent","pos":[3600,400],"size":[233.33333333333348,46],"flags":{},"order":34,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":55}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[56]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[58]}],"title":"Split Final AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":64,"type":"LTXVLoopingSampler","pos":[3073.801984050594,392.75591789764337],"size":[400,580],"flags":{},"order":33,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":47},{"localized_name":"vae","name":"vae","type":"VAE","link":48},{"localized_name":"noise","name":"noise","type":"NOISE","link":49},{"localized_name":"sampler","name":"sampler","type":"SAMPLER","link":50},{"localized_name":"sigmas","name":"sigmas","type":"SIGMAS","link":51},{"localized_name":"guider","name":"guider","type":"GUIDER","link":52},{"localized_name":"latents","name":"latents","type":"LATENT","link":53},{"localized_name":"optional_cond_images","name":"optional_cond_images","shape":7,"type":"IMAGE","link":69},{"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":72},{"localized_name":"optional_negative_index_latents","name":"optional_negative_index_latents","shape":7,"type":"LATENT","link":null},{"localized_name":"optional_normalizing_latents","name":"optional_normalizing_latents","shape":7,"type":"LATENT","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":"guiding_strength","name":"guiding_strength","type":"FLOAT","widget":{"name":"guiding_strength"},"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":"cond_image_strength","name":"cond_image_strength","type":"FLOAT","widget":{"name":"cond_image_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":"guiding_start_step","name":"guiding_start_step","shape":7,"type":"INT","widget":{"name":"guiding_start_step"},"link":null},{"localized_name":"guiding_end_step","name":"guiding_end_step","shape":7,"type":"INT","widget":{"name":"guiding_end_step"},"link":null},{"localized_name":"optional_cond_image_indices","name":"optional_cond_image_indices","shape":7,"type":"STRING","widget":{"name":"optional_cond_image_indices"},"link":null}],"outputs":[{"localized_name":"denoised_output","name":"denoised_output","type":"LATENT","slot_index":0,"links":[55]}],"title":"Stage 2 \u2014 Refine","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVLoopingSampler"},"widgets_values":[264,24,1,0.5,1,2,1,1,0,0,1000,"0, 240, 480"],"color":"#333355","bgcolor":"#222233"},{"id":53,"type":"LTXVConcatAVLatent","pos":[2807.97697623735,524.995187859747],"size":[190.80550053502748,46],"flags":{},"order":32,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":42},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":43}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[53]}],"title":"Stage 2 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#333355","bgcolor":"#222233"},{"id":51,"type":"LTXVLatentUpsampler","pos":[2494.204734318114,557.0100775530725],"size":[249.9123466065612,66],"flags":{},"order":30,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":35},{"localized_name":"upscale_model","name":"upscale_model","type":"LATENT_UPSCALE_MODEL","link":36},{"localized_name":"vae","name":"vae","type":"VAE","link":37}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[40]}],"title":"Spatial Upscale 2x","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVLatentUpsampler"},"widgets_values":[]},{"id":50,"type":"LTXVSeparateAVLatent","pos":[2429.214969171252,400.10348688717687],"size":[172.5918083919587,46],"flags":{},"order":29,"mode":0,"inputs":[{"localized_name":"av_latent","name":"av_latent","type":"LATENT","link":34}],"outputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","slot_index":0,"links":[35]},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","slot_index":1,"links":[43]}],"title":"Split Stage 1 AV","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVSeparateAVLatent"},"widgets_values":[]},{"id":33,"type":"LTXVConcatAVLatent","pos":[1435.7500155700718,795.296050582885],"size":[174.92496730284756,46],"flags":{},"order":25,"mode":0,"inputs":[{"localized_name":"video_latent","name":"video_latent","type":"LATENT","link":18},{"localized_name":"audio_latent","name":"audio_latent","type":"LATENT","link":19}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[31]}],"title":"Stage 1 AV Concat","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"LTXVConcatAVLatent"},"widgets_values":[],"color":"#335533","bgcolor":"#223322"},{"id":35,"type":"VAEEncode","pos":[1383.3333333333328,1164.9999999999995],"size":[206.36665954589844,46],"flags":{},"order":21,"mode":0,"inputs":[{"localized_name":"pixels","name":"pixels","type":"IMAGE","link":20},{"localized_name":"vae","name":"vae","type":"VAE","link":21}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[33]}],"title":"Encode Reference Latent","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"VAEEncode"},"widgets_values":[]},{"id":32,"type":"LTXVImgToVideoConditionOnly","pos":[1399.999999999999,604.9999999999992],"size":[210,122],"flags":{},"order":22,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":14},{"localized_name":"image","name":"image","type":"IMAGE","link":15},{"localized_name":"latent","name":"latent","type":"LATENT","link":16},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[18]}],"title":"Stage 1 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[0.7,false],"color":"#335533","bgcolor":"#223322"},{"id":52,"type":"LTXVImgToVideoConditionOnly","pos":[2492.238483461759,791.1178860526603],"size":[210,122],"flags":{},"order":31,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","type":"VAE","link":38},{"localized_name":"image","name":"image","type":"IMAGE","link":39},{"localized_name":"latent","name":"latent","type":"LATENT","link":40},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"bypass","name":"bypass","shape":7,"type":"BOOLEAN","widget":{"name":"bypass"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","slot_index":0,"links":[42]}],"title":"Stage 2 I2V Cond","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"LTXVImgToVideoConditionOnly"},"widgets_values":[1,false],"color":"#333355","bgcolor":"#222233"},{"id":6,"type":"Note","pos":[281.1738724586202,1016.7247228103745],"size":[631.0862190651818,273.1698654463494],"flags":{},"order":13,"mode":0,"inputs":[],"outputs":[],"properties":{"Node name for S&R":"Note"},"widgets_values":["## Three 10-Second Tiles \u2014 30s Video\n\n**Frame count:** 713 (29.7s at 24fps)\n**Tile size:** 264 (10.7s context per tile), Overlap: 24 (1s)\n**Tiles:** 3 temporal tiles, each ~10 seconds\n\n### Tile Prompts (MultiPromptProvider)\nPipe-separated prompts, one per tile. Edit to change per-tile narration.\nIf fewer prompts than tiles, the last prompt is reused.\n\n### Guiding Images\nThe reference image is repeated 3x and placed at tile boundaries:\n indices \"0, 240, 480\" \u2014 start of each tile in pixel frames.\nThis anchors subject identity across tile transitions.\n\n### Conditioning Image Indices\nIndices must be divisible by 8 (except 0).\nWith tile_size=264, overlap=24, pixel-space tile starts are:\n Tile 0: frame 0, Tile 1: frame 240, Tile 2: frame 480."],"color":"#432","bgcolor":"#653"},{"id":80,"type":"RepeatImageBatch","pos":[11,430],"size":[220,58],"flags":{},"order":15,"mode":0,"inputs":[{"name":"image","type":"IMAGE","link":66},{"name":"amount","type":"INT","widget":{"name":"amount"},"link":null}],"outputs":[{"name":"IMAGE","type":"IMAGE","slot_index":0,"links":[67]}],"title":"Repeat Ref Image (3x)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RepeatImageBatch"},"widgets_values":[3]},{"id":81,"type":"RepeatImageBatch","pos":[11,650],"size":[220,58],"flags":{},"order":16,"mode":0,"inputs":[{"name":"image","type":"IMAGE","link":68},{"name":"amount","type":"INT","widget":{"name":"amount"},"link":null}],"outputs":[{"name":"IMAGE","type":"IMAGE","slot_index":0,"links":[69]}],"title":"Repeat Resized Ref (3x)","properties":{"cnr_id":"comfy-core","ver":"0.18.5","Node name for S&R":"RepeatImageBatch"},"widgets_values":[3]},{"id":82,"type":"MultiPromptProvider","pos":[900,440],"size":[400,220],"flags":{},"order":20,"mode":0,"inputs":[{"name":"prompts","type":"STRING","widget":{"name":"prompts"},"link":null},{"name":"clip","type":"CLIP","link":70}],"outputs":[{"name":"conditionings","type":"CONDITIONING","slot_index":0,"links":[71,72]}],"title":"Per-Tile Prompts (3 tiles)","properties":{"cnr_id":"ComfyUI-LTXVideo","ver":"531512f7286963dc7aff1fd8bf5556e95eae03af","Node name for S&R":"MultiPromptProvider"},"widgets_values":["A woman walks through a sunlit garden, birds singing overhead. She smiles as petals fall gently around her. | She pauses by a fountain, trailing her fingers through the water. The camera slowly orbits around her as light plays on the surface. | She walks along a tree-lined path toward a distant gate. Leaves drift in the warm breeze as she disappears into golden light."]}],"links":[[1,1,0,2,0,"IMAGE"],[2,10,0,13,0,"MODEL"],[3,11,0,20,0,"CLIP"],[4,11,0,21,0,"CLIP"],[5,20,0,22,0,"CONDITIONING"],[6,21,0,22,1,"CONDITIONING"],[7,4,0,22,2,"FLOAT"],[8,1,0,23,0,"IMAGE"],[9,3,0,30,2,"INT"],[10,12,0,31,0,"VAE"],[11,3,0,31,1,"INT"],[14,10,2,32,0,"VAE"],[15,2,0,32,1,"IMAGE"],[16,30,0,32,2,"LATENT"],[18,32,0,33,0,"LATENT"],[19,31,0,33,1,"LATENT"],[20,2,0,35,0,"IMAGE"],[21,10,2,35,1,"VAE"],[22,13,0,43,0,"MODEL"],[23,22,0,43,1,"CONDITIONING"],[24,22,1,43,2,"CONDITIONING"],[25,13,0,44,0,"MODEL"],[26,10,2,44,1,"VAE"],[27,40,0,44,2,"NOISE"],[28,41,0,44,3,"SAMPLER"],[29,42,0,44,4,"SIGMAS"],[30,43,0,44,5,"GUIDER"],[31,33,0,44,6,"LATENT"],[33,35,0,44,10,"LATENT"],[34,44,0,50,0,"LATENT"],[35,50,0,51,0,"LATENT"],[36,14,0,51,1,"LATENT_UPSCALE_MODEL"],[37,10,2,51,2,"VAE"],[38,10,2,52,0,"VAE"],[39,23,0,52,1,"IMAGE"],[40,51,0,52,2,"LATENT"],[42,52,0,53,0,"LATENT"],[43,50,1,53,1,"LATENT"],[44,13,0,63,0,"MODEL"],[45,22,0,63,1,"CONDITIONING"],[46,22,1,63,2,"CONDITIONING"],[47,13,0,64,0,"MODEL"],[48,10,2,64,1,"VAE"],[49,60,0,64,2,"NOISE"],[50,61,0,64,3,"SAMPLER"],[51,62,0,64,4,"SIGMAS"],[52,63,0,64,5,"GUIDER"],[53,53,0,64,6,"LATENT"],[55,64,0,70,0,"LATENT"],[56,70,0,71,9,"LATENT"],[57,10,2,71,0,"VAE"],[58,70,1,72,0,"LATENT"],[59,12,0,72,1,"VAE"],[60,71,0,73,0,"IMAGE"],[61,72,0,73,1,"AUDIO"],[62,4,0,73,2,"FLOAT"],[63,73,0,74,0,"VIDEO"],[64,4,0,75,0,"FLOAT"],[65,75,0,31,2,"INT"],[66,2,0,80,0,"IMAGE"],[67,80,0,44,7,"IMAGE"],[68,23,0,81,0,"IMAGE"],[69,81,0,64,7,"IMAGE"],[70,11,0,82,1,"CLIP"],[71,82,0,44,9,"CONDITIONING"],[72,82,0,64,9,"CONDITIONING"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.878460000000002,"offset":[-147.93391628437732,99.35113851569274]},"info":{"name":"LTX-2.3 Two-Pass I2V Looping","description":"Two-pass I2V workflow for arbitrary-length video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Soft guiding images at tile boundaries maintain subject continuity."}},"version":0.4} \ No newline at end of file +{ + "id": "6442f6ec-19f9-4ded-93a2-00c286be6dab", + "revision": 0, + "last_node_id": 82, + "last_link_id": 72, + "nodes": [ + { + "id": 1, + "type": "LoadImage", + "pos": [0, 0], + "size": [300, 300], + "flags": {}, + "order": 0, + "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", + "slot_index": 0, + "links": [1, 8] + }, + { + "localized_name": "MASK", + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LoadImage" + }, + "widgets_values": ["reference_image.png", "image"] + }, + { + "id": 3, + "type": "PrimitiveInt", + "pos": [0, 800], + "size": [210, 100], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { "name": "value" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [9, 11] + } + ], + "title": "Frame Count", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [713, "fixed"] + }, + { + "id": 20, + "type": "CLIPTextEncode", + "pos": [900, 0], + "size": [400, 180], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 3 }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { "name": "text" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [5] + } + ], + "title": "Positive Prompt", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "A beautiful woman in a flowing dress walks through a sunlit garden on a warm summer day. Soft natural lighting, cinematic composition, gentle breeze." + ] + }, + { + "id": 21, + "type": "CLIPTextEncode", + "pos": [900, 220], + "size": [400, 120], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 4 }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { "name": "text" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [6] + } + ], + "title": "Negative Prompt", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "pc game, console game, video game, cartoon, childish, ugly, blurry" + ] + }, + { + "id": 40, + "type": "RandomNoise", + "pos": [1950, -80], + "size": [210, 100], + "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", + "slot_index": 0, + "links": [27] + } + ], + "title": "Stage 1 Noise", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [42, "fixed"] + }, + { + "id": 41, + "type": "KSamplerSelect", + "pos": [1950, 40], + "size": [250, 80], + "flags": {}, + "order": 3, + "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", + "slot_index": 0, + "links": [28] + } + ], + "title": "Stage 1 Sampler", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": ["euler_ancestral_cfg_pp"] + }, + { + "id": 42, + "type": "ManualSigmas", + "pos": [1950, 140], + "size": [350, 80], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { "name": "sigmas" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, + "links": [29] + } + ], + "title": "Stage 1 Sigmas", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "ManualSigmas" + }, + "widgets_values": [ + "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0" + ] + }, + { + "id": 44, + "type": "LTXVLoopingSampler", + "pos": [1950, 400], + "size": [400, 580], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 25 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 26 }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 27 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 28 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 29 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 30 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 31 + }, + { + "localized_name": "optional_cond_images", + "name": "optional_cond_images", + "shape": 7, + "type": "IMAGE", + "link": 67 + }, + { + "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": 71 + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": 33 + }, + { + "localized_name": "optional_normalizing_latents", + "name": "optional_normalizing_latents", + "shape": 7, + "type": "LATENT", + "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": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { "name": "guiding_strength" }, + "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": "cond_image_strength", + "name": "cond_image_strength", + "type": "FLOAT", + "widget": { "name": "cond_image_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": "guiding_start_step", + "name": "guiding_start_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_start_step" }, + "link": null + }, + { + "localized_name": "guiding_end_step", + "name": "guiding_end_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_end_step" }, + "link": null + }, + { + "localized_name": "optional_cond_image_indices", + "name": "optional_cond_image_indices", + "shape": 7, + "type": "STRING", + "widget": { "name": "optional_cond_image_indices" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "slot_index": 0, + "links": [34] + } + ], + "title": "Stage 1 \u2014 Generate", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 264, + 24, + 1, + 0.5, + 1, + 1, + 1, + 1, + 0.15, + 0, + 1000, + "0, 240, 480" + ], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 4, + "type": "PrimitiveFloat", + "pos": [0, 930], + "size": [210, 100], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "FLOAT", + "widget": { "name": "value" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [7, 62, 64] + } + ], + "title": "Frame Rate", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "PrimitiveFloat" + }, + "widgets_values": [24] + }, + { + "id": 75, + "type": "FloatToInt", + "pos": [991.6666666666669, 928.3333333333287], + "size": [270, 82], + "flags": { "collapsed": true }, + "order": 17, + "mode": 0, + "inputs": [ + { + "localized_name": "float_value", + "name": "float_value", + "type": "FLOAT", + "widget": { "name": "float_value" }, + "link": 64 + }, + { + "localized_name": "rounding_mode", + "name": "rounding_mode", + "type": "COMBO", + "widget": { "name": "rounding_mode" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "int_value", + "name": "int_value", + "type": "INT", + "links": [65] + } + ], + "properties": { + "aux_id": "danTheMonk/comfyui-int-and-float", + "ver": "a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720", + "Node name for S&R": "FloatToInt" + }, + "widgets_values": [0, "down (floor)"] + }, + { + "id": 2, + "type": "LTXVPreprocess", + "pos": [11.666666666666666, 355.00000000000017], + "size": [220, 58], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 1 + }, + { + "localized_name": "img_compression", + "name": "img_compression", + "type": "INT", + "widget": { "name": "img_compression" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "output_image", + "name": "output_image", + "type": "IMAGE", + "slot_index": 0, + "links": [15, 20, 66] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVPreprocess" + }, + "widgets_values": [18] + }, + { + "id": 23, + "type": "ResizeImageMaskNode", + "pos": [8.333333333333284, 505.00000000000085], + "size": [300, 106], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "localized_name": "input", + "name": "input", + "type": "IMAGE,MASK", + "link": 8 + }, + { + "localized_name": "resize_type", + "name": "resize_type", + "type": "COMFY_DYNAMICCOMBO_V3", + "widget": { "name": "resize_type" }, + "link": null + }, + { + "localized_name": "resize_type.longer_size", + "name": "resize_type.longer_size", + "type": "INT", + "widget": { "name": "resize_type.longer_size" }, + "link": null + }, + { + "localized_name": "scale_method", + "name": "scale_method", + "type": "COMBO", + "widget": { "name": "scale_method" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "resized", + "name": "resized", + "type": "IMAGE", + "slot_index": 0, + "links": [39, 68] + } + ], + "title": "Resize Reference", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "ResizeImageMaskNode" + }, + "widgets_values": ["scale longer dimension", 1536, "lanczos"] + }, + { + "id": 14, + "type": "LatentUpscaleModelLoader", + "pos": [452.82236965026885, 683.519747085575], + "size": [376.2368404663082, 58], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "localized_name": "model_name", + "name": "model_name", + "type": "COMBO", + "widget": { "name": "model_name" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "LATENT_UPSCALE_MODEL", + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "slot_index": 0, + "links": [36] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LatentUpscaleModelLoader" + }, + "widgets_values": ["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"] + }, + { + "id": 13, + "type": "LoraLoaderModelOnly", + "pos": [451.8815797668459, 542.2302684844991], + "size": [373.4144708160393, 82], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 2 + }, + { + "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", + "slot_index": 0, + "links": [22, 25, 44, 47] + } + ], + "title": "Distilled LoRA (both stages)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": ["LTX/ltx-2.3-22b-distilled-lora-384.safetensors", 0.5] + }, + { + "id": 12, + "type": "LTXVAudioVAELoader", + "pos": [450, 400], + "size": [369.75658755188215, 58], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { "name": "ckpt_name" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Audio VAE", + "name": "Audio VAE", + "type": "VAE", + "slot_index": 0, + "links": [10, 59] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVAudioVAELoader" + }, + "widgets_values": ["ltx-2.3-22b-dev.safetensors"] + }, + { + "id": 11, + "type": "LTXAVTextEncoderLoader", + "pos": [448.1184202331541, 213.86843580322656], + "size": [373.41447081603906, 106], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "text_encoder", + "name": "text_encoder", + "type": "COMBO", + "widget": { "name": "text_encoder" }, + "link": null + }, + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { "name": "ckpt_name" }, + "link": null + }, + { + "localized_name": "device", + "name": "device", + "type": "COMBO", + "widget": { "name": "device" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [3, 4, 70] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXAVTextEncoderLoader" + }, + "widgets_values": [ + "gemma_3_12B_it.safetensors", + "ltx-2.3-22b-dev.safetensors", + "default" + ] + }, + { + "id": 10, + "type": "CheckpointLoaderSimple", + "pos": [445.29605058288524, 31.046066152957746], + "size": [371.63816731872794, 98], + "flags": {}, + "order": 9, + "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": [2] + }, + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "slot_index": 1, + "links": [] + }, + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "slot_index": 2, + "links": [14, 21, 26, 37, 38, 48, 57] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": ["ltx-2.3-22b-dev.safetensors"] + }, + { + "id": 22, + "type": "LTXVConditioning", + "pos": [999.7237276428352, 409.4078988342295], + "size": [210, 78], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 5 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 6 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "FLOAT", + "widget": { "name": "frame_rate" }, + "link": 7 + } + ], + "outputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [23, 45] + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [24, 46] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVConditioning" + }, + "widgets_values": [24] + }, + { + "id": 31, + "type": "LTXVEmptyLatentAudio", + "pos": [1400.940789883423, 211.9868560363806], + "size": [252.82236965026914, 106], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "localized_name": "audio_vae", + "name": "audio_vae", + "type": "VAE", + "link": 10 + }, + { + "localized_name": "frames_number", + "name": "frames_number", + "type": "INT", + "widget": { "name": "frames_number" }, + "link": 11 + }, + { + "localized_name": "frame_rate", + "name": "frame_rate", + "type": "INT", + "widget": { "name": "frame_rate" }, + "link": 65 + }, + { + "localized_name": "batch_size", + "name": "batch_size", + "type": "INT", + "widget": { "name": "batch_size" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Latent", + "name": "Latent", + "type": "LATENT", + "slot_index": 0, + "links": [19] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVEmptyLatentAudio" + }, + "widgets_values": [97, 25, 1] + }, + { + "id": 30, + "type": "EmptyLTXVLatentVideo", + "pos": [1400, 0], + "size": [252.82236965026868, 130], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "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": "length", + "name": "length", + "type": "INT", + "widget": { "name": "length" }, + "link": 9 + }, + { + "localized_name": "batch_size", + "name": "batch_size", + "type": "INT", + "widget": { "name": "batch_size" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [16] + } + ], + "title": "Stage 1 Empty Latent", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "EmptyLTXVLatentVideo" + }, + "widgets_values": [960, 544, 713, 1] + }, + { + "id": 43, + "type": "CFGGuider", + "pos": [1960.3486887176518, 256.9342179016131], + "size": [250, 98], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 22 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 23 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 24 + }, + { + "localized_name": "cfg", + "name": "cfg", + "type": "FLOAT", + "widget": { "name": "cfg" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [30] + } + ], + "title": "Stage 1 Guider", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CFGGuider" + }, + "widgets_values": [1], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 63, + "type": "CFGGuider", + "pos": [2563.9220909318396, 255.9369806251849], + "size": [235.2013751337572, 98], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 44 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 45 + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "link": 46 + }, + { + "localized_name": "cfg", + "name": "cfg", + "type": "FLOAT", + "widget": { "name": "cfg" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [52] + } + ], + "title": "Stage 2 Guider", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CFGGuider" + }, + "widgets_values": [1], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 62, + "type": "ManualSigmas", + "pos": [3047.723288482116, 178.70409580402023], + "size": [277.23288482116413, 58], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "STRING", + "widget": { "name": "sigmas" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, + "links": [51] + } + ], + "title": "Stage 2 Sigmas", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "ManualSigmas" + }, + "widgets_values": ["0.85, 0.7250, 0.4219, 0.0"] + }, + { + "id": 61, + "type": "KSamplerSelect", + "pos": [3050, 69.5972497324864], + "size": [250, 58], + "flags": {}, + "order": 11, + "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", + "slot_index": 0, + "links": [50] + } + ], + "title": "Stage 2 Sampler", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": ["euler_cfg_pp"] + }, + { + "id": 60, + "type": "RandomNoise", + "pos": [3050, -80], + "size": [210, 82], + "flags": {}, + "order": 12, + "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": [49] + } + ], + "title": "Stage 2 Noise", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [43, "fixed"] + }, + { + "id": 74, + "type": "SaveVideo", + "pos": [3975.7575757575723, 1040.9090909090924], + "size": [250, 106], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "localized_name": "video", + "name": "video", + "type": "VIDEO", + "link": 63 + }, + { + "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": "codec", + "name": "codec", + "type": "COMBO", + "widget": { "name": "codec" }, + "link": null + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "SaveVideo" + }, + "widgets_values": ["LTX-2.3/Looping", "auto", "auto"] + }, + { + "id": 73, + "type": "CreateVideo", + "pos": [3649.9999999999995, 1049.9999999999995], + "size": [243.939393939394, 78], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 60 + }, + { + "localized_name": "audio", + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 61 + }, + { + "localized_name": "fps", + "name": "fps", + "type": "FLOAT", + "widget": { "name": "fps" }, + "link": 62 + } + ], + "outputs": [ + { + "localized_name": "VIDEO", + "name": "VIDEO", + "type": "VIDEO", + "slot_index": 0, + "links": [63] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "CreateVideo" + }, + "widgets_values": [30] + }, + { + "id": 72, + "type": "LTXVAudioVAEDecode", + "pos": [3643.9393939393935, 899.3939393939382], + "size": [203.00000610351563, 46], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 58 + }, + { + "localized_name": "audio_vae", + "name": "audio_vae", + "type": "VAE", + "link": 59 + } + ], + "outputs": [ + { + "localized_name": "Audio", + "name": "Audio", + "type": "AUDIO", + "slot_index": 0, + "links": [61] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVAudioVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 71, + "type": "LTXVSpatioTemporalTiledVAEDecode", + "pos": [3615.151515151515, 569.393939393939], + "size": [350, 242], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 57 }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": null + }, + { + "localized_name": "spatial_tiles", + "name": "spatial_tiles", + "type": "INT", + "widget": { "name": "spatial_tiles" }, + "link": null + }, + { + "localized_name": "spatial_overlap", + "name": "spatial_overlap", + "type": "INT", + "widget": { "name": "spatial_overlap" }, + "link": null + }, + { + "localized_name": "temporal_tile_length", + "name": "temporal_tile_length", + "type": "INT", + "widget": { "name": "temporal_tile_length" }, + "link": null + }, + { + "localized_name": "temporal_overlap", + "name": "temporal_overlap", + "type": "INT", + "widget": { "name": "temporal_overlap" }, + "link": null + }, + { + "localized_name": "last_frame_fix", + "name": "last_frame_fix", + "type": "BOOLEAN", + "widget": { "name": "last_frame_fix" }, + "link": null + }, + { + "localized_name": "working_device", + "name": "working_device", + "type": "COMBO", + "widget": { "name": "working_device" }, + "link": null + }, + { + "localized_name": "working_dtype", + "name": "working_dtype", + "type": "COMBO", + "widget": { "name": "working_dtype" }, + "link": null + }, + { "name": "samples", "type": "LATENT", "link": 56 } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [60] + } + ], + "title": "Decode Video (Tiled)", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVSpatioTemporalTiledVAEDecode" + }, + "widgets_values": [6, 4, 16, 4, false, "auto", "auto"] + }, + { + "id": 70, + "type": "LTXVSeparateAVLatent", + "pos": [3600, 400], + "size": [233.33333333333348, 46], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "localized_name": "av_latent", + "name": "av_latent", + "type": "LATENT", + "link": 55 + } + ], + "outputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "slot_index": 0, + "links": [56] + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "slot_index": 1, + "links": [58] + } + ], + "title": "Split Final AV", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [] + }, + { + "id": 64, + "type": "LTXVLoopingSampler", + "pos": [3073.801984050594, 392.75591789764337], + "size": [400, 580], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 47 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 48 }, + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 49 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 50 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 51 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 52 + }, + { + "localized_name": "latents", + "name": "latents", + "type": "LATENT", + "link": 53 + }, + { + "localized_name": "optional_cond_images", + "name": "optional_cond_images", + "shape": 7, + "type": "IMAGE", + "link": 69 + }, + { + "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": 72 + }, + { + "localized_name": "optional_negative_index_latents", + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "localized_name": "optional_normalizing_latents", + "name": "optional_normalizing_latents", + "shape": 7, + "type": "LATENT", + "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": "guiding_strength", + "name": "guiding_strength", + "type": "FLOAT", + "widget": { "name": "guiding_strength" }, + "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": "cond_image_strength", + "name": "cond_image_strength", + "type": "FLOAT", + "widget": { "name": "cond_image_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": "guiding_start_step", + "name": "guiding_start_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_start_step" }, + "link": null + }, + { + "localized_name": "guiding_end_step", + "name": "guiding_end_step", + "shape": 7, + "type": "INT", + "widget": { "name": "guiding_end_step" }, + "link": null + }, + { + "localized_name": "optional_cond_image_indices", + "name": "optional_cond_image_indices", + "shape": 7, + "type": "STRING", + "widget": { "name": "optional_cond_image_indices" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "slot_index": 0, + "links": [55] + } + ], + "title": "Stage 2 \u2014 Refine", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 264, + 24, + 1, + 0.5, + 1, + 2, + 1, + 1, + 0, + 0, + 1000, + "0, 240, 480" + ], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 53, + "type": "LTXVConcatAVLatent", + "pos": [2807.97697623735, 524.995187859747], + "size": [190.80550053502748, 46], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "link": 42 + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "link": 43 + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [53] + } + ], + "title": "Stage 2 AV Concat", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVConcatAVLatent" + }, + "widgets_values": [], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 51, + "type": "LTXVLatentUpsampler", + "pos": [2494.204734318114, 557.0100775530725], + "size": [249.9123466065612, 66], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 35 + }, + { + "localized_name": "upscale_model", + "name": "upscale_model", + "type": "LATENT_UPSCALE_MODEL", + "link": 36 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 37 } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [40] + } + ], + "title": "Spatial Upscale 2x", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVLatentUpsampler" + }, + "widgets_values": [] + }, + { + "id": 50, + "type": "LTXVSeparateAVLatent", + "pos": [2429.214969171252, 400.10348688717687], + "size": [172.5918083919587, 46], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "localized_name": "av_latent", + "name": "av_latent", + "type": "LATENT", + "link": 34 + } + ], + "outputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "slot_index": 0, + "links": [35] + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "slot_index": 1, + "links": [43] + } + ], + "title": "Split Stage 1 AV", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [] + }, + { + "id": 33, + "type": "LTXVConcatAVLatent", + "pos": [1435.7500155700718, 795.296050582885], + "size": [174.92496730284756, 46], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "localized_name": "video_latent", + "name": "video_latent", + "type": "LATENT", + "link": 18 + }, + { + "localized_name": "audio_latent", + "name": "audio_latent", + "type": "LATENT", + "link": 19 + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [31] + } + ], + "title": "Stage 1 AV Concat", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "LTXVConcatAVLatent" + }, + "widgets_values": [], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 35, + "type": "VAEEncode", + "pos": [1383.3333333333328, 1164.9999999999995], + "size": [206.36665954589844, 46], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "localized_name": "pixels", + "name": "pixels", + "type": "IMAGE", + "link": 20 + }, + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 21 } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [33] + } + ], + "title": "Encode Reference Latent", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 32, + "type": "LTXVImgToVideoConditionOnly", + "pos": [1399.999999999999, 604.9999999999992], + "size": [210, 122], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 14 }, + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 15 + }, + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "link": 16 + }, + { + "localized_name": "strength", + "name": "strength", + "type": "FLOAT", + "widget": { "name": "strength" }, + "link": null + }, + { + "localized_name": "bypass", + "name": "bypass", + "shape": 7, + "type": "BOOLEAN", + "widget": { "name": "bypass" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [18] + } + ], + "title": "Stage 1 I2V Cond", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVImgToVideoConditionOnly" + }, + "widgets_values": [0.7, false], + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 52, + "type": "LTXVImgToVideoConditionOnly", + "pos": [2492.238483461759, 791.1178860526603], + "size": [210, 122], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 38 }, + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "link": 39 + }, + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "link": 40 + }, + { + "localized_name": "strength", + "name": "strength", + "type": "FLOAT", + "widget": { "name": "strength" }, + "link": null + }, + { + "localized_name": "bypass", + "name": "bypass", + "shape": 7, + "type": "BOOLEAN", + "widget": { "name": "bypass" }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [42] + } + ], + "title": "Stage 2 I2V Cond", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVImgToVideoConditionOnly" + }, + "widgets_values": [1, false], + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 6, + "type": "Note", + "pos": [281.1738724586202, 1016.7247228103745], + "size": [631.0862190651818, 273.1698654463494], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { "Node name for S&R": "Note" }, + "widgets_values": [ + "## Three 10-Second Tiles \u2014 30s Video\n\n**Frame count:** 713 (29.7s at 24fps)\n**Tile size:** 264 (10.7s context per tile), Overlap: 24 (1s)\n**Tiles:** 3 temporal tiles, each ~10 seconds\n\n### Tile Prompts (MultiPromptProvider)\nPipe-separated prompts, one per tile. Edit to change per-tile narration.\nIf fewer prompts than tiles, the last prompt is reused.\n\n### Guiding Images\nThe reference image is repeated 3x and placed at tile boundaries:\n indices \"0, 240, 480\" \u2014 start of each tile in pixel frames.\nThis anchors subject identity across tile transitions.\n\n### Conditioning Image Indices\nIndices must be divisible by 8 (except 0).\nWith tile_size=264, overlap=24, pixel-space tile starts are:\n Tile 0: frame 0, Tile 1: frame 240, Tile 2: frame 480." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 80, + "type": "RepeatImageBatch", + "pos": [11, 430], + "size": [220, 58], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { "name": "image", "type": "IMAGE", "link": 66 }, + { + "name": "amount", + "type": "INT", + "widget": { "name": "amount" }, + "link": null + } + ], + "outputs": [ + { "name": "IMAGE", "type": "IMAGE", "slot_index": 0, "links": [67] } + ], + "title": "Repeat Ref Image (3x)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "RepeatImageBatch" + }, + "widgets_values": [3] + }, + { + "id": 81, + "type": "RepeatImageBatch", + "pos": [11, 650], + "size": [220, 58], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { "name": "image", "type": "IMAGE", "link": 68 }, + { + "name": "amount", + "type": "INT", + "widget": { "name": "amount" }, + "link": null + } + ], + "outputs": [ + { "name": "IMAGE", "type": "IMAGE", "slot_index": 0, "links": [69] } + ], + "title": "Repeat Resized Ref (3x)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.18.5", + "Node name for S&R": "RepeatImageBatch" + }, + "widgets_values": [3] + }, + { + "id": 82, + "type": "MultiPromptProvider", + "pos": [900, 440], + "size": [400, 220], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "prompts", + "type": "STRING", + "widget": { "name": "prompts" }, + "link": null + }, + { "name": "clip", "type": "CLIP", "link": 70 } + ], + "outputs": [ + { + "name": "conditionings", + "type": "CONDITIONING", + "slot_index": 0, + "links": [71, 72] + } + ], + "title": "Per-Tile Prompts (3 tiles)", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "MultiPromptProvider" + }, + "widgets_values": [ + "A woman walks through a sunlit garden, birds singing overhead. She smiles as petals fall gently around her. | She pauses by a fountain, trailing her fingers through the water. The camera slowly orbits around her as light plays on the surface. | She walks along a tree-lined path toward a distant gate. Leaves drift in the warm breeze as she disappears into golden light." + ] + } + ], + "links": [ + [1, 1, 0, 2, 0, "IMAGE"], + [2, 10, 0, 13, 0, "MODEL"], + [3, 11, 0, 20, 0, "CLIP"], + [4, 11, 0, 21, 0, "CLIP"], + [5, 20, 0, 22, 0, "CONDITIONING"], + [6, 21, 0, 22, 1, "CONDITIONING"], + [7, 4, 0, 22, 2, "FLOAT"], + [8, 1, 0, 23, 0, "IMAGE"], + [9, 3, 0, 30, 2, "INT"], + [10, 12, 0, 31, 0, "VAE"], + [11, 3, 0, 31, 1, "INT"], + [14, 10, 2, 32, 0, "VAE"], + [15, 2, 0, 32, 1, "IMAGE"], + [16, 30, 0, 32, 2, "LATENT"], + [18, 32, 0, 33, 0, "LATENT"], + [19, 31, 0, 33, 1, "LATENT"], + [20, 2, 0, 35, 0, "IMAGE"], + [21, 10, 2, 35, 1, "VAE"], + [22, 13, 0, 43, 0, "MODEL"], + [23, 22, 0, 43, 1, "CONDITIONING"], + [24, 22, 1, 43, 2, "CONDITIONING"], + [25, 13, 0, 44, 0, "MODEL"], + [26, 10, 2, 44, 1, "VAE"], + [27, 40, 0, 44, 2, "NOISE"], + [28, 41, 0, 44, 3, "SAMPLER"], + [29, 42, 0, 44, 4, "SIGMAS"], + [30, 43, 0, 44, 5, "GUIDER"], + [31, 33, 0, 44, 6, "LATENT"], + [33, 35, 0, 44, 10, "LATENT"], + [34, 44, 0, 50, 0, "LATENT"], + [35, 50, 0, 51, 0, "LATENT"], + [36, 14, 0, 51, 1, "LATENT_UPSCALE_MODEL"], + [37, 10, 2, 51, 2, "VAE"], + [38, 10, 2, 52, 0, "VAE"], + [39, 23, 0, 52, 1, "IMAGE"], + [40, 51, 0, 52, 2, "LATENT"], + [42, 52, 0, 53, 0, "LATENT"], + [43, 50, 1, 53, 1, "LATENT"], + [44, 13, 0, 63, 0, "MODEL"], + [45, 22, 0, 63, 1, "CONDITIONING"], + [46, 22, 1, 63, 2, "CONDITIONING"], + [47, 13, 0, 64, 0, "MODEL"], + [48, 10, 2, 64, 1, "VAE"], + [49, 60, 0, 64, 2, "NOISE"], + [50, 61, 0, 64, 3, "SAMPLER"], + [51, 62, 0, 64, 4, "SIGMAS"], + [52, 63, 0, 64, 5, "GUIDER"], + [53, 53, 0, 64, 6, "LATENT"], + [55, 64, 0, 70, 0, "LATENT"], + [56, 70, 0, 71, 9, "LATENT"], + [57, 10, 2, 71, 0, "VAE"], + [58, 70, 1, 72, 0, "LATENT"], + [59, 12, 0, 72, 1, "VAE"], + [60, 71, 0, 73, 0, "IMAGE"], + [61, 72, 0, 73, 1, "AUDIO"], + [62, 4, 0, 73, 2, "FLOAT"], + [63, 73, 0, 74, 0, "VIDEO"], + [64, 4, 0, 75, 0, "FLOAT"], + [65, 75, 0, 31, 2, "INT"], + [66, 2, 0, 80, 0, "IMAGE"], + [67, 80, 0, 44, 7, "IMAGE"], + [68, 23, 0, 81, 0, "IMAGE"], + [69, 81, 0, 64, 7, "IMAGE"], + [70, 11, 0, 82, 1, "CLIP"], + [71, 82, 0, 44, 9, "CONDITIONING"], + [72, 82, 0, 64, 9, "CONDITIONING"] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.878460000000002, + "offset": [-147.93391628437732, 99.35113851569274] + }, + "info": { + "name": "LTX-2.3 Two-Pass I2V Looping", + "description": "Two-pass I2V workflow for arbitrary-length video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Soft guiding images at tile boundaries maintain subject continuity." + } + }, + "version": 0.4 +} From db13ed443073ca45ba0eeb208317d1a8f4b05731 Mon Sep 17 00:00:00 2001 From: "Jean J. de Jong" Date: Wed, 22 Apr 2026 10:12:40 +0200 Subject: [PATCH 4/4] Sync of my fork with official branch. --- README.md | 6 +- __init__.py | 5 +- ...LTX-2.3_ICLoRA_Motion_Track_Distilled.json | 1771 ++++++++--------- ...TX-2.3_ICLoRA_Union_Control_Distilled.json | 1625 +++++++-------- ...3_T2V_I2V_Single_Stage_Distilled_Full.json | 1326 ++++++------ .../LTX-2.3_T2V_I2V_Two_Stage_Distilled.json | 1422 ++++++------- looping_sampler.py | 61 +- pyramid_blending.py | 267 +++ requirements.txt | 1 + utiltily_nodes.py | 14 + 10 files changed, 3390 insertions(+), 3108 deletions(-) create mode 100644 pyramid_blending.py diff --git a/README.md b/README.md index 9171296..a9aa499 100644 --- a/README.md +++ b/README.md @@ -86,17 +86,17 @@ Download the following models: **LTX-2.3 Model Checkpoint** - Choose and download one of the models to `COMFYUI_ROOT_FOLDER/models/checkpoints` folder. * [`ltx-2.3-22b-dev.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-22b-dev.safetensors) - * [`ltx-2.3-22b-distilled.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-22b-distilled.safetensors) + * [`ltx-2.3-22b-distilled-1.1.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-22b-distilled-1.1.safetensors) **Spatial Upscaler** - Required for current two-stage pipeline implementations in this repository. Download to `COMFYUI_ROOT_FOLDER/models/latent_upscale_models` folder. - * [`ltx-2.3-spatial-upscaler-x2-1.0.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x2-1.0.safetensors) + * [`ltx-2.3-spatial-upscaler-x2-1.1.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x2-1.1.safetensors) * [`ltx-2.3-spatial-upscaler-x1.5-1.0.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-spatial-upscaler-x1.5-1.0.safetensors) **Temporal Upscaler** - Required for current two-stage pipeline implementations in this repository. Download to `COMFYUI_ROOT_FOLDER/models/latent_upscale_models` folder. * [`ltx-2.3-temporal-upscaler-x2-1.0.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-temporal-upscaler-x2-1.0.safetensors) **Distilled LoRA** - Required for current two-stage pipeline implementations in this repository (except DistilledPipeline and ICLoraPipeline). Download to `COMFYUI_ROOT_FOLDER/models/loras` folder. - * [`ltx-2.3-22b-distilled-lora-384.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-22b-distilled-lora-384.safetensors) + * [`ltx-2.3-22b-distilled-lora-384-1.1.safetensors`](https://huggingface.co/Lightricks/LTX-2.3/blob/main/ltx-2.3-22b-distilled-lora-384-1.1.safetensors) **Gemma Text Encoder** Download all files from the repository to `COMFYUI_ROOT_FOLDER/models/text_encoders/gemma-3-12b-it-qat-q4_0-unquantized`. * [`Gemma 3`](https://huggingface.co/google/gemma-3-12b-it-qat-q4_0-unquantized) diff --git a/__init__.py b/__init__.py index 0ecb5b4..bdce8c8 100644 --- a/__init__.py +++ b/__init__.py @@ -43,6 +43,7 @@ ) from .nodes_registry import NODES_DISPLAY_NAME_PREFIX, camel_case_to_spaces from .prompt_enhancer_nodes import LTXVPromptEnhancer, LTXVPromptEnhancerLoader +from .pyramid_blending import LTXVLaplacianPyramidBlend from .q8_nodes import LTXVQ8LoraModelLoader, LTXVQ8Patch from .sparse_tracks import LTXVDrawTracks, LTXVSparseTrackEditor from .stg import ( @@ -55,7 +56,7 @@ 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 +from .utiltily_nodes import FloatToInt, ImageToCPU from .vae_patcher import LTXVPatcherVAE from .vanish_nodes import LTXVDilateVideoMask, LTXVInpaintPreprocess @@ -92,6 +93,7 @@ "STGGuiderNode": STGGuiderNode, "LTXVMultiPromptProvider": MultiPromptProvider, "ImageToCPU": ImageToCPU, + "LTXFloatToInt": FloatToInt, "LTXVStatNormLatent": LTXVStatNormLatent, "LTXVPerStepStatNormPatcher": LTXVPerStepStatNormPatcher, "LTXVGemmaCLIPModelLoader": LTXVGemmaCLIPModelLoader, @@ -110,6 +112,7 @@ "LTXVSparseTrackEditor": LTXVSparseTrackEditor, "LTXVDilateVideoMask": LTXVDilateVideoMask, "LTXVInpaintPreprocess": LTXVInpaintPreprocess, + "LTXVLaplacianPyramidBlend": LTXVLaplacianPyramidBlend, } # Consistent display names between static and dynamic node mappings in nodes_registry.py, diff --git a/example_workflows/2.3/LTX-2.3_ICLoRA_Motion_Track_Distilled.json b/example_workflows/2.3/LTX-2.3_ICLoRA_Motion_Track_Distilled.json index 0862174..f8c1ca4 100644 --- a/example_workflows/2.3/LTX-2.3_ICLoRA_Motion_Track_Distilled.json +++ b/example_workflows/2.3/LTX-2.3_ICLoRA_Motion_Track_Distilled.json @@ -1,104 +1,9 @@ { "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", "revision": 0, - "last_node_id": 5056, - "last_link_id": 13541, + "last_node_id": 5061, + "last_link_id": 13563, "nodes": [ - { - "id": 4848, - "type": "LTXVAudioVAEDecode", - "pos": [ - -173.58219357128075, - 3350.36209031175 - ], - "size": [ - 242.46932983398438, - 46 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13445 - }, - { - "name": "audio_vae", - "type": "VAE", - "link": 13275 - } - ], - "outputs": [ - { - "name": "Audio", - "type": "AUDIO", - "links": [ - 13108 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 4849, - "type": "CreateVideo", - "pos": [ - 121.15941156244612, - 3147.289573042273 - ], - "size": [ - 270, - 102 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13107 - }, - { - "name": "audio", - "shape": 7, - "type": "AUDIO", - "link": 13108 - }, - { - "name": "fps", - "type": "FLOAT", - "widget": { - "name": "fps" - }, - "link": 13505 - } - ], - "outputs": [ - { - "name": "VIDEO", - "type": "VIDEO", - "links": [ - 13112 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CreateVideo" - }, - "widgets_values": [ - 30 - ] - }, { "id": 4832, "type": "RandomNoise", @@ -124,62 +29,15 @@ } ], "properties": { + "Node name for S&R": "RandomNoise", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "RandomNoise" + "ver": "0.14.1" }, "widgets_values": [ 42, "fixed" ] }, - { - "id": 4851, - "type": "VAEDecodeTiled", - "pos": [ - -197.94059482608304, - 3147.602739745794 - ], - "size": [ - 270, - 150 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13412 - }, - { - "name": "vae", - "type": "VAE", - "link": 13348 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13107 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "VAEDecodeTiled" - }, - "widgets_values": [ - 512, - 64, - 512, - 4 - ] - }, { "id": 4831, "type": "KSamplerSelect", @@ -205,9 +63,9 @@ } ], "properties": { + "Node name for S&R": "KSamplerSelect", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "KSamplerSelect" + "ver": "0.14.1" }, "widgets_values": [ "euler_ancestral_cfg_pp" @@ -266,9 +124,9 @@ } ], "properties": { + "Node name for S&R": "LTXVConditioning", "cnr_id": "comfy-core", - "ver": "0.3.28", - "Node name for S&R": "LTXVConditioning" + "ver": "0.3.28" }, "widgets_values": [ 24 @@ -286,7 +144,7 @@ 282 ], "flags": {}, - "order": 32, + "order": 29, "mode": 0, "inputs": [ { @@ -312,7 +170,7 @@ { "name": "image", "type": "IMAGE", - "link": 13541 + "link": 13561 }, { "name": "latent_downscale_factor", @@ -373,7 +231,7 @@ 46 ], "flags": {}, - "order": 34, + "order": 31, "mode": 0, "inputs": [ { @@ -397,9 +255,9 @@ } ], "properties": { + "Node name for S&R": "LTXVConcatAVLatent", "cnr_id": "comfy-core", - "ver": "0.10.0", - "Node name for S&R": "LTXVConcatAVLatent" + "ver": "0.10.0" }, "widgets_values": [] }, @@ -439,7 +297,7 @@ "widget": { "name": "frame_rate" }, - "link": 13462 + "link": 13547 } ], "outputs": [ @@ -452,9 +310,9 @@ } ], "properties": { + "Node name for S&R": "LTXVEmptyLatentAudio", "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVEmptyLatentAudio" + "ver": "0.3.64" }, "widgets_values": [ 97, @@ -462,54 +320,6 @@ 1 ] }, - { - "id": 3159, - "type": "LTXVImgToVideoConditionOnly", - "pos": [ - -2144.970291670966, - 3352.7872806168716 - ], - "size": [ - 313.2623046875, - 142.859507731343 - ], - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "vae", - "type": "VAE", - "link": 13279 - }, - { - "name": "image", - "type": "IMAGE", - "link": 9768 - }, - { - "name": "latent", - "type": "LATENT", - "link": 11401 - } - ], - "outputs": [ - { - "name": "latent", - "type": "LATENT", - "links": [ - 13402 - ] - } - ], - "properties": { - "Node name for S&R": "LTXVImgToVideoConditionOnly" - }, - "widgets_values": [ - 0.7, - false - ] - }, { "id": 4829, "type": "SamplerCustomAdvanced", @@ -522,7 +332,7 @@ 106 ], "flags": {}, - "order": 35, + "order": 32, "mode": 0, "inputs": [ { @@ -566,9 +376,9 @@ } ], "properties": { + "Node name for S&R": "SamplerCustomAdvanced", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "SamplerCustomAdvanced" + "ver": "0.14.1" }, "widgets_values": [] }, @@ -584,7 +394,7 @@ 100.83333333333334 ], "flags": {}, - "order": 37, + "order": 34, "mode": 0, "inputs": [ { @@ -618,14 +428,14 @@ "name": "latent", "type": "LATENT", "links": [ - 13412 + 13545 ] } ], "properties": { + "Node name for S&R": "LTXVCropGuides", "cnr_id": "comfy-core", - "ver": "0.3.75", - "Node name for S&R": "LTXVCropGuides" + "ver": "0.3.75" }, "widgets_values": [] }, @@ -641,7 +451,7 @@ 46 ], "flags": {}, - "order": 36, + "order": 33, "mode": 0, "inputs": [ { @@ -667,9 +477,9 @@ } ], "properties": { + "Node name for S&R": "LTXVSeparateAVLatent", "cnr_id": "comfy-core", - "ver": "0.10.0", - "Node name for S&R": "LTXVSeparateAVLatent" + "ver": "0.10.0" }, "widgets_values": [] }, @@ -699,9 +509,9 @@ } ], "properties": { + "Node name for S&R": "LTXVAudioVAELoader", "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAELoader" + "ver": "0.3.64" }, "widgets_values": [ "ltx-2.3-22b-dev.safetensors" @@ -740,60 +550,20 @@ "type": "VAE", "links": [ 13279, - 13348, - 13405 + 13405, + 13544 ] } ], "properties": { + "Node name for S&R": "CheckpointLoaderSimple", "cnr_id": "comfy-core", - "ver": "0.3.56", - "Node name for S&R": "CheckpointLoaderSimple" + "ver": "0.3.56" }, "widgets_values": [ "ltx-2.3-22b-dev.safetensors" ] }, - { - "id": 4922, - "type": "LoraLoaderModelOnly", - "pos": [ - -4204.024401614721, - 3261.100838617218 - ], - "size": [ - 454.14193097539646, - 128.44311555561626 - ], - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 13217 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 13400 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384.safetensors", - 0.5 - ] - }, { "id": 5021, "type": "GemmaAPITextEncode", @@ -863,9 +633,9 @@ ], "title": "LTX API KEY", "properties": { + "Node name for S&R": "PrimitiveString", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "PrimitiveString" + "ver": "0.14.1" }, "widgets_values": [ "" @@ -897,9 +667,9 @@ } ], "properties": { + "Node name for S&R": "LTXAVTextEncoderLoader", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LTXAVTextEncoderLoader" + "ver": "0.14.1" }, "widgets_values": [ "comfy_gemma_3_12B_it.safetensors", @@ -940,9 +710,9 @@ ], "title": "CLIP Text Encode (Negative Prompt)", "properties": { + "Node name for S&R": "CLIPTextEncode", "cnr_id": "comfy-core", - "ver": "0.3.28", - "Node name for S&R": "CLIPTextEncode" + "ver": "0.3.28" }, "widgets_values": [ "pc game, console game, video game, cartoon, childish, ugly" @@ -951,147 +721,64 @@ "bgcolor": "#533" }, { - "id": 3336, - "type": "LTXVPreprocess", + "id": 4828, + "type": "CFGGuider", "pos": [ - -2474.088851384863, - 3338.3377499968506 + -1148.6022543301199, + 3397.454504415198 ], "size": [ 270, - 74 + 114 ], "flags": {}, - "order": 20, + "order": 30, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 13455 + "name": "model", + "type": "MODEL", + "link": 13401 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 13409 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 13410 } ], "outputs": [ { - "name": "output_image", - "type": "IMAGE", + "name": "GUIDER", + "type": "GUIDER", "links": [ - 9768 + 13089 ] } ], "properties": { + "Node name for S&R": "CFGGuider", "cnr_id": "comfy-core", - "ver": "0.3.60", - "Node name for S&R": "LTXVPreprocess" + "ver": "0.14.1" }, "widgets_values": [ - 18 + 1 ] }, { - "id": 5024, - "type": "CM_FloatToInt", + "id": 5025, + "type": "ManualSigmas", "pos": [ - -2333.6648613251946, - 3719.9927171020036 + -1140.7796572156824, + 3672.794138002452 ], "size": [ - 270, - 58 - ], - "flags": { - "collapsed": true - }, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "a", - "type": "FLOAT", - "widget": { - "name": "a" - }, - "link": 13506 - } - ], - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 13462 - ] - } - ], - "properties": { - "aux_id": "evanspearman/ComfyMath", - "ver": "c01177221c31b8e5fbc062778fc8254aeb541638", - "Node name for S&R": "CM_FloatToInt" - }, - "widgets_values": [ - 0 - ] - }, - { - "id": 4828, - "type": "CFGGuider", - "pos": [ - -1148.6022543301199, - 3397.454504415198 - ], - "size": [ - 270, - 114 - ], - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 13401 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 13409 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 13410 - } - ], - "outputs": [ - { - "name": "GUIDER", - "type": "GUIDER", - "links": [ - 13089 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CFGGuider" - }, - "widgets_values": [ - 1 - ] - }, - { - "id": 5025, - "type": "ManualSigmas", - "pos": [ - -1140.7796572156824, - 3672.794138002452 - ], - "size": [ - 499.94633283206986, - 67.3573576655076 + 499.94633283206986, + 67.3573576655076 ], "flags": {}, "order": 6, @@ -1107,9 +794,9 @@ } ], "properties": { + "Node name for S&R": "ManualSigmas", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "ManualSigmas" + "ver": "0.14.1" }, "widgets_values": [ "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0" @@ -1137,16 +824,16 @@ "links": [ 13504, 13505, - 13506, - 13540 + 13540, + 13548 ] } ], "title": "fps", "properties": { + "Node name for S&R": "PrimitiveFloat", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveFloat" + "ver": "0.16.0" }, "widgets_values": [ 24 @@ -1164,7 +851,7 @@ 368 ], "flags": {}, - "order": 29, + "order": 28, "mode": 0, "inputs": [ { @@ -1184,64 +871,6 @@ "auto" ] }, - { - "id": 5034, - "type": "LTXVDrawTracks", - "pos": [ - -2980.47319734106, - 4281.82724645523 - ], - "size": [ - 303.5371259505282, - 136 - ], - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [ - { - "name": "tracks", - "type": "STRING", - "widget": { - "name": "tracks" - }, - "link": 13487 - }, - { - "name": "width", - "type": "INT", - "widget": { - "name": "width" - }, - "link": 13516 - }, - { - "name": "height", - "type": "INT", - "widget": { - "name": "height" - }, - "link": 13517 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13526 - ] - } - ], - "properties": { - "Node name for S&R": "LTXVDrawTracks" - }, - "widgets_values": [ - "", - 512, - 512 - ] - }, { "id": 3059, "type": "EmptyLTXVLatentVideo", @@ -1254,7 +883,7 @@ 194 ], "flags": {}, - "order": 30, + "order": 25, "mode": 0, "inputs": [ { @@ -1263,7 +892,7 @@ "widget": { "name": "width" }, - "link": 13531 + "link": 13554 }, { "name": "height", @@ -1271,7 +900,7 @@ "widget": { "name": "height" }, - "link": 13532 + "link": 13555 }, { "name": "length", @@ -1292,9 +921,9 @@ } ], "properties": { + "Node name for S&R": "EmptyLTXVLatentVideo", "cnr_id": "comfy-core", - "ver": "0.3.43", - "Node name for S&R": "EmptyLTXVLatentVideo" + "ver": "0.3.43" }, "widgets_values": [ 960, @@ -1304,183 +933,333 @@ ] }, { - "id": 5056, - "type": "SimpleMath+", + "id": 5051, + "type": "CreateVideo", "pos": [ - -2927.554755449321, - 4465.877183022019 + -2581.263697170858, + 4287.42731978742 ], "size": [ - 210, - 98 + 270, + 78 ], "flags": {}, - "order": 22, + "order": 26, "mode": 0, "inputs": [ { - "name": "a", - "shape": 7, - "type": "*", - "link": 13538 + "name": "images", + "type": "IMAGE", + "link": 13562 }, { - "name": "b", + "name": "audio", "shape": 7, - "type": "*", + "type": "AUDIO", "link": null }, { - "name": "c", - "shape": 7, - "type": "*", - "link": null + "name": "fps", + "type": "FLOAT", + "widget": { + "name": "fps" + }, + "link": 13540 } ], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "VIDEO", + "type": "VIDEO", "links": [ - 13535 + 13523 ] - }, - { - "name": "FLOAT", - "type": "FLOAT", - "links": null } ], "properties": { - "Node name for S&R": "SimpleMath+" + "Node name for S&R": "CreateVideo", + "cnr_id": "comfy-core", + "ver": "0.16.0" }, "widgets_values": [ - "a*32" + 30 ] }, { - "id": 5050, - "type": "GetImageSize", + "id": 4852, + "type": "SaveVideo", "pos": [ - -3214.6998721544865, - 4284.649130551137 + 130.87073016888837, + 3308.891084732692 ], "size": [ - 140, - 124 + 627.0556530433919, + 500.11191809627644 ], "flags": {}, - "order": 24, + "order": 38, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 13515 - } - ], - "outputs": [ - { - "name": "width", - "type": "INT", - "links": [ - 13516 - ] - }, - { - "name": "height", - "type": "INT", - "links": [ - 13517 - ] - }, - { - "name": "batch_size", - "type": "INT", - "links": null + "name": "video", + "type": "VIDEO", + "link": 13112 } ], + "outputs": [], "properties": { "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "GetImageSize" + "ver": "0.14.1" }, - "widgets_values": [] + "widgets_values": [ + "output", + "auto", + "auto" + ] }, { - "id": 5054, - "type": "GetImageSize", + "id": 5020, + "type": "GemmaAPITextEncode", "pos": [ - -2919.6101421006388, - 4782.199741103113 + -2996.9925129764893, + 3241.93462989422 ], "size": [ - 210, - 136 + 337.49481491927054, + 160 ], "flags": {}, - "order": 28, - "mode": 0, + "order": 11, + "mode": 4, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 13530 - } - ], - "outputs": [ + "name": "api_key", + "type": "STRING", + "widget": { + "name": "api_key" + }, + "link": 13457 + } + ], + "outputs": [ { - "name": "width", - "type": "INT", + "name": "conditioning", + "type": "CONDITIONING", + "links": null + } + ], + "title": "🅛🅣🅧 Gemma API Text Encode - NEGATIVE", + "properties": { + "Node name for S&R": "GemmaAPITextEncode" + }, + "widgets_values": [ + "", + "pc game, console game, video game, cartoon, childish, ugly", + false, + "ltx-2.3-22b-dev.safetensors" + ] + }, + { + "id": 5011, + "type": "LTXICLoRALoaderModelOnly", + "pos": [ + -4318.549820950995, + 3445.471848819174 + ], + "size": [ + 570.2243956508886, + 105.50935843305933 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13400 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", "links": [ - 13531 + 13401 ] }, { - "name": "height", - "type": "INT", + "name": "latent_downscale_factor", + "type": "FLOAT", "links": [ - 13532 + 13406, + 13538 ] - }, + } + ], + "properties": { + "Node name for S&R": "LTXICLoRALoaderModelOnly" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", + 1 + ] + }, + { + "id": 2483, + "type": "CLIPTextEncode", + "pos": [ + -3177.88687035676, + 3450.2955325886337 + ], + "size": [ + 307.2346496582031, + 204.2556610107422 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ { - "name": "batch_size", - "type": "INT", - "links": null + "name": "clip", + "type": "CLIP", + "link": 13459 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 7065 + ] } ], + "title": "CLIP Text Encode (Positive Prompt)", "properties": { + "Node name for S&R": "CLIPTextEncode", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "GetImageSize" + "ver": "0.3.28" }, - "widgets_values": [] + "widgets_values": [ + "Man on a small bycicle being chased by a police car. The sirens are blaring and the crowd of bystanders is cheering loudly. As he is pedaling away on the bike, he looks back at the police car and shouts in a taunting tone: \"you can't catch me!\" and waving his fist in the air. He then pedals away on his bike." + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 5051, + "id": 4922, + "type": "LoraLoaderModelOnly", + "pos": [ + -4204.024401614721, + 3261.100838617218 + ], + "size": [ + 454.14193097539646, + 128.44311555561626 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13217 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13400 + ] + } + ], + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "cnr_id": "comfy-core", + "ver": "0.14.1" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384-1.1.safetensors", + 0.5 + ] + }, + { + "id": 5058, + "type": "LTXVTiledVAEDecode", + "pos": [ + -179.88002657638208, + 3159.32435686092 + ], + "size": [ + 267.6441352715875, + 198 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 13544 + }, + { + "name": "latents", + "type": "LATENT", + "link": 13545 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 13546 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 6, + false, + "auto", + "auto" + ] + }, + { + "id": 4849, "type": "CreateVideo", "pos": [ - -2581.263697170858, - 4287.42731978742 + 134.7024457083442, + 3159.4661963356475 ], "size": [ 270, - 78 + 102 ], "flags": {}, - "order": 27, + "order": 37, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 13527 + "link": 13546 }, { "name": "audio", "shape": 7, "type": "AUDIO", - "link": null + "link": 13108 }, { "name": "fps", @@ -1488,7 +1267,7 @@ "widget": { "name": "fps" }, - "link": 13540 + "link": 13505 } ], "outputs": [ @@ -1496,440 +1275,531 @@ "name": "VIDEO", "type": "VIDEO", "links": [ - 13523 + 13112 ] } ], "properties": { + "Node name for S&R": "CreateVideo", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "CreateVideo" + "ver": "0.14.1" }, "widgets_values": [ 30 ] }, { - "id": 5053, - "type": "ResizeImageMaskNode", + "id": 4848, + "type": "LTXVAudioVAEDecode", "pos": [ - -2945.7206727345865, - 4618.337792328785 + -167.98971033521377, + 3410.0921174515993 ], "size": [ - 270, - 106 + 242.46932983398438, + 46 ], "flags": {}, - "order": 26, + "order": 35, "mode": 0, "inputs": [ { - "name": "input", - "type": "IMAGE,MASK", - "link": 13526 + "name": "samples", + "type": "LATENT", + "link": 13445 }, { - "name": "resize_type.multiple", - "type": "INT", - "widget": { - "name": "resize_type.multiple" - }, - "link": 13535 + "name": "audio_vae", + "type": "VAE", + "link": 13275 } ], "outputs": [ { - "name": "resized", + "name": "Audio", + "type": "AUDIO", + "links": [ + 13108 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVAudioVAEDecode", + "cnr_id": "comfy-core", + "ver": "0.3.64" + }, + "widgets_values": [] + }, + { + "id": 2004, + "type": "LoadImage", + "pos": [ + -4651.3774288967725, + 3711.8463010729993 + ], + "size": [ + 274.080078125, + 314.000244140625 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", "type": "IMAGE", "links": [ - 13527, - 13530, - 13541 + 11002, + 13563 ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] } ], "properties": { + "Node name for S&R": "LoadImage", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" + "ver": "0.3.56" }, "widgets_values": [ - "scale to multiple", - 64, - "lanczos" + "motion_track_input.jpg", + "image" ] }, { - "id": 5018, - "type": "ResizeImageMaskNode", + "id": 3159, + "type": "LTXVImgToVideoConditionOnly", "pos": [ - -4035.547921197359, - 3694.8505697186943 + -2144.970291670966, + 3352.7872806168716 ], "size": [ - 270, - 106 + 313.2623046875, + 142.859507731343 ], "flags": {}, - "order": 16, + "order": 27, "mode": 0, "inputs": [ { - "name": "input", - "type": "IMAGE,MASK", - "link": 13454 + "name": "vae", + "type": "VAE", + "link": 13279 + }, + { + "name": "image", + "type": "IMAGE", + "link": 13560 + }, + { + "name": "latent", + "type": "LATENT", + "link": 11401 } ], "outputs": [ { - "name": "resized", - "type": "IMAGE", + "name": "latent", + "type": "LATENT", "links": [ - 13455, - 13536 + 13402 ] } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" + "Node name for S&R": "LTXVImgToVideoConditionOnly" }, "widgets_values": [ - "scale longer dimension", - 1536, - "lanczos" + 1, + false ] }, { - "id": 4852, - "type": "SaveVideo", + "id": 5050, + "type": "GetImageSize", "pos": [ - 130.87073016888837, - 3308.891084732692 + -3170.882656596506, + 4276.096714479671 ], "size": [ - 627.0556530433919, - 500.11191809627644 + 140, + 124 ], "flags": {}, - "order": 41, + "order": 23, "mode": 0, "inputs": [ { - "name": "video", - "type": "VIDEO", - "link": 13112 + "name": "image", + "type": "IMAGE", + "link": 13559 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 13516, + 13554 + ] + }, + { + "name": "height", + "type": "INT", + "links": [ + 13517, + 13555 + ] + }, + { + "name": "batch_size", + "type": "INT", + "links": null } ], - "outputs": [], "properties": { + "Node name for S&R": "GetImageSize", "cnr_id": "comfy-core", - "ver": "0.14.1" + "ver": "0.16.0" }, - "widgets_values": [ - "output", - "auto", - "auto" - ] + "widgets_values": [] }, { - "id": 5020, - "type": "GemmaAPITextEncode", + "id": 5053, + "type": "ResizeImageMaskNode", "pos": [ - -2996.9925129764893, - 3241.93462989422 + -3985.0281425941853, + 3901.767859066883 ], "size": [ - 337.49481491927054, - 160 + 270, + 106 ], "flags": {}, - "order": 11, - "mode": 4, + "order": 21, + "mode": 0, "inputs": [ { - "name": "api_key", - "type": "STRING", + "name": "input", + "type": "IMAGE,MASK", + "link": 13557 + }, + { + "name": "resize_type.multiple", + "type": "INT", "widget": { - "name": "api_key" + "name": "resize_type.multiple" }, - "link": 13457 + "link": 13535 } ], "outputs": [ { - "name": "conditioning", - "type": "CONDITIONING", - "links": null + "name": "resized", + "type": "IMAGE", + "links": [ + 13558, + 13559, + 13560 + ] } ], - "title": "🅛🅣🅧 Gemma API Text Encode - NEGATIVE", "properties": { - "Node name for S&R": "GemmaAPITextEncode" + "Node name for S&R": "ResizeImageMaskNode", + "cnr_id": "comfy-core", + "ver": "0.16.0" }, "widgets_values": [ - "", - "pc game, console game, video game, cartoon, childish, ugly", - false, - "ltx-2.3-22b-dev.safetensors" + "scale to multiple", + 64, + "lanczos" ] }, { - "id": 5011, - "type": "LTXICLoRALoaderModelOnly", + "id": 5034, + "type": "LTXVDrawTracks", "pos": [ - -4318.549820950995, - 3445.471848819174 + -2968.1084242459665, + 4281.118077485808 ], "size": [ - 570.2243956508886, - 105.50935843305933 + 303.5371259505282, + 136 ], "flags": {}, - "order": 17, + "order": 24, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 13400 + "name": "tracks", + "type": "STRING", + "widget": { + "name": "tracks" + }, + "link": 13487 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 13516 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 13517 } ], "outputs": [ { - "name": "model", - "type": "MODEL", - "links": [ - 13401 - ] - }, - { - "name": "latent_downscale_factor", - "type": "FLOAT", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 13406, - 13538 + 13561, + 13562 ] } ], "properties": { - "Node name for S&R": "LTXICLoRALoaderModelOnly" + "Node name for S&R": "LTXVDrawTracks" }, "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", - 1 + "", + 512, + 512 ] }, { - "id": 2004, - "type": "LoadImage", + "id": 5044, + "type": "PrimitiveInt", "pos": [ - -4338.585268263583, - 3696.7241270024465 + -3963.2014376677803, + 4126.826430511793 ], "size": [ - 274.080078125, - 314.000244140625 + 270, + 82 ], "flags": {}, - "order": 8, + "order": 9, "mode": 0, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "INT", + "type": "INT", "links": [ - 11002, - 13454 + 13529, + 13537, + 13539 ] - }, - { - "name": "MASK", - "type": "MASK", - "links": [] } ], + "title": "number of frames", "properties": { + "Node name for S&R": "PrimitiveInt", "cnr_id": "comfy-core", - "ver": "0.3.56", - "Node name for S&R": "LoadImage" + "ver": "0.16.0" }, "widgets_values": [ - "motion_track_input.jpg", - "image" + 121, + "fixed" ] }, { - "id": 5049, - "type": "ResizeImageMaskNode", + "id": 5040, + "type": "LTXVSparseTrackEditor", "pos": [ - -3562.4493093043257, - 4289.866997980122 + -3258.7431122892694, + 4466.493610739298 ], "size": [ - 270, - 106 + 244.7251953125, + 210 ], "flags": {}, - "order": 21, + "order": 22, "mode": 0, "inputs": [ { - "name": "input", - "type": "IMAGE,MASK", - "link": 13536 + "name": "image", + "type": "IMAGE", + "link": 13558 + }, + { + "name": "points_to_sample", + "type": "INT", + "widget": { + "name": "points_to_sample" + }, + "link": 13537 } ], "outputs": [ { - "name": "resized", - "type": "IMAGE", + "name": "tracks", + "type": "STRING", "links": [ - 13514, - 13515 + 13487 ] } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" + "Node name for S&R": "LTXVSparseTrackEditor" }, "widgets_values": [ - "scale shorter dimension", - 544, - "lanczos" + "[[{\"x\":385.0759251206301,\"y\":238.92165891412267},{\"x\":226.6706827038015,\"y\":321.895716789677},{\"x\":118.7556948262006,\"y\":334.34620347590675},{\"x\":8.857468951125458,\"y\":294.56719637193584}],[{\"x\":550.4183052326947,\"y\":246.43019177413228},{\"x\":530.2019095759371,\"y\":493.9392986305124}]]", + "[[{\"x\":385,\"y\":239},{\"x\":383,\"y\":240},{\"x\":381,\"y\":241},{\"x\":378,\"y\":243},{\"x\":375,\"y\":244},{\"x\":373,\"y\":246},{\"x\":369,\"y\":248},{\"x\":366,\"y\":249},{\"x\":363,\"y\":251},{\"x\":359,\"y\":253},{\"x\":355,\"y\":255},{\"x\":352,\"y\":258},{\"x\":348,\"y\":260},{\"x\":344,\"y\":262},{\"x\":339,\"y\":265},{\"x\":335,\"y\":267},{\"x\":331,\"y\":270},{\"x\":326,\"y\":272},{\"x\":322,\"y\":275},{\"x\":317,\"y\":277},{\"x\":313,\"y\":280},{\"x\":308,\"y\":282},{\"x\":303,\"y\":285},{\"x\":299,\"y\":287},{\"x\":294,\"y\":290},{\"x\":289,\"y\":292},{\"x\":285,\"y\":295},{\"x\":280,\"y\":297},{\"x\":275,\"y\":300},{\"x\":271,\"y\":302},{\"x\":266,\"y\":304},{\"x\":262,\"y\":306},{\"x\":258,\"y\":308},{\"x\":253,\"y\":311},{\"x\":249,\"y\":312},{\"x\":245,\"y\":314},{\"x\":241,\"y\":316},{\"x\":237,\"y\":318},{\"x\":234,\"y\":319},{\"x\":230,\"y\":321},{\"x\":227,\"y\":322},{\"x\":223,\"y\":323},{\"x\":220,\"y\":324},{\"x\":217,\"y\":325},{\"x\":214,\"y\":326},{\"x\":211,\"y\":327},{\"x\":208,\"y\":328},{\"x\":205,\"y\":329},{\"x\":202,\"y\":330},{\"x\":199,\"y\":330},{\"x\":196,\"y\":331},{\"x\":193,\"y\":332},{\"x\":191,\"y\":332},{\"x\":188,\"y\":333},{\"x\":185,\"y\":334},{\"x\":183,\"y\":334},{\"x\":180,\"y\":334},{\"x\":177,\"y\":335},{\"x\":175,\"y\":335},{\"x\":172,\"y\":336},{\"x\":170,\"y\":336},{\"x\":167,\"y\":336},{\"x\":165,\"y\":336},{\"x\":162,\"y\":336},{\"x\":160,\"y\":337},{\"x\":157,\"y\":337},{\"x\":155,\"y\":337},{\"x\":152,\"y\":337},{\"x\":150,\"y\":337},{\"x\":147,\"y\":337},{\"x\":145,\"y\":337},{\"x\":142,\"y\":336},{\"x\":140,\"y\":336},{\"x\":137,\"y\":336},{\"x\":135,\"y\":336},{\"x\":132,\"y\":336},{\"x\":129,\"y\":336},{\"x\":127,\"y\":335},{\"x\":124,\"y\":335},{\"x\":121,\"y\":335},{\"x\":119,\"y\":334},{\"x\":116,\"y\":334},{\"x\":113,\"y\":333},{\"x\":110,\"y\":333},{\"x\":107,\"y\":332},{\"x\":104,\"y\":332},{\"x\":101,\"y\":331},{\"x\":98,\"y\":330},{\"x\":95,\"y\":329},{\"x\":92,\"y\":328},{\"x\":89,\"y\":327},{\"x\":86,\"y\":326},{\"x\":82,\"y\":325},{\"x\":79,\"y\":324},{\"x\":76,\"y\":323},{\"x\":73,\"y\":322},{\"x\":70,\"y\":320},{\"x\":66,\"y\":319},{\"x\":63,\"y\":318},{\"x\":60,\"y\":317},{\"x\":57,\"y\":315},{\"x\":54,\"y\":314},{\"x\":51,\"y\":313},{\"x\":48,\"y\":311},{\"x\":45,\"y\":310},{\"x\":42,\"y\":309},{\"x\":39,\"y\":308},{\"x\":37,\"y\":306},{\"x\":34,\"y\":305},{\"x\":31,\"y\":304},{\"x\":29,\"y\":303},{\"x\":26,\"y\":302},{\"x\":24,\"y\":301},{\"x\":22,\"y\":300},{\"x\":19,\"y\":299},{\"x\":17,\"y\":298},{\"x\":15,\"y\":297},{\"x\":14,\"y\":296},{\"x\":12,\"y\":296},{\"x\":10,\"y\":295},{\"x\":9,\"y\":295}],[{\"x\":550,\"y\":246},{\"x\":550,\"y\":248},{\"x\":550,\"y\":251},{\"x\":550,\"y\":253},{\"x\":550,\"y\":255},{\"x\":550,\"y\":257},{\"x\":549,\"y\":259},{\"x\":549,\"y\":261},{\"x\":549,\"y\":263},{\"x\":549,\"y\":265},{\"x\":549,\"y\":267},{\"x\":549,\"y\":269},{\"x\":548,\"y\":271},{\"x\":548,\"y\":273},{\"x\":548,\"y\":275},{\"x\":548,\"y\":277},{\"x\":548,\"y\":279},{\"x\":548,\"y\":281},{\"x\":547,\"y\":284},{\"x\":547,\"y\":286},{\"x\":547,\"y\":288},{\"x\":547,\"y\":290},{\"x\":547,\"y\":292},{\"x\":547,\"y\":294},{\"x\":546,\"y\":296},{\"x\":546,\"y\":298},{\"x\":546,\"y\":300},{\"x\":546,\"y\":302},{\"x\":546,\"y\":304},{\"x\":546,\"y\":306},{\"x\":545,\"y\":308},{\"x\":545,\"y\":310},{\"x\":545,\"y\":312},{\"x\":545,\"y\":314},{\"x\":545,\"y\":317},{\"x\":545,\"y\":319},{\"x\":544,\"y\":321},{\"x\":544,\"y\":323},{\"x\":544,\"y\":325},{\"x\":544,\"y\":327},{\"x\":544,\"y\":329},{\"x\":544,\"y\":331},{\"x\":543,\"y\":333},{\"x\":543,\"y\":335},{\"x\":543,\"y\":337},{\"x\":543,\"y\":339},{\"x\":543,\"y\":341},{\"x\":543,\"y\":343},{\"x\":542,\"y\":345},{\"x\":542,\"y\":347},{\"x\":542,\"y\":350},{\"x\":542,\"y\":352},{\"x\":542,\"y\":354},{\"x\":541,\"y\":356},{\"x\":541,\"y\":358},{\"x\":541,\"y\":360},{\"x\":541,\"y\":362},{\"x\":541,\"y\":364},{\"x\":541,\"y\":366},{\"x\":540,\"y\":368},{\"x\":540,\"y\":370},{\"x\":540,\"y\":372},{\"x\":540,\"y\":374},{\"x\":540,\"y\":376},{\"x\":540,\"y\":378},{\"x\":539,\"y\":380},{\"x\":539,\"y\":383},{\"x\":539,\"y\":385},{\"x\":539,\"y\":387},{\"x\":539,\"y\":389},{\"x\":539,\"y\":391},{\"x\":538,\"y\":393},{\"x\":538,\"y\":395},{\"x\":538,\"y\":397},{\"x\":538,\"y\":399},{\"x\":538,\"y\":401},{\"x\":538,\"y\":403},{\"x\":537,\"y\":405},{\"x\":537,\"y\":407},{\"x\":537,\"y\":409},{\"x\":537,\"y\":411},{\"x\":537,\"y\":413},{\"x\":537,\"y\":416},{\"x\":536,\"y\":418},{\"x\":536,\"y\":420},{\"x\":536,\"y\":422},{\"x\":536,\"y\":424},{\"x\":536,\"y\":426},{\"x\":536,\"y\":428},{\"x\":535,\"y\":430},{\"x\":535,\"y\":432},{\"x\":535,\"y\":434},{\"x\":535,\"y\":436},{\"x\":535,\"y\":438},{\"x\":535,\"y\":440},{\"x\":534,\"y\":442},{\"x\":534,\"y\":444},{\"x\":534,\"y\":447},{\"x\":534,\"y\":449},{\"x\":534,\"y\":451},{\"x\":534,\"y\":453},{\"x\":533,\"y\":455},{\"x\":533,\"y\":457},{\"x\":533,\"y\":459},{\"x\":533,\"y\":461},{\"x\":533,\"y\":463},{\"x\":533,\"y\":465},{\"x\":532,\"y\":467},{\"x\":532,\"y\":469},{\"x\":532,\"y\":471},{\"x\":532,\"y\":473},{\"x\":532,\"y\":475},{\"x\":532,\"y\":477},{\"x\":531,\"y\":480},{\"x\":531,\"y\":482},{\"x\":531,\"y\":484},{\"x\":531,\"y\":486},{\"x\":531,\"y\":488},{\"x\":531,\"y\":490},{\"x\":530,\"y\":492},{\"x\":530,\"y\":494}]]", + 121, + "" ] }, { - "id": 2483, - "type": "CLIPTextEncode", + "id": 5049, + "type": "ResizeImageMaskNode", "pos": [ - -3177.88687035676, - 3450.2955325886337 + -4319.165560684735, + 3888.037895383585 ], "size": [ - 307.2346496582031, - 204.2556610107422 + 270, + 106 ], "flags": {}, - "order": 13, + "order": 16, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 13459 + "name": "input", + "type": "IMAGE,MASK", + "link": 13563 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", - "slot_index": 0, + "name": "resized", + "type": "IMAGE", "links": [ - 7065 + 13557 ] } ], - "title": "CLIP Text Encode (Positive Prompt)", "properties": { + "Node name for S&R": "ResizeImageMaskNode", "cnr_id": "comfy-core", - "ver": "0.3.28", - "Node name for S&R": "CLIPTextEncode" + "ver": "0.16.0" }, "widgets_values": [ - "Man on a small bycicle being chased by a police car. The sirens are blaring and the crowd of bystanders is cheering loudly. As he is pedaling away on the bike, he looks back at the police car and shouts in a taunting tone: \"you can't catch me!\" and waving his fist in the air. He then pedals away on his bike." - ], - "color": "#232", - "bgcolor": "#353" + "scale shorter dimension", + 544, + "lanczos" + ] }, { - "id": 5040, - "type": "LTXVSparseTrackEditor", + "id": 5056, + "type": "SimpleMath+", "pos": [ - -3258.7431122892694, - 4466.493610739298 + -3980.8264809223765, + 3729.980907194409 ], "size": [ - 244.7251953125, - 210 + 210, + 98 ], "flags": {}, - "order": 23, + "order": 20, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 13514 + "name": "a", + "shape": 7, + "type": "*", + "link": 13538 }, { - "name": "points_to_sample", - "type": "INT", - "widget": { - "name": "points_to_sample" - }, - "link": 13537 + "name": "b", + "shape": 7, + "type": "*", + "link": null + }, + { + "name": "c", + "shape": 7, + "type": "*", + "link": null } ], "outputs": [ { - "name": "tracks", - "type": "STRING", + "name": "INT", + "type": "INT", "links": [ - 13487 + 13535 ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null } ], "properties": { - "Node name for S&R": "LTXVSparseTrackEditor" + "Node name for S&R": "SimpleMath+" }, "widgets_values": [ - "[[{\"x\":385.0759251206301,\"y\":238.92165891412267},{\"x\":226.6706827038015,\"y\":321.895716789677},{\"x\":118.7556948262006,\"y\":334.34620347590675},{\"x\":8.857468951125458,\"y\":294.56719637193584}],[{\"x\":598.4764685213725,\"y\":240.60791202491237},{\"x\":549.1621742249671,\"y\":544}]]", - "[[{\"x\":385,\"y\":239},{\"x\":383,\"y\":240},{\"x\":381,\"y\":241},{\"x\":378,\"y\":243},{\"x\":375,\"y\":244},{\"x\":373,\"y\":246},{\"x\":369,\"y\":248},{\"x\":366,\"y\":249},{\"x\":363,\"y\":251},{\"x\":359,\"y\":253},{\"x\":355,\"y\":255},{\"x\":352,\"y\":258},{\"x\":348,\"y\":260},{\"x\":344,\"y\":262},{\"x\":339,\"y\":265},{\"x\":335,\"y\":267},{\"x\":331,\"y\":270},{\"x\":326,\"y\":272},{\"x\":322,\"y\":275},{\"x\":317,\"y\":277},{\"x\":313,\"y\":280},{\"x\":308,\"y\":282},{\"x\":303,\"y\":285},{\"x\":299,\"y\":287},{\"x\":294,\"y\":290},{\"x\":289,\"y\":292},{\"x\":285,\"y\":295},{\"x\":280,\"y\":297},{\"x\":275,\"y\":300},{\"x\":271,\"y\":302},{\"x\":266,\"y\":304},{\"x\":262,\"y\":306},{\"x\":258,\"y\":308},{\"x\":253,\"y\":311},{\"x\":249,\"y\":312},{\"x\":245,\"y\":314},{\"x\":241,\"y\":316},{\"x\":237,\"y\":318},{\"x\":234,\"y\":319},{\"x\":230,\"y\":321},{\"x\":227,\"y\":322},{\"x\":223,\"y\":323},{\"x\":220,\"y\":324},{\"x\":217,\"y\":325},{\"x\":214,\"y\":326},{\"x\":211,\"y\":327},{\"x\":208,\"y\":328},{\"x\":205,\"y\":329},{\"x\":202,\"y\":330},{\"x\":199,\"y\":330},{\"x\":196,\"y\":331},{\"x\":193,\"y\":332},{\"x\":191,\"y\":332},{\"x\":188,\"y\":333},{\"x\":185,\"y\":334},{\"x\":183,\"y\":334},{\"x\":180,\"y\":334},{\"x\":177,\"y\":335},{\"x\":175,\"y\":335},{\"x\":172,\"y\":336},{\"x\":170,\"y\":336},{\"x\":167,\"y\":336},{\"x\":165,\"y\":336},{\"x\":162,\"y\":336},{\"x\":160,\"y\":337},{\"x\":157,\"y\":337},{\"x\":155,\"y\":337},{\"x\":152,\"y\":337},{\"x\":150,\"y\":337},{\"x\":147,\"y\":337},{\"x\":145,\"y\":337},{\"x\":142,\"y\":336},{\"x\":140,\"y\":336},{\"x\":137,\"y\":336},{\"x\":135,\"y\":336},{\"x\":132,\"y\":336},{\"x\":129,\"y\":336},{\"x\":127,\"y\":335},{\"x\":124,\"y\":335},{\"x\":121,\"y\":335},{\"x\":119,\"y\":334},{\"x\":116,\"y\":334},{\"x\":113,\"y\":333},{\"x\":110,\"y\":333},{\"x\":107,\"y\":332},{\"x\":104,\"y\":332},{\"x\":101,\"y\":331},{\"x\":98,\"y\":330},{\"x\":95,\"y\":329},{\"x\":92,\"y\":328},{\"x\":89,\"y\":327},{\"x\":86,\"y\":326},{\"x\":82,\"y\":325},{\"x\":79,\"y\":324},{\"x\":76,\"y\":323},{\"x\":73,\"y\":322},{\"x\":70,\"y\":320},{\"x\":66,\"y\":319},{\"x\":63,\"y\":318},{\"x\":60,\"y\":317},{\"x\":57,\"y\":315},{\"x\":54,\"y\":314},{\"x\":51,\"y\":313},{\"x\":48,\"y\":311},{\"x\":45,\"y\":310},{\"x\":42,\"y\":309},{\"x\":39,\"y\":308},{\"x\":37,\"y\":306},{\"x\":34,\"y\":305},{\"x\":31,\"y\":304},{\"x\":29,\"y\":303},{\"x\":26,\"y\":302},{\"x\":24,\"y\":301},{\"x\":22,\"y\":300},{\"x\":19,\"y\":299},{\"x\":17,\"y\":298},{\"x\":15,\"y\":297},{\"x\":14,\"y\":296},{\"x\":12,\"y\":296},{\"x\":10,\"y\":295},{\"x\":9,\"y\":295}],[{\"x\":598,\"y\":241},{\"x\":598,\"y\":243},{\"x\":598,\"y\":246},{\"x\":597,\"y\":248},{\"x\":597,\"y\":251},{\"x\":596,\"y\":253},{\"x\":596,\"y\":256},{\"x\":596,\"y\":258},{\"x\":595,\"y\":261},{\"x\":595,\"y\":263},{\"x\":594,\"y\":266},{\"x\":594,\"y\":268},{\"x\":594,\"y\":271},{\"x\":593,\"y\":273},{\"x\":593,\"y\":276},{\"x\":592,\"y\":279},{\"x\":592,\"y\":281},{\"x\":591,\"y\":284},{\"x\":591,\"y\":286},{\"x\":591,\"y\":289},{\"x\":590,\"y\":291},{\"x\":590,\"y\":294},{\"x\":589,\"y\":296},{\"x\":589,\"y\":299},{\"x\":589,\"y\":301},{\"x\":588,\"y\":304},{\"x\":588,\"y\":306},{\"x\":587,\"y\":309},{\"x\":587,\"y\":311},{\"x\":587,\"y\":314},{\"x\":586,\"y\":316},{\"x\":586,\"y\":319},{\"x\":585,\"y\":322},{\"x\":585,\"y\":324},{\"x\":585,\"y\":327},{\"x\":584,\"y\":329},{\"x\":584,\"y\":332},{\"x\":583,\"y\":334},{\"x\":583,\"y\":337},{\"x\":582,\"y\":339},{\"x\":582,\"y\":342},{\"x\":582,\"y\":344},{\"x\":581,\"y\":347},{\"x\":581,\"y\":349},{\"x\":580,\"y\":352},{\"x\":580,\"y\":354},{\"x\":580,\"y\":357},{\"x\":579,\"y\":359},{\"x\":579,\"y\":362},{\"x\":578,\"y\":364},{\"x\":578,\"y\":367},{\"x\":578,\"y\":370},{\"x\":577,\"y\":372},{\"x\":577,\"y\":375},{\"x\":576,\"y\":377},{\"x\":576,\"y\":380},{\"x\":575,\"y\":382},{\"x\":575,\"y\":385},{\"x\":575,\"y\":387},{\"x\":574,\"y\":390},{\"x\":574,\"y\":392},{\"x\":573,\"y\":395},{\"x\":573,\"y\":397},{\"x\":573,\"y\":400},{\"x\":572,\"y\":402},{\"x\":572,\"y\":405},{\"x\":571,\"y\":407},{\"x\":571,\"y\":410},{\"x\":571,\"y\":413},{\"x\":570,\"y\":415},{\"x\":570,\"y\":418},{\"x\":569,\"y\":420},{\"x\":569,\"y\":423},{\"x\":568,\"y\":425},{\"x\":568,\"y\":428},{\"x\":568,\"y\":430},{\"x\":567,\"y\":433},{\"x\":567,\"y\":435},{\"x\":566,\"y\":438},{\"x\":566,\"y\":440},{\"x\":566,\"y\":443},{\"x\":565,\"y\":445},{\"x\":565,\"y\":448},{\"x\":564,\"y\":450},{\"x\":564,\"y\":453},{\"x\":564,\"y\":456},{\"x\":563,\"y\":458},{\"x\":563,\"y\":461},{\"x\":562,\"y\":463},{\"x\":562,\"y\":466},{\"x\":561,\"y\":468},{\"x\":561,\"y\":471},{\"x\":561,\"y\":473},{\"x\":560,\"y\":476},{\"x\":560,\"y\":478},{\"x\":559,\"y\":481},{\"x\":559,\"y\":483},{\"x\":559,\"y\":486},{\"x\":558,\"y\":488},{\"x\":558,\"y\":491},{\"x\":557,\"y\":493},{\"x\":557,\"y\":496},{\"x\":557,\"y\":498},{\"x\":556,\"y\":501},{\"x\":556,\"y\":504},{\"x\":555,\"y\":506},{\"x\":555,\"y\":509},{\"x\":555,\"y\":511},{\"x\":554,\"y\":514},{\"x\":554,\"y\":516},{\"x\":553,\"y\":519},{\"x\":553,\"y\":521},{\"x\":552,\"y\":524},{\"x\":552,\"y\":526},{\"x\":552,\"y\":529},{\"x\":551,\"y\":531},{\"x\":551,\"y\":534},{\"x\":550,\"y\":536},{\"x\":550,\"y\":539},{\"x\":550,\"y\":541},{\"x\":549,\"y\":544}]]", - 121, - "" + "a*32" ] }, { - "id": 5044, - "type": "PrimitiveInt", + "id": 5059, + "type": "LTXFloatToInt", "pos": [ - -4026.5271252945963, - 4130.092054089528 + -2456.9802402950495, + 3735.182367880839 ], "size": [ 270, - 82 + 58 ], - "flags": {}, - "order": 9, + "flags": { + "collapsed": true + }, + "order": 15, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "a", + "type": "FLOAT", + "widget": { + "name": "a" + }, + "link": 13548 + } + ], "outputs": [ { "name": "INT", "type": "INT", "links": [ - 13529, - 13537, - 13539 + 13547 ] } ], - "title": "number of frames", "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveInt" + "Node name for S&R": "LTXFloatToInt" }, "widgets_values": [ - 121, - "fixed" + 0 ] } ], @@ -1950,14 +1820,6 @@ 1, "CONDITIONING" ], - [ - 9768, - 3336, - 0, - 3159, - 1, - "IMAGE" - ], [ 11002, 2004, @@ -2006,14 +1868,6 @@ 0, "NOISE" ], - [ - 13107, - 4851, - 0, - 4849, - 0, - "IMAGE" - ], [ 13108, 4848, @@ -2070,14 +1924,6 @@ 4, "LATENT" ], - [ - 13348, - 3940, - 2, - 4851, - 1, - "VAE" - ], [ 13363, 4829, @@ -2166,14 +2012,6 @@ 2, "LATENT" ], - [ - 13412, - 5013, - 2, - 4851, - 0, - "LATENT" - ], [ 13413, 5012, @@ -2206,22 +2044,6 @@ 0, "LATENT" ], - [ - 13454, - 2004, - 0, - 5018, - 0, - "IMAGE" - ], - [ - 13455, - 5018, - 0, - 3336, - 0, - "IMAGE" - ], [ 13457, 5022, @@ -2254,14 +2076,6 @@ 0, "CLIP" ], - [ - 13462, - 5024, - 0, - 3980, - 2, - "INT" - ], [ 13463, 5025, @@ -2294,30 +2108,6 @@ 2, "FLOAT" ], - [ - 13506, - 5045, - 0, - 5024, - 0, - "FLOAT" - ], - [ - 13514, - 5049, - 0, - 5040, - 0, - "IMAGE" - ], - [ - 13515, - 5049, - 0, - 5050, - 0, - "IMAGE" - ], [ 13516, 5050, @@ -2343,110 +2133,177 @@ "VIDEO" ], [ - 13526, - 5034, + 13529, + 5044, + 0, + 3059, + 2, + "INT" + ], + [ + 13535, + 5056, 0, 5053, + 1, + "INT" + ], + [ + 13537, + 5044, 0, - "IMAGE" + 5040, + 1, + "INT" ], [ - 13527, - 5053, + 13538, + 5011, + 1, + 5056, + 0, + "FLOAT" + ], + [ + 13539, + 5044, + 0, + 3980, + 1, + "INT" + ], + [ + 13540, + 5045, 0, 5051, + 2, + "FLOAT" + ], + [ + 13544, + 3940, + 2, + 5058, + 0, + "VAE" + ], + [ + 13545, + 5013, + 2, + 5058, + 1, + "LATENT" + ], + [ + 13546, + 5058, + 0, + 4849, 0, "IMAGE" ], [ - 13529, - 5044, + 13547, + 5059, 0, - 3059, + 3980, 2, "INT" ], [ - 13530, - 5053, + 13548, + 5045, 0, - 5054, + 5059, 0, - "IMAGE" + "FLOAT" ], [ - 13531, - 5054, + 13554, + 5050, 0, 3059, 0, "INT" ], [ - 13532, - 5054, + 13555, + 5050, 1, 3059, 1, "INT" ], [ - 13535, - 5056, + 13557, + 5049, 0, 5053, - 1, - "INT" + 0, + "IMAGE" ], [ - 13536, - 5018, + 13558, + 5053, 0, - 5049, + 5040, 0, "IMAGE" ], [ - 13537, - 5044, + 13559, + 5053, 0, - 5040, - 1, - "INT" + 5050, + 0, + "IMAGE" ], [ - 13538, - 5011, - 1, - 5056, + 13560, + 5053, 0, - "FLOAT" + 3159, + 1, + "IMAGE" ], [ - 13539, - 5044, + 13561, + 5034, 0, - 3980, - 1, - "INT" + 5012, + 4, + "IMAGE" ], [ - 13540, - 5045, + 13562, + 5034, 0, 5051, - 2, - "FLOAT" + 0, + "IMAGE" ], [ - 13541, - 5053, + 13563, + 2004, + 0, + 5049, 0, - 5012, - 4, "IMAGE" ] ], + "floatingLinks": [ + { + "id": 2, + "origin_id": 3940, + "origin_slot": 2, + "target_id": -1, + "target_slot": -1, + "type": "VAE", + "parentId": 50 + } + ], "groups": [ { "id": 54, @@ -2486,10 +2343,9 @@ 5012, 4528, 3980, + 3059, 3159, - 3336, - 5024, - 3059 + 5059 ] }, { @@ -2507,25 +2363,27 @@ "nodes": [ 4010, 3940, - 4922, - 5011 + 5011, + 4922 ] }, { "id": 119, "title": "Load Image", "bounding": [ - -4348.585268263583, - 3621.2505697186944, - 595.9867345189423, - 399.47380142437726 + -4661.3774288967725, + 3636.372743789247, + 964.5481930456754, + 418.7244435127868 ], "color": "#3f789e", "font_size": 24, "flags": {}, "nodes": [ - 5018, - 2004 + 2004, + 5053, + 5049, + 5056 ] }, { @@ -2564,33 +2422,29 @@ "font_size": 24, "flags": {}, "nodes": [ - 4848, + 4852, + 5058, 4849, - 4851, - 4852 + 4848 ] }, { "id": 161, "title": "Sparse track conditioning", "bounding": [ - -3572.4493093043257, - 4208.22724645523, - 1271.1856121334677, - 719.9724946478833 + -3268.7431122892694, + 4202.496714479671, + 967.4794151184115, + 602.047893730031 ], "color": "#A88", "font_size": 24, "flags": {}, "nodes": [ 5052, - 5034, - 5056, - 5050, - 5054, 5051, - 5053, - 5049, + 5050, + 5034, 5040 ] } @@ -2598,13 +2452,13 @@ "config": {}, "extra": { "ds": { - "scale": 0.6775277350075355, + "scale": 1.5863092971714992, "offset": [ - 5133.26350314015, - -2908.873355031285 + 3123.2022059227766, + -3492.7647858157666 ] }, - "frontendVersion": "1.39.14", + "frontendVersion": "1.42.8", "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, @@ -2642,22 +2496,22 @@ { "id": 4, "pos": [ - -3696.99605232798, - 2989.3062564189877 + -3599.4972941534356, + 3001.252980329046 ], "linkIds": [ - 13455 + 13560 ] }, { "id": 5, "parentId": 4, "pos": [ - -2595.258828073339, - 2981.1444036460034 + -2341.137896218054, + 2989.4108458192154 ], "linkIds": [ - 13455 + 13560 ] }, { @@ -2702,8 +2556,8 @@ ], "linkIds": [ 13279, - 13348, - 13405 + 13405, + 13544 ] }, { @@ -2715,8 +2569,8 @@ ], "linkIds": [ 13279, - 13348, - 13405 + 13405, + 13544 ] }, { @@ -2728,7 +2582,7 @@ ], "linkIds": [ 13505, - 13506 + 13548 ] }, { @@ -2802,8 +2656,11 @@ 2687.78688781277 ], "linkIds": [ - 13348 - ] + 13544 + ], + "floating": { + "slotType": "output" + } }, { "id": 56, @@ -2835,8 +2692,8 @@ 2681.1981337977513 ], "linkIds": [ - 13348, - 13405 + 13405, + 13544 ] }, { @@ -2950,21 +2807,11 @@ 13445 ] }, - { - "id": 82, - "pos": [ - -3018.9305095811133, - 4427.76869728854 - ], - "linkIds": [ - 13348 - ] - }, { "id": 84, "pos": [ - -3591.3352929546827, - 4059.1045172937847 + -3709.682574416841, + 3598.5867001126453 ], "linkIds": [ 13538 @@ -2973,8 +2820,8 @@ { "id": 86, "pos": [ - -3267.8746582904632, - 4149.207787964283 + -3341.3930557584317, + 4150.067957924692 ], "linkIds": [ 13529, @@ -2986,8 +2833,8 @@ "id": 87, "parentId": 84, "pos": [ - -3024.2860496108874, - 4072.364006525338 + -3897.9877885044057, + 3612.494197466329 ], "linkIds": [ 13538 @@ -3012,8 +2859,8 @@ ], "linkIds": [ 13505, - 13506, - 13540 + 13540, + 13548 ] }, { @@ -3023,7 +2870,7 @@ 4039.4171119960906 ], "linkIds": [ - 13541 + 13561 ] }, { @@ -3034,7 +2881,7 @@ 4031.9365324797327 ], "linkIds": [ - 13541 + 13561 ] } ], @@ -3055,10 +2902,6 @@ "id": 13302, "parentId": 34 }, - { - "id": 13348, - "parentId": 50 - }, { "id": 13401, "parentId": 3 @@ -3099,18 +2942,10 @@ "id": 13445, "parentId": 80 }, - { - "id": 13455, - "parentId": 5 - }, { "id": 13505, "parentId": 43 }, - { - "id": 13506, - "parentId": 23 - }, { "id": 13529, "parentId": 70 @@ -3132,7 +2967,19 @@ "parentId": 89 }, { - "id": 13541, + "id": 13544, + "parentId": 50 + }, + { + "id": 13548, + "parentId": 23 + }, + { + "id": 13560, + "parentId": 5 + }, + { + "id": 13561, "parentId": 91 } ] diff --git a/example_workflows/2.3/LTX-2.3_ICLoRA_Union_Control_Distilled.json b/example_workflows/2.3/LTX-2.3_ICLoRA_Union_Control_Distilled.json index e4c75d3..b4b7112 100644 --- a/example_workflows/2.3/LTX-2.3_ICLoRA_Union_Control_Distilled.json +++ b/example_workflows/2.3/LTX-2.3_ICLoRA_Union_Control_Distilled.json @@ -1,216 +1,9 @@ { "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", "revision": 0, - "last_node_id": 5059, - "last_link_id": 13531, + "last_node_id": 5066, + "last_link_id": 13547, "nodes": [ - { - "id": 4848, - "type": "LTXVAudioVAEDecode", - "pos": [ - -173.58219357128075, - 3350.36209031175 - ], - "size": [ - 242.46932983398438, - 46 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13445 - }, - { - "name": "audio_vae", - "type": "VAE", - "link": 13275 - } - ], - "outputs": [ - { - "name": "Audio", - "type": "AUDIO", - "links": [ - 13108 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 4849, - "type": "CreateVideo", - "pos": [ - 121.15941156244612, - 3147.289573042273 - ], - "size": [ - 270, - 102 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13107 - }, - { - "name": "audio", - "shape": 7, - "type": "AUDIO", - "link": 13108 - }, - { - "name": "fps", - "type": "FLOAT", - "widget": { - "name": "fps" - }, - "link": 13429 - } - ], - "outputs": [ - { - "name": "VIDEO", - "type": "VIDEO", - "links": [ - 13112 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CreateVideo" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 4851, - "type": "VAEDecodeTiled", - "pos": [ - -197.94059482608304, - 3147.602739745794 - ], - "size": [ - 270, - 150 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13412 - }, - { - "name": "vae", - "type": "VAE", - "link": 13348 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13107 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "VAEDecodeTiled" - }, - "widgets_values": [ - 512, - 64, - 512, - 4 - ] - }, - { - "id": 4831, - "type": "KSamplerSelect", - "pos": [ - -1123.2802485192926, - 3459.9479913843866 - ], - "size": [ - 270, - 74 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "SAMPLER", - "type": "SAMPLER", - "links": [ - 13090 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "KSamplerSelect" - }, - "widgets_values": [ - "euler_ancestral_cfg_pp" - ] - }, - { - "id": 4852, - "type": "SaveVideo", - "pos": [ - 130.87073016888837, - 3308.891084732692 - ], - "size": [ - 523.0556530433919, - 506.3562313794205 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "video", - "type": "VIDEO", - "link": 13112 - } - ], - "outputs": [], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1" - }, - "widgets_values": [ - "output", - "auto", - "auto" - ] - }, { "id": 1241, "type": "LTXVConditioning", @@ -264,9 +57,9 @@ } ], "properties": { + "Node name for S&R": "LTXVConditioning", "cnr_id": "comfy-core", - "ver": "0.3.28", - "Node name for S&R": "LTXVConditioning" + "ver": "0.3.28" }, "widgets_values": [ 24 @@ -284,7 +77,7 @@ 282 ], "flags": {}, - "order": 32, + "order": 33, "mode": 0, "inputs": [ { @@ -371,7 +164,7 @@ 46 ], "flags": {}, - "order": 34, + "order": 35, "mode": 0, "inputs": [ { @@ -395,9 +188,9 @@ } ], "properties": { + "Node name for S&R": "LTXVConcatAVLatent", "cnr_id": "comfy-core", - "ver": "0.10.0", - "Node name for S&R": "LTXVConcatAVLatent" + "ver": "0.10.0" }, "widgets_values": [] }, @@ -415,7 +208,7 @@ "flags": { "collapsed": false }, - "order": 30, + "order": 31, "mode": 0, "inputs": [ { @@ -437,7 +230,7 @@ "widget": { "name": "frame_rate" }, - "link": 13462 + "link": 13545 } ], "outputs": [ @@ -450,9 +243,9 @@ } ], "properties": { + "Node name for S&R": "LTXVEmptyLatentAudio", "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVEmptyLatentAudio" + "ver": "0.3.64" }, "widgets_values": [ 97, @@ -460,63 +253,6 @@ 1 ] }, - { - "id": 3159, - "type": "LTXVImgToVideoConditionOnly", - "pos": [ - -2144.970291670966, - 3352.7872806168716 - ], - "size": [ - 313.2623046875, - 142.859507731343 - ], - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "vae", - "type": "VAE", - "link": 13279 - }, - { - "name": "image", - "type": "IMAGE", - "link": 9768 - }, - { - "name": "latent", - "type": "LATENT", - "link": 11401 - }, - { - "name": "bypass", - "shape": 7, - "type": "BOOLEAN", - "widget": { - "name": "bypass" - }, - "link": 13456 - } - ], - "outputs": [ - { - "name": "latent", - "type": "LATENT", - "links": [ - 13402 - ] - } - ], - "properties": { - "Node name for S&R": "LTXVImgToVideoConditionOnly" - }, - "widgets_values": [ - 0.7, - false - ] - }, { "id": 3059, "type": "EmptyLTXVLatentVideo", @@ -529,7 +265,7 @@ 194 ], "flags": {}, - "order": 29, + "order": 30, "mode": 0, "inputs": [ { @@ -567,9 +303,9 @@ } ], "properties": { + "Node name for S&R": "EmptyLTXVLatentVideo", "cnr_id": "comfy-core", - "ver": "0.3.43", - "Node name for S&R": "EmptyLTXVLatentVideo" + "ver": "0.3.43" }, "widgets_values": [ 960, @@ -590,7 +326,7 @@ 106 ], "flags": {}, - "order": 35, + "order": 36, "mode": 0, "inputs": [ { @@ -634,9 +370,9 @@ } ], "properties": { + "Node name for S&R": "SamplerCustomAdvanced", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "SamplerCustomAdvanced" + "ver": "0.14.1" }, "widgets_values": [] }, @@ -652,7 +388,7 @@ 100.83333333333334 ], "flags": {}, - "order": 37, + "order": 38, "mode": 0, "inputs": [ { @@ -686,14 +422,14 @@ "name": "latent", "type": "LATENT", "links": [ - 13412 + 13542 ] } ], "properties": { + "Node name for S&R": "LTXVCropGuides", "cnr_id": "comfy-core", - "ver": "0.3.75", - "Node name for S&R": "LTXVCropGuides" + "ver": "0.3.75" }, "widgets_values": [] }, @@ -709,7 +445,7 @@ 46 ], "flags": {}, - "order": 36, + "order": 37, "mode": 0, "inputs": [ { @@ -735,9 +471,9 @@ } ], "properties": { + "Node name for S&R": "LTXVSeparateAVLatent", "cnr_id": "comfy-core", - "ver": "0.10.0", - "Node name for S&R": "LTXVSeparateAVLatent" + "ver": "0.10.0" }, "widgets_values": [] }, @@ -745,8 +481,8 @@ "id": 4986, "type": "DWPreprocessor", "pos": [ - -3252.975744576779, - 4824.857939017462 + -3250.1714331148514, + 4869.082253106716 ], "size": [ 294.72265625, @@ -755,7 +491,7 @@ "flags": { "collapsed": false }, - "order": 26, + "order": 25, "mode": 0, "inputs": [ { @@ -801,7 +537,7 @@ 79.30435270514249 ], "flags": {}, - "order": 1, + "order": 0, "mode": 0, "inputs": [], "outputs": [ @@ -815,9 +551,9 @@ } ], "properties": { + "Node name for S&R": "LTXVAudioVAELoader", "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAELoader" + "ver": "0.3.64" }, "widgets_values": [ "ltx-2.3-22b-dev.safetensors" @@ -835,7 +571,7 @@ 108.51948797992713 ], "flags": {}, - "order": 2, + "order": 1, "mode": 0, "inputs": [], "outputs": [ @@ -856,60 +592,20 @@ "type": "VAE", "links": [ 13279, - 13348, - 13405 + 13405, + 13543 ] } ], "properties": { + "Node name for S&R": "CheckpointLoaderSimple", "cnr_id": "comfy-core", - "ver": "0.3.56", - "Node name for S&R": "CheckpointLoaderSimple" + "ver": "0.3.56" }, "widgets_values": [ "ltx-2.3-22b-dev.safetensors" ] }, - { - "id": 4922, - "type": "LoraLoaderModelOnly", - "pos": [ - -4204.024401614721, - 3261.100838617218 - ], - "size": [ - 454.14193097539646, - 128.44311555561626 - ], - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 13217 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 13400 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384.safetensors", - 0.5 - ] - }, { "id": 5021, "type": "GemmaAPITextEncode", @@ -922,7 +618,7 @@ 160 ], "flags": {}, - "order": 13, + "order": 14, "mode": 4, "inputs": [ { @@ -964,7 +660,7 @@ 58 ], "flags": {}, - "order": 3, + "order": 2, "mode": 4, "inputs": [], "outputs": [ @@ -979,9 +675,9 @@ ], "title": "LTX API KEY", "properties": { + "Node name for S&R": "PrimitiveString", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "PrimitiveString" + "ver": "0.14.1" }, "widgets_values": [ "" @@ -999,7 +695,7 @@ 122 ], "flags": {}, - "order": 4, + "order": 3, "mode": 0, "inputs": [], "outputs": [ @@ -1013,9 +709,9 @@ } ], "properties": { + "Node name for S&R": "LTXAVTextEncoderLoader", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LTXAVTextEncoderLoader" + "ver": "0.14.1" }, "widgets_values": [ "comfy_gemma_3_12B_it.safetensors", @@ -1035,7 +731,7 @@ 120.13641397900165 ], "flags": {}, - "order": 15, + "order": 16, "mode": 0, "inputs": [ { @@ -1056,9 +752,9 @@ ], "title": "CLIP Text Encode (Negative Prompt)", "properties": { + "Node name for S&R": "CLIPTextEncode", "cnr_id": "comfy-core", - "ver": "0.3.28", - "Node name for S&R": "CLIPTextEncode" + "ver": "0.3.28" }, "widgets_values": [ "pc game, console game, video game, cartoon, childish, ugly" @@ -1066,89 +762,6 @@ "color": "#322", "bgcolor": "#533" }, - { - "id": 3336, - "type": "LTXVPreprocess", - "pos": [ - -2474.088851384863, - 3338.3377499968506 - ], - "size": [ - 270, - 74 - ], - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 13493 - } - ], - "outputs": [ - { - "name": "output_image", - "type": "IMAGE", - "links": [ - 9768 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.60", - "Node name for S&R": "LTXVPreprocess" - }, - "widgets_values": [ - 18 - ] - }, - { - "id": 5024, - "type": "CM_FloatToInt", - "pos": [ - -2333.6648613251946, - 3719.9927171020036 - ], - "size": [ - 270, - 58 - ], - "flags": { - "collapsed": true - }, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "a", - "type": "FLOAT", - "widget": { - "name": "a" - }, - "link": 13461 - } - ], - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 13462 - ] - } - ], - "properties": { - "aux_id": "evanspearman/ComfyMath", - "ver": "c01177221c31b8e5fbc062778fc8254aeb541638", - "Node name for S&R": "CM_FloatToInt" - }, - "widgets_values": [ - 0 - ] - }, { "id": 4828, "type": "CFGGuider", @@ -1161,7 +774,7 @@ 114 ], "flags": {}, - "order": 33, + "order": 34, "mode": 0, "inputs": [ { @@ -1190,9 +803,9 @@ } ], "properties": { + "Node name for S&R": "CFGGuider", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CFGGuider" + "ver": "0.14.1" }, "widgets_values": [ 1 @@ -1210,7 +823,7 @@ 90 ], "flags": {}, - "order": 17, + "order": 18, "mode": 0, "inputs": [ { @@ -1238,60 +851,17 @@ "links": [ 13429, 13443, - 13461 + 13546 ] } ], "properties": { + "Node name for S&R": "GetVideoComponents", "cnr_id": "comfy-core", - "ver": "0.3.75", - "Node name for S&R": "GetVideoComponents" + "ver": "0.3.75" }, "widgets_values": [] }, - { - "id": 5026, - "type": "ResizeImageMaskNode", - "pos": [ - -3611.429041941159, - 4356.367775260842 - ], - "size": [ - 270, - 106 - ], - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "input", - "type": "IMAGE,MASK", - "link": 13464 - } - ], - "outputs": [ - { - "name": "resized", - "type": "IMAGE", - "links": [ - 13472, - 13473, - 13474 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" - }, - "widgets_values": [ - "scale shorter dimension", - 544, - "lanczos" - ] - }, { "id": 5028, "type": "ResizeImageMaskNode", @@ -1310,7 +880,7 @@ { "name": "input", "type": "IMAGE,MASK", - "link": 13531 + "link": 13541 }, { "name": "resize_type.multiple", @@ -1332,9 +902,9 @@ } ], "properties": { + "Node name for S&R": "ResizeImageMaskNode", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" + "ver": "0.16.0" }, "widgets_values": [ "scale to multiple", @@ -1354,7 +924,7 @@ 136 ], "flags": {}, - "order": 28, + "order": 29, "mode": 0, "inputs": [ { @@ -1388,9 +958,9 @@ } ], "properties": { + "Node name for S&R": "GetImageSize", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "GetImageSize" + "ver": "0.16.0" }, "widgets_values": [] }, @@ -1406,7 +976,7 @@ 67.3573576655076 ], "flags": {}, - "order": 5, + "order": 4, "mode": 0, "inputs": [], "outputs": [ @@ -1419,9 +989,9 @@ } ], "properties": { + "Node name for S&R": "ManualSigmas", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "ManualSigmas" + "ver": "0.14.1" }, "widgets_values": [ "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0" @@ -1482,47 +1052,6 @@ "a*32" ] }, - { - "id": 5035, - "type": "ResizeImageMaskNode", - "pos": [ - -4032.2401448287073, - 3699.4287382559205 - ], - "size": [ - 270, - 106 - ], - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "input", - "type": "IMAGE,MASK", - "link": 13492 - } - ], - "outputs": [ - { - "name": "resized", - "type": "IMAGE", - "links": [ - 13493 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" - }, - "widgets_values": [ - "scale longer dimension", - 1536, - "lanczos" - ] - }, { "id": 5020, "type": "GemmaAPITextEncode", @@ -1535,7 +1064,7 @@ 160 ], "flags": {}, - "order": 12, + "order": 13, "mode": 4, "inputs": [ { @@ -1577,7 +1106,7 @@ 314.000244140625 ], "flags": {}, - "order": 6, + "order": 5, "mode": 0, "inputs": [], "outputs": [ @@ -1596,9 +1125,9 @@ } ], "properties": { + "Node name for S&R": "LoadImage", "cnr_id": "comfy-core", - "ver": "0.3.56", - "Node name for S&R": "LoadImage" + "ver": "0.3.56" }, "widgets_values": [ "example.png", @@ -1617,7 +1146,7 @@ 58 ], "flags": {}, - "order": 7, + "order": 6, "mode": 0, "inputs": [], "outputs": [ @@ -1631,9 +1160,9 @@ ], "title": "bypass_i2v", "properties": { + "Node name for S&R": "PrimitiveBoolean", "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveBoolean" + "ver": "0.16.0" }, "widgets_values": [ true @@ -1651,7 +1180,7 @@ 234.25266927083334 ], "flags": {}, - "order": 8, + "order": 7, "mode": 0, "inputs": [], "outputs": [ @@ -1665,58 +1194,15 @@ } ], "properties": { + "Node name for S&R": "LoadVideo", "cnr_id": "comfy-core", - "ver": "0.10.0", - "Node name for S&R": "LoadVideo" + "ver": "0.10.0" }, "widgets_values": [ "buildings.mp4", "image" ] }, - { - "id": 2483, - "type": "CLIPTextEncode", - "pos": [ - -3177.88687035676, - 3450.2955325886337 - ], - "size": [ - 307.2346496582031, - 204.2556610107422 - ], - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 13459 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "slot_index": 0, - "links": [ - 7065 - ] - } - ], - "title": "CLIP Text Encode (Positive Prompt)", - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.28", - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "Apocalyptic landscape with abandoned buildings, overgrown with foliage and trees. The sky is clear and the sun is setting, with the horizon turning bright red. The buildings are delapidated, falling apart and crumbling due to being abandoned for so long." - ], - "color": "#232", - "bgcolor": "#353" - }, { "id": 4832, "type": "RandomNoise", @@ -1729,7 +1215,7 @@ 82 ], "flags": {}, - "order": 9, + "order": 8, "mode": 0, "inputs": [], "outputs": [ @@ -1742,9 +1228,9 @@ } ], "properties": { + "Node name for S&R": "RandomNoise", "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "RandomNoise" + "ver": "0.14.1" }, "widgets_values": [ 42, @@ -1752,164 +1238,703 @@ ] }, { - "id": 4991, - "type": "CannyEdgePreprocessor", + "id": 5061, + "type": "VideoDepthAnythingProcess", + "pos": [ + -3255.616025429201, + 4284.344264651017 + ], + "size": [ + 301.80625, + 126 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "vda_model", + "type": "VDAMODEL", + "link": 13533 + }, + { + "name": "images", + "type": "IMAGE", + "link": 13535 + } + ], + "outputs": [ + { + "name": "depths", + "type": "DEPTHS", + "links": [ + 13534 + ] + } + ], + "properties": { + "Node name for S&R": "VideoDepthAnythingProcess", + "aux_id": "yuvraj108c/ComfyUI-Video-Depth-Anything", + "ver": "a0db08e63d1ea571601c45cde4aaee0acdd0544d" + }, + "widgets_values": [ + 518, + 960, + "fp32" + ] + }, + { + "id": 5026, + "type": "ResizeImageMaskNode", + "pos": [ + -3611.429041941159, + 4356.367775260842 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "IMAGE,MASK", + "link": 13464 + } + ], + "outputs": [ + { + "name": "resized", + "type": "IMAGE", + "links": [ + 13473, + 13474, + 13535 + ] + } + ], + "properties": { + "Node name for S&R": "ResizeImageMaskNode", + "cnr_id": "comfy-core", + "ver": "0.16.0" + }, + "widgets_values": [ + "scale shorter dimension", + 544, + "lanczos" + ] + }, + { + "id": 5011, + "type": "LTXICLoRALoaderModelOnly", + "pos": [ + -4253.941407189728, + 3440.1557478844434 + ], + "size": [ + 499.901763247988, + 130.8845841562129 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13400 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 13401 + ] + }, + { + "name": "latent_downscale_factor", + "type": "FLOAT", + "links": [ + 13406, + 13490 + ] + } + ], + "properties": { + "Node name for S&R": "LTXICLoRALoaderModelOnly" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-ic-lora-union-control-ref0.5.safetensors", + 1 + ] + }, + { + "id": 5060, + "type": "LoadVideoDepthAnythingModel", + "pos": [ + -3253.692998465908, + 4169.085677379663 + ], + "size": [ + 266.4771484375, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "vda_model", + "type": "VDAMODEL", + "slot_index": 0, + "links": [ + 13533 + ] + } + ], + "properties": { + "Node name for S&R": "LoadVideoDepthAnythingModel", + "aux_id": "yuvraj108c/ComfyUI-Video-Depth-Anything", + "ver": "a0db08e63d1ea571601c45cde4aaee0acdd0544d" + }, + "widgets_values": [ + "video_depth_anything_vits.pth" + ] + }, + { + "id": 5063, + "type": "Note", + "pos": [ + -3671.504882921669, + 4543.953945477197 + ], + "size": [ + 350.0508405643018, + 104.34118588476622 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "These are example annotators to convert reference video into proper guidance that the model can work with.\nFeel free to explore and choose whichever settings or alternative that best suits your needs." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 4831, + "type": "KSamplerSelect", + "pos": [ + -1123.2802485192926, + 3459.9479913843866 + ], + "size": [ + 270, + 74 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 13090 + ] + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect", + "cnr_id": "comfy-core", + "ver": "0.14.1" + }, + "widgets_values": [ + "euler_ancestral_cfg_pp" + ] + }, + { + "id": 4852, + "type": "SaveVideo", + "pos": [ + 130.87073016888837, + 3308.891084732692 + ], + "size": [ + 523.0556530433919, + 506.3562313794205 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "video", + "type": "VIDEO", + "link": 13112 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1" + }, + "widgets_values": [ + "output", + "auto", + "auto" + ] + }, + { + "id": 5062, + "type": "VideoDepthAnythingOutput", + "pos": [ + -3255.220108277297, + 4473.737278287875 + ], + "size": [ + 310.13828125, + 58 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "depths", + "type": "DEPTHS", + "link": 13534 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [] + } + ], + "properties": { + "Node name for S&R": "VideoDepthAnythingOutput", + "aux_id": "yuvraj108c/ComfyUI-Video-Depth-Anything", + "ver": "a0db08e63d1ea571601c45cde4aaee0acdd0544d" + }, + "widgets_values": [ + "gray" + ] + }, + { + "id": 2483, + "type": "CLIPTextEncode", + "pos": [ + -3177.88687035676, + 3450.2955325886337 + ], + "size": [ + 307.2346496582031, + 204.2556610107422 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 13459 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 7065 + ] + } + ], + "title": "CLIP Text Encode (Positive Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "cnr_id": "comfy-core", + "ver": "0.3.28" + }, + "widgets_values": [ + "Apocalyptic landscape with abandoned buildings, overgrown with foliage and trees. The sky is clear and the sun is setting, with the horizon turning bright red. The buildings are delapidated, falling apart and crumbling due to being abandoned for so long.\nThe air is full of silence and the only thing to be heard is a young girl breathing and saying: \"Where is everyone?\"" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 4991, + "type": "CannyEdgePreprocessor", + "pos": [ + -3240.048159614061, + 4652.864499278905 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 13473 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 13541 + ] + } + ], + "properties": { + "Node name for S&R": "CannyEdgePreprocessor" + }, + "widgets_values": [ + 92, + 200, + 512 + ] + }, + { + "id": 4922, + "type": "LoraLoaderModelOnly", + "pos": [ + -4204.024401614721, + 3261.100838617218 + ], + "size": [ + 454.14193097539646, + 128.44311555561626 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13217 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13400 + ] + } + ], + "properties": { + "Node name for S&R": "LoraLoaderModelOnly", + "cnr_id": "comfy-core", + "ver": "0.14.1" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384-1.1.safetensors", + 0.5 + ] + }, + { + "id": 5065, + "type": "LTXVTiledVAEDecode", + "pos": [ + -183.48566055093585, + 3154.1077229909156 + ], + "size": [ + 267.6441352715875, + 198 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 13543 + }, + { + "name": "latents", + "type": "LATENT", + "link": 13542 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 13544 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 6, + false, + "auto", + "auto" + ] + }, + { + "id": 4848, + "type": "LTXVAudioVAEDecode", + "pos": [ + -173.58219357128075, + 3410.4626264729445 + ], + "size": [ + 242.46932983398438, + 46 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 13445 + }, + { + "name": "audio_vae", + "type": "VAE", + "link": 13275 + } + ], + "outputs": [ + { + "name": "Audio", + "type": "AUDIO", + "links": [ + 13108 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVAudioVAEDecode", + "cnr_id": "comfy-core", + "ver": "0.3.64" + }, + "widgets_values": [] + }, + { + "id": 4849, + "type": "CreateVideo", "pos": [ - -3240.048159614061, - 4605.972865954311 + 126.73898150508833, + 3152.2422250138297 ], "size": [ 270, - 106 + 102 ], "flags": {}, - "order": 25, + "order": 41, "mode": 0, "inputs": [ { - "name": "image", + "name": "images", "type": "IMAGE", - "link": 13473 + "link": 13544 + }, + { + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 13108 + }, + { + "name": "fps", + "type": "FLOAT", + "widget": { + "name": "fps" + }, + "link": 13429 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [] + "name": "VIDEO", + "type": "VIDEO", + "links": [ + 13112 + ] } ], "properties": { - "Node name for S&R": "CannyEdgePreprocessor" + "Node name for S&R": "CreateVideo", + "cnr_id": "comfy-core", + "ver": "0.14.1" }, "widgets_values": [ - 92, - 200, - 512 + 30 ] }, { - "id": 4990, - "type": "DepthCrafter", + "id": 5066, + "type": "LTXFloatToInt", "pos": [ - -3239.8437020718925, - 4326.603689842923 + -2381.3973753722084, + 3713.144409316445 ], "size": [ - 278.73828125, - 174 + 270.1809911778764, + 58 ], - "flags": {}, - "order": 24, + "flags": { + "collapsed": true + }, + "order": 22, "mode": 0, "inputs": [ { - "name": "depthcrafter_model", - "type": "DEPTHCRAFTER_MODEL", - "link": 13377 - }, - { - "name": "images", - "type": "IMAGE", - "link": 13472 + "name": "a", + "type": "FLOAT", + "widget": { + "name": "a" + }, + "link": 13546 } ], "outputs": [ { - "name": "depth_maps", - "type": "IMAGE", + "name": "INT", + "type": "INT", "links": [ - 13531 + 13545 ] } ], "properties": { - "Node name for S&R": "DepthCrafter" + "Node name for S&R": "LTXFloatToInt" }, "widgets_values": [ - 512, - 5, - 1, - 110, - 25 + 0 ] }, { - "id": 4980, - "type": "DownloadAndLoadDepthCrafterModel", + "id": 3159, + "type": "LTXVImgToVideoConditionOnly", "pos": [ - -3273.83414347537, - 4183.749312897053 + -2144.970291670966, + 3352.7872806168716 ], "size": [ - 336.491796875, - 82 + 313.2623046875, + 142.859507731343 ], "flags": {}, - "order": 10, + "order": 32, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 13279 + }, + { + "name": "image", + "type": "IMAGE", + "link": 13547 + }, + { + "name": "latent", + "type": "LATENT", + "link": 11401 + }, + { + "name": "bypass", + "shape": 7, + "type": "BOOLEAN", + "widget": { + "name": "bypass" + }, + "link": 13456 + } + ], "outputs": [ { - "name": "depthcrafter_model", - "type": "DEPTHCRAFTER_MODEL", + "name": "latent", + "type": "LATENT", "links": [ - 13377 + 13402 ] } ], "properties": { - "Node name for S&R": "DownloadAndLoadDepthCrafterModel" + "Node name for S&R": "LTXVImgToVideoConditionOnly" }, "widgets_values": [ - true, + 1, false ] }, { - "id": 5011, - "type": "LTXICLoRALoaderModelOnly", + "id": 5035, + "type": "ResizeImageMaskNode", "pos": [ - -4253.941407189728, - 3440.1557478844434 + -4032.2401448287073, + 3699.4287382559205 ], "size": [ - 499.901763247988, - 130.8845841562129 + 270, + 106 ], "flags": {}, - "order": 18, + "order": 17, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 13400 + "name": "input", + "type": "IMAGE,MASK", + "link": 13492 } ], "outputs": [ { - "name": "model", - "type": "MODEL", - "links": [ - 13401 - ] - }, - { - "name": "latent_downscale_factor", - "type": "FLOAT", + "name": "resized", + "type": "IMAGE", "links": [ - 13406, - 13490 + 13547 ] } ], "properties": { - "Node name for S&R": "LTXICLoRALoaderModelOnly" + "Node name for S&R": "ResizeImageMaskNode", + "cnr_id": "comfy-core", + "ver": "0.16.0" }, "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-ic-lora-union-control-ref0.5.safetensors", - 1 + "scale longer dimension", + 1536, + "lanczos" ] } ], @@ -1930,14 +1955,6 @@ 1, "CONDITIONING" ], - [ - 9768, - 3336, - 0, - 3159, - 1, - "IMAGE" - ], [ 11002, 2004, @@ -1986,14 +2003,6 @@ 0, "NOISE" ], - [ - 13107, - 4851, - 0, - 4849, - 0, - "IMAGE" - ], [ 13108, 4848, @@ -2050,14 +2059,6 @@ 4, "LATENT" ], - [ - 13348, - 3940, - 2, - 4851, - 1, - "VAE" - ], [ 13363, 4829, @@ -2074,14 +2075,6 @@ 0, "VIDEO" ], - [ - 13377, - 4980, - 0, - 4990, - 0, - "DEPTHCRAFTER_MODEL" - ], [ 13400, 4922, @@ -2162,14 +2155,6 @@ 2, "LATENT" ], - [ - 13412, - 5013, - 2, - 4851, - 0, - "LATENT" - ], [ 13413, 5012, @@ -2266,22 +2251,6 @@ 0, "CLIP" ], - [ - 13461, - 5000, - 2, - 5024, - 0, - "FLOAT" - ], - [ - 13462, - 5024, - 0, - 3980, - 2, - "INT" - ], [ 13463, 5025, @@ -2298,14 +2267,6 @@ 0, "IMAGE" ], - [ - 13472, - 5026, - 0, - 4990, - 1, - "IMAGE" - ], [ 13473, 5026, @@ -2395,22 +2356,97 @@ "IMAGE" ], [ - 13493, - 5035, + 13533, + 5060, + 0, + 5061, + 0, + "VDAMODEL" + ], + [ + 13534, + 5061, 0, - 3336, + 5062, + 0, + "DEPTHS" + ], + [ + 13535, + 5026, 0, + 5061, + 1, "IMAGE" ], [ - 13531, - 4990, + 13541, + 4991, 0, 5028, 0, "IMAGE" + ], + [ + 13542, + 5013, + 2, + 5065, + 1, + "LATENT" + ], + [ + 13543, + 3940, + 2, + 5065, + 0, + "VAE" + ], + [ + 13544, + 5065, + 0, + 4849, + 0, + "IMAGE" + ], + [ + 13545, + 5066, + 0, + 3980, + 2, + "INT" + ], + [ + 13546, + 5000, + 2, + 5066, + 0, + "FLOAT" + ], + [ + 13547, + 5035, + 0, + 3159, + 1, + "IMAGE" ] ], + "floatingLinks": [ + { + "id": 2, + "origin_id": 3940, + "origin_slot": 2, + "target_id": -1, + "target_slot": -1, + "type": "VAE", + "parentId": 50 + } + ], "groups": [ { "id": 54, @@ -2450,10 +2486,9 @@ 5012, 4528, 3980, - 3159, 3059, - 3336, - 5024 + 5066, + 3159 ] }, { @@ -2471,8 +2506,8 @@ "nodes": [ 4010, 3940, - 4922, - 5011 + 5011, + 4922 ] }, { @@ -2488,9 +2523,9 @@ "font_size": 24, "flags": {}, "nodes": [ - 5035, 2004, - 5019 + 5019, + 5035 ] }, { @@ -2507,13 +2542,13 @@ "flags": {}, "profilingGroup": false, "nodes": [ - 4831, 4829, 5013, 4845, 4828, 5025, - 4832 + 4832, + 4831 ] }, { @@ -2529,20 +2564,20 @@ "font_size": 24, "flags": {}, "nodes": [ + 4852, + 5065, 4848, - 4849, - 4851, - 4852 + 4849 ] }, { "id": 160, "title": "Prepare Reference Video", "bounding": [ - -3972.079361495783, - 4066.549312897054, - 1381.1555239978125, - 1015.8365874335541 + -3961.9946842410645, + 4043.0257129625647, + 1369.9976857691322, + 1076.3808325009654 ], "color": "#A88", "font_size": 24, @@ -2550,14 +2585,16 @@ "nodes": [ 4986, 5000, - 5026, 5028, 5029, 5034, 5001, - 4991, - 4990, - 4980 + 5061, + 5026, + 5060, + 5063, + 5062, + 4991 ] }, { @@ -2574,25 +2611,26 @@ "flags": {}, "nodes": [ 5000, - 5026, - 5001 + 5001, + 5026 ] }, { "id": 155, "title": "Depth Annotation", "bounding": [ - -3283.83414347537, - 4110.149312897052, - 356.4917968750001, - 400.4543769458702 + -3265.616025429201, + 4095.485677379663, + 330.5341984019037, + 446.25160090821157 ], "color": "#b06634", "font_size": 24, "flags": {}, "nodes": [ - 4990, - 4980 + 5061, + 5060, + 5062 ] }, { @@ -2600,7 +2638,7 @@ "title": "Canny Annotation", "bounding": [ -3250.048159614061, - 4532.37286595431, + 4579.264499278905, 290, 189.6 ], @@ -2615,8 +2653,8 @@ "id": 157, "title": "Pose Annotation", "bounding": [ - -3262.975744576779, - 4751.2579390174615, + -3260.1714331148514, + 4795.482253106716, 314.72265625, 305.6 ], @@ -2631,13 +2669,13 @@ "config": {}, "extra": { "ds": { - "scale": 0.8506866244160058, + "scale": 0.620921323059155, "offset": [ - 4570.975923287724, - -3627.5460233000526 + 4845.606614557338, + -2908.00904512447 ] }, - "frontendVersion": "1.39.14", + "frontendVersion": "1.42.8", "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, @@ -2679,7 +2717,7 @@ 2989.3062564189877 ], "linkIds": [ - 13493 + 13547 ] }, { @@ -2690,7 +2728,7 @@ 2981.1444036460034 ], "linkIds": [ - 13493 + 13547 ] }, { @@ -2756,8 +2794,8 @@ ], "linkIds": [ 13279, - 13348, - 13405 + 13405, + 13543 ] }, { @@ -2769,8 +2807,8 @@ ], "linkIds": [ 13279, - 13348, - 13405 + 13405, + 13543 ] }, { @@ -2782,7 +2820,7 @@ ], "linkIds": [ 13429, - 13461 + 13546 ] }, { @@ -2856,8 +2894,11 @@ 2687.78688781277 ], "linkIds": [ - 13348 - ] + 13543 + ], + "floating": { + "slotType": "output" + } }, { "id": 56, @@ -2889,8 +2930,8 @@ 2681.1981337977513 ], "linkIds": [ - 13348, - 13405 + 13405, + 13543 ] }, { @@ -2980,7 +3021,7 @@ "linkIds": [ 13429, 13443, - 13461 + 13546 ] }, { @@ -3013,7 +3054,7 @@ "linkIds": [ 13429, 13443, - 13461 + 13546 ] }, { @@ -3087,10 +3128,6 @@ "id": 13302, "parentId": 34 }, - { - "id": 13348, - "parentId": 50 - }, { "id": 13401, "parentId": 3 @@ -3143,10 +3180,6 @@ "id": 13456, "parentId": 7 }, - { - "id": 13461, - "parentId": 23 - }, { "id": 13478, "parentId": 78 @@ -3160,7 +3193,15 @@ "parentId": 82 }, { - "id": 13493, + "id": 13543, + "parentId": 50 + }, + { + "id": 13546, + "parentId": 23 + }, + { + "id": 13547, "parentId": 5 } ] diff --git a/example_workflows/2.3/LTX-2.3_T2V_I2V_Single_Stage_Distilled_Full.json b/example_workflows/2.3/LTX-2.3_T2V_I2V_Single_Stage_Distilled_Full.json index 7dd3291..1358422 100644 --- a/example_workflows/2.3/LTX-2.3_T2V_I2V_Single_Stage_Distilled_Full.json +++ b/example_workflows/2.3/LTX-2.3_T2V_I2V_Single_Stage_Distilled_Full.json @@ -1,98 +1,9 @@ { "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", "revision": 0, - "last_node_id": 4981, - "last_link_id": 13353, + "last_node_id": 4985, + "last_link_id": 13363, "nodes": [ - { - "id": 4818, - "type": "LTXVAudioVAEDecode", - "pos": [ - -407.814457071416, - 3825.033274790136 - ], - "size": [ - 242.46932983398438, - 46 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13080 - }, - { - "name": "audio_vae", - "type": "VAE", - "link": 13304 - } - ], - "outputs": [ - { - "name": "Audio", - "type": "AUDIO", - "links": [ - 13069 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 4822, - "type": "VAEDecodeTiled", - "pos": [ - -432.17285832621803, - 3622.27392422418 - ], - "size": [ - 270, - 150 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13078 - }, - { - "name": "vae", - "type": "VAE", - "link": 13305 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13081 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "VAEDecodeTiled" - }, - "widgets_values": [ - 512, - 64, - 512, - 64 - ] - }, { "id": 4824, "type": "LTXVSeparateAVLatent", @@ -119,7 +30,7 @@ "name": "video_latent", "type": "LATENT", "links": [ - 13078 + 13359 ] }, { @@ -137,201 +48,6 @@ }, "widgets_values": [] }, - { - "id": 4848, - "type": "LTXVAudioVAEDecode", - "pos": [ - -410.1063990210086, - 3144.894193466471 - ], - "size": [ - 242.46932983398438, - 46 - ], - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13105 - }, - { - "name": "audio_vae", - "type": "VAE", - "link": 13275 - } - ], - "outputs": [ - { - "name": "Audio", - "type": "AUDIO", - "links": [ - 13108 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 4851, - "type": "VAEDecodeTiled", - "pos": [ - -434.4648002758107, - 2942.134842900515 - ], - "size": [ - 270, - 150 - ], - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13110 - }, - { - "name": "vae", - "type": "VAE", - "link": 13280 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13107 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "VAEDecodeTiled" - }, - "widgets_values": [ - 512, - 64, - 512, - 64 - ] - }, - { - "id": 4849, - "type": "CreateVideo", - "pos": [ - -115.36479388728354, - 2941.821676196994 - ], - "size": [ - 270, - 102 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13107 - }, - { - "name": "audio", - "shape": 7, - "type": "AUDIO", - "link": 13108 - }, - { - "name": "fps", - "type": "FLOAT", - "widget": { - "name": "fps" - }, - "link": 13348 - } - ], - "outputs": [ - { - "name": "VIDEO", - "type": "VIDEO", - "links": [ - 13112 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CreateVideo" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 4819, - "type": "CreateVideo", - "pos": [ - -113.07285193769118, - 3621.9607575206587 - ], - "size": [ - 270, - 102 - ], - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13081 - }, - { - "name": "audio", - "shape": 7, - "type": "AUDIO", - "link": 13069 - }, - { - "name": "fps", - "type": "FLOAT", - "widget": { - "name": "fps" - }, - "link": 13347 - } - ], - "outputs": [ - { - "name": "VIDEO", - "type": "VIDEO", - "links": [ - 13072 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CreateVideo" - }, - "widgets_values": [ - 30 - ] - }, { "id": 3059, "type": "EmptyLTXVLatentVideo", @@ -344,7 +60,7 @@ 194 ], "flags": {}, - "order": 22, + "order": 23, "mode": 0, "inputs": [ { @@ -470,7 +186,7 @@ "widget": { "name": "frame_rate" }, - "link": 13338 + "link": 13363 } ], "outputs": [ @@ -742,8 +458,8 @@ "type": "VAE", "links": [ 13279, - 13280, - 13305 + 13355, + 13358 ] } ], @@ -921,7 +637,7 @@ "name": "video_latent", "type": "LATENT", "links": [ - 13110 + 13354 ] }, { @@ -1037,116 +753,8 @@ "widgets_values": [] }, { - "id": 4852, - "type": "SaveVideo", - "pos": [ - 198.4051508602923, - 2938.5275593141037 - ], - "size": [ - 523.0556530433919, - 506.3562313794205 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "video", - "type": "VIDEO", - "link": 13112 - } - ], - "outputs": [], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1" - }, - "widgets_values": [ - "output_D", - "auto", - "auto" - ] - }, - { - "id": 4823, - "type": "SaveVideo", - "pos": [ - 200.6970928098834, - 3618.666640637768 - ], - "size": [ - 523.0556530433919, - 506.3562313794205 - ], - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "video", - "type": "VIDEO", - "link": 13072 - } - ], - "outputs": [], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1" - }, - "widgets_values": [ - "output_F", - "auto", - "auto" - ] - }, - { - "id": 4974, - "type": "CM_FloatToInt", - "pos": [ - -2338.041111677508, - 3710.1908431089505 - ], - "size": [ - 270, - 58 - ], - "flags": { - "collapsed": true - }, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "a", - "type": "FLOAT", - "widget": { - "name": "a" - }, - "link": 13349 - } - ], - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 13338 - ] - } - ], - "properties": { - "aux_id": "evanspearman/ComfyMath", - "ver": "c01177221c31b8e5fbc062778fc8254aeb541638", - "Node name for S&R": "CM_FloatToInt" - }, - "widgets_values": [ - 0 - ] - }, - { - "id": 4923, - "type": "GemmaAPITextEncode", + "id": 4923, + "type": "GemmaAPITextEncode", "pos": [ -3379.5479534676806, 3244.1121765417483 @@ -1443,86 +1051,6 @@ true ] }, - { - "id": 4922, - "type": "LoraLoaderModelOnly", - "pos": [ - -4217.883339387363, - 3262.713832635294 - ], - "size": [ - 454.14193097539646, - 128.44311555561626 - ], - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 13217 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 13270 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384.safetensors", - 0.5 - ] - }, - { - "id": 4968, - "type": "LoraLoaderModelOnly", - "pos": [ - -4212.5785472767375, - 3448.9517207024496 - ], - "size": [ - 454.14193097539646, - 128.44311555561626 - ], - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 13324 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 13325 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384.safetensors", - 0.2 - ] - }, { "id": 4964, "type": "GuiderParameters", @@ -1738,49 +1266,512 @@ "id": 4977, "type": "PrimitiveBoolean", "pos": [ - -4034.5539485858703, - 3952.2873754168977 + -4034.5539485858703, + 3952.2873754168977 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 13345 + ] + } + ], + "title": "bypass_i2v", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.16.0", + "Node name for S&R": "PrimitiveBoolean" + }, + "widgets_values": [ + true + ] + }, + { + "id": 4981, + "type": "ResizeImageMaskNode", + "pos": [ + -4043.718003225151, + 3706.2559116658244 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "IMAGE,MASK", + "link": 13352 + } + ], + "outputs": [ + { + "name": "resized", + "type": "IMAGE", + "links": [ + 13353 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.16.0", + "Node name for S&R": "ResizeImageMaskNode" + }, + "widgets_values": [ + "scale longer dimension", + 1536, + "lanczos" + ] + }, + { + "id": 4961, + "type": "GemmaAPITextEncode", + "pos": [ + -3007.4294675681895, + 3241.2321795273106 + ], + "size": [ + 337.49481491927054, + 160 + ], + "flags": {}, + "order": 17, + "mode": 4, + "inputs": [ + { + "name": "api_key", + "type": "STRING", + "widget": { + "name": "api_key" + }, + "link": 13334 + } + ], + "outputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "links": null + } + ], + "title": "🅛🅣🅧 Gemma API Text Encode - NEGATIVE", + "properties": { + "Node name for S&R": "GemmaAPITextEncode" + }, + "widgets_values": [ + "", + "pc game, console game, video game, cartoon, childish, ugly", + false, + "ltx-2.3-22b-dev.safetensors" + ] + }, + { + "id": 4922, + "type": "LoraLoaderModelOnly", + "pos": [ + -4217.883339387363, + 3262.713832635294 + ], + "size": [ + 454.14193097539646, + 128.44311555561626 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13217 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13270 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384-1.1.safetensors", + 0.5 + ] + }, + { + "id": 4968, + "type": "LoraLoaderModelOnly", + "pos": [ + -4212.5785472767375, + 3448.9517207024496 + ], + "size": [ + 454.14193097539646, + 128.44311555561626 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13324 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13325 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384-1.1.safetensors", + 0.2 + ] + }, + { + "id": 4848, + "type": "LTXVAudioVAEDecode", + "pos": [ + -410.5927284264932, + 3200.7525994678613 + ], + "size": [ + 242.46932983398438, + 46 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 13105 + }, + { + "name": "audio_vae", + "type": "VAE", + "link": 13275 + } + ], + "outputs": [ + { + "name": "Audio", + "type": "AUDIO", + "links": [ + 13108 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.64", + "Node name for S&R": "LTXVAudioVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 4982, + "type": "LTXVTiledVAEDecode", + "pos": [ + -421.5504968885962, + 2943.0798877291213 + ], + "size": [ + 267.6441352715875, + 198 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 13355 + }, + { + "name": "latents", + "type": "LATENT", + "link": 13354 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 13356 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 6, + false, + "auto", + "auto" + ] + }, + { + "id": 4818, + "type": "LTXVAudioVAEDecode", + "pos": [ + -420.1637501892608, + 3892.8762268552587 + ], + "size": [ + 242.46932983398438, + 46 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 13080 + }, + { + "name": "audio_vae", + "type": "VAE", + "link": 13304 + } + ], + "outputs": [ + { + "name": "Audio", + "type": "AUDIO", + "links": [ + 13069 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.64", + "Node name for S&R": "LTXVAudioVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 4983, + "type": "LTXVTiledVAEDecode", + "pos": [ + -420.8123183266997, + 3631.5312679148037 + ], + "size": [ + 267.6441352715875, + 198 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 13358 + }, + { + "name": "latents", + "type": "LATENT", + "link": 13359 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 13357 + ] + } + ], + "properties": { + "Node name for S&R": "LTXVTiledVAEDecode" + }, + "widgets_values": [ + 2, + 2, + 6, + false, + "auto", + "auto" + ] + }, + { + "id": 4819, + "type": "CreateVideo", + "pos": [ + -111.9091351459955, + 3630.5236288386586 + ], + "size": [ + 270, + 102 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 13357 + }, + { + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 13069 + }, + { + "name": "fps", + "type": "FLOAT", + "widget": { + "name": "fps" + }, + "link": 13347 + } + ], + "outputs": [ + { + "name": "VIDEO", + "type": "VIDEO", + "links": [ + 13072 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1", + "Node name for S&R": "CreateVideo" + }, + "widgets_values": [ + 30 + ] + }, + { + "id": 4823, + "type": "SaveVideo", + "pos": [ + 199.85470080395447, + 3629.4874699098045 + ], + "size": [ + 523.0556530433919, + 506.3562313794205 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "video", + "type": "VIDEO", + "link": 13072 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1" + }, + "widgets_values": [ + "output_F", + "auto", + "auto" + ] + }, + { + "id": 4978, + "type": "PrimitiveFloat", + "pos": [ + -3098.8616266058857, + 4031.84547703025 ], "size": [ 270, 58 ], "flags": {}, - "order": 11, + "order": 12, "mode": 0, "inputs": [], "outputs": [ { - "name": "BOOLEAN", - "type": "BOOLEAN", + "name": "FLOAT", + "type": "FLOAT", "links": [ - 13345 + 13346, + 13347, + 13348, + 13362 ] } ], - "title": "bypass_i2v", + "title": "fps", "properties": { "cnr_id": "comfy-core", "ver": "0.16.0", - "Node name for S&R": "PrimitiveBoolean" + "Node name for S&R": "PrimitiveFloat" }, "widgets_values": [ - true + 24 ] }, { "id": 4979, "type": "PrimitiveInt", "pos": [ - -2738.7811664958017, - 3930.388555565199 + -2768.412522415694, + 3929.5374791056006 ], "size": [ 270, 82 ], "flags": {}, - "order": 12, + "order": 13, "mode": 0, "inputs": [], "outputs": [ @@ -1805,123 +1796,130 @@ ] }, { - "id": 4978, - "type": "PrimitiveFloat", + "id": 4852, + "type": "SaveVideo", "pos": [ - -3079.5387171915363, - 4031.84547703025 + 198.4051508602923, + 2942.671426619292 ], "size": [ - 270, - 58 + 523.0556530433919, + 506.3562313794205 ], "flags": {}, - "order": 13, + "order": 41, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "FLOAT", - "type": "FLOAT", - "links": [ - 13346, - 13347, - 13348, - 13349 - ] + "name": "video", + "type": "VIDEO", + "link": 13112 } ], - "title": "fps", + "outputs": [], "properties": { "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveFloat" + "ver": "0.14.1" }, "widgets_values": [ - 24 + "output_D", + "auto", + "auto" ] }, { - "id": 4981, - "type": "ResizeImageMaskNode", + "id": 4849, + "type": "CreateVideo", "pos": [ - -4043.718003225151, - 3706.2559116658244 + -115.36479388728354, + 2942.2416627481953 ], "size": [ 270, - 106 + 102 ], "flags": {}, - "order": 21, + "order": 38, "mode": 0, "inputs": [ { - "name": "input", - "type": "IMAGE,MASK", - "link": 13352 + "name": "images", + "type": "IMAGE", + "link": 13356 + }, + { + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 13108 + }, + { + "name": "fps", + "type": "FLOAT", + "widget": { + "name": "fps" + }, + "link": 13348 } ], "outputs": [ { - "name": "resized", - "type": "IMAGE", + "name": "VIDEO", + "type": "VIDEO", "links": [ - 13353 + 13112 ] } ], "properties": { "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" + "ver": "0.14.1", + "Node name for S&R": "CreateVideo" }, "widgets_values": [ - "scale longer dimension", - 1536, - "lanczos" + 30 ] }, { - "id": 4961, - "type": "GemmaAPITextEncode", + "id": 4985, + "type": "LTXFloatToInt", "pos": [ - -3007.4294675681895, - 3241.2321795273106 + -2383.6505616901677, + 3708.4758574347698 ], "size": [ - 337.49481491927054, - 160 + 270.1809911778764, + 58 ], - "flags": {}, - "order": 17, - "mode": 4, + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, "inputs": [ { - "name": "api_key", - "type": "STRING", + "name": "a", + "type": "FLOAT", "widget": { - "name": "api_key" + "name": "a" }, - "link": 13334 + "link": 13362 } ], "outputs": [ { - "name": "conditioning", - "type": "CONDITIONING", - "links": null + "name": "INT", + "type": "INT", + "links": [ + 13363 + ] } ], - "title": "🅛🅣🅧 Gemma API Text Encode - NEGATIVE", "properties": { - "Node name for S&R": "GemmaAPITextEncode" + "Node name for S&R": "LTXFloatToInt" }, "widgets_values": [ - "", - "pc game, console game, video game, cartoon, childish, ugly", - false, - "ltx-2.3-22b-dev.safetensors" + 0 ] } ], @@ -2022,14 +2020,6 @@ 0, "LATENT" ], - [ - 13078, - 4824, - 0, - 4822, - 0, - "LATENT" - ], [ 13080, 4824, @@ -2038,14 +2028,6 @@ 0, "LATENT" ], - [ - 13081, - 4822, - 0, - 4819, - 0, - "IMAGE" - ], [ 13089, 4828, @@ -2078,14 +2060,6 @@ 0, "LATENT" ], - [ - 13107, - 4851, - 0, - 4849, - 0, - "IMAGE" - ], [ 13108, 4848, @@ -2094,14 +2068,6 @@ 1, "AUDIO" ], - [ - 13110, - 4845, - 0, - 4851, - 0, - "LATENT" - ], [ 13112, 4849, @@ -2158,14 +2124,6 @@ 0, "VAE" ], - [ - 13280, - 3940, - 2, - 4851, - 1, - "VAE" - ], [ 13289, 1241, @@ -2222,14 +2180,6 @@ 1, "VAE" ], - [ - 13305, - 3940, - 2, - 4822, - 1, - "VAE" - ], [ 13321, 4963, @@ -2310,14 +2260,6 @@ 0, "STRING" ], - [ - 13338, - 4974, - 0, - 3980, - 2, - "INT" - ], [ 13341, 4960, @@ -2366,14 +2308,6 @@ 2, "FLOAT" ], - [ - 13349, - 4978, - 0, - 4974, - 0, - "FLOAT" - ], [ 13350, 4979, @@ -2405,8 +2339,83 @@ 3336, 0, "IMAGE" + ], + [ + 13354, + 4845, + 0, + 4982, + 1, + "LATENT" + ], + [ + 13355, + 3940, + 2, + 4982, + 0, + "VAE" + ], + [ + 13356, + 4982, + 0, + 4849, + 0, + "IMAGE" + ], + [ + 13357, + 4983, + 0, + 4819, + 0, + "IMAGE" + ], + [ + 13358, + 3940, + 2, + 4983, + 0, + "VAE" + ], + [ + 13359, + 4824, + 0, + 4983, + 1, + "LATENT" + ], + [ + 13362, + 4978, + 0, + 4985, + 0, + "FLOAT" + ], + [ + 13363, + 4985, + 0, + 3980, + 2, + "INT" ] ], + "floatingLinks": [ + { + "id": 2, + "origin_id": 3940, + "origin_slot": 2, + "target_id": -1, + "target_slot": -1, + "type": "VAE", + "parentId": 38 + } + ], "groups": [ { "id": 54, @@ -2434,10 +2443,10 @@ "id": 106, "title": "Preprocess", "bounding": [ - -2495.2000699364985, + -2484.088851384863, 3225.5682237844176, - 911.7998063426669, - 521.6258583440732 + 900.6885877910327, + 496.2463276766031 ], "color": "#3f789e", "font_size": 24, @@ -2448,7 +2457,7 @@ 3980, 4528, 3336, - 4974 + 4985 ] }, { @@ -2540,17 +2549,17 @@ "bounding": [ -444.4648002758107, 2864.9275593141037, - 1175.9256041794947, - 589.9562313794205 + 1177.3395589018733, + 605.9017207733691 ], "color": "#b58b2a", "font_size": 24, "flags": {}, "nodes": [ 4848, - 4851, - 4849, - 4852 + 4982, + 4852, + 4849 ] }, { @@ -2559,15 +2568,15 @@ "bounding": [ -442.17285832621803, 3545.066640637768, - 1175.9256041794933, - 589.956231379421 + 1178.0045376079406, + 607.0216849099065 ], "color": "#3f789e", "font_size": 24, "flags": {}, "nodes": [ 4818, - 4822, + 4983, 4819, 4823 ] @@ -2576,13 +2585,13 @@ "config": {}, "extra": { "ds": { - "scale": 0.7094965082353154, + "scale": 0.5248203294583607, "offset": [ - 5360.328560176019, - -2808.797614629239 + 4615.128525222288, + -2831.576053982103 ] }, - "frontendVersion": "1.39.14", + "frontendVersion": "1.42.8", "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, @@ -2736,8 +2745,8 @@ ], "linkIds": [ 13279, - 13280, - 13305 + 13355, + 13358 ] }, { @@ -2749,8 +2758,8 @@ ], "linkIds": [ 13279, - 13280, - 13305 + 13355, + 13358 ] }, { @@ -2761,8 +2770,8 @@ 2665.035568944363 ], "linkIds": [ - 13280, - 13305 + 13355, + 13358 ] }, { @@ -2784,7 +2793,7 @@ "linkIds": [ 13347, 13348, - 13349 + 13362 ] }, { @@ -2925,12 +2934,15 @@ "id": 38, "parentId": 17, "pos": [ - -474.4211088975866, - 3658.2864504877357 + -470.0180908872158, + 3638.694323009636 ], "linkIds": [ - 13305 - ] + 13358 + ], + "floating": { + "slotType": "output" + } }, { "id": 40, @@ -3008,10 +3020,6 @@ "id": 13279, "parentId": 16 }, - { - "id": 13280, - "parentId": 17 - }, { "id": 13289, "parentId": 25 @@ -3040,10 +3048,6 @@ "id": 13304, "parentId": 37 }, - { - "id": 13305, - "parentId": 38 - }, { "id": 13325, "parentId": 13 @@ -3064,10 +3068,6 @@ "id": 13348, "parentId": 43 }, - { - "id": 13349, - "parentId": 23 - }, { "id": 13351, "parentId": 19 @@ -3075,6 +3075,18 @@ { "id": 13353, "parentId": 5 + }, + { + "id": 13355, + "parentId": 17 + }, + { + "id": 13358, + "parentId": 38 + }, + { + "id": 13362, + "parentId": 23 } ] }, diff --git a/example_workflows/2.3/LTX-2.3_T2V_I2V_Two_Stage_Distilled.json b/example_workflows/2.3/LTX-2.3_T2V_I2V_Two_Stage_Distilled.json index 04d3821..6387f88 100644 --- a/example_workflows/2.3/LTX-2.3_T2V_I2V_Two_Stage_Distilled.json +++ b/example_workflows/2.3/LTX-2.3_T2V_I2V_Two_Stage_Distilled.json @@ -1,104 +1,9 @@ { "id": "394ed254-7306-42a2-9ae6-aa880ce4456d", "revision": 0, - "last_node_id": 4990, - "last_link_id": 13396, + "last_node_id": 5000, + "last_link_id": 13424, "nodes": [ - { - "id": 4848, - "type": "LTXVAudioVAEDecode", - "pos": [ - 716.3549191404252, - 3354.9364184694505 - ], - "size": [ - 242.46932983398438, - 46 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13383 - }, - { - "name": "audio_vae", - "type": "VAE", - "link": 13275 - } - ], - "outputs": [ - { - "name": "Audio", - "type": "AUDIO", - "links": [ - 13108 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAEDecode" - }, - "widgets_values": [] - }, - { - "id": 4849, - "type": "CreateVideo", - "pos": [ - 1011.0965242741515, - 3151.8639011999735 - ], - "size": [ - 270, - 102 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13107 - }, - { - "name": "audio", - "shape": 7, - "type": "AUDIO", - "link": 13108 - }, - { - "name": "fps", - "type": "FLOAT", - "widget": { - "name": "fps" - }, - "link": 13392 - } - ], - "outputs": [ - { - "name": "VIDEO", - "type": "VIDEO", - "links": [ - 13112 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "CreateVideo" - }, - "widgets_values": [ - 30 - ] - }, { "id": 3059, "type": "EmptyLTXVLatentVideo", @@ -111,7 +16,7 @@ 194 ], "flags": {}, - "order": 22, + "order": 20, "mode": 0, "inputs": [ { @@ -180,7 +85,7 @@ "widget": { "name": "frame_rate" }, - "link": 13372 + "link": 13424 } ], "outputs": [ @@ -215,7 +120,7 @@ 46 ], "flags": {}, - "order": 29, + "order": 31, "mode": 0, "inputs": [ { @@ -257,7 +162,7 @@ 142.859507731343 ], "flags": {}, - "order": 28, + "order": 30, "mode": 0, "inputs": [ { @@ -314,7 +219,7 @@ 78 ], "flags": {}, - "order": 23, + "order": 26, "mode": 0, "inputs": [ { @@ -365,53 +270,6 @@ 24 ] }, - { - "id": 4851, - "type": "VAEDecodeTiled", - "pos": [ - 691.996517885623, - 3152.177067903495 - ], - "size": [ - 270, - 150 - ], - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 13382 - }, - { - "name": "vae", - "type": "VAE", - "link": 13348 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13107 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "VAEDecodeTiled" - }, - "widgets_values": [ - 512, - 64, - 512, - 4 - ] - }, { "id": 4976, "type": "KSamplerSelect", @@ -457,7 +315,7 @@ 106 ], "flags": {}, - "order": 35, + "order": 37, "mode": 0, "inputs": [ { @@ -519,7 +377,7 @@ 98 ], "flags": {}, - "order": 27, + "order": 29, "mode": 0, "inputs": [ { @@ -557,322 +415,119 @@ ] }, { - "id": 4010, - "type": "LTXVAudioVAELoader", + "id": 4980, + "type": "GemmaAPITextEncode", "pos": [ - -4655.010641467211, - 3122.9236915172387 + -3444.8106564692425, + 3246.3342331171134 ], "size": [ - 384.6576773713696, - 79.30435270514249 + 347.3886205089311, + 160 ], "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], + "order": 17, + "mode": 4, + "inputs": [ + { + "name": "api_key", + "type": "STRING", + "widget": { + "name": "api_key" + }, + "link": 13366 + } + ], "outputs": [ { - "name": "Audio VAE", - "type": "VAE", - "links": [ - 13274, - 13275 - ] + "name": "conditioning", + "type": "CONDITIONING", + "links": null } ], + "title": "🅛🅣🅧 Gemma API Text Encode - POSITIVE", "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.64", - "Node name for S&R": "LTXVAudioVAELoader" + "Node name for S&R": "GemmaAPITextEncode" }, "widgets_values": [ + "", + "", + "ltx-2.3-22b-dev.safetensors", "ltx-2.3-22b-dev.safetensors" ] }, { - "id": 3940, - "type": "CheckpointLoaderSimple", + "id": 4979, + "type": "PrimitiveString", "pos": [ - -4648.711127852091, - 3261.3436773800554 + -3597.879212092389, + 3131.503203622337 ], "size": [ - 383.4002295473938, - 108.51948797992713 + 270, + 58 ], "flags": {}, - "order": 2, - "mode": 0, + "order": 1, + "mode": 4, "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 13217 - ] - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [] - }, - { - "name": "VAE", - "type": "VAE", + "name": "STRING", + "type": "STRING", "links": [ - 13279, - 13346, - 13347, - 13348 + 13366, + 13367 ] } ], + "title": "LTX API KEY", "properties": { "cnr_id": "comfy-core", - "ver": "0.3.56", - "Node name for S&R": "CheckpointLoaderSimple" + "ver": "0.14.1", + "Node name for S&R": "PrimitiveString" }, "widgets_values": [ - "ltx-2.3-22b-dev.safetensors" + "" ] }, { - "id": 4922, - "type": "LoraLoaderModelOnly", + "id": 3336, + "type": "LTXVPreprocess", "pos": [ - -4204.024401614721, - 3261.100838617218 + -2570.43635256139, + 3313.8991397637924 ], "size": [ - 454.14193097539646, - 128.44311555561626 + 270, + 74 ], "flags": {}, - "order": 15, + "order": 27, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 13217 + "name": "image", + "type": "IMAGE", + "link": 13395 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "output_image", + "type": "IMAGE", "links": [ - 13270, - 13352 + 9768 ] } ], "properties": { "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LoraLoaderModelOnly" + "ver": "0.3.60", + "Node name for S&R": "LTXVPreprocess" }, "widgets_values": [ - "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384.safetensors", - 0.5 - ] - }, - { - "id": 4980, - "type": "GemmaAPITextEncode", - "pos": [ - -3444.8106564692425, - 3246.3342331171134 - ], - "size": [ - 347.3886205089311, - 160 - ], - "flags": {}, - "order": 16, - "mode": 4, - "inputs": [ - { - "name": "api_key", - "type": "STRING", - "widget": { - "name": "api_key" - }, - "link": 13366 - } - ], - "outputs": [ - { - "name": "conditioning", - "type": "CONDITIONING", - "links": null - } - ], - "title": "🅛🅣🅧 Gemma API Text Encode - POSITIVE", - "properties": { - "Node name for S&R": "GemmaAPITextEncode" - }, - "widgets_values": [ - "", - "", - "ltx-2.3-22b-dev.safetensors", - "ltx-2.3-22b-dev.safetensors" - ] - }, - { - "id": 4979, - "type": "PrimitiveString", - "pos": [ - -3597.879212092389, - 3131.503203622337 - ], - "size": [ - 270, - 58 - ], - "flags": {}, - "order": 3, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "STRING", - "type": "STRING", - "links": [ - 13366, - 13367 - ] - } - ], - "title": "LTX API KEY", - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "PrimitiveString" - }, - "widgets_values": [ - "" - ] - }, - { - "id": 4982, - "type": "LTXAVTextEncoderLoader", - "pos": [ - -3616.529586587242, - 3452.368379629139 - ], - "size": [ - 318.444921875, - 122 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 13368, - 13369 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LTXAVTextEncoderLoader" - }, - "widgets_values": [ - "comfy_gemma_3_12B_it.safetensors", - "ltx-2.3-22b-dev.safetensors", - "default" - ] - }, - { - "id": 3336, - "type": "LTXVPreprocess", - "pos": [ - -2570.43635256139, - 3313.8991397637924 - ], - "size": [ - 270, - 74 - ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 13395 - } - ], - "outputs": [ - { - "name": "output_image", - "type": "IMAGE", - "links": [ - 9768 - ] - } - ], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.60", - "Node name for S&R": "LTXVPreprocess" - }, - "widgets_values": [ - 18 - ] - }, - { - "id": 4983, - "type": "CM_FloatToInt", - "pos": [ - -2431.349724020329, - 3703.1711125515767 - ], - "size": [ - 270, - 58 - ], - "flags": { - "collapsed": true - }, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "a", - "type": "FLOAT", - "widget": { - "name": "a" - }, - "link": 13393 - } - ], - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 13372 - ] - } - ], - "properties": { - "aux_id": "evanspearman/ComfyMath", - "ver": "c01177221c31b8e5fbc062778fc8254aeb541638", - "Node name for S&R": "CM_FloatToInt" - }, - "widgets_values": [ - 0 + 18 ] }, { @@ -887,7 +542,7 @@ 117.23972533000051 ], "flags": {}, - "order": 19, + "order": 23, "mode": 0, "inputs": [ { @@ -923,14 +578,14 @@ "type": "RandomNoise", "pos": [ -1595.3099114719337, - 3194.760512128168 + 3238.258072571506 ], "size": [ 279.7478557810682, 82 ], "flags": {}, - "order": 5, + "order": 2, "mode": 0, "inputs": [], "outputs": [ @@ -957,14 +612,14 @@ "type": "CFGGuider", "pos": [ -1600.4177305123035, - 3327.7593389912104 + 3371.2568994345484 ], "size": [ 270, 114 ], "flags": {}, - "order": 26, + "order": 28, "mode": 0, "inputs": [ { @@ -1006,14 +661,14 @@ "type": "KSamplerSelect", "pos": [ -1599.2859684873301, - 3486.453792299004 + 3529.951352742342 ], "size": [ 270, 74 ], "flags": {}, - "order": 6, + "order": 3, "mode": 0, "inputs": [], "outputs": [ @@ -1039,14 +694,14 @@ "type": "SamplerCustomAdvanced", "pos": [ -1221.970314179945, - 3295.7653725358114 + 3339.2629329791494 ], "size": [ 212.3638671875, 106 ], "flags": {}, - "order": 30, + "order": 32, "mode": 0, "inputs": [ { @@ -1110,7 +765,7 @@ "flags": { "collapsed": false }, - "order": 7, + "order": 4, "mode": 0, "inputs": [], "outputs": [ @@ -1137,14 +792,14 @@ "type": "ManualSigmas", "pos": [ -1593.5601695497103, - 3614.617936723543 + 3658.115497166881 ], "size": [ 499.94633283206986, 67.3573576655076 ], "flags": {}, - "order": 8, + "order": 5, "mode": 0, "inputs": [], "outputs": [ @@ -1177,7 +832,7 @@ 58 ], "flags": {}, - "order": 9, + "order": 6, "mode": 0, "inputs": [], "outputs": [ @@ -1210,7 +865,7 @@ 46 ], "flags": {}, - "order": 34, + "order": 36, "mode": 0, "inputs": [ { @@ -1252,7 +907,7 @@ 122 ], "flags": {}, - "order": 33, + "order": 35, "mode": 0, "inputs": [ { @@ -1309,7 +964,7 @@ 66 ], "flags": {}, - "order": 32, + "order": 34, "mode": 0, "inputs": [ { @@ -1345,58 +1000,373 @@ "widgets_values": [] }, { - "id": 4974, - "type": "LatentUpscaleModelLoader", + "id": 4989, + "type": "PrimitiveFloat", "pos": [ - -4176.8075678023615, - 3135.9807550730275 + -3152.1276183269097, + 3984.2067549396024 ], "size": [ - 416.00371451903027, - 69.37478000918873 + 270, + 58 ], "flags": {}, - "order": 10, + "order": 7, "mode": 0, "inputs": [], "outputs": [ { - "name": "LATENT_UPSCALE_MODEL", - "type": "LATENT_UPSCALE_MODEL", + "name": "FLOAT", + "type": "FLOAT", "links": [ - 13336 + 13391, + 13392, + 13423 ] } ], + "title": "fps", "properties": { "cnr_id": "comfy-core", - "ver": "0.14.1", - "Node name for S&R": "LatentUpscaleModelLoader" + "ver": "0.16.0", + "Node name for S&R": "PrimitiveFloat" }, "widgets_values": [ - "ltx-2.3-spatial-upscaler-x2-1.0.safetensors" + 24 ] }, { - "id": 4845, - "type": "LTXVSeparateAVLatent", + "id": 4988, + "type": "PrimitiveInt", "pos": [ - -976.1182418849571, - 3297.1053739563445 + -2818.760822457342, + 3891.612150182899 ], "size": [ - 193.2916015625, - 46 + 270, + 82 ], "flags": {}, - "order": 31, + "order": 8, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "av_latent", - "type": "LATENT", - "link": 13363 - } + "name": "INT", + "type": "INT", + "links": [ + 13389, + 13390 + ] + } + ], + "title": "number of frames", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.16.0", + "Node name for S&R": "PrimitiveInt" + }, + "widgets_values": [ + 121, + "fixed" + ] + }, + { + "id": 4981, + "type": "GemmaAPITextEncode", + "pos": [ + -3072.6921705697514, + 3243.4542361026756 + ], + "size": [ + 337.49481491927054, + 160 + ], + "flags": {}, + "order": 18, + "mode": 4, + "inputs": [ + { + "name": "api_key", + "type": "STRING", + "widget": { + "name": "api_key" + }, + "link": 13367 + } + ], + "outputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "links": null + } + ], + "title": "🅛🅣🅧 Gemma API Text Encode - NEGATIVE", + "properties": { + "Node name for S&R": "GemmaAPITextEncode" + }, + "widgets_values": [ + "", + "pc game, console game, video game, cartoon, childish, ugly", + false, + "ltx-2.3-22b-dev.safetensors" + ] + }, + { + "id": 4990, + "type": "ResizeImageMaskNode", + "pos": [ + -4034.1483284692663, + 3511.4994332371434 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "IMAGE,MASK", + "link": 13394 + } + ], + "outputs": [ + { + "name": "resized", + "type": "IMAGE", + "links": [ + 13395, + 13396 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.16.0", + "Node name for S&R": "ResizeImageMaskNode" + }, + "widgets_values": [ + "scale longer dimension", + 1536, + "lanczos" + ] + }, + { + "id": 4010, + "type": "LTXVAudioVAELoader", + "pos": [ + -4655.010641467211, + 3122.9236915172387 + ], + "size": [ + 384.6576773713696, + 79.30435270514249 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "Audio VAE", + "type": "VAE", + "links": [ + 13274, + 13275 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.64", + "Node name for S&R": "LTXVAudioVAELoader" + }, + "widgets_values": [ + "ltx-2.3-22b-dev.safetensors" + ] + }, + { + "id": 3940, + "type": "CheckpointLoaderSimple", + "pos": [ + -4648.711127852091, + 3261.3436773800554 + ], + "size": [ + 383.4002295473938, + 108.51948797992713 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13217 + ] + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [] + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 13279, + 13346, + 13347, + 13422 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.56", + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "ltx-2.3-22b-dev.safetensors" + ] + }, + { + "id": 4922, + "type": "LoraLoaderModelOnly", + "pos": [ + -4204.024401614721, + 3261.100838617218 + ], + "size": [ + 454.14193097539646, + 128.44311555561626 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13217 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13270, + 13352 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1", + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "ltxv/ltx2/ltx-2.3-22b-distilled-lora-384-1.1.safetensors", + 0.5 + ] + }, + { + "id": 4974, + "type": "LatentUpscaleModelLoader", + "pos": [ + -4176.8075678023615, + 3135.9807550730275 + ], + "size": [ + 416.00371451903027, + 69.37478000918873 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "links": [ + 13336 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1", + "Node name for S&R": "LatentUpscaleModelLoader" + }, + "widgets_values": [ + "ltx-2.3-spatial-upscaler-x2-1.1.safetensors" + ] + }, + { + "id": 4982, + "type": "LTXAVTextEncoderLoader", + "pos": [ + -3616.529586587242, + 3452.368379629139 + ], + "size": [ + 318.444921875, + 122 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 13368, + 13369 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.14.1", + "Node name for S&R": "LTXAVTextEncoderLoader" + }, + "widgets_values": [ + "comfy_gemma_3_12B_it.safetensors", + "ltx-2.3-22b-dev.safetensors", + "default" + ] + }, + { + "id": 4845, + "type": "LTXVSeparateAVLatent", + "pos": [ + -976.1182418849571, + 3340.6029343996825 + ], + "size": [ + 193.2916015625, + 46 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "av_latent", + "type": "LATENT", + "link": 13363 + } ], "outputs": [ { @@ -1433,7 +1403,7 @@ 46 ], "flags": {}, - "order": 36, + "order": 38, "mode": 0, "inputs": [ { @@ -1447,14 +1417,14 @@ "name": "video_latent", "type": "LATENT", "links": [ - 13382 + 13421 ] }, { "name": "audio_latent", "type": "LATENT", "links": [ - 13383 + 13406 ] } ], @@ -1466,183 +1436,224 @@ "widgets_values": [] }, { - "id": 2004, - "type": "LoadImage", + "id": 4848, + "type": "LTXVAudioVAEDecode", "pos": [ - -4339.520366567158, - 3508.6843590474864 + 707.1096368591906, + 3416.9624911399783 ], "size": [ - 274.080078125, - 314.000244140625 + 242.46932983398438, + 46 ], "flags": {}, - "order": 11, + "order": 40, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 13406 + }, + { + "name": "audio_vae", + "type": "VAE", + "link": 13275 + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "Audio", + "type": "AUDIO", "links": [ - 11002, - 13394 + 13108 ] - }, - { - "name": "MASK", - "type": "MASK", - "links": [] } ], "properties": { "cnr_id": "comfy-core", - "ver": "0.3.56", - "Node name for S&R": "LoadImage" + "ver": "0.3.64", + "Node name for S&R": "LTXVAudioVAEDecode" }, - "widgets_values": [ - "example.png", - "image" - ] + "widgets_values": [] }, { - "id": 4989, - "type": "PrimitiveFloat", + "id": 4849, + "type": "CreateVideo", "pos": [ - -3152.1276183269097, - 3984.2067549396024 + 1025.2676127789377, + 3160.0518639357665 ], "size": [ 270, - 58 + 102 ], "flags": {}, - "order": 12, + "order": 41, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "FLOAT", + "name": "images", + "type": "IMAGE", + "link": 13420 + }, + { + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 13108 + }, + { + "name": "fps", "type": "FLOAT", + "widget": { + "name": "fps" + }, + "link": 13392 + } + ], + "outputs": [ + { + "name": "VIDEO", + "type": "VIDEO", "links": [ - 13391, - 13392, - 13393 + 13112 ] } ], - "title": "fps", "properties": { "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveFloat" + "ver": "0.14.1", + "Node name for S&R": "CreateVideo" }, "widgets_values": [ - 24 + 30 ] }, { - "id": 4988, - "type": "PrimitiveInt", + "id": 4852, + "type": "SaveVideo", "pos": [ - -2818.760822457342, - 3891.612150182899 + 1020.807842880594, + 3313.4654128903926 ], "size": [ - 270, - 82 + 523.0556530433919, + 506.3562313794205 ], "flags": {}, - "order": 13, + "order": 42, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "INT", - "type": "INT", - "links": [ - 13389, - 13390 - ] + "name": "video", + "type": "VIDEO", + "link": 13112 } ], - "title": "number of frames", + "outputs": [], "properties": { "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveInt" + "ver": "0.14.1" }, "widgets_values": [ - 121, - "fixed" + "output", + "auto", + "auto" ] }, { - "id": 4852, - "type": "SaveVideo", + "id": 4995, + "type": "LTXVTiledVAEDecode", "pos": [ - 1020.807842880594, - 3313.4654128903926 + 700.0113350797858, + 3161.86334072555 ], "size": [ - 523.0556530433919, - 506.3562313794205 + 267.6441352715875, + 198 ], "flags": {}, - "order": 40, + "order": 39, "mode": 0, "inputs": [ { - "name": "video", - "type": "VIDEO", - "link": 13112 + "name": "vae", + "type": "VAE", + "link": 13422 + }, + { + "name": "latents", + "type": "LATENT", + "link": 13421 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 13420 + ] } ], - "outputs": [], "properties": { - "cnr_id": "comfy-core", - "ver": "0.14.1" + "Node name for S&R": "LTXVTiledVAEDecode" }, "widgets_values": [ - "output", + 2, + 2, + 6, + false, "auto", "auto" ] }, { - "id": 4987, - "type": "PrimitiveBoolean", + "id": 4999, + "type": "Note", "pos": [ - -4031.3167505882293, - 3762.482778928455 + -1229.2588304733188, + 3495.319307488536 ], "size": [ - 270, - 58 + 222.81278386605618, + 88 ], "flags": {}, - "order": 14, + "order": 13, "mode": 0, "inputs": [], - "outputs": [ - { - "name": "BOOLEAN", - "type": "BOOLEAN", - "links": [ - 13387, - 13388 - ] - } + "outputs": [], + "properties": {}, + "widgets_values": [ + "Do explore various samplers and cfg values (although we advise them to be kept close to 1)" ], - "title": "bypass_i2v", - "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "PrimitiveBoolean" - }, + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 4997, + "type": "Note", + "pos": [ + 701.8056303092399, + 2959.9058362327496 + ], + "size": [ + 242.444556528573, + 102.13331675122572 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, "widgets_values": [ - true - ] + "Make sure to adjust the number of tiles and overlap to fit your hardware.\n(fewer tiles will result in faster execution, but will require more memory) " + ], + "color": "#432", + "bgcolor": "#653" }, { "id": 2483, @@ -1656,7 +1667,7 @@ 204.2556610107422 ], "flags": {}, - "order": 18, + "order": 22, "mode": 0, "inputs": [ { @@ -1688,87 +1699,120 @@ "bgcolor": "#353" }, { - "id": 4981, - "type": "GemmaAPITextEncode", + "id": 2004, + "type": "LoadImage", "pos": [ - -3072.6921705697514, - 3243.4542361026756 + -4339.520366567158, + 3508.6843590474864 ], "size": [ - 337.49481491927054, - 160 + 274.080078125, + 314.000244140625 ], "flags": {}, - "order": 17, - "mode": 4, - "inputs": [ + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ { - "name": "api_key", - "type": "STRING", - "widget": { - "name": "api_key" - }, - "link": 13367 + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 11002, + 13394 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] } ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.56", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ] + }, + { + "id": 4987, + "type": "PrimitiveBoolean", + "pos": [ + -4031.3167505882293, + 3762.482778928455 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "conditioning", - "type": "CONDITIONING", - "links": null + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 13387, + 13388 + ] } ], - "title": "🅛🅣🅧 Gemma API Text Encode - NEGATIVE", + "title": "bypass_i2v", "properties": { - "Node name for S&R": "GemmaAPITextEncode" + "cnr_id": "comfy-core", + "ver": "0.16.0", + "Node name for S&R": "PrimitiveBoolean" }, "widgets_values": [ - "", - "pc game, console game, video game, cartoon, childish, ugly", - false, - "ltx-2.3-22b-dev.safetensors" + true ] }, { - "id": 4990, - "type": "ResizeImageMaskNode", + "id": 5000, + "type": "LTXFloatToInt", "pos": [ - -4034.1483284692663, - 3511.4994332371434 + -2479.839240504694, + 3699.6873486876134 ], "size": [ - 270, - 106 + 270.1809911778764, + 58 ], - "flags": {}, - "order": 20, + "flags": { + "collapsed": true + }, + "order": 19, "mode": 0, "inputs": [ { - "name": "input", - "type": "IMAGE,MASK", - "link": 13394 + "name": "a", + "type": "FLOAT", + "widget": { + "name": "a" + }, + "link": 13423 } ], "outputs": [ { - "name": "resized", - "type": "IMAGE", + "name": "INT", + "type": "INT", "links": [ - 13395, - 13396 + 13424 ] } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.16.0", - "Node name for S&R": "ResizeImageMaskNode" + "Node name for S&R": "LTXFloatToInt" }, "widgets_values": [ - "scale longer dimension", - 1536, - "lanczos" + 0 ] } ], @@ -1853,14 +1897,6 @@ 0, "NOISE" ], - [ - 13107, - 4851, - 0, - 4849, - 0, - "IMAGE" - ], [ 13108, 4848, @@ -2021,14 +2057,6 @@ 2, "VAE" ], - [ - 13348, - 3940, - 2, - 4851, - 1, - "VAE" - ], [ 13349, 4845, @@ -2109,14 +2137,6 @@ 0, "CLIP" ], - [ - 13372, - 4983, - 0, - 3980, - 2, - "INT" - ], [ 13374, 4984, @@ -2133,22 +2153,6 @@ 3, "SIGMAS" ], - [ - 13382, - 4973, - 0, - 4851, - 0, - "LATENT" - ], - [ - 13383, - 4973, - 1, - 4848, - 0, - "LATENT" - ], [ 13387, 4987, @@ -2197,14 +2201,6 @@ 2, "FLOAT" ], - [ - 13393, - 4989, - 0, - 4983, - 0, - "FLOAT" - ], [ 13394, 2004, @@ -2228,8 +2224,67 @@ 4970, 1, "IMAGE" + ], + [ + 13406, + 4973, + 1, + 4848, + 0, + "LATENT" + ], + [ + 13420, + 4995, + 0, + 4849, + 0, + "IMAGE" + ], + [ + 13421, + 4973, + 0, + 4995, + 1, + "LATENT" + ], + [ + 13422, + 3940, + 2, + 4995, + 0, + "VAE" + ], + [ + 13423, + 4989, + 0, + 5000, + 0, + "FLOAT" + ], + [ + 13424, + 5000, + 0, + 3980, + 2, + "INT" ] ], + "floatingLinks": [ + { + "id": 3, + "origin_id": 3940, + "origin_slot": 2, + "target_id": -1, + "target_slot": -1, + "type": "VAE", + "parentId": 50 + } + ], "groups": [ { "id": 54, @@ -2247,10 +2302,10 @@ 1241, 4980, 4979, - 4982, 2612, - 2483, - 4981 + 4981, + 4982, + 2483 ] }, { @@ -2271,7 +2326,7 @@ 4528, 3159, 3336, - 4983 + 5000 ] }, { @@ -2306,9 +2361,9 @@ "font_size": 24, "flags": {}, "nodes": [ + 4990, 2004, - 4987, - 4990 + 4987 ] }, { @@ -2316,9 +2371,9 @@ "title": "Generate Low Resolution", "bounding": [ -1610.4177305123035, - 3121.160512128168, - 842.7884060863674, - 683.0021825460141 + 3164.658072571506, + 837.5910901898463, + 570.8147822608827 ], "color": "#b58b2a", "font_size": 24, @@ -2330,7 +2385,8 @@ 4831, 4829, 4984, - 4845 + 4845, + 4999 ] }, { @@ -2348,8 +2404,8 @@ "nodes": [ 4848, 4849, - 4851, - 4852 + 4852, + 4995 ] }, { @@ -2380,13 +2436,13 @@ "config": {}, "extra": { "ds": { - "scale": 0.6708350354041495, + "scale": 0.6906413973696358, "offset": [ - 5096.828085602879, - -2650.3117890915855 + 3157.7554599613713, + -2803.3113349104365 ] }, - "frontendVersion": "1.39.14", + "frontendVersion": "1.42.8", "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, @@ -2513,7 +2569,7 @@ 13279, 13346, 13347, - 13348 + 13422 ] }, { @@ -2527,7 +2583,7 @@ 13279, 13346, 13347, - 13348 + 13422 ] }, { @@ -2540,7 +2596,7 @@ "linkIds": [ 13346, 13347, - 13348 + 13422 ] }, { @@ -2561,7 +2617,7 @@ ], "linkIds": [ 13392, - 13393 + 13423 ] }, { @@ -2613,8 +2669,8 @@ { "id": 33, "pos": [ - -1643.4291815735385, - 3088.6246806014137 + -1648.2331290120594, + 3125.553934728809 ], "linkIds": [ 13302 @@ -2624,8 +2680,8 @@ "id": 34, "parentId": 33, "pos": [ - -1303.9256586080094, - 3086.9515649623418 + -1289.333304328089, + 3123.8924650229233 ], "linkIds": [ 13302 @@ -2715,8 +2771,11 @@ 2698.393757442232 ], "linkIds": [ - 13348 - ] + 13422 + ], + "floating": { + "slotType": "output" + } }, { "id": 51, @@ -2791,7 +2850,6 @@ ], "linkIds": [ 13347, - 13348, 13349 ] } @@ -2837,10 +2895,6 @@ "id": 13347, "parentId": 49 }, - { - "id": 13348, - "parentId": 50 - }, { "id": 13349, "parentId": 52 @@ -2873,10 +2927,6 @@ "id": 13392, "parentId": 43 }, - { - "id": 13393, - "parentId": 23 - }, { "id": 13395, "parentId": 5 @@ -2884,6 +2934,14 @@ { "id": 13396, "parentId": 47 + }, + { + "id": 13422, + "parentId": 50 + }, + { + "id": 13423, + "parentId": 23 } ] }, diff --git a/looping_sampler.py b/looping_sampler.py index 061c04f..20c7892 100644 --- a/looping_sampler.py +++ b/looping_sampler.py @@ -6,7 +6,7 @@ import torch from comfy.nested_tensor import NestedTensor -from .easy_samplers import LTXVBaseSampler, LTXVExtendSampler, LTXVInContextSampler +from .easy_samplers import LTXVBaseSampler, LTXVExtendSampler, LTXVInContextSampler, _get_raw_conds_from_guider from .latents import LTXVDilateLatent, LTXVSelectLatents from .nodes_registry import comfy_node @@ -231,6 +231,16 @@ def INPUT_TYPES(s): "tooltip": "The latents to use for normalizing the output latents, they will be used to normalize the output latents to the same statistics as the input latents." }, ), + "optional_negative_index_strength": ( + "FLOAT", + { + "default": 1.0, + "min": 0.0, + "max": 1.0, + "step": 0.01, + "tooltip": "The strength of the negative-index latent conditioning. Lower values reduce the influence of the reference image(s) provided via optional_negative_index_latents.", + }, + ), }, } @@ -246,9 +256,14 @@ def _extract_latent_spatial_tile(self, latent_dict, v_start, v_end, h_start, h_e return None tile_samples = latent_dict["samples"][:, :, :, v_start:v_end, h_start:h_end] if "noise_mask" in latent_dict and latent_dict["noise_mask"] is not None: - tile_masks = latent_dict["noise_mask"][ - :, :, :, v_start:v_end, h_start:h_end - ] + noise_mask = latent_dict["noise_mask"] + # If the noise mask has broadcast spatial dims (1x1), keep them + # as-is rather than slicing (which would produce zero-size dims + # for tiles starting past index 0). + if noise_mask.ndim == 5 and noise_mask.shape[3] <= 1 and noise_mask.shape[4] <= 1: + tile_masks = noise_mask + else: + tile_masks = noise_mask[:, :, :, v_start:v_end, h_start:h_end] return {"samples": tile_samples, "noise_mask": tile_masks} else: return {"samples": tile_samples} @@ -697,17 +712,24 @@ def _prepare_guider_for_chunk( """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 + positive, negative = _get_raw_conds_from_guider(guider) # 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_cond = optional_positive_conditionings[conditioning_index] + print( + f"[LoopingSampler] Chunk {chunk_index}: using prompt {conditioning_index} " + f"(of {len(optional_positive_conditionings)}), " + f"cond shape={new_cond[0][0].shape if new_cond and len(new_cond[0]) > 0 else 'N/A'}, " + f"has frame_rate={'frame_rate' in new_cond[0][1] if new_cond and len(new_cond[0]) > 1 else 'N/A'}" + ) new_guider.set_conds( - optional_positive_conditionings[conditioning_index], + new_cond, negative, ) new_guider.raw_conds = ( - optional_positive_conditionings[conditioning_index], + new_cond, negative, ) return new_guider @@ -807,7 +829,7 @@ def sample( cond_image_strength=1.0, optional_guiding_latents=None, optional_negative_index_latents=None, - optional_negative_index_strength=1.0, # hidden interface + optional_negative_index_strength=1.0, optional_positive_conditionings=None, guiding_start_step=0, guiding_end_step=1000, @@ -1087,11 +1109,23 @@ def INPUT_TYPES(s): { "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.", + "tooltip": "Prompts to encode, separated by |. 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."}), }, + "optional": { + "frame_rate": ( + "FLOAT", + { + "default": 24.0, + "min": 0.0, + "max": 1000.0, + "step": 0.01, + "tooltip": "Frame rate to embed in the conditioning (same as LTXVConditioning). Required for proper temporal and audio generation.", + }, + ), + }, } RETURN_TYPES = ("CONDITIONING",) @@ -1100,11 +1134,16 @@ def INPUT_TYPES(s): FUNCTION = "get_prompt_list" CATEGORY = "prompt" - def get_prompt_list(self, prompts, clip): + def get_prompt_list(self, prompts, clip, frame_rate=24.0): + import node_helpers + prompt_list = prompts.split("|") prompt_list = [prompt.strip() for prompt in prompt_list] encoded_prompt_list = [ - clip.encode_from_tokens_scheduled(clip.tokenize(prompt)) + node_helpers.conditioning_set_values( + clip.encode_from_tokens_scheduled(clip.tokenize(prompt)), + {"frame_rate": frame_rate}, + ) for prompt in prompt_list ] return (encoded_prompt_list,) diff --git a/pyramid_blending.py b/pyramid_blending.py new file mode 100644 index 0000000..afc4bac --- /dev/null +++ b/pyramid_blending.py @@ -0,0 +1,267 @@ +import math + +import comfy.model_management +import torch +import torch.nn.functional as F +from comfy_api.latest import io +from kornia.geometry.transform.pyramid import ( + PyrUp, + build_laplacian_pyramid, + build_pyramid, + find_next_powerof_two, + is_powerof_two, + pad, +) +from torch import Tensor + +from .nodes_registry import comfy_node + +_CHUNK_SIZE = 8 +_MASK_LOW_RES_LONG_SIDE = 64 + + +def _pad_for_laplacian(image: torch.Tensor) -> tuple[torch.Tensor, tuple[int, int]]: + """Pad an image tensor so H and W are powers of two (kornia requirement).""" + h, w = image.shape[2], image.shape[3] + pad_right = 0 + pad_down = 0 + if not (is_powerof_two(h) and is_powerof_two(w)): + pad_right = find_next_powerof_two(w) - w + pad_down = find_next_powerof_two(h) - h + image = pad(image, (0, pad_right, 0, pad_down), "reflect") + return image, (pad_right, pad_down) + + +def _gaussian_pyramid( + images: torch.Tensor, + max_level: int, + border_type: str = "reflect", + align_corners: bool = False, +) -> list[Tensor]: + h, w = images.shape[2], images.shape[3] + if not (is_powerof_two(w) and is_powerof_two(h)): + padding = (0, find_next_powerof_two(w) - w, 0, find_next_powerof_two(h) - h) + images = pad(images, padding, border_type) + return build_pyramid(images, max_level, border_type, align_corners) + + +def _resize_preserving_aspect_ratio( + images: torch.Tensor, long_side: int, mode: str +) -> torch.Tensor: + h, w = images.shape[-2:] + current_long_side = max(h, w) + if current_long_side == long_side: + return images + + scale = long_side / current_long_side + resized_h = max(1, int(round(h * scale))) + resized_w = max(1, int(round(w * scale))) + + if mode == "nearest": + return F.interpolate(images, size=(resized_h, resized_w), mode=mode) + + return F.interpolate( + images, + size=(resized_h, resized_w), + mode=mode, + align_corners=False, + ) + + +def _apply_low_res_mask_dilation( + mask: torch.Tensor, + spatial_radius: int, + long_side: int = _MASK_LOW_RES_LONG_SIDE, +) -> torch.Tensor: + if spatial_radius <= 0: + return mask + + original_size = mask.shape[-2:] + mask_low_res = _resize_preserving_aspect_ratio( + mask.float(), long_side, mode="bilinear" + ) + mask_low_res = F.max_pool2d( + mask_low_res, + kernel_size=spatial_radius * 2 + 1, + stride=1, + padding=spatial_radius, + ) + return F.interpolate( + mask_low_res, + size=original_size, + mode="bilinear", + align_corners=False, + ) + + +def _pyramid_blend_chunk( + image1: torch.Tensor, + image2: torch.Tensor, + mask: torch.Tensor, + max_level: int = 7, +) -> torch.Tensor: + """Blend a single chunk (already padded, already on device).""" + pyramid1 = build_laplacian_pyramid(image1, max_level=max_level) + pyramid2 = build_laplacian_pyramid(image2, max_level=max_level) + pyramid_mask = _gaussian_pyramid(mask, max_level=max_level) + pyr_up = PyrUp() + + output = pyramid1[-1] * pyramid_mask[-1] + pyramid2[-1] * (1 - pyramid_mask[-1]) + for i in range(len(pyramid1) - 2, -1, -1): + residual = pyramid1[i] * pyramid_mask[i] + pyramid2[i] * (1 - pyramid_mask[i]) + output = pyr_up(output) + residual + + return output + + +def _pyramid_blend( + image1: torch.Tensor, + image2: torch.Tensor, + mask: torch.Tensor, + max_level: int = 7, + device: torch.device | None = None, + output_device: torch.device | None = None, +) -> torch.Tensor: + if image1.shape != image2.shape: + raise ValueError( + f"input images must have the same size, {image1.shape} != {image2.shape}" + ) + if image1.shape[0] != mask.shape[0]: + raise ValueError( + "image_a, image_b, and mask must have the same frame count for blending" + ) + if image1.shape[-2:] != mask.shape[-2:]: + raise ValueError( + "image_a, image_b, and mask must have the same spatial resolution for blending" + ) + + _, padding = _pad_for_laplacian(image1[:1]) + orig_h, orig_w = image1.shape[-2], image1.shape[-1] + padded_min = min(orig_h + padding[1], orig_w + padding[0]) + max_level = min(max_level, int(math.log2(padded_min))) + + if any(padding): + mask = torch.nn.functional.pad( + mask, (0, padding[0], 0, padding[1]), mode="reflect" + ) + + B = image1.shape[0] + results = [] + + for start in range(0, B, _CHUNK_SIZE): + end = min(start + _CHUNK_SIZE, B) + + img1_chunk, _ = _pad_for_laplacian(image1[start:end]) + img2_chunk, _ = _pad_for_laplacian(image2[start:end]) + mask_chunk = mask[start:end] + + if device is not None: + img1_chunk = img1_chunk.to(device) + img2_chunk = img2_chunk.to(device) + mask_chunk = mask_chunk.to(device) + + out_chunk = _pyramid_blend_chunk( + img1_chunk, img2_chunk, mask_chunk, max_level=max_level + ) + cropped = out_chunk[..., :orig_h, :orig_w].clamp(0, 1) + results.append( + cropped.to(output_device) if output_device is not None else cropped + ) + + return torch.cat(results, dim=0) + + +@comfy_node( + name="LTXVLaplacianPyramidBlend", + description="LTX Laplacian Pyramid Blend", +) +class LTXVLaplacianPyramidBlend(io.ComfyNode): + """Blend two images seamlessly using Laplacian pyramid blending with a mask.""" + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTXVLaplacianPyramidBlend", + category="Lightricks/utility", + description="Blend two images seamlessly using Laplacian pyramid blending.", + inputs=[ + io.Image.Input( + "image_a", + tooltip="First source image.", + ), + io.Image.Input( + "image_b", + tooltip="Second source image.", + ), + io.Mask.Input( + "mask", + tooltip="Blend mask (white = image_a, black = image_b).", + ), + io.Boolean.Input( + "trim_to_shortest", + default=True, + tooltip="Trim image_a, image_b, and mask to the shortest sequence length before blending.", + ), + io.Int.Input( + "mask_low_res_dilation", + default=5, + min=0, + max=15, + tooltip="Downscale the mask to long side 64, dilate it spatially, then resize it back before blending.", + ), + ], + outputs=[ + io.Image.Output("image"), + ], + ) + + @classmethod + def execute( + cls, + image_a: torch.Tensor, + image_b: torch.Tensor, + mask: torch.Tensor, + trim_to_shortest: bool, + mask_low_res_dilation: int, + ) -> io.NodeOutput: + device = comfy.model_management.get_torch_device() + + if mask.ndim == 4: + mask = mask[:, :, :, 0] + if mask.ndim == 2: + mask = mask.unsqueeze(0) + + if image_a.shape[1:3] != image_b.shape[1:3]: + raise ValueError( + "image_a and image_b must have the same spatial resolution" + ) + if image_a.shape[1:3] != mask.shape[1:3]: + raise ValueError( + "image_a, image_b, and mask must have the same spatial resolution" + ) + + if trim_to_shortest: + shortest = min(image_a.shape[0], image_b.shape[0], mask.shape[0]) + image_a = image_a[:shortest] + image_b = image_b[:shortest] + mask = mask[:shortest] + elif not (image_a.shape[0] == image_b.shape[0] == mask.shape[0]): + raise ValueError( + "image_a, image_b, and mask must have the same frame count unless trim_to_shortest is enabled" + ) + + original = image_a.permute(0, 3, 1, 2) + target = image_b.permute(0, 3, 1, 2) + mask_4d = mask.unsqueeze(1).float() + mask_4d = _apply_low_res_mask_dilation(mask_4d, mask_low_res_dilation) + + result = _pyramid_blend( + original, + target, + mask_4d, + max_level=7, + device=device, + output_device=comfy.model_management.intermediate_device(), + ) + + return io.NodeOutput(result.permute(0, 2, 3, 1)) diff --git a/requirements.txt b/requirements.txt index 5649927..ec5155a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ diffusers einops huggingface_hub>=0.25.2 +kornia ninja~=1.11.1.4 transformers[timm]>=4.50.0 diff --git a/utiltily_nodes.py b/utiltily_nodes.py index f5434a9..8428b86 100644 --- a/utiltily_nodes.py +++ b/utiltily_nodes.py @@ -35,6 +35,20 @@ def _build_av_meta(video_latent: dict, audio_latent: dict) -> dict: } +@comfy_node(name="LTXFloatToInt", description="Float To Int") +class FloatToInt: + @classmethod + def INPUT_TYPES(cls): + return {"required": {"a": ("FLOAT", {"default": 0.0})}} + + RETURN_TYPES = ("INT",) + FUNCTION = "op" + CATEGORY = "math/conversion" + + def op(self, a: float) -> tuple[int]: + return (round(a),) + + @comfy_node(description="Image to CPU") class ImageToCPU: @classmethod