Nodes/ComfyUI-PainterNodes/Painter LTX by Master
ComfyUI Node

Painter LTX by Master

The omni conditioning builder for LTX 2.x

By princepainter·Created 7 months ago·Updated 6 days ago· 194
Painter LTX by Master
  • positive
  • negative
  • video_vae
  • audio_vae
  • start_image
  • end_image
  • source_video
  • reference_image1
  • reference_image2
  • positive
  • negative
  • video_latent
  • audio_latent
width768
height512
length97
frame_rate25.00
strength0.70
reference1_frame_idx0
reference2_frame_idx0

The display name - "Painter LTX by Master" - is the author letting the community know this is the refined one. PainterLTXomni2 is a video-plus-audio conditioning and latent builder for LTX 2.x, the node that packages an omni generation (frames and sound from one model) into the two latents and conditioning your sampler needs. It's the earlier, more general sibling of this pack's PainterLTX2Vomni, and it covers the same task set - text-to-video, image-to-video, first/last-frame, and reference video - without the "dub a Bernini clip" focus.

What it is

A model/conditioning/ltxv node with an identical-looking schema to its sibling: video_vae and audio_vae, resolution, frame_rate, strength, reference frame indices, and the usual optional images. Outputs are positive, negative, video_latent, and audio_latent. If you have an LTX 2.x omni workflow, this is the box that turns "clip, prompt, and audio pipeline" into "things the sampler can chew on."

How it works

LTX-2.3 runs video and audio through two separate VAEs before the shared DiT renders them together. This node enforces that split at the input boundary - two VAE ports - and produces two latents, one for the visual stream and one for the audio. The interesting implementation detail: it hard-snaps length to the 8n+1 frame rule ((length - 1) // 8 * 8 + 1), so a typed 97 becomes 97, a typed 100 becomes 97, and you never feed LTX an illegal frame count. Width and height step by 32 for the same reason - LTX-2.3's spatial rule is divisibility by 32, and off-grid values fail rather than round.

frame_rate (default 25) is written straight into the conditioning, which is how the sampler knows the clip's timing. strength (default 0.7) controls conditioning strength for the image/reference tasks - lower preserves the source more, higher lets the model push further. reference1_frame_idx / reference2_frame_idx pick anchor frames from source_video or the reference images, with negative indices counting as offsets.

Inputs and outputs that matter

  • video_vae / audio_vae - both VAEs, from your LTX 2.x loader.
  • source_video - footage for V2V/dubbing-style work.
  • strength - conditioning strength for the source/reference.
  • start_image / end_image / reference_image1/2 - anchors for I2V, FLF, and reference tasks.
  • Outputs: video_latent and audio_latent both go to the omni sampler; positive/negative to its conditioning ports.

Install

Part of the PainterNodes pack. ComfyUI Manager → search "PainterNodes" → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterNodes
cd ComfyUI-PainterNodes
pip install -r requirements.txt

Workflow examples live in the pack's workflows/ folder (the LTX2.3-* JSONs are the relevant ones).

Common issues

  • Audio missing from the result - you must feed both latents into a sampler that knows how to decode the omni pair. If your sampler only takes one latent, the sound silently disappears.
  • Frame count "changed" on me - that's the 8n+1 snap working. It's not a bug; LTX-2.3 will reject off-grid lengths outright, so the node rounds for you (down).
  • It's the wrong node for the Bernini dub - if your goal is "add sound to a silent Bernini clip," the pack's PainterLTX2Vomni is the focused version with that workflow already tuned; this node is the general-purpose builder.

The name is a flex and the node mostly behaves. If you're doing LTX omni work and want the frame-count foot-gun removed, this is the one.

Categorymodel/conditioning/ltxv

Inputs (16)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
video_vaeVAE
audio_vaeVAE
widthINT76864–16384
heightINT51264–16384
lengthINT971–16384
frame_rateFLOAT25.000–1000
strengthFLOAT0.700–10
reference1_frame_idxINT0-9999–9999
reference2_frame_idxINT0-9999–9999
start_imageoptIMAGE
end_imageoptIMAGE
source_videooptIMAGE
reference_image1optIMAGE
reference_image2optIMAGE

Outputs (4)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
video_latentLATENT
audio_latentLATENT