Addaly is in open beta. Things will change, and AI answers can be wrong — check anything that matters.

Editing Video

Cuts, sound, colour and export — taught on DaVinci Resolve, which costs nothing.

Lesson 46 of 779 min

Colour spaces, and why it looks different in the browser

The complaint

The grade looks right in the editor. The export looks different in VLC. It looks different again in Chrome, and different again on the phone. Nothing is broken, and there are three separate mechanisms in play.

A colour space is three things

  • Primaries — which exact red, green and blue the numbers refer to. Rec.709 for HD, Rec.2020 for UHD and HDR, DCI-P3 for cinema and most modern phone screens, sRGB for the web.
  • White point — what "white" means. Usually D65.
  • Transfer function — how the stored numbers map to light output. This is the gamma, and it is where most of the trouble lives.

Two files with identical pixel values in different colour spaces are different colours. The values only mean something when you know the space.

The gamma problem, specifically

Rec.709 is defined for broadcast with a display gamma of 2.4, in a dim viewing environment. sRGB, the web standard, is approximately 2.2, intended for a brighter room.

That difference is small in the numbers and visible in the shadows: a file graded against 2.4 and displayed at 2.2 has lifted, milkier blacks. Displayed the other way, it has crushed ones.

So a grade that is correct on a calibrated broadcast monitor at 2.4 looks slightly washed in a browser, and the browser is not wrong — it is applying the standard it is supposed to apply.

The practical resolution for most people delivering to the web: grade at gamma 2.2, in a normally lit room, on the kind of screen your audience uses, and check the export in a browser. If you are delivering to broadcast, follow their spec, which will say 2.4.

Data levels: the washed-out export

The second mechanism, and this one produces a large, obvious error rather than a subtle one.

Video can be encoded as full range, where 8-bit values run 0 to 255, or video range (also called legal or limited), where black sits at 16 and white at 235. The extra space at each end exists historically for signal overshoot.

If a file is encoded as one and interpreted as the other, everything shifts. Encode video-range and interpret as full, and blacks lift to grey and whites dull — the classic washed-out export. Encode full-range and interpret as video, and blacks crush and highlights clip.

Data levels: how the file was written against what the player assumesPlayer assumes full rangePlayer assumes video rangeWritten full range, 0 to 255Written video range, 16 to 235CorrectBlack is black and white is whiteCrushedBlacks crush and highlights clip. Detail is lost at both endsWashed outBlacks lift to grey and whites dull. The classic flat exportCorrectBlack is black and white is whiteffprobe reports color_range as pc for full and tv for video. A blank field means nothing was tagged,and then every player guesses for itself.
Data levels: how the file was writtenagainst what the player assumesPlayer assumes fullrangePlayer assumes videorangeWritten full range, 0 to 255CorrectBlack is black and whiteis whiteCrushedBlacks crush andhighlights clip. Detailis lost at both endsWritten video range, 16 to 235Washed outBlacks lift to grey andwhites dull. The classicflat exportCorrectBlack is black and whiteis whiteffprobe reports color_range as pc for full and tvfor video. A blank field means nothing was tagged,and then every player guesses for itself.

The file carries a flag saying which it is. Some encoders write it incorrectly and some players ignore it.

Diagnosis:

bash
ffprobe -v error -select_streams v:0 \
  -show_entries stream=color_range,color_space,color_primaries,color_trc \
  -of default=noprint_wrappers=1 out.mp4

color_range=tv is video range, pc is full. If the field is blank, nothing was tagged and every player will guess.

The fix is in the export dialogue — a Data Levels or Range setting — and the check is to open the export in VLC, which is free and honest, and in a browser. If they agree with each other and disagree with your timeline, the timeline is the odd one out.

HDR, briefly and honestly

High dynamic range uses a different transfer function — PQ or HLG — a wider colour space, and much higher peak brightness. It is genuinely different, not a stronger grade.

Three honest points. Grading HDR properly needs a reference monitor that costs more than most people's entire setup, so grading it on a laptop is guesswork. Platforms handle HDR uploads inconsistently and the tone-mapping down to SDR for viewers without HDR screens is frequently ugly. And for most work — an interview, a tutorial, a short film for the web — HDR buys nothing that a well-graded SDR delivery does not.

It matters if you are delivering to a streamer who asks for it. Otherwise, deliver Rec.709 SDR and know why.

Colour management in Resolve

Two ways to handle mixed sources:

Manual. Colour management off. Put an input transform on each log clip as the first node — a Colour Space Transform from the camera's space to Rec.709 — and grade after it. More steps, and you can see exactly what is happening at every point.

Managed. DaVinci YRGB Color Managed, or ACES. You tell the system each clip's input space and the output space, and it converts everything into a common working space automatically. Fewer steps, consistent handling of mixed cameras, and a pipeline you have to understand to debug.

For most people learning, manual is the better teacher. Switch to managed when you have several camera types in one project and the manual approach is costing you time. As the setup lesson noted, switching mid-project changes the input to every grade you have already built.

Today

Run the ffprobe command above on your last export and read the color_range field. If it is blank, you have found why the file looks different in different players.

The one thing to keep

A pixel value only means a colour once you know the space, white point and transfer function — so the washed-out export is usually a full-range file being read as video range, and the browser mismatch is usually gamma 2.2 against 2.4.

Before you move on

An export looks correct in the editor and noticeably washed out — lifted blacks, dull whites — in a media player. `ffprobe` reports `color_range=pc`. What is the most likely mechanism?

Pick the one you would defend. Nobody sees your answer.

No ads. No data sale. No public scores on people. Ever.

© 2026 Addaly