core/noise_math.py — compositing modes run in uniform space (normal CDF in,
inverse CDF out) and everything is re-standardised, so blended noise reaches
the sampler as mean 0 / std 1. Measured on the old path: overlay had mean
+0.39 at strength 0.3, soft_light std 4.2 at strength 1.0, and the inverse
transform peaked near 4e4. "normal" now mixes with cos/sin, which preserves
variance where (1-k)*base + k*shader fell to std 0.71 at k=0.5.
core/schedule.py — one sigma schedule for the whole run, honouring denoise and
using custom sigmas as given. Boundaries enforce a 2-step minimum, so the
20-step/3-injection case can no longer end in a 1-step segment.
core/shader_noise.py — shape taken from the latent ([B,C,H,W], [B,C,T,H,W]),
which fixes frames being confused with channels when a video has as many
latent frames as channels (a 61-frame Wan clip has 16 of each). Generation
runs inside fork_rng, and fractional octaves interpolate between integer
renders instead of being truncated by ShaderParams.validate().
pipelines/standard.py — samples the schedule in segments. At a boundary the
latent is split into a denoised estimate and its noise in the model's internal
space, the noise is re-mixed, and the next segment resumes from that pair.
Verified lossless to 4.8e-07 for both EPS and flow models, so at
shader_strength 0 a segmented run reproduces an uninterrupted one.
179 tests pass, including the 11 legacy goldens.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>