LTX First Last Frame Control (TTP)
Pin the start and end of an LTX video
- vae
- latent
- first_image
- last_image
- latent
If you've generated more than a handful of LTX clips, you already know the model's weakness: it's blindingly fast and often has no idea where it's going. You get a great opening frame and then the video wanders off somewhere unrelated by the end. LTX First Last Frame Control is TTPlanetPig's answer to that - you hand it an image for the start, an image for the end (or just one of them), and it anchors the latent so the sampler has to build a video that actually connects the two.
How it works. You feed it your vae and an already-created latent (the same one you'd normally hand a KSampler for an LTX run). The node VAE-encodes first_image and/or last_image and writes them into the corresponding frame positions of that latent, weighted by first_strength and last_strength. Both strengths run 0.0 to 1.0: the author's own tooltip is blunt about it - 1.0 means the frame is fully replaced by your image, 0.0 means it isn't embedded at all. You can use just first_image, just last_image, or both; they're optional, so a half-anchored video (start pinned, end free) is a legitimate use case. The output is a latent you pass straight into your sampler.
Worth knowing before you install this: LTX-2 shipped native first/last-frame support around the same time this node got attention on Reddit (a 197-point post titled "TTP Toolset: LTX 2 first and last frame control capability"), and the top comment on that thread points out you don't strictly need a custom node anymore - vanilla ComfyUI's LTXVAddGuide node does it out of the box, and can even place guide frames at arbitrary points mid-video, not just start/end. So if you're on a recent LTX-2 setup, it's worth trying the built-in path first. What this node buys you over hand-wiring LTXVAddGuide is convenience: one node, two strength dials, done - instead of assembling the VAE-encode-and-latent-write plumbing yourself.
Install. Easiest route is ComfyUI Manager - search "Comfyui_TTP_Toolset" and install. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/TTPlanetPig/Comfyui_TTP_Toolset, then restart ComfyUI. No extra model downloads for this specific node - it just needs the vae from whatever LTX checkpoint you're already sampling with, so make sure that VAE actually matches your model (mixing an LTX-2 VAE with an LTX-2.3 latent, or vice versa, will not go well).
Where people get burned. From the same Reddit thread, a couple of real, useful signals. First: cranking first_strength/last_strength to 1.0 gives you a hard anchor, and hard anchors on any first/last-frame video model tend to produce what one commenter called a "video transition" rather than continuous motion - the clip looks like it cuts to the end frame instead of arriving there naturally. If your output feels like a jump cut, back the strength off to something like 0.7–0.85 and let the model have a little more freedom, or just try a few more seeds - as one reply put it, that "transition" look is a known problem with first/last-frame conditioning generally, not a bug specific to this node, and it responds to a better prompt or a luckier seed as much as to settings.
Second: general LTX-2 first/last-frame workflows in that thread produced some genuinely bad output for people - static frames, morphing artifacts, characters that just don't move. That's not this node's fault specifically (it showed up on the native LTXVAddGuide path too), but it's a fair warning that FLF conditioning on LTX-2 is still a bit finicky as a category. Adding "static frame, static image, still frame" to your negative prompt is the community's go-to mitigation if you're getting frozen clips.
One more practical note: this node lives in the conditioning/video_models category, so if you can't find it, check there rather than under Image or Sampling - it's easy to go looking in the wrong menu on a pack this large.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| vae | VAE | — | |
| latent | LATENT | — | |
| first_strength | FLOAT | 1.000–1 | 首帧嵌入强度 (1.0=完全替换, 0.0=不嵌入) |
| last_strength | FLOAT | 1.000–1 | 尾帧嵌入强度 (1.0=完全替换, 0.0=不嵌入) |
| first_imageopt | IMAGE | 首帧图像(可选) | |
| last_imageopt | IMAGE | 尾帧图像(可选) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |