invisible-watermark
The library for creating and decoding invisible image watermarks
What it is and what it does
invisible-watermark is a Python library and CLI tool for embedding imperceptible watermarks into images and extracting them later. It implements frequency-domain methods (dwtDct, dwtDctSvd using discrete wavelet and cosine transforms) and a deep-learning approach (RivaGAN) trained on movie clips. The library does not require the original image to decode the watermark, making it useful for copyright protection and content tracking.
The package is explicitly experimental and CPU-only, with the default dwtDct method suitable for real-time embedding but slower variants intended for offline use. The library trades off robustness for speed: it handles JPEG compression, noise, brightness changes, and overlays well, but fails on image resizing and rotation. Known limitations include poor performance on screenshots and uniform-background images, and no guarantee of 100% accurate decoding even without attacks.
Use it for:
- Embed copyright or ownership marks into digital images for content tracking without visible artifacts
- Batch-process image collections to add imperceptible watermarks for rights management
- Extract and verify embedded watermarks from potentially modified images to confirm authenticity
- Test watermark robustness against common image transformations like compression and noise
- Protect video frames or screenshots with watermarks resistant to cropping and masking
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Embeds and decodes invisible watermarks into images using frequency-domain and deep-learning algorithms, with a command-line interface and Python API.
Yes, with conditions. The package solves a real problem (invisible watermarking) with working implementations and low install friction. However, the project is dormant since mid-2023, explicitly experimental, CPU-only, and the authors acknowledge it cannot guarantee 100% accurate decoding. Install if you need frequency-domain watermarking for non-critical applications or research; avoid for production systems requiring active maintenance or GPU acceleration.
Install
invisible-watermark on PyPI
pip
pip install invisible-watermarkuv
uv add invisible-watermarkpoetry
poetry add invisible-watermarkInstalling invisible-watermark
Before you install
Low friction installation with pure Python distribution. Project is dormant since July 2023 with no recent updates; last commit was September 2023. Relies on five runtime dependencies including torch, which adds significant disk and memory overhead.
License in practice
Licensed under MIT (permissive), allowing commercial and private use with minimal restrictions.
Quickstart
pip install invisible-watermark
from invisible_watermark import WatermarkEncoder
encoder = WatermarkEncoder()
encoder.set_watermark('bytes', b'test')
encoded = encoder.encode(image_array, 'dwtDct')
Requires torch and opencv-python; dwtDct method is CPU-only and experimental. RivaGAN method is 10x slower than default on CPU.
Verify before relying
- Whether GPU acceleration has been added since the last release in July 2023
- Current robustness against modern image compression or transformation techniques beyond those documented
- Production-readiness status given the experimental designation and dormant maintenance
- How to properly import and use the library's public API beyond the documented examples
Package facts
| License | not declared (permissive) |
| Python support | supports the current Python release (>=3.6) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 5 — Pillow, PyWavelets, numpy, opencv-python, torch |
| Maintenance | dormant — 1,135 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 237,921/month — #8,951 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: invisible_watermark-0.2.0-py3-none-any.whl
Tags
More Graphics packages
Pillow adds image processing capabilities to…
permissive · top 100 on PyPI
fonttoolsfonttools manipulates font files in multiple…
permissive · top 1,000 on PyPI
matplotlib-inlineEnables matplotlib figures to display inline…
permissive · top 1,000 on PyPI
pymupdfPyMuPDF extracts, renders, converts, and…
agpl · top 1,000 on PyPI
pypdfium2pypdfium2 is a Python binding to PDFium that…
permissive · top 1,000 on PyPI
altairAltair is a declarative Python library for…
permissive · top 1,000 on PyPI
resemble-perthEmbeds imperceptible watermarks into audio…
permissive · top 15,000 on PyPI
watermarkWatermark is an IPython magic extension that…
permissive · top 15,000 on PyPI
pytorch-waveletsProvides 2D discrete wavelet and dual-tree…
unclear · top 15,000 on PyPI
noisereduceReduces noise in audio and time-domain signals…
permissive · top 15,000 on PyPI
transparent-backgroundRemoves backgrounds from images and videos…
permissive · top 15,000 on PyPI
cloudinaryCloudinary Python SDK provides image and video…
permissive · top 5,000 on PyPI
torchcrepePyTorch implementation of the CREPE pitch…
permissive · top 15,000 on PyPI
PyWaveletsPyWavelets provides discrete, continuous, and…
permissive · top 5,000 on PyPI
simplejpegEncodes and decodes JPEG images directly to and…
permissive · top 15,000 on PyPI