xhdr Built by @tolimarchuk

By Toli Marchuk ·

I saw a profile picture flicker. Then I built xhdr.

I saw someone else’s PFP flickering next to an HDR video on X. I wanted mine to do that.

That was supposed to be a quick experiment. It turned into a rabbit hole.

Bright was easy. Looking good was harder.

I wanted a bright green background that stood out on the timeline. I also wanted my face to look like my face. Skin, hair and body detail had to survive, and the crop had to keep my hair inside the circle.

Turning everything up gave me a brighter file, but also a washed-out portrait. We had to separate the creative grade from the encoding and the way a viewer displayed it. A correct color profile does not make every exposure choice look good.

The file looked right. The upload didn’t.

Our local PQ PNG could display HDR, but one saved X avatar came back as an sRGB JPEG. The HDR metadata was gone. Sending an image as a photo in a message could also change the file, although we did not establish that every messaging route did so.

We stopped treating the preview as proof. We inspected the actual exported file and the image X served back.

The combination that worked

The successful profile upload used a 400 × 400, 8-bit indexed PNG: a quantized palette, a generated Rec.2020/PQ ICC profile and one transparent pixel in the top-left corner, outside the visible avatar circle. The export also includes cICP color metadata.

In that desktop-browser test, X kept the ICC profile and the decoded image pixels, even though it stripped standalone cICP metadata. I could see the HDR on my saved profile. We did not prove the transparent pixel alone caused that result, or that every X client would preserve it.

That became the X-ready download. The higher-precision 16-bit master remains a separate option. They serve different purposes.

Then a default made it look broken again.

A later redesign switched the starting look to Natural. The processing math could still be correct while the result was much less intense. Comparing the same input against the earlier output exposed the difference. We restored a stronger default and added regression checks instead of blindly adding more exposure.

Everything happens on your device.

The browser decodes and grades the image, a worker handles conversion and PNG encoding, and the download is made locally. There is no photo-upload server in the conversion flow.

The site reached about 6.9k visits in the launch snapshot. Visits, not unique users. That told me people were curious; it did not establish revenue or long-term usage.

The useful part of the rabbit hole

Build the thing, inspect what actually shipped, and keep testing the part people use. “Valid HDR file,” “good-looking portrait” and “X preserved it” are three different checks.

I do this kind of hands-on product work at Signa - Forward Deployed Engineer for Hire. I’m also building Lurk - Get Users for your app, for bringing people into apps and communities and giving them a reason to return.

Make your own HDR profile picture · upload guide · try the flicker experiment.