Diagnosis first

Your colors washed out after upload.
There are two causes, and they are easy to tell apart.

One of them is in your export and travels with the file, so it will follow you to any platform on earth. The other is the platform re-encoding your upload, which is not your export and not your fault. A two-minute test at your desk tells you which one you are looking at, before you change anything.

See the plans

No credit card required. Cancel any time.

Updated September 2026

Name them first

Two causes,
only one of them is the platform's fault.

A washed-out upload feels like one problem. It is two, with nothing in common except the symptom. Until you know which one you have, every fix you try is a guess, and half the popular fixes make the master worse.

Cause one: colour tagging

This is your export. The file carries indices that say which colour space the picture was authored in. When they are missing or wrong, a downstream reader has to assume, and the assumption is documented and specific. The shift is baked into the file before it leaves your machine, so it travels with the file to every platform, every player and every client hard drive.

Cause two: the platform re-encode

This is not your export. Both major platforms re-encode every upload by their own published statements, into their own ladder of renditions. What the viewer plays is a new file the platform made from yours. Anything that transform does to your picture happens after you stopped having a say, and it is undone by nothing you can change in the master.

The two-minute test

Open the exported file in a local player, on the machine you graded on and then on a second machine, before it goes anywhere. If the wash is already there, it is in the file: cause one, tagging. If the local file looks right and only the uploaded copy looks wrong, the platform pipeline or the viewer’s screen is doing it: cause two. Run this before you change a single grading node and before you consider changing host.
Cause one: colour tagging
Cause two: platform re-encode
Where ithappens
In your export, before thefile leaves your machine
On the platform's servers,after the upload finishes
What thelocal testshows
The wash is already therein the local player
The local file is right;only the uploaded copy is wrong
Travels withthe file
Yes. Re-upload it anywhereand it comes along
No. It is created bythat platform's pipeline
What actuallyfixes it
Tag the export Rec. 709explicitly, then re-export
Feed the encoder a cleaner file,or host where nothing is re-encoded
Does changinghost fix it
No. Every host will delivera washed-out file faithfully
Yes, if the host doesnot re-encode

Run the local test first. It is the only step on this page that is free, and it decides which half of the page applies to you.

Cause one

The tag your export carries,
and what happens when it is missing.

This is the cause most people have, and it is the one that follows you. The mechanism is documented by Apple in two places, and the documentation is narrow enough to state exactly.

A QuickTime file can carry a colr extension. It holds three indices: colour primaries, transfer function and matrix. Index 1 is ITU-R BT.709 for each of the three, which is why a Rec. 709 HD file is described by the triplet 1-1-1. Those three numbers are not the picture. They are the note attached to the picture saying which colour space it was authored in, so that whatever opens the file next applies the right transform rather than a guessed one.

Apple also documents the precedence rule. The colr extension supersedes the older gama extension: a writer should never put both in an image description, and a reader must ignore gama when colr is present. That single sentence is why files written by older tools, or by pipelines that still emit a gamma value alongside a colour tag, behave inconsistently as they pass from one application to another.

The consequential part is what happens when the tag is absent. Apple Technical Note TN2227 states it plainly: media without an nclc tag is colour managed by QuickTime X as if it were created in the SMPTE-C colour space. Your Rec. 709 export, untagged, is therefore read as something it is not, and a transform is applied that you never asked for. That is the documented route by which an untagged Rec. 709 file shifts. BT.709 itself is not ambiguous or outdated: the current version is BT.709-6, approved in June 2015 and in force. The standard is settled. What is missing from a shifted file is the sentence saying the file follows it.

1-1-1

The Rec. 709 triplet

Primaries, transfer function and matrix, index 1 for each, per Apple's colr documentation.

BT.709-6

In force since 2015

The current version of the ITU-R recommendation. The standard is not the moving part.

SMPTE-C

What untagged media is assumed to be

Apple TN2227: media without an nclc tag is colour managed by QuickTime X as if authored in SMPTE-C.

Where this page stops

Nothing official describes a browser-specific gamma bug, so this page does not claim one. You will find plenty of articles saying that one browser renders a file lighter than another. No vendor documents it, so we will not repeat it. The documented mechanism above is enough to explain the shift, and it is the one you can actually act on. The deeper walk through tagging, the colr and gama precedence rule and what different applications do with them is in the QuickTime gamma shift explainer.

What you do about it is short. Tag the export Rec. 709 explicitly rather than leaving the encoder to write a default, because a default that is right on your machine today is not a property of the file. Then check the tag on the finished file before you send it, the same way you check duration and audio channels. A file that says what it is survives every hop after that: another editor’s machine, a client’s laptop, a platform’s transcoder. A file that says nothing is at the mercy of whatever each of them assumes.

Cause two

The file your viewer plays
is not the file you uploaded.

If the local copy is right and the uploaded copy is not, the transform happened somewhere you do not control. Both major platforms say so in their own words.

Vimeo describes its transcoding this way: during the transcoding process, your video file is re-encoded into several formats that will be available to view on Vimeo. YouTube, on its Help page for Content Manager partners, states that YouTube always re-encodes videos to optimize their playback quality, and elsewhere that a video is converted to the highest resolution available to ensure successful playback across devices and networks. Neither statement is a criticism. Both are load-bearing engineering: a platform serving millions of devices cannot ship one file to all of them. But it means the picture your client is judging is a derived file, and every property of it, colour included, was decided by that pipeline.

YouTube also publishes what its pipeline expects, which is worth stating because it tells you what to hand it. Its recommended upload settings name BT.709 as the SDR colour space, H.264 in High Profile, 4:2:0 chroma subsampling, and encoding at the frame rate the footage was recorded at. Vimeo’s recommendations agree on H.264 High Profile and add a constant frame rate and a constant rate factor of 18 or below. When you feed a pipeline the input it documents, you remove the part of the outcome that is your responsibility. What remains is theirs.

Then there is the cause almost every article on this subject misses, and it is the cheapest of all to rule out. YouTube states that when you upload a video, it is initially processed in low quality, that higher qualities process afterwards, and that a video may seem to be missing higher qualities for several hours. Its own worked example is a 60-minute 4K 30 fps video taking up to four hours to finish high-resolution processing. A video judged in the first hour after upload may simply not be finished. If you sent a client a link ten minutes after uploading and they replied that it looks flat and soft, the honest first answer is to ask them to look again tomorrow.

Resolution matters here too, for a reason that is not obvious. Vimeo gates its renditions on the uploaded file’s dimensions: the 4K rendition is generated only when the larger dimension is at least 3,648 pixels or the smaller is at least 2,052; the 2K rendition needs 2,432 or 1,368. Upload just under a gate and the top rendition is never made, so the viewer gets a smaller one, which reads as soft and flat even when nothing is wrong with your colour at all.

The order to do it in

Fix what is yours,
then judge the result.

Every step below is either something a platform documents as its expected input, or something that removes an assumption from the chain. Do them in order. Judging before the last one is how a good export gets regraded for no reason.

1

Tag the export Rec. 709, explicitly

Do not rely on the encoder's default. Write the tag, then confirm it on the finished file. This is the step that fixes cause one, and it is the only step that follows the file to every destination it will ever reach.

2

Export at CRF 18 or below

Vimeo's own compression guidelines recommend a constant rate factor of 18 or below. A cleaner input gives the platform's encoder less to guess at, which is the only lever you have over cause two.

3

Use H.264 High Profile

Both platforms name High Profile in their recommended upload settings, and Vimeo says High Profile rather than Main explicitly. YouTube adds 4:2:0 chroma subsampling for its own uploads.

4

Keep the frame rate constant

Vimeo asks for a constant frame rate from the standard set. YouTube asks that content be encoded and uploaded at the frame rate it was recorded at, and that interlaced material be deinterlaced first.

5

Upload above the rendition gate

Vimeo generates its 4K rendition only when the larger dimension is at least 3,648 pixels or the smaller at least 2,052, and its 2K rendition at 2,432 or 1,368. Land under a gate and the top rendition never exists.

6

Wait for high-quality processing to finish

YouTube processes in low quality first and says higher qualities can take hours, with a worked example of up to four hours for a 60-minute 4K 30 fps video. Nothing you see before that is the finished picture.

7

Only then, judge

Compare the finished platform copy against your local file, on the same screen, one after the other. Whatever difference survives that comparison is real, and now you know which of the two causes it belongs to.

The structural half

A host that never re-encodes
cannot apply a second transform.

This is the part of the problem that architecture settles rather than technique, and it is worth being precise about how much of it is settled.

uncompressed.io streams the exact bytes you upload. There is no transcode anywhere in the path, of video or of audio. MP4 or MOV, H.264, HEVC or AV1, up to 50 GB per file, delivered as uploaded. The consequence for colour is narrow and real: there is no second encoder in the chain, so there is no second colour transform between your export and your viewer’s player. The file the viewer receives carries the tag you wrote, because it is the file you wrote. Cause two does not exist here, because the mechanism that produces it does not exist here.

Now the part that matters more than the claim. That does not make colour correct on the viewer’s screen, and nothing any host can build ever will. The viewer’s display, its calibration, its brightness setting and their browser still do the final rendering, on our player and on every other. A client watching on an uncalibrated laptop at half brightness in a bright room is going to describe your grade as dark, and there is no hosting decision that changes that. We will not claim otherwise, and a vendor who does is selling you something that is not theirs to sell.

There is a second honest trade to state alongside it. There is no adaptive ladder here, because building one would mean re-encoding. So a viewer on a slow connection buffers instead of silently sliding to a mushy rendition. That is the correct behaviour for reviewing a grade, where a quiet downgrade is worse than a pause, and the wrong behaviour for casual reach, where a pause is worse than a downgrade. Playback also depends on the viewer’s hardware decoder: a high-bitrate master plays when their machine can decode it, and their machine is not something we control either.

When to stay where you are

If the wash is in your export,
changing host fixes nothing.

The most expensive version of this problem is the one where somebody migrates a library to solve a tagging bug, and arrives with the same washed-out file.

If your local player already shows the wash before the file is uploaded anywhere, no host on earth improves it. A host that re-encodes will re-encode a washed-out file. A host that does not re-encode will faithfully deliver a washed-out file. The fix is an export setting on your machine, it costs one re-export, and the two-minute local test tells you that before you spend a weekend moving anything. Run the test first. If it points at cause one, close this page and go fix the tag.

There are also good reasons to keep publishing where you publish. YouTube is unbeatable for reach and discovery, it costs nothing, and no private host substitutes for an audience. Vimeo’s player, marketing tools and OTT products have no equivalent here. Both platforms are doing the re-encode for a reason: they are delivering to every device and connection there is. If what you need is reach, the re-encode is the price of the reach and it is a fair one. If what you need is for a colourist, a director or a client to judge the actual grade, that is the case where the derived file is the wrong object to be looking at, and where a host that hands over the original bytes is doing something a ladder cannot.

Most people reading this need both, on different days. The useful split is to keep the public cut where the audience is, and send the copy that decisions get made on somewhere that does not touch it.

Questions

Frequently asked

How do I tell whether the wash is my export or the platform?

Open the exported file in a local player before you upload it anywhere. If the wash is already there, it is in the file, and it is almost always colour tagging: it will follow the file to every platform you try. If the local file looks right and only the uploaded copy looks wrong, the platform's re-encode or the viewer's screen is doing it. That test costs two minutes and saves a weekend of migrating.

What is the colour tag actually doing?

A QuickTime file can carry a colr extension holding three indices: colour primaries, transfer function and matrix. Index 1 is ITU-R BT.709 for each of the three, which is the HD triplet 1-1-1. Those indices tell any downstream reader which colour space the picture was authored in. When they are missing, the reader has to assume something, and Apple documents what QuickTime X assumes: media without an nclc tag is colour managed as if it were created in the SMPTE-C colour space. That assumption is the documented route by which an untagged Rec. 709 export ends up shifted.

Does re-exporting with a Rec. 709 tag fix a file that is already online?

It fixes the file. Whether it fixes the page depends on the platform: both major platforms re-encode every upload, so a corrected master has to be re-uploaded and re-processed before anyone sees the corrected picture. Replace the file, then wait for high-quality processing to finish before you judge the result.

Should I fix a wash by pushing contrast and saturation in the grade?

No. If the cause is tagging, you are grading against a transform that a correctly tagged export removes entirely, and your master ends up wrong everywhere else, including in the edit, on the deliverable and on the client's own copy. Fix the tag, re-export, then look again. Grade only what is still wrong after that.

Why does the same file look different an hour after upload than it does the next morning?

YouTube states that a video is initially processed in low quality and that higher qualities can take hours to appear, giving a worked example of up to four hours for a 60-minute 4K 30 fps video. A video judged in the first hour after upload may simply not be finished. Wait for the high resolutions to appear before you conclude anything about colour or detail.

Does hosting somewhere that never re-encodes remove the problem?

It removes one of the two causes. A host that never re-encodes cannot apply a second colour transform, so the file the viewer receives carries the tag you wrote. It does nothing about the other cause: if the wash is in your export, it is in the file, and every host will faithfully deliver a washed-out file. It also does nothing about the viewer's display, brightness setting or browser, which do the final rendering on every platform, ours included.

What should I check before sending anything to a client?

Three things, in order. That the export carries an explicit Rec. 709 tag rather than the encoder's default. That the file plays correctly in a local player on a second machine, not only on the one that graded it. And that any platform copy has finished processing. Anything still wrong after those three is a real grading note.

Judge the grade, not the transcode

uncompressed.io streams the exact bytes you upload. No re-encode of video or audio, so no second colour transform between your export and your client's screen.

Sources

  1. 1.Apple, QuickTime File Format: Color Parameter Atom (colr), the three nclc indices and the rule that colr supersedes gama (fetched 4 September 2026)
  2. 2.Apple Technical Note TN2227: media without an nclc tag is colour managed by QuickTime X as SMPTE-C; the HD triplet 1-1-1 is Rec. 709 (fetched 4 September 2026)
  3. 3.ITU-R Recommendation BT.709: current version BT.709-6, approved June 2015, in force (fetched 4 September 2026)
  4. 4.Vimeo Help Center, FAQ video transcoding: every uploaded file is re-encoded into several formats (fetched 4 September 2026)
  5. 5.Vimeo Help Center, video and audio compression guidelines: H.264 High Profile, CRF 18 or below, constant frame rate (fetched 4 September 2026)
  6. 6.Vimeo Help Center, guidelines for determining playback resolution: rendition dimension gates and maximum delivery bitrates (fetched 4 September 2026)
  7. 7.YouTube Help: “YouTube always re-encodes videos to optimize their playback quality”, stated on its Content Manager page for music labels and distributors (fetched 4 September 2026)
  8. 8.YouTube Help, recommended upload encoding settings: H.264 High Profile, 4:2:0, BT.709 as the SDR colour space, upload at the recorded frame rate (fetched 4 September 2026)
  9. 9.YouTube Help, processing after upload: a video is initially processed in low quality and higher qualities may take several hours (fetched 4 September 2026)
  10. 10.YouTube Help, video resolution and quality: a video is converted to the highest resolution available for playback across devices and networks (fetched 4 September 2026)
  11. 11.Apple, HLS Authoring Specification for Apple Devices: one colour space per stream, Rec. 601, Rec. 709, DCI-P3 or Rec. 2020 (fetched 4 September 2026)
  12. 12.uncompressed.io pricing: plans, storage and what streams
Video Colors Washed Out After Upload: The Two Causes