JR H3 → LTX Refine Setup (Experimental)
Three LTX steps to polish an H3 draft — and the one wire everyone forgets
- ltx_video_latent
- original_h3_audio
- ltx_audio_vae
- ltx_model
- ltx_av_latent
- sigmas
- original_h3_audio
- status
What it's for
You've generated a cheap H3 draft, upscaled the latent, and converted it into LTX's latent space with JR_H3ToLTXLatentAdapter. Now you want LTX-2.5 to spend a few denoising steps turning that draft into something crisp - the same draft-here-finish-there pattern the LTX community has used since people started pairing fast LTXV renders with a heavier model's V2V pass to clean them up.
This node is the setup half. It hands your sampler a joint audio+video latent in LTX's shape, a real sigma schedule, and the original H3 PCM passed through untouched so the final mux has genuine H3 audio instead of whatever Stage 2 invented. Three LTX updates on an already-good draft is a very different bill from a full second H3 pass - that's the whole point of the detour.
How it works
Three things happen here.
First, audio. Your original_h3_audio is encoded with the LTX-2.5 audio VAE you supply, an empty LTX audio latent is built at the padded frame count, and the encoded audio is fitted onto it. Then the video latent from the adapter and that audio latent are packed into ComfyUI's native NestedTensor - the same two-stream structure LTX's own samplers use - and handed out as ltx_av_latent.
Second, sigmas. It calls ComfyUI's native BasicScheduler with your steps, denoise and scheduler. That means it needs the LTX MODEL - not to run anything, just to look up the model's sigma schedule.
Third, a report. status prints frame counts, scheduler, denoise, the number of sampler updates and the actual sigma list.
Which is where people fall over, and the author knows it: ltx_model is optional in the schema but required for any native scheduler, and the failure is explicit - Connect ltx_model to the same LTX MODEL used by BasicGuider to calculate native denoise sigmas. Wire the exact same LTX model object your BasicGuider is using. Same checkpoint, same loader output.
The controls worth touching
steps (default 3) is how many LTX updates run, independent of your H3 Stage 1 step count. It's refinement, not a second generation.
denoise (default 0.25) is the one that confuses everyone. It is not a starting sigma. BasicScheduler builds a full schedule for int(steps/denoise) steps and keeps the last steps + 1 sigmas, so 3 steps at 0.25 gives you the tail of a 12-step schedule, and the actual start value depends on the model's own schedule. Read the numbers out of status instead of assuming. Start at 0.15–0.25 if you want to keep the draft, and remember denoise = 0 skips LTX denoising entirely - a genuinely useful A/B, because it separates "what the adapter and decode did" from "what refinement did."
scheduler defaults to simple. There's also sol_h3_original, the old hard-coded recipe - 0.909375, 0.725, 0.421875, 0 - which refuses to run unless steps = 3 and denoise = 1. In that mode denoise = 1 is a switch for "old recipe", not a claim that the old start sigma was 1. Old API prompts that omit the new fields still get the old recipe; that's compatibility, not the default you'll see in the UI.
Wiring
JR H3 → LTX Latent Adapter.ltx_video_latent ─┐
original H3 decoded AUDIO ───────────────────┼→ JR H3 → LTX Refine Setup
LTX-2.5 audio VAE ───────────────────────────┤ ├→ ltx_av_latent + sigmas → SamplerCustomAdvanced
same LTX MODEL as BasicGuider ───────────────┘ ├→ original_h3_audio → JR H3 → LTX Finish Media
└→ status (read it)
Sampler side: SamplerCustomAdvanced with the LTX-2.5 model, LTX text conditioning at 24 fps, BasicGuider at CFG 1, Euler, RandomNoise. Then LTXVSeparateAVLatent and an LTX Conv VAE decode on the video stream only.
Installing it
Standard pack install - Manager (search ComfyUI JR MiniMax H3 Node) or:
cd ComfyUI/custom_nodes
git clone https://github.com/Goldlionren/ComfyUI_JR_MiniMaxH3Node
<ComfyUI-Python> -m pip install -r ComfyUI_JR_MiniMaxH3Node/requirements.txt
Restart, hard-refresh. This node's real prerequisites are model files, not packages: the LTX-2.5 audio VAE (ltx-2.5-audio-vae-bf16.safetensors in models/vae/) and a matching LTX-2.5 transformer in models/diffusion_models/, both from Lightricks/LTX-2.5. For decoding you want the Conv video VAE, not ltx-2.5-video-vae-bf16.safetensors - that's a diffusion decoder and isn't what this pipeline uses.
Common issues
"Connect the LTX-2.5 audio VAE, not the H3 audio VAE." H3 has an audio VAE. LTX has an audio VAE. They are not interchangeable, and this is by far the most common wrong wire. The node checks channel count and the encoder interface, so you get a sentence instead of silence.
Old workflow, new error about ltx_model. The new widgets come up with their new defaults (3 / 0.25 / simple), and a native scheduler needs the model to build sigmas. Add the connection and it disappears; the pack ships examples/H3_to_LTX_640_to_1024_175f_adjustable.json already wired for it.
Refinement that changes too much. Drop denoise before you drop steps. Steps control how many updates happen; denoise controls how far from the draft you're allowed to drift.
Benchmarking it wrong. Same draft, same seed, change one thing - otherwise you're comparing drafts and calling it a refinement test. To find out whether LTX is helping at all, keep original_h3_audio connected and A/B denoise = 0 against denoise = 0.25 on identical input.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| ltx_video_latent | LATENT | — | |
| original_h3_audio | AUDIO | — | |
| ltx_audio_vae | VAE | — | |
| stepsopt | INT | 31–100 | LTX refinement updates; independent of H3 Stage1 steps. |
| denoiseopt | FLOAT | 0.250–1 | Native BasicScheduler denoise. Try 0.15–0.25 to retain the draft. 0 skips refinement. |
| scheduleropt | COMBO | simple | Native scheduler; sol_h3_original requires steps=3 and denoise=1 and reproduces the old fixed sigmas. |
| ltx_modelopt | MODEL | Connect the same LTX model as BasicGuider; required for native schedules. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| ltx_av_latent | LATENT | — |
| sigmas | SIGMAS | — |
| original_h3_audio | AUDIO | — |
| status | STRING | — |