Nodes/XB_ToolBox/XB-BOX - 🔄 LTX2.3 数字人无限时长对口型
ComfyUI Node

XB-BOX - 🔄 LTX2.3 数字人无限时长对口型

Unlimited-length LTX 2.3 lipsync, stitched from segments

By wjluoxiao·Created 5 months ago·Updated 6 days ago· 302
XB-BOX - 🔄 LTX2.3 数字人无限时长对口型
  • model
  • video_vae
  • audio_vae
  • clip
  • start_image
  • audio
  • prev_video
  • accumulated_video
  • original_audio
  • output_fps
  • output_filepath
width
height
total_frames
fps
segment_frames97
overlap_frames8
positive_prompt
negative_prompt
seed0
sampler_geneuler
gen_sigmas1.0,0.99375,0.9875,0.98125,0.975,0.909375,0.725,0.421875,0.0
img_compression18
img2video_strength0.70
vae_tile_size320
vae_overlap64
vae_temporal_size80
vae_temporal_overlap16

Video models don't do long clips. LTX 2.3 tops out around a few hundred frames before quality collapses and VRAM runs out, yet every "digital human" workflow - a talking head reading a script, an avatar answering questions - wants a video as long as the audio. XB_LTX23_InfiniteStreamer is XB_ToolBox's answer: it generates a long LTX 2.3 clip by generating short segments in a loop and stitching them into one continuous video with audio.

The "digital human lipsync" framing in the node name isn't marketing fluff - LTX 2.3's killer app is synchronized audio-video, and this node is built around exactly that: you feed it an audio track and a start frame, and it produces a video of a face talking for as long as the audio runs.

How it works

The mechanism is a segment relay, and it's worth understanding because it decides what you can get away with. The node:

  1. Takes your total_frames and splits it into chunks of segment_frames (default 97 - the LTX-friendly 1+8N frame count).
  2. For each segment, it takes the current image, runs image-to-video (LTXVImgToVideoInplace) on it, and encodes the matching slice of your audio with LTXVAudioVAEEncode so each segment carries its own synced audio latent.
  3. It keeps overlap_frames (default 8) frames from each segment's tail and feeds them into the next segment as the starting image - the "relay" that keeps motion continuous.
  4. The last segment writes everything out to ComfyUI/output/LTX23_Infinite_Output.mp4.

It uses the 8-step distilled LTX settings by default (euler, with a preset gen_sigmas string), which is the only way this is practical on a consumer card. At 8 steps, segments add up fast.

The inputs that matter

The required list is long, so here's what you actually set:

  • model, video_vae, audio_vae, clip - LTX 2.3 needs the video VAE and the separate audio VAE. The pack's XB_ModelLoaderV3 (dual VAE + dual CLIP) was built for exactly this pairing.
  • start_image - the first frame your talking head begins from.
  • audio - the driving track. Length decides the output: the relay stops when the audio is exhausted.
  • width / height / total_frames / fps - the canvas and the target length.
  • segment_frames / overlap_frames - segment size and relay overlap. 8 is the author's suggested overlap (multiples of 8 keep LTX's temporal structure happy).
  • img2video_strength (default 0.7) - how much of each new segment follows the previous image vs. wanders. Crank it down if faces drift between segments.
  • img_compression - latent compression for the video VAE.

Optional inputs give you tiled VAE decoding (vae_tile_size, vae_overlap, plus temporal tile controls) for when a full-res decode OOMs - this is the same tiled temporal decode trick the pack's "原版优化" VAE node wraps. There's also prev_video to continue an existing clip instead of starting from a single image.

Outputs: accumulated_video (the full IMAGE sequence), original_audio (your audio passed back), output_fps (FLOAT), and output_filepath (where the mp4 landed).

Where it fits

Real-world lipsync wisdom, from people who've pushed this pattern hard: LTX makes talking heads easier than Wan but plasticizes realistic faces - the community's fix is LTX for the lipsync draft, then a Wan pass to fix the teeth and skin. Use this node as the LTX stage of that two-step pipeline, not as a claim that LTX alone is a finished digital human. Also: LTX punishes short prompts, so give the positive prompt some context per segment rather than one word.

Install & issues

cd ComfyUI/custom_nodes
git clone https://github.com/WJLUOXIAO/XB_ToolBox.git
# or: ComfyUI Manager → "XB_ToolBox"

This node leans entirely on ComfyUI's native LTX nodes, so there's no extra pip install - but your ComfyUI must be current enough to ship the LTX 2.3 nodes (EmptyLTXVLatentVideo, LTXVAudioVAEEncode, LTXVImgToVideoInplace) and have LTX 2.3 weights in your models folder.

Where people get burned: overlap too small = visible seams where segments restart; overlap too big = double-motion smearing; and the classic - the relay keeps going until audio runs out, so if your audio is an hour of silence, expect an hour of segments queued. And if you see segment-to-segment flicker, it's usually the temporal VAE tiling, not the sampler - bump vae_temporal_overlap rather than fighting the prompts.

CategoryXB_ToolBox/Pipeline

Inputs (24)

NameTypeDefaultDescription
modelMODEL
video_vaeVAE
audio_vaeVAE
clipCLIP
start_imageIMAGE
widthINT宽度
heightINT高度
total_framesINT总帧数
fpsINT帧率
audioAUDIO
segment_framesINT975–4096每段生成帧数
overlap_framesINT81–33接力重叠帧数(建议8的倍数)
positive_promptSTRING
negative_promptSTRING
seedINT00–18446744073709550000
sampler_genCOMBOeuler采样器(8步)
gen_sigmasSTRING1.0,0.99375,0.9875,0.98125,0.975,0.909375,0.725,0.421875,0.0Sigmas(8步)
img_compressionINT180–100
img2video_strengthFLOAT0.700–1
prev_videooptIMAGE
vae_tile_sizeoptINT32064–4096
vae_overlapoptINT640–512
vae_temporal_sizeoptINT801–4096
vae_temporal_overlapoptINT160–256

Outputs (4)

NameTypeDescription
accumulated_videoIMAGE
original_audioAUDIO
output_fpsFLOAT
output_filepathSTRING