π π £π § LTXV Per Step Stat Norm Patcher
Stop LTX latents from blowing out mid-sample
- model
- MODEL
If your LTX clips come out with blown highlights, overcooked lights, or color that creeps hotter as the video plays, this node is the corrective. LTXVPerStepStatNormPatcher patches the model so that at every denoising step it renormalizes the latent's statistics - pulling its mean and standard deviation back toward targets you set - instead of letting them drift. It's a stability tool, and the failure it's aimed at is one the KB flags directly on LTX-2.3: "if the lights are overcooked" you have to tune things down, and higher-resolution generations are prone to color artifacts.
The idea is straightforward once you name it. During sampling, a latent's numeric distribution can wander - outliers accumulate, the overall level ramps up - and that shows up in the decoded video as clipping and color shifts. Normalizing the distribution each step keeps it in a sane range so the decode stays clean. Because it patches the model rather than post-processing one latent, the correction happens throughout generation, not just at the end.
How it works
You hand it a MODEL and it returns a patched MODEL that applies statistical normalization on every step. It measures the latent's spread, optionally ignores the extreme tail (via a percentile), and rescales toward your target mean and std. The factors string schedules how strongly the correction applies across steps, so you can normalize hard early and back off later.
The inputs and outputs that matter
model(MODEL) in,MODELout - insert it in your model chain before the sampler.factors(STRING, default"0.9, 0.75, 0.0") - the per-step strength schedule, read left to right across the denoise. The default applies strong normalization early, eases off, then stops - a sensible shape, since late steps are where you least want to disturb detail.target_mean(FLOAT, default 0) andtarget_std(FLOAT, default 1) - the distribution you're normalizing toward. The defaults (mean 0, std 1) are the neutral standardization target; you rarely need to move these unless you're deliberately shifting overall level.percentile(FLOAT, default 95) - how much of the extreme tail to exclude when measuring spread, so a few outlier values don't dominate the rescale.clip_outliers(BOOLEAN, default false) - actually clamp the outliers rather than just down-weighting them. Turn this on if bright specular blowouts are the specific problem.
How to install it
ComfyUI Manager: Ctrl+M, Install Custom Nodes, search LTXVideo, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Lightricks/ComfyUI-LTXVideo
then restart. Official Lightricks pack. The node is a lightweight model patch - no downloads - but it lives in an LTX-2 generation graph with the usual heavy checkpoint and text encoder.
Common issues & troubleshooting
The output went flat or washed out. You're normalizing too hard. Soften the factors schedule (lower the early values), or turn clip_outliers off if you had it on - aggressive normalization strips contrast along with the blowouts.
It didn't fix the overcooked lights. Before reaching for this, the KB's first-line fix for blown lights on LTX-2.3 is CFG: on single-stage T2V, nudging CFG into the 1.1β2.0 range often solves it. Try that; use this node when CFG tuning alone doesn't hold. And if blowouts specifically are the issue, enable clip_outliers.
Detail got mushy in the last steps. Keep the tail of your factors at 0 (as the default does) so normalization stops before the fine-detail steps. Normalizing all the way to the end fights the model where it's adding the texture you want.
When to use this vs. the one-shot version. This patches every step during generation. If you just want to rescale an existing latent once - say, before feeding it into a second stage - use LTXVStatNormLatent instead, which does the same math to a single latent without touching the model.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| factors | STRING | 0.9, 0.75, 0.0 | Comma-separated list of factors, each factor will be used for one step. |
| target_mean | FLOAT | 0.00-10β10 | β |
| target_std | FLOAT | 1.000.01β10 | β |
| percentile | FLOAT | 95.050β100 | Percentile of distribution to use for statistics calculation |
| clip_outliers | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | β |