Convert HDR Video to SDR

Upload an HDR clip — it's tone-mapped down to standard-dynamic-range in your browser, so it plays with correct color and brightness anywhere. Nothing is uploaded.

Try:
SDR video

About this tool

HDR video is mastered for wide-gamut BT.2020 color and a high peak brightness using a PQ (smpte2084) or HLG (arib-std-b67) transfer curve. Play that same file on an ordinary standard-dynamic-range screen — or drop it into an editor or a website that doesn't understand HDR — and it renders gray, dim, over-dark, or washed-out, because the SDR display reads the HDR signal as if it were plain BT.709. This tool tone-maps the clip down to SDR BT.709 / yuv420p so it looks right everywhere.

It runs a fixed, order-sensitive ffmpeg zscale + tonemap filter chain: linearize the source transfer → convert to float RGB → gamut-map to BT.709 → tone-map the luminance with your chosen curve → re-encode the BT.709 transfer at limited (tv) range → 8-bit 4:2:0. Everything runs in your browser via WebAssembly ffmpeg — the file is never uploaded.

Controls

Worked examples

FAQ

Why does my HDR video look gray or dim on a normal screen?

Because the file carries an HDR transfer curve (PQ or HLG) and BT.2020 wide-gamut color, but a standard-dynamic-range display decodes it as ordinary BT.709. The bright, wide-gamut signal gets squashed into the SDR range with no tone-mapping, so highlights flatten and midtones look washed-out or dark. Tone-mapping remaps the luminance and gamut into BT.709 so the picture looks correct.

Which tone-map curve should I pick?

Start with Hable — it's a filmic S-curve that keeps highlight and shadow detail with natural contrast, and it's the default in almost every HDR→SDR guide. Try Mobius if you want punchier, more saturated midtones, or Reinhard for a flatter, brighter look. Linear and Clip are the simplest operators; Clip hard-clips bright highlights (sharpest but can blow them out), Linear just scales luminance.

What does "peak luminance (nits)" do?

It's the nominal peak brightness of the SDR target you're mapping to — the reference white the tone-map curve rolls the HDR highlights down toward. 100 nits is the standard SDR white point and the right value for almost everyone. Raising it targets a brighter SDR display and leaves highlights a little brighter (and closer to clipping).

What can I put in, and what comes out?

Input can be any HDR (or SDR) video your browser can decode — MP4/MOV/MKV with PQ or HLG HDR, BT.2020. Output is MP4 (H.264 + AAC) by default, or WebM (VP9 + Opus) — both SDR BT.709 / 8-bit 4:2:0, playable on any ordinary screen. Audio is re-encoded, not dropped.

Limits

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool video-hdr-to-sdr 'url=https://example.com/input' 'tonemap=hable' 'peak=100' 'desat=0' 'format=mp4' 'quality=75'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/video-hdr-to-sdr/?url=https://example.com/input&tonemap=hable&peak=100&desat=0&format=mp4&quality=75

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.