Obliterate hidden watermarks from platform screenshots.
Many modern platforms embed user-specific watermarks into app screenshots. These watermarks are invisible to the eye but detectable via equalization or frequency analysis. Some are LSB-based, some render snow-like patterns across RGB channels. Some even survive compression. They are all a form of tracking. And no one should be silently tagged just for sharing a screenshot.
Two-thirds of high-traffic mobile apps in China now tag screenshots; many started in 2022 after Douban & Zhihu incidents. Outside China, it's still niche. Except for DRM-heavy verticals (video streaming, enterprise VDI) where "forensic" marks are universal. While tech diversity is widening, we still see classic LSB and DCT hacks. But 2024-25 papers (ScreenMark, CoreMark) chase camera-shot-robust patterns that sit in mid-frequency bands or irregular point clouds.
- Crop status bar or header manually
- Jitter, blur, and add noise to disrupt invisible alignment
- Median filtering to dissolve patterned bands
- All automated with CLI, batchable
pip install aftermark
nuke myshot.pnggit clone https://github.com/kay-a11y/aftermark.git
cd aftermark
pip install -e ".[dev]"Optional OS tools
sudo apt install -y imagemagick libimage-exiftool-perl- ImageMagick - equalize / compare / attacks
- ExifTool - deep metadata wipe
-
One-off file → result is saved next to your shell's CWD
nuke demo/demo.jpg # ➜ ./demo_clean.jpg -
One-off file with explicit output folder
nuke demo/demo.jpg out/ # ➜ out/demo_clean.jpg -
Batch clean a whole folder
nuke raw_screens/ out/ # ➜ out/<each>_clean.jpg
Arguments:
input:
Path to an image file or a directory of images.
outdir:
Destination folder (created if missing). Optional for single-file mode;
defaults to the current working directory (".").
--crop:
crops a configurable top margin (default=0 px)
--header:
applies a 3*3 median to the first PX pixels (default=32 px)
--quality:
rewrites the image as low-quality JPEG (default=40)
All comparisons below are shown after applying convert -equalize for visibility. See nuke folder for more examples.
| Original (Douban) | Cleaned (aftermark) |
|---|---|
![]() |
![]() |
This was scraped from a third party. The snow-pattern fingerprint of the original user still lingers beneath the surface.
See the full walkthrough.

