# Chroma Desk > THE THIRD NUMBER IS NOT A COUNT OF SAMPLES. In J:a:b the first number is the width of a notional > region, the second is how many chroma samples the TOP row gets, and the third is the number of > chroma samples that CHANGE between the top row and the bottom one. So 4:2:0 does not mean "no > blue" - it means the bottom row has none of its own and shares the row above. Five lanes over one > chain, plus a free browser-side engine doing exact sample counts. URL: https://chroma-desk.skillsafe.ai/ API: https://chroma-desk.skillsafe.ai/api.html Derived from hkuds/cli-anything (https://github.com/hkuds/cli-anything), Apache-2.0, whose quietshrink skill compresses macOS screen recordings with the hardware HEVC encoder. That encoder is 4:2:0, and a screen recording is made almost entirely of coloured text, one-pixel rules and interface edges - the worst possible content for it. Not affiliated with or endorsed by hkuds. ## The notation ```text horizontal divisor = J / a vertical divisor = b == 0 ? 2 : 1 samples per pixel = 1 + (a + b) / J ``` THE WRONG READING CANNOT EXPLAIN 4:4:0 AT ALL. Four samples in the top row, none of their own in the bottom: full width and half height, the exact mirror of 4:2:2. Under the usual misreading - that the third number is the bottom row's count - that scheme is impossible to describe. At HD, 4:2:0 carries its colour at 960x540. A QUARTER OF THE PIXELS CARRY ALL OF IT. At UHD the 4:2:0 chroma raster is 1920x1080, which is to say 4K colour is HD. ## Same cost, different picture ```text 4:1:1 at HD 480x1080 quarter width, full height 4:2:0 at HD 960x540 half width, half height ``` SAMPLES PER PIXEL IS NOT A MEASURE OF QUALITY. 4:1:1 and 4:2:0 both come to 1.5; 4:4:0 and 4:2:2 both come to 2. Identical bytes, completely different pictures. SO A STEP BETWEEN THEM IS NEITHER A LOSS NOR A GAIN. It is a TRADE: the resolution moves from one axis to the other and the file size does not change. Whether that is a good trade depends entirely on which way the edges in the picture run, and nothing about the byte count can tell you. ## What it costs CHROMA GOES AWAY AND DOES NOT COME BACK. A step to a coarser grid discards samples. A step to a finer one does not recover them: it interpolates, producing a file with more chroma samples in it than the picture ever had - bigger, declaring a quality it does not have, and believed by everything downstream. A COLOUR EDGE CAN ONLY LAND ON A CHROMA SAMPLE, so its position is quantised to the chroma grid - up to half a chroma sample out in each axis, which in 4:2:0 is one luma pixel across and one down. That is what a coloured fringe on a title is, and it is why the fringe is on one side. A KEY IS A MATTE BUILT FROM COLOUR, so the matte can be no more detailed than the chroma plane. Pulling one from 4:2:0 means building a full-resolution matte from a quarter-resolution one. AND WHERE THE SAMPLE SITS IS NOT DECLARED. 4:2:0 does not say where in its two-by-two block its one sample belongs: the MPEG-2 convention puts it level with the left-hand luma samples and the JPEG convention centres it. Half a chroma sample apart, which is half a luma pixel. ## What this page cannot do Everything here is a sampling-grid model. IT HAS NOT SEEN THE PICTURE AND HAS NOT SEEN THE FILE. It says what a scheme can hold, not what a given encoder's rate control did with it - a 4:2:2 stream at a low bitrate can carry less real colour detail than a 4:2:0 one at a high bitrate. SUBSAMPLING IS NOT THE ONLY THING THAT TOUCHES COLOUR. Quantisation and deblocking act on the same samples and this page models none of them. THE CONTENT JUDGEMENT IS A CATEGORY, NOT A MEASUREMENT. ## The sheet ```text CHAIN raster | 1080 depth | 8 content | text STEPS s1 | 4:4:4 | | the capture s2 | 4:2:0 | | the encode ``` A step row is `id | scheme | raster | description`. The raster is optional per step. A scheme may be a name or three numbers in the notation, which is the definition rather than a lookup. `raster` is required and has no default; `depth` takes 8, 10, 12 or 16 and defaults to 8; `content` turns on the judgement about whether the material survives. A SCHEME THAT DOES NOT PARSE STAYS UNPARSED. It is not rounded to the nearest one that does. ## The lanes - `plan` - decides what the chain carries, before anything is encoded - `check` - says what every step actually holds - `resolution` - says what the colour resolution really is, in samples - `budget` - says what each scheme costs in bytes, and what costs the same - `deliver` - sorts findings into as written, change a step, rebuild the chain ## What it does not do It is a sampling-grid model, not an encoder. It says what a scheme can carry and nothing about what an encoder's rate control did with it.