LTXVImgToVideoInplace
LTXVImgToVideoInplace
- vae
- image
- latent
- latent
LTX Video's older I2V path worked by concatenating your encoded start frame onto the noise as extra conditioning channels. This node is the newer approach: it edits the latent in place - hence the name. Your start image is VAE-encoded and written directly into the first frames of an existing video latent, and a noise mask tells the sampler which frames to keep and which to regenerate. If you're on the LTX 2.x-era workflow that starts from LTXVConditioning or an empty latent node, this is the piece that turns "empty video" into "video that starts from this image."
Here's the mechanism, briefly. You hand it a latent (any LTX video latent, usually from LTXVEmptyLatent or the 2.x empty-latent node), an image, and the vae. It reads the latent's spatial dimensions, scales them back up using the VAE's downscale factors to recover pixel width/height, resizes your image to match, encodes it, and writes the encoded frames over the first t latent frames (samples[:, :, :t.shape[2]] = t). Then it builds a noise_mask where those same frames get 1.0 - strength - so at strength: 1 the start frames are fully locked, at 0.5 the sampler can fudge them, at 0 they're basically unanchored. The result comes back as a single latent output carrying both the modified samples and the noise mask, ready for the KSampler.
That strength is the input to actually touch. 1.0 is the honest default - it's image-to-video, you want the image to stay. Drop it toward 0.7–0.8 when your source frame is low quality or you want the model to reinterpret it (a common trick for animating old or AI-upscaled stills). The bypass boolean is a straight passthrough: when true it returns the input latent untouched, which is handy for A/B testing an I2V branch without ripping it out of the graph. vae and image are the other two required inputs; make sure the VAE matches the latent's model family, because LTX's VAE is specific to it.
This is a recent core addition (comfy_extras/nodes_lt.py) - no install. The VAE comes from the LTXVAE-family loaders, and the checkpoint from the normal checkpoint loader.
The trap people hit: feeding an image whose aspect ratio doesn't match the latent. The node resizes for you, but a badly stretched crop is still stretched. Crop your image to the same width:height as your latent before it reaches the node, and let the node do the exact-to-pixel resize. The other gotcha is pairing this with the old LTXVImgToVideo node's workflow - they produce latents with different conditioning layouts, so don't mix the two in one graph expecting the same result. Pick one I2V path and stick with it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| vae | VAE | — | |
| image | IMAGE | — | |
| latent | LATENT | — | |
| strength | FLOAT | 1.000–1 | — |
| bypass | BOOLEAN | false | Bypass the conditioning. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |