Painter LTX2V Plus
The same LTX latent prep, plus upscaling and continuation
- video_vae
- audio_vae
- start_image
- end_image
- latent
- upscale_model
- latent
- video_latent
- audio_latent
- width
- height
PainterLTX2VPlus is what the pack's README calls the all-in-one latent generator, and the name isn't just branding - it's the plain PainterLTX2V with three things bolted on. If you only ever do text-to-video or a simple first-frame I2V, the basic node is all you need and this one is extra surface area for nothing. But the moment you want to continue an existing clip, upscale the latent before sampling, or hand the width and height to downstream nodes, Plus is the one to reach for.
What the "Plus" actually adds
Start with everything PainterLTX2V does - empty latent, first/last frame splice via the noise mask, audio VAE attachment. Then:
latentinput - drop in a latent from a previous run and the node uses it as the base instead of creating a fresh empty one. That's your continuation and resampling path: generate, then feed the result back in for another pass, with optional new frame conditioning.upscale_modelinput - takes aLATENT_UPSCALE_MODEL, the same format Lightricks' LTXVLatentUpsampler uses (the LTX-2/2.3 latent upscalers). This is latent-space upscaling, not a pixel upscaler: it runs on the compressed latent before sampling, so it's a resolution-of-generation trick rather than a detail-add on output.width/heightoutputs - the node just echoes back what you set. Sounds pointless until you're building auto-layout workflows and downstream nodes want the dimensions as plain integers.
The mechanism for the upscale step is worth knowing because it's a classic trap. The node un-normalizes the latent through your video_vae's per-channel statistics, runs the upscaler, then re-normalizes with the same stats. That means the upscaler has to be trained for the same VAE family you loaded - bolt a mismatched upscaler onto a different VAE and you'll get color shift and mushy output. Also note the code drops the noise mask after upsampling, so if you combined frame control with an upscaler, the frame conditioning happens before the upscale.
Wiring it up
The use cases from the README map cleanly to which optional inputs you connect:
start_imageonly → basic image-to-videostart_image+end_image→ interpolate/transition between two stillslatent→ continuation or resampling of a previous clipupscale_model→ higher-resolution latent before sampling
Outputs are the same trio as the basic node - latent, video_latent, audio_latent - plus the two INTs. Feed the split latents into the pack's PainterSamplerLTXV and decode with any LTX video VAE decoder.
Install
Same story as the rest of the pack - no pip dependencies, no requirements.txt, just recent ComfyUI core. ComfyUI Manager (search "PainterLTXV2") or:
cd ComfyUI/custom_nodes/
git clone https://github.com/princepainter/ComfyUI-PainterLTXV2.git
then restart. It sits in latent/video/ltxv next to the plain version. The heavy lifting is the models: LTX checkpoint + video VAE from Lightricks, plus the latent upscaler weights if you use that input, and the audio VAE if you want sound.
If you're on a ComfyUI older than the LTX-2 audio builds, skip the troubleshooting rabbit hole and just update ComfyUI - the pack depends on comfy.nested_tensor and won't load without it. And when your upscaled output looks off, suspect the upscaler/VAE pairing before anything else.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| video_vae | VAE | — | |
| width | INT | 76864–4096 | — |
| height | INT | 51264–4096 | — |
| length | INT | 971–1024 | — |
| frame_rate | FLOAT | 25.01–120 | — |
| batch_size | INT | 11–4096 | — |
| audio_vaeopt | VAE | — | |
| start_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — | |
| latentopt | LATENT | — | |
| upscale_modelopt | LATENT_UPSCALE_MODEL | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| video_latent | LATENT | — |
| audio_latent | LATENT | — |
| width | INT | — |
| height | INT | — |