LTX Unified Sampler (CRT)
One node, the entire LTX 2.3 pipeline — audio, depth, upscale and all
- models_pipe
- config_pipe
- images
- audio
LTX 2.3 is the Lightricks release that finally made the model competitive: 22B parameters, synchronized audio and video in one model, a rebuilt VAE with sharper detail, and the I2V that actually moves. It's genuinely the best local video model for a lot of people now. But "one model" doesn't mean one node - a proper LTX 2.3 workflow is a small forest of encoders, VAEs, guides, upscalers and samplers. This node's job is to fold that forest into a single box.
You hand it a models pipe and a config pipe from the pack's sibling nodes, pick a mode, and it runs the whole generation: conditioning, sampling, latent upscaling, refinement, VAE decode, and it hands you back images and the audio track.
How it works
The Unified Sampler implements LTX 2.3's two-stage default: generate at half resolution, run the latent upscaler, then a refinement pass. The hq toggle skips all that and does one full-resolution pass instead - maximum quality, longer run. Along the way it manages the pieces that make LTX 2.3 memory-friendly: low_vram unloads the text encoder after conditioning and the VAEs before sampling (they reload for decode), unload_model_before_vae_decode frees the diffusion model before decode, and vae_decode_tiled cuts peak VRAM during decode at the cost of time.
The mode switch drives everything:
- I2V - image-to-video from a first frame.
- T2V - pure text-to-video.
- V2V - video-to-video, with its own sub-modes: Depth Control (a depth guide conditions the output), Outpaint, or Upscale, tuned by
v2v_guide_strength.
Audio is first-class here. frame_count_from_audio derives the video length from your source audio instead of the frame_count widget, and generated_audio_gain_db trims the synthesized audio track's level - negative defaults exist because LTX's generated audio tends to come in hot.
The inputs that matter
The two pipe inputs are non-negotiable: models_pipe (LTX23_US_MODELS_PIPE, from the pack's LTX 2.3 US Models Pipe node) and config_pipe (LTX23_US_CONFIG_PIPE, from LTX 2.3 US Config). Everything else is knobs:
- workflow_mode - I2V / T2V / V2V.
- hq - one-pass full-res vs. two-stage.
- megapixels_target and aspect_ratio - the output canvas, with a big list of presets.
- frame_count - length, default 161 (the LTX-friendly 8n+1 shape).
- steps - defaults to 9, right for the distilled model.
- depth_mouth_mask, mouth_mask_expand, mouth_mask_blur - lip-motion influence on the depth guide, for lipsync work. The three older mouth inputs (
mouth_detect_megapixels,mouth_single_item,mouth_detect_chunk_size) are deprecated and ignored, per their tooltips - don't waste time tuning them.
Outputs are images (IMAGE) and audio (AUDIO). Wire them to a Save Video With Path-style saver.
Installing it
Install the pack: ComfyUI Manager → search CRT-Nodes, or git clone https://github.com/PGCRT/CRT-Nodes.git into custom_nodes plus pip install -r requirements.txt, then restart. The models themselves come from the AutoDL loader nodes (LTX 2.3 Model, VAEs, Gemma 3 + projection text encoders), which auto-download on first run.
Where people get burned
VRAM is the whole game. LTX 2.3 is 22B plus a 12B-class Gemma 3 text encoder - the KB's LTX history is a graveyard of OOM threads. Leave low_vram on, and if you still hit walls, the pack's GGUF Q4 model node exists precisely to get this running on smaller cards. Also: the deprecated mouth inputs are a classic trap because they look functional. They're compatibility shims, hardcoded internally - set depth_mouth_mask and the expand/blur values and ignore the rest.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| models_pipe | LTX23_US_MODELS_PIPE | — | |
| config_pipe | LTX23_US_CONFIG_PIPE | — | |
| workflow_mode | COMBO | I2V | Select image-to-video, text-to-video, or video-to-video execution. Required config inputs depend on this mode. |
| quality | COMBO | Standard | Draft: half-resolution pass + latent upscale + refinement (fastest). Standard: full-resolution single pass. Max: full-resolution pass plus a short self-refinement pass for extra detail. |
| live_preview | BOOLEAN | false | Animated true-pace video preview during sampling via the auto-downloaded taeltx approximation. Adds per-step decode overhead - disabled by default. |
| frame_count_from_audio | BOOLEAN | false | When source audio is connected, derive the video length from its duration instead of frame_count. |
| vae_decode_tiled | BOOLEAN | true | Decode video latents in tiles to reduce peak VRAM at the cost of additional processing time. |
| unload_model_before_vae_decode | BOOLEAN | true | Unload the diffusion model after sampling and before VAE decode to reduce decode-time VRAM. |
| low_vram | BOOLEAN | true | Unload CLIP after conditioning and VAEs before sampling, then reload VAEs for decode. Depth Anything V3 is always unloaded immediately after depth estimation. |
| megapixels_target | FLOAT | 1.00.1–16 | Target output area in megapixels before model-specific dimension quantization. |
| aspect_ratio | COMBO | 16:9 (Landscape) | 20 options: 1:1 (Square), 2:3 (Portrait), 3:4 (Portrait), 4:5 (Portrait), 5:7 (Portrait), 5:8 (Portrait), +14 |
| frame_count | INT | 1611–4096 | Requested output length. LTX requires 8k+1 frames; invalid values are normalized automatically and reported in the console. |
| v2v_mode | COMBO | Depth Control | Depth Control follows scene depth; Outpaint expands the canvas; Upscale performs guided video enlargement. Each optional mode needs its matching model pipe input. |
| v2v_guide_strength | FLOAT | 0.600–1 | Strength of the V2V depth guide. Higher values follow the source structure more closely. |
| v2v_aspect_ratio | COMBO | 16:9 (Landscape) | 20 options: 1:1 (Square), 2:3 (Portrait), 3:4 (Portrait), 4:5 (Portrait), 5:7 (Portrait), 5:8 (Portrait), +14 |
| legacy_sampler_main | STRING | euler | Reserved compatibility value; ignored. |
| legacy_sampler_refine | STRING | euler | Reserved compatibility value; ignored. |
| steps | INT | 99–9 | Legacy compatibility value. LTX 2.3 distilled inference now always uses its fixed trained sigma schedule. |
| generated_audio_gain_db | FLOAT | -12.0-60–24 | Gain applied to generated audio after decode, in decibels. |
| firstframe_strength | FLOAT | 0.700–1 | Influence of the connected first-frame anchor during generation. Zero disables anchoring. The two-stage refinement pass always re-anchors the raw image at full strength. |
| legacy_compat_1 | BOOLEAN | false | Reserved compatibility value; ignored. |
| legacy_compat_2 | FLOAT | 0.250.25–0.25 | Reserved compatibility value; ignored. |
| legacy_compat_3 | BOOLEAN | true | Reserved compatibility value; ignored. |
| legacy_compat_4 | INT | 1010–10 | Reserved compatibility value; ignored. |
| legacy_compat_5 | INT | 88–8 | Reserved compatibility value; ignored. |
| legacy_compat_6 | FLOAT | 8.08–8 | Reserved compatibility value; ignored. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |