⭐ Star LTXV All-in-One (2-Pass)
The LTX 2.3 two-pass pipeline in one node — half-res draft, latent upscale, full-res refine
- image
- audio
- model_override
- preview
- images
- audio
- frame_rate
The workflow that most people use for LTX 2.3 - the one the community calls the Sulphur workflow - is a tall stack: load the transformer, load two text encoders, load two VAEs, load a latent upscaler, run pass one at half resolution, upscale the latent, run pass two at full resolution, decode. Star LTXV All-in-One (2-Pass) collapses that entire tower into a single node. It's the pack's flagship LTX node, and it's the reason a lot of people install StarNodes in the first place.
It's in ⭐StarNodes/Video, labeled for LTX 2.3 (the node's model dropdown expects the LTXV 2.3 A/V checkpoint family - sulphur2Base and friends).
How it works - the two-pass trick
LTX 2.3's quality comes from a two-stage render, and this node is a faithful port of it:
- Pass 1 at half resolution - a fast coarse pass that establishes motion and composition on a small latent (cheap).
- 2× latent upscale - a spatial upscaler model (
ltx-2.3-spatial-upscaler-x2) doubles the latent between passes, not a pixel upscaler. - Pass 2 at full resolution - a refinement pass over the upscaled latent that adds the detail the final output needs.
Both passes use their own sampler (sampler_pass1 defaults to euler_ancestral_cfg_pp, sampler_pass2 to euler_cfg_pp), share one seed, and one cfg (default 1.0 - correct for the distilled 2.3 checkpoints). The sigma schedules come from the original workflow's note node: sigma_preset offers the three baked schedules (8 / 12 / 16 steps) or custom, where you paste your own into custom_sigmas_pass1. The second pass uses its own sigmas_pass2 (default 0.85, 0.725, 0.6, 0.4219, 0.0).
Modes and inputs
Three modes on the mode dropdown:
- text_to_video - prompt only.
- image_to_video - connect an
imageas the start frame. - image_audio_to_video - connect
imageand anaudiotrack, which is trimmed to the video length and preserved.
The node loads everything internally - base model, two text encoders (clip_1 for the main Gemma-3 encoder, clip_2 for the LTX text projection), video VAE, audio VAE, and the latent upscaler - and caches them so a big file is only re-loaded when the dropdown selection actually changes. There's a 3-slot LoRA stack (lora_1 … lora_3, the distilled LoRA convention of ~0.6 on slot one), and an optional model_override if you want to feed in an externally-patched model instead of the dropdown load.
video_size (HD ~1280px / FHD ~1920px / Custom) with ratio presets, and ratio_from_image (default on) snaps the aspect to your connected input image. seconds snap to the LTX-friendly 8n+1 frame pattern.
Outputs
images (the frame batch), audio (the generated soundtrack - this node can generate audio alongside video, which is LTX 2.3's party trick), and frame_rate as a float for downstream video nodes.
Installing it
StarNodes installs via ComfyUI Manager (search Starnodes, Install, restart) or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
Search the canvas for star after restart.
The reality check
This is a genuinely impressive consolidation, but know what you're signing up for. LTX 2.3 is a 22B model - even distilled and quantized it's a heavy load, and the two text encoders plus two VAEs plus an upscaler make this node memory-hungry by construction. The author ships sensible defaults so it works, but on a 12GB card expect offloading and patience, not magic. And because so much is hidden inside one node, when it fails it can be hard to see why - the console is your friend. Check that your model files actually landed in models/diffusion_models, models/text_encoders, models/vae and models/latent_upscale_models, since the dropdowns populate from those exact folders. If a dropdown is empty, that's a file-folder problem, not a node problem.
Inputs (35)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | ▶️ image_to_video | text_to_video: prompt only. image_to_video: connect an image. image_audio_to_video: connect an image AND an audio file. |
| positive_prompt | STRING | What you want to see. LTXV likes detailed, film-style descriptions with timestamps. | |
| negative_prompt | STRING | console game, video game, cartoon, childish, ugly | What to avoid. Default is the negative prompt from the original workflow. |
| base_model | COMBO | LTXV 2.3 A/V checkpoint from models/diffusion_models (e.g. sulphur2Base). Reloaded only when the selection changes. | |
| clip_1 | COMBO | Main text encoder from models/text_encoders (e.g. gemma-3-12b ... int4). | |
| clip_2 | COMBO | LTXV text projection from models/text_encoders (e.g. ltx-2.3_text_projection). | |
| vae | COMBO | Video VAE from models/vae (e.g. LTX23_video_vae). | |
| audio_vae | COMBO | Audio VAE from models/vae (e.g. LTX23_audio_vae). | |
| upscale_model | COMBO | Latent upscaler from models/latent_upscale_models (e.g. ltx-2.3-spatial-upscaler-x2). Used between the passes. | |
| video_size | COMBO | HD | HD ~1280px, FHD ~1920px (same tables as the Star LTX Video Settings node), Custom = custom_width/height below. |
| ratio | COMBO | 1:1 | Aspect ratio. Overridden by the input image's ratio when 'ratio_from_image' is enabled and an image is connected. |
| ratio_from_image | BOOLEAN | true | Pick the closest preset ratio to the connected image. Falls back to 'ratio' when no image is connected. |
| custom_width | INT | 102432–8192 | Only used when video_size = Custom. |
| custom_height | INT | 102432–8192 | Only used when video_size = Custom. |
| frame_rate | INT | 251–120 | Frames per second of the output video. |
| seconds | INT | 101–120 | Video length in seconds. Frame count is snapped to 8n+1 (4s @ 25fps = 97 frames). |
| seed | INT | 00–18446744073709550000 | Shared by both sampling passes. |
| sigma_preset | COMBO | First-pass noise schedule - the three presets from the original workflow's note node. 12 = default, 8 = faster, 16 = finer. 'custom' uses custom_sigmas_pass1 below. | |
| imageopt | IMAGE | Start frame / guide image (image_to_video modes). | |
| audioopt | AUDIO | Voice / music track (image_audio_to_video mode). Trimmed to the video length and preserved as-is. | |
| override_audioopt | BOOLEAN | false | text_to_video / image_to_video only: when disabled (default), the connected 'audio' input is ignored and the model-generated audio is sent to the audio output. When enabled, the connected 'audio' input is passed straight to the audio output instead. Ignored in image_audio_to_video mode, where the connected audio is always passed through to the output. |
| lora_1opt | COMBO | Optional LoRA stack, applied in order 1 -> 3. | |
| lora_1_strengthopt | FLOAT | 0.60-100–100 | The distilled LoRA in the original workflow ran at 0.6. |
| lora_2opt | COMBO | 1 options: None | |
| lora_2_strengthopt | FLOAT | 1.00-100–100 | — |
| lora_3opt | COMBO | 1 options: None | |
| lora_3_strengthopt | FLOAT | 1.00-100–100 | — |
| custom_sigmas_pass1opt | STRING | 1.0, 0.995833, 0.991667, 0.9875, 0.983333, 0.979167, 0.975, 0.93125, 0.847917, 0.725, 0.522917, 0.28125, 0.0 | Only used when sigma_preset = custom. |
| sigmas_pass2opt | STRING | 0.85, 0.725, 0.6, 0.4219, 0.0 | Second-pass (refine) schedule. Default from the workflow. |
| cfgopt | FLOAT | 1.00–100 | Both passes. 1.0 for distilled models, as in the workflow. |
| sampler_pass1opt | COMBO | euler_ancestral_cfg_pp | Sampler for pass 1 (half resolution). |
| sampler_pass2opt | COMBO | euler_cfg_pp | Sampler for pass 2 (full resolution refine). |
| weight_dtypeopt | COMBO | Override base-model dtype. 'default' = as stored. | |
| model_overrideopt | MODEL | Optional external model (e.g. patched with flash/sage attention). When connected, this is used instead of loading 'base_model' from the dropdown, and the LoRA stack below is applied to it directly. | |
| previewopt | STAR_PREVIEW | Optional live sampling preview from a '⭐ Star Preview' node - while this node is sampling, an animated preview of the video latent is shown on the Star Preview node (fixed: 512 px, quality 80, 8 fps). |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| frame_rate | FLOAT | — |