Install
openclaw skills install pdf-watermark-removerRemove image-based watermarks from PDF files (e.g. "Made with Gamma", Canva, Notion watermarks). This skill should be used when the user wants to remove watermarks from a PDF, delete PDF watermarks, clean up PDF watermark text or images, or says "去水印", "remove watermark", "去掉水印", "去PDF水印", "delete watermark", "消除水印", "水印去除". Works by deleting drawing instructions from content streams and removing XObject references — no color overlay, no image replacement, clean removal with no visual artifacts.
openclaw skills install pdf-watermark-removerRemove image-based watermarks from PDF files by surgically deleting the drawing instructions from content streams and removing XObject resource references. This produces clean results with no visible artifacts (no white/black rectangles, no color mismatches).
The removal process targets the root cause — the PDF content stream instructions that draw the watermark image — rather than covering or replacing the image:
q...cm.../Name Do...Q drawing instructionThis approach leaves zero visual artifacts because the watermark simply never gets drawn.
Before running the script, determine the watermark's characteristics:
gamma.app)Execute scripts/remove_watermark.py:
python scripts/remove_watermark.py <input.pdf> <output.pdf> [options]
Common options:
| Option | Default | Description |
|---|---|---|
--x-threshold | 700 | X position threshold — images with x0 > this value are candidates |
--min-w / --max-w | 100 / 200 | Width range for watermark detection |
--min-h / --max-h | 20 / 50 | Height range for watermark detection |
--remove-links | off | Also remove link annotations |
--link-domain | all | Only remove links containing this domain |
Gamma watermark example:
python scripts/remove_watermark.py input.pdf output.pdf --remove-links --link-domain gamma.app
Custom position watermark (e.g. top-left):
python scripts/remove_watermark.py input.pdf output.pdf --x-threshold 0 --min-w 50 --max-w 300 --min-h 10 --max-h 80
Open the output PDF and check:
| Problem | Cause | Solution |
|---|---|---|
| Watermark still visible | Position/size doesn't match detection thresholds | Adjust --x-threshold, --min-w/max-w, --min-h/max-h |
Why not overlay/replace? Three approaches that DON'T work well:
delete_image API — Only clears image data, doesn't remove the XObject reference or content stream Do instruction; renders as blank/colored rectangleThe correct approach (used by this skill): Delete the Do instruction from the content stream
and the /Name xref R entry from the XObject dictionary. The watermark image data becomes an
orphaned object that gets garbage-collected on save.
pip install pymupdf)