Nodes/comfui-helto-ltx/LTX 2.3 Image Guides (All-in-One)
ComfyUI Node

LTX 2.3 Image Guides (All-in-One)

The all-in-one node

By helto4real·Created 4 months ago·Updated 2 months ago· 0
LTX 2.3 Image Guides (All-in-One)
  • positive
  • negative
  • vae
  • latent
  • start_images
  • positive
  • negative
  • latent
width768
height512
half_size_first_passfalse
fps24.00
num_frames97
timing_modeframe
resize_modecontain
duplicate_policyerror
pad_color0,0,0
img_compression35
global_strength1.00
lock_start_framesfalse
lock_end_framefalse
start_images_strength0.85
guides_json{"version":1,"guides":[]}

LTX 2.3 is a first-frame/last-frame model: you feed it stills, it animates between them, and where you drop those stills decides what the video looks like. Doing that with stock ComfyUI means threading images through native LTXVAddGuide nodes and wiring the conditioning yourself, and if you've ever tried it, you know the graph gets ugly fast. LTX 2.3 Image Guides (All-in-One) from the comfui-helto-ltx pack collapses the whole thing into one node with a visual editor on it. Pick images, set a frame or a time for each, and it hands you guided conditioning plus a latent ready for the sampler.

How it actually works

The pack doesn't reimplement LTX guide logic - it rides ComfyUI's native path from comfy_extras.nodes_lt. When you run the node it does roughly this:

  • loads your guide images from disk, resizes them to the target width/height (contain, pad, stretch, or crop), and optionally runs them through native LTXV image compression (img_compression, default 35 - the same default ComfyUI's LTXV preprocess node uses);
  • VAE-encodes them and appends them to the latent tensor as native LTXV guides, updating the positive and negative conditioning with the usual keyframe_idxs, guide_attention_entries, and noise_mask metadata;
  • if there's no latent connected, it creates an empty one for you.

Because guide frames are appended to the latent tensor rather than written into the video, you still need a native LTXVCropGuides node after sampling to strip them back out before decode. Forget that and you'll wonder where your extra frames came from.

The inputs that matter

positive and negative are your conditioning from a CLIP encode - the node augments them with the guide metadata and passes them through. vae is the LTX video VAE. The three you'll actually touch:

  • num_frames (default 97) - the video length in pixel frames. This is LTX, so it must be 8*n + 1 (97, 105, 113…). Feed it a bad number and the node errors loudly instead of silently making fewer frames.
  • timing_mode - frame (default) or seconds. In seconds mode, a guide's position is multiplied by fps to find its frame.
  • global_strength - a master multiplier on every guide's strength. Turn it down if the video is glued to your stills and never moves, which is the classic over-conditioning failure.

A couple of genuinely useful options hide further down. lock_start_frames and lock_end_frame write the first/final frame into the latent instead of appending them as references - stronger initialization, but a VAE-level lock rather than a pixel-perfect copy, so it can distort the ending. If your last frames look weird, disable lock_end_frame and use a normal -1 guide instead. half_size_first_pass halves the internally-created latent for 2x upscale workflows, and only applies when no latent is connected - a connected latent always wins. The optional start_images takes an IMAGE batch (video frames, say) and applies it as a multi-frame guide at frame 0.

Outputs and wiring

Three outputs: positive, negative, and latent. Feed positive/negative into the guider's positive/negative, and latent into the sampler's latent_image, then sample through the normal LTXV path and crop the guides after.

Install

It ships in the comfui-helto-ltx pack, which needs a ComfyUI with native LTXV support (any recent build) and nothing else - no extra Python dependencies, no PyTorch reinstalls. Via ComfyUI Manager, search "comfui-helto-ltx". Or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/helto4real/comfui-helto-ltx.git

Restart ComfyUI. You still need the LTX 2.3 checkpoint (dev or distilled; the 22B model really wants quantized weights plus 64GB system RAM on consumer cards). Guide images live in ComfyUI's input folder by default, and the node's UI can manage its own configured folders - workflows store folder aliases and filenames, not absolute paths, so you can move machines without breaking the graph.

Common gotchas

  • Wrong frame count out. Check num_frames is 8*n + 1, and if you connected a latent, that latent's shape - not the widget - decides the length.
  • Extra frames in the output. You skipped LTXVCropGuides after sampling. Add it.
  • An image at -1 doesn't land on the final frame. Make sure num_frames matches the active latent; negative positions count back from the end.
  • Over-stiff video. Lower global_strength before you start deleting guides.

For a two-stage low-res/high-res workflow this all-in-one is the wrong tool - that's what the Manager + Apply pair is for. But for a single pass, it's the fastest way to go from "here are my reference stills" to "guided latent."

CategoryLTX 2.3

Inputs (20)

NameTypeDefaultDescription
positiveCONDITIONINGPositive conditioning to augment with native LTXV guide metadata.
negativeCONDITIONINGNegative conditioning to augment with matching native LTXV guide metadata.
vaeVAELTXV VAE used to encode selected guide images and optional start image sequences.
widthINT76864–16384Target output size for this stage. With half_size_first_pass enabled and no latent connected, the internal latent uses half this value.
heightINT51264–16384Target output size for this stage. With half_size_first_pass enabled and no latent connected, the internal latent uses half this value.
half_size_first_passBOOLEANfalseFor 2x LTX upscale workflows: when no latent is connected, create and guide a half-size first-pass latent. Width/height should be the final target size.
fpsFLOAT24.001–240Frames per second used when timing_mode is seconds.
num_framesINT971–16384Pixel frame count used for timing, negative frame positions, and internally-created empty latents. Native LTXV lengths must be 8*n + 1, for example 97, 105, 113.
timing_modeCOMBOframeInterpret manual guide positions as frame indexes or seconds.
resize_modeCOMBOcontainHow guide images are resized before VAE encoding. contain/pad preserves aspect ratio with padding.
duplicate_policyCOMBOerrorHow to handle manual guide images that resolve to the same frame.
pad_colorSTRING0,0,0RGB padding color for contain/pad resize mode. Accepts r,g,b or #rrggbb.
img_compressionINT350–100Native LTXV image compression applied before guide encoding. Set 0 to disable.
global_strengthFLOAT1.000–1Multiplier applied to every manual guide strength and start sequence strength.
lock_start_framesBOOLEANfalseWhen enabled, frame 0 guides and start_images are written into the beginning video latent instead of only appended as guide references. VAE-level lock, not pixel-perfect copy.
lock_end_frameBOOLEANfalseWhen enabled, a manual guide resolving to the final frame is written into the final video latent instead of only appended as a guide reference. VAE-level lock, not pixel-perfect copy.
start_images_strengthFLOAT0.850–1Strength for the optional start image sequence before global_strength is applied.
guides_jsonSTRING{"version":1,"guides":[]}Hidden serialized guide data used by the custom UI and saved in workflows.
latentoptLATENTOptional existing video latent. When connected, its shape is used and half_size_first_pass does not resize it.
start_imagesoptIMAGEOptional IMAGE batch from a video source. Applied as a native multi-frame guide starting at frame 0.

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT