Instagram strips HDR on upload — what ffprobe actually shows
You uploaded a Dolby Vision clip from your iPhone 15 Pro. You expected HDR to survive. You got back an 8-bit bt709 file with no transfer curve metadata, no mastering display info, no Dolby Vision RPU. Instagram's upload pipeline strips all of that, and no downloader — including ours — can put it back. We ran ffprobe on a real downloaded Reel today and show the exact fields that tell the story. Plus why competitors who advertise 'HDR preservation' are selling you a file that was already SDR before they touched it.
The claim that keeps showing up
Search "instagram downloader HDR" and you'll find a handful of tools advertising "HDR-preserved downloads" or "Full Dolby Vision support". Read the marketing copy carefully. Most of them are promising to preserve something that didn't exist when the video reached Instagram's CDN in the first place.
We ran the test on 2026-04-23 against a real public Reel (@natgeo's DH56yy7p3lZ) through our production pipeline, then ffprobe'd the output. Every HDR field you'd want to see — 10-bit pixel format, bt2020 color primaries, PQ or HLG transfer function, Dolby Vision RPU side-data — is absent. Not stripped by us. Absent from the file Instagram hands out.
What ffprobe shows on a real 2026 Reel
Here's the unedited output from running `ffprobe -show_streams -select_streams v:0` on the MP4 our server merged and served today:
`codec_name=h264` — H.264, which supports HDR10 via its High 10 profile but effectively never ships it in consumer streaming.
`profile=High` — Not High 10. High Profile is 8-bit only. A 10-bit source would need High 10 to carry HDR metadata, and Instagram's transcode doesn't produce that profile.
`pix_fmt=yuv420p` — 8-bit 4:2:0 chroma subsampling. 10-bit would read as `yuv420p10le`. HDR content is almost always 10-bit or higher; 8-bit is a reliable SDR fingerprint.
`color_primaries=bt709` — Rec. 709 gamut. That's the standard SDR color space defined in 1990 for HD television. HDR10 uses `bt2020`, a wider gamut about 75% larger by area.
`color_transfer=bt709` — The gamma curve for SDR. HDR uses `smpte2084` (PQ, used by HDR10 and Dolby Vision) or `arib-std-b67` (HLG, used by broadcast HDR). Neither appears.
`color_space=bt709` — Matrix coefficients matching Rec. 709. Again, SDR.
No `side_data_list` entries for mastering-display metadata, content light level, or Dolby Vision configuration. The format metadata section is empty. Every HDR tell we could look for is missing.
The smoking gun in Instagram's own thumbnail URL
Our `/api/parse` response includes the Reel's cover thumbnail URL. Look closely at the path that Instagram generates for it: `https://scontent-lga3-2.cdninstagram.com/v/t51.71878-15/490805358_1186807869243336_8527210398743307491_n.jpg?stp=dst-jpg_e15_tt6&efg=...` — the `efg` query string, when base64-decoded, contains the literal string `"encode_tag":"image_urlgen.612x1088.sdr.f71878.default_cover_frame"`.
That `.sdr.` token is Instagram's own internal labeling on the encoded asset. Their CDN is literally tagging the thumbnail as SDR. For an HDR-sourced upload — and the Reel in question came from @natgeo, who absolutely upload HDR footage — that's the processing label getting applied downstream of the HDR-stripping step.
We didn't make this up. You can verify it on any Reel right now by pulling the parse response and decoding the `efg` parameter on the thumbnail URL. The `.sdr.` tag is universal across every Reel we've inspected.
Where in the pipeline the HDR dies
Instagram's creator upload flow runs on Meta's shared media-ingest infrastructure. When you tap "Post" on a Reel recorded in Dolby Vision on iPhone 15 Pro, the app hands the file to Meta's backend, which runs it through a transcoding stage that does several things in order:
Ingest validates the source — container format, codec, duration limits. Dolby Vision and HDR10 sources pass this step just fine. Meta accepts them as inputs.
The re-encode step is where the HDR dies. Meta's backend decodes the source, color-space-converts from bt2020 / PQ down to bt709 / SDR using some internal tone-mapping algorithm, and re-encodes as 8-bit H.264 High profile at whatever target bitrate matches the resolution tier. Tone-mapping is lossy and irreversible — you can't un-mix the highlights back out once they've been compressed into 8-bit.
The DASH packager then produces the MPD manifest with multiple resolution representations (1080p / 720p / 360p), each independently re-encoded from the tone-mapped master. None of those representations carry HDR metadata because the master they were derived from no longer has it.
Every download tool — ours, yt-dlp, any scraper, any browser extension — pulls from the DASH representations that exist on Instagram's CDN. The HDR stripping happens before anything outside Meta can reach the file.
Why Meta does this (and why the reasons are defensible)
Playback consistency is the big one. Instagram serves Reels to a billion daily viewers across devices that span a ten-year compatibility range — iPhone 7 on iOS 15, Android 8 on a 2019 Samsung, 2015 laptops running old Chrome. HDR playback on that matrix is a minefield. Some devices render HDR natively, some tone-map in hardware, some tone-map in software badly, some fall back to SDR with broken color. Rather than ship a format that looks different on every screen, Meta ships a single format that looks the same on every screen.
Bandwidth is the second reason. HDR10 at 10-bit depth requires about 25% more bandwidth than 8-bit SDR at the same visual quality, on average. Dolby Vision adds metadata overhead per-frame. At Meta's scale, that's real infrastructure cost, real carrier egress fees, real user data consumption on metered plans.
The third, less-discussed reason: advertiser neutrality. Reels run ads. Ad creatives are typically produced in SDR because the cheap-to-produce side of ad tooling still lives there. Mixing HDR Reels with SDR ads creates a jarring playback experience where the ad feels dim and washed-out compared to the surrounding content. Meta's flat SDR baseline eliminates that contrast.
None of this means HDR on Instagram would be impossible to build. It means Meta has weighed the tradeoffs and decided not to. The design choice is defensible even if individual creators find it annoying.
What this means for creators who shot in HDR
You recorded a sunset in Dolby Vision on your iPhone 15 Pro. Watched it back in Photos. Gorgeous — the sky reads pink-to-orange gradient, the clouds hold detail in the highlights, the shadows have color. You uploaded it to Instagram. Watched the Reel — looks fine on your phone's HDR display, but sort of lifeless compared to the Photos preview.
That's the tone-map at work. Meta's conversion is pretty good by industry standards, but lossy-by-definition — collapsing a 10-bit bt2020 PQ signal to 8-bit bt709 SDR means throwing away the highlight headroom that made the file feel HDR in the first place. On an HDR phone the difference is visible; on an SDR phone the difference is invisible because the phone couldn't show HDR anyway.
Download that Reel back and open the file on a computer. The file is bt709, 8-bit. Match the Instagram app's playback exactly. Whatever HDR magic your eye perceived in the app was either a post-tone-map display enhancement on your phone or confirmation bias from knowing you'd uploaded HDR.
Practical consequence: if you care about HDR preservation for archival purposes, you need to keep the original file. iPhone's built-in Photos app auto-saves the source during upload by default, so the master is on your device or in iCloud. Don't rely on re-downloading from Instagram to recover the HDR version — it was gone the moment you hit Post.
What about HEVC? Didn't Instagram test AV1?
Instagram experimented with HEVC (H.265) for some creator-pro uploads in 2023 and quietly rolled back most of it by late 2024. The experiment tested whether higher-compression codecs could preserve more quality at the same bandwidth — a reasonable hypothesis. Results apparently didn't justify the operational complexity: HEVC decoding isn't universal on older Android, Safari's HEVC support has historical gaps, and Meta's transcoding infrastructure was optimized for H.264 across the edge fleet. So most Reels in 2026 still come out as H.264.
The AV1 experiment in early 2024 targeted web playback specifically, where AV1 support in modern browsers is solid. We saw some web-surfaced Reels delivered as AV1 for a few months. That experiment also folded back — possibly because Meta didn't want to maintain a two-codec pipeline, possibly because mobile AV1 decode in hardware was still inconsistent.
Even if Meta brings HEVC or AV1 back, that doesn't fix HDR. Both codecs support 10-bit and HDR formats, but the transcoding step's tone-mapping-to-SDR happens before the codec selection — the codec is just the wrapper. To get HDR on Reels, Meta would need to preserve the source's color metadata through the entire pipeline, not just switch codecs.
The competitor-tool problem
Several Instagram downloader sites claim one or more of: "HDR preservation", "4K HDR", "Dolby Vision support", "Original HDR10 metadata kept". Every claim we've investigated has fallen into one of three buckets.
Bucket one: outright fabrication. The tool serves the same SDR bt709 file everyone else gets, the "HDR" label is cosmetic marketing. Run ffprobe on their output and it's identical to ours — 8-bit yuv420p, bt709 everything.
Bucket two: they re-encode the SDR file into an HDR container (tagging it PQ / bt2020 without actually having that data). The result is an 8-bit SDR signal with HDR metadata falsely claiming 10-bit PQ content. On HDR displays this plays back looking washed-out and wrong — the display applies the PQ transfer curve to an SDR signal and the highlights clip catastrophically. Worse than the honest SDR file.
Bucket three: they do upscale the 8-bit to 10-bit using a dithering trick, then apply a fake tone curve. This produces a file that looks HDR-ish on an HDR display but has none of the actual highlight detail of a real HDR master. Closer to SDR-with-extra-steps than to HDR.
We don't play any of these games. If Instagram serves bt709 SDR, we serve bt709 SDR. The file you download is exactly what Meta stores, minus the network layer. No tricks, no upscaling, no color-space manipulation, no "enhancement" that would quietly degrade the file.
How to verify for yourself
Download any Reel from any downloader. Install ffmpeg on your machine — the `ffprobe` binary ships with it. Run: `ffprobe -v error -show_streams -select_streams v:0 <file.mp4>`.
Look for four fields. `pix_fmt` should read `yuv420p` (SDR) or `yuv420p10le` / `yuv420p12le` (HDR). `color_primaries` should read `bt709` (SDR) or `bt2020` (HDR). `color_transfer` should read `bt709` / `smpte170m` (SDR) or `smpte2084` / `arib-std-b67` (HDR). For Dolby Vision specifically, look for a `side_data_list` containing `DOVI configuration record`.
Every Reel file from every downloader tool we've tested reads SDR on all four fields. If a competitor's file reads HDR on those fields, it's a red flag — they're either mis-tagging SDR content (bucket two above) or doing synthetic upscaling (bucket three). Neither is what a creator uploading a real HDR source would want.
MDN has a thorough primer on video color spaces and their representation at https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Video_codecs if you want to go deeper than a blog post.
What you can actually do about it
If HDR matters, get the source file. If you shot the video yourself, it's in your camera roll — Photos on iPhone keeps the original HDR version locally, and iCloud Photos preserves it across devices. Don't upload-then-redownload expecting to recover HDR; upload a copy and keep the master.
If someone else made the video, ask them. Creators who shoot HDR are usually happy to share the source when asked directly, especially for reuse contexts where HDR actually matters — commercial video, print proofing, professional post-production. Social media downloaders serve a different purpose (offline viewing, personal archival, quick sharing) where SDR is fine.
If you're building a reference archive — documentary work, journalism, legal holds — the Reel download is the canonical-as-served record, because that's what the audience actually saw. The HDR master is a different kind of record (the creator's production intent). Both have value; they're not substitutes for each other.
The honest summary
Every Reel on Instagram's CDN is 8-bit bt709 SDR. The source may have been HDR; the file you download is not.
This is Meta's architectural choice, enforced in the upload transcoding pipeline, and no downloader tool can reverse it. The HDR data doesn't exist on Instagram's side to retrieve.
Any downloader advertising "HDR preserved" or "Dolby Vision" output is either lying or performing synthetic upscaling that produces a worse file than the honest SDR source. Verify with ffprobe; the truth is four fields deep in the stream metadata.
InstaYolo's Reel downloads are bit-for-bit the SDR master Instagram serves. Open the file on an HDR display, it looks SDR. Open it on an SDR display, it looks the same as it did in the Instagram app. No quality loss from our remux, but also no HDR we didn't have access to in the first place.
Our other posts on how the pipeline actually works: [how residential proxies handle Instagram's CDN](https://instayolo.com/blog/how-residential-proxies-bypass-instagram-cdn), [why 4K Reel downloads are upscales](https://instayolo.com/blog/the-4k-instagram-reel-myth), and [inside Instagram's DASH manifest](https://instayolo.com/blog/instagram-dash-streaming-explained).
FAQ
- If I uploaded a Dolby Vision video to Instagram, can I download it back in Dolby Vision?
- No. Instagram's upload pipeline tone-maps Dolby Vision / HDR10 sources to SDR (bt709, 8-bit) before storing them on the CDN. The HDR metadata is discarded at that step. Your download — from any tool — is the tone-mapped SDR version. Keep the original file if HDR matters; Photos on iPhone saves it locally by default.
- What fields should I check in ffprobe to verify a file is SDR?
- Four stream fields: pix_fmt should be yuv420p (not yuv420p10le), color_primaries should be bt709 (not bt2020), color_transfer should be bt709 / smpte170m (not smpte2084 / arib-std-b67), color_space should be bt709. Also check that there's no side_data_list entry for Dolby Vision or mastering display metadata. Instagram Reels pass all four SDR checks plus have no HDR side-data.
- Does Instagram support HDR in Stories or Live instead?
- Neither as of April 2026. Stories run through the same transcoding pipeline as Reels with similar SDR output. Live uses a different real-time pipeline also capped at SDR. Meta has tested HDR in some experimental surfaces (Facebook Watch had a brief HDR pilot in 2024) but nothing has shipped on Instagram's main surfaces.
- What about YouTube — does it preserve HDR?
- Yes, for uploads that meet YouTube's HDR requirements (specific codec profiles, metadata, minimum bitrate). YouTube serves HDR content in bt2020 / PQ via AV1 or VP9 Profile 2. This is fundamentally different from Instagram's approach. If you specifically need HDR preservation on a social platform, YouTube is the right target.
- Can I use ffmpeg to add HDR metadata back to a downloaded Reel?
- You can tag the file with HDR metadata — but that only adds labels without restoring the data. Tone-mapping from 10-bit PQ to 8-bit bt709 is lossy and irreversible; the highlight detail that made the source HDR is permanently gone. Adding bt2020 tags to an 8-bit SDR file makes it play back incorrectly on HDR displays (the display interprets the SDR signal as PQ, resulting in clipped highlights). Don't do this unless you know exactly what you want.