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/6] 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/6] 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/6] 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/6] 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 From 33fbb900107fa840fc145af3438930c788a9f77d Mon Sep 17 00:00:00 2001 From: "Jean J. de Jong" Date: Tue, 2 Jun 2026 11:11:59 +0200 Subject: [PATCH 5/6] AV looping: salvage checkpoint toggle, STG guide-mask fix, workflow updates - LTXVLoopingSampler: add optional `save_checkpoints` toggle (default off) that writes the accumulated latent to output/ltxv_looping_ckpt_v{v}_h{h}.safetensors after each temporal tile (atomic write, best-effort) so a mid-run crash leaves a decodable partial result on disk. - stg.py: fix STG crash / attention-index miscount when cond-image guides (strength != 1.0) are combined with STG perturbation. Comfy core (CORE-166) splits guide-mask self-attention into sliced-query sub-calls; STG now detects them via low_precision_attention=False, collapses them to one logical index, and returns the matching value slice when skipping. (Also isolated on branch stg-guide-mask-fix for a standalone upstream PR.) - example_workflows: update Two-Pass I2V looping workflow, notes, and generator. - .gitignore: ignore macOS junk (.DS_Store, ._*) and local AI-context files. Co-Authored-By: Claude Opus 4.8 --- .gitignore | 8 + __init__.py | 3 +- .../LTX-2.3_Two_Pass_I2V_Looping.json | 7845 ++++++++++++++--- .../LTX-2.3_Two_Pass_I2V_Looping.md | 144 +- .../generate_two_pass_i2v_looping.py | 928 +- looping_sampler.py | 68 + stg.py | 44 +- utiltily_nodes.py | 124 + 8 files changed, 7597 insertions(+), 1567 deletions(-) diff --git a/.gitignore b/.gitignore index 82f9275..42ea9d1 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,11 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +# macOS +.DS_Store +._* + +# AI assistant context (local only) +/CLAUDE.md +/AGENTS.md diff --git a/__init__.py b/__init__.py index bb1ee5d..edacc45 100644 --- a/__init__.py +++ b/__init__.py @@ -58,7 +58,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 FloatToInt, ImageToCPU +from .utiltily_nodes import FloatToInt, ImageToCPU, LTXVLoopingReferenceSchedule from .vae_patcher import LTXVPatcherVAE from .vanish_nodes import LTXVDilateVideoMask, LTXVInpaintPreprocess @@ -96,6 +96,7 @@ "LTXVMultiPromptProvider": MultiPromptProvider, "ImageToCPU": ImageToCPU, "LTXFloatToInt": FloatToInt, + "LTXVLoopingReferenceSchedule": LTXVLoopingReferenceSchedule, "LTXVStatNormLatent": LTXVStatNormLatent, "LTXVPerStepStatNormPatcher": LTXVPerStepStatNormPatcher, "LTXVGemmaCLIPModelLoader": LTXVGemmaCLIPModelLoader, 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 6ef2f4e..749fab5 100644 --- a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json @@ -1,2048 +1,7077 @@ { - "id": "6442f6ec-19f9-4ded-93a2-00c286be6dab", + "id": "2ac1902d-b377-4ca2-b201-bf669dcdfbf7", "revision": 0, - "last_node_id": 75, - "last_link_id": 65, + "last_node_id": 181, + "last_link_id": 130, "nodes": [ { "id": 1, "type": "LoadImage", - "pos": [0, 0], - "size": [300, 300], + "pos": [ + 0, + 0 + ], + "size": [ + 300, + 300 + ], "flags": {}, - "order": 0, + "order": 1, "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 - } - ], + "inputs": [], "outputs": [ { - "localized_name": "IMAGE", "name": "IMAGE", "type": "IMAGE", - "slot_index": 0, - "links": [1, 8] + "links": [ + 1, + 2, + 6 + ], + "slot_index": 0 }, { - "localized_name": "MASK", "name": "MASK", "type": "MASK", - "slot_index": 1, - "links": [] + "links": [], + "slot_index": 1 } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", "Node name for S&R": "LoadImage" }, - "widgets_values": ["reference_image.png", "image"] + "widgets_values": [ + "reference_image.png", + "image" + ] }, { - "id": 3, - "type": "PrimitiveInt", - "pos": [0, 800], - "size": [210, 100], - "flags": {}, - "order": 1, + "id": 110, + "type": "SetNode", + "pos": [ + 320, + 20 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 110, "mode": 0, "inputs": [ { - "localized_name": "value", - "name": "value", - "type": "INT", - "widget": { "name": "value" }, - "link": null + "name": "IMAGE", + "type": "IMAGE", + "link": 1 } ], "outputs": [ { - "localized_name": "INT", - "name": "INT", - "type": "INT", - "slot_index": 0, - "links": [9, 11] + "name": "*", + "type": "*", + "links": null } ], - "title": "Frame Count", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "PrimitiveInt" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "start_image" }, - "widgets_values": [241, "fixed"] + "widgets_values": [ + "start_image" + ], + "title": "Set_start_image" }, { - "id": 20, - "type": "CLIPTextEncode", - "pos": [900, 0], - "size": [400, 180], + "id": 2, + "type": "LTXVPreprocess", + "pos": [ + 0, + 340 + ], + "size": [ + 300, + 200 + ], "flags": {}, - "order": 18, + "order": 2, "mode": 0, "inputs": [ - { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 3 }, { - "localized_name": "text", - "name": "text", - "type": "STRING", - "widget": { "name": "text" }, - "link": null + "name": "image", + "type": "IMAGE", + "link": 2 } ], "outputs": [ { - "localized_name": "CONDITIONING", - "name": "CONDITIONING", - "type": "CONDITIONING", - "slot_index": 0, - "links": [5] + "name": "output_image", + "type": "IMAGE", + "links": [ + 3 + ], + "slot_index": 0 } ], - "title": "Positive Prompt", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "LTXVPreprocess" }, "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." + 18 ] }, { - "id": 21, - "type": "CLIPTextEncode", - "pos": [900, 220], - "size": [400, 120], - "flags": {}, - "order": 19, + "id": 111, + "type": "SetNode", + "pos": [ + 320, + 400 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 111, "mode": 0, "inputs": [ - { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 4 }, { - "localized_name": "text", - "name": "text", - "type": "STRING", - "widget": { "name": "text" }, - "link": null + "name": "IMAGE", + "type": "IMAGE", + "link": 3 } ], "outputs": [ { - "localized_name": "CONDITIONING", - "name": "CONDITIONING", - "type": "CONDITIONING", - "slot_index": 0, - "links": [6] + "name": "*", + "type": "*", + "links": null } ], - "title": "Negative Prompt", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "preprocessed_start_image" }, "widgets_values": [ - "pc game, console game, video game, cartoon, childish, ugly, blurry" - ] + "preprocessed_start_image" + ], + "title": "Set_preprocessed_start_image" }, { - "id": 40, - "type": "RandomNoise", - "pos": [1950, -80], - "size": [210, 100], + "id": 4, + "type": "PrimitiveFloat", + "pos": [ + 0, + 800 + ], + "size": [ + 200, + 100 + ], "flags": {}, - "order": 2, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4, + 15 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveFloat" + }, + "widgets_values": [ + 24 + ], + "title": "Frame Rate" + }, + { + "id": 112, + "type": "SetNode", + "pos": [ + 220, + 910 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 112, "mode": 0, "inputs": [ { - "localized_name": "noise_seed", - "name": "noise_seed", - "type": "INT", - "widget": { "name": "noise_seed" }, - "link": null + "name": "FLOAT", + "type": "FLOAT", + "link": 4 } ], "outputs": [ { - "localized_name": "NOISE", - "name": "NOISE", - "type": "NOISE", - "slot_index": 0, - "links": [27] + "name": "*", + "type": "*", + "links": null } ], - "title": "Stage 1 Noise", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "RandomNoise" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "fps" }, - "widgets_values": [42, "fixed"] + "widgets_values": [ + "fps" + ], + "title": "Set_fps" }, { - "id": 41, - "type": "KSamplerSelect", - "pos": [1950, 40], - "size": [250, 80], + "id": 5, + "type": "PrimitiveBoolean", + "pos": [ + 0, + 930 + ], + "size": [ + 200, + 80 + ], "flags": {}, - "order": 3, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveBoolean" + }, + "widgets_values": [ + true + ], + "title": "I2V Enable" + }, + { + "id": 113, + "type": "SetNode", + "pos": [ + 220, + 980 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 113, "mode": 0, "inputs": [ { - "localized_name": "sampler_name", - "name": "sampler_name", - "type": "COMBO", - "widget": { "name": "sampler_name" }, - "link": null + "name": "BOOLEAN", + "type": "BOOLEAN", + "link": 5 } ], "outputs": [ { - "localized_name": "SAMPLER", - "name": "SAMPLER", - "type": "SAMPLER", - "slot_index": 0, - "links": [28] + "name": "*", + "type": "*", + "links": null } ], - "title": "Stage 1 Sampler", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "KSamplerSelect" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "i2v_enable" }, - "widgets_values": ["euler_ancestral_cfg_pp"] + "widgets_values": [ + "i2v_enable" + ], + "title": "Set_i2v_enable" }, { - "id": 42, - "type": "ManualSigmas", - "pos": [1950, 140], - "size": [350, 80], + "id": 7, + "type": "PrimitiveInt", + "pos": [ + 220, + 800 + ], + "size": [ + 210, + 100 + ], "flags": {}, - "order": 4, + "order": 7, "mode": 0, - "inputs": [ - { - "localized_name": "sigmas", - "name": "sigmas", - "type": "STRING", - "widget": { "name": "sigmas" }, - "link": null - } - ], + "inputs": [], "outputs": [ { - "localized_name": "SIGMAS", - "name": "SIGMAS", - "type": "SIGMAS", - "slot_index": 0, - "links": [29] + "name": "INT", + "type": "INT", + "links": [ + 7 + ], + "slot_index": 0 } ], - "title": "Stage 1 Sigmas", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "ManualSigmas" + "Node name for S&R": "PrimitiveInt" }, "widgets_values": [ - "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0" - ] + 1088, + "fixed" + ], + "title": "Final Height Target" }, { - "id": 44, - "type": "LTXVLoopingSampler", - "pos": [1950, 400], - "size": [400, 580], + "id": 16, + "type": "GetImageSize", + "pos": [ + 0, + 580 + ], + "size": [ + 300, + 100 + ], "flags": {}, - "order": 28, + "order": 16, "mode": 0, "inputs": [ { - "localized_name": "model", - "name": "model", - "type": "MODEL", - "link": 25 - }, - { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 26 }, + "name": "image", + "type": "IMAGE", + "link": 6 + } + ], + "outputs": [ { - "localized_name": "noise", - "name": "noise", - "type": "NOISE", - "link": 27 + "name": "width", + "type": "INT", + "links": [ + 9 + ], + "slot_index": 0 }, { - "localized_name": "sampler", - "name": "sampler", - "type": "SAMPLER", - "link": 28 + "name": "height", + "type": "INT", + "links": [ + 10 + ], + "slot_index": 1 }, { - "localized_name": "sigmas", - "name": "sigmas", - "type": "SIGMAS", - "link": 29 - }, + "name": "batch_size", + "type": "INT", + "links": [], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "GetImageSize" + }, + "widgets_values": [], + "title": "Reference Image Size" + }, + { + "id": 17, + "type": "ComfyMathExpression", + "pos": [ + 470, + 1000 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ { - "localized_name": "guider", - "name": "guider", - "type": "GUIDER", - "link": 30 - }, + "name": "values.a", + "type": "FLOAT,INT", + "link": 7 + } + ], + "outputs": [ { - "localized_name": "latents", - "name": "latents", - "type": "LATENT", - "link": 31 + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 0 }, { - "localized_name": "optional_cond_images", - "name": "optional_cond_images", - "shape": 7, - "type": "IMAGE", - "link": 32 - }, + "name": "INT", + "type": "INT", + "links": [ + 8, + 13 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ComfyMathExpression" + }, + "widgets_values": [ + "max(64, round(a / 64) * 64)" + ], + "title": "Align Final Height x64" + }, + { + "id": 18, + "type": "ComfyMathExpression", + "pos": [ + 780, + 1000 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ { - "localized_name": "optional_guiding_latents", - "name": "optional_guiding_latents", - "shape": 7, - "type": "LATENT", - "link": null + "name": "values.a", + "type": "FLOAT,INT", + "link": 8 }, { - "localized_name": "optional_positive_conditionings", - "name": "optional_positive_conditionings", - "shape": 7, - "type": "CONDITIONING", - "link": null + "name": "values.b", + "type": "FLOAT,INT", + "link": 9 }, { - "localized_name": "optional_negative_index_latents", - "name": "optional_negative_index_latents", - "shape": 7, - "type": "LATENT", - "link": 33 + "name": "values.c", + "type": "FLOAT,INT", + "link": 10 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 0 }, { - "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", + "name": "INT", "type": "INT", - "widget": { "name": "vertical_tiles" }, - "link": null - }, + "links": [ + 11 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ComfyMathExpression" + }, + "widgets_values": [ + "max(64, round((a * b / max(1, c)) / 64) * 64)" + ], + "title": "Final Width From Ref Aspect" + }, + { + "id": 19, + "type": "ComfyMathExpression", + "pos": [ + 1090, + 1000 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ { - "localized_name": "spatial_overlap", - "name": "spatial_overlap", - "type": "INT", - "widget": { "name": "spatial_overlap" }, - "link": null - }, + "name": "values.a", + "type": "FLOAT,INT", + "link": 11 + } + ], + "outputs": [ { - "localized_name": "adain_factor", - "name": "adain_factor", - "shape": 7, + "name": "FLOAT", "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 + "links": [], + "slot_index": 0 }, { - "localized_name": "guiding_end_step", - "name": "guiding_end_step", - "shape": 7, + "name": "INT", "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] + "links": [ + 12 + ], + "slot_index": 1 } ], - "title": "Stage 1 — Generate", "properties": { - "cnr_id": "ComfyUI-LTXVideo", - "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", - "Node name for S&R": "LTXVLoopingSampler" + "Node name for S&R": "ComfyMathExpression" }, - "widgets_values": [128, 24, 1, 0.5, 1, 1, 1, 1, 0.15, 0, 1000, "0"], - "color": "#335533", - "bgcolor": "#223322" + "widgets_values": [ + "max(32, int(a / 2))" + ], + "title": "Stage 1 Width" }, { - "id": 4, - "type": "PrimitiveFloat", - "pos": [0, 930], - "size": [210, 100], - "flags": {}, - "order": 5, + "id": 114, + "type": "SetNode", + "pos": [ + 1100, + 1180 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 114, "mode": 0, "inputs": [ { - "localized_name": "value", - "name": "value", - "type": "FLOAT", - "widget": { "name": "value" }, - "link": null + "name": "INT", + "type": "INT", + "link": 12 } ], "outputs": [ { - "localized_name": "FLOAT", - "name": "FLOAT", - "type": "FLOAT", - "slot_index": 0, - "links": [7, 62, 64] + "name": "*", + "type": "*", + "links": null } ], - "title": "Frame Rate", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "PrimitiveFloat" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "stage_1_width" }, - "widgets_values": [24] + "widgets_values": [ + "stage_1_width" + ], + "title": "Set_stage_1_width" }, { - "id": 75, - "type": "FloatToInt", - "pos": [991.6666666666669, 928.3333333333287], - "size": [270, 82], - "flags": { "collapsed": true }, - "order": 17, + "id": 23, + "type": "ComfyMathExpression", + "pos": [ + 470, + 1180 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 23, "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 + "name": "values.a", + "type": "FLOAT,INT", + "link": 13 } ], "outputs": [ { - "localized_name": "int_value", - "name": "int_value", + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 0 + }, + { + "name": "INT", "type": "INT", - "links": [65] + "links": [ + 14 + ], + "slot_index": 1 } ], "properties": { - "aux_id": "danTheMonk/comfyui-int-and-float", - "ver": "a8b5a383ec6b5cff43c2f81a9a3aa24b87c4c720", - "Node name for S&R": "FloatToInt" + "Node name for S&R": "ComfyMathExpression" }, - "widgets_values": [0, "down (floor)"] + "widgets_values": [ + "max(32, int(a / 2))" + ], + "title": "Stage 1 Height" }, { - "id": 2, - "type": "LTXVPreprocess", - "pos": [11.666666666666666, 355.00000000000017], - "size": [220, 58], - "flags": {}, - "order": 14, + "id": 115, + "type": "SetNode", + "pos": [ + 780, + 1230 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 115, "mode": 0, "inputs": [ { - "localized_name": "image", - "name": "image", - "type": "IMAGE", - "link": 1 - }, - { - "localized_name": "img_compression", - "name": "img_compression", + "name": "INT", "type": "INT", - "widget": { "name": "img_compression" }, - "link": null + "link": 14 } ], "outputs": [ { - "localized_name": "output_image", - "name": "output_image", - "type": "IMAGE", - "slot_index": 0, - "links": [15, 20, 32] + "name": "*", + "type": "*", + "links": null } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVPreprocess" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "stage_1_height" }, - "widgets_values": [18] + "widgets_values": [ + "stage_1_height" + ], + "title": "Set_stage_1_height" }, { - "id": 23, - "type": "ResizeImageMaskNode", - "pos": [8.333333333333284, 505.00000000000085], - "size": [300, 106], + "id": 24, + "type": "LTXVLoopingReferenceSchedule", + "pos": [ + 0, + 1060 + ], + "size": [ + 430, + 310 + ], "flags": {}, - "order": 15, + "order": 24, "mode": 0, "inputs": [ { - "localized_name": "input", - "name": "input", - "type": "IMAGE,MASK", - "link": 8 + "name": "reference_images", + "type": "IMAGE", + "link": 122 }, { - "localized_name": "resize_type", - "name": "resize_type", - "type": "COMFY_DYNAMICCOMBO_V3", - "widget": { "name": "resize_type" }, - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": 15, + "widget": { + "name": "frame_rate" + } }, { - "localized_name": "resize_type.longer_size", - "name": "resize_type.longer_size", - "type": "INT", - "widget": { "name": "resize_type.longer_size" }, - "link": null + "name": "total_duration", + "type": "FLOAT", + "link": null, + "widget": { + "name": "total_duration" + } }, { - "localized_name": "scale_method", - "name": "scale_method", - "type": "COMBO", - "widget": { "name": "scale_method" }, - "link": null + "name": "tile_duration", + "type": "FLOAT", + "link": null, + "widget": { + "name": "tile_duration" + } + }, + { + "name": "overlap_duration", + "type": "FLOAT", + "link": null, + "widget": { + "name": "overlap_duration" + } + }, + { + "name": "reference_offset", + "type": "FLOAT", + "link": null, + "widget": { + "name": "reference_offset" + } } ], "outputs": [ { - "localized_name": "resized", - "name": "resized", + "name": "reference_images", "type": "IMAGE", - "slot_index": 0, - "links": [39, 54] + "links": [ + 16 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 17 + ], + "slot_index": 1 + }, + { + "name": "temporal_tile_size", + "type": "INT", + "links": [ + 18 + ], + "slot_index": 2 + }, + { + "name": "temporal_overlap", + "type": "INT", + "links": [ + 19 + ], + "slot_index": 3 + }, + { + "name": "reference_indices", + "type": "STRING", + "links": [ + 20 + ], + "slot_index": 4 + }, + { + "name": "tile_count", + "type": "INT", + "links": [], + "slot_index": 5 } ], - "title": "Resize Reference", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "ResizeImageMaskNode" + "Node name for S&R": "LTXVLoopingReferenceSchedule" }, - "widgets_values": ["scale longer dimension", 1536, "lanczos"] + "widgets_values": [ + 24, + 30.0, + 10.0, + 3.3333333333333335, + 0.6666666666666666 + ], + "title": "Looping Timing + Reference Schedule" }, { - "id": 14, - "type": "LatentUpscaleModelLoader", - "pos": [452.82236965026885, 683.519747085575], - "size": [376.2368404663082, 58], - "flags": {}, - "order": 6, + "id": 116, + "type": "SetNode", + "pos": [ + 450, + 1380 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 116, "mode": 0, "inputs": [ { - "localized_name": "model_name", - "name": "model_name", - "type": "COMBO", - "widget": { "name": "model_name" }, - "link": null + "name": "IMAGE", + "type": "IMAGE", + "link": 16 } ], "outputs": [ { - "localized_name": "LATENT_UPSCALE_MODEL", - "name": "LATENT_UPSCALE_MODEL", - "type": "LATENT_UPSCALE_MODEL", - "slot_index": 0, - "links": [36] + "name": "*", + "type": "*", + "links": null } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LatentUpscaleModelLoader" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "scheduled_reference_images" }, - "widgets_values": ["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"] + "widgets_values": [ + "scheduled_reference_images" + ], + "title": "Set_scheduled_reference_images" }, { - "id": 13, - "type": "LoraLoaderModelOnly", - "pos": [451.8815797668459, 542.2302684844991], - "size": [373.4144708160393, 82], - "flags": {}, - "order": 20, + "id": 117, + "type": "SetNode", + "pos": [ + 450, + 1450 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 117, "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 + "name": "INT", + "type": "INT", + "link": 17 } ], "outputs": [ { - "localized_name": "MODEL", - "name": "MODEL", - "type": "MODEL", - "slot_index": 0, - "links": [22, 25, 44, 47] + "name": "*", + "type": "*", + "links": null } ], - "title": "Distilled LoRA (both stages)", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LoraLoaderModelOnly" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "frame_count" }, - "widgets_values": ["LTX/ltx-2.3-22b-distilled-lora-384.safetensors", 0.5] + "widgets_values": [ + "frame_count" + ], + "title": "Set_frame_count" }, { - "id": 12, - "type": "LTXVAudioVAELoader", - "pos": [450, 400], - "size": [369.75658755188215, 58], - "flags": {}, - "order": 7, + "id": 118, + "type": "SetNode", + "pos": [ + 650, + 1380 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 118, "mode": 0, "inputs": [ { - "localized_name": "ckpt_name", - "name": "ckpt_name", - "type": "COMBO", - "widget": { "name": "ckpt_name" }, - "link": null + "name": "INT", + "type": "INT", + "link": 18 } ], "outputs": [ { - "localized_name": "Audio VAE", - "name": "Audio VAE", - "type": "VAE", - "slot_index": 0, - "links": [10, 59] + "name": "*", + "type": "*", + "links": null } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVAudioVAELoader" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "temporal_tile_size" }, - "widgets_values": ["ltx-2.3-22b-dev.safetensors"] + "widgets_values": [ + "temporal_tile_size" + ], + "title": "Set_temporal_tile_size" }, { - "id": 11, - "type": "LTXAVTextEncoderLoader", - "pos": [448.1184202331541, 213.86843580322656], - "size": [373.41447081603906, 106], - "flags": {}, - "order": 8, + "id": 119, + "type": "SetNode", + "pos": [ + 650, + 1450 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 119, "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 + "name": "INT", + "type": "INT", + "link": 19 } ], "outputs": [ { - "localized_name": "CLIP", - "name": "CLIP", - "type": "CLIP", - "slot_index": 0, - "links": [3, 4] + "name": "*", + "type": "*", + "links": null } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXAVTextEncoderLoader" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "temporal_overlap" }, "widgets_values": [ - "gemma_3_12B_it.safetensors", - "ltx-2.3-22b-dev.safetensors", - "default" - ] + "temporal_overlap" + ], + "title": "Set_temporal_overlap" }, { - "id": 10, - "type": "CheckpointLoaderSimple", - "pos": [445.29605058288524, 31.046066152957746], - "size": [371.63816731872794, 98], - "flags": {}, - "order": 9, + "id": 120, + "type": "SetNode", + "pos": [ + 850, + 1380 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 120, "mode": 0, "inputs": [ { - "localized_name": "ckpt_name", - "name": "ckpt_name", - "type": "COMBO", - "widget": { "name": "ckpt_name" }, - "link": null - } + "name": "STRING", + "type": "STRING", + "link": 20 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "reference_indices" + }, + "widgets_values": [ + "reference_indices" + ], + "title": "Set_reference_indices" + }, + { + "id": 6, + "type": "Note", + "pos": [ + 0, + 1410 + ], + "size": [ + 440, + 340 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "Node name for S&R": "Note" + }, + "widgets_values": [ + "## Late Reference Tile Layout\n\nThe Looping Timing + Reference Schedule node calculates clip frames, sampler tile size, overlap, and late reference indices.\n\nDefault frame count: 713 (`8n+1`).\nDefault tile size: 240. Overlap: 80. Stride: 160.\nDefault tile starts: 0, 160, 320, 480.\n\nThe current image/snippet branches match these default indices:\n `0, 224, 384, 544, 704`\nIf duration adds tiles after the supplied refs, the schedule repeats the last image. It truncates extra supplied refs for shorter clips.\nThe looping sampler already repeats the last tile prompt after the snippet list ends.\n\nEdit duration, tile duration, overlap, and late-reference offset inside the schedule node. Edit the Global Positive Prompt once and each Tile Prompt Snippet beside its late reference branch. The graph concatenates `global + snippet` for each tile and joins those prompts with `|` for the multi-prompt node." + ] + }, + { + "id": 10, + "type": "CheckpointLoaderSimple", + "pos": [ + 600, + 0 + ], + "size": [ + 350, + 150 ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], "outputs": [ { - "localized_name": "MODEL", "name": "MODEL", "type": "MODEL", - "slot_index": 0, - "links": [2] + "links": [ + 23 + ], + "slot_index": 0 }, { - "localized_name": "CLIP", "name": "CLIP", "type": "CLIP", - "slot_index": 1, - "links": [] + "links": [], + "slot_index": 1 }, { - "localized_name": "VAE", "name": "VAE", "type": "VAE", - "slot_index": 2, - "links": [14, 21, 26, 37, 38, 48, 57] + "links": [ + 21 + ], + "slot_index": 2 } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", "Node name for S&R": "CheckpointLoaderSimple" }, - "widgets_values": ["ltx-2.3-22b-dev.safetensors"] + "widgets_values": [ + "ltx-2.3-22b-dev.safetensors" + ] }, { - "id": 22, - "type": "LTXVConditioning", - "pos": [999.7237276428352, 409.4078988342295], - "size": [210, 78], - "flags": {}, - "order": 24, + "id": 121, + "type": "SetNode", + "pos": [ + 960, + 70 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 121, "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 + "name": "VAE", + "type": "VAE", + "link": 21 } ], "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] + "name": "*", + "type": "*", + "links": null } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVConditioning" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "video_vae" }, - "widgets_values": [24] + "widgets_values": [ + "video_vae" + ], + "title": "Set_video_vae" }, { - "id": 31, - "type": "LTXVEmptyLatentAudio", - "pos": [1400.940789883423, 211.9868560363806], - "size": [252.82236965026914, 106], + "id": 11, + "type": "LTXAVTextEncoderLoader", + "pos": [ + 600, + 180 + ], + "size": [ + 380, + 130 + ], "flags": {}, - "order": 23, + "order": 11, "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 - }, + "inputs": [], + "outputs": [ { - "localized_name": "batch_size", - "name": "batch_size", - "type": "INT", - "widget": { "name": "batch_size" }, - "link": null + "name": "CLIP", + "type": "CLIP", + "links": [ + 27, + 28, + 103 + ], + "slot_index": 0 } ], + "properties": { + "Node name for S&R": "LTXAVTextEncoderLoader" + }, + "widgets_values": [ + "comfy_gemma_3_12B_it.safetensors", + "ltx-2.3-22b-dev.safetensors", + "default" + ] + }, + { + "id": 12, + "type": "LTXVAudioVAELoader", + "pos": [ + 600, + 400 + ], + "size": [ + 350, + 100 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], "outputs": [ { - "localized_name": "Latent", - "name": "Latent", - "type": "LATENT", - "slot_index": 0, - "links": [19] + "name": "Audio VAE", + "type": "VAE", + "links": [ + 22 + ], + "slot_index": 0 } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVEmptyLatentAudio" + "Node name for S&R": "LTXVAudioVAELoader" }, - "widgets_values": [97, 25, 1] + "widgets_values": [ + "ltx-2.3-22b-dev.safetensors" + ] }, { - "id": 30, - "type": "EmptyLTXVLatentVideo", - "pos": [1400, 0], - "size": [252.82236965026868, 130], - "flags": {}, - "order": 16, + "id": 122, + "type": "SetNode", + "pos": [ + 960, + 420 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 122, "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 + "name": "VAE", + "type": "VAE", + "link": 22 } ], "outputs": [ { - "localized_name": "LATENT", - "name": "LATENT", - "type": "LATENT", - "slot_index": 0, - "links": [16] + "name": "*", + "type": "*", + "links": null } ], - "title": "Stage 1 Empty Latent", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "EmptyLTXVLatentVideo" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "audio_vae" }, - "widgets_values": [960, 544, 241, 1] + "widgets_values": [ + "audio_vae" + ], + "title": "Set_audio_vae" }, { - "id": 43, - "type": "CFGGuider", - "pos": [1960.3486887176518, 256.9342179016131], - "size": [250, 98], + "id": 13, + "type": "LoraLoaderModelOnly", + "pos": [ + 600, + 530 + ], + "size": [ + 380, + 100 + ], "flags": {}, - "order": 26, + "order": 13, "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] + "name": "MODEL", + "type": "MODEL", + "links": [ + 24 + ], + "slot_index": 0 } ], - "title": "Stage 1 Guider", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "CFGGuider" + "Node name for S&R": "LoraLoaderModelOnly" }, - "widgets_values": [1], - "color": "#335533", - "bgcolor": "#223322" + "widgets_values": [ + "ltx-2.3-22b-distilled-lora-384.safetensors", + 0.5 + ], + "title": "Distilled LoRA (both stages)" }, { - "id": 63, - "type": "CFGGuider", - "pos": [2563.9220909318396, 255.9369806251849], - "size": [235.2013751337572, 98], + "id": 25, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 600, + 660 + ], + "size": [ + 400, + 190 + ], "flags": {}, - "order": 27, + "order": 25, "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 + "link": 24 }, { - "localized_name": "cfg", - "name": "cfg", - "type": "FLOAT", - "widget": { "name": "cfg" }, + "name": "clip", + "type": "CLIP", "link": null } ], "outputs": [ { - "localized_name": "GUIDER", - "name": "GUIDER", - "type": "GUIDER", - "slot_index": 0, - "links": [52] + "name": "MODEL", + "type": "MODEL", + "links": [ + 25 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "slot_index": 1 } ], - "title": "Stage 2 Guider", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "CFGGuider" + "Node name for S&R": "Power Lora Loader (rgthree)", + "cnr_id": "rgthree-comfy", + "aux_id": "rgthree/rgthree-comfy", + "Show Strengths": "Single Strength", + "Match": "" }, - "widgets_values": [1], - "color": "#333355", - "bgcolor": "#222233" + "widgets_values": [], + "title": "Extra LoRAs (rgthree)" }, { - "id": 62, - "type": "ManualSigmas", - "pos": [3047.723288482116, 178.70409580402023], - "size": [277.23288482116413, 58], - "flags": {}, - "order": 10, + "id": 123, + "type": "SetNode", + "pos": [ + 1010, + 860 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 123, "mode": 0, "inputs": [ { - "localized_name": "sigmas", - "name": "sigmas", - "type": "STRING", - "widget": { "name": "sigmas" }, - "link": null + "name": "MODEL", + "type": "MODEL", + "link": 25 } ], "outputs": [ { - "localized_name": "SIGMAS", - "name": "SIGMAS", - "type": "SIGMAS", - "slot_index": 0, - "links": [51] + "name": "*", + "type": "*", + "links": null } ], - "title": "Stage 2 Sigmas", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "ManualSigmas" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "model" }, - "widgets_values": ["0.85, 0.7250, 0.4219, 0.0"] + "widgets_values": [ + "model" + ], + "title": "Set_model" }, { - "id": 61, - "type": "KSamplerSelect", - "pos": [3050, 69.5972497324864], - "size": [250, 58], + "id": 14, + "type": "LatentUpscaleModelLoader", + "pos": [ + 600, + 880 + ], + "size": [ + 380, + 100 + ], "flags": {}, - "order": 11, + "order": 14, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "localized_name": "sampler_name", - "name": "sampler_name", - "type": "COMBO", - "widget": { "name": "sampler_name" }, - "link": null + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "links": [ + 26 + ], + "slot_index": 0 } ], - "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" + "Node name for S&R": "LatentUpscaleModelLoader" }, - "widgets_values": ["euler_cfg_pp"] + "widgets_values": [ + "ltx-2.3-spatial-upscaler-x2-1.1.safetensors" + ] }, { - "id": 60, - "type": "RandomNoise", - "pos": [3050, -80], - "size": [210, 82], - "flags": {}, - "order": 12, + "id": 124, + "type": "SetNode", + "pos": [ + 1010, + 1250 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 124, "mode": 0, "inputs": [ { - "localized_name": "noise_seed", - "name": "noise_seed", - "type": "INT", - "widget": { "name": "noise_seed" }, - "link": null + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "link": 26 } ], "outputs": [ { - "localized_name": "NOISE", - "name": "NOISE", - "type": "NOISE", - "slot_index": 0, - "links": [49] + "name": "*", + "type": "*", + "links": null } ], - "title": "Stage 2 Noise", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "RandomNoise" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "latent_upscale_model" }, - "widgets_values": [43, "fixed"] + "widgets_values": [ + "latent_upscale_model" + ], + "title": "Set_latent_upscale_model" }, { - "id": 74, - "type": "SaveVideo", - "pos": [3975.7575757575723, 1040.9090909090924], - "size": [250, 106], + "id": 20, + "type": "CLIPTextEncode", + "pos": [ + 1150, + 0 + ], + "size": [ + 400, + 180 + ], "flags": {}, - "order": 38, + "order": 20, "mode": 0, "inputs": [ { - "localized_name": "video", - "name": "video", - "type": "VIDEO", - "link": 63 + "name": "clip", + "type": "CLIP", + "link": 27 }, { - "localized_name": "filename_prefix", - "name": "filename_prefix", + "name": "text", "type": "STRING", - "widget": { "name": "filename_prefix" }, - "link": null - }, + "link": 102, + "widget": { + "name": "text" + } + } + ], + "outputs": [ { - "localized_name": "format", - "name": "format", - "type": "COMBO", - "widget": { "name": "format" }, - "link": null - }, + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 29 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "title": "Global Prompt Fallback Encode" + }, + { + "id": 21, + "type": "CLIPTextEncode", + "pos": [ + 1150, + 220 + ], + "size": [ + 400, + 120 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ { - "localized_name": "codec", - "name": "codec", - "type": "COMBO", - "widget": { "name": "codec" }, - "link": null + "name": "clip", + "type": "CLIP", + "link": 28 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 30 + ], + "slot_index": 0 } ], - "outputs": [], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "SaveVideo" + "Node name for S&R": "CLIPTextEncode" }, - "widgets_values": ["LTX-2.3/Looping", "auto", "auto"] + "widgets_values": [ + "pc game, console game, video game, cartoon, childish, ugly, blurry" + ], + "title": "Negative Prompt" }, { - "id": 73, - "type": "CreateVideo", - "pos": [3649.9999999999995, 1049.9999999999995], - "size": [243.939393939394, 78], + "id": 22, + "type": "LTXVConditioning", + "pos": [ + 1150, + 400 + ], + "size": [ + 300, + 120 + ], "flags": {}, - "order": 37, + "order": 22, "mode": 0, "inputs": [ { - "localized_name": "images", - "name": "images", - "type": "IMAGE", - "link": 60 + "name": "positive", + "type": "CONDITIONING", + "link": 29 }, { - "localized_name": "audio", - "name": "audio", - "shape": 7, - "type": "AUDIO", - "link": 61 + "name": "negative", + "type": "CONDITIONING", + "link": 30 }, { - "localized_name": "fps", - "name": "fps", + "name": "frame_rate", "type": "FLOAT", - "widget": { "name": "fps" }, - "link": 62 + "link": 31 } ], "outputs": [ { - "localized_name": "VIDEO", - "name": "VIDEO", - "type": "VIDEO", - "slot_index": 0, - "links": [63] + "name": "positive", + "type": "CONDITIONING", + "links": [ + 32 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 33 + ], + "slot_index": 1 } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "CreateVideo" + "Node name for S&R": "LTXVConditioning" }, - "widgets_values": [30] + "widgets_values": [ + 24 + ] }, { - "id": 72, - "type": "LTXVAudioVAEDecode", - "pos": [3643.9393939393935, 899.3939393939382], - "size": [203.00000610351563, 46], - "flags": {}, - "order": 36, + "id": 125, + "type": "GetNode", + "pos": [ + 1150, + 342 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 125, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "localized_name": "samples", - "name": "samples", - "type": "LATENT", - "link": 58 - }, + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 31 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "fps" + ], + "title": "Get_fps" + }, + { + "id": 126, + "type": "SetNode", + "pos": [ + 1470, + 400 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 126, + "mode": 0, + "inputs": [ { - "localized_name": "audio_vae", - "name": "audio_vae", - "type": "VAE", - "link": 59 + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 32 } ], "outputs": [ { - "localized_name": "Audio", - "name": "Audio", - "type": "AUDIO", - "slot_index": 0, - "links": [61] + "name": "*", + "type": "*", + "links": null } ], "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVAudioVAEDecode" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "positive_conditioning" }, - "widgets_values": [] + "widgets_values": [ + "positive_conditioning" + ], + "title": "Set_positive_conditioning" }, { - "id": 71, - "type": "LTXVSpatioTemporalTiledVAEDecode", - "pos": [3615.151515151515, 569.393939393939], - "size": [350, 242], - "flags": {}, - "order": 35, + "id": 127, + "type": "SetNode", + "pos": [ + 1470, + 470 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 127, "mode": 0, "inputs": [ - { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 57 }, { - "localized_name": "latents", - "name": "latents", - "type": "LATENT", - "link": null - }, + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 33 + } + ], + "outputs": [ { - "localized_name": "spatial_tiles", - "name": "spatial_tiles", - "type": "INT", - "widget": { "name": "spatial_tiles" }, - "link": null - }, + "name": "*", + "type": "*", + "links": null + } + ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "negative_conditioning" + }, + "widgets_values": [ + "negative_conditioning" + ], + "title": "Set_negative_conditioning" + }, + { + "id": 30, + "type": "EmptyLTXVLatentVideo", + "pos": [ + 1950, + 0 + ], + "size": [ + 250, + 150 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ { - "localized_name": "spatial_overlap", - "name": "spatial_overlap", + "name": "width", "type": "INT", - "widget": { "name": "spatial_overlap" }, - "link": null + "link": 34, + "widget": { + "name": "width" + } }, { - "localized_name": "temporal_tile_length", - "name": "temporal_tile_length", + "name": "height", "type": "INT", - "widget": { "name": "temporal_tile_length" }, - "link": null + "link": 35, + "widget": { + "name": "height" + } }, { - "localized_name": "temporal_overlap", - "name": "temporal_overlap", + "name": "length", "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 } + "link": 36, + "widget": { + "name": "length" + } + } ], "outputs": [ { - "localized_name": "image", - "name": "image", - "type": "IMAGE", - "slot_index": 0, - "links": [60] + "name": "LATENT", + "type": "LATENT", + "links": [ + 43 + ], + "slot_index": 0 } ], - "title": "Decode Video (Tiled)", "properties": { - "cnr_id": "ComfyUI-LTXVideo", - "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", - "Node name for S&R": "LTXVSpatioTemporalTiledVAEDecode" + "Node name for S&R": "EmptyLTXVLatentVideo" }, - "widgets_values": [6, 4, 16, 4, false, "auto", "auto"] + "widgets_values": [ + 960, + 544, + 713, + 1 + ], + "title": "Stage 1 Empty Latent" }, { - "id": 70, - "type": "LTXVSeparateAVLatent", - "pos": [3600, 400], - "size": [233.33333333333348, 46], - "flags": {}, - "order": 34, + "id": 128, + "type": "GetNode", + "pos": [ + 1740, + 0 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 128, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "localized_name": "av_latent", - "name": "av_latent", - "type": "LATENT", - "link": 55 + "name": "INT", + "type": "INT", + "links": [ + 34 + ], + "slot_index": 0 } ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "stage_1_width" + ], + "title": "Get_stage_1_width" + }, + { + "id": 129, + "type": "GetNode", + "pos": [ + 1740, + 70 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 129, + "mode": 0, + "inputs": [], "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] + "name": "INT", + "type": "INT", + "links": [ + 35 + ], + "slot_index": 0 } ], - "title": "Split Final AV", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVSeparateAVLatent" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, - "widgets_values": [] + "widgets_values": [ + "stage_1_height" + ], + "title": "Get_stage_1_height" }, { - "id": 64, - "type": "LTXVLoopingSampler", - "pos": [3073.801984050594, 392.75591789764337], - "size": [400, 580], - "flags": {}, - "order": 33, + "id": 130, + "type": "GetNode", + "pos": [ + 1740, + 140 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 130, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 36, + 38 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "frame_count" + ], + "title": "Get_frame_count" + }, + { + "id": 31, + "type": "LTXVEmptyLatentAudio", + "pos": [ + 1950, + 180 + ], + "size": [ + 250, + 130 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "audio_vae", + "type": "VAE", + "link": 37 + }, + { + "name": "frames_number", + "type": "INT", + "link": 38 + }, + { + "name": "frame_rate", + "type": "INT", + "link": 40 + } + ], + "outputs": [ + { + "name": "Latent", + "type": "LATENT", + "links": [ + 46 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVEmptyLatentAudio" + }, + "widgets_values": [ + 713, + 25, + 1 + ] + }, + { + "id": 131, + "type": "GetNode", + "pos": [ + 1740, + 220 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 131, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 37 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "audio_vae" + ], + "title": "Get_audio_vae" + }, + { + "id": 34, + "type": "CM_FloatToInt", + "pos": [ + 1770, + 320 + ], + "size": [ + 150, + 80 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "FLOAT", + "link": 39 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 40 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CM_FloatToInt" + }, + "widgets_values": [ + 0 + ], + "title": "FPS\u2192Int" + }, + { + "id": 132, + "type": "GetNode", + "pos": [ + 1560, + 330 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 132, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 39 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "fps" + ], + "title": "Get_fps" + }, + { + "id": 32, + "type": "LTXVImgToVideoConditionOnly", + "pos": [ + 1950, + 400 + ], + "size": [ + 300, + 130 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 41 + }, + { + "name": "image", + "type": "IMAGE", + "link": 42 + }, + { + "name": "latent", + "type": "LATENT", + "link": 43 + }, + { + "name": "bypass", + "type": "BOOLEAN", + "link": 44 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 45 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVImgToVideoConditionOnly" + }, + "widgets_values": [ + 0.7, + false + ], + "title": "Stage 1 I2V Cond", + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 133, + "type": "GetNode", + "pos": [ + 1740, + 420 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 133, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 41 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 134, + "type": "GetNode", + "pos": [ + 1740, + 490 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 134, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 42 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "preprocessed_start_image" + ], + "title": "Get_preprocessed_start_image" + }, + { + "id": 135, + "type": "GetNode", + "pos": [ + 1740, + 560 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 135, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 44 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "i2v_enable" + ], + "title": "Get_i2v_enable" + }, + { + "id": 33, + "type": "LTXVConcatAVLatent", + "pos": [ + 1950, + 800 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "video_latent", + "type": "LATENT", + "link": 45 + }, + { + "name": "audio_latent", + "type": "LATENT", + "link": 46 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 59 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVConcatAVLatent" + }, + "widgets_values": [], + "title": "Stage 1 AV Concat", + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 35, + "type": "VAEEncode", + "pos": [ + 1950, + 1200 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 47 + }, + { + "name": "vae", + "type": "VAE", + "link": 48 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 49 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [], + "title": "Encode Reference Latent" + }, + { + "id": 136, + "type": "GetNode", + "pos": [ + 1740, + 1200 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 136, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 47 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "preprocessed_start_image" + ], + "title": "Get_preprocessed_start_image" + }, + { + "id": 137, + "type": "GetNode", + "pos": [ + 1740, + 1270 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 137, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 48 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 138, + "type": "SetNode", + "pos": [ + 2220, + 1220 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 138, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 49 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "stage_1_anchor_latent" + }, + "widgets_values": [ + "stage_1_anchor_latent" + ], + "title": "Set_stage_1_anchor_latent" + }, + { + "id": 40, + "type": "RandomNoise", + "pos": [ + 2800, + -80 + ], + "size": [ + 200, + 100 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 55 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 42, + "fixed" + ], + "title": "Stage 1 Noise" + }, + { + "id": 41, + "type": "KSamplerSelect", + "pos": [ + 2800, + 40 + ], + "size": [ + 250, + 80 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 56 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_ancestral_cfg_pp" + ], + "title": "Stage 1 Sampler" + }, + { + "id": 42, + "type": "ManualSigmas", + "pos": [ + 2800, + 140 + ], + "size": [ + 350, + 80 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 57 + ], + "slot_index": 0 + } + ], + "properties": { + "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" + ], + "title": "Stage 1 Sigmas" + }, + { + "id": 43, + "type": "CFGGuider", + "pos": [ + 2800, + 240 + ], + "size": [ + 250, + 130 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 50 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 51 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 52 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 58 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CFGGuider" + }, + "widgets_values": [ + 1 + ], + "title": "Stage 1 Guider", + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 139, + "type": "GetNode", + "pos": [ + 2590, + 220 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 139, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 50 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "model" + ], + "title": "Get_model" + }, + { + "id": 140, + "type": "GetNode", + "pos": [ + 2590, + 285 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 140, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 51 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "positive_conditioning" + ], + "title": "Get_positive_conditioning" + }, + { + "id": 141, + "type": "GetNode", + "pos": [ + 2590, + 350 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 141, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 52 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "negative_conditioning" + ], + "title": "Get_negative_conditioning" + }, + { + "id": 44, + "type": "LTXVLoopingSampler", + "pos": [ + 2800, + 400 + ], + "size": [ + 400, + 580 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 53 + }, + { + "name": "vae", + "type": "VAE", + "link": 54 + }, + { + "name": "noise", + "type": "NOISE", + "link": 55 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 56 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 57 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 58 + }, + { + "name": "latents", + "type": "LATENT", + "link": 59 + }, + { + "name": "optional_cond_images", + "type": "IMAGE", + "link": 60 + }, + { + "name": "optional_guiding_latents", + "type": "LATENT", + "link": null + }, + { + "name": "optional_positive_conditionings", + "type": "CONDITIONING", + "link": 61 + }, + { + "name": "optional_negative_index_latents", + "type": "LATENT", + "link": 62 + }, + { + "name": "optional_normalizing_latents", + "type": "LATENT", + "link": null + }, + { + "name": "temporal_tile_size", + "type": "INT", + "link": 63, + "widget": { + "name": "temporal_tile_size" + } + }, + { + "name": "temporal_overlap", + "type": "INT", + "link": 64, + "widget": { + "name": "temporal_overlap" + } + }, + { + "name": "optional_cond_image_indices", + "type": "STRING", + "link": 65, + "widget": { + "name": "optional_cond_image_indices" + } + } + ], + "outputs": [ + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 66 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 240, + 80, + 1.0, + 0.5, + 1.0, + 1, + 1, + 1, + 0.15, + 0, + 1000, + "0, 224, 384, 544, 704" + ], + "title": "Stage 1 \u2014 Generate", + "color": "#335533", + "bgcolor": "#223322" + }, + { + "id": 142, + "type": "GetNode", + "pos": [ + 2590, + 410 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 142, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 53 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "model" + ], + "title": "Get_model" + }, + { + "id": 143, + "type": "GetNode", + "pos": [ + 2590, + 475 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 143, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 54 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 144, + "type": "GetNode", + "pos": [ + 2590, + 540 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 144, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 60 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "scheduled_reference_images" + ], + "title": "Get_scheduled_reference_images" + }, + { + "id": 145, + "type": "GetNode", + "pos": [ + 2590, + 605 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 145, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 61 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "tile_prompt_conditioning" + ], + "title": "Get_tile_prompt_conditioning" + }, + { + "id": 146, + "type": "GetNode", + "pos": [ + 2590, + 670 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 146, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 63 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "temporal_tile_size" + ], + "title": "Get_temporal_tile_size" + }, + { + "id": 147, + "type": "GetNode", + "pos": [ + 2590, + 735 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 147, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 64 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "temporal_overlap" + ], + "title": "Get_temporal_overlap" + }, + { + "id": 148, + "type": "GetNode", + "pos": [ + 2590, + 800 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 148, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 65 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "reference_indices" + ], + "title": "Get_reference_indices" + }, + { + "id": 149, + "type": "GetNode", + "pos": [ + 2590, + 865 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 149, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 62 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "stage_1_anchor_latent" + ], + "title": "Get_stage_1_anchor_latent" + }, + { + "id": 50, + "type": "LTXVSeparateAVLatent", + "pos": [ + 3650, + 400 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 50, + "mode": 0, + "inputs": [ + { + "name": "av_latent", + "type": "LATENT", + "link": 66 + } + ], + "outputs": [ + { + "name": "video_latent", + "type": "LATENT", + "links": [ + 68 + ], + "slot_index": 0 + }, + { + "name": "audio_latent", + "type": "LATENT", + "links": [ + 67 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [], + "title": "Split Stage 1 AV" + }, + { + "id": 150, + "type": "SetNode", + "pos": [ + 3920, + 440 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 150, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 67 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "stage_1_audio" + }, + "widgets_values": [ + "stage_1_audio" + ], + "title": "Set_stage_1_audio" + }, + { + "id": 51, + "type": "LTXVLatentUpsampler", + "pos": [ + 3650, + 530 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 68 + }, + { + "name": "upscale_model", + "type": "LATENT_UPSCALE_MODEL", + "link": 69 + }, + { + "name": "vae", + "type": "VAE", + "link": 70 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 73 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVLatentUpsampler" + }, + "widgets_values": [], + "title": "Spatial Upscale 2x" + }, + { + "id": 151, + "type": "GetNode", + "pos": [ + 3440, + 550 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 151, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "links": [ + 69 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "latent_upscale_model" + ], + "title": "Get_latent_upscale_model" + }, + { + "id": 152, + "type": "GetNode", + "pos": [ + 3440, + 615 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 152, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 70 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 52, + "type": "LTXVImgToVideoConditionOnly", + "pos": [ + 3650, + 660 + ], + "size": [ + 300, + 130 + ], + "flags": {}, + "order": 52, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 71 + }, + { + "name": "image", + "type": "IMAGE", + "link": 72 + }, + { + "name": "latent", + "type": "LATENT", + "link": 73 + }, + { + "name": "bypass", + "type": "BOOLEAN", + "link": 74 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 75 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVImgToVideoConditionOnly" + }, + "widgets_values": [ + 1.0, + false + ], + "title": "Stage 2 I2V Cond", + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 153, + "type": "GetNode", + "pos": [ + 3440, + 690 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 153, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 71 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 154, + "type": "GetNode", + "pos": [ + 3440, + 755 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 154, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 72 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "start_image" + ], + "title": "Get_start_image" + }, + { + "id": 155, + "type": "GetNode", + "pos": [ + 3440, + 820 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 155, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 74 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "i2v_enable" + ], + "title": "Get_i2v_enable" + }, + { + "id": 53, + "type": "LTXVConcatAVLatent", + "pos": [ + 3650, + 1000 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "video_latent", + "type": "LATENT", + "link": 75 + }, + { + "name": "audio_latent", + "type": "LATENT", + "link": 76 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 86 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVConcatAVLatent" + }, + "widgets_values": [], + "title": "Stage 2 AV Concat", + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 156, + "type": "GetNode", + "pos": [ + 3440, + 1030 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 156, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 76 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "stage_1_audio" + ], + "title": "Get_stage_1_audio" + }, + { + "id": 60, + "type": "RandomNoise", + "pos": [ + 4500, + -80 + ], + "size": [ + 200, + 100 + ], + "flags": {}, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 82 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 43, + "fixed" + ], + "title": "Stage 2 Noise" + }, + { + "id": 61, + "type": "KSamplerSelect", + "pos": [ + 4500, + 40 + ], + "size": [ + 250, + 80 + ], + "flags": {}, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 83 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler_cfg_pp" + ], + "title": "Stage 2 Sampler" + }, + { + "id": 62, + "type": "ManualSigmas", + "pos": [ + 4500, + 140 + ], + "size": [ + 300, + 80 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 84 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ManualSigmas" + }, + "widgets_values": [ + "0.85, 0.7250, 0.4219, 0.0" + ], + "title": "Stage 2 Sigmas" + }, + { + "id": 63, + "type": "CFGGuider", + "pos": [ + 4500, + 240 + ], + "size": [ + 250, + 130 + ], + "flags": {}, + "order": 63, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 77 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 78 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 79 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 85 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CFGGuider" + }, + "widgets_values": [ + 1 + ], + "title": "Stage 2 Guider", + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 157, + "type": "GetNode", + "pos": [ + 4290, + 220 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 157, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 77 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "model" + ], + "title": "Get_model" + }, + { + "id": 158, + "type": "GetNode", + "pos": [ + 4290, + 285 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 158, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 78 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "positive_conditioning" + ], + "title": "Get_positive_conditioning" + }, + { + "id": 159, + "type": "GetNode", + "pos": [ + 4290, + 350 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 159, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 79 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "negative_conditioning" + ], + "title": "Get_negative_conditioning" + }, + { + "id": 64, + "type": "LTXVLoopingSampler", + "pos": [ + 4500, + 400 + ], + "size": [ + 400, + 580 + ], + "flags": {}, + "order": 64, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 80 + }, + { + "name": "vae", + "type": "VAE", + "link": 81 + }, + { + "name": "noise", + "type": "NOISE", + "link": 82 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 83 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 84 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 85 + }, + { + "name": "latents", + "type": "LATENT", + "link": 86 + }, + { + "name": "optional_cond_images", + "type": "IMAGE", + "link": 87 + }, + { + "name": "optional_guiding_latents", + "type": "LATENT", + "link": null + }, + { + "name": "optional_positive_conditionings", + "type": "CONDITIONING", + "link": 88 + }, + { + "name": "optional_negative_index_latents", + "type": "LATENT", + "link": null + }, + { + "name": "optional_normalizing_latents", + "type": "LATENT", + "link": null + }, + { + "name": "temporal_tile_size", + "type": "INT", + "link": 89, + "widget": { + "name": "temporal_tile_size" + } + }, + { + "name": "temporal_overlap", + "type": "INT", + "link": 90, + "widget": { + "name": "temporal_overlap" + } + }, + { + "name": "optional_cond_image_indices", + "type": "STRING", + "link": 91, + "widget": { + "name": "optional_cond_image_indices" + } + } + ], + "outputs": [ + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 92 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 240, + 80, + 1.0, + 0.5, + 1.0, + 2, + 1, + 1, + 0.0, + 0, + 1000, + "0, 224, 384, 544, 704" + ], + "title": "Stage 2 \u2014 Refine", + "color": "#333355", + "bgcolor": "#222233" + }, + { + "id": 160, + "type": "GetNode", + "pos": [ + 4290, + 410 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 160, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 80 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "model" + ], + "title": "Get_model" + }, + { + "id": 161, + "type": "GetNode", + "pos": [ + 4290, + 475 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 161, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 81 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 162, + "type": "GetNode", + "pos": [ + 4290, + 540 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 162, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 87 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "scheduled_reference_images" + ], + "title": "Get_scheduled_reference_images" + }, + { + "id": 163, + "type": "GetNode", + "pos": [ + 4290, + 605 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 163, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 88 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "tile_prompt_conditioning" + ], + "title": "Get_tile_prompt_conditioning" + }, + { + "id": 164, + "type": "GetNode", + "pos": [ + 4290, + 670 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 164, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 89 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "temporal_tile_size" + ], + "title": "Get_temporal_tile_size" + }, + { + "id": 165, + "type": "GetNode", + "pos": [ + 4290, + 735 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 165, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 90 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "temporal_overlap" + ], + "title": "Get_temporal_overlap" + }, + { + "id": 166, + "type": "GetNode", + "pos": [ + 4290, + 800 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 166, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 91 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "reference_indices" + ], + "title": "Get_reference_indices" + }, + { + "id": 70, + "type": "LTXVSeparateAVLatent", + "pos": [ + 5350, + 400 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 70, + "mode": 0, + "inputs": [ + { + "name": "av_latent", + "type": "LATENT", + "link": 92 + } + ], + "outputs": [ + { + "name": "video_latent", + "type": "LATENT", + "links": [ + 93 + ], + "slot_index": 0 + }, + { + "name": "audio_latent", + "type": "LATENT", + "links": [ + 95 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [], + "title": "Split Final AV" + }, + { + "id": 71, + "type": "LTXVSpatioTemporalTiledVAEDecode", + "pos": [ + 5350, + 530 + ], + "size": [ + 350, + 200 + ], + "flags": {}, + "order": 71, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 93 + }, + { + "name": "vae", + "type": "VAE", + "link": 94 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 97 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVSpatioTemporalTiledVAEDecode" + }, + "widgets_values": [ + 6, + 4, + 16, + 4, + false, + "auto", + "auto" + ], + "title": "Decode Video (Tiled)" + }, + { + "id": 167, + "type": "GetNode", + "pos": [ + 5140, + 565 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 167, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 94 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ], + "title": "Get_video_vae" + }, + { + "id": 72, + "type": "LTXVAudioVAEDecode", + "pos": [ + 5350, + 760 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 72, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 95 + }, + { + "name": "audio_vae", + "type": "VAE", + "link": 96 + } + ], + "outputs": [ + { + "name": "Audio", + "type": "AUDIO", + "links": [ + 98 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LTXVAudioVAEDecode" + }, + "widgets_values": [] + }, + { + "id": 168, + "type": "GetNode", + "pos": [ + 5140, + 795 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 168, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 96 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "audio_vae" + ], + "title": "Get_audio_vae" + }, + { + "id": 73, + "type": "CreateVideo", + "pos": [ + 5350, + 1000 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 73, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 97 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 98 + }, + { + "name": "fps", + "type": "FLOAT", + "link": 99 + } + ], + "outputs": [ + { + "name": "VIDEO", + "type": "VIDEO", + "links": [ + 100 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CreateVideo" + }, + "widgets_values": [ + 30 + ] + }, + { + "id": 169, + "type": "GetNode", + "pos": [ + 5140, + 1030 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 169, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 99 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "fps" + ], + "title": "Get_fps" + }, + { + "id": 74, + "type": "SaveVideo", + "pos": [ + 5350, + 1200 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 74, + "mode": 0, + "inputs": [ + { + "name": "video", + "type": "VIDEO", + "link": 100 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "SaveVideo" + }, + "widgets_values": [ + "LTX-2.3/Looping", + "auto", + "auto" + ] + }, + { + "id": 80, + "type": "PrimitiveStringMultiline", + "pos": [ + 1400, + 850 + ], + "size": [ + 500, + 180 + ], + "flags": {}, + "order": 80, "mode": 0, "inputs": [ { - "localized_name": "model", - "name": "model", - "type": "MODEL", - "link": 47 + "name": "value", + "type": "STRING", + "link": null, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 101 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false + }, + "widgets_values": [ + "A cinematic live-action scene with the same subject, wardrobe, lighting, and location throughout. Natural motion, stable anatomy, coherent audio." + ], + "title": "Global Positive Prompt" + }, + { + "id": 170, + "type": "SetNode", + "pos": [ + 1400, + 1040 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 170, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 101 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "global_prompt" + }, + "widgets_values": [ + "global_prompt" + ], + "title": "Set_global_prompt" + }, + { + "id": 171, + "type": "GetNode", + "pos": [ + 1150, + -70 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 171, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 102 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "global_prompt" + ], + "title": "Get_global_prompt" + }, + { + "id": 81, + "type": "MultiPromptProvider", + "pos": [ + 1150, + 540 + ], + "size": [ + 400, + 220 + ], + "flags": {}, + "order": 81, + "mode": 0, + "inputs": [ + { + "name": "prompts", + "type": "STRING", + "link": 130, + "widget": { + "name": "prompts" + } }, - { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 48 }, { - "localized_name": "noise", - "name": "noise", - "type": "NOISE", - "link": 49 + "name": "clip", + "type": "CLIP", + "link": 103 + } + ], + "outputs": [ + { + "name": "conditionings", + "type": "CONDITIONING", + "links": [ + 104 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MultiPromptProvider" + }, + "widgets_values": [ + "" + ], + "title": "Per-Tile Prompts From Global + Snippets" + }, + { + "id": 172, + "type": "SetNode", + "pos": [ + 1550, + 570 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 172, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 104 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "tile_prompt_conditioning" + }, + "widgets_values": [ + "tile_prompt_conditioning" + ], + "title": "Set_tile_prompt_conditioning" + }, + { + "id": 82, + "type": "LoadImage", + "pos": [ + -400, + 1820 + ], + "size": [ + 300, + 300 + ], + "flags": {}, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 114 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "reference_tile_0_late.png", + "image" + ], + "title": "Late Ref Tile 0 - Frame 224" + }, + { + "id": 83, + "type": "PrimitiveStringMultiline", + "pos": [ + -60, + 1820 + ], + "size": [ + 500, + 180 + ], + "flags": {}, + "order": 83, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "STRING", + "link": null, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 106 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false + }, + "widgets_values": [ + "The subject enters the shot and begins the action." + ], + "title": "Tile 0 Prompt Snippet" + }, + { + "id": 173, + "type": "GetNode", + "pos": [ + 460, + 2000 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 173, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 105 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "global_prompt" + ], + "title": "Get_global_prompt" + }, + { + "id": 84, + "type": "StringConcatenate", + "pos": [ + 460, + 1820 + ], + "size": [ + 240, + 166 + ], + "flags": {}, + "order": 84, + "mode": 0, + "inputs": [ + { + "name": "string_a", + "type": "STRING", + "link": 105, + "widget": { + "name": "string_a" + } + }, + { + "name": "string_b", + "type": "STRING", + "link": 106, + "widget": { + "name": "string_b" + } + }, + { + "name": "delimiter", + "type": "STRING", + "link": null, + "widget": { + "name": "delimiter" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 123 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConcatenate" + }, + "widgets_values": [ + "", + "", + " " + ], + "title": "Global + Tile 0 Snippet" + }, + { + "id": 85, + "type": "LoadImage", + "pos": [ + -400, + 2150 + ], + "size": [ + 300, + 300 + ], + "flags": {}, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 116 + ], + "slot_index": 0 }, { - "localized_name": "sampler", - "name": "sampler", - "type": "SAMPLER", - "link": 50 + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "reference_tile_1_late.png", + "image" + ], + "title": "Late Ref Tile 1 - Frame 384" + }, + { + "id": 86, + "type": "PrimitiveStringMultiline", + "pos": [ + -60, + 2150 + ], + "size": [ + 500, + 180 + ], + "flags": {}, + "order": 86, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "STRING", + "link": null, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 108 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false + }, + "widgets_values": [ + "The action continues with a small camera move." + ], + "title": "Tile 1 Prompt Snippet" + }, + { + "id": 174, + "type": "GetNode", + "pos": [ + 460, + 2330 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 174, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 107 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "global_prompt" + ], + "title": "Get_global_prompt" + }, + { + "id": 87, + "type": "StringConcatenate", + "pos": [ + 460, + 2150 + ], + "size": [ + 240, + 166 + ], + "flags": {}, + "order": 87, + "mode": 0, + "inputs": [ + { + "name": "string_a", + "type": "STRING", + "link": 107, + "widget": { + "name": "string_a" + } }, { - "localized_name": "sigmas", - "name": "sigmas", - "type": "SIGMAS", - "link": 51 + "name": "string_b", + "type": "STRING", + "link": 108, + "widget": { + "name": "string_b" + } }, { - "localized_name": "guider", - "name": "guider", - "type": "GUIDER", - "link": 52 - }, + "name": "delimiter", + "type": "STRING", + "link": null, + "widget": { + "name": "delimiter" + } + } + ], + "outputs": [ { - "localized_name": "latents", - "name": "latents", - "type": "LATENT", - "link": 53 - }, + "name": "STRING", + "type": "STRING", + "links": [ + 124 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConcatenate" + }, + "widgets_values": [ + "", + "", + " " + ], + "title": "Global + Tile 1 Snippet" + }, + { + "id": 88, + "type": "LoadImage", + "pos": [ + -400, + 2480 + ], + "size": [ + 300, + 300 + ], + "flags": {}, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [ { - "localized_name": "optional_cond_images", - "name": "optional_cond_images", - "shape": 7, + "name": "IMAGE", "type": "IMAGE", - "link": 54 + "links": [ + 118 + ], + "slot_index": 0 }, { - "localized_name": "optional_guiding_latents", - "name": "optional_guiding_latents", - "shape": 7, - "type": "LATENT", - "link": null - }, + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "reference_tile_2_late.png", + "image" + ], + "title": "Late Ref Tile 2 - Frame 544" + }, + { + "id": 89, + "type": "PrimitiveStringMultiline", + "pos": [ + -60, + 2480 + ], + "size": [ + 500, + 180 + ], + "flags": {}, + "order": 89, + "mode": 0, + "inputs": [ { - "localized_name": "optional_positive_conditionings", - "name": "optional_positive_conditionings", - "shape": 7, - "type": "CONDITIONING", - "link": null - }, + "name": "value", + "type": "STRING", + "link": null, + "widget": { + "name": "value" + } + } + ], + "outputs": [ { - "localized_name": "optional_negative_index_latents", - "name": "optional_negative_index_latents", - "shape": 7, - "type": "LATENT", - "link": null - }, + "name": "STRING", + "type": "STRING", + "links": [ + 110 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false + }, + "widgets_values": [ + "The subject completes the central beat." + ], + "title": "Tile 2 Prompt Snippet" + }, + { + "id": 175, + "type": "GetNode", + "pos": [ + 460, + 2660 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 175, + "mode": 0, + "inputs": [], + "outputs": [ { - "localized_name": "optional_normalizing_latents", - "name": "optional_normalizing_latents", - "shape": 7, - "type": "LATENT", - "link": null - }, + "name": "STRING", + "type": "STRING", + "links": [ + 109 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "global_prompt" + ], + "title": "Get_global_prompt" + }, + { + "id": 90, + "type": "StringConcatenate", + "pos": [ + 460, + 2480 + ], + "size": [ + 240, + 166 + ], + "flags": {}, + "order": 90, + "mode": 0, + "inputs": [ { - "localized_name": "temporal_tile_size", - "name": "temporal_tile_size", - "type": "INT", - "widget": { "name": "temporal_tile_size" }, - "link": null + "name": "string_a", + "type": "STRING", + "link": 109, + "widget": { + "name": "string_a" + } }, { - "localized_name": "temporal_overlap", - "name": "temporal_overlap", - "type": "INT", - "widget": { "name": "temporal_overlap" }, - "link": null + "name": "string_b", + "type": "STRING", + "link": 110, + "widget": { + "name": "string_b" + } }, { - "localized_name": "guiding_strength", - "name": "guiding_strength", - "type": "FLOAT", - "widget": { "name": "guiding_strength" }, - "link": null - }, + "name": "delimiter", + "type": "STRING", + "link": null, + "widget": { + "name": "delimiter" + } + } + ], + "outputs": [ { - "localized_name": "temporal_overlap_cond_strength", - "name": "temporal_overlap_cond_strength", - "type": "FLOAT", - "widget": { "name": "temporal_overlap_cond_strength" }, - "link": null - }, + "name": "STRING", + "type": "STRING", + "links": [ + 126 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConcatenate" + }, + "widgets_values": [ + "", + "", + " " + ], + "title": "Global + Tile 2 Snippet" + }, + { + "id": 91, + "type": "LoadImage", + "pos": [ + -400, + 2810 + ], + "size": [ + 300, + 300 + ], + "flags": {}, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ { - "localized_name": "cond_image_strength", - "name": "cond_image_strength", - "type": "FLOAT", - "widget": { "name": "cond_image_strength" }, - "link": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 120 + ], + "slot_index": 0 }, { - "localized_name": "horizontal_tiles", - "name": "horizontal_tiles", - "type": "INT", - "widget": { "name": "horizontal_tiles" }, - "link": null - }, + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "reference_tile_3_late.png", + "image" + ], + "title": "Late Ref Tile 3 - Frame 704" + }, + { + "id": 92, + "type": "PrimitiveStringMultiline", + "pos": [ + -60, + 2810 + ], + "size": [ + 500, + 180 + ], + "flags": {}, + "order": 92, + "mode": 0, + "inputs": [ { - "localized_name": "vertical_tiles", - "name": "vertical_tiles", - "type": "INT", - "widget": { "name": "vertical_tiles" }, - "link": null - }, + "name": "value", + "type": "STRING", + "link": null, + "widget": { + "name": "value" + } + } + ], + "outputs": [ { - "localized_name": "spatial_overlap", - "name": "spatial_overlap", - "type": "INT", - "widget": { "name": "spatial_overlap" }, - "link": null - }, + "name": "STRING", + "type": "STRING", + "links": [ + 112 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false + }, + "widgets_values": [ + "The motion settles into the ending pose." + ], + "title": "Tile 3 Prompt Snippet" + }, + { + "id": 176, + "type": "GetNode", + "pos": [ + 460, + 2990 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 176, + "mode": 0, + "inputs": [], + "outputs": [ { - "localized_name": "adain_factor", - "name": "adain_factor", - "shape": 7, - "type": "FLOAT", - "widget": { "name": "adain_factor" }, - "link": null - }, + "name": "STRING", + "type": "STRING", + "links": [ + 111 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "global_prompt" + ], + "title": "Get_global_prompt" + }, + { + "id": 93, + "type": "StringConcatenate", + "pos": [ + 460, + 2810 + ], + "size": [ + 240, + 166 + ], + "flags": {}, + "order": 93, + "mode": 0, + "inputs": [ { - "localized_name": "guiding_start_step", - "name": "guiding_start_step", - "shape": 7, - "type": "INT", - "widget": { "name": "guiding_start_step" }, - "link": null + "name": "string_a", + "type": "STRING", + "link": 111, + "widget": { + "name": "string_a" + } }, { - "localized_name": "guiding_end_step", - "name": "guiding_end_step", - "shape": 7, - "type": "INT", - "widget": { "name": "guiding_end_step" }, - "link": null + "name": "string_b", + "type": "STRING", + "link": 112, + "widget": { + "name": "string_b" + } }, { - "localized_name": "optional_cond_image_indices", - "name": "optional_cond_image_indices", - "shape": 7, + "name": "delimiter", "type": "STRING", - "widget": { "name": "optional_cond_image_indices" }, - "link": null + "link": null, + "widget": { + "name": "delimiter" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 128 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConcatenate" + }, + "widgets_values": [ + "", + "", + " " + ], + "title": "Global + Tile 3 Snippet" + }, + { + "id": 177, + "type": "GetNode", + "pos": [ + -60, + 2090 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 177, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 113 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "start_image" + ], + "title": "Get_start_image" + }, + { + "id": 94, + "type": "ImageBatch", + "pos": [ + -60, + 2040 + ], + "size": [ + 220, + 46 + ], + "flags": {}, + "order": 94, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 113 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 114 } ], "outputs": [ { - "localized_name": "denoised_output", - "name": "denoised_output", - "type": "LATENT", - "slot_index": 0, - "links": [55] + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 115 + ], + "slot_index": 0 } ], - "title": "Stage 2 — Refine", "properties": { - "cnr_id": "ComfyUI-LTXVideo", - "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", - "Node name for S&R": "LTXVLoopingSampler" + "Node name for S&R": "ImageBatch" }, - "widgets_values": [128, 24, 1, 0.5, 1, 2, 1, 1, 0, 0, 1000, "0"], - "color": "#333355", - "bgcolor": "#222233" + "widgets_values": [], + "title": "Ref Batch 1" }, { - "id": 53, - "type": "LTXVConcatAVLatent", - "pos": [2807.97697623735, 524.995187859747], - "size": [190.80550053502748, 46], + "id": 95, + "type": "ImageBatch", + "pos": [ + -60, + 2370 + ], + "size": [ + 220, + 46 + ], "flags": {}, - "order": 32, + "order": 95, "mode": 0, "inputs": [ { - "localized_name": "video_latent", - "name": "video_latent", - "type": "LATENT", - "link": 42 + "name": "image1", + "type": "IMAGE", + "link": 115 }, { - "localized_name": "audio_latent", - "name": "audio_latent", - "type": "LATENT", - "link": 43 + "name": "image2", + "type": "IMAGE", + "link": 116 } ], "outputs": [ { - "localized_name": "latent", - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [53] + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 117 + ], + "slot_index": 0 } ], - "title": "Stage 2 AV Concat", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVConcatAVLatent" + "Node name for S&R": "ImageBatch" }, "widgets_values": [], - "color": "#333355", - "bgcolor": "#222233" + "title": "Ref Batch 2" }, { - "id": 51, - "type": "LTXVLatentUpsampler", - "pos": [2494.204734318114, 557.0100775530725], - "size": [249.9123466065612, 66], + "id": 96, + "type": "ImageBatch", + "pos": [ + -60, + 2700 + ], + "size": [ + 220, + 46 + ], "flags": {}, - "order": 30, + "order": 96, "mode": 0, "inputs": [ { - "localized_name": "samples", - "name": "samples", - "type": "LATENT", - "link": 35 + "name": "image1", + "type": "IMAGE", + "link": 117 }, { - "localized_name": "upscale_model", - "name": "upscale_model", - "type": "LATENT_UPSCALE_MODEL", - "link": 36 - }, - { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 37 } + "name": "image2", + "type": "IMAGE", + "link": 118 + } ], "outputs": [ { - "localized_name": "LATENT", - "name": "LATENT", - "type": "LATENT", - "slot_index": 0, - "links": [40] + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 119 + ], + "slot_index": 0 } ], - "title": "Spatial Upscale 2x", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVLatentUpsampler" + "Node name for S&R": "ImageBatch" }, - "widgets_values": [] + "widgets_values": [], + "title": "Ref Batch 3" }, { - "id": 50, - "type": "LTXVSeparateAVLatent", - "pos": [2429.214969171252, 400.10348688717687], - "size": [172.5918083919587, 46], + "id": 97, + "type": "ImageBatch", + "pos": [ + -60, + 3030 + ], + "size": [ + 220, + 46 + ], "flags": {}, - "order": 29, + "order": 97, "mode": 0, "inputs": [ { - "localized_name": "av_latent", - "name": "av_latent", - "type": "LATENT", - "link": 34 + "name": "image1", + "type": "IMAGE", + "link": 119 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 120 } ], "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] + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 121 + ], + "slot_index": 0 } ], - "title": "Split Stage 1 AV", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVSeparateAVLatent" + "Node name for S&R": "ImageBatch" }, - "widgets_values": [] + "widgets_values": [], + "title": "Ref Batch 4" }, { - "id": 33, - "type": "LTXVConcatAVLatent", - "pos": [1435.7500155700718, 795.296050582885], - "size": [174.92496730284756, 46], - "flags": {}, - "order": 25, + "id": 178, + "type": "SetNode", + "pos": [ + 180, + 3030 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 178, "mode": 0, "inputs": [ { - "localized_name": "video_latent", - "name": "video_latent", - "type": "LATENT", - "link": 18 - }, + "name": "IMAGE", + "type": "IMAGE", + "link": 121 + } + ], + "outputs": [ { - "localized_name": "audio_latent", - "name": "audio_latent", - "type": "LATENT", - "link": 19 + "name": "*", + "type": "*", + "links": null } ], + "properties": { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "reference_image_batch" + }, + "widgets_values": [ + "reference_image_batch" + ], + "title": "Set_reference_image_batch" + }, + { + "id": 179, + "type": "GetNode", + "pos": [ + -210, + 1130 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 179, + "mode": 0, + "inputs": [], "outputs": [ { - "localized_name": "latent", - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [31] + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 122 + ], + "slot_index": 0 } ], - "title": "Stage 1 AV Concat", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "LTXVConcatAVLatent" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, - "widgets_values": [], - "color": "#335533", - "bgcolor": "#223322" + "widgets_values": [ + "reference_image_batch" + ], + "title": "Get_reference_image_batch" }, { - "id": 35, - "type": "VAEEncode", - "pos": [1383.3333333333328, 1164.9999999999995], - "size": [206.36665954589844, 46], + "id": 98, + "type": "StringConcatenate", + "pos": [ + 740, + 2150 + ], + "size": [ + 240, + 166 + ], "flags": {}, - "order": 21, + "order": 98, "mode": 0, "inputs": [ { - "localized_name": "pixels", - "name": "pixels", - "type": "IMAGE", - "link": 20 + "name": "string_a", + "type": "STRING", + "link": 123, + "widget": { + "name": "string_a" + } + }, + { + "name": "string_b", + "type": "STRING", + "link": 124, + "widget": { + "name": "string_b" + } }, - { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 21 } + { + "name": "delimiter", + "type": "STRING", + "link": null, + "widget": { + "name": "delimiter" + } + } ], "outputs": [ { - "localized_name": "LATENT", - "name": "LATENT", - "type": "LATENT", - "slot_index": 0, - "links": [33] + "name": "STRING", + "type": "STRING", + "links": [ + 125 + ], + "slot_index": 0 } ], - "title": "Encode Reference Latent", "properties": { - "cnr_id": "comfy-core", - "ver": "0.18.5", - "Node name for S&R": "VAEEncode" + "Node name for S&R": "StringConcatenate" }, - "widgets_values": [] + "widgets_values": [ + "", + "", + " | " + ], + "title": "Join Tile Prompts 2" }, { - "id": 32, - "type": "LTXVImgToVideoConditionOnly", - "pos": [1399.999999999999, 604.9999999999992], - "size": [210, 122], + "id": 99, + "type": "StringConcatenate", + "pos": [ + 740, + 2480 + ], + "size": [ + 240, + 166 + ], "flags": {}, - "order": 22, + "order": 99, "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 + "name": "string_a", + "type": "STRING", + "link": 125, + "widget": { + "name": "string_a" + } }, { - "localized_name": "strength", - "name": "strength", - "type": "FLOAT", - "widget": { "name": "strength" }, - "link": null + "name": "string_b", + "type": "STRING", + "link": 126, + "widget": { + "name": "string_b" + } }, { - "localized_name": "bypass", - "name": "bypass", - "shape": 7, - "type": "BOOLEAN", - "widget": { "name": "bypass" }, - "link": null + "name": "delimiter", + "type": "STRING", + "link": null, + "widget": { + "name": "delimiter" + } } ], "outputs": [ { - "localized_name": "latent", - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [18] + "name": "STRING", + "type": "STRING", + "links": [ + 127 + ], + "slot_index": 0 } ], - "title": "Stage 1 I2V Cond", "properties": { - "cnr_id": "ComfyUI-LTXVideo", - "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", - "Node name for S&R": "LTXVImgToVideoConditionOnly" + "Node name for S&R": "StringConcatenate" }, - "widgets_values": [0.7, false], - "color": "#335533", - "bgcolor": "#223322" + "widgets_values": [ + "", + "", + " | " + ], + "title": "Join Tile Prompts 3" }, { - "id": 52, - "type": "LTXVImgToVideoConditionOnly", - "pos": [2492.238483461759, 791.1178860526603], - "size": [210, 122], + "id": 100, + "type": "StringConcatenate", + "pos": [ + 740, + 2810 + ], + "size": [ + 240, + 166 + ], "flags": {}, - "order": 31, + "order": 100, "mode": 0, "inputs": [ - { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 38 }, { - "localized_name": "image", - "name": "image", - "type": "IMAGE", - "link": 39 + "name": "string_a", + "type": "STRING", + "link": 127, + "widget": { + "name": "string_a" + } }, { - "localized_name": "latent", - "name": "latent", - "type": "LATENT", - "link": 40 + "name": "string_b", + "type": "STRING", + "link": 128, + "widget": { + "name": "string_b" + } }, { - "localized_name": "strength", - "name": "strength", - "type": "FLOAT", - "widget": { "name": "strength" }, - "link": null - }, + "name": "delimiter", + "type": "STRING", + "link": null, + "widget": { + "name": "delimiter" + } + } + ], + "outputs": [ { - "localized_name": "bypass", - "name": "bypass", - "shape": 7, - "type": "BOOLEAN", - "widget": { "name": "bypass" }, - "link": null + "name": "STRING", + "type": "STRING", + "links": [ + 129 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConcatenate" + }, + "widgets_values": [ + "", + "", + " | " + ], + "title": "Join Tile Prompts 4" + }, + { + "id": 180, + "type": "SetNode", + "pos": [ + 1000, + 2850 + ], + "size": [ + 190, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 180, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 129 } ], "outputs": [ { - "localized_name": "latent", - "name": "latent", - "type": "LATENT", - "slot_index": 0, - "links": [42] + "name": "*", + "type": "*", + "links": null } ], - "title": "Stage 2 I2V Cond", "properties": { - "cnr_id": "ComfyUI-LTXVideo", - "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", - "Node name for S&R": "LTXVImgToVideoConditionOnly" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "joined_tile_prompts" }, - "widgets_values": [1, false], - "color": "#333355", - "bgcolor": "#222233" + "widgets_values": [ + "joined_tile_prompts" + ], + "title": "Set_joined_tile_prompts" }, { - "id": 6, - "type": "Note", - "pos": [281.1738724586202, 1016.7247228103745], - "size": [631.0862190651818, 273.1698654463494], - "flags": {}, - "order": 13, + "id": 181, + "type": "GetNode", + "pos": [ + 1150, + 770 + ], + "size": [ + 190, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 181, "mode": 0, "inputs": [], - "outputs": [], - "properties": { "Node name for S&R": "Note" }, + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 130 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, "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." + "joined_tile_prompts" ], - "color": "#432", - "bgcolor": "#653" + "title": "Get_joined_tile_prompts" } ], "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"] + [ + 1, + 1, + 0, + 110, + 0, + "IMAGE" + ], + [ + 2, + 1, + 0, + 2, + 0, + "IMAGE" + ], + [ + 3, + 2, + 0, + 111, + 0, + "IMAGE" + ], + [ + 4, + 4, + 0, + 112, + 0, + "FLOAT" + ], + [ + 5, + 5, + 0, + 113, + 0, + "BOOLEAN" + ], + [ + 6, + 1, + 0, + 16, + 0, + "IMAGE" + ], + [ + 7, + 7, + 0, + 17, + 0, + "INT" + ], + [ + 8, + 17, + 1, + 18, + 0, + "INT" + ], + [ + 9, + 16, + 0, + 18, + 1, + "INT" + ], + [ + 10, + 16, + 1, + 18, + 2, + "INT" + ], + [ + 11, + 18, + 1, + 19, + 0, + "INT" + ], + [ + 12, + 19, + 1, + 114, + 0, + "INT" + ], + [ + 13, + 17, + 1, + 23, + 0, + "INT" + ], + [ + 14, + 23, + 1, + 115, + 0, + "INT" + ], + [ + 15, + 4, + 0, + 24, + 1, + "FLOAT" + ], + [ + 16, + 24, + 0, + 116, + 0, + "IMAGE" + ], + [ + 17, + 24, + 1, + 117, + 0, + "INT" + ], + [ + 18, + 24, + 2, + 118, + 0, + "INT" + ], + [ + 19, + 24, + 3, + 119, + 0, + "INT" + ], + [ + 20, + 24, + 4, + 120, + 0, + "STRING" + ], + [ + 21, + 10, + 2, + 121, + 0, + "VAE" + ], + [ + 22, + 12, + 0, + 122, + 0, + "VAE" + ], + [ + 23, + 10, + 0, + 13, + 0, + "MODEL" + ], + [ + 24, + 13, + 0, + 25, + 0, + "MODEL" + ], + [ + 25, + 25, + 0, + 123, + 0, + "MODEL" + ], + [ + 26, + 14, + 0, + 124, + 0, + "LATENT_UPSCALE_MODEL" + ], + [ + 27, + 11, + 0, + 20, + 0, + "CLIP" + ], + [ + 28, + 11, + 0, + 21, + 0, + "CLIP" + ], + [ + 29, + 20, + 0, + 22, + 0, + "CONDITIONING" + ], + [ + 30, + 21, + 0, + 22, + 1, + "CONDITIONING" + ], + [ + 31, + 125, + 0, + 22, + 2, + "FLOAT" + ], + [ + 32, + 22, + 0, + 126, + 0, + "CONDITIONING" + ], + [ + 33, + 22, + 1, + 127, + 0, + "CONDITIONING" + ], + [ + 34, + 128, + 0, + 30, + 0, + "INT" + ], + [ + 35, + 129, + 0, + 30, + 1, + "INT" + ], + [ + 36, + 130, + 0, + 30, + 2, + "INT" + ], + [ + 37, + 131, + 0, + 31, + 0, + "VAE" + ], + [ + 38, + 130, + 0, + 31, + 1, + "INT" + ], + [ + 39, + 132, + 0, + 34, + 0, + "FLOAT" + ], + [ + 40, + 34, + 0, + 31, + 2, + "INT" + ], + [ + 41, + 133, + 0, + 32, + 0, + "VAE" + ], + [ + 42, + 134, + 0, + 32, + 1, + "IMAGE" + ], + [ + 43, + 30, + 0, + 32, + 2, + "LATENT" + ], + [ + 44, + 135, + 0, + 32, + 3, + "BOOLEAN" + ], + [ + 45, + 32, + 0, + 33, + 0, + "LATENT" + ], + [ + 46, + 31, + 0, + 33, + 1, + "LATENT" + ], + [ + 47, + 136, + 0, + 35, + 0, + "IMAGE" + ], + [ + 48, + 137, + 0, + 35, + 1, + "VAE" + ], + [ + 49, + 35, + 0, + 138, + 0, + "LATENT" + ], + [ + 50, + 139, + 0, + 43, + 0, + "MODEL" + ], + [ + 51, + 140, + 0, + 43, + 1, + "CONDITIONING" + ], + [ + 52, + 141, + 0, + 43, + 2, + "CONDITIONING" + ], + [ + 53, + 142, + 0, + 44, + 0, + "MODEL" + ], + [ + 54, + 143, + 0, + 44, + 1, + "VAE" + ], + [ + 55, + 40, + 0, + 44, + 2, + "NOISE" + ], + [ + 56, + 41, + 0, + 44, + 3, + "SAMPLER" + ], + [ + 57, + 42, + 0, + 44, + 4, + "SIGMAS" + ], + [ + 58, + 43, + 0, + 44, + 5, + "GUIDER" + ], + [ + 59, + 33, + 0, + 44, + 6, + "LATENT" + ], + [ + 60, + 144, + 0, + 44, + 7, + "IMAGE" + ], + [ + 61, + 145, + 0, + 44, + 9, + "CONDITIONING" + ], + [ + 62, + 149, + 0, + 44, + 10, + "LATENT" + ], + [ + 63, + 146, + 0, + 44, + 12, + "INT" + ], + [ + 64, + 147, + 0, + 44, + 13, + "INT" + ], + [ + 65, + 148, + 0, + 44, + 14, + "STRING" + ], + [ + 66, + 44, + 0, + 50, + 0, + "LATENT" + ], + [ + 67, + 50, + 1, + 150, + 0, + "LATENT" + ], + [ + 68, + 50, + 0, + 51, + 0, + "LATENT" + ], + [ + 69, + 151, + 0, + 51, + 1, + "LATENT_UPSCALE_MODEL" + ], + [ + 70, + 152, + 0, + 51, + 2, + "VAE" + ], + [ + 71, + 153, + 0, + 52, + 0, + "VAE" + ], + [ + 72, + 154, + 0, + 52, + 1, + "IMAGE" + ], + [ + 73, + 51, + 0, + 52, + 2, + "LATENT" + ], + [ + 74, + 155, + 0, + 52, + 3, + "BOOLEAN" + ], + [ + 75, + 52, + 0, + 53, + 0, + "LATENT" + ], + [ + 76, + 156, + 0, + 53, + 1, + "LATENT" + ], + [ + 77, + 157, + 0, + 63, + 0, + "MODEL" + ], + [ + 78, + 158, + 0, + 63, + 1, + "CONDITIONING" + ], + [ + 79, + 159, + 0, + 63, + 2, + "CONDITIONING" + ], + [ + 80, + 160, + 0, + 64, + 0, + "MODEL" + ], + [ + 81, + 161, + 0, + 64, + 1, + "VAE" + ], + [ + 82, + 60, + 0, + 64, + 2, + "NOISE" + ], + [ + 83, + 61, + 0, + 64, + 3, + "SAMPLER" + ], + [ + 84, + 62, + 0, + 64, + 4, + "SIGMAS" + ], + [ + 85, + 63, + 0, + 64, + 5, + "GUIDER" + ], + [ + 86, + 53, + 0, + 64, + 6, + "LATENT" + ], + [ + 87, + 162, + 0, + 64, + 7, + "IMAGE" + ], + [ + 88, + 163, + 0, + 64, + 9, + "CONDITIONING" + ], + [ + 89, + 164, + 0, + 64, + 12, + "INT" + ], + [ + 90, + 165, + 0, + 64, + 13, + "INT" + ], + [ + 91, + 166, + 0, + 64, + 14, + "STRING" + ], + [ + 92, + 64, + 0, + 70, + 0, + "LATENT" + ], + [ + 93, + 70, + 0, + 71, + 0, + "LATENT" + ], + [ + 94, + 167, + 0, + 71, + 1, + "VAE" + ], + [ + 95, + 70, + 1, + 72, + 0, + "LATENT" + ], + [ + 96, + 168, + 0, + 72, + 1, + "VAE" + ], + [ + 97, + 71, + 0, + 73, + 0, + "IMAGE" + ], + [ + 98, + 72, + 0, + 73, + 1, + "AUDIO" + ], + [ + 99, + 169, + 0, + 73, + 2, + "FLOAT" + ], + [ + 100, + 73, + 0, + 74, + 0, + "VIDEO" + ], + [ + 101, + 80, + 0, + 170, + 0, + "STRING" + ], + [ + 102, + 171, + 0, + 20, + 1, + "STRING" + ], + [ + 103, + 11, + 0, + 81, + 1, + "CLIP" + ], + [ + 104, + 81, + 0, + 172, + 0, + "CONDITIONING" + ], + [ + 105, + 173, + 0, + 84, + 0, + "STRING" + ], + [ + 106, + 83, + 0, + 84, + 1, + "STRING" + ], + [ + 107, + 174, + 0, + 87, + 0, + "STRING" + ], + [ + 108, + 86, + 0, + 87, + 1, + "STRING" + ], + [ + 109, + 175, + 0, + 90, + 0, + "STRING" + ], + [ + 110, + 89, + 0, + 90, + 1, + "STRING" + ], + [ + 111, + 176, + 0, + 93, + 0, + "STRING" + ], + [ + 112, + 92, + 0, + 93, + 1, + "STRING" + ], + [ + 113, + 177, + 0, + 94, + 0, + "IMAGE" + ], + [ + 114, + 82, + 0, + 94, + 1, + "IMAGE" + ], + [ + 115, + 94, + 0, + 95, + 0, + "IMAGE" + ], + [ + 116, + 85, + 0, + 95, + 1, + "IMAGE" + ], + [ + 117, + 95, + 0, + 96, + 0, + "IMAGE" + ], + [ + 118, + 88, + 0, + 96, + 1, + "IMAGE" + ], + [ + 119, + 96, + 0, + 97, + 0, + "IMAGE" + ], + [ + 120, + 91, + 0, + 97, + 1, + "IMAGE" + ], + [ + 121, + 97, + 0, + 178, + 0, + "IMAGE" + ], + [ + 122, + 179, + 0, + 24, + 0, + "IMAGE" + ], + [ + 123, + 84, + 0, + 98, + 0, + "STRING" + ], + [ + 124, + 87, + 0, + 98, + 1, + "STRING" + ], + [ + 125, + 98, + 0, + 99, + 0, + "STRING" + ], + [ + 126, + 90, + 0, + 99, + 1, + "STRING" + ], + [ + 127, + 99, + 0, + 100, + 0, + "STRING" + ], + [ + 128, + 93, + 0, + 100, + 1, + "STRING" + ], + [ + 129, + 100, + 0, + 180, + 0, + "STRING" + ], + [ + 130, + 181, + 0, + 81, + 0, + "STRING" + ] + ], + "groups": [ + { + "id": 1, + "title": "Inputs + Timing", + "bounding": [ + -240, + -90, + 790, + 1870 + ], + "color": "#6a8b80", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "Models + LoRAs", + "bounding": [ + 560, + -90, + 670, + 1430 + ], + "color": "#8a6d3b", + "font_size": 24, + "flags": {} + }, + { + "id": 3, + "title": "Prompt Conditioning", + "bounding": [ + 1110, + -110, + 820, + 1260 + ], + "color": "#76518a", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "Dimensions + Timing Buses", + "bounding": [ + 440, + 960, + 980, + 590 + ], + "color": "#5b7e9c", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "Stage 1 Base AV", + "bounding": [ + 1710, + -120, + 1540, + 1490 + ], + "color": "#51724d", + "font_size": 24, + "flags": {} + }, + { + "id": 6, + "title": "Upscale + Stage 2", + "bounding": [ + 3410, + -120, + 1540, + 1270 + ], + "color": "#555d96", + "font_size": 24, + "flags": {} + }, + { + "id": 7, + "title": "Final Output", + "bounding": [ + 5110, + 250, + 650, + 1120 + ], + "color": "#9b6c4b", + "font_size": 24, + "flags": {} + }, + { + "id": 8, + "title": "Late References + Tile Snippets", + "bounding": [ + -440, + 1740, + 1670, + 1450 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } ], - "groups": [], "config": {}, "extra": { "ds": { - "scale": 0.878460000000002, - "offset": [-147.93391628437732, 99.35113851569274] + "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." + "name": "LTX-2.3 Two-Pass AV I2V Looping Late Refs", + "description": "Two-pass AV I2V workflow for long video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Late soft reference images and per-tile prompt snippets maintain continuity across temporal tiles." } }, "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 index b777fe1..8ce7448 100644 --- a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.md +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.md @@ -3,30 +3,43 @@ ## 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. +LTX-2.3 (22B) with `LTXVLoopingSampler`. The generated graph places a soft +reference image near the end of each temporal tile and pairs each late +reference with a per-tile prompt snippet. **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. +same computed reference positions and per-tile 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) +The model path also includes an empty rgthree `Power Lora Loader` after the +distilled LoRA. Add optional extra LoRAs there so both sampling passes see +the same model changes. + +Shared model, VAE, timing, reference, and prompt signals are routed with +KJNodes `Set`/`Get` buses. The graph keeps those Gets near their consumers so +long links do not cross the sampling lanes. + --- ## Data Flow ``` LoadImage (reference) + | + +-- Image Size --> aspect-ratio width + final height --> Stage 1 Empty Latent + | + +-- Ref image batch --> Looping Reference Schedule --> both looping samplers | +-- LTXVPreprocess --> Stage 1 I2V Cond --> Stage 1 AV Concat | | +-- VAEEncode (negative_index_latents) LTXVLoopingSampler (Stage 1) - | | - +-- ResizeImage (for stage 2) LTXVSeparateAVLatent + | + LTXVSeparateAVLatent | | LTXVLatentUpsampler | | | @@ -62,9 +75,9 @@ using `SamplerCustomAdvanced`. | 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 | +| Resolution | ref-aspect width x half final height | Default final height 1088 gives 544 here | +| temporal_tile_size | 240 default | Derived from Basic Tile Duration | +| temporal_overlap | 80 default | Derived from Tile Overlap duration | | 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 | @@ -77,9 +90,9 @@ using `SamplerCustomAdvanced`. | Parameter | Value | Notes | |---|---|---| -| Resolution | ~1920x1088 | 2x from stage 1 | -| temporal_tile_size | 128 | Same as stage 1 | -| temporal_overlap | 24 | Same | +| Resolution | ref-aspect width x final height | Final height defaults to 1088 | +| temporal_tile_size | 240 default | Same schedule as stage 1 | +| temporal_overlap | 80 default | Same schedule as stage 1 | | 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 | @@ -88,69 +101,91 @@ using `SamplerCustomAdvanced`. --- -## Guiding Images +## Resolution + +Set `Final Height Target` in the workflow. It defaults to `1088`, is aligned +to a multiple of 64, then halved for Stage 1. The first reference image's +width/height ratio determines the aligned output width, so a 16:9 reference +at the default height yields the familiar Stage 1 `960x544` and Stage 2 +`1920x1088`. + +The initial I2V conditioning and looping reference paths resize internally. +Matching the late reference images to the first image's aspect ratio still +avoids center cropping when the image batch is assembled. -### 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. +## Guiding Images -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. +### Reference layout -### Transition images at tile boundaries +`LTXVLoopingReferenceSchedule` computes `optional_cond_image_indices` from: -To guide content at specific points in the video: +- its editable `total_duration` field +- the shared external `Frame Rate` control +- its editable `tile_duration` field +- its editable `overlap_duration` field +- its editable `reference_offset` field -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 default four-tile graph uses `240`-frame tiles, `80` frames of overlap, +and a `16`-frame late-reference margin. That yields `713` total frames and +the image indices `0, 224, 384, 544, 704`. -**The number of images must match the number of indices.** +Frame 0 uses the first `LoadImage` node as the I2V start frame. The explicit +late soft reference branches supply the next images. Late references are +intentionally near tile ends instead of tile boundaries, so each tile can +move toward its next anchor before the overlap is stitched. -Frame positions for tile boundaries with `tile_size=128, overlap=24`: +The schedule node matches the reference-image batch to the computed index +list. If the clip becomes longer than the supplied references, it repeats the +last reference image through the remaining scheduled tiles. If the clip is +shorter, it trims extra supplied images. -| 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` | +For global subject anchoring across all Stage 1 tiles, +`optional_negative_index_latents` is connected to the VAE-encoded first +image. Stage 2 refines from the Stage 1 latent and uses the positioned image +batch without that extra negative-index anchor. -Frame indices must be divisible by 8 (except 0). The formula for new content -start per tile is: `tile_size - overlap = 128 - 24 = 104`. +Frame indices must be divisible by 8 except frame 0. The schedule aligns late +indices and clips the final one to the last valid `8n` position. -### Per-tile prompts +### Prompt snippets -Connect `LTXVMultiPromptProvider` to `optional_positive_conditionings` on the -Stage 1 looping sampler. Prompts are separated by `|`: +The generated graph exposes one global prompt node and one snippet node beside +each late reference image branch. Each tile prompt is built as: ``` -A woman walks through a meadow | She reaches a stream | She crosses a bridge +global prompt + tile snippet ``` -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. +Those tile prompts are joined with `|` and fed to one +`LTXVMultiPromptProvider` shared by both looping samplers. The fallback +positive text encoder is wired to the global prompt as well. When there are +more generated temporal tiles than prompt snippets, `LTXVLoopingSampler` +reuses the last multi-prompt conditioning for the remaining tiles. --- ## 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 | +| Temporal tiles | Pixel frames | Approx. duration at 24fps | +|---|---|---| +| 1 | 233 | 9.7 sec | +| 2 | 393 | 16.4 sec | +| 4 | 713 | 29.7 sec | +| 9 | 1513 | 63.0 sec | +| 45 | 7273 | 5 min 3 sec | + +Frame count must satisfy `8n+1` (e.g. 121, 241, 361...). The schedule chooses +the largest valid frame count within `Total Clip Duration`: + +``` +frames = floor((duration_seconds * fps - 1) / 8) * 8 + 1 +``` -Frame count must satisfy `8n+1` (e.g. 121, 241, 361...). -Times are rough estimates for both stages combined on Strix Halo 128GB. +`tile_duration`, `overlap_duration`, and `reference_offset` are rounded to +8-frame schedule units. With the defaults at 24 fps, those become tile size +`240`, overlap `80`, and late reference offset `16`. --- @@ -177,4 +212,7 @@ 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. +Edit the default constants at the top of the script to change the starting +workflow values or prompt snippets. Once loaded, `Final Height Target` and +`Frame Rate` remain external controls; duration, overlap, tile duration, and +late-reference offset live directly on `LTXVLoopingReferenceSchedule`. diff --git a/example_workflows/generate_two_pass_i2v_looping.py b/example_workflows/generate_two_pass_i2v_looping.py index 7ebaaa8..b37de9f 100644 --- a/example_workflows/generate_two_pass_i2v_looping.py +++ b/example_workflows/generate_two_pass_i2v_looping.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -"""Generate a two-pass I2V arbitrary-length workflow for LTX-2.3. +"""Generate a two-pass AV I2V looping workflow for LTX-2.3. Stage 1: LTXVLoopingSampler at base resolution (~544p) with soft guiding - images at tile boundaries for subject/scene continuity. + images near tile ends for subject/scene continuity. Stage 2: Spatial upscale (2x) → LTXVLoopingSampler refinement at high resolution with spatial tiling. @@ -10,14 +10,104 @@ Out: LTX-2.3_Two_Pass_I2V_Looping.json (importable ComfyUI workflow) """ +import math import json import uuid +# These defaults seed the editable workflow math nodes. The generated graph +# derives frame count, tile size, and late-reference indices at runtime. +TIME_SCALE = 8 +DEFAULT_FRAME_RATE = 24 +DEFAULT_TOTAL_DURATION = 30.0 +DEFAULT_TILE_DURATION = 10.0 +DEFAULT_OVERLAP_DURATION = 80 / DEFAULT_FRAME_RATE +DEFAULT_LATE_REFERENCE_OFFSET = 16 / DEFAULT_FRAME_RATE +DEFAULT_FINAL_HEIGHT = 1088 + +GLOBAL_PROMPT = ( + "A cinematic live-action scene with the same subject, wardrobe, lighting, " + "and location throughout. Natural motion, stable anatomy, coherent audio." +) +TILE_SNIPPETS = [ + "The subject enters the shot and begins the action.", + "The action continues with a small camera move.", + "The subject completes the central beat.", + "The motion settles into the ending pose.", +] + + +def aligned_frames(seconds: float, frame_rate: float) -> int: + """Return a positive frame count rounded to the nearest 8-frame block.""" + return max(TIME_SCALE, round(seconds * frame_rate / TIME_SCALE) * TIME_SCALE) + + +def frame_count_for_duration(seconds: float, frame_rate: float) -> int: + """Return the largest valid 8n+1 clip length within the duration.""" + return max( + TIME_SCALE + 1, + math.floor((seconds * frame_rate - 1) / TIME_SCALE) * TIME_SCALE + 1, + ) + + +def temporal_tile_starts(frame_count: int, tile_size: int, overlap: int) -> list[int]: + """Return temporal tile starts in pixel-frame units.""" + if frame_count % TIME_SCALE != 1: + raise ValueError("frame_count must satisfy 8n+1") + if tile_size <= overlap: + raise ValueError("tile_size must be greater than overlap") + if tile_size % TIME_SCALE or overlap % TIME_SCALE: + raise ValueError("tile_size and overlap must be multiples of 8") + + latent_frames = ((frame_count - 1) // TIME_SCALE) + 1 + latent_tile_size = tile_size // TIME_SCALE + latent_overlap = overlap // TIME_SCALE + latent_stride = latent_tile_size - latent_overlap + tile_count = math.ceil((latent_frames - latent_overlap) / latent_stride) + return [tile_index * (tile_size - overlap) for tile_index in range(tile_count)] + + +def late_reference_indices( + frame_count: int, + tile_size: int, + overlap: int, + margin: int, +) -> list[int]: + """Return frame 0 plus one aligned late reference index per temporal tile.""" + if margin < TIME_SCALE or margin >= tile_size or margin % TIME_SCALE: + raise ValueError("late reference margin must be an 8-aligned tile offset") + + final_aligned_index = ((frame_count - 1) // TIME_SCALE) * TIME_SCALE + indices = [0] + for tile_start in temporal_tile_starts(frame_count, tile_size, overlap): + late_index = min(tile_start + tile_size - margin, final_aligned_index) + late_index -= late_index % TIME_SCALE + if late_index not in indices: + indices.append(late_index) + return indices + + +FRAME_COUNT = frame_count_for_duration(DEFAULT_TOTAL_DURATION, DEFAULT_FRAME_RATE) +TEMPORAL_TILE_SIZE = aligned_frames(DEFAULT_TILE_DURATION, DEFAULT_FRAME_RATE) +TEMPORAL_OVERLAP = aligned_frames(DEFAULT_OVERLAP_DURATION, DEFAULT_FRAME_RATE) +LATE_REFERENCE_MARGIN = aligned_frames( + DEFAULT_LATE_REFERENCE_OFFSET, DEFAULT_FRAME_RATE +) +TILE_STARTS = temporal_tile_starts(FRAME_COUNT, TEMPORAL_TILE_SIZE, TEMPORAL_OVERLAP) +COND_IMAGE_INDICES = late_reference_indices( + FRAME_COUNT, + TEMPORAL_TILE_SIZE, + TEMPORAL_OVERLAP, + LATE_REFERENCE_MARGIN, +) +COND_IMAGE_INDICES_TEXT = ", ".join(str(index) for index in COND_IMAGE_INDICES) + # ─── Workflow builder ──────────────────────────────────────────────── _link_counter = 0 _nodes: list[dict] = [] _links: list[list] = [] +_groups: list[dict] = [] +_bus_node_id = 110 def _next_link_id(): @@ -26,6 +116,14 @@ def _next_link_id(): return _link_counter +def next_bus_id(): + """Reserve IDs for Set/Get bus nodes outside hand-written graph IDs.""" + global _bus_node_id + nid = _bus_node_id + _bus_node_id += 1 + return nid + + def node( nid: int, ntype: str, @@ -60,11 +158,14 @@ def node( return nid -def inp(nid: int, name: str, typ: str): +def inp(nid: int, name: str, typ: str, widget: bool = False): """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}) + node_input = {"name": name, "type": typ, "link": None} + if widget: + node_input["widget"] = {"name": name} + n["inputs"].append(node_input) return raise ValueError(f"node {nid} not found") @@ -97,6 +198,154 @@ def link(from_id: int, from_slot: int, to_id: int, to_slot: int, typ: str): n["inputs"][to_slot]["link"] = lid +def group( + gid: int, + title: str, + bounding: tuple[int, int, int, int], + color: str = "#3f789e", +): + """Add a LiteGraph group frame.""" + _groups.append( + { + "id": gid, + "title": title, + "bounding": list(bounding), + "color": color, + "font_size": 24, + "flags": {}, + } + ) + + +def set_bus( + nid: int, + pos: tuple[int, int], + name: str, + source_id: int, + source_slot: int, + typ: str, +): + """Publish a typed KJNodes Set bus beside a long-lived source.""" + node(nid, "SetNode", pos, [name], (190, 60), title=f"Set_{name}") + inp(nid, typ, typ) + for n in _nodes: + if n["id"] == nid: + n["flags"]["collapsed"] = True + n["outputs"] = [{"name": "*", "type": "*", "links": None}] + n["properties"] = { + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": name, + } + break + link(source_id, source_slot, nid, 0, typ) + return nid + + +def get_bus( + nid: int, + pos: tuple[int, int], + name: str, + typ: str, +): + """Read a typed KJNodes Set bus close to its consumer.""" + node(nid, "GetNode", pos, [name], (190, 58), title=f"Get_{name}") + out(nid, typ, typ) + for n in _nodes: + if n["id"] == nid: + n["flags"]["collapsed"] = True + n["properties"] = { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + } + break + return nid + + +def primitive_string(nid: int, pos: tuple[int, int], title: str, value: str): + node(nid, "PrimitiveStringMultiline", pos, [value], (500, 180), title=title) + inp(nid, "value", "STRING", widget=True) + out(nid, "STRING", "STRING") + for n in _nodes: + if n["id"] == nid: + n["properties"]["Run widget replace on values"] = False + break + return nid + + +def math_expression( + nid: int, + pos: tuple[int, int], + title: str, + expression: str, + values: list[tuple[str, int, int, str]], +): + node( + nid, + "ComfyMathExpression", + pos, + [expression], + (290, 150), + title=title, + ) + for input_index, (name, source_id, source_slot, source_type) in enumerate(values): + inp(nid, f"values.{name}", "FLOAT,INT") + link(source_id, source_slot, nid, input_index, source_type) + out(nid, "FLOAT", "FLOAT") + out(nid, "INT", "INT") + return nid + + +def concatenate_text( + nid: int, + pos: tuple[int, int], + title: str, + string_a: int, + string_b: int, + delimiter: str, +): + node(nid, "StringConcatenate", pos, ["", "", delimiter], (240, 166), title=title) + inp(nid, "string_a", "STRING", widget=True) + inp(nid, "string_b", "STRING", widget=True) + inp(nid, "delimiter", "STRING", widget=True) + out(nid, "STRING", "STRING") + link(string_a, 0, nid, 0, "STRING") + link(string_b, 0, nid, 1, "STRING") + return nid + + +def image_batch( + nid: int, + pos: tuple[int, int], + title: str, + image_a: int, + image_b: int, +): + node(nid, "ImageBatch", pos, [], (220, 46), title=title) + inp(nid, "image1", "IMAGE") + inp(nid, "image2", "IMAGE") + out(nid, "IMAGE", "IMAGE") + link(image_a, 0, nid, 0, "IMAGE") + link(image_b, 0, nid, 1, "IMAGE") + return nid + + +def multi_prompt_provider(nid: int, pos: tuple[int, int], clip_id: int): + node( + nid, + "MultiPromptProvider", + pos, + [""], + (400, 220), + title="Per-Tile Prompts From Global + Snippets", + ) + inp(nid, "prompts", "STRING", widget=True) + inp(nid, "clip", "CLIP") + out(nid, "conditionings", "CONDITIONING") + link(clip_id, 0, nid, 1, "CLIP") + return nid + + def build(): return { "id": str(uuid.uuid4()), @@ -105,17 +354,18 @@ def build(): "last_link_id": _link_counter, "nodes": _nodes, "links": _links, - "groups": [], + "groups": _groups, "config": {}, "extra": { "ds": {"scale": 0.6, "offset": [0, 0]}, "info": { - "name": "LTX-2.3 Two-Pass I2V Looping", + "name": "LTX-2.3 Two-Pass AV I2V Looping Late Refs", "description": ( - "Two-pass I2V workflow for arbitrary-length video. " + "Two-pass AV I2V workflow for long 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." + "Late soft reference images and per-tile prompt snippets " + "maintain continuity across temporal tiles." ), }, }, @@ -126,13 +376,13 @@ def build(): # ─── 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 +COL_MODELS = 600 +COL_TEXT = 1150 +COL_S1_PREP = 1950 +COL_S1_SAMPLE = 2800 +COL_MID = 3650 +COL_S2_SAMPLE = 4500 +COL_OUTPUT = 5350 ROW_TOP = 0 ROW_MID = 400 @@ -152,42 +402,173 @@ def build(): node(1, "LoadImage", (COL_INPUT, ROW_TOP), ["reference_image.png", "image"], (300, 300)) out(1, "IMAGE", "IMAGE") out(1, "MASK", "MASK") +set_bus(next_bus_id(), (COL_INPUT + 320, ROW_TOP + 20), "start_image", 1, 0, "IMAGE") 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), +set_bus( + next_bus_id(), + (COL_INPUT + 320, ROW_TOP + 400), + "preprocessed_start_image", + 2, + 0, + "IMAGE", +) + +node(4, "PrimitiveFloat", (COL_INPUT, ROW_BOT), [DEFAULT_FRAME_RATE], + (200, 100), title="Frame Rate") out(4, "FLOAT", "FLOAT") +set_bus(next_bus_id(), (COL_INPUT + 220, ROW_BOT + 110), "fps", 4, 0, "FLOAT") -node(5, "PrimitiveBoolean", (COL_INPUT, ROW_BOT + 260), [True], (200, 80), +node(5, "PrimitiveBoolean", (COL_INPUT, ROW_BOT + 130), [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)) +set_bus(next_bus_id(), (COL_INPUT + 220, ROW_BOT + 180), "i2v_enable", 5, 0, "BOOLEAN") + +node(7, "PrimitiveInt", (COL_INPUT + 220, ROW_BOT), [DEFAULT_FINAL_HEIGHT, "fixed"], + (210, 100), title="Final Height Target") +out(7, "INT", "INT") + +node(16, "GetImageSize", (COL_INPUT, ROW_TOP + 580), [], (300, 100), + title="Reference Image Size") +inp(16, "image", "IMAGE") +out(16, "width", "INT") +out(16, "height", "INT") +out(16, "batch_size", "INT") +link(1, 0, 16, 0, "IMAGE") + +math_expression( + 17, + (COL_INPUT + 470, ROW_BOT + 200), + "Align Final Height x64", + "max(64, round(a / 64) * 64)", + [("a", 7, 0, "INT")], +) +math_expression( + 18, + (COL_INPUT + 780, ROW_BOT + 200), + "Final Width From Ref Aspect", + "max(64, round((a * b / max(1, c)) / 64) * 64)", + [("a", 17, 1, "INT"), ("b", 16, 0, "INT"), ("c", 16, 1, "INT")], +) +math_expression( + 19, + (COL_INPUT + 1090, ROW_BOT + 200), + "Stage 1 Width", + "max(32, int(a / 2))", + [("a", 18, 1, "INT")], +) +set_bus( + next_bus_id(), + (COL_INPUT + 1100, ROW_BOT + 380), + "stage_1_width", + 19, + 1, + "INT", +) +math_expression( + 23, + (COL_INPUT + 470, ROW_BOT + 380), + "Stage 1 Height", + "max(32, int(a / 2))", + [("a", 17, 1, "INT")], +) +set_bus( + next_bus_id(), + (COL_INPUT + 780, ROW_BOT + 430), + "stage_1_height", + 23, + 1, + "INT", +) + +node(24, "LTXVLoopingReferenceSchedule", (COL_INPUT, ROW_BOT + 260), + [ + DEFAULT_FRAME_RATE, + DEFAULT_TOTAL_DURATION, + DEFAULT_TILE_DURATION, + DEFAULT_OVERLAP_DURATION, + DEFAULT_LATE_REFERENCE_OFFSET, + ], + (430, 310), title="Looping Timing + Reference Schedule") +inp(24, "reference_images", "IMAGE") +inp(24, "frame_rate", "FLOAT", widget=True) +inp(24, "total_duration", "FLOAT", widget=True) +inp(24, "tile_duration", "FLOAT", widget=True) +inp(24, "overlap_duration", "FLOAT", widget=True) +inp(24, "reference_offset", "FLOAT", widget=True) +out(24, "reference_images", "IMAGE") +out(24, "frame_count", "INT") +out(24, "temporal_tile_size", "INT") +out(24, "temporal_overlap", "INT") +out(24, "reference_indices", "STRING") +out(24, "tile_count", "INT") +link(4, 0, 24, 1, "FLOAT") +set_bus( + next_bus_id(), + (COL_INPUT + 450, ROW_DEEP + 180), + "scheduled_reference_images", + 24, + 0, + "IMAGE", +) +set_bus( + next_bus_id(), + (COL_INPUT + 450, ROW_DEEP + 250), + "frame_count", + 24, + 1, + "INT", +) +set_bus( + next_bus_id(), + (COL_INPUT + 650, ROW_DEEP + 180), + "temporal_tile_size", + 24, + 2, + "INT", +) +set_bus( + next_bus_id(), + (COL_INPUT + 650, ROW_DEEP + 250), + "temporal_overlap", + 24, + 3, + "INT", +) +set_bus( + next_bus_id(), + (COL_INPUT + 850, ROW_DEEP + 180), + "reference_indices", + 24, + 4, + "STRING", +) + +node(6, "Note", (COL_INPUT, ROW_DEEP + 210), [ + "## Late Reference Tile Layout\n\n" + "The Looping Timing + Reference Schedule node calculates clip frames, " + "sampler tile size, overlap, and late reference indices.\n\n" + f"Default frame count: {FRAME_COUNT} (`8n+1`).\n" + f"Default tile size: {TEMPORAL_TILE_SIZE}. Overlap: {TEMPORAL_OVERLAP}. " + f"Stride: {TEMPORAL_TILE_SIZE - TEMPORAL_OVERLAP}.\n" + f"Default tile starts: {', '.join(str(start) for start in TILE_STARTS)}.\n\n" + "The current image/snippet branches match these default indices:\n" + f" `{COND_IMAGE_INDICES_TEXT}`\n" + "If duration adds tiles after the supplied refs, the schedule repeats the " + "last image. It truncates extra supplied refs for shorter clips.\n" + "The looping sampler already repeats the last tile prompt after the " + "snippet list ends.\n\n" + "Edit duration, tile duration, overlap, and late-reference offset " + "inside the schedule node. Edit the Global Positive Prompt once and " + "each Tile Prompt Snippet " + "beside its late reference branch. The graph concatenates " + "`global + snippet` for each tile and joins those prompts with `|` for " + "the multi-prompt node." +], (440, 340)) # ── Model loading ── @@ -196,6 +577,7 @@ def build(): out(10, "MODEL", "MODEL") out(10, "CLIP", "CLIP") out(10, "VAE", "VAE") +set_bus(next_bus_id(), (COL_MODELS + 360, ROW_TOP + 70), "video_vae", 10, 2, "VAE") node(11, "LTXAVTextEncoderLoader", (COL_MODELS, ROW_TOP + 180), ["comfy_gemma_3_12B_it.safetensors", "ltx-2.3-22b-dev.safetensors", "default"], @@ -205,6 +587,7 @@ def build(): node(12, "LTXVAudioVAELoader", (COL_MODELS, ROW_MID), ["ltx-2.3-22b-dev.safetensors"], (350, 100)) out(12, "Audio VAE", "VAE") +set_bus(next_bus_id(), (COL_MODELS + 360, ROW_MID + 20), "audio_vae", 12, 0, "VAE") node(13, "LoraLoaderModelOnly", (COL_MODELS, ROW_MID + 130), ["ltx-2.3-22b-distilled-lora-384.safetensors", 0.5], (380, 100), @@ -213,17 +596,44 @@ def build(): out(13, "MODEL", "MODEL") link(10, 0, 13, 0, "MODEL") # Checkpoint → LoRA -node(14, "LatentUpscaleModelLoader", (COL_MODELS, ROW_MID + 260), +node(25, "Power Lora Loader (rgthree)", (COL_MODELS, ROW_MID + 260), + [], (400, 190), title="Extra LoRAs (rgthree)") +inp(25, "model", "MODEL") +inp(25, "clip", "CLIP") +out(25, "MODEL", "MODEL") +out(25, "CLIP", "CLIP") +link(13, 0, 25, 0, "MODEL") +for n in _nodes: + if n["id"] == 25: + n["properties"].update( + { + "cnr_id": "rgthree-comfy", + "aux_id": "rgthree/rgthree-comfy", + "Show Strengths": "Single Strength", + "Match": "", + } + ) + break +set_bus(next_bus_id(), (COL_MODELS + 410, ROW_BOT + 60), "model", 25, 0, "MODEL") + +node(14, "LatentUpscaleModelLoader", (COL_MODELS, ROW_BOT + 80), ["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"], (380, 100)) out(14, "LATENT_UPSCALE_MODEL", "LATENT_UPSCALE_MODEL") +set_bus( + next_bus_id(), + (COL_MODELS + 410, ROW_BOT + 450), + "latent_upscale_model", + 14, + 0, + "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") + [""], (400, 180), title="Global Prompt Fallback Encode") inp(20, "clip", "CLIP") +inp(20, "text", "STRING", widget=True) out(20, "CONDITIONING", "CONDITIONING") link(11, 0, 20, 0, "CLIP") @@ -242,39 +652,42 @@ def build(): 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 +conditioning_fps_id = get_bus(next_bus_id(), (COL_TEXT, ROW_MID - 58), "fps", "FLOAT") +link(conditioning_fps_id, 0, 22, 2, "FLOAT") +set_bus(next_bus_id(), (COL_TEXT + 320, ROW_MID), "positive_conditioning", 22, 0, "CONDITIONING") +set_bus(next_bus_id(), (COL_TEXT + 320, ROW_MID + 70), "negative_conditioning", 22, 1, "CONDITIONING") # ── Stage 1 prep ── -node(30, "EmptyLTXVLatentVideo", (COL_S1_PREP, ROW_TOP), [960, 544, 241, 1], +node(30, "EmptyLTXVLatentVideo", (COL_S1_PREP, ROW_TOP), [960, 544, FRAME_COUNT, 1], (250, 150), title="Stage 1 Empty Latent") -inp(30, "length", "INT") +inp(30, "width", "INT", widget=True) +inp(30, "height", "INT", widget=True) +inp(30, "length", "INT", widget=True) out(30, "LATENT", "LATENT") -link(3, 0, 30, 0, "INT") # Frame count - -node(31, "LTXVEmptyLatentAudio", (COL_S1_PREP, ROW_TOP + 180), [97, 25, 1], +stage1_width_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_TOP), "stage_1_width", "INT") +stage1_height_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_TOP + 70), "stage_1_height", "INT") +stage1_frames_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_TOP + 140), "frame_count", "INT") +link(stage1_width_id, 0, 30, 0, "INT") # Aspect-ratio width at stage 1 +link(stage1_height_id, 0, 30, 1, "INT") # Half final height at stage 1 +link(stage1_frames_id, 0, 30, 2, "INT") # Valid 8n+1 frame count + +node(31, "LTXVEmptyLatentAudio", (COL_S1_PREP, ROW_TOP + 180), [FRAME_COUNT, 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 +stage1_audio_vae_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_TOP + 220), "audio_vae", "VAE") +link(stage1_audio_vae_id, 0, 31, 0, "VAE") # Audio VAE +link(stage1_frames_id, 0, 31, 1, "INT") # Frame count -node(34, "CM_FloatToInt", (COL_S1_PREP - 100, ROW_MID + 60), [0], (150, 80), +node(34, "CM_FloatToInt", (COL_S1_PREP - 180, ROW_TOP + 320), [0], (150, 80), title="FPS→Int") inp(34, "a", "FLOAT") out(34, "INT", "INT") -link(4, 0, 34, 0, "FLOAT") +stage1_fps_id = get_bus(next_bus_id(), (COL_S1_PREP - 390, ROW_TOP + 330), "fps", "FLOAT") +link(stage1_fps_id, 0, 34, 0, "FLOAT") link(34, 0, 31, 2, "INT") # Frame rate int → audio node(32, "LTXVImgToVideoConditionOnly", (COL_S1_PREP, ROW_MID), @@ -285,10 +698,18 @@ def build(): 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 +stage1_video_vae_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_MID + 20), "video_vae", "VAE") +stage1_preprocessed_id = get_bus( + next_bus_id(), + (COL_S1_PREP - 210, ROW_MID + 90), + "preprocessed_start_image", + "IMAGE", +) +stage1_i2v_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_MID + 160), "i2v_enable", "BOOLEAN") +link(stage1_video_vae_id, 0, 32, 0, "VAE") # Checkpoint VAE +link(stage1_preprocessed_id, 0, 32, 1, "IMAGE") # Preprocessed reference link(30, 0, 32, 2, "LATENT") # Empty latent -link(5, 0, 32, 3, "BOOLEAN") # I2V enable +link(stage1_i2v_id, 0, 32, 3, "BOOLEAN") # I2V enable node(33, "LTXVConcatAVLatent", (COL_S1_PREP, ROW_BOT), [], (250, 100), title="Stage 1 AV Concat", @@ -305,8 +726,23 @@ def build(): 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 +stage1_anchor_image_id = get_bus( + next_bus_id(), + (COL_S1_PREP - 210, ROW_DEEP), + "preprocessed_start_image", + "IMAGE", +) +stage1_anchor_vae_id = get_bus(next_bus_id(), (COL_S1_PREP - 210, ROW_DEEP + 70), "video_vae", "VAE") +link(stage1_anchor_image_id, 0, 35, 0, "IMAGE") # Preprocessed reference +link(stage1_anchor_vae_id, 0, 35, 1, "VAE") # Checkpoint VAE +set_bus( + next_bus_id(), + (COL_S1_PREP + 270, ROW_DEEP + 20), + "stage_1_anchor_latent", + 35, + 0, + "LATENT", +) # ── Stage 1 sampling ── @@ -329,9 +765,22 @@ def build(): 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 +stage1_guider_model_id = get_bus(next_bus_id(), (COL_S1_SAMPLE - 210, ROW_TOP + 220), "model", "MODEL") +stage1_guider_positive_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_TOP + 285), + "positive_conditioning", + "CONDITIONING", +) +stage1_guider_negative_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_TOP + 350), + "negative_conditioning", + "CONDITIONING", +) +link(stage1_guider_model_id, 0, 43, 0, "MODEL") # Model with all LoRAs +link(stage1_guider_positive_id, 0, 43, 1, "CONDITIONING") # Positive +link(stage1_guider_negative_id, 0, 43, 2, "CONDITIONING") # Negative # LTXVLoopingSampler — Stage 1 # Widgets: temporal_tile_size, temporal_overlap, guiding_strength, @@ -340,7 +789,20 @@ def build(): # 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"], + [ + TEMPORAL_TILE_SIZE, + TEMPORAL_OVERLAP, + 1.0, + 0.5, + 1.0, + 1, + 1, + 1, + 0.15, + 0, + 1000, + COND_IMAGE_INDICES_TEXT, + ], (400, 580), title="Stage 1 — Generate", color=S1_COLOR, bgcolor=S1_BG) # Required inputs (slots 0-6) @@ -357,20 +819,64 @@ def build(): inp(44, "optional_positive_conditionings", "CONDITIONING") inp(44, "optional_negative_index_latents", "LATENT") inp(44, "optional_normalizing_latents", "LATENT") +inp(44, "temporal_tile_size", "INT", widget=True) +inp(44, "temporal_overlap", "INT", widget=True) +inp(44, "optional_cond_image_indices", "STRING", widget=True) out(44, "denoised_output", "LATENT") -link(13, 0, 44, 0, "MODEL") # Model with distilled LoRA -link(10, 2, 44, 1, "VAE") # Checkpoint VAE +stage1_model_id = get_bus(next_bus_id(), (COL_S1_SAMPLE - 210, ROW_MID + 10), "model", "MODEL") +stage1_sampler_vae_id = get_bus(next_bus_id(), (COL_S1_SAMPLE - 210, ROW_MID + 75), "video_vae", "VAE") +stage1_references_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_MID + 140), + "scheduled_reference_images", + "IMAGE", +) +stage1_prompts_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_MID + 205), + "tile_prompt_conditioning", + "CONDITIONING", +) +stage1_tile_size_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_MID + 270), + "temporal_tile_size", + "INT", +) +stage1_overlap_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_MID + 335), + "temporal_overlap", + "INT", +) +stage1_ref_indices_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_MID + 400), + "reference_indices", + "STRING", +) +stage1_anchor_id = get_bus( + next_bus_id(), + (COL_S1_SAMPLE - 210, ROW_MID + 465), + "stage_1_anchor_latent", + "LATENT", +) +link(stage1_model_id, 0, 44, 0, "MODEL") # Model with all LoRAs +link(stage1_sampler_vae_id, 0, 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) +link(stage1_references_id, 0, 44, 7, "IMAGE") # Scheduled and repeated references # 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) +link(stage1_prompts_id, 0, 44, 9, "CONDITIONING") # Per-tile prompt conditioning +link(stage1_anchor_id, 0, 44, 10, "LATENT") # Negative index latents anchor # slot 11: optional_normalizing_latents — not connected +link(stage1_tile_size_id, 0, 44, 12, "INT") # Tile duration in aligned frames +link(stage1_overlap_id, 0, 44, 13, "INT") # Temporal overlap in aligned frames +link(stage1_ref_indices_id, 0, 44, 14, "STRING") # Reference frame indices # ── Between stages ── # Single split of stage 1 AV output: @@ -383,6 +889,7 @@ def build(): out(50, "video_latent", "LATENT") out(50, "audio_latent", "LATENT") link(44, 0, 50, 0, "LATENT") # Stage 1 output → split +set_bus(next_bus_id(), (COL_MID + 270, ROW_MID + 40), "stage_1_audio", 50, 1, "LATENT") node(51, "LTXVLatentUpsampler", (COL_MID, ROW_MID + 130), [], (300, 100), title="Spatial Upscale 2x") @@ -390,9 +897,16 @@ def build(): inp(51, "upscale_model", "LATENT_UPSCALE_MODEL") inp(51, "vae", "VAE") out(51, "LATENT", "LATENT") +stage2_upscale_model_id = get_bus( + next_bus_id(), + (COL_MID - 210, ROW_MID + 150), + "latent_upscale_model", + "LATENT_UPSCALE_MODEL", +) +stage2_upscale_vae_id = get_bus(next_bus_id(), (COL_MID - 210, ROW_MID + 215), "video_vae", "VAE") 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 +link(stage2_upscale_model_id, 0, 51, 1, "LATENT_UPSCALE_MODEL") # Upscale model +link(stage2_upscale_vae_id, 0, 51, 2, "VAE") # VAE node(52, "LTXVImgToVideoConditionOnly", (COL_MID, ROW_MID + 260), [1.0, False], (300, 130), title="Stage 2 I2V Cond", @@ -402,10 +916,13 @@ def build(): 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) +stage2_i2v_vae_id = get_bus(next_bus_id(), (COL_MID - 210, ROW_MID + 290), "video_vae", "VAE") +stage2_start_image_id = get_bus(next_bus_id(), (COL_MID - 210, ROW_MID + 355), "start_image", "IMAGE") +stage2_i2v_enable_id = get_bus(next_bus_id(), (COL_MID - 210, ROW_MID + 420), "i2v_enable", "BOOLEAN") +link(stage2_i2v_vae_id, 0, 52, 0, "VAE") # VAE +link(stage2_start_image_id, 0, 52, 1, "IMAGE") # Reference; conditioner resizes internally link(51, 0, 52, 2, "LATENT") # Upscaled video latent -link(5, 0, 52, 3, "BOOLEAN") # I2V enable +link(stage2_i2v_enable_id, 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: @@ -416,8 +933,9 @@ def build(): inp(53, "video_latent", "LATENT") inp(53, "audio_latent", "LATENT") out(53, "latent", "LATENT") +stage2_audio_id = get_bus(next_bus_id(), (COL_MID - 210, ROW_BOT + 230), "stage_1_audio", "LATENT") link(52, 0, 53, 0, "LATENT") # Conditioned upscaled video -link(50, 1, 53, 1, "LATENT") # Audio from stage 1 +link(stage2_audio_id, 0, 53, 1, "LATENT") # Audio from stage 1 # ── Stage 2 sampling ── @@ -439,14 +957,40 @@ def build(): 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 +stage2_guider_model_id = get_bus(next_bus_id(), (COL_S2_SAMPLE - 210, ROW_TOP + 220), "model", "MODEL") +stage2_guider_positive_id = get_bus( + next_bus_id(), + (COL_S2_SAMPLE - 210, ROW_TOP + 285), + "positive_conditioning", + "CONDITIONING", +) +stage2_guider_negative_id = get_bus( + next_bus_id(), + (COL_S2_SAMPLE - 210, ROW_TOP + 350), + "negative_conditioning", + "CONDITIONING", +) +link(stage2_guider_model_id, 0, 63, 0, "MODEL") # Same model with all LoRAs +link(stage2_guider_positive_id, 0, 63, 1, "CONDITIONING") # Same positive +link(stage2_guider_negative_id, 0, 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"], + [ + TEMPORAL_TILE_SIZE, + TEMPORAL_OVERLAP, + 1.0, + 0.5, + 1.0, + 2, + 1, + 1, + 0.0, + 0, + 1000, + COND_IMAGE_INDICES_TEXT, + ], (400, 580), title="Stage 2 — Refine", color=S2_COLOR, bgcolor=S2_BG) inp(64, "model", "MODEL") @@ -461,17 +1005,47 @@ def build(): inp(64, "optional_positive_conditionings", "CONDITIONING") inp(64, "optional_negative_index_latents", "LATENT") inp(64, "optional_normalizing_latents", "LATENT") +inp(64, "temporal_tile_size", "INT", widget=True) +inp(64, "temporal_overlap", "INT", widget=True) +inp(64, "optional_cond_image_indices", "STRING", widget=True) out(64, "denoised_output", "LATENT") -link(13, 0, 64, 0, "MODEL") # Model with distilled LoRA -link(10, 2, 64, 1, "VAE") # VAE +stage2_model_id = get_bus(next_bus_id(), (COL_S2_SAMPLE - 210, ROW_MID + 10), "model", "MODEL") +stage2_sampler_vae_id = get_bus(next_bus_id(), (COL_S2_SAMPLE - 210, ROW_MID + 75), "video_vae", "VAE") +stage2_references_id = get_bus( + next_bus_id(), + (COL_S2_SAMPLE - 210, ROW_MID + 140), + "scheduled_reference_images", + "IMAGE", +) +stage2_prompts_id = get_bus( + next_bus_id(), + (COL_S2_SAMPLE - 210, ROW_MID + 205), + "tile_prompt_conditioning", + "CONDITIONING", +) +stage2_tile_size_id = get_bus(next_bus_id(), (COL_S2_SAMPLE - 210, ROW_MID + 270), "temporal_tile_size", "INT") +stage2_overlap_id = get_bus(next_bus_id(), (COL_S2_SAMPLE - 210, ROW_MID + 335), "temporal_overlap", "INT") +stage2_ref_indices_id = get_bus( + next_bus_id(), + (COL_S2_SAMPLE - 210, ROW_MID + 400), + "reference_indices", + "STRING", +) +link(stage2_model_id, 0, 64, 0, "MODEL") # Model with all LoRAs +link(stage2_sampler_vae_id, 0, 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 +link(stage2_references_id, 0, 64, 7, "IMAGE") # Scheduled and repeated references +# slot 8: optional_guiding_latents — not connected +link(stage2_prompts_id, 0, 64, 9, "CONDITIONING") # Per-tile prompt conditioning +# slot 10-11: not connected for stage 2 +link(stage2_tile_size_id, 0, 64, 12, "INT") # Tile duration in aligned frames +link(stage2_overlap_id, 0, 64, 13, "INT") # Temporal overlap in aligned frames +link(stage2_ref_indices_id, 0, 64, 14, "STRING") # Reference frame indices # ── Output ── # Both video and audio from stage 2 (refined jointly). @@ -489,30 +1063,194 @@ def build(): inp(71, "samples", "LATENT") inp(71, "vae", "VAE") out(71, "IMAGE", "IMAGE") +output_video_vae_id = get_bus(next_bus_id(), (COL_OUTPUT - 210, ROW_MID + 165), "video_vae", "VAE") link(70, 0, 71, 0, "LATENT") # Refined video -link(10, 2, 71, 1, "VAE") # VAE +link(output_video_vae_id, 0, 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") +output_audio_vae_id = get_bus(next_bus_id(), (COL_OUTPUT - 210, ROW_MID + 395), "audio_vae", "VAE") link(70, 1, 72, 0, "LATENT") # Refined audio -link(12, 0, 72, 1, "VAE") # Audio VAE +link(output_audio_vae_id, 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") +output_fps_id = get_bus(next_bus_id(), (COL_OUTPUT - 210, ROW_BOT + 230), "fps", "FLOAT") link(71, 0, 73, 0, "IMAGE") link(72, 0, 73, 1, "AUDIO") -link(4, 0, 73, 2, "FLOAT") # Frame rate +link(output_fps_id, 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") +# ── Per-tile reference and prompt branches ── + +_dynamic_node_id = 80 + + +def next_dynamic_id(): + global _dynamic_node_id + nid = _dynamic_node_id + _dynamic_node_id += 1 + return nid + + +global_prompt_id = primitive_string( + next_dynamic_id(), + (COL_TEXT + 250, ROW_BOT + 50), + "Global Positive Prompt", + GLOBAL_PROMPT, +) +set_bus( + next_bus_id(), + (COL_TEXT + 250, ROW_BOT + 240), + "global_prompt", + global_prompt_id, + 0, + "STRING", +) +fallback_global_prompt_id = get_bus( + next_bus_id(), + (COL_TEXT, ROW_TOP - 70), + "global_prompt", + "STRING", +) +link(fallback_global_prompt_id, 0, 20, 1, "STRING") + +multi_prompt_id = multi_prompt_provider( + next_dynamic_id(), + (COL_TEXT, ROW_MID + 140), + 11, +) +set_bus( + next_bus_id(), + (COL_TEXT + 400, ROW_MID + 170), + "tile_prompt_conditioning", + multi_prompt_id, + 0, + "CONDITIONING", +) + +late_load_ids = [] +full_prompt_ids = [] +late_ref_x = COL_INPUT - 400 +for tile_index, late_index in enumerate(COND_IMAGE_INDICES[1:]): + tile_y = ROW_DEEP + 620 + tile_index * 330 + + late_load_id = next_dynamic_id() + node( + late_load_id, + "LoadImage", + (late_ref_x, tile_y), + [f"reference_tile_{tile_index}_late.png", "image"], + (300, 300), + title=f"Late Ref Tile {tile_index} - Frame {late_index}", + ) + out(late_load_id, "IMAGE", "IMAGE") + out(late_load_id, "MASK", "MASK") + late_load_ids.append(late_load_id) + + snippet = TILE_SNIPPETS[tile_index] if tile_index < len(TILE_SNIPPETS) else "" + snippet_id = primitive_string( + next_dynamic_id(), + (late_ref_x + 340, tile_y), + f"Tile {tile_index} Prompt Snippet", + snippet, + ) + tile_global_prompt_id = get_bus( + next_bus_id(), + (late_ref_x + 860, tile_y + 180), + "global_prompt", + "STRING", + ) + full_prompt_id = concatenate_text( + next_dynamic_id(), + (late_ref_x + 860, tile_y), + f"Global + Tile {tile_index} Snippet", + tile_global_prompt_id, + snippet_id, + " ", + ) + full_prompt_ids.append(full_prompt_id) + +reference_batch_id = get_bus( + next_bus_id(), + (late_ref_x + 340, ROW_DEEP + 620 + 270), + "start_image", + "IMAGE", +) +for batch_index, load_id in enumerate(late_load_ids): + tile_y = ROW_DEEP + 620 + batch_index * 330 + reference_batch_id = image_batch( + next_dynamic_id(), + (late_ref_x + 340, tile_y + 220), + f"Ref Batch {batch_index + 1}", + reference_batch_id, + load_id, + ) + +set_bus( + next_bus_id(), + (late_ref_x + 580, ROW_DEEP + 620 + (len(late_load_ids) - 1) * 330 + 220), + "reference_image_batch", + reference_batch_id, + 0, + "IMAGE", +) +schedule_reference_batch_id = get_bus( + next_bus_id(), + (COL_INPUT - 210, ROW_BOT + 330), + "reference_image_batch", + "IMAGE", +) +link(schedule_reference_batch_id, 0, 24, 0, "IMAGE") + +joined_prompt_id = full_prompt_ids[0] +for join_index, full_prompt_id in enumerate(full_prompt_ids[1:]): + tile_y = ROW_DEEP + 620 + (join_index + 1) * 330 + joined_prompt_id = concatenate_text( + next_dynamic_id(), + (late_ref_x + 1140, tile_y), + f"Join Tile Prompts {join_index + 2}", + joined_prompt_id, + full_prompt_id, + " | ", + ) +set_bus( + next_bus_id(), + (late_ref_x + 1400, ROW_DEEP + 620 + (len(full_prompt_ids) - 1) * 330 + 40), + "joined_tile_prompts", + joined_prompt_id, + 0, + "STRING", +) +joined_tile_prompts_id = get_bus( + next_bus_id(), + (COL_TEXT, ROW_MID + 370), + "joined_tile_prompts", + "STRING", +) +link(joined_tile_prompts_id, 0, multi_prompt_id, 0, "STRING") + + +# ── Functional groups ── + +group(1, "Inputs + Timing", (-240, -90, 790, 1870), "#6a8b80") +group(2, "Models + LoRAs", (560, -90, 670, 1430), "#8a6d3b") +group(3, "Prompt Conditioning", (1110, -110, 820, 1260), "#76518a") +group(4, "Dimensions + Timing Buses", (440, 960, 980, 590), "#5b7e9c") +group(5, "Stage 1 Base AV", (1710, -120, 1540, 1490), "#51724d") +group(6, "Upscale + Stage 2", (3410, -120, 1540, 1270), "#555d96") +group(7, "Final Output", (5110, 250, 650, 1120), "#9b6c4b") +group(8, "Late References + Tile Snippets", (-440, 1740, 1670, 1450), "#3f789e") + # ─── Generate ──────────────────────────────────────────────────────── diff --git a/looping_sampler.py b/looping_sampler.py index 20c7892..5d0eb57 100644 --- a/looping_sampler.py +++ b/looping_sampler.py @@ -241,6 +241,13 @@ def INPUT_TYPES(s): "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.", }, ), + "save_checkpoints": ( + "BOOLEAN", + { + "default": False, + "tooltip": "If enabled, writes the accumulated latent to output/ltxv_looping_ckpt_v{v}_h{h}.safetensors after each temporal tile, so a mid-run crash leaves a decodable partial result on disk for salvage. The file is overwritten each tile (the latent is cumulative).", + }, + ), }, } @@ -330,6 +337,7 @@ def _process_temporal_chunks( sampling_config: SamplingConfig, model_config: ModelConfig, audio_info: Optional[dict] = None, + save_checkpoints: bool = False, ): """Process all temporal chunks for a single spatial tile.""" chunk_index = 0 @@ -626,6 +634,11 @@ def _process_temporal_chunks( # Update accumulated audio from extend tile accumulated_audio = tile_out_latents.pop("_audio", accumulated_audio) + if save_checkpoints: + self._save_chunk_checkpoint( + tile_out_latents, accumulated_audio, tile_config, chunk_index + ) + chunk_index += 1 # Store accumulated audio in the output for the caller @@ -634,6 +647,59 @@ def _process_temporal_chunks( return tile_out_latents + def _save_chunk_checkpoint( + self, tile_out_latents, accumulated_audio, tile_config, chunk_index + ): + """Salvage checkpoint: persist the accumulated latent after each temporal + chunk so a mid-run crash leaves a decodable partial result on disk. + + The latent is cumulative, so each write supersedes the previous one; we + overwrite a single per-spatial-tile file and rename atomically to avoid a + corrupt file if the process dies mid-write. Best-effort — a checkpoint + failure must never abort generation. To recover, load the .safetensors + ("video"/"audio" tensors) and VAE-decode whatever finished. + """ + try: + import os + + import comfy.utils + import folder_paths + + samples = tile_out_latents["samples"] + if isinstance(samples, NestedTensor) and len(samples.tensors) == 2: + video, audio = samples.tensors[0], samples.tensors[1] + else: + video, audio = samples, accumulated_audio + + sd = {"video": video.detach().cpu().contiguous()} + metadata = { + "chunk_index": str(chunk_index), + "spatial_v": str(tile_config.v), + "spatial_h": str(tile_config.h), + "video_shape": str(list(video.shape)), + } + if audio is not None: + sd["audio"] = audio.detach().cpu().contiguous() + metadata["audio_shape"] = str(list(audio.shape)) + + path = os.path.join( + folder_paths.get_output_directory(), + f"ltxv_looping_ckpt_v{tile_config.v}_h{tile_config.h}.safetensors", + ) + tmp_path = path + ".tmp" + comfy.utils.save_torch_file(sd, tmp_path, metadata=metadata) + os.replace(tmp_path, path) + print( + f"[LoopingSampler] Saved salvage checkpoint (chunk {chunk_index}, " + f"video={list(video.shape)}" + + (f", audio={list(audio.shape)}" if audio is not None else "") + + f") -> {path}" + ) + except Exception as e: + print( + f"[LoopingSampler] WARNING: failed to write salvage checkpoint: {e}" + ) + def _create_spatial_weights( self, tile_shape, @@ -835,6 +901,7 @@ def sample( guiding_end_step=1000, optional_cond_image_indices="0", optional_normalizing_latents=None, + save_checkpoints=False, per_tile_seed_offsets="0", # hidden interface ): # Get dimensions and prepare for spatial tiling @@ -1039,6 +1106,7 @@ def sample( sampling_config, model_config, audio_info=tile_audio_info, + save_checkpoints=save_checkpoints, ) # Extract accumulated audio from first spatial tile diff --git a/stg.py b/stg.py index 9e54821..fbcd8f7 100644 --- a/stg.py +++ b/stg.py @@ -123,6 +123,7 @@ class STGFlag: class PatchAttention(contextlib.AbstractContextManager): def __init__(self, attn_idx: Optional[Union[int, List[int]]] = None): self.current_idx = -1 + self._guide_offset = 0 if isinstance(attn_idx, int): self.attn_idx = [attn_idx] @@ -151,19 +152,42 @@ def __exit__(self, exc_type, exc_value, traceback): self.original_attention = None self.original_attention_masked = None - def stg_attention(self, q, k, v, heads, *args, **kwargs): - self.current_idx += 1 - if self.current_idx in self.attn_idx: - return v + def _stg_call(self, original, q, k, v, heads, args, kwargs): + # comfy's guide-mask self-attention (_attention_with_guide_mask in + # comfy/ldm/lightricks/model.py) splits one self-attention into several + # optimized_attention calls over contiguous *query slices*, each against + # the full key/value. Those sub-calls are the only ones that pass + # low_precision_attention=False, which lets us recognise them: a plain + # "return v" would be the wrong length (full sequence vs. the query + # slice) and would also miscount the STG attention index (one logical + # self-attention would consume several indices, shifting audio_attn_idx). + # We collapse the split into a single logical attention and, when + # skipping, return the matching slice of v. + guide_split = kwargs.get("low_precision_attention") is False and q.shape[1] < v.shape[1] + continuation = guide_split and self._guide_offset > 0 + + if not continuation: + self.current_idx += 1 + skip = self.current_idx in self.attn_idx + + if not guide_split: + return v if skip else original(q, k, v, heads, *args, **kwargs) + + off = self._guide_offset + q_len = q.shape[1] + if skip: + out = v[:, off:off + q_len] else: - return self.original_attention(q, k, v, heads, *args, **kwargs) + out = original(q, k, v, heads, *args, **kwargs) + off += q_len + self._guide_offset = 0 if off >= v.shape[1] else off + return out + + def stg_attention(self, q, k, v, heads, *args, **kwargs): + return self._stg_call(self.original_attention, q, k, v, heads, args, kwargs) def stg_attention_masked(self, q, k, v, heads, *args, **kwargs): - self.current_idx += 1 - if self.current_idx in self.attn_idx: - return v - else: - return self.original_attention_masked(q, k, v, heads, *args, **kwargs) + return self._stg_call(self.original_attention_masked, q, k, v, heads, args, kwargs) class STGBlockWrapper: diff --git a/utiltily_nodes.py b/utiltily_nodes.py index 8428b86..f696209 100644 --- a/utiltily_nodes.py +++ b/utiltily_nodes.py @@ -1,3 +1,7 @@ +import math + +import torch + from .nodes_registry import comfy_node # Internal keys used to store AV merge metadata inside model options @@ -65,3 +69,123 @@ def INPUT_TYPES(cls): def run(self, image): return (image.cpu(),) + + +@comfy_node(description="Looping Reference Schedule") +class LTXVLoopingReferenceSchedule: + TIME_SCALE = 8 + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "reference_images": ("IMAGE",), + "frame_rate": ( + "FLOAT", + {"default": 24.0, "min": 0.01, "max": 240.0, "step": 0.01}, + ), + "total_duration": ( + "FLOAT", + {"default": 30.0, "min": 0.1, "max": 3600.0, "step": 0.1}, + ), + "tile_duration": ( + "FLOAT", + {"default": 10.0, "min": 0.1, "max": 3600.0, "step": 0.1}, + ), + "overlap_duration": ( + "FLOAT", + {"default": 80 / 24, "min": 0.1, "max": 3600.0, "step": 0.1}, + ), + "reference_offset": ( + "FLOAT", + { + "default": 16 / 24, + "min": 0.1, + "max": 3600.0, + "step": 0.1, + "tooltip": "Reference position as seconds before the end of each tile.", + }, + ), + }, + } + + RETURN_TYPES = ("IMAGE", "INT", "INT", "INT", "STRING", "INT") + RETURN_NAMES = ( + "reference_images", + "frame_count", + "temporal_tile_size", + "temporal_overlap", + "reference_indices", + "tile_count", + ) + FUNCTION = "build" + CATEGORY = "utility" + + @classmethod + def _aligned_frames(cls, seconds, frame_rate, minimum): + frames = round(seconds * frame_rate / cls.TIME_SCALE) * cls.TIME_SCALE + return max(minimum, frames) + + def build( + self, + reference_images, + frame_rate, + total_duration, + tile_duration, + overlap_duration, + reference_offset, + ): + frame_count = max( + self.TIME_SCALE + 1, + math.floor((total_duration * frame_rate - 1) / self.TIME_SCALE) + * self.TIME_SCALE + + 1, + ) + tile_size = min(self._aligned_frames(tile_duration, frame_rate, 24), 1000) + overlap = self._aligned_frames(overlap_duration, frame_rate, 16) + overlap = min(overlap, 80, tile_size - self.TIME_SCALE) + reference_margin = self._aligned_frames( + reference_offset, frame_rate, self.TIME_SCALE + ) + reference_margin = min(reference_margin, tile_size - self.TIME_SCALE) + + latent_frames = ((frame_count - 1) // self.TIME_SCALE) + 1 + latent_tile_size = tile_size // self.TIME_SCALE + latent_overlap = overlap // self.TIME_SCALE + latent_stride = latent_tile_size - latent_overlap + tile_count = max( + 1, math.ceil((latent_frames - latent_overlap) / latent_stride) + ) + + final_index = ((frame_count - 1) // self.TIME_SCALE) * self.TIME_SCALE + tile_stride = tile_size - overlap + reference_indices = [0] + for tile_index in range(tile_count): + reference_index = min( + tile_index * tile_stride + tile_size - reference_margin, + final_index, + ) + reference_index -= reference_index % self.TIME_SCALE + if reference_index not in reference_indices: + reference_indices.append(reference_index) + + target_count = len(reference_indices) + source_count = reference_images.shape[0] + if source_count < 1: + raise ValueError("reference_images must contain at least one image") + if source_count >= target_count: + scheduled_images = reference_images[:target_count] + else: + repeated_last = reference_images[-1:].repeat( + target_count - source_count, 1, 1, 1 + ) + scheduled_images = torch.cat((reference_images, repeated_last), dim=0) + + return ( + scheduled_images, + frame_count, + tile_size, + overlap, + ", ".join(str(index) for index in reference_indices), + tile_count, + ) From 0dc3000396ff230011b264bd2b5a0fccca09df1e Mon Sep 17 00:00:00 2001 From: "Jean J. de Jong" Date: Fri, 5 Jun 2026 07:14:55 +0200 Subject: [PATCH 6/6] Checkpoints saved as video and audio latents, directly reloadable in a workflow. Updated the sample 2-pass workflow --- .../LTX-2.3_Two_Pass_I2V_Looping.json | 7529 +++++++++-------- looping_sampler.py | 52 +- 2 files changed, 3955 insertions(+), 3626 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 749fab5..b5475a2 100644 --- a/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json +++ b/example_workflows/LTX-2.3_Two_Pass_I2V_Looping.json @@ -1,567 +1,615 @@ { "id": "2ac1902d-b377-4ca2-b201-bf669dcdfbf7", "revision": 0, - "last_node_id": 181, - "last_link_id": 130, + "last_node_id": 202, + "last_link_id": 171, "nodes": [ { - "id": 1, - "type": "LoadImage", + "id": 96, + "type": "ImageBatch", "pos": [ - 0, - 0 + 196.66666666666706, + 2600.000000000009 ], "size": [ - 300, - 300 + 220, + 46 ], "flags": {}, - "order": 1, + "order": 120, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 117 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 118 + } + ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", + "slot_index": 0, "links": [ - 1, - 2, - 6 - ], - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": [], - "slot_index": 1 + 119 + ] } ], + "title": "Ref Batch 3", "properties": { - "Node name for S&R": "LoadImage" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ImageBatch" }, - "widgets_values": [ - "reference_image.png", - "image" - ] + "widgets_values": [] }, { - "id": 110, - "type": "SetNode", + "id": 97, + "type": "ImageBatch", "pos": [ - 320, - 20 + 196.66666666666706, + 2930.000000000009 ], "size": [ - 190, - 60 + 220, + 46 ], - "flags": { - "collapsed": true - }, - "order": 110, + "flags": {}, + "order": 126, "mode": 0, "inputs": [ { - "name": "IMAGE", + "name": "image1", "type": "IMAGE", - "link": 1 + "link": 119 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 120 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 121 + ] } ], + "title": "Ref Batch 4", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "start_image" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ImageBatch" }, - "widgets_values": [ - "start_image" - ], - "title": "Set_start_image" + "widgets_values": [] }, { - "id": 2, - "type": "LTXVPreprocess", + "id": 10, + "type": "CheckpointLoaderSimple", "pos": [ - 0, - 340 + 600, + 0 ], "size": [ - 300, - 200 + 331.6666666666665, + 98 ], "flags": {}, - "order": 2, + "order": 0, "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 2 - } - ], + "inputs": [], "outputs": [ { - "name": "output_image", - "type": "IMAGE", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, "links": [ - 3 - ], - "slot_index": 0 + 23 + ] + }, + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 1, + "links": [] + }, + { + "name": "VAE", + "type": "VAE", + "slot_index": 2, + "links": [ + 21 + ] } ], "properties": { - "Node name for S&R": "LTXVPreprocess" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "CheckpointLoaderSimple" }, "widgets_values": [ - 18 + "ltx-2.3-22b-dev.safetensors" ] }, { - "id": 111, - "type": "SetNode", + "id": 23, + "type": "ComfyMathExpression", "pos": [ - 320, - 400 + 594.9999999999999, + 1461.6666666666686 ], "size": [ - 190, - 60 + 210, + 128 ], - "flags": { - "collapsed": true - }, - "order": 111, + "flags": {}, + "order": 103, "mode": 0, "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "link": 3 + "name": "values.a", + "type": "FLOAT,INT,BOOLEAN", + "link": 13 + }, + { + "label": "b", + "name": "values.b", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": null } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [] + }, + { + "name": "INT", + "type": "INT", + "slot_index": 1, + "links": [ + 14 + ] + }, + { + "name": "BOOL", + "type": "BOOLEAN", "links": null } ], + "title": "Stage 1 Height", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "preprocessed_start_image" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ComfyMathExpression" }, "widgets_values": [ - "preprocessed_start_image" - ], - "title": "Set_preprocessed_start_image" + "max(32, int(a / 2))" + ] }, { - "id": 4, - "type": "PrimitiveFloat", + "id": 17, + "type": "ComfyMathExpression", "pos": [ - 0, - 800 + 594.9999999999999, + 1281.666666666667 ], "size": [ - 200, - 100 + 210, + 128 ], "flags": {}, - "order": 4, + "order": 77, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "values.a", + "type": "FLOAT,INT,BOOLEAN", + "link": 7 + }, + { + "label": "b", + "name": "values.b", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": null + } + ], "outputs": [ { "name": "FLOAT", "type": "FLOAT", + "slot_index": 0, + "links": [] + }, + { + "name": "INT", + "type": "INT", + "slot_index": 1, "links": [ - 4, - 15 - ], - "slot_index": 0 + 8, + 13 + ] + }, + { + "name": "BOOL", + "type": "BOOLEAN", + "links": null } ], + "title": "Align Final Height x64", "properties": { - "Node name for S&R": "PrimitiveFloat" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ComfyMathExpression" }, "widgets_values": [ - 24 - ], - "title": "Frame Rate" + "max(64, round(a / 64) * 64)" + ] }, { - "id": 112, - "type": "SetNode", + "id": 19, + "type": "ComfyMathExpression", "pos": [ - 220, - 910 + 1214.9999999999998, + 1281.666666666667 ], "size": [ - 190, - 60 + 210, + 128 ], - "flags": { - "collapsed": true - }, - "order": 112, + "flags": {}, + "order": 121, "mode": 0, "inputs": [ { - "name": "FLOAT", - "type": "FLOAT", - "link": 4 + "name": "values.a", + "type": "FLOAT,INT,BOOLEAN", + "link": 11 + }, + { + "label": "b", + "name": "values.b", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": null } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [] + }, + { + "name": "INT", + "type": "INT", + "slot_index": 1, + "links": [ + 12 + ] + }, + { + "name": "BOOL", + "type": "BOOLEAN", "links": null } ], + "title": "Stage 1 Width", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "fps" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ComfyMathExpression" }, "widgets_values": [ - "fps" - ], - "title": "Set_fps" + "max(32, int(a / 2))" + ] }, { - "id": 5, - "type": "PrimitiveBoolean", + "id": 13, + "type": "LoraLoaderModelOnly", "pos": [ - 0, - 930 + 591.6666666666669, + 469.9999999999997 ], "size": [ - 200, - 80 + 363.3333333333335, + 83.33333333333326 ], "flags": {}, - "order": 5, + "order": 71, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 23 + } + ], "outputs": [ { - "name": "BOOLEAN", - "type": "BOOLEAN", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, "links": [ - 5 - ], - "slot_index": 0 + 24 + ] } ], + "title": "Distilled LoRA (both stages)", "properties": { - "Node name for S&R": "PrimitiveBoolean" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LoraLoaderModelOnly" }, "widgets_values": [ - true - ], - "title": "I2V Enable" + "LTX/ltx-2.3-22b-distilled-lora-1.1_fro90_ceil72_condsafe.safetensors", + 0.6 + ] }, { - "id": 113, - "type": "SetNode", + "id": 18, + "type": "ComfyMathExpression", "pos": [ - 220, - 980 + 904.9999999999997, + 1281.666666666667 ], "size": [ - 190, - 60 + 227.70000305175782, + 168 ], - "flags": { - "collapsed": true - }, - "order": 113, + "flags": {}, + "order": 112, "mode": 0, "inputs": [ { - "name": "BOOLEAN", - "type": "BOOLEAN", - "link": 5 - } - ], - "outputs": [ + "name": "values.a", + "type": "FLOAT,INT,BOOLEAN", + "link": 8 + }, { - "name": "*", - "type": "*", - "links": null + "label": "b", + "name": "values.b", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": 9 + }, + { + "label": "c", + "name": "values.c", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": 10 + }, + { + "label": "d", + "name": "values.d", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": null } ], - "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "i2v_enable" - }, - "widgets_values": [ - "i2v_enable" - ], - "title": "Set_i2v_enable" - }, - { - "id": 7, - "type": "PrimitiveInt", - "pos": [ - 220, - 800 - ], - "size": [ - 210, - 100 - ], - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [], "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [] + }, { "name": "INT", "type": "INT", + "slot_index": 1, "links": [ - 7 - ], - "slot_index": 0 + 11 + ] + }, + { + "name": "BOOL", + "type": "BOOLEAN", + "links": null } ], + "title": "Final Width From Ref Aspect", "properties": { - "Node name for S&R": "PrimitiveInt" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ComfyMathExpression" }, "widgets_values": [ - 1088, - "fixed" - ], - "title": "Final Height Target" + "max(64, round((a * b / max(1, c)) / 64) * 64)" + ] }, { - "id": 16, - "type": "GetImageSize", + "id": 123, + "type": "SetNode", "pos": [ - 0, - 580 + 850.0000000000011, + 903.3333333333347 ], "size": [ - 300, - 100 + 210, + 60 ], - "flags": {}, - "order": 16, + "flags": { + "collapsed": true + }, + "order": 114, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 6 + "name": "MODEL", + "type": "MODEL", + "link": 25 } ], "outputs": [ { - "name": "width", - "type": "INT", - "links": [ - 9 - ], - "slot_index": 0 - }, - { - "name": "height", - "type": "INT", - "links": [ - 10 - ], - "slot_index": 1 - }, - { - "name": "batch_size", - "type": "INT", - "links": [], - "slot_index": 2 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_model", "properties": { - "Node name for S&R": "GetImageSize" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "model" }, - "widgets_values": [], - "title": "Reference Image Size" + "widgets_values": [ + "model" + ], + "color": "#323", + "bgcolor": "#535" }, { - "id": 17, - "type": "ComfyMathExpression", + "id": 122, + "type": "SetNode", "pos": [ - 470, - 1000 + 818.3333333333335, + 409.9999999999999 ], "size": [ - 290, - 150 + 210, + 60 ], - "flags": {}, - "order": 17, + "flags": { + "collapsed": true + }, + "order": 73, "mode": 0, "inputs": [ { - "name": "values.a", - "type": "FLOAT,INT", - "link": 7 + "name": "VAE", + "type": "VAE", + "link": 22 } ], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", - "links": [], - "slot_index": 0 - }, - { - "name": "INT", - "type": "INT", - "links": [ - 8, - 13 - ], - "slot_index": 1 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_audio_vae", "properties": { - "Node name for S&R": "ComfyMathExpression" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "audio_vae" }, "widgets_values": [ - "max(64, round(a / 64) * 64)" + "audio_vae" ], - "title": "Align Final Height x64" + "color": "#322", + "bgcolor": "#533" }, { - "id": 18, - "type": "ComfyMathExpression", + "id": 12, + "type": "LTXVAudioVAELoader", "pos": [ - 780, - 1000 + 604.9999999999999, + 328.33333333333303 ], "size": [ - 290, - 150 + 338.33333333333326, + 58 ], "flags": {}, - "order": 18, + "order": 1, "mode": 0, - "inputs": [ - { - "name": "values.a", - "type": "FLOAT,INT", - "link": 8 - }, - { - "name": "values.b", - "type": "FLOAT,INT", - "link": 9 - }, - { - "name": "values.c", - "type": "FLOAT,INT", - "link": 10 - } - ], + "inputs": [], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", - "links": [], - "slot_index": 0 - }, - { - "name": "INT", - "type": "INT", + "name": "Audio VAE", + "type": "VAE", + "slot_index": 0, "links": [ - 11 - ], - "slot_index": 1 + 22 + ] } ], "properties": { - "Node name for S&R": "ComfyMathExpression" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVAudioVAELoader" }, "widgets_values": [ - "max(64, round((a * b / max(1, c)) / 64) * 64)" - ], - "title": "Final Width From Ref Aspect" + "ltx-2.3-22b-dev.safetensors" + ] }, { - "id": 19, - "type": "ComfyMathExpression", + "id": 11, + "type": "LTXAVTextEncoderLoader", "pos": [ - 1090, - 1000 + 600, + 173.33333333333346 ], "size": [ - 290, - 150 + 358.3333333333335, + 106 ], "flags": {}, - "order": 19, + "order": 2, "mode": 0, - "inputs": [ - { - "name": "values.a", - "type": "FLOAT,INT", - "link": 11 - } - ], + "inputs": [], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", - "links": [], - "slot_index": 0 - }, - { - "name": "INT", - "type": "INT", + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, "links": [ - 12 - ], - "slot_index": 1 + 27, + 28, + 103 + ] } ], "properties": { - "Node name for S&R": "ComfyMathExpression" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXAVTextEncoderLoader" }, "widgets_values": [ - "max(32, int(a / 2))" - ], - "title": "Stage 1 Width" + "gemma-3-12b-it-heretic-v2.safetensors", + "ltx-2.3-22b-dev.safetensors", + "default" + ] }, { - "id": 114, + "id": 121, "type": "SetNode", "pos": [ - 1100, - 1180 + 775.0000000000003, + 125.00000000000006 ], "size": [ - 190, + 210, 60 ], "flags": { "collapsed": true }, - "order": 114, + "order": 72, "mode": 0, "inputs": [ { - "name": "INT", - "type": "INT", - "link": 12 + "name": "VAE", + "type": "VAE", + "link": 21 } ], "outputs": [ @@ -571,512 +619,349 @@ "links": null } ], + "title": "Set_video_vae", "properties": { "Node name for S&R": "SetNode", "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "stage_1_width" + "previousName": "video_vae" }, "widgets_values": [ - "stage_1_width" + "video_vae" ], - "title": "Set_stage_1_width" + "color": "#322", + "bgcolor": "#533" }, { - "id": 23, - "type": "ComfyMathExpression", + "id": 81, + "type": "MultiPromptProvider", "pos": [ - 470, - 1180 + 1285.0000000000027, + 905 ], "size": [ - 290, - 150 + 371.8333394368491, + 112 ], "flags": {}, - "order": 23, + "order": 82, "mode": 0, "inputs": [ { - "name": "values.a", - "type": "FLOAT,INT", - "link": 13 + "name": "clip", + "type": "CLIP", + "link": 103 + }, + { + "name": "prompts", + "type": "STRING", + "widget": { + "name": "prompts" + }, + "link": 130 + }, + { + "name": "frame_rate", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": 134 } ], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", - "links": [], - "slot_index": 0 - }, - { - "name": "INT", - "type": "INT", + "name": "conditionings", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 14 - ], - "slot_index": 1 + 104 + ] } ], + "title": "Per-Tile Prompts From Global + Snippets", "properties": { - "Node name for S&R": "ComfyMathExpression" + "cnr_id": "ComfyUI-LTXVideo", + "ver": "adfe33778b43ddc103bfb5feb2d4915b4a29df58", + "Node name for S&R": "MultiPromptProvider" }, "widgets_values": [ - "max(32, int(a / 2))" - ], - "title": "Stage 1 Height" + "", + 24 + ] }, { - "id": 115, - "type": "SetNode", + "id": 181, + "type": "GetNode", "pos": [ - 780, - 1230 + 1161.6666666666654, + 1076.6666666666679 ], "size": [ - 190, - 60 + 210, + 58 ], "flags": { "collapsed": true }, - "order": 115, - "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 14 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "stage_1_height" - }, - "widgets_values": [ - "stage_1_height" - ], - "title": "Set_stage_1_height" - }, - { - "id": 24, - "type": "LTXVLoopingReferenceSchedule", - "pos": [ - 0, - 1060 - ], - "size": [ - 430, - 310 - ], - "flags": {}, - "order": 24, + "order": 3, "mode": 0, - "inputs": [ - { - "name": "reference_images", - "type": "IMAGE", - "link": 122 - }, - { - "name": "frame_rate", - "type": "FLOAT", - "link": 15, - "widget": { - "name": "frame_rate" - } - }, - { - "name": "total_duration", - "type": "FLOAT", - "link": null, - "widget": { - "name": "total_duration" - } - }, - { - "name": "tile_duration", - "type": "FLOAT", - "link": null, - "widget": { - "name": "tile_duration" - } - }, - { - "name": "overlap_duration", - "type": "FLOAT", - "link": null, - "widget": { - "name": "overlap_duration" - } - }, - { - "name": "reference_offset", - "type": "FLOAT", - "link": null, - "widget": { - "name": "reference_offset" - } - } - ], + "inputs": [], "outputs": [ { - "name": "reference_images", - "type": "IMAGE", - "links": [ - 16 - ], - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": [ - 17 - ], - "slot_index": 1 - }, - { - "name": "temporal_tile_size", - "type": "INT", - "links": [ - 18 - ], - "slot_index": 2 - }, - { - "name": "temporal_overlap", - "type": "INT", - "links": [ - 19 - ], - "slot_index": 3 - }, - { - "name": "reference_indices", + "name": "STRING", "type": "STRING", + "slot_index": 0, "links": [ - 20 - ], - "slot_index": 4 - }, - { - "name": "tile_count", - "type": "INT", - "links": [], - "slot_index": 5 + 130 + ] } ], + "title": "Get_joined_tile_prompts", "properties": { - "Node name for S&R": "LTXVLoopingReferenceSchedule" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 24, - 30.0, - 10.0, - 3.3333333333333335, - 0.6666666666666666 - ], - "title": "Looping Timing + Reference Schedule" + "joined_tile_prompts" + ] }, { - "id": 116, - "type": "SetNode", + "id": 168, + "type": "GetNode", "pos": [ - 450, - 1380 + 4286.167768650234, + 348.2401656314707 ], "size": [ - 190, - 60 + 210, + 58 ], "flags": { "collapsed": true }, - "order": 116, + "order": 4, "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 16 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 96 + ] } ], + "title": "Get_audio_vae", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "scheduled_reference_images" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "scheduled_reference_images" - ], - "title": "Set_scheduled_reference_images" + "audio_vae" + ] }, { - "id": 117, - "type": "SetNode", + "id": 169, + "type": "GetNode", "pos": [ - 450, - 1450 + 4324.501101983566, + 511.5734989648054 ], "size": [ - 190, - 60 + 210, + 58 ], "flags": { "collapsed": true }, - "order": 117, + "order": 5, "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 17 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 167 + ] } ], + "title": "Get_fps", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "frame_count" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "frame_count" - ], - "title": "Set_frame_count" + "fps" + ] }, { - "id": 118, - "type": "SetNode", + "id": 167, + "type": "GetNode", "pos": [ - 650, - 1380 + 4281.167768650234, + 36.57349896480166 ], "size": [ - 190, - 60 + 210, + 58 ], "flags": { "collapsed": true }, - "order": 118, + "order": 6, "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 18 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 165 + ] } ], + "title": "Get_video_vae", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "temporal_tile_size" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "temporal_tile_size" - ], - "title": "Set_temporal_tile_size" + "video_vae" + ] }, { - "id": 119, - "type": "SetNode", + "id": 41, + "type": "KSamplerSelect", "pos": [ - 650, - 1450 + 2608.6398851265735, + 146.69371535430454 ], "size": [ - 190, - 60 + 240, + 58 ], - "flags": { - "collapsed": true - }, - "order": 119, + "flags": {}, + "order": 7, "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 19 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "SAMPLER", + "type": "SAMPLER", + "slot_index": 0, + "links": [ + 56 + ] } ], + "title": "Stage 1 Sampler", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "temporal_overlap" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "KSamplerSelect" }, "widgets_values": [ - "temporal_overlap" - ], - "title": "Set_temporal_overlap" + "euler_ancestral_cfg_pp" + ] }, { - "id": 120, - "type": "SetNode", + "id": 40, + "type": "RandomNoise", "pos": [ - 850, - 1380 + 2606.973218459907, + 15.027048687637755 ], "size": [ - 190, - 60 + 210, + 82 ], - "flags": { - "collapsed": true - }, - "order": 120, + "flags": {}, + "order": 8, "mode": 0, - "inputs": [ - { - "name": "STRING", - "type": "STRING", - "link": 20 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 55 + ] } ], + "title": "Stage 1 Noise", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "reference_indices" - }, - "widgets_values": [ - "reference_indices" - ], - "title": "Set_reference_indices" - }, - { - "id": 6, - "type": "Note", - "pos": [ - 0, - 1410 - ], - "size": [ - 440, - 340 - ], - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "Node name for S&R": "Note" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "RandomNoise" }, "widgets_values": [ - "## Late Reference Tile Layout\n\nThe Looping Timing + Reference Schedule node calculates clip frames, sampler tile size, overlap, and late reference indices.\n\nDefault frame count: 713 (`8n+1`).\nDefault tile size: 240. Overlap: 80. Stride: 160.\nDefault tile starts: 0, 160, 320, 480.\n\nThe current image/snippet branches match these default indices:\n `0, 224, 384, 544, 704`\nIf duration adds tiles after the supplied refs, the schedule repeats the last image. It truncates extra supplied refs for shorter clips.\nThe looping sampler already repeats the last tile prompt after the snippet list ends.\n\nEdit duration, tile duration, overlap, and late-reference offset inside the schedule node. Edit the Global Positive Prompt once and each Tile Prompt Snippet beside its late reference branch. The graph concatenates `global + snippet` for each tile and joins those prompts with `|` for the multi-prompt node." + 42, + "fixed" ] }, { - "id": 10, - "type": "CheckpointLoaderSimple", + "id": 179, + "type": "GetNode", "pos": [ - 600, - 0 + -168.33333333333348, + 993.3333333333342 ], "size": [ - 350, - 150 + 225.00000610351563, + 58 ], - "flags": {}, - "order": 10, + "flags": { + "collapsed": true + }, + "order": 9, "mode": 0, "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 23 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 21 - ], - "slot_index": 2 + 122 + ] } ], + "title": "Get_reference_image_batch", "properties": { - "Node name for S&R": "CheckpointLoaderSimple" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "ltx-2.3-22b-dev.safetensors" + "reference_image_batch" ] }, { - "id": 121, + "id": 117, "type": "SetNode", "pos": [ - 960, - 70 + 341.66666666666623, + 738.3333333333346 ], "size": [ - 190, + 210, 60 ], "flags": { "collapsed": true }, - "order": 121, + "order": 99, "mode": 0, "inputs": [ { - "name": "VAE", - "type": "VAE", - "link": 21 + "name": "INT", + "type": "INT", + "link": 17 } ], "outputs": [ @@ -1086,105 +971,77 @@ "links": null } ], + "title": "Set_frame_count", "properties": { "Node name for S&R": "SetNode", "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "video_vae" + "previousName": "frame_count" }, "widgets_values": [ - "video_vae" - ], - "title": "Set_video_vae" + "frame_count" + ] }, { - "id": 11, - "type": "LTXAVTextEncoderLoader", + "id": 118, + "type": "SetNode", "pos": [ - 600, - 180 + 314.9999999999979, + 785.0000000000006 ], "size": [ - 380, - 130 + 210, + 60 ], - "flags": {}, - "order": 11, + "flags": { + "collapsed": true + }, + "order": 100, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "CLIP", - "type": "CLIP", - "links": [ - 27, - 28, - 103 - ], - "slot_index": 0 + "name": "INT", + "type": "INT", + "link": 18 } - ], - "properties": { - "Node name for S&R": "LTXAVTextEncoderLoader" - }, - "widgets_values": [ - "comfy_gemma_3_12B_it.safetensors", - "ltx-2.3-22b-dev.safetensors", - "default" - ] - }, - { - "id": 12, - "type": "LTXVAudioVAELoader", - "pos": [ - 600, - 400 - ], - "size": [ - 350, - 100 - ], - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [], + ], "outputs": [ { - "name": "Audio VAE", - "type": "VAE", - "links": [ - 22 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_temporal_tile_size", "properties": { - "Node name for S&R": "LTXVAudioVAELoader" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "temporal_tile_size" }, "widgets_values": [ - "ltx-2.3-22b-dev.safetensors" + "temporal_tile_size" ] }, { - "id": 122, + "id": 119, "type": "SetNode", "pos": [ - 960, - 420 + 318.33333333333195, + 836.6666666666666 ], "size": [ - 190, + 210, 60 ], "flags": { "collapsed": true }, - "order": 122, + "order": 101, "mode": 0, "inputs": [ { - "name": "VAE", - "type": "VAE", - "link": 22 + "name": "INT", + "type": "INT", + "link": 19 } ], "outputs": [ @@ -1194,129 +1051,113 @@ "links": null } ], + "title": "Set_temporal_overlap", "properties": { "Node name for S&R": "SetNode", "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "audio_vae" + "previousName": "temporal_overlap" }, "widgets_values": [ - "audio_vae" - ], - "title": "Set_audio_vae" + "temporal_overlap" + ] }, { - "id": 13, - "type": "LoraLoaderModelOnly", + "id": 120, + "type": "SetNode", "pos": [ - 600, - 530 + 316.66666666666566, + 881.66666666667 ], "size": [ - 380, - 100 + 210, + 60 ], - "flags": {}, - "order": 13, + "flags": { + "collapsed": true + }, + "order": 102, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 23 + "name": "STRING", + "type": "STRING", + "link": 20 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 24 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_reference_indices", "properties": { - "Node name for S&R": "LoraLoaderModelOnly" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "reference_indices" }, "widgets_values": [ - "ltx-2.3-22b-distilled-lora-384.safetensors", - 0.5 - ], - "title": "Distilled LoRA (both stages)" + "reference_indices" + ] }, { - "id": 25, - "type": "Power Lora Loader (rgthree)", + "id": 4, + "type": "PrimitiveFloat", "pos": [ - 600, - 660 + -211.6666666666666, + 574.9999999999995 ], "size": [ - 400, - 190 + 210, + 58 ], "flags": {}, - "order": 25, + "order": 10, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 24 - }, - { - "name": "clip", - "type": "CLIP", - "link": null - } - ], + "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, "links": [ - 25 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [], - "slot_index": 1 + 4, + 15 + ] } ], + "title": "Frame Rate", "properties": { - "Node name for S&R": "Power Lora Loader (rgthree)", - "cnr_id": "rgthree-comfy", - "aux_id": "rgthree/rgthree-comfy", - "Show Strengths": "Single Strength", - "Match": "" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "PrimitiveFloat" }, - "widgets_values": [], - "title": "Extra LoRAs (rgthree)" + "widgets_values": [ + 24 + ] }, { - "id": 123, + "id": 112, "type": "SetNode", "pos": [ - 1010, - 860 + 31.666666666666682, + 605.0000000000001 ], "size": [ - 190, + 210, 60 ], "flags": { "collapsed": true }, - "order": 123, + "order": 75, "mode": 0, "inputs": [ { - "name": "MODEL", - "type": "MODEL", - "link": 25 + "name": "FLOAT", + "type": "FLOAT", + "link": 4 } ], "outputs": [ @@ -1326,69 +1167,115 @@ "links": null } ], + "title": "Set_fps", "properties": { "Node name for S&R": "SetNode", "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "model" + "previousName": "fps" }, "widgets_values": [ - "model" - ], - "title": "Set_model" + "fps" + ] }, { - "id": 14, - "type": "LatentUpscaleModelLoader", + "id": 7, + "type": "PrimitiveInt", "pos": [ - 600, - 880 + -206.6666666666665, + 438.33333333333314 ], "size": [ - 380, - 100 + 210, + 82 ], "flags": {}, - "order": 14, + "order": 11, "mode": 0, "inputs": [], "outputs": [ { - "name": "LATENT_UPSCALE_MODEL", - "type": "LATENT_UPSCALE_MODEL", + "name": "INT", + "type": "INT", + "slot_index": 0, "links": [ - 26 - ], - "slot_index": 0 + 7 + ] } ], + "title": "Final Height Target", "properties": { - "Node name for S&R": "LatentUpscaleModelLoader" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "PrimitiveInt" }, "widgets_values": [ - "ltx-2.3-spatial-upscaler-x2-1.1.safetensors" + 1088, + "fixed" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 2, + "type": "LTXVPreprocess", + "pos": [ + 181.6666666666667, + 91.66666666666683 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 93, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2 + } + ], + "outputs": [ + { + "name": "output_image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVPreprocess" + }, + "widgets_values": [ + 18 ] }, { - "id": 124, + "id": 111, "type": "SetNode", "pos": [ - 1010, - 1250 + 183.33333333333346, + 208.3333333333335 ], "size": [ - 190, + 243.38333740234376, 60 ], "flags": { "collapsed": true }, - "order": 124, + "order": 111, "mode": 0, "inputs": [ { - "name": "LATENT_UPSCALE_MODEL", - "type": "LATENT_UPSCALE_MODEL", - "link": 26 + "name": "IMAGE", + "type": "IMAGE", + "link": 3 } ], "outputs": [ @@ -1398,2608 +1285,2659 @@ "links": null } ], + "title": "Set_preprocessed_start_image", "properties": { "Node name for S&R": "SetNode", "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "latent_upscale_model" + "previousName": "preprocessed_start_image" }, "widgets_values": [ - "latent_upscale_model" - ], - "title": "Set_latent_upscale_model" + "preprocessed_start_image" + ] }, { - "id": 20, - "type": "CLIPTextEncode", + "id": 16, + "type": "GetImageSize", "pos": [ - 1150, - 0 + 168.33333333333331, + 268.3333333333331 ], "size": [ - 400, - 180 + 184.01666870117188, + 66 ], "flags": {}, - "order": 20, + "order": 94, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 27 + "name": "image", + "type": "IMAGE", + "link": 6 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 9 + ] }, { - "name": "text", - "type": "STRING", - "link": 102, - "widget": { - "name": "text" - } + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 10 + ] + }, + { + "name": "batch_size", + "type": "INT", + "slot_index": 2, + "links": [] } ], + "title": "Reference Image Size", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "GetImageSize" + }, + "widgets_values": [] + }, + { + "id": 128, + "type": "GetNode", + "pos": [ + 2245.6763867452714, + 7.231602104621408 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "INT", + "type": "INT", + "slot_index": 0, "links": [ - 29 - ], - "slot_index": 0 + 34 + ] } ], + "title": "Get_stage_1_width", "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "" - ], - "title": "Global Prompt Fallback Encode" + "stage_1_width" + ] }, { - "id": 21, - "type": "CLIPTextEncode", + "id": 129, + "type": "GetNode", "pos": [ - 1150, - 220 + 2240.6763867452714, + 48.89826877128801 ], "size": [ - 400, - 120 + 210, + 58 ], - "flags": {}, - "order": 21, + "flags": { + "collapsed": true + }, + "order": 13, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 28 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "INT", + "type": "INT", + "slot_index": 0, "links": [ - 30 - ], - "slot_index": 0 + 35 + ] } ], + "title": "Get_stage_1_height", "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "pc game, console game, video game, cartoon, childish, ugly, blurry" - ], - "title": "Negative Prompt" + "stage_1_height" + ] }, { - "id": 22, - "type": "LTXVConditioning", + "id": 130, + "type": "GetNode", "pos": [ - 1150, - 400 + 2249.0097200786045, + 82.23160210462112 ], "size": [ - 300, - 120 + 210, + 58 ], - "flags": {}, - "order": 22, + "flags": { + "collapsed": true + }, + "order": 14, "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 29 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 30 - }, - { - "name": "frame_rate", - "type": "FLOAT", - "link": 31 - } - ], + "inputs": [], "outputs": [ { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 32 - ], - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", + "name": "INT", + "type": "INT", + "slot_index": 0, "links": [ - 33 - ], - "slot_index": 1 + 36, + 38 + ] } ], + "title": "Get_frame_count", "properties": { - "Node name for S&R": "LTXVConditioning" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 24 + "frame_count" ] }, { - "id": 125, + "id": 131, "type": "GetNode", "pos": [ - 1150, - 342 + 2207.7056602163784, + 783.449529174675 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 125, + "order": 15, "mode": 0, "inputs": [], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", + "name": "VAE", + "type": "VAE", + "slot_index": 0, "links": [ - 31 - ], - "slot_index": 0 + 37 + ] } ], + "title": "Get_audio_vae", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "fps" - ], - "title": "Get_fps" + "audio_vae" + ] }, { - "id": 126, - "type": "SetNode", + "id": 34, + "type": "CM_FloatToInt", "pos": [ - 1470, - 400 + 2212.705660216379, + 826.7828625080078 ], "size": [ - 190, - 60 + 210, + 80 ], "flags": { "collapsed": true }, - "order": 126, + "order": 79, "mode": 0, "inputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", - "link": 32 + "name": "a", + "type": "FLOAT", + "widget": { + "name": "a" + }, + "link": 39 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 40 + ] } ], + "title": "FPS→Int", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "positive_conditioning" + "cnr_id": "ComfyMath", + "ver": "c01177221c31b8e5fbc062778fc8254aeb541638", + "Node name for S&R": "CM_FloatToInt" }, "widgets_values": [ - "positive_conditioning" - ], - "title": "Set_positive_conditioning" + 0 + ] }, { - "id": 127, - "type": "SetNode", + "id": 132, + "type": "GetNode", "pos": [ - 1470, - 470 + 2226.038993549713, + 845.1161958413405 ], "size": [ - 190, - 60 + 210, + 58 ], "flags": { "collapsed": true }, - "order": 127, + "order": 16, "mode": 0, - "inputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "link": 33 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 39 + ] } ], + "title": "Get_fps", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "negative_conditioning" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "negative_conditioning" - ], - "title": "Set_negative_conditioning" + "fps" + ] }, { - "id": 30, - "type": "EmptyLTXVLatentVideo", + "id": 133, + "type": "GetNode", "pos": [ - 1950, - 0 + 2291.7931197489625, + 217.7502137946769 ], "size": [ - 250, - 150 + 210, + 58 ], - "flags": {}, - "order": 30, + "flags": { + "collapsed": true + }, + "order": 17, "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 34, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 35, - "widget": { - "name": "height" - } - }, + "inputs": [], + "outputs": [ { - "name": "length", - "type": "INT", - "link": 36, - "widget": { - "name": "length" - } + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 41 + ] } ], + "title": "Get_video_vae", + "properties": { + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" + }, + "widgets_values": [ + "video_vae" + ] + }, + { + "id": 134, + "type": "GetNode", + "pos": [ + 2235.1264530822964, + 272.75021379467586 + ], + "size": [ + 244.8499969482422, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 43 - ], - "slot_index": 0 + 42 + ] } ], + "title": "Get_preprocessed_start_image", "properties": { - "Node name for S&R": "EmptyLTXVLatentVideo" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 960, - 544, - 713, - 1 - ], - "title": "Stage 1 Empty Latent" + "preprocessed_start_image" + ] }, { - "id": 128, + "id": 147, "type": "GetNode", "pos": [ - 1740, - 0 + 2681.973218459908, + 801.6937153543026 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 128, + "order": 19, "mode": 0, "inputs": [], "outputs": [ { "name": "INT", "type": "INT", + "slot_index": 0, "links": [ - 34 - ], - "slot_index": 0 + 64 + ] } ], + "title": "Get_temporal_overlap", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "stage_1_width" - ], - "title": "Get_stage_1_width" + "temporal_overlap" + ] }, { - "id": 129, + "id": 146, "type": "GetNode", "pos": [ - 1740, - 70 + 2676.973218459904, + 758.360382020969 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 129, + "order": 20, "mode": 0, "inputs": [], "outputs": [ { "name": "INT", "type": "INT", + "slot_index": 0, "links": [ - 35 - ], - "slot_index": 0 + 63 + ] } ], + "title": "Get_temporal_tile_size", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, - "widgets_values": [ - "stage_1_height" - ], - "title": "Get_stage_1_height" + "widgets_values": [ + "temporal_tile_size" + ] }, { - "id": 130, + "id": 145, "type": "GetNode", "pos": [ - 1740, - 140 + 2683.639885126573, + 720.0270486876352 ], "size": [ - 190, + 231.13333740234376, 58 ], "flags": { "collapsed": true }, - "order": 130, + "order": 21, "mode": 0, "inputs": [], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 36, - 38 - ], - "slot_index": 0 + 61 + ] } ], + "title": "Get_tile_prompt_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "frame_count" - ], - "title": "Get_frame_count" + "tile_prompt_conditioning" + ] }, { - "id": 31, - "type": "LTXVEmptyLatentAudio", + "id": 144, + "type": "GetNode", "pos": [ - 1950, - 180 + 2648.639885126573, + 673.3603820209689 ], "size": [ - 250, - 130 + 263.4, + 58 ], - "flags": {}, - "order": 31, + "flags": { + "collapsed": true + }, + "order": 22, "mode": 0, - "inputs": [ - { - "name": "audio_vae", - "type": "VAE", - "link": 37 - }, - { - "name": "frames_number", - "type": "INT", - "link": 38 - }, - { - "name": "frame_rate", - "type": "INT", - "link": 40 - } - ], + "inputs": [], "outputs": [ { - "name": "Latent", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 46 - ], - "slot_index": 0 + 60 + ] } ], + "title": "Get_scheduled_reference_images", "properties": { - "Node name for S&R": "LTXVEmptyLatentAudio" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 713, - 25, - 1 + "scheduled_reference_images" ] }, { - "id": 131, + "id": 143, "type": "GetNode", "pos": [ - 1740, - 220 + 2695.30655179324, + 630.027048687636 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 131, + "order": 23, "mode": 0, "inputs": [], "outputs": [ { "name": "VAE", "type": "VAE", + "slot_index": 0, "links": [ - 37 - ], - "slot_index": 0 + 54 + ] } ], + "title": "Get_video_vae", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "audio_vae" - ], - "title": "Get_audio_vae" + "video_vae" + ] }, { - "id": 34, - "type": "CM_FloatToInt", + "id": 142, + "type": "GetNode", "pos": [ - 1770, - 320 + 2701.9732184599056, + 590.0270486876368 ], "size": [ - 150, - 80 + 210, + 58 ], - "flags": {}, - "order": 34, + "flags": { + "collapsed": true + }, + "order": 24, "mode": 0, - "inputs": [ - { - "name": "a", - "type": "FLOAT", - "link": 39 - } - ], + "inputs": [], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, "links": [ - 40 - ], - "slot_index": 0 + 53, + 171 + ] } ], + "title": "Get_model", "properties": { - "Node name for S&R": "CM_FloatToInt" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 0 - ], - "title": "FPS\u2192Int" + "model" + ] }, { - "id": 132, + "id": 148, "type": "GetNode", "pos": [ - 1560, - 330 + 2663.639885126571, + 1046.6937153543026 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 132, + "order": 25, "mode": 0, "inputs": [], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 39 - ], - "slot_index": 0 + 65 + ] } ], + "title": "Get_reference_indices", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "fps" - ], - "title": "Get_fps" + "reference_indices" + ] }, { - "id": 32, - "type": "LTXVImgToVideoConditionOnly", + "id": 139, + "type": "GetNode", "pos": [ - 1950, - 400 + 2283.3850955571106, + 416.5184354084204 ], "size": [ - 300, - 130 + 210, + 58 ], - "flags": {}, - "order": 32, + "flags": { + "collapsed": true + }, + "order": 26, "mode": 0, - "inputs": [ - { - "name": "vae", - "type": "VAE", - "link": 41 - }, - { - "name": "image", - "type": "IMAGE", - "link": 42 - }, - { - "name": "latent", - "type": "LATENT", - "link": 43 - }, - { - "name": "bypass", - "type": "BOOLEAN", - "link": 44 - } - ], + "inputs": [], "outputs": [ { - "name": "latent", - "type": "LATENT", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, "links": [ - 45 - ], - "slot_index": 0 + 50 + ] } ], + "title": "Get_model", "properties": { - "Node name for S&R": "LTXVImgToVideoConditionOnly" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 0.7, - false - ], - "title": "Stage 1 I2V Cond", - "color": "#335533", - "bgcolor": "#223322" + "model" + ] }, { - "id": 133, + "id": 140, "type": "GetNode", "pos": [ - 1740, - 420 + 2225.051762223774, + 459.85176874175295 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 133, + "order": 27, "mode": 0, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 41 - ], - "slot_index": 0 + 51 + ] } ], + "title": "Get_positive_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "video_vae" - ], - "title": "Get_video_vae" + "positive_conditioning" + ] }, { - "id": 134, + "id": 141, "type": "GetNode", "pos": [ - 1740, - 490 + 2225.0517622237767, + 483.18510207508666 ], "size": [ - 190, + 214.43334045410157, 58 ], "flags": { "collapsed": true }, - "order": 134, + "order": 28, "mode": 0, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 42 - ], - "slot_index": 0 + 52 + ] } ], + "title": "Get_negative_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "preprocessed_start_image" - ], - "title": "Get_preprocessed_start_image" + "negative_conditioning" + ] }, { - "id": 135, - "type": "GetNode", + "id": 20, + "type": "CLIPTextEncode", "pos": [ - 1740, - 560 + 1288.183062846457, + 524.8887998397122 ], "size": [ - 190, - 58 + 246.3166717529297, + 88 ], - "flags": { - "collapsed": true - }, - "order": 135, + "flags": {}, + "order": 96, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 27 + }, + { + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": 131 + } + ], "outputs": [ { - "name": "BOOLEAN", - "type": "BOOLEAN", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 44 - ], - "slot_index": 0 + 29 + ] } ], + "title": "Global Prompt Fallback Encode", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - "i2v_enable" - ], - "title": "Get_i2v_enable" + "" + ] }, { - "id": 33, - "type": "LTXVConcatAVLatent", + "id": 170, + "type": "SetNode", "pos": [ - 1950, - 800 + 1397.8164028584797, + 267.1024510786082 ], "size": [ - 250, - 100 + 210, + 60 ], - "flags": {}, - "order": 33, + "flags": { + "collapsed": true + }, + "order": 95, "mode": 0, "inputs": [ { - "name": "video_latent", - "type": "LATENT", - "link": 45 - }, - { - "name": "audio_latent", - "type": "LATENT", - "link": 46 + "name": "STRING", + "type": "STRING", + "link": 101 } ], "outputs": [ { - "name": "latent", - "type": "LATENT", - "links": [ - 59 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_global_prompt", "properties": { - "Node name for S&R": "LTXVConcatAVLatent" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "global_prompt" }, - "widgets_values": [], - "title": "Stage 1 AV Concat", - "color": "#335533", - "bgcolor": "#223322" + "widgets_values": [ + "global_prompt" + ] }, { - "id": 35, - "type": "VAEEncode", + "id": 53, + "type": "LTXVConcatAVLatent", "pos": [ - 1950, - 1200 + 3548.5827823415425, + 751.7868830561679 ], "size": [ - 250, - 100 + 164.33333435058594, + 46 ], "flags": {}, - "order": 35, - "mode": 0, + "order": 134, + "mode": 4, "inputs": [ { - "name": "pixels", - "type": "IMAGE", - "link": 47 + "name": "video_latent", + "type": "LATENT", + "link": 75 }, { - "name": "vae", - "type": "VAE", - "link": 48 + "name": "audio_latent", + "type": "LATENT", + "link": 132 } ], "outputs": [ { - "name": "LATENT", + "name": "latent", "type": "LATENT", + "slot_index": 0, "links": [ - 49 - ], - "slot_index": 0 + 86 + ] } ], + "title": "Stage 2 AV Concat", "properties": { - "Node name for S&R": "VAEEncode" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVConcatAVLatent" }, "widgets_values": [], - "title": "Encode Reference Latent" + "color": "#333355", + "bgcolor": "#222233" }, { - "id": 136, + "id": 157, "type": "GetNode", "pos": [ - 1740, - 1200 + 3610.9767581646815, + 250.2073732718896 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 136, - "mode": 0, + "order": 29, + "mode": 4, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, "links": [ - 47 - ], - "slot_index": 0 + 77 + ] } ], + "title": "Get_model", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "preprocessed_start_image" - ], - "title": "Get_preprocessed_start_image" + "model" + ] }, { - "id": 137, + "id": 158, "type": "GetNode", "pos": [ - 1740, - 1270 + 3584.277031990908, + 278.49863086889826 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 137, - "mode": 0, + "order": 30, + "mode": 4, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 48 - ], - "slot_index": 0 + 78 + ] } ], + "title": "Get_positive_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "video_vae" - ], - "title": "Get_video_vae" + "positive_conditioning" + ] }, { - "id": 138, - "type": "SetNode", + "id": 159, + "type": "GetNode", "pos": [ - 2220, - 1220 + 3580.9436986575774, + 306.7808722366933 ], "size": [ - 190, - 60 + 214.43334045410157, + 58 ], "flags": { "collapsed": true }, - "order": 138, - "mode": 0, - "inputs": [ - { - "name": "LATENT", - "type": "LATENT", - "link": 49 - } - ], + "order": 31, + "mode": 4, + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 79 + ] } ], + "title": "Get_negative_conditioning", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "stage_1_anchor_latent" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "stage_1_anchor_latent" - ], - "title": "Set_stage_1_anchor_latent" + "negative_conditioning" + ] }, { - "id": 40, - "type": "RandomNoise", + "id": 63, + "type": "CFGGuider", "pos": [ - 2800, - -80 + 3553.4896146396536, + 228.3513657917586 ], "size": [ - 200, - 100 + 265.0991785213382, + 98 ], "flags": {}, - "order": 40, - "mode": 0, - "inputs": [], - "outputs": [ + "order": 81, + "mode": 4, + "inputs": [ { - "name": "NOISE", - "type": "NOISE", - "links": [ - 55 - ], - "slot_index": 0 + "name": "model", + "type": "MODEL", + "link": 77 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 78 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 79 } ], - "properties": { - "Node name for S&R": "RandomNoise" - }, - "widgets_values": [ - 42, - "fixed" - ], - "title": "Stage 1 Noise" - }, - { - "id": 41, - "type": "KSamplerSelect", - "pos": [ - 2800, - 40 - ], - "size": [ - 250, - 80 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "SAMPLER", - "type": "SAMPLER", + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, "links": [ - 56 - ], - "slot_index": 0 + 85 + ] } ], + "title": "Stage 2 Guider", "properties": { - "Node name for S&R": "KSamplerSelect" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "CFGGuider" }, "widgets_values": [ - "euler_ancestral_cfg_pp" + 1 ], - "title": "Stage 1 Sampler" + "color": "#333355", + "bgcolor": "#222233" }, { - "id": 42, - "type": "ManualSigmas", + "id": 166, + "type": "GetNode", "pos": [ - 2800, - 140 + 3845.3816870366572, + 1033.3874307086066 ], "size": [ - 350, - 80 + 210, + 58 ], - "flags": {}, - "order": 42, - "mode": 0, + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 4, "inputs": [], "outputs": [ { - "name": "SIGMAS", - "type": "SIGMAS", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 57 - ], - "slot_index": 0 + 91 + ] } ], + "title": "Get_reference_indices", "properties": { - "Node name for S&R": "ManualSigmas" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0" - ], - "title": "Stage 1 Sigmas" + "reference_indices" + ] }, { - "id": 43, - "type": "CFGGuider", + "id": 165, + "type": "GetNode", "pos": [ - 2800, - 240 + 3827.0092833767353, + 810.009016229212 ], "size": [ - 250, - 130 - ], - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 50 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 51 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 52 - } + 210, + 58 ], + "flags": { + "collapsed": true + }, + "order": 33, + "mode": 4, + "inputs": [], "outputs": [ { - "name": "GUIDER", - "type": "GUIDER", + "name": "INT", + "type": "INT", + "slot_index": 0, "links": [ - 58 - ], - "slot_index": 0 + 90 + ] } ], + "title": "Get_temporal_overlap", "properties": { - "Node name for S&R": "CFGGuider" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 1 - ], - "title": "Stage 1 Guider", - "color": "#335533", - "bgcolor": "#223322" + "temporal_overlap" + ] }, { - "id": 139, + "id": 164, "type": "GetNode", "pos": [ - 2590, - 220 + 3825.3396113003328, + 761.7057369932536 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 139, - "mode": 0, + "order": 34, + "mode": 4, "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "INT", + "type": "INT", + "slot_index": 0, "links": [ - 50 - ], - "slot_index": 0 + 89 + ] } ], + "title": "Get_temporal_tile_size", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "model" - ], - "title": "Get_model" + "temporal_tile_size" + ] }, { - "id": 140, + "id": 163, "type": "GetNode", "pos": [ - 2590, - 285 + 3822.0002671475245, + 713.402457757295 ], "size": [ - 190, + 231.13333740234376, 58 ], "flags": { "collapsed": true }, - "order": 140, - "mode": 0, + "order": 35, + "mode": 4, "inputs": [], "outputs": [ { "name": "CONDITIONING", "type": "CONDITIONING", + "slot_index": 0, "links": [ - 51 - ], - "slot_index": 0 + 88 + ] } ], + "title": "Get_tile_prompt_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "positive_conditioning" - ], - "title": "Get_positive_conditioning" + "tile_prompt_conditioning" + ] }, { - "id": 141, + "id": 162, "type": "GetNode", "pos": [ - 2590, - 350 + 3833.687971682352, + 666.7688505977412 ], "size": [ - 190, + 263.4, 58 ], "flags": { "collapsed": true }, - "order": 141, - "mode": 0, + "order": 36, + "mode": 4, "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 52 - ], - "slot_index": 0 + 87 + ] } ], + "title": "Get_scheduled_reference_images", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "negative_conditioning" - ], - "title": "Get_negative_conditioning" + "scheduled_reference_images" + ] }, { - "id": 44, - "type": "LTXVLoopingSampler", + "id": 161, + "type": "GetNode", "pos": [ - 2800, - 400 + 3848.71502036999, + 568.3754090696584 ], "size": [ - 400, - 580 - ], - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 53 - }, - { - "name": "vae", - "type": "VAE", - "link": 54 - }, - { - "name": "noise", - "type": "NOISE", - "link": 55 - }, - { - "name": "sampler", - "type": "SAMPLER", - "link": 56 - }, - { - "name": "sigmas", - "type": "SIGMAS", - "link": 57 - }, - { - "name": "guider", - "type": "GUIDER", - "link": 58 - }, - { - "name": "latents", - "type": "LATENT", - "link": 59 - }, - { - "name": "optional_cond_images", - "type": "IMAGE", - "link": 60 - }, - { - "name": "optional_guiding_latents", - "type": "LATENT", - "link": null - }, - { - "name": "optional_positive_conditionings", - "type": "CONDITIONING", - "link": 61 - }, - { - "name": "optional_negative_index_latents", - "type": "LATENT", - "link": 62 - }, - { - "name": "optional_normalizing_latents", - "type": "LATENT", - "link": null - }, - { - "name": "temporal_tile_size", - "type": "INT", - "link": 63, - "widget": { - "name": "temporal_tile_size" - } - }, - { - "name": "temporal_overlap", - "type": "INT", - "link": 64, - "widget": { - "name": "temporal_overlap" - } - }, - { - "name": "optional_cond_image_indices", - "type": "STRING", - "link": 65, - "widget": { - "name": "optional_cond_image_indices" - } - } + 210, + 58 ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 4, + "inputs": [], "outputs": [ { - "name": "denoised_output", - "type": "LATENT", + "name": "VAE", + "type": "VAE", + "slot_index": 0, "links": [ - 66 - ], - "slot_index": 0 + 81 + ] } ], + "title": "Get_video_vae", "properties": { - "Node name for S&R": "LTXVLoopingSampler" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - 240, - 80, - 1.0, - 0.5, - 1.0, - 1, - 1, - 1, - 0.15, - 0, - 1000, - "0, 224, 384, 544, 704" - ], - "title": "Stage 1 \u2014 Generate", - "color": "#335533", - "bgcolor": "#223322" + "video_vae" + ] }, { - "id": 142, + "id": 160, "type": "GetNode", "pos": [ - 2590, - 410 + 3855.3937086756073, + 536.7688505977435 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 142, - "mode": 0, + "order": 38, + "mode": 4, "inputs": [], "outputs": [ { "name": "MODEL", "type": "MODEL", + "slot_index": 0, "links": [ - 53 - ], - "slot_index": 0 + 80 + ] } ], + "title": "Get_model", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ "model" + ] + }, + { + "id": 60, + "type": "RandomNoise", + "pos": [ + 3503.3934415280514, + -8.3153008749082 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 39, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 82 + ] + } ], - "title": "Get_model" + "title": "Stage 2 Noise", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 43, + "fixed" + ] }, { - "id": 143, - "type": "GetNode", + "id": 61, + "type": "KSamplerSelect", "pos": [ - 2590, - 475 + 3523.4144793962155, + 120.01803245842527 ], "size": [ - 190, + 235, 58 ], - "flags": { - "collapsed": true - }, - "order": 143, - "mode": 0, + "flags": {}, + "order": 40, + "mode": 4, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "SAMPLER", + "type": "SAMPLER", + "slot_index": 0, "links": [ - 54 - ], - "slot_index": 0 + 83 + ] } ], + "title": "Stage 2 Sampler", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "KSamplerSelect" }, "widgets_values": [ - "video_vae" - ], - "title": "Get_video_vae" + "euler_cfg_pp" + ] }, { - "id": 144, - "type": "GetNode", + "id": 62, + "type": "ManualSigmas", "pos": [ - 2590, - 540 + 3808.474587590959, + 13.324317104120311 ], "size": [ - 190, + 263.33333333333303, 58 ], - "flags": { - "collapsed": true - }, - "order": 144, - "mode": 0, + "flags": {}, + "order": 41, + "mode": 4, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, "links": [ - 60 - ], - "slot_index": 0 + 84 + ] } ], + "title": "Stage 2 Sigmas", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ManualSigmas" }, "widgets_values": [ - "scheduled_reference_images" - ], - "title": "Get_scheduled_reference_images" + "0.85, 0.7250, 0.4219, 0.0" + ] }, { - "id": 145, - "type": "GetNode", + "id": 110, + "type": "SetNode", "pos": [ - 2590, - 605 + 214.99999999999974, + 30.000000000000007 ], "size": [ - 190, - 58 + 210, + 60 ], "flags": { "collapsed": true }, - "order": 145, + "order": 92, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1 + } + ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 61 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_start_image", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "start_image" }, "widgets_values": [ - "tile_prompt_conditioning" - ], - "title": "Get_tile_prompt_conditioning" + "start_image" + ] }, { - "id": 146, - "type": "GetNode", + "id": 116, + "type": "SetNode", "pos": [ - 2590, - 670 + 254.99999999999832, + 690.0000000000025 ], "size": [ - 190, + 261.93334045410154, 58 ], "flags": { "collapsed": true }, - "order": 146, + "order": 98, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 16 + } + ], "outputs": [ { - "name": "INT", - "type": "INT", - "links": [ - 63 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_scheduled_reference_images", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "scheduled_reference_images" }, "widgets_values": [ - "temporal_tile_size" - ], - "title": "Get_temporal_tile_size" + "scheduled_reference_images" + ] }, { - "id": 147, + "id": 177, "type": "GetNode", "pos": [ - 2590, - 735 + -75.4898817872165, + 1712.8344353169118 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 147, + "order": 42, "mode": 0, "inputs": [], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 64 - ], - "slot_index": 0 + 113 + ] } ], + "title": "Get_start_image", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "temporal_overlap" - ], - "title": "Get_temporal_overlap" + "start_image" + ] }, { - "id": 148, - "type": "GetNode", + "id": 115, + "type": "SetNode", "pos": [ - 2590, - 800 + 904.9999999999997, + 1511.6666666666686 ], "size": [ - 190, - 58 + 210, + 60 ], "flags": { "collapsed": true }, - "order": 148, + "order": 115, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 14 + } + ], "outputs": [ { - "name": "STRING", - "type": "STRING", - "links": [ - 65 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_stage_1_height", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "stage_1_height" }, "widgets_values": [ - "reference_indices" + "stage_1_height" ], - "title": "Get_reference_indices" + "color": "#232", + "bgcolor": "#353" }, { - "id": 149, - "type": "GetNode", + "id": 114, + "type": "SetNode", "pos": [ - 2590, - 865 + 1224.9999999999995, + 1461.6666666666686 ], "size": [ - 190, - 58 + 210, + 60 ], "flags": { "collapsed": true }, - "order": 149, + "order": 127, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 12 + } + ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", - "links": [ - 62 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_stage_1_width", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "stage_1_width" }, "widgets_values": [ - "stage_1_anchor_latent" + "stage_1_width" ], - "title": "Get_stage_1_anchor_latent" + "color": "#232", + "bgcolor": "#353" }, { - "id": 50, - "type": "LTXVSeparateAVLatent", + "id": 22, + "type": "LTXVConditioning", "pos": [ - 3650, - 400 + 1319.7595672210043, + 658.1680357977715 ], "size": [ - 250, - 100 + 210, + 78 ], "flags": {}, - "order": 50, + "order": 113, "mode": 0, "inputs": [ { - "name": "av_latent", - "type": "LATENT", - "link": 66 + "name": "positive", + "type": "CONDITIONING", + "link": 29 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 30 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": 135 } ], "outputs": [ { - "name": "video_latent", - "type": "LATENT", + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 68 - ], - "slot_index": 0 + 32 + ] }, { - "name": "audio_latent", - "type": "LATENT", + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, "links": [ - 67 - ], - "slot_index": 1 + 33 + ] } ], "properties": { - "Node name for S&R": "LTXVSeparateAVLatent" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVConditioning" }, - "widgets_values": [], - "title": "Split Stage 1 AV" + "widgets_values": [ + 24 + ] }, { - "id": 150, - "type": "SetNode", + "id": 183, + "type": "GetNode", "pos": [ - 3920, - 440 + 1188.881987577645, + 764.2327856808895 ], "size": [ - 190, + 210, 60 ], "flags": { "collapsed": true }, - "order": 150, + "order": 43, "mode": 0, - "inputs": [ - { - "name": "LATENT", - "type": "LATENT", - "link": 67 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 134, + 135 + ] } ], + "title": "Get_fps", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "stage_1_audio" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "stage_1_audio" + "fps" ], - "title": "Set_stage_1_audio" + "color": "#232", + "bgcolor": "#353" }, { - "id": 51, - "type": "LTXVLatentUpsampler", + "id": 64, + "type": "LTXVLoopingSampler", "pos": [ - 3650, - 530 + 3784.6183129633105, + 495.01803245842626 ], "size": [ - 300, - 100 + 319.0833435058594, + 590 ], "flags": {}, - "order": 51, - "mode": 0, + "order": 135, + "mode": 4, "inputs": [ { - "name": "samples", + "name": "model", + "type": "MODEL", + "link": 80 + }, + { + "name": "vae", + "type": "VAE", + "link": 81 + }, + { + "name": "noise", + "type": "NOISE", + "link": 82 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 83 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 84 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 85 + }, + { + "name": "latents", "type": "LATENT", - "link": 68 + "link": 86 }, { - "name": "upscale_model", - "type": "LATENT_UPSCALE_MODEL", - "link": 69 + "name": "optional_cond_images", + "shape": 7, + "type": "IMAGE", + "link": 87 }, { - "name": "vae", - "type": "VAE", - "link": 70 + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": 88 + }, + { + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "optional_normalizing_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": 89 + }, + { + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": 90 + }, + { + "name": "optional_cond_image_indices", + "shape": 7, + "type": "STRING", + "widget": { + "name": "optional_cond_image_indices" + }, + "link": 91 } ], "outputs": [ { - "name": "LATENT", + "name": "denoised_output", "type": "LATENT", + "slot_index": 0, "links": [ - 73 - ], - "slot_index": 0 + 92 + ] } ], - "properties": { - "Node name for S&R": "LTXVLatentUpsampler" - }, - "widgets_values": [], - "title": "Spatial Upscale 2x" + "title": "Stage 2 — Refine", + "properties": { + "cnr_id": "ComfyUI-LTXVideo", + "ver": "adfe33778b43ddc103bfb5feb2d4915b4a29df58", + "Node name for S&R": "LTXVLoopingSampler" + }, + "widgets_values": [ + 240, + 80, + 1, + 0.5, + 1, + 2, + 1, + 1, + 0, + 0, + 1000, + "0, 224, 384, 544, 704", + 1, + false + ], + "color": "#333355", + "bgcolor": "#222233" }, { - "id": 151, + "id": 176, "type": "GetNode", "pos": [ - 3440, - 550 + 519.0565271201917, + 2663.355501706766 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 151, + "order": 44, "mode": 0, "inputs": [], "outputs": [ { - "name": "LATENT_UPSCALE_MODEL", - "type": "LATENT_UPSCALE_MODEL", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 69 - ], - "slot_index": 0 + 146 + ] } ], + "title": "Get_global_prompt", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "latent_upscale_model" + "global_prompt" + ] + }, + { + "id": 187, + "type": "MergeString", + "pos": [ + 727.8122695666988, + 2666.8043397173 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 90, + "mode": 0, + "inputs": [ + { + "name": "input1", + "type": "*", + "link": 146 + }, + { + "name": "input2", + "type": "*", + "link": 147 + } ], - "title": "Get_latent_upscale_model" + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 145 + ] + } + ], + "properties": { + "cnr_id": "comfyui-logicutils", + "ver": "1.8.0", + "Node name for S&R": "MergeString" + }, + "widgets_values": [] }, { - "id": 152, + "id": 175, "type": "GetNode", "pos": [ - 3440, - 615 + 508.71547919307403, + 2332.978541923553 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 152, + "order": 45, "mode": 0, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 70 - ], - "slot_index": 0 + 142 + ] } ], + "title": "Get_global_prompt", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "video_vae" - ], - "title": "Get_video_vae" + "global_prompt" + ] }, { - "id": 52, - "type": "LTXVImgToVideoConditionOnly", + "id": 186, + "type": "MergeString", "pos": [ - 3650, - 660 + 725.3347336093505, + 2341.008361326173 ], "size": [ - 300, - 130 + 140, + 46 ], "flags": {}, - "order": 52, + "order": 89, "mode": 0, "inputs": [ { - "name": "vae", - "type": "VAE", - "link": 71 - }, - { - "name": "image", - "type": "IMAGE", - "link": 72 - }, - { - "name": "latent", - "type": "LATENT", - "link": 73 + "name": "input1", + "type": "*", + "link": 142 }, { - "name": "bypass", - "type": "BOOLEAN", - "link": 74 + "name": "input2", + "type": "*", + "link": 143 } ], "outputs": [ { - "name": "latent", - "type": "LATENT", + "name": "STRING", + "type": "STRING", "links": [ - 75 - ], - "slot_index": 0 + 144 + ] } ], "properties": { - "Node name for S&R": "LTXVImgToVideoConditionOnly" + "cnr_id": "comfyui-logicutils", + "ver": "1.8.0", + "Node name for S&R": "MergeString" }, - "widgets_values": [ - 1.0, - false - ], - "title": "Stage 2 I2V Cond", - "color": "#333355", - "bgcolor": "#222233" + "widgets_values": [] }, { - "id": 153, - "type": "GetNode", + "id": 185, + "type": "MergeString", "pos": [ - 3440, - 690 + 738.9611813747599, + 1999.1083992122867 ], "size": [ - 190, - 58 + 140, + 46 ], - "flags": { - "collapsed": true - }, - "order": 153, + "flags": {}, + "order": 88, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "input1", + "type": "*", + "link": 139 + }, + { + "name": "input2", + "type": "*", + "link": 140 + } + ], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "STRING", + "type": "STRING", "links": [ - 71 - ], - "slot_index": 0 + 141 + ] } ], "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfyui-logicutils", + "ver": "1.8.0", + "Node name for S&R": "MergeString" }, - "widgets_values": [ - "video_vae" - ], - "title": "Get_video_vae" + "widgets_values": [] }, { - "id": 154, - "type": "GetNode", + "id": 95, + "type": "ImageBatch", "pos": [ - 3440, - 755 + 197.90543464534053, + 2288.5815196801104 ], "size": [ - 190, - 58 + 220, + 46 ], - "flags": { - "collapsed": true - }, - "order": 154, + "flags": {}, + "order": 110, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 115 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 116 + } + ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", + "slot_index": 0, "links": [ - 72 - ], - "slot_index": 0 + 117 + ] } ], + "title": "Ref Batch 2", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ImageBatch" }, - "widgets_values": [ - "start_image" - ], - "title": "Get_start_image" + "widgets_values": [] }, { - "id": 155, + "id": 174, "type": "GetNode", "pos": [ - 3440, - 820 + 523.5267506226385, + 2014.5044135148307 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 155, + "order": 46, "mode": 0, "inputs": [], "outputs": [ { - "name": "BOOLEAN", - "type": "BOOLEAN", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 74 - ], - "slot_index": 0 + 139 + ] } ], + "title": "Get_global_prompt", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "i2v_enable" - ], - "title": "Get_i2v_enable" + "global_prompt" + ] }, { - "id": 53, - "type": "LTXVConcatAVLatent", + "id": 94, + "type": "ImageBatch", "pos": [ - 3650, - 1000 + 202.10658699361036, + 1971.1310324103915 ], "size": [ - 250, - 100 + 220, + 46 ], "flags": {}, - "order": 53, + "order": 91, "mode": 0, "inputs": [ { - "name": "video_latent", - "type": "LATENT", - "link": 75 + "name": "image1", + "type": "IMAGE", + "link": 113 }, { - "name": "audio_latent", - "type": "LATENT", - "link": 76 + "name": "image2", + "type": "IMAGE", + "link": 114 } ], "outputs": [ { - "name": "latent", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 86 - ], - "slot_index": 0 + 115 + ] } ], + "title": "Ref Batch 1", "properties": { - "Node name for S&R": "LTXVConcatAVLatent" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "ImageBatch" }, - "widgets_values": [], - "title": "Stage 2 AV Concat", - "color": "#333355", - "bgcolor": "#222233" + "widgets_values": [] }, { - "id": 156, + "id": 173, "type": "GetNode", "pos": [ - 3440, - 1030 + 528.4818225373333, + 1705.7259525142445 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 156, + "order": 47, "mode": 0, "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 76 - ], - "slot_index": 0 + 136 + ] } ], + "title": "Get_global_prompt", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "stage_1_audio" - ], - "title": "Get_stage_1_audio" + "global_prompt" + ] }, { - "id": 60, - "type": "RandomNoise", + "id": 184, + "type": "MergeString", "pos": [ - 4500, - -80 + 746.2620822970922, + 1713.5129895678094 ], "size": [ - 200, - 100 + 140, + 46 ], "flags": {}, - "order": 60, + "order": 87, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "input1", + "type": "*", + "link": 136 + }, + { + "name": "input2", + "type": "*", + "link": 137 + } + ], "outputs": [ { - "name": "NOISE", - "type": "NOISE", + "name": "STRING", + "type": "STRING", "links": [ - 82 - ], - "slot_index": 0 + 138 + ] } ], "properties": { - "Node name for S&R": "RandomNoise" + "cnr_id": "comfyui-logicutils", + "ver": "1.8.0", + "Node name for S&R": "MergeString" }, - "widgets_values": [ - 43, - "fixed" - ], - "title": "Stage 2 Noise" + "widgets_values": [] }, { - "id": 61, - "type": "KSamplerSelect", + "id": 98, + "type": "StringConcatenate", "pos": [ - 4500, - 40 + 926.0804378025115, + 1789.5250094715348 ], "size": [ - 250, - 80 + 210, + 166 + ], + "flags": {}, + "order": 109, + "mode": 0, + "inputs": [ + { + "name": "string_a", + "type": "STRING", + "widget": { + "name": "string_a" + }, + "link": 138 + }, + { + "name": "string_b", + "type": "STRING", + "widget": { + "name": "string_b" + }, + "link": 141 + } ], - "flags": {}, - "order": 61, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "SAMPLER", - "type": "SAMPLER", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 83 - ], - "slot_index": 0 + 125 + ] } ], + "title": "Join Tile Prompts 2", "properties": { - "Node name for S&R": "KSamplerSelect" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "StringConcatenate" }, "widgets_values": [ - "euler_cfg_pp" - ], - "title": "Stage 2 Sampler" + "", + "", + " | " + ] }, { - "id": 62, - "type": "ManualSigmas", + "id": 99, + "type": "StringConcatenate", "pos": [ - 4500, - 140 + 933.1300750718661, + 2114.142038868855 ], "size": [ - 300, - 80 + 210, + 166 ], "flags": {}, - "order": 62, + "order": 119, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "string_a", + "type": "STRING", + "widget": { + "name": "string_a" + }, + "link": 125 + }, + { + "name": "string_b", + "type": "STRING", + "widget": { + "name": "string_b" + }, + "link": 144 + } + ], "outputs": [ { - "name": "SIGMAS", - "type": "SIGMAS", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 84 - ], - "slot_index": 0 + 127 + ] } ], + "title": "Join Tile Prompts 3", "properties": { - "Node name for S&R": "ManualSigmas" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "StringConcatenate" }, "widgets_values": [ - "0.85, 0.7250, 0.4219, 0.0" - ], - "title": "Stage 2 Sigmas" + "", + "", + " | " + ] }, { - "id": 63, - "type": "CFGGuider", + "id": 100, + "type": "StringConcatenate", "pos": [ - 4500, - 240 + 933.468117589247, + 2425.2674047566793 ], "size": [ - 250, - 130 + 210, + 166 ], "flags": {}, - "order": 63, + "order": 125, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 77 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 78 + "name": "string_a", + "type": "STRING", + "widget": { + "name": "string_a" + }, + "link": 127 }, { - "name": "negative", - "type": "CONDITIONING", - "link": 79 + "name": "string_b", + "type": "STRING", + "widget": { + "name": "string_b" + }, + "link": 145 } ], "outputs": [ { - "name": "GUIDER", - "type": "GUIDER", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 85 - ], - "slot_index": 0 + 129 + ] } ], + "title": "Join Tile Prompts 4", "properties": { - "Node name for S&R": "CFGGuider" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "StringConcatenate" }, "widgets_values": [ - 1 - ], - "title": "Stage 2 Guider", - "color": "#333355", - "bgcolor": "#222233" + "", + "", + " | " + ] }, { - "id": 157, - "type": "GetNode", + "id": 180, + "type": "SetNode", "pos": [ - 4290, - 220 + 948.0470541044818, + 2696.733627335467 ], "size": [ - 190, - 58 + 210, + 60 ], "flags": { "collapsed": true }, - "order": 157, + "order": 129, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 129 + } + ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 77 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_joined_tile_prompts", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "joined_tile_prompts" }, "widgets_values": [ - "model" - ], - "title": "Get_model" + "joined_tile_prompts" + ] }, { - "id": 158, + "id": 154, "type": "GetNode", "pos": [ - 4290, - 285 + 3547.2887864823415, + 672.0393374741192 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 158, - "mode": 0, + "order": 48, + "mode": 4, "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 78 - ], - "slot_index": 0 + 72 + ] } ], + "title": "Get_start_image", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "positive_conditioning" - ], - "title": "Get_positive_conditioning" + "start_image" + ] }, { - "id": 159, + "id": 153, "type": "GetNode", "pos": [ - 4290, - 350 + 3543.964469378218, + 610.3516329392902 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 159, - "mode": 0, + "order": 49, + "mode": 4, "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "VAE", + "type": "VAE", + "slot_index": 0, "links": [ - 79 - ], - "slot_index": 0 + 71 + ] } ], + "title": "Get_video_vae", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "negative_conditioning" - ], - "title": "Get_negative_conditioning" + "video_vae" + ] }, { - "id": 64, - "type": "LTXVLoopingSampler", + "id": 124, + "type": "SetNode", "pos": [ - 4500, - 400 + 750.0000000000001, + 1141.6666666666683 ], "size": [ - 400, - 580 + 211.00000610351563, + 60 ], - "flags": {}, - "order": 64, + "flags": { + "collapsed": true + }, + "order": 83, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 80 - }, - { - "name": "vae", - "type": "VAE", - "link": 81 - }, - { - "name": "noise", - "type": "NOISE", - "link": 82 - }, - { - "name": "sampler", - "type": "SAMPLER", - "link": 83 - }, - { - "name": "sigmas", - "type": "SIGMAS", - "link": 84 - }, - { - "name": "guider", - "type": "GUIDER", - "link": 85 - }, - { - "name": "latents", - "type": "LATENT", - "link": 86 - }, - { - "name": "optional_cond_images", - "type": "IMAGE", - "link": 87 - }, - { - "name": "optional_guiding_latents", - "type": "LATENT", - "link": null - }, - { - "name": "optional_positive_conditionings", - "type": "CONDITIONING", - "link": 88 - }, - { - "name": "optional_negative_index_latents", - "type": "LATENT", - "link": null - }, - { - "name": "optional_normalizing_latents", - "type": "LATENT", - "link": null - }, - { - "name": "temporal_tile_size", - "type": "INT", - "link": 89, - "widget": { - "name": "temporal_tile_size" - } - }, - { - "name": "temporal_overlap", - "type": "INT", - "link": 90, - "widget": { - "name": "temporal_overlap" - } - }, - { - "name": "optional_cond_image_indices", - "type": "STRING", - "link": 91, - "widget": { - "name": "optional_cond_image_indices" - } + "inputs": [ + { + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "link": 26 } ], "outputs": [ { - "name": "denoised_output", - "type": "LATENT", - "links": [ - 92 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_latent_upscale_model", "properties": { - "Node name for S&R": "LTXVLoopingSampler" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "latent_upscale_model" }, "widgets_values": [ - 240, - 80, - 1.0, - 0.5, - 1.0, - 2, - 1, - 1, - 0.0, - 0, - 1000, - "0, 224, 384, 544, 704" - ], - "title": "Stage 2 \u2014 Refine", - "color": "#333355", - "bgcolor": "#222233" + "latent_upscale_model" + ] }, { - "id": 160, - "type": "GetNode", + "id": 14, + "type": "LatentUpscaleModelLoader", "pos": [ - 4290, - 410 + 610.0210378681625, + 1035.0781406531719 ], "size": [ - 190, + 376.6606558471915, 58 ], - "flags": { - "collapsed": true - }, - "order": 160, + "flags": {}, + "order": 50, "mode": 0, "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "slot_index": 0, "links": [ - 80 - ], - "slot_index": 0 + 26 + ] } ], "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LatentUpscaleModelLoader" }, "widgets_values": [ - "model" - ], - "title": "Get_model" + "ltx-2.3-spatial-upscaler-x2-1.1.safetensors" + ] }, { - "id": 161, - "type": "GetNode", + "id": 188, + "type": "PrimitiveFloat", "pos": [ - 4290, - 475 + 1819.8728176243437, + 388.9319426289542 ], "size": [ - 190, - 58 + 225.39960772551217, + 71.9375938751491 ], - "flags": { - "collapsed": true - }, - "order": 161, + "flags": {}, + "order": 51, "mode": 0, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "FLOAT", + "type": "FLOAT", "links": [ - 81 - ], - "slot_index": 0 + 149 + ] } ], + "title": "Audio CFG", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.18.1", + "Node name for S&R": "PrimitiveFloat" }, "widgets_values": [ - "video_vae" + 3 ], - "title": "Get_video_vae" + "color": "#346434", + "bgcolor": "rgba(24,24,27,.9)" }, { - "id": 162, + "id": 194, "type": "GetNode", "pos": [ - 4290, - 540 + 1821.5476778689917, + 785.4148078284055 ], "size": [ - 190, - 58 + 210, + 50 ], "flags": { "collapsed": true }, - "order": 162, + "order": 52, "mode": 0, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MODEL", + "type": "MODEL", "links": [ - 87 - ], - "slot_index": 0 + 152 + ] } ], + "title": "Get_model", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "scheduled_reference_images" + "model" ], - "title": "Get_scheduled_reference_images" + "color": "#223", + "bgcolor": "#335" }, { - "id": 163, + "id": 196, "type": "GetNode", "pos": [ - 4290, - 605 + 1843.6223972289376, + 857.0350962100755 ], "size": [ - 190, - 58 + 210, + 50 ], "flags": { "collapsed": true }, - "order": 163, + "order": 53, "mode": 0, "inputs": [], "outputs": [ @@ -4007,1908 +3945,2218 @@ "name": "CONDITIONING", "type": "CONDITIONING", "links": [ - 88 - ], - "slot_index": 0 + 153 + ] } ], + "title": "Get_positive_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "tile_prompt_conditioning" + "positive_conditioning" ], - "title": "Get_tile_prompt_conditioning" + "color": "#332922", + "bgcolor": "#593930" }, { - "id": 164, + "id": 195, "type": "GetNode", "pos": [ - 4290, - 670 + 1837.5151192919436, + 825.2886218600994 ], "size": [ - 190, - 58 + 214.43334045410157, + 50 ], "flags": { "collapsed": true }, - "order": 164, + "order": 54, "mode": 0, "inputs": [], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 89 - ], - "slot_index": 0 + 154 + ] } ], + "title": "Get_negative_conditioning", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "temporal_tile_size" + "negative_conditioning" ], - "title": "Get_temporal_tile_size" + "color": "#332922", + "bgcolor": "#593930" }, { - "id": 165, - "type": "GetNode", + "id": 191, + "type": "GuiderParameters", "pos": [ - 4290, - 735 + 1806.00210867077, + 505.6235665290389 ], "size": [ - 190, - 58 + 256.1546236804254, + 226 ], - "flags": { - "collapsed": true - }, - "order": 165, + "flags": {}, + "order": 84, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "parameters", + "shape": 7, + "type": "GUIDER_PARAMETERS", + "link": null + }, + { + "name": "cfg", + "type": "FLOAT", + "widget": { + "name": "cfg" + }, + "link": 149 + } + ], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "GUIDER_PARAMETERS", + "type": "GUIDER_PARAMETERS", "links": [ - 90 - ], - "slot_index": 0 + 150 + ] } ], + "title": "Audio - Guider Parameters", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "ltxv", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "GuiderParameters" }, "widgets_values": [ - "temporal_overlap" - ], - "title": "Get_temporal_overlap" + "AUDIO", + 7, + 0, + true, + 0.8, + 1, + 0, + true + ] }, { - "id": 166, - "type": "GetNode", + "id": 192, + "type": "GuiderParameters", "pos": [ - 4290, - 800 + 1807.734169143691, + 110.70317462155123 ], "size": [ - 190, - 58 + 256.1546236804254, + 226 ], - "flags": { - "collapsed": true + "flags": {}, + "order": 108, + "mode": 0, + "inputs": [ + { + "name": "parameters", + "shape": 7, + "type": "GUIDER_PARAMETERS", + "link": 150 + }, + { + "name": "cfg", + "type": "FLOAT", + "widget": { + "name": "cfg" + }, + "link": 151 + } + ], + "outputs": [ + { + "name": "GUIDER_PARAMETERS", + "type": "GUIDER_PARAMETERS", + "links": [ + 155 + ] + } + ], + "title": "Video - Guider Parameters", + "properties": { + "cnr_id": "ltxv", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "GuiderParameters" }, - "order": 166, + "widgets_values": [ + "VIDEO", + 3, + 1, + true, + 0.85, + 0.5, + 0, + true + ] + }, + { + "id": 189, + "type": "PrimitiveFloat", + "pos": [ + 1818.9761741552163, + -9.791009327158042 + ], + "size": [ + 225.39960772551217, + 71.9375938751491 + ], + "flags": {}, + "order": 55, "mode": 0, "inputs": [], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "FLOAT", + "type": "FLOAT", "links": [ - 91 - ], - "slot_index": 0 + 151, + 156 + ] } ], + "title": "Video CFG", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.18.1", + "Node name for S&R": "PrimitiveFloat" }, "widgets_values": [ - "reference_indices" + 1 ], - "title": "Get_reference_indices" + "color": "#346434", + "bgcolor": "rgba(24,24,27,.9)" }, { - "id": 70, - "type": "LTXVSeparateAVLatent", + "id": 33, + "type": "LTXVConcatAVLatent", "pos": [ - 5350, - 400 + 2332.338234646854, + 664.6475762054777 ], "size": [ - 250, - 100 + 161.4999984741211, + 46 ], "flags": {}, - "order": 70, + "order": 116, "mode": 0, "inputs": [ - { - "name": "av_latent", - "type": "LATENT", - "link": 92 - } - ], - "outputs": [ { "name": "video_latent", "type": "LATENT", - "links": [ - 93 - ], - "slot_index": 0 + "link": 45 }, { "name": "audio_latent", "type": "LATENT", + "link": 46 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "slot_index": 0, "links": [ - 95 - ], - "slot_index": 1 + 59 + ] } ], + "title": "Stage 1 AV Concat", "properties": { - "Node name for S&R": "LTXVSeparateAVLatent" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVConcatAVLatent" }, "widgets_values": [], - "title": "Split Final AV" + "color": "#335533", + "bgcolor": "#223322" }, { - "id": 71, - "type": "LTXVSpatioTemporalTiledVAEDecode", + "id": 50, + "type": "LTXVSeparateAVLatent", "pos": [ - 5350, - 530 + 3091.3685661207273, + 500.4965823670724 ], "size": [ - 350, - 200 + 163.3499984741211, + 46 ], "flags": {}, - "order": 71, - "mode": 0, + "order": 131, + "mode": 4, "inputs": [ { - "name": "samples", + "name": "av_latent", + "type": "LATENT", + "link": 66 + } + ], + "outputs": [ + { + "name": "video_latent", "type": "LATENT", - "link": 93 + "slot_index": 0, + "links": [ + 68 + ] }, { - "name": "vae", - "type": "VAE", - "link": 94 + "name": "audio_latent", + "type": "LATENT", + "slot_index": 1, + "links": [ + 132 + ] } ], + "title": "Split Stage 1 AV", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVSeparateAVLatent" + }, + "widgets_values": [] + }, + { + "id": 151, + "type": "GetNode", + "pos": [ + 3298.3394004718075, + 515.8065292260931 + ], + "size": [ + 212.46666564941407, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 4, + "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT_UPSCALE_MODEL", + "type": "LATENT_UPSCALE_MODEL", + "slot_index": 0, "links": [ - 97 - ], - "slot_index": 0 + 69 + ] } ], + "title": "Get_latent_upscale_model", "properties": { - "Node name for S&R": "LTXVSpatioTemporalTiledVAEDecode" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, - "widgets_values": [ - 6, - 4, - 16, - 4, - false, - "auto", - "auto" - ], - "title": "Decode Video (Tiled)" + "widgets_values": [ + "latent_upscale_model" + ] }, { - "id": 167, + "id": 152, "type": "GetNode", "pos": [ - 5140, - 565 + 3341.7520665127226, + 534.2959179924748 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 167, - "mode": 0, + "order": 57, + "mode": 4, "inputs": [], "outputs": [ { "name": "VAE", "type": "VAE", + "slot_index": 0, "links": [ - 94 - ], - "slot_index": 0 + 70 + ] } ], + "title": "Get_video_vae", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ "video_vae" - ], - "title": "Get_video_vae" + ] }, { - "id": 72, - "type": "LTXVAudioVAEDecode", + "id": 51, + "type": "LTXVLatentUpsampler", "pos": [ - 5350, - 760 + 3299.0455843958553, + 485.3595761209819 ], "size": [ - 250, - 100 + 216.1054588437105, + 66 ], "flags": {}, - "order": 72, - "mode": 0, + "order": 132, + "mode": 4, "inputs": [ { "name": "samples", "type": "LATENT", - "link": 95 + "link": 68 }, { - "name": "audio_vae", + "name": "upscale_model", + "type": "LATENT_UPSCALE_MODEL", + "link": 69 + }, + { + "name": "vae", "type": "VAE", - "link": 96 + "link": 70 } ], "outputs": [ { - "name": "Audio", - "type": "AUDIO", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, "links": [ - 98 - ], - "slot_index": 0 + 73 + ] } ], + "title": "Spatial Upscale 2x", "properties": { - "Node name for S&R": "LTXVAudioVAEDecode" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVLatentUpsampler" }, "widgets_values": [] }, { - "id": 168, - "type": "GetNode", + "id": 52, + "type": "LTXVImgToVideoConditionOnly", "pos": [ - 5140, - 795 + 3530.254863800486, + 581.2305431460971 ], "size": [ - 190, - 58 + 210, + 122 ], - "flags": { - "collapsed": true - }, - "order": 168, - "mode": 0, - "inputs": [], - "outputs": [ + "flags": {}, + "order": 133, + "mode": 4, + "inputs": [ { - "name": "VAE", + "name": "vae", "type": "VAE", + "link": 71 + }, + { + "name": "image", + "type": "IMAGE", + "link": 72 + }, + { + "name": "latent", + "type": "LATENT", + "link": 73 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "slot_index": 0, "links": [ - 96 - ], - "slot_index": 0 + 75 + ] } ], + "title": "Stage 2 I2V Cond", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "ComfyUI-LTXVideo", + "ver": "adfe33778b43ddc103bfb5feb2d4915b4a29df58", + "Node name for S&R": "LTXVImgToVideoConditionOnly" }, "widgets_values": [ - "audio_vae" + 1, + false ], - "title": "Get_audio_vae" + "color": "#333355", + "bgcolor": "#222233" }, { - "id": 73, - "type": "CreateVideo", + "id": 31, + "type": "LTXVEmptyLatentAudio", "pos": [ - 5350, - 1000 + 2182.7056602163657, + 763.449529174675 ], "size": [ - 250, - 100 + 210, + 106 ], "flags": {}, - "order": 73, + "order": 105, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 97 + "name": "audio_vae", + "type": "VAE", + "link": 37 }, { - "name": "audio", - "type": "AUDIO", - "link": 98 + "name": "frames_number", + "type": "INT", + "widget": { + "name": "frames_number" + }, + "link": 38 }, { - "name": "fps", - "type": "FLOAT", - "link": 99 + "name": "frame_rate", + "type": "INT", + "widget": { + "name": "frame_rate" + }, + "link": 40 } ], "outputs": [ { - "name": "VIDEO", - "type": "VIDEO", + "name": "Latent", + "type": "LATENT", + "slot_index": 0, "links": [ - 100 - ], - "slot_index": 0 + 46 + ] } ], "properties": { - "Node name for S&R": "CreateVideo" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVEmptyLatentAudio" }, "widgets_values": [ - 30 + 713, + 25, + 1 ] }, { - "id": 169, + "id": 137, "type": "GetNode", "pos": [ - 5140, - 1030 + 2318.6374757440435, + 974.3018350787759 ], "size": [ - 190, + 210, 58 ], "flags": { "collapsed": true }, - "order": 169, + "order": 58, "mode": 0, "inputs": [], "outputs": [ { - "name": "FLOAT", - "type": "FLOAT", + "name": "VAE", + "type": "VAE", + "slot_index": 0, "links": [ - 99 - ], - "slot_index": 0 + 48 + ] } ], + "title": "Get_video_vae", "properties": { "Node name for S&R": "GetNode", "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "fps" - ], - "title": "Get_fps" + "video_vae" + ] }, { - "id": 74, - "type": "SaveVideo", + "id": 136, + "type": "GetNode", "pos": [ - 5350, - 1200 + 2273.2880826329706, + 960.0823633910362 ], "size": [ - 250, - 100 + 244.8499969482422, + 58 ], - "flags": {}, - "order": 74, + "flags": { + "collapsed": true + }, + "order": 59, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "video", - "type": "VIDEO", - "link": 100 + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 47 + ] } ], - "outputs": [], + "title": "Get_preprocessed_start_image", "properties": { - "Node name for S&R": "SaveVideo" + "Node name for S&R": "GetNode", + "aux_id": "kijai/ComfyUI-KJNodes" }, "widgets_values": [ - "LTX-2.3/Looping", - "auto", - "auto" + "preprocessed_start_image" ] }, { - "id": 80, - "type": "PrimitiveStringMultiline", + "id": 35, + "type": "VAEEncode", "pos": [ - 1400, - 850 + 2264.0307579467503, + 943.2482156795766 ], "size": [ - 500, - 180 + 251.36665954589844, + 47.666666666666515 ], "flags": {}, - "order": 80, + "order": 86, "mode": 0, "inputs": [ { - "name": "value", - "type": "STRING", - "link": null, - "widget": { - "name": "value" - } + "name": "pixels", + "type": "IMAGE", + "link": 47 + }, + { + "name": "vae", + "type": "VAE", + "link": 48 } ], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, "links": [ - 101 - ], - "slot_index": 0 + 133 + ] } ], + "title": "Encode Reference Latent", "properties": { - "Node name for S&R": "PrimitiveStringMultiline", - "Run widget replace on values": false + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "VAEEncode" }, - "widgets_values": [ - "A cinematic live-action scene with the same subject, wardrobe, lighting, and location throughout. Natural motion, stable anatomy, coherent audio." - ], - "title": "Global Positive Prompt" + "widgets_values": [] }, { - "id": 170, - "type": "SetNode", + "id": 32, + "type": "LTXVImgToVideoConditionOnly", "pos": [ - 1400, - 1040 + 2218.459786415616, + 187.75021379467725 ], "size": [ - 190, - 60 + 248.33333333333348, + 125.33333333333326 ], - "flags": { - "collapsed": true - }, - "order": 170, + "flags": {}, + "order": 104, "mode": 0, "inputs": [ { - "name": "STRING", - "type": "STRING", - "link": 101 - } - ], - "outputs": [ + "name": "vae", + "type": "VAE", + "link": 41 + }, { - "name": "*", - "type": "*", - "links": null + "name": "image", + "type": "IMAGE", + "link": 42 + }, + { + "name": "latent", + "type": "LATENT", + "link": 43 } ], - "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "global_prompt" - }, - "widgets_values": [ - "global_prompt" - ], - "title": "Set_global_prompt" - }, - { - "id": 171, - "type": "GetNode", - "pos": [ - 1150, - -70 - ], - "size": [ - 190, - 58 - ], - "flags": { - "collapsed": true - }, - "order": 171, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "latent", + "type": "LATENT", + "slot_index": 0, "links": [ - 102 - ], - "slot_index": 0 + 45 + ] } ], + "title": "Stage 1 I2V Cond", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "ComfyUI-LTXVideo", + "ver": "adfe33778b43ddc103bfb5feb2d4915b4a29df58", + "Node name for S&R": "LTXVImgToVideoConditionOnly" }, "widgets_values": [ - "global_prompt" + 0.7, + false ], - "title": "Get_global_prompt" + "color": "#335533", + "bgcolor": "#223322" }, { - "id": 81, - "type": "MultiPromptProvider", + "id": 30, + "type": "EmptyLTXVLatentVideo", "pos": [ - 1150, - 540 + 2225.676386745258, + -7.768397895378604 ], "size": [ - 400, - 220 + 210, + 130 ], "flags": {}, - "order": 81, + "order": 78, "mode": 0, "inputs": [ { - "name": "prompts", - "type": "STRING", - "link": 130, + "name": "width", + "type": "INT", "widget": { - "name": "prompts" - } + "name": "width" + }, + "link": 34 }, { - "name": "clip", - "type": "CLIP", - "link": 103 + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 35 + }, + { + "name": "length", + "type": "INT", + "widget": { + "name": "length" + }, + "link": 36 } ], "outputs": [ { - "name": "conditionings", - "type": "CONDITIONING", + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, "links": [ - 104 - ], - "slot_index": 0 + 43 + ] } ], + "title": "Stage 1 Empty Latent", "properties": { - "Node name for S&R": "MultiPromptProvider" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "EmptyLTXVLatentVideo" }, "widgets_values": [ - "" - ], - "title": "Per-Tile Prompts From Global + Snippets" + 960, + 544, + 713, + 1 + ] }, { - "id": 172, - "type": "SetNode", + "id": 43, + "type": "CFGGuider", "pos": [ - 1550, - 570 + 2224.127174843701, + 397.2581053124804 ], "size": [ - 190, - 60 + 231.66666666666697, + 98 ], - "flags": { - "collapsed": true - }, - "order": 172, + "flags": {}, + "order": 85, "mode": 0, "inputs": [ { - "name": "CONDITIONING", + "name": "model", + "type": "MODEL", + "link": 50 + }, + { + "name": "positive", "type": "CONDITIONING", - "link": 104 + "link": 51 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 52 + }, + { + "name": "cfg", + "type": "FLOAT", + "widget": { + "name": "cfg" + }, + "link": 156 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [ + 157 + ] } ], + "title": "Stage 1 Guider", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "tile_prompt_conditioning" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "CFGGuider" }, "widgets_values": [ - "tile_prompt_conditioning" + 1 ], - "title": "Set_tile_prompt_conditioning" + "color": "#335533", + "bgcolor": "#223322" }, { - "id": 82, - "type": "LoadImage", + "id": 197, + "type": "LazySwitchKJ", "pos": [ - -400, - 1820 + 2228.5319529211697, + 542.387454510388 ], "size": [ - 300, - 300 + 238.2778195174892, + 78 ], "flags": {}, - "order": 82, + "order": 124, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 114 - ], - "slot_index": 0 + "name": "on_false", + "type": "*", + "link": 157 }, { - "name": "MASK", - "type": "MASK", - "links": [], - "slot_index": 1 + "name": "on_true", + "type": "*", + "link": 158 } ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [ + 159 + ] + } + ], + "title": "USE MULTIMODAL GUIDE", "properties": { - "Node name for S&R": "LoadImage" + "cnr_id": "comfyui-kjnodes", + "ver": "2acdef1766026ff3be00daf3c45f6a064db9100f", + "Node name for S&R": "LazySwitchKJ" }, "widgets_values": [ - "reference_tile_0_late.png", - "image" + true ], - "title": "Late Ref Tile 0 - Frame 224" + "color": "#006691", + "bgcolor": "rgba(24,24,27,.9)" }, { - "id": 83, - "type": "PrimitiveStringMultiline", + "id": 193, + "type": "MultimodalGuider", "pos": [ - -60, - 1820 + 1808.5739805259298, + 782.0053361647973 ], "size": [ - 500, - 180 + 238.2778195174892, + 148 ], "flags": {}, - "order": 83, + "order": 118, "mode": 0, "inputs": [ { - "name": "value", - "type": "STRING", - "link": null, - "widget": { - "name": "value" - } + "name": "model", + "type": "MODEL", + "link": 152 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 153 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 154 + }, + { + "name": "parameters", + "type": "GUIDER_PARAMETERS", + "link": 155 } ], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "GUIDER", + "type": "GUIDER", "links": [ - 106 - ], - "slot_index": 0 + 158 + ] } ], "properties": { - "Node name for S&R": "PrimitiveStringMultiline", - "Run widget replace on values": false + "cnr_id": "ltxv", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "MultimodalGuider" }, "widgets_values": [ - "The subject enters the shot and begins the action." - ], - "title": "Tile 0 Prompt Snippet" + "28" + ] }, { - "id": 173, - "type": "GetNode", + "id": 127, + "type": "SetNode", "pos": [ - 460, - 2000 + 1346.0024711146764, + 836.7027315835171 ], "size": [ - 190, - 58 + 212.96666564941407, + 60 ], "flags": { "collapsed": true }, - "order": 173, + "order": 123, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 33 + } + ], "outputs": [ { - "name": "STRING", - "type": "STRING", - "links": [ - 105 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_negative_conditioning", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "negative_conditioning" }, "widgets_values": [ - "global_prompt" + "negative_conditioning" ], - "title": "Get_global_prompt" + "color": "#432", + "bgcolor": "#653" }, { - "id": 84, - "type": "StringConcatenate", + "id": 126, + "type": "SetNode", "pos": [ - 460, - 1820 + 1349.3478260869585, + 788.3724036599211 ], "size": [ - 240, - 166 + 210, + 60 ], - "flags": {}, - "order": 84, + "flags": { + "collapsed": true + }, + "order": 122, "mode": 0, "inputs": [ { - "name": "string_a", - "type": "STRING", - "link": 105, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 106, - "widget": { - "name": "string_b" - } - }, - { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 32 } ], "outputs": [ { - "name": "STRING", - "type": "STRING", - "links": [ - 123 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_positive_conditioning", "properties": { - "Node name for S&R": "StringConcatenate" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "positive_conditioning" }, "widgets_values": [ - "", - "", - " " + "positive_conditioning" ], - "title": "Global + Tile 0 Snippet" + "color": "#432", + "bgcolor": "#653" }, { - "id": 85, - "type": "LoadImage", + "id": 172, + "type": "SetNode", "pos": [ - -400, - 2150 + 1406.1437253723388, + 1070.2434381887392 ], "size": [ - 300, - 300 + 229.66666259765626, + 60 ], - "flags": {}, - "order": 85, + "flags": { + "collapsed": true + }, + "order": 107, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 116 - ], - "slot_index": 0 - }, + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 104 + } + ], + "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [], - "slot_index": 1 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_tile_prompt_conditioning", "properties": { - "Node name for S&R": "LoadImage" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "tile_prompt_conditioning" }, "widgets_values": [ - "reference_tile_1_late.png", - "image" + "tile_prompt_conditioning" ], - "title": "Late Ref Tile 1 - Frame 384" + "color": "#432", + "bgcolor": "#653" }, { - "id": 86, - "type": "PrimitiveStringMultiline", + "id": 6, + "type": "Note", "pos": [ - -60, - 2150 + -196.14805497660996, + 1051.6690760491977 ], "size": [ - 500, - 180 + 645.963137500595, + 332.59125404674114 ], "flags": {}, - "order": 86, + "order": 60, "mode": 0, - "inputs": [ - { - "name": "value", - "type": "STRING", - "link": null, - "widget": { - "name": "value" - } - } - ], - "outputs": [ - { - "name": "STRING", - "type": "STRING", - "links": [ - 108 - ], - "slot_index": 0 - } - ], + "inputs": [], + "outputs": [], "properties": { - "Node name for S&R": "PrimitiveStringMultiline", - "Run widget replace on values": false + "Node name for S&R": "Note" }, "widgets_values": [ - "The action continues with a small camera move." + "## Late Reference Tile Layout\n\nThe Looping Timing + Reference Schedule node calculates clip frames, sampler tile size, overlap, and late reference indices.\n\nDefault frame count: 713 (`8n+1`).\nDefault tile size: 240. Overlap: 80. Stride: 160.\nDefault tile starts: 0, 160, 320, 480.\n\nThe current image/snippet branches match these default indices:\n `0, 224, 384, 544, 704`\nIf duration adds tiles after the supplied refs, the schedule repeats the last image. It truncates extra supplied refs for shorter clips.\nThe looping sampler already repeats the last tile prompt after the snippet list ends.\n\nEdit duration, tile duration, overlap, and late-reference offset inside the schedule node. Edit the Global Positive Prompt once and each Tile Prompt Snippet beside its late reference branch. The graph concatenates `global + snippet` for each tile and joins those prompts with `|` for the multi-prompt node." ], - "title": "Tile 1 Prompt Snippet" + "color": "#432", + "bgcolor": "#653" }, { - "id": 174, - "type": "GetNode", + "id": 178, + "type": "SetNode", "pos": [ - 460, - 2330 + 436.6666666666645, + 2940.000000000008 ], "size": [ - 190, + 223.53333129882813, 58 ], "flags": { "collapsed": true }, - "order": 174, + "order": 130, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 121 + } + ], "outputs": [ { - "name": "STRING", - "type": "STRING", - "links": [ - 107 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_reference_image_batch", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "Node name for S&R": "SetNode", + "aux_id": "kijai/ComfyUI-KJNodes", + "previousName": "reference_image_batch" }, "widgets_values": [ - "global_prompt" - ], - "title": "Get_global_prompt" + "reference_image_batch" + ] }, { - "id": 87, - "type": "StringConcatenate", + "id": 199, + "type": "VisualizeSigmasKJ", "pos": [ - 460, - 2150 + 3126.6039995127417, + 264.9922693931269 ], "size": [ - 240, - 166 + 270, + 102 ], - "flags": {}, - "order": 87, - "mode": 0, + "flags": { + "collapsed": true + }, + "order": 106, + "mode": 4, "inputs": [ { - "name": "string_a", - "type": "STRING", - "link": 107, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 108, - "widget": { - "name": "string_b" - } - }, - { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } + "name": "sigmas", + "type": "SIGMAS", + "link": 162 } ], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "sigmas_out", + "type": "SIGMAS", + "links": [] + }, + { + "name": "image", + "type": "IMAGE", "links": [ - 124 - ], - "slot_index": 0 + 160 + ] } ], "properties": { - "Node name for S&R": "StringConcatenate" + "cnr_id": "comfyui-kjnodes", + "ver": "c88ac88a8f8a6a090a0d5d607156090cb2911503", + "Node name for S&R": "VisualizeSigmasKJ" }, "widgets_values": [ - "", - "", - " " - ], - "title": "Global + Tile 1 Snippet" + 0, + -1 + ] }, { - "id": 88, - "type": "LoadImage", + "id": 200, + "type": "PreviewImage", "pos": [ - -400, - 2480 + 3169.3881092316433, + 148.91532964132654 ], "size": [ - 300, - 300 + 282.0597694319408, + 260.6395656720356 ], - "flags": {}, - "order": 88, - "mode": 0, - "inputs": [], - "outputs": [ + "flags": { + "collapsed": false + }, + "order": 117, + "mode": 4, + "inputs": [ { - "name": "IMAGE", + "name": "images", "type": "IMAGE", - "links": [ - 118 - ], - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": [], - "slot_index": 1 + "link": 160 } ], + "outputs": [], + "title": "Sigma Visual", "properties": { - "Node name for S&R": "LoadImage" + "cnr_id": "comfy-core", + "ver": "0.16.4", + "Node name for S&R": "PreviewImage" }, - "widgets_values": [ - "reference_tile_2_late.png", - "image" - ], - "title": "Late Ref Tile 2 - Frame 544" + "widgets_values": [] }, { - "id": 89, - "type": "PrimitiveStringMultiline", + "id": 21, + "type": "CLIPTextEncode", "pos": [ - -60, - 2480 + 1159.9999999999952, + 309.99999999999983 ], "size": [ - 500, - 180 + 430, + 160 ], "flags": {}, - "order": 89, + "order": 74, "mode": 0, "inputs": [ { - "name": "value", - "type": "STRING", - "link": null, - "widget": { - "name": "value" - } + "name": "clip", + "type": "CLIP", + "link": 28 } ], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, "links": [ - 110 - ], - "slot_index": 0 + 30 + ] } ], + "title": "Negative Prompt", "properties": { - "Node name for S&R": "PrimitiveStringMultiline", - "Run widget replace on values": false + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - "The subject completes the central beat." - ], - "title": "Tile 2 Prompt Snippet" + "still image, bad quality, subtitles, text, watermark, overlay effects, pc game, yelling, console game, video game, cartoon, childish, ugly, text, blur, logo, wordmark, low quality, noise, white noise, censoring, beeping, newscast, interview, podcast, mutant, horror, 70's, comedy, stand-up" + ] }, { - "id": 175, - "type": "GetNode", + "id": 83, + "type": "PrimitiveStringMultiline", "pos": [ - 460, - 2660 + 199.144202624014, + 1748.4916635094842 ], "size": [ - 190, - 58 + 500, + 180 ], - "flags": { - "collapsed": true - }, - "order": 175, + "flags": {}, + "order": 61, "mode": 0, "inputs": [], "outputs": [ { "name": "STRING", "type": "STRING", + "slot_index": 0, "links": [ - 109 - ], - "slot_index": 0 + 137 + ] } ], + "title": "Tile 0 Prompt Snippet", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false }, "widgets_values": [ - "global_prompt" - ], - "title": "Get_global_prompt" + "The camera stays steady throughout the clip. " + ] }, { - "id": 90, - "type": "StringConcatenate", + "id": 86, + "type": "PrimitiveStringMultiline", "pos": [ - 460, - 2480 + 197.90543464534053, + 2061.148911808068 ], "size": [ - 240, - 166 + 500, + 180 ], "flags": {}, - "order": 90, + "order": 62, "mode": 0, - "inputs": [ - { - "name": "string_a", - "type": "STRING", - "link": 109, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 110, - "widget": { - "name": "string_b" - } - }, - { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } - } - ], + "inputs": [], "outputs": [ { "name": "STRING", "type": "STRING", + "slot_index": 0, "links": [ - 126 - ], - "slot_index": 0 + 140 + ] } ], + "title": "Tile 1 Prompt Snippet", "properties": { - "Node name for S&R": "StringConcatenate" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false }, "widgets_values": [ - "", - "", - " " - ], - "title": "Global + Tile 2 Snippet" + "The camera stays steady throughout the clip. " + ] }, { - "id": 91, - "type": "LoadImage", + "id": 89, + "type": "PrimitiveStringMultiline", "pos": [ - -400, - 2810 + 196.66666666666706, + 2380.000000000009 ], "size": [ - 300, - 300 + 500, + 180 ], "flags": {}, - "order": 91, + "order": 63, "mode": 0, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "STRING", + "type": "STRING", + "slot_index": 0, "links": [ - 120 - ], - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": [], - "slot_index": 1 + 143 + ] } ], + "title": "Tile 2 Prompt Snippet", "properties": { - "Node name for S&R": "LoadImage" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false }, "widgets_values": [ - "reference_tile_3_late.png", - "image" - ], - "title": "Late Ref Tile 3 - Frame 704" + "The camera stays steady throughout the clip. " + ] }, { "id": 92, "type": "PrimitiveStringMultiline", "pos": [ - -60, - 2810 + 196.66666666666706, + 2710.000000000009 ], "size": [ 500, 180 ], "flags": {}, - "order": 92, + "order": 64, "mode": 0, - "inputs": [ - { - "name": "value", - "type": "STRING", - "link": null, - "widget": { - "name": "value" - } - } - ], + "inputs": [], "outputs": [ { "name": "STRING", "type": "STRING", + "slot_index": 0, "links": [ - 112 - ], - "slot_index": 0 + 147 + ] } ], + "title": "Tile 3 Prompt Snippet", "properties": { + "cnr_id": "comfy-core", + "ver": "0.22.1", "Node name for S&R": "PrimitiveStringMultiline", "Run widget replace on values": false }, "widgets_values": [ - "The motion settles into the ending pose." - ], - "title": "Tile 3 Prompt Snippet" + "The camera stays steady throughout the clip. " + ] }, { - "id": 176, - "type": "GetNode", + "id": 24, + "type": "LTXVLoopingReferenceSchedule", "pos": [ - 460, - 2990 + -144.99999999999997, + 680.0000000000002 ], "size": [ - 190, - 58 + 323.33333333333337, + 254 ], - "flags": { - "collapsed": true - }, - "order": 176, + "flags": {}, + "order": 76, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "reference_images", + "type": "IMAGE", + "link": 122 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": 15 + } + ], "outputs": [ { - "name": "STRING", + "name": "reference_images", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 16 + ] + }, + { + "name": "frame_count", + "type": "INT", + "slot_index": 1, + "links": [ + 17 + ] + }, + { + "name": "temporal_tile_size", + "type": "INT", + "slot_index": 2, + "links": [ + 18 + ] + }, + { + "name": "temporal_overlap", + "type": "INT", + "slot_index": 3, + "links": [ + 19 + ] + }, + { + "name": "reference_indices", "type": "STRING", + "slot_index": 4, "links": [ - 111 - ], - "slot_index": 0 + 20 + ] + }, + { + "name": "tile_count", + "type": "INT", + "slot_index": 5, + "links": [] } ], + "title": "Looping Timing + Reference Schedule", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "ComfyUI-LTXVideo", + "ver": "adfe33778b43ddc103bfb5feb2d4915b4a29df58", + "Node name for S&R": "LTXVLoopingReferenceSchedule" }, "widgets_values": [ - "global_prompt" - ], - "title": "Get_global_prompt" + 24, + 40, + 10, + 2.5, + 0.6666666666666666 + ] }, { - "id": 93, - "type": "StringConcatenate", + "id": 25, + "type": "Power Lora Loader (rgthree)", "pos": [ - 460, - 2810 + 601.6666666666666, + 668.3333333333331 ], "size": [ - 240, - 166 + 371.6666666666665, + 190 ], "flags": {}, - "order": 93, + "order": 97, "mode": 0, "inputs": [ { - "name": "string_a", - "type": "STRING", - "link": 111, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 112, - "widget": { - "name": "string_b" - } + "dir": 3, + "name": "model", + "type": "MODEL", + "link": 24 }, { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } + "dir": 3, + "name": "clip", + "type": "CLIP", + "link": null } ], "outputs": [ { - "name": "STRING", - "type": "STRING", + "dir": 4, + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, "links": [ - 128 - ], - "slot_index": 0 + 25 + ] + }, + { + "dir": 4, + "name": "CLIP", + "type": "CLIP", + "slot_index": 1, + "links": [] } ], + "title": "Extra LoRAs (rgthree)", "properties": { - "Node name for S&R": "StringConcatenate" + "cnr_id": "rgthree-comfy", + "ver": "1.0.2605082257", + "Show Strengths": "Single Strength", + "Match": "", + "Node name for S&R": "Power Lora Loader (rgthree)", + "aux_id": "rgthree/rgthree-comfy" }, "widgets_values": [ - "", - "", - " " - ], - "title": "Global + Tile 3 Snippet" + {}, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "LTX/ltx2.3-transition.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": true, + "lora": "LTX/LTX2.3_reasoning_I2V_V3.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": true, + "lora": "LTX/ltx23_nsfw_helper_multi_concept_lora_v2.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + {}, + "" + ] }, { - "id": 177, - "type": "GetNode", + "id": 70, + "type": "LTXVSeparateAVLatent", "pos": [ - -60, - 2090 + 4266.167768650217, + 179.90683229813612 ], "size": [ - 190, - 58 + 163.3499984741211, + 46 ], - "flags": { - "collapsed": true - }, - "order": 177, + "flags": {}, + "order": 136, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "av_latent", + "type": "LATENT", + "link": 92 + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "video_latent", + "type": "LATENT", + "slot_index": 0, "links": [ - 113 - ], - "slot_index": 0 + 164 + ] + }, + { + "name": "audio_latent", + "type": "LATENT", + "slot_index": 1, + "links": [ + 95 + ] } ], + "title": "Split Final AV", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVSeparateAVLatent" }, - "widgets_values": [ - "start_image" - ], - "title": "Get_start_image" + "widgets_values": [] }, { - "id": 94, - "type": "ImageBatch", + "id": 72, + "type": "LTXVAudioVAEDecode", "pos": [ - -60, - 2040 + 4507.834435316911, + 298.2401656314707 ], "size": [ - 220, + 203.00000610351563, 46 ], "flags": {}, - "order": 94, + "order": 138, "mode": 0, "inputs": [ { - "name": "image1", - "type": "IMAGE", - "link": 113 + "name": "samples", + "type": "LATENT", + "link": 95 }, { - "name": "image2", - "type": "IMAGE", - "link": 114 + "name": "audio_vae", + "type": "VAE", + "link": 96 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "Audio", + "type": "AUDIO", + "slot_index": 0, "links": [ - 115 - ], - "slot_index": 0 + 168 + ] } ], "properties": { - "Node name for S&R": "ImageBatch" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LTXVAudioVAEDecode" }, - "widgets_values": [], - "title": "Ref Batch 1" + "widgets_values": [] }, { - "id": 95, - "type": "ImageBatch", + "id": 201, + "type": "LTXVSpatioTemporalTiledVAEDecode", "pos": [ - -60, - 2370 + 4474.436369349805, + 14.113560928325793 ], "size": [ - 220, - 46 + 356.83331909179685, + 222 ], "flags": {}, - "order": 95, + "order": 137, "mode": 0, "inputs": [ { - "name": "image1", - "type": "IMAGE", - "link": 115 + "name": "vae", + "type": "VAE", + "link": 165 }, { - "name": "image2", - "type": "IMAGE", - "link": 116 + "name": "latents", + "type": "LATENT", + "link": 164 } ], "outputs": [ { - "name": "IMAGE", + "name": "image", "type": "IMAGE", "links": [ - 117 - ], - "slot_index": 0 + 169 + ] } ], "properties": { - "Node name for S&R": "ImageBatch" + "cnr_id": "ComfyUI-LTXVideo", + "ver": "531512f7286963dc7aff1fd8bf5556e95eae03af", + "Node name for S&R": "LTXVSpatioTemporalTiledVAEDecode" }, - "widgets_values": [], - "title": "Ref Batch 2" + "widgets_values": [ + 2, + 2, + 16, + 4, + true, + "auto", + "auto" + ], + "color": "#322", + "bgcolor": "#533" }, { - "id": 96, - "type": "ImageBatch", + "id": 202, + "type": "VHS_VideoCombine", "pos": [ - -60, - 2700 + 4490.295711012161, + 522.1199258804394 ], "size": [ - 220, - 46 + 340, + 310 ], - "flags": {}, - "order": 96, + "flags": { + "collapsed": false + }, + "order": 139, "mode": 0, "inputs": [ { - "name": "image1", + "name": "images", "type": "IMAGE", - "link": 117 + "link": 169 }, { - "name": "image2", - "type": "IMAGE", - "link": 118 + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": 168 + }, + { + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + }, + { + "name": "frame_rate", + "type": "FLOAT", + "widget": { + "name": "frame_rate" + }, + "link": 167 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 119 - ], - "slot_index": 0 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null } ], "properties": { - "Node name for S&R": "ImageBatch" + "cnr_id": "comfyui-videohelpersuite", + "ver": "1.7.9", + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "video/LTX/Looping", + "format": "video/h265-mp4", + "pix_fmt": "yuv420p10le", + "crf": 22, + "save_metadata": true, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "10E_doggy_pass2_00003-audio.mp4", + "subfolder": "video/LTX", + "type": "output", + "format": "video/h265-mp4", + "frame_rate": 24, + "workflow": "10E_doggy_pass2_00003.png", + "fullpath": "/home/jjj/ComfyUI/output/video/LTX/10E_doggy_pass2_00003-audio.mp4" + } + } }, - "widgets_values": [], - "title": "Ref Batch 3" + "color": "#222", + "bgcolor": "#000" }, { - "id": 97, - "type": "ImageBatch", + "id": 82, + "type": "LoadImage", "pos": [ - -60, - 3030 + -143.33333333333215, + 1761.741801910099 ], "size": [ - 220, - 46 + 300, + 314 ], "flags": {}, - "order": 97, + "order": 65, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "image1", + "name": "IMAGE", "type": "IMAGE", - "link": 119 + "slot_index": 0, + "links": [ + 114 + ] }, { - "name": "image2", - "type": "IMAGE", - "link": 120 + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] } ], + "title": "Late Ref Tile 0 - Frame 224", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "bouncing_girl_605313184377096_00001_.png", + "image" + ] + }, + { + "id": 85, + "type": "LoadImage", + "pos": [ + -145.00300540973635, + 2125.135243438204 + ], + "size": [ + 300, + 314 + ], + "flags": {}, + "order": 66, + "mode": 0, + "inputs": [], "outputs": [ { "name": "IMAGE", "type": "IMAGE", + "slot_index": 0, "links": [ - 121 - ], - "slot_index": 0 + 116 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] } ], + "title": "Late Ref Tile 1 - Frame 384", "properties": { - "Node name for S&R": "ImageBatch" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LoadImage" }, - "widgets_values": [], - "title": "Ref Batch 4" + "widgets_values": [ + "bouncing_girl_605313184377096_00003_.png", + "image" + ] }, { - "id": 178, - "type": "SetNode", + "id": 88, + "type": "LoadImage", "pos": [ - 180, - 3030 + -145.00300540973635, + 2483.4836038202257 ], "size": [ - 190, - 60 + 300, + 314 ], - "flags": { - "collapsed": true - }, - "order": 178, + "flags": {}, + "order": 67, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { "name": "IMAGE", "type": "IMAGE", - "link": 121 - } - ], - "outputs": [ + "slot_index": 0, + "links": [ + 118 + ] + }, { - "name": "*", - "type": "*", - "links": null + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] } ], + "title": "Late Ref Tile 2 - Frame 544", "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "reference_image_batch" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LoadImage" }, "widgets_values": [ - "reference_image_batch" - ], - "title": "Set_reference_image_batch" + "bouncing_girl_605313184377096_00001_.png", + "image" + ] }, { - "id": 179, - "type": "GetNode", + "id": 91, + "type": "LoadImage", "pos": [ - -210, - 1130 + -148.33934415280717, + 2845.1442596674137 ], "size": [ - 190, - 58 + 300, + 314 ], - "flags": { - "collapsed": true - }, - "order": 179, + "flags": {}, + "order": 68, "mode": 0, "inputs": [], "outputs": [ { "name": "IMAGE", "type": "IMAGE", + "slot_index": 0, "links": [ - 122 - ], - "slot_index": 0 + 120 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] } ], + "title": "Late Ref Tile 3 - Frame 704", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LoadImage" }, "widgets_values": [ - "reference_image_batch" - ], - "title": "Get_reference_image_batch" + "bouncing_girl_605313184377096_00003_.png", + "image" + ] }, { - "id": 98, - "type": "StringConcatenate", + "id": 1, + "type": "LoadImage", "pos": [ - 740, - 2150 + -213.33333333333331, + 6.666666666666667 ], "size": [ - 240, - 166 + 300, + 314 ], "flags": {}, - "order": 98, + "order": 69, "mode": 0, - "inputs": [ - { - "name": "string_a", - "type": "STRING", - "link": 123, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 124, - "widget": { - "name": "string_b" - } - }, - { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } - } - ], + "inputs": [], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, "links": [ - 125 - ], - "slot_index": 0 + 1, + 2, + 6 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] } ], "properties": { - "Node name for S&R": "StringConcatenate" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "LoadImage" }, "widgets_values": [ - "", - "", - " | " - ], - "title": "Join Tile Prompts 2" + "bouncing_girl_605313184377096_00003_.png", + "image" + ] }, { - "id": 99, - "type": "StringConcatenate", + "id": 80, + "type": "PrimitiveStringMultiline", "pos": [ - 740, - 2480 + 1146.6636612569266, + -20.027048687637212 ], "size": [ - 240, - 166 + 518.3333333333333, + 241.66666666666674 ], "flags": {}, - "order": 99, + "order": 70, "mode": 0, - "inputs": [ - { - "name": "string_a", - "type": "STRING", - "link": 125, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 126, - "widget": { - "name": "string_b" - } - }, - { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } - } - ], + "inputs": [], "outputs": [ { "name": "STRING", "type": "STRING", + "slot_index": 0, "links": [ - 127 - ], - "slot_index": 0 + 101, + 131 + ] } ], + "title": "Global Positive Prompt", "properties": { - "Node name for S&R": "StringConcatenate" + "cnr_id": "comfy-core", + "ver": "0.22.1", + "Node name for S&R": "PrimitiveStringMultiline", + "Run widget replace on values": false }, "widgets_values": [ - "", - "", - " | " - ], - "title": "Join Tile Prompts 3" + "Cinematic scene of a girl bouncing on a ball." + ] }, { - "id": 100, - "type": "StringConcatenate", + "id": 198, + "type": "BasicScheduler", "pos": [ - 740, - 2810 + 2607.960058402062, + 301.5423320275398 ], "size": [ - 240, - 166 + 271.305509971064, + 106 ], - "flags": {}, - "order": 100, + "flags": { + "collapsed": false + }, + "order": 80, "mode": 0, "inputs": [ { - "name": "string_a", - "type": "STRING", - "link": 127, - "widget": { - "name": "string_a" - } - }, - { - "name": "string_b", - "type": "STRING", - "link": 128, - "widget": { - "name": "string_b" - } - }, - { - "name": "delimiter", - "type": "STRING", - "link": null, - "widget": { - "name": "delimiter" - } + "name": "model", + "type": "MODEL", + "link": 171 } ], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "SIGMAS", + "type": "SIGMAS", "links": [ - 129 - ], - "slot_index": 0 + 162, + 170 + ] } ], "properties": { - "Node name for S&R": "StringConcatenate" + "cnr_id": "comfy-core", + "ver": "0.16.4", + "Node name for S&R": "BasicScheduler" }, "widgets_values": [ - "", - "", - " | " - ], - "title": "Join Tile Prompts 4" + "linear_quadratic", + 8, + 1 + ] }, { - "id": 180, - "type": "SetNode", + "id": 44, + "type": "LTXVLoopingSampler", "pos": [ - 1000, - 2850 + 2629.6550541924958, + 485.30626194510006 ], "size": [ - 190, - 60 + 319.0833435058594, + 590 ], - "flags": { - "collapsed": true - }, - "order": 180, + "flags": {}, + "order": 128, "mode": 0, "inputs": [ { - "name": "STRING", - "type": "STRING", - "link": 129 - } - ], - "outputs": [ + "name": "model", + "type": "MODEL", + "link": 53 + }, + { + "name": "vae", + "type": "VAE", + "link": 54 + }, + { + "name": "noise", + "type": "NOISE", + "link": 55 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 56 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 170 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 159 + }, + { + "name": "latents", + "type": "LATENT", + "link": 59 + }, + { + "name": "optional_cond_images", + "shape": 7, + "type": "IMAGE", + "link": 60 + }, + { + "name": "optional_guiding_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "optional_positive_conditionings", + "shape": 7, + "type": "CONDITIONING", + "link": 61 + }, + { + "name": "optional_negative_index_latents", + "shape": 7, + "type": "LATENT", + "link": 133 + }, + { + "name": "optional_normalizing_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, { - "name": "*", - "type": "*", - "links": null + "name": "temporal_tile_size", + "type": "INT", + "widget": { + "name": "temporal_tile_size" + }, + "link": 63 + }, + { + "name": "temporal_overlap", + "type": "INT", + "widget": { + "name": "temporal_overlap" + }, + "link": 64 + }, + { + "name": "optional_cond_image_indices", + "shape": 7, + "type": "STRING", + "widget": { + "name": "optional_cond_image_indices" + }, + "link": 65 } ], - "properties": { - "Node name for S&R": "SetNode", - "aux_id": "kijai/ComfyUI-KJNodes", - "previousName": "joined_tile_prompts" - }, - "widgets_values": [ - "joined_tile_prompts" - ], - "title": "Set_joined_tile_prompts" - }, - { - "id": 181, - "type": "GetNode", - "pos": [ - 1150, - 770 - ], - "size": [ - 190, - 58 - ], - "flags": { - "collapsed": true - }, - "order": 181, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "STRING", - "type": "STRING", + "name": "denoised_output", + "type": "LATENT", + "slot_index": 0, "links": [ - 130 - ], - "slot_index": 0 + 66 + ] } ], + "title": "Stage 1 — Generate", "properties": { - "Node name for S&R": "GetNode", - "aux_id": "kijai/ComfyUI-KJNodes" + "cnr_id": "ComfyUI-LTXVideo", + "ver": "adfe33778b43ddc103bfb5feb2d4915b4a29df58", + "Node name for S&R": "LTXVLoopingSampler" }, "widgets_values": [ - "joined_tile_prompts" + 240, + 80, + 1, + 0.5, + 1, + 1, + 1, + 1, + 0.15, + 0, + 1000, + "0, 224, 384, 544, 704", + 1, + false ], - "title": "Get_joined_tile_prompts" + "color": "#335533", + "bgcolor": "#223322" } ], "links": [ @@ -5944,14 +6192,6 @@ 0, "FLOAT" ], - [ - 5, - 5, - 0, - 113, - 0, - "BOOLEAN" - ], [ 6, 1, @@ -6152,14 +6392,6 @@ 1, "CONDITIONING" ], - [ - 31, - 125, - 0, - 22, - 2, - "FLOAT" - ], [ 32, 22, @@ -6256,14 +6488,6 @@ 2, "LATENT" ], - [ - 44, - 135, - 0, - 32, - 3, - "BOOLEAN" - ], [ 45, 32, @@ -6296,14 +6520,6 @@ 1, "VAE" ], - [ - 49, - 35, - 0, - 138, - 0, - "LATENT" - ], [ 50, 139, @@ -6360,22 +6576,6 @@ 3, "SAMPLER" ], - [ - 57, - 42, - 0, - 44, - 4, - "SIGMAS" - ], - [ - 58, - 43, - 0, - 44, - 5, - "GUIDER" - ], [ 59, 33, @@ -6400,14 +6600,6 @@ 9, "CONDITIONING" ], - [ - 62, - 149, - 0, - 44, - 10, - "LATENT" - ], [ 63, 146, @@ -6440,14 +6632,6 @@ 0, "LATENT" ], - [ - 67, - 50, - 1, - 150, - 0, - "LATENT" - ], [ 68, 50, @@ -6496,14 +6680,6 @@ 2, "LATENT" ], - [ - 74, - 155, - 0, - 52, - 3, - "BOOLEAN" - ], [ 75, 52, @@ -6512,14 +6688,6 @@ 0, "LATENT" ], - [ - 76, - 156, - 0, - 53, - 1, - "LATENT" - ], [ 77, 157, @@ -6649,308 +6817,452 @@ "LATENT" ], [ - 93, + 95, 70, - 0, - 71, + 1, + 72, 0, "LATENT" ], [ - 94, - 167, + 96, + 168, 0, - 71, + 72, 1, "VAE" ], [ + 101, + 80, + 0, + 170, + 0, + "STRING" + ], + [ + 103, + 11, + 0, + 81, + 0, + "CLIP" + ], + [ + 104, + 81, + 0, + 172, + 0, + "CONDITIONING" + ], + [ + 113, + 177, + 0, + 94, + 0, + "IMAGE" + ], + [ + 114, + 82, + 0, + 94, + 1, + "IMAGE" + ], + [ + 115, + 94, + 0, + 95, + 0, + "IMAGE" + ], + [ + 116, + 85, + 0, 95, - 70, 1, - 72, + "IMAGE" + ], + [ + 117, + 95, 0, - "LATENT" + 96, + 0, + "IMAGE" ], [ + 118, + 88, + 0, + 96, + 1, + "IMAGE" + ], + [ + 119, 96, - 168, 0, - 72, + 97, + 0, + "IMAGE" + ], + [ + 120, + 91, + 0, + 97, 1, - "VAE" + "IMAGE" ], [ + 121, 97, - 71, 0, - 73, + 178, + 0, + "IMAGE" + ], + [ + 122, + 179, + 0, + 24, 0, "IMAGE" ], [ + 125, 98, - 72, 0, - 73, - 1, - "AUDIO" + 99, + 0, + "STRING" ], [ + 127, 99, - 169, 0, - 73, - 2, - "FLOAT" + 100, + 0, + "STRING" ], [ + 129, 100, - 73, 0, - 74, + 180, 0, - "VIDEO" + "STRING" ], [ - 101, - 80, - 0, - 170, + 130, + 181, 0, + 81, + 1, "STRING" ], [ - 102, - 171, + 131, + 80, 0, 20, 1, "STRING" ], [ - 103, - 11, - 0, - 81, + 132, + 50, 1, - "CLIP" + 53, + 1, + "LATENT" ], [ - 104, - 81, + 133, + 35, 0, - 172, + 44, + 10, + "LATENT" + ], + [ + 134, + 183, 0, - "CONDITIONING" + 81, + 2, + "FLOAT" + ], + [ + 135, + 183, + 0, + 22, + 2, + "FLOAT" ], [ - 105, + 136, 173, 0, - 84, + 184, 0, "STRING" ], [ - 106, + 137, 83, 0, - 84, + 184, 1, "STRING" ], [ - 107, + 138, + 184, + 0, + 98, + 0, + "STRING" + ], + [ + 139, 174, 0, - 87, + 185, 0, "STRING" ], [ - 108, + 140, 86, 0, - 87, + 185, + 1, + "STRING" + ], + [ + 141, + 185, + 0, + 98, 1, "STRING" ], [ - 109, + 142, 175, 0, - 90, + 186, 0, "STRING" ], [ - 110, + 143, 89, 0, - 90, + 186, 1, "STRING" ], [ - 111, + 144, + 186, + 0, + 99, + 1, + "STRING" + ], + [ + 145, + 187, + 0, + 100, + 1, + "STRING" + ], + [ + 146, 176, 0, - 93, + 187, 0, "STRING" ], [ - 112, + 147, 92, 0, - 93, + 187, 1, "STRING" ], [ - 113, - 177, + 149, + 188, 0, - 94, + 191, + 1, + "FLOAT" + ], + [ + 150, + 191, 0, - "IMAGE" + 192, + 0, + "GUIDER_PARAMETERS" ], [ - 114, - 82, + 151, + 189, 0, - 94, + 192, 1, - "IMAGE" + "FLOAT" ], [ - 115, - 94, + 152, + 194, 0, - 95, + 193, 0, - "IMAGE" + "MODEL" ], [ - 116, - 85, + 153, + 196, 0, - 95, + 193, 1, - "IMAGE" + "CONDITIONING" ], [ - 117, - 95, + 154, + 195, 0, - 96, + 193, + 2, + "CONDITIONING" + ], + [ + 155, + 192, 0, - "IMAGE" + 193, + 3, + "GUIDER_PARAMETERS" ], [ - 118, - 88, + 156, + 189, 0, - 96, - 1, - "IMAGE" + 43, + 3, + "FLOAT" ], [ - 119, - 96, + 157, + 43, 0, - 97, + 197, 0, - "IMAGE" + "GUIDER" ], [ - 120, - 91, + 158, + 193, 0, - 97, + 197, 1, - "IMAGE" + "GUIDER" ], [ - 121, - 97, - 0, - 178, + 159, + 197, 0, - "IMAGE" + 44, + 5, + "GUIDER" ], [ - 122, - 179, - 0, - 24, + 160, + 199, + 1, + 200, 0, "IMAGE" ], [ - 123, - 84, + 162, + 198, 0, - 98, + 199, 0, - "STRING" + "SIGMAS" ], [ - 124, - 87, + 164, + 70, 0, - 98, + 201, 1, - "STRING" + "LATENT" ], [ - 125, - 98, + 165, + 167, 0, - 99, + 201, 0, - "STRING" + "VAE" ], [ - 126, - 90, + 167, + 169, 0, - 99, - 1, - "STRING" + 202, + 4, + "FLOAT" ], [ - 127, - 99, - 0, - 100, + 168, + 72, 0, - "STRING" + 202, + 1, + "AUDIO" ], [ - 128, - 93, + 169, + 201, 0, - 100, - 1, - "STRING" + 202, + 0, + "IMAGE" ], [ - 129, - 100, - 0, - 180, + 170, + 198, 0, - "STRING" + 44, + 4, + "SIGMAS" ], [ - 130, - 181, + 171, + 142, 0, - 81, + 198, 0, - "STRING" + "MODEL" ] ], "groups": [ @@ -6960,11 +7272,10 @@ "bounding": [ -240, -90, - 790, - 1870 + 780.0000000000002, + 1520 ], "color": "#6a8b80", - "font_size": 24, "flags": {} }, { @@ -6973,11 +7284,10 @@ "bounding": [ 560, -90, - 670, - 1430 + 521.6666666666663, + 1251.6666666666665 ], "color": "#8a6d3b", - "font_size": 24, "flags": {} }, { @@ -6986,92 +7296,103 @@ "bounding": [ 1110, -110, - 820, - 1260 + 606.2819742202632, + 1270.0180324584253 ], "color": "#76518a", - "font_size": 24, "flags": {} }, { "id": 4, "title": "Dimensions + Timing Buses", "bounding": [ - 440, - 960, - 980, - 590 + 573.3333333333335, + 1191.6666666666656, + 870, + 423.33333333333326 ], "color": "#5b7e9c", - "font_size": 24, "flags": {} }, { "id": 5, "title": "Stage 1 Base AV", "bounding": [ - 1710, - -120, - 1540, - 1490 + 2151.9732184599097, + -94.9729513123622, + 888.333333333333, + 1258.3333333333333 ], "color": "#51724d", - "font_size": 24, "flags": {} }, { "id": 6, "title": "Upscale + Stage 2", "bounding": [ - 3410, - -120, - 1540, - 1270 + 3061.9221264943585, + -93.31530087490815, + 1159.3147665798442, + 1254.972951312362 ], "color": "#555d96", - "font_size": 24, "flags": {} }, { "id": 7, "title": "Final Output", "bounding": [ - 5110, - 250, + 4249.501101983566, + -88.42650103519672, 650, 1120 ], "color": "#9b6c4b", - "font_size": 24, "flags": {} }, { "id": 8, "title": "Late References + Tile Snippets", "bounding": [ - -440, - 1740, - 1670, - 1450 + -183.33333333333198, + 1639.9999999999955, + 1387.8254190876912, + 1553.5196687370603 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 9, + "title": "MultiModal Guider (optional)", + "bounding": [ + 1764.7741596927922, + -94.7162801683468, + 349.1550080396755, + 1255.7299361429612 ], "color": "#3f789e", - "font_size": 24, "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.6, + "scale": 0.6172339913336811, "offset": [ - 0, - 0 + 491.1043748838338, + 477.8909629454897 ] }, "info": { "name": "LTX-2.3 Two-Pass AV I2V Looping Late Refs", "description": "Two-pass AV I2V workflow for long video. Stage 1 generates at base resolution with temporal tiling. Stage 2 spatially upscales and refines. Late soft reference images and per-tile prompt snippets maintain continuity across temporal tiles." - } + }, + "frontendVersion": "1.43.18", + "VHS_latentpreview": true, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true }, "version": 0.4 } \ No newline at end of file diff --git a/looping_sampler.py b/looping_sampler.py index 5d0eb57..c438dac 100644 --- a/looping_sampler.py +++ b/looping_sampler.py @@ -245,7 +245,7 @@ def INPUT_TYPES(s): "BOOLEAN", { "default": False, - "tooltip": "If enabled, writes the accumulated latent to output/ltxv_looping_ckpt_v{v}_h{h}.safetensors after each temporal tile, so a mid-run crash leaves a decodable partial result on disk for salvage. The file is overwritten each tile (the latent is cumulative).", + "tooltip": "If enabled, after each temporal tile writes the accumulated latent as ComfyUI .latent files into the input folder (ltxv_looping_ckpt_v{v}_h{h}_video.latent, and _audio.latent for AV), so a mid-run crash leaves a decodable partial result. Reload with the stock LoadLatent node (+ LTXVConcatAVLatent for AV). Overwritten each tile (the latent is cumulative).", }, ), }, @@ -653,11 +653,17 @@ def _save_chunk_checkpoint( """Salvage checkpoint: persist the accumulated latent after each temporal chunk so a mid-run crash leaves a decodable partial result on disk. + Writes ComfyUI-native ``.latent`` files (one for video, one for audio if + present) into the ``input`` directory, so recovery needs no custom node: + reload with the stock ``LoadLatent`` node(s) and, for AV, recombine with + ``LTXVConcatAVLatent``. The files carry the ``latent_format_version_0`` + marker, so ``LoadLatent`` round-trips them with multiplier 1.0. + The latent is cumulative, so each write supersedes the previous one; we - overwrite a single per-spatial-tile file and rename atomically to avoid a - corrupt file if the process dies mid-write. Best-effort — a checkpoint - failure must never abort generation. To recover, load the .safetensors - ("video"/"audio" tensors) and VAE-decode whatever finished. + overwrite a single per-spatial-tile file per stream and rename atomically + (.tmp -> final) to avoid a corrupt file if the process dies mid-write. + Best-effort — a checkpoint failure must never abort generation. See + CLAUDE.md ("save_checkpoints salvage toggle") for the recovery workflow. """ try: import os @@ -671,29 +677,31 @@ def _save_chunk_checkpoint( else: video, audio = samples, accumulated_audio - sd = {"video": video.detach().cpu().contiguous()} - metadata = { - "chunk_index": str(chunk_index), - "spatial_v": str(tile_config.v), - "spatial_h": str(tile_config.h), - "video_shape": str(list(video.shape)), - } + in_dir = folder_paths.get_input_directory() + base = f"ltxv_looping_ckpt_v{tile_config.v}_h{tile_config.h}" + + def _write_latent(tensor, suffix): + # ComfyUI .latent format: LoadLatent reads "latent_tensor" and, + # when "latent_format_version_0" is present, uses multiplier 1.0. + payload = { + "latent_tensor": tensor.detach().to("cpu", torch.float32).contiguous(), + "latent_format_version_0": torch.tensor([]), + } + path = os.path.join(in_dir, f"{base}_{suffix}.latent") + tmp = path + ".tmp" + comfy.utils.save_torch_file(payload, tmp) + os.replace(tmp, path) + return os.path.basename(path) + + written = [_write_latent(video, "video")] if audio is not None: - sd["audio"] = audio.detach().cpu().contiguous() - metadata["audio_shape"] = str(list(audio.shape)) + written.append(_write_latent(audio, "audio")) - path = os.path.join( - folder_paths.get_output_directory(), - f"ltxv_looping_ckpt_v{tile_config.v}_h{tile_config.h}.safetensors", - ) - tmp_path = path + ".tmp" - comfy.utils.save_torch_file(sd, tmp_path, metadata=metadata) - os.replace(tmp_path, path) print( f"[LoopingSampler] Saved salvage checkpoint (chunk {chunk_index}, " f"video={list(video.shape)}" + (f", audio={list(audio.shape)}" if audio is not None else "") - + f") -> {path}" + + f") -> {', '.join(written)} in input/" ) except Exception as e: print(