Encoder luma/chroma delay mismatch
How unequal travel time through the encoder displaces colour information horizontally from the brightness structure that belongs to it.
Visible effect
Colour arrives beside the brightness edge it belongs to
At a coloured edge, the brightness transition and the colour transition occur at different horizontal positions. Colour can trail beyond an object’s right edge, begin before its left edge, or form paired coloured fringes around fine details. The direction reverses when chroma leads instead of lags.
Unlike bandwidth mismatch, the transition is displaced rather than made wider. A flat patch cannot reveal the error because it contains no edge whose component timing can be compared. Colour bars, registration marks, and coloured text make the separation obvious.
Physics
Parallel component paths take unequal time
A colour encoder separates the picture into luma Y′A luminance-related signal Y′ computed from transfer-encoded R′G′B′ components. Unlike physical luminance, it is not proportional to light., a brightness-like drawing, and colour-difference signals that later form chrominanceThe colour-carrying part of a composite television signal, formed from two colour-difference components and a specified subcarrier method.. Colour models and spaces explains these signal coordinates; How analogue television carries an image follows them through the complete broadcast chain.
The component paths contain different filters, amplifiers, equalizers, and encoding operations. Their phase responses determine how long different frequency components take to pass; this frequency-dependent travel time is called group delay. Engineers equalize the paths so corresponding luma and chroma features reach the combining point together. Imperfect filtering or compensation can leave a constant offset, a frequency-dependent delay difference, or both.
Television sends a line as a changing voltage over time. Earlier on the waveform means farther left in the displayed line; later means farther right. Chroma delay therefore becomes a horizontal colour displacement even though nothing in the photographed scene moved.
Compare the sibling article Luminance/chrominance bandwidth mismatch. Its low-pass response spreads a component edge across neighbouring positions. To make the distinction visible, this playground deliberately keeps the edge shape fixed and relocates only its centre. A measured analogue path may contain both mechanisms and need not preserve that shape.
Mathematics
Time separation becomes horizontal distance
Let Δτ be chroma delay relative to luma, Tactive the time used to transmit the visible part of one line, and W the number of horizontal source samples representing that interval. Their ratio converts time into the displayed displacement Δx.
Positive Δx means chroma lags. At output position x, the delayed chroma value must therefore come from the earlier input position x − Δx. Luma is read at x. When Δτ is zero, both components come from the same source position and the transform is exactly the identity.
Shader
One luma read and one horizontally displaced chroma read
The shader is a constant-delay visual model. It converts the current source pixel to Y′UV-like coordinates and keeps its Y′ value. A second texture read is displaced horizontally by the selected chroma delay; only its U and V values are retained. Recombining those three components makes colour lead or trail brightness without applying a blur kernel. This isolates registration error rather than reproducing the complete phase and group-delay response of a physical network.
// WHAT: Show chrominance arriving earlier or later than the matching luma edge.
// HOW: Read luma at the current source position and colour differences at one
// horizontally offset position, then reconstruct RGB.
// WHY: Delay mismatch moves a component transition without broadening it;
// using a blur kernel would incorrectly reproduce bandwidth mismatch instead.
vec3 rgbToDelayVideo(vec3 rgb) {
float y = dot(rgb, vec3(0.299, 0.587, 0.114));
return vec3(y, 0.492 * (rgb.b - y), 0.877 * (rgb.r - y));
}
vec3 delayVideoToRgb(vec3 video) {
float r = video.x + video.z / 0.877;
float b = video.x + video.y / 0.492;
float g = (video.x - 0.299 * r - 0.114 * b) / 0.587;
return vec3(r, g, b);
}
vec3 applyLumaChromaDelayMismatch(
vec2 sourceUv,
float chromaDelayPixels
) {
// Positive delay means chroma lags. To draw it later (farther right), the
// output position reads colour from an earlier source position.
vec2 chromaSourceUv = sourceUv - vec2(
chromaDelayPixels / u_sourceSize.x,
0.0
);
float luma = rgbToDelayVideo(texture(u_source, sourceUv).rgb).x;
vec2 chroma = rgbToDelayVideo(texture(u_source, chromaSourceUv).rgb).yz;
return delayVideoToRgb(vec3(luma, chroma));
}- Source textureGamma-coded video
- Separate-position component reconstructionOne fullscreen pass · two texture reads per pixel
- Read luma at the current position
- Convert component delay to horizontal texture distance
- Read chroma at the displaced position
- Reconstruct RGB
- Mix the effect
- Display output
Why these steps are here
- Read the source at the current output position and recover its luma.
- Convert the selected source-pixel delay into normalized texture distance.
- Read colour differences at the earlier or later horizontal position.
- Combine current-position luma with displaced chroma and reconstruct RGB.
- Use no neighbourhood gather, so the code does not introduce bandwidth blur.
Notes
- The playground expresses displacement in source-image pixels for direct visual reading. A calibrated system measurement would report chrominance–luminance delay inequality in time, commonly nanoseconds.
- Positive values mean chroma lags: its transition appears later, farther to the right in the left-to-right scan direction. Negative values mean chroma leads.
- The model applies a constant delay across the line and uses texture interpolation for fractional-pixel offsets. It isolates one component of the impairment; it does not simulate frequency-dependent group delay, ringing, composite decoding, or receiver timing recovery.
- ITU measurement methods use specially constructed composite pulses. ITU-R BT.654 notes that the measured value is related to the group delay of a band-limiting network and can differ appreciably from a direct measurement between two steep picture edges.
- NTSC and PAL can show a direct luma/chroma registration error. ITU-R BT.654 notes that the corresponding impairment is indirect in SECAM, whose colour-difference information is carried and reconstructed differently.
- A constant-colour flat field is invariant: moving a component that does not change cannot reveal its timing.
References
ITU-R BT.654 — subjective quality of analogue composite television pictures — defines and evaluates luminance–chrominance delay inequality, including its relation to group delay and its different significance for NTSC/PAL and SECAM.
ITU-T J.64 — definitions for television insertion-test measurements — the primary definition of chrominance–luminance delay inequality in nanoseconds, including the positive-when-chrominance-lags sign convention.