Nodes/ComfyUI-GGUF-Loader/LTX-2.3 Video to Video (IC-LoRA) ⚡
ComfyUI Node

LTX-2.3 Video to Video (IC-LoRA) ⚡

LTX-2.3 video-to-video in one node instead of ten

By ChrisColeTech·Created 18 days ago·Updated about 23 hours ago· 7
LTX-2.3 Video to Video (IC-LoRA) ⚡
  • model
  • clip
  • vae
  • audio_vae
  • images
  • video
  • reference_audio
  • model
  • positive
  • negative
  • latent
  • frame_rate
modet2v
prompt
negative_prompt
width768
height512
length121
frame_rate24.00
batch_size1
image_strength0.70
ic_loranone
ic_lora_strength1.00
guide_strength1.00
keep_original_audiotrue
latent_downscale_factor1
length_from_audiotrue
editanything_loranone
editanything_lora_strength1.00
editanything_module_pathnone
reference_modefirst_frame_only

The official LTX-2.3 video-to-video workflow is a ~10-node tangle: ResizeImageMaskNodeGetImageSizeEmptyLTXVLatentVideoLTXVConditioningLTXAddVideoICLoRAGuideVAEEncodeAudioLTXVSetAudioRefTokensLTXVConcatAVLatent, all hand-wired. This node is that entire subgraph collapsed into one prep step, with LoRA selection and EditAnything reference-conditioning built straight in. It's the highest-leverage node in the LTX-2.3 section of this pack.

LTX-2.3 is Lightricks' 22B joint audio-video model (March 2026) - the release the community finally called the best locally-run video model overall, not just the fastest. Its vid2vid mechanism is genuinely different from the img2img you know: the source video's frames get VAE-encoded and appended as extra reference tokens the model cross-attends to at the same timeline position as what it's generating (comfy-core's keyframe_idxs RoPE mechanism), then cropped back off after sampling. Not partially denoised, not held as a first frame. The IC-LoRA task adapter you select (beard removal, HDR grading, motion tracking - anything trained on whole-video reference conditioning) is what makes those guide tokens mean something.

The inputs that matter

  • mode (required) - t2v, i2v, or v2v, validated against what's actually connected. i2v needs images; v2v needs video; t2v rejects either. images and video can still layer on top of each other - a still for identity/framing plus a clip for the transform.
  • video + ic_lora - the vid2vid core. ic_lora loads the task adapter onto model inside this node (stock LoraLoaderModelOnly, no external wiring) at ic_lora_strength (default 1.0), then injects the video as guide tokens. With ic_lora="none", a connected video only supplies length/frame_rate/audio - useful for A/B-ing whether the adapter is doing anything. guide_strength (1.0) is how hard the reference is held.
  • keep_original_audio (on) - keeps the source clip's own audio untouched; off lets the model generate new audio.
  • latent_downscale_factor (1.0) - only for rare IC-LoRAs trained on a downscaled reference grid. Check the LoRA's card; every official example uses 1.0. Except - and this is a real trap - the union-control LoRAs with ref0.5 in the name want 2.0, and the width/height must be divisible by 64 so the half-res guide lands on whole latents.
  • editanything_lora + editanything_module_path - the EditAnything subject-injection path (see the standalone patch node). Must be set together; mutually exclusive with ic_lora. With it active, images[0] becomes the reference photo to inject (plain/white background strongly recommended), and the prompt is an imperative ADD instruction: "Add a detailed appearance, placement in frame, relation to the scene." Sample at half your target resolution, then upscale and refine - at full res the source-video guide dominates and the add never appears.

Outputs are model, positive, negative, latent, frame_rate. The model comes out possibly patched - always take it from this node when a selector is set. Feed into LTX-2.3 KSampler (distilled), then LTX-2.3 Crop Video Guide (strips the appended frames) before LTX-2.3 AV Decode. Wire frame_rate into every decode fps.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install --upgrade gguf

Restart. You'll also want the LTX-2.3 A/V kit files (GGUF DiT or fp8 safetensors, Gemma-3-12B encoder, both VAEs) from the model links in the README, plus the IC-LoRAs you use (from Lightricks or DeepBeepMeep/LTX-2). Under 🤖 CCTech/LTX-2.3.

Gotchas

The frame math is non-negotiable: width/height divisible by 32, frame count divisible by 8 plus 1 (121 is the default for a reason). When video is connected, length and frame_rate are taken from it, overriding your widgets. And if a v2v output looks like the adapter isn't firing, first check ic_lora isn't none, then check latent_downscale_factor against the LoRA's card.

Category🤖 CCTech/LTX-2.3

Inputs (26)

NameTypeDefaultDescription
modelMODEL
clipCLIP
modeCOMBOt2vWhich base behavior this call is. t2v: images/video must be disconnected. i2v: images required (video may still layer on top as an IC-LoRA guide). v2v: video required (images may still layer on top as a first-frame hold).
vaeVAEThe loader's video_vae output.
audio_vaeVAEThe loader's audio_vae output.
promptSTRINGWith ic_lora set: describe the OUTPUT you want - most IC-LoRAs are trained on an instruction-style caption describing the transformed result. With EditAnything: an imperative ADD instruction, e.g. 'Add a <detailed appearance> <placement in frame> <relation to the scene>' (the official trained format - the reference photo supplies identity, the prompt supplies placement/attributes). Otherwise: describe the scene and its motion, a caption not an instruction.
negative_promptSTRING
widthINT76864–16384
heightINT51264–16384
lengthINT1219–16384Frames; 8k+1 tiles exactly. Ignored (taken from the clip instead) when video is connected.
frame_rateFLOAT24.001–120Ignored (taken from the clip instead) when video is connected.
batch_sizeINT11–4096
imagesoptIMAGEFirst frame(s) for image-to-video (ordinary i2v hold, independent of video/ic_lora below) - resized and CENTER-CROPPED to width x height. With EditAnything active, images is instead the REFERENCE photo (the subject to inject - one photo, plain/white background strongly recommended, that's what the mechanism was trained on): appended as clean reference tokens the model attends to, NOT held as a first frame (image_strength is ignored under EditAnything).
image_strengthoptFLOAT0.700–1images only. How much of the init image(s) to keep. 0.7 is the official value; 1.0 locks the first frames hard.
videooptVIDEOSource clip for IC-LoRA video-to-video (see ic_lora) and/or its original audio (see keep_original_audio). Sets length/frame_rate from itself.
ic_loraoptCOMBOnonevideo only. The IC-LoRA task adapter (beard removal, HDR grading, motion tracking, ...) - loaded onto model HERE (no external LoraLoaderModelOnly needed) at ic_lora_strength, then drives the actual vid2vid guide-injection mechanism. "none" = video is used only for length/frame_rate/original audio, ignored for guidance - useful for A/B-ing whether the IC-LoRA is doing anything.
ic_lora_strengthoptFLOAT1.00-100–100ic_lora only. Same as LoraLoaderModelOnly's strength_model.
guide_strengthoptFLOAT1.000–1ic_lora only. How strongly the reference is held. 1.0 = fully held (official default).
keep_original_audiooptBOOLEANtruevideo only. On = output keeps the source clip's own audio unchanged. Off = the model generates new audio from scratch instead.
latent_downscale_factoroptFLOAT11–10ic_lora only. Only for IC-LoRAs trained on a downscaled reference grid (rare - check the LoRA's model card / reference_downscale_factor metadata; most, including every official example, use 1.0).
reference_audiooptAUDIODrive generation from a voice/sound clip with no source video (LTXV23ImgToVideo's A2V path). Not meant to be combined with video+keep_original_audio.
length_from_audiooptBOOLEANtrueWith reference_audio and no video: size the video to the clip.
editanything_loraoptCOMBOnoneThe EditAnything .standard.safetensors LoRA half - loaded onto model HERE at editanything_lora_strength (no external LoraLoaderModelOnly needed). "none" = off. Needs editanything_module_path set too - either alone does nothing useful, they're trained jointly.
editanything_lora_strengthoptFLOAT1.00-100–100editanything_lora only. Same as LoraLoaderModelOnly's strength_model.
editanything_module_pathoptCOMBOnoneThe EditAnything .module.safetensors file (NOT a LoRA - real extra layers, loaded by this pack's own patch mechanism), from the loras folder. "none" = off. Needs editanything_lora and `images` connected too.
reference_modeoptCOMBOfirst_frame_onlyNeeds editanything_module_path set. Controls how `images`'s batch is used as the EditAnything reference (independent of its ordinary i2v-hold use). per_batch_item: each image in the batch is encoded and used as its OWN distinct reference (not blended) - image i drives sample i of the sampling batch, tiled/truncated if the counts don't match. first_frame_only (default here): use only images[0], ignore the rest - the vid2vid recipe (one clean reference identity against a single video).

Outputs (5)

NameTypeDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
frame_rateFLOAT