How to
How to make a dark mode illusion image
Upload two pictures and Duality solves the alpha channel that makes both appear — one for light mode, one for dark. It takes about a minute, runs entirely in your browser, and needs no account. The steps below are in the order that matters, because the first one decides whether the rest will work at all.
The seven steps
01Pick two images that can coexist
This decides everything, and it's the step people skip. The picture you want in light mode needs real brightness; the one you want in dark mode needs real blacks. Two mid-grey photos will fight and both will lose. High-contrast subjects with clear silhouettes work best.
02Assign light and dark deliberately
Swapping which image goes where is not a neutral choice. Most of X runs dark mode, so whatever you put in the dark slot is what most people will actually see. If one image is the punchline, it belongs in dark.
03Choose a render mode
Interlace keeps both images at full contrast and leaves a fine woven texture. Blend is perfectly smooth but washes both images out. For photographs on X, interlace is almost always the right answer.
04Pick a mask
A 1px checkerboard is nearly invisible at full size and is the sane default. Larger cells — halftone dots, scanlines, crosshatch — read as a deliberate style and survive thumbnail downscaling better, at the cost of being obvious.
05Fix the tone until the preview holds
Raise contrast on both layers. Drop gamma on the light layer to push it brighter and raise it on the dark layer to push it darker. Leave saturation at zero unless the colour is genuinely worth some ghosting — alpha is shared across the colour channels, so saturation always leaks a little into the other theme.
06Check it against the surfaces you'll post to
Pure white and pure black are the design targets, but X's Dim theme, Slack and iOS message bubbles all sit somewhere else. Preview those before you commit rather than after someone tells you it looks grey.
07Export, and watch the file size
X keeps the alpha channel only while it serves your upload as a PNG. Past roughly 5 MB it re-encodes to JPEG and the effect dies outright. If you're near the ceiling, raise the mask cell size before you shrink the image — a per-pixel mask is expensive to compress, and coarser cells compress dramatically better.
The one rule that decides whether it works
The dark-mode image has to be darker than the light-mode image at every single pixel. Not darker on average — darker everywhere. Written out, that's D ≤ L, and it falls out of the maths rather than being a preference: alpha can only take values between 0 and 1, and the solve leaves that range the moment the rule is broken.
You don't have to satisfy it by hand. Both render modes are strategies for paying that bill — blend compresses the two images into tonal bands that can't overlap, interlace hands each pixel to one image so the question never comes up. But knowing the rule is what turns “this looks terrible and I don't know why” into a fix, which is usually contrast on both layers and gamma pulling them apart.
It works with words too
A layer doesn't have to be a photograph. Typing straight into either half gives you a caption only part of your audience can read — the setup visible to everyone, the punchline reserved for dark mode. Text is also far more forgiving than photography here, because you control the tone completely, so it's the easiest way to make your first one.
The five mistakes people actually make
- Two mid-tone photos. Neither has anywhere to go. Fix the source images before you touch a slider.
- Leaving saturation up. Colour is the single biggest cause of ghosting between themes. Start at zero and add it back only if you miss it.
- Judging it from the timeline thumbnail.Downscaling averages a 1px mask into flat grey. Open the full-size image before you conclude it's broken.
- Ignoring the file size warning.Crossing X's PNG ceiling doesn't degrade the effect, it deletes it.
- Testing only in your own theme. You are, by definition, seeing half of your own image.
Doing it without this tool
Worth knowing, if only so the tradeoff is clear. The technique is not secret: any image editor that exposes an alpha channel can produce one by hand. Draw in pure white on transparency and you get the simple version — the one that appears in dark mode and vanishes in light — which is what most of the tutorials on X are actually teaching.
Carrying two full imagesis where it gets laborious, because that needs a per-pixel solve for alpha and colour, plus a mask to keep both images at full contrast. That's a script rather than a brush — and it's exactly what the derivation describes, if you'd rather implement it yourself than use this.