The QuickTime gamma problem

The same video file looked different on Mac and Windows for two decades. The cause was a 1993 design decision baked into Apple's colour management pipeline.

The symptom

A colourist grades a file on a calibrated reference monitor. Exports it. The client opens it in QuickTime Player on a Mac. The blacks are lifted, the contrast is flattened, the midtones are washed out. The same file on Windows looks correct.

This was not a codec issue, a bit depth issue, or an export setting gone wrong. It was a gamma interpretation disagreement between Apple’s colour management pipeline and every broadcast standard in existence. It persisted for roughly twenty years.

The mechanism

Video files carry colour metadata. In QuickTime and MP4 containers, this lives in the colr atom as NCLC (nonconstant luminance coding) tags: three 16-bit integers for colour primaries, transfer characteristics, and matrix coefficients. A file tagged 1-1-1 declares BT.709 for all three, the standard encoding for HD video since 1990.

When QuickTime Player on macOS encountered a 1-1-1 file, it handed the metadata to ColorSync, Apple’s system-level colour management framework. ColorSync performed a transform from the file’s declared colour space to the display’s ICC profile. This is correct colour management. The problem was inside the transform.

Apple’s pipeline applied an effective display gamma of approximately 1.96 to BT.709 content. The broadcast standard for BT.709 displays is a gamma of 2.4, formalised as ITU-R BT.1886. The sRGB standard on most Windows monitors specified an effective gamma of 2.2. Apple’s 1.96 was lower than both.

Lower gamma means lifted midtones. Brighter, flatter, less contrasty. Every colour-managed application on macOS went through this same pipeline: QuickTime Player, Preview, Safari, Chrome, Quick Look. All exhibited the same washed-out result.

On Windows, the same file played with the expected contrast. Not because Windows had better colour management, but because it had effectively none. Windows video applications sent pixel values straight to the display without a transform. On a monitor with native gamma near 2.2, this produced a result close to the broadcast standard. Correct by accident.

Where 1.96 came from

In 1993, Apple shipped ColorSync with a system gamma of 1.8. This was not arbitrary. Early Mac CRTs, built for desktop publishing, had a measurably different phosphor response from consumer televisions. The 1.8 figure reflected actual hardware and was convenient for prepress, where a lighter gamma better predicted print output.

The rest of the industry used 2.2.

When Apple transitioned to wider-gamut displays and a more sophisticated colour pipeline in the mid-2000s, the effective gamma for video content shifted to approximately 1.96. This sat between the legacy Mac gamma (1.8) and the sRGB standard (2.2). It was a deliberate backward-compatibility compromise, maintaining visual consistency for existing Mac users while inching toward the industry norm. The result matched neither Mac convention, nor broadcast convention, nor sRGB.

The broadcast world did not care about Apple’s transition. A reference monitor displays gamma 2.4. That is the standard. An operating system that intercepts the signal and applies 1.96 instead is, from the perspective of anyone delivering broadcast content, producing an incorrect image.

Workarounds

The post-production industry developed a set of workarounds, none of them satisfying.

Some encoders wrote a transfer_characteristics value of 2 (“unspecified”) instead of 1, producing NCLC tags of 1-2-1. This caused ColorSync to skip its gamma interpretation. It was also technically incorrect: the encoder was lying about the file’s colour space to avoid a correct-but-unwanted transform.

DaVinci Resolve introduced a “Rec 709-A” gamma tag option specifically for this problem. A professional colour grading application needed a special export setting to work around operating system behaviour. That alone tells you how entrenched the issue was.

The BBC published qtff-parameter-editor, an open-source tool whose entire purpose was to rewrite three integers in a file header so that Apple’s colour management would stop making the video look wrong.

Why it lasted twenty years

Apple’s implementation was not, strictly speaking, a bug. ColorSync read the file’s declared colour space, consulted the display’s ICC profile, and performed a mathematically correct transform. The transform just used gamma assumptions that differed from the broadcast industry’s expectations.

Changing the value would break backward compatibility. Every application relying on ColorSync, every ICC profile tuned for Mac displays, every piece of content authored with Mac gamma in mind. Apple could not change a number in a lookup table without changing the visual appearance of every colour-managed image on every Mac.

There was also a philosophical disagreement. Apple’s position: the display profile should determine final appearance. The broadcast industry’s position: video content should display with a specific, known gamma regardless of the display hardware. Both defensible. Incompatible.

The partial fix

In 2009, Mac OS X 10.6 Snow Leopard quietly changed the default system display gamma from 1.8 to 2.2. Apple did not emphasise this in the release notes. It was the most significant colour management change Apple had ever made.

But system display gamma and video playback gamma are different things, managed by different parts of the pipeline. The 2.2 shift brought still images and the desktop closer to the rest of the world. Video playback remained at approximately 1.96 for years afterward. It took further macOS updates, the transition to P3 displays, and a new generation of colour management APIs before the situation improved meaningfully.

Even today, QuickTime Player on macOS does not produce an image identical to a BT.1886 reference monitor. The gap is smaller than it was in 2008. It has not fully closed.

Practical implications

Files tagged with original 1-1-1 NCLC values still exist in archives, on hard drives, on YouTube, on client review platforms. Any file encoded between roughly 2001 and 2015 and tagged with standard BT.709 metadata falls in the gamma-ambiguous era. The metadata is correct. The file is correct. The playback result depends on which platform interprets it.

For tools handling these files today:

  • Do not assume QuickTime Player is a reference. It never was, and the gamma gap has not fully closed. Validate against a calibrated monitor or a player with explicit BT.1886 support.
  • Preserve NCLC tags. The 1-2-1 workaround was necessary in its time, but stripping transfer characteristics from files makes the ambiguity permanent. Correct tags with correct playback is better than no tags with unpredictable playback.
  • Flag gamma-era files. Any workflow ingesting archival content should identify files from this period and surface the potential for gamma misinterpretation. The file is not wrong. The metadata is not wrong. But the rendered result may not match the original creative intent.

The QuickTime gamma problem was not a bug. It was two correct systems, built on different assumptions about what a display should do, looking at the same numbers and seeing different images.

References

  • Charles Poynton, “sde, vui, nclc, nclx.” poynton.ca
  • ITU-R BT.709-6. Parameter values for the HDTV standards for production and international programme exchange.
  • ITU-R BT.1886 (2011). Reference electro-optical transfer function for flat panel displays used in HDTV studio production.
  • IEC 61966-2-1:1999. Default RGB colour space, sRGB.
  • Todd Dominey, “Why Are Videos Washed Out on the Mac? Exploring QuickTime Gamma Shift” (2021). blog.dominey.photography
  • CineD, “Quicktime Gamma Shift Bug: What Is It and How to Combat It” (2024). cined.com
  • BBC qtff-parameter-editor. github.com/bbc/qtff-parameter-editor
  • Apple Developer Documentation, “Tagging media with video color information.” developer.apple.com
  • Academy Software Foundation, Encoding Guidelines: Web Color Preservation. github.com/AcademySoftwareFoundation