LTX Flow - First/Last Guide
The node that makes LTX 2.3 'Frames to Video' actually work
- positive
- negative
- vae
- latent
- first_frame
- last_frame
- positive
- negative
- latent
This is the important one. The README doesn't mince words about it, and neither should I: First/Last Guide is the node that turns LTX 2.3 into a "give me a start image and an end image, invent the motion between" machine. Drop two images in, and the model animates the transition - which is exactly what people mean when they talk about Frames-to-Video style generation, and it's been LTX's best trick since keyframe conditioning landed in 0.9.5.
The stock ComfyUI way to lock a frame into an LTX generation is the LTXVAddGuide node, and it's fiddly: you have to encode the image, work out where your frame actually lands in the latent (LTX's VAE compresses time, so frame indices don't map 1:1), and append it to the conditioning yourself. This node wraps two of those injections into one, does the index math for you, and - the part people miss - handles audio+video latents.
How it works
It imports LTXVAddGuide straight from ComfyUI's built-in comfy_extras.nodes_lt, so there's no extra node pack to install for this. For each image it encodes it with your video VAE, resolves the target frame through the latent's time scaling, and appends a keyframe to your positive conditioning, negative conditioning, and latent. first_frame goes to frame 0, last_frame to frame last_frame_index (default -1, the final frame of the latent).
The audio bit is what surprises people on 2.3. LTX-2.3 generates synchronized audio+video, and if you're running the audio path your latent is a combined AV latent, not a plain video one. First/Last Guide detects that, splits the latent, applies the guides to the video stream only, and recombines - so your audio conditioning survives. A lot of guide nodes out there don't bother; this one does.
The inputs that matter
positive/negative- your conditioning, straight from the CLIP/text-encoder path.vae- the LTX video VAE. This is how your images get encoded into the latent space.latent- yourEmptyLTXVLatentVideo(or combined AV) latent.first_frame/last_frame- the two images. Usually the output of two Extract Frame nodes, or the Qwen Edit Bridge's outputs.first_strength/last_strength- 1.0 locks the frame hard; drop toward 0.5 if the model is over-anchoring and producing a slide-show instead of motion.last_frame_index--1means the final frame of the latent. Only touch this if you're doing something exotic like a mid-clip insert.
Outputs are your guided positive, negative, and latent - feed all three into the sampler path.
Install
Search "comfyui-extend" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/balarooty/comfyui-extend
Restart ComfyUI. The pack itself has no Python dependencies; the real requirements are ComfyUI being recent enough to ship comfy_extras.nodes_lt (it does, since native LTX support) and, for the full workflow, the LTX 2.3 checkpoint and Gemma text encoder.
Common issues
- "Guide frame resolves past the latent length." You asked
last_frame_indexto point past the end of your latent. Shrink the latent's frame count or fix the index. - Stiff, barely-moving output. Both strengths at 1.0 can pin the clip too tightly, especially for long generations. Dial them to ~0.8 and let the motion breathe.
- It needs a plain image per slot. Feed a whole video batch into
first_frameand only the first frame is used - wire an Extract Frame or the Bridge first.
The pack's workflows/04_ltxflow_first_last_wdc_ltx23.json is the reference first/last workflow (built on the WhatDreamsCost LTXSequencer setup), and the README singles it out as the one to use for your first real test. Run that, get one clip working, then start hacking the guide strengths.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| latent | LATENT | — | |
| first_frame | IMAGE | — | |
| last_frame | IMAGE | — | |
| first_strength | FLOAT | 1.000–1 | — |
| last_strength | FLOAT | 1.000–1 | — |
| last_frame_index | INT | -1-100000–100000 | -1 means the final frame of the LTX latent. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |