SMPTE Color Bars Code Value Chart
Rendered SMPTE color bars with every R'G'B', Y'CbCr and code value computed live for your bit depth, range and matrix — click a patch for the exact numbers, free and instant.
Client review & approval for video, audio, images & PDF — one link, no per-seat fees.
Try FreeBar Settings
Every value below is computed live from these four settings — nothing is a hardcoded lookup table. White always stays at 100%, in both the 75% and 100% bar conventions.
Bar Pattern
Click, tap or tab to a patch for its full value card. Patch colors are an sRGB approximation for on-screen display only — your browser isn't a calibrated monitor, so the computed codes on the right are the real reference, not the pixels.
Full Code Value Chart
Every patch, computed at once, for the current bit depth (-bit), range () and matrix (BT.).
| Patch | Nominal R'G'B' | R'G'B' code | Y' | Cb | Cr | Luma % |
|---|---|---|---|---|---|---|
Charting the code values, not generating a broadcast signal.
This page computes the numbers a waveform monitor or vectorscope should read for standard SMPTE color bars — it doesn't cover the full SMPTE RP 219 split-field pattern (PLUGE and chroma-alignment patches included). For the transfer curves and gamut math those scopes rely on downstream, see the Gamma / EOTF Curve Comparator and the Gamut Overlap Calculator.
About SMPTE Color Bars Code Value Chart
Why bars exist: line-up, not looks
SMPTE color bars aren't decoration and they aren't meant to look "correct" on your monitor — they're a calibration signal. Bars ride at the head of a tape or file specifically so a technical operator, transmission chain or downstream colorist can point a waveform monitor and vectorscope at a known, exact target and confirm the signal survived the trip unmolested: gain unchanged, no hue rotation, no clipped whites, no crushed blacks. If the White patch doesn't read 100% and the vectorscope dots don't land on their targets, something in the chain — a codec, a scaler, a bad LUT — shifted the signal, and you know before a client ever sees a frame.
75% vs 100% bars
You'll see two conventions still called "SMPTE bars": the classic 100/0/75/0 pattern, where every colored bar (not White) sits at 75% amplitude, and the less common 100/0/100/0 pattern where colored bars run at full 100%. White is always 100% in both — it's the peak-white reference, so it never moves regardless of which level convention the rest of the bars use. The 75% convention exists because early NTSC composite chains couldn't cleanly pass fully saturated 100% primaries without pushing signal levels out of spec; 75% keeps every colored bar's luma and chroma inside safe broadcast limits while still exercising all six hues. This chart's level toggle switches between both conventions, but 75% is what you'll find on the overwhelming majority of reference bars in circulation today, including SMPTE RP 219.
The math, worked
Every value on this chart is computed live, never looked up from a table. Start with nominal R'G'B' at level L (0.75 or 1.0): a colored bar is just L in its "on" channels and 0 elsewhere — Yellow is (L, L, 0), Cyan is (0, L, L), and so on.
Luma is a weighted sum, and the weights are the whole reason BT.601 and BT.709 disagree: BT.709 uses Y' = 0.2126 R' + 0.7152 G' + 0.0722 B'; BT.601 uses Y' = 0.299 R' + 0.587 G' + 0.114 B'. Chroma follows from luma: Cb = (B' − Y') ÷ (2 × (1 − Kb)) and Cr = (R' − Y') ÷ (2 × (1 − Kr)), with (Kr, Kb) = (0.2126, 0.0722) for 709 or (0.299, 0.114) for 601.
Take 75% Yellow at BT.709 as the worked example: R' = G' = 0.75, B' = 0, so Y' = 0.75 × (0.2126 + 0.7152) = 0.75 × 0.9278 = 0.69585 — a 69.6% luma readout. Turning that into an 8-bit narrow-range code: code = round(16 + Y' × 219) = round(16 + 152.39) = round(168.39) = 168. At 10-bit narrow range the same value scales by 2^(10−8) = 4: code = round(64 + Y' × 876) = round(64 + 609.67) = round(673.67) = 674. The general narrow-range formula for any bit depth n is round(16×2^(n−8) + value × 219×2^(n−8)) for R'G'B'/Y', and round(128×2^(n−8) + value × 224×2^(n−8)) for Cb/Cr — the 16–235 (8-bit) / 64–940 (10-bit) footroom-to-headroom range reserves the code-space extremes for sync and superwhite. Full range instead maps 0–1 straight onto the whole code space: round(value × (2^n − 1)) for R'G'B'/Y', offset by 2^(n−1) for the signed chroma channels.
Narrow vs full range — the levels-shift bug
Narrow ("video" or "legal") range is where broadcast and most delivery codecs live: 8-bit narrow uses codes 16–235 for luma with 0–15 and 236–255 reserved as footroom/headroom, 10-bit scales that to 64–940. Full range uses the entire code space, 0–255 or 0–1023, and is the default for still images, PNG/graphics exports and some screen-capture pipelines. Mix the two up — export narrow-range video but tag or interpret it as full range, or the reverse — and you get the classic levels-shift bug: blacks crush or wash out, whites clip or turn gray, usually invisible until someone scopes the signal or plays it back on a different device. This chart's 75% White reference patch is a fast sanity check: at 10-bit narrow it should read exactly 721; if your pipeline reports 768 (0.75 × 1023 rounded — the full-range answer) your range tag is wrong somewhere upstream.
709 vs 601 — the green/magenta shift
Because the luma weights differ, identical nominal R'G'B' produces different Y'CbCr numbers depending on which matrix encoded it — and green shows it hardest. 75% Green's Y' is 0.5364 under BT.709 but only 0.44025 under BT.601, roughly a 10-point swing on the 0–1 scale that shows up as a visible luma and chroma shift when a clip carries the wrong matrix tag on ingest or export (a common bug when SD-legacy 601 metadata rides along with an HD 709 master, or the reverse). Magenta, green's complement, shifts by the same amount in the opposite direction. Flip the matrix toggle above and watch the Green and Magenta rows move while White, Black and gray barely budge — that's the tell.
Reference: 10-bit narrow Y'CbCr at 75%, BT.709
| Bar | R'G'B' code | Y' | Cb | Cr |
|---|---|---|---|---|
| White (100%) | 940, 940, 940 | 940 | 512 | 512 |
| Yellow (75%) | 721, 721, 64 | 674 | 176 | 543 |
| Cyan (75%) | 64, 721, 721 | 581 | 589 | 176 |
| Green (75%) | 64, 721, 64 | 534 | 253 | 207 |
| Magenta (75%) | 721, 64, 721 | 251 | 771 | 817 |
| Red (75%) | 721, 64, 64 | 204 | 435 | 848 |
| Blue (75%) | 64, 64, 721 | 111 | 848 | 481 |
Scope: this isn't the full RP 219 pattern
SMPTE RP 219 defines the complete HD color-bar test signal — a split-field pattern with the main 75% bars on top, a lower-left PLUGE (Picture Line-Up Generation Equipment) strip for calibrating black level and near-black steps, and additional reference patches in the bottom-right well. This chart deliberately covers only the patches people actually look up day to day — the seven main bars plus black, 40% gray and 75% white as level anchors — not the full PLUGE ramp or the +I/−I chroma-alignment patches RP 219 also defines. If you need to generate a full RP 219 test pattern for a broadcast delivery, use a proper signal generator or your NLE's native bars generator; this tool is for checking what a number on a waveform or vectorscope should read, not for producing a broadcast-legal test signal.
How to use the SMPTE Color Bars Code Value Chart
Set bar level (75% or 100%), bit depth, narrow or full range, and the BT.709 or BT.601 matrix.
Click any patch to read its nominal R'G'B', quantized codes, Y'CbCr values and luma percentage.
Trace where those values come from by comparing transfer curves in the Gamma / EOTF Curve Comparator.
Frequently Asked Questions
It depends on bit depth, range and matrix — that's exactly what this chart computes live instead of hardcoding. As one fixed anchor: 100% White at 10-bit narrow range is always R'G'B' 940, 940, 940 and Y'CbCr 940, 512, 512, regardless of matrix, because white has zero chroma. Every other patch shifts with your settings — pick your bit depth, range and matrix above, then click a bar for its exact codes.
Early NTSC composite broadcast chains couldn't cleanly pass fully saturated 100% color without pushing the signal out of legal transmission limits. Running the six colored bars at 75% amplitude (100/0/75/0) keeps their luma and chroma inside safe bounds while still exercising every channel for line-up. White always stays at 100% — it's the peak reference. 75% bars are the convention you'll see on the large majority of reference signals in use today, including SMPTE RP 219.
Narrow range (also called video or legal range) reserves the code-space extremes as footroom and headroom: 8-bit narrow luma runs 16–235, 10-bit narrow runs 64–940. Full range uses the entire code space — 0–255 or 0–1023. Broadcast and most video delivery codecs use narrow range; still images, PNG/graphics exports and some screen captures default to full range. Tagging or interpreting one as the other is the classic levels-shift bug: blacks crush, whites clip.
Almost certainly a matrix mismatch. BT.601 and BT.709 use different luma weights, so identical R'G'B' produces different Y'CbCr numbers under each — green shifts hardest (75% Green's Y' is 0.5364 under 709 but only 0.44025 under 601). If a clip is tagged 601 but decoded as 709 (or the reverse), green and magenta visibly shift. Check the matrix flag your export or transcode actually wrote, not just the one you intended.
The standard bars' White patch is nominal 100%, which is code 235 at 8-bit narrow or 940 at 10-bit narrow — not 255/1023. Codes above that (236–255 at 8-bit, 941–1023 at 10-bit) are "superwhite" or headroom, reserved for transient overshoot and not part of the standard bar pattern itself. If your White patch reads 255 or 1023, you're most likely looking at full-range codes, or a narrow-range signal mislabeled as full.
The nominal R'G'B' values (0–1) and the underlying math are identical at any bit depth — only the integer code that represents them changes, because more bits means finer quantization steps. 75% Yellow's luma is 0.69585 either way, but that rounds to code 168 at 8-bit narrow and code 674 at 10-bit narrow (not simply 168 × 4, because each depth rounds independently). Use the bit-depth toggle above to compare the exact codes side by side.
Related Tools
More Framing & Color tools
QC and client review in one link — VoiceDeck
VoiceDeck adds client review & approval for video, audio, images & PDF — one shareable link, no per-seat fees, so every file ships in spec.