Compatibility
Where these images work, and where they break
There is one rule underneath every row of this table. A platform keeps the effect only if it preserves the PNG alpha channel and paints a themed background behind it. Fail either half and you get a flat grey rectangle and a confused audience.
The table
| Platform | Effect | Why |
|---|---|---|
| X / Twitter — full-size view | Works | Serves the upload as a PNG with the alpha channel intact, as long as the file stays under roughly 5 MB.Last tested |
| X / Twitter — timeline thumbnail | Degraded | Downscaling averages neighbouring pixels, so a 1px mask blurs toward flat grey. The full-size view is still correct; a larger cell size survives the shrink.Last tested |
| X / Twitter — Dim theme | Breaks | The maths assumes pure white and pure black. Dim is mid-grey, which sits between the two, so both images show through faintly at once and the result reads muddy.Last tested |
| Slack | Works | Preserves PNG alpha and paints a themed background behind it. Note the surfaces are not quite pure white or pure black, so contrast is slightly softer than on X.Last tested |
| Discord | Works | Preserves PNG alpha and composites over the theme background.Last tested |
| iMessage | Works | Preserves PNG alpha. Message bubbles are not pure white or black, so expect the same slight softening as Slack.Last tested |
| Notion | Works | Preserves PNG alpha and has both a light and a dark theme.Last tested |
| Any web browser | Works | Native alpha compositing over whatever background the page sets. This is the reference case the maths is written against.Last tested |
| Breaks | Re-encodes everything to JPEG, and JPEG has no alpha channel at all. There is no setting or file size that avoids this.Last tested |
The three things that kill it
Every failure above is one of these, and knowing which one you've hit tells you whether it's fixable.
01JPEG re-encoding
JPEG has no alpha channel, so a re-encode destroys the effect outright rather than degrading it. This is why Instagram can never work, and why X re-encodes anything much over 5 MB.
02Downscaling
A mask is per-pixel detail, and shrinking an image averages neighbouring pixels together. A 1px checkerboard averages to flat grey. Larger cell sizes survive; the full-size view is always correct.
03Mid-grey themes
The solve assumes a pure white and a pure black background. Anything in between — X's Dim, a grey card, a coloured surface — lands partway through both images at once.
How to test any platform yourself in 30 seconds
Platform encoders change without telling anyone, so the table above is a snapshot rather than a promise. Checking it yourself is quick:
- Make an image whose two halves are unmistakably different — text saying
LIGHTagainst text sayingDARKis ideal. - Post or send it to yourself on the platform in question.
- Open it and switch your device between light and dark mode while watching.
- If both words are faintly visible at once, the background isn't pure white or black. If neither changes, the alpha channel was stripped.
Found something that disagrees with the table? It's more likely the platform changed than that the maths did — the failure modes here are properties of image encoders, not of the technique.