This repository collects and encapsulates a variety of invisible image watermarking methods, including both generation-stage and post-processing watermarking. A unified interface is provided to easily embed and extract watermarks from images, enabling batch experiments, robustness evaluations, and comparative studies.
The currently supported watermarking methods are as follows:
| Name | Type | Conference/Year | Paper |
|---|---|---|---|
| Hidden | Post-generation | ECCV 2018 | HiDDeN: Hiding Data with Deep Networks |
| RivaGAN | Post-generation | ArXiv 2019 | Robust Invisible Video Watermarking with Attention |
| Stable Signature | Post-generation | ICCV 2023 | The Stable Signature Rooting Watermarks in Latent Diffusion Models |
| TreeRing | Noise selection | CVPR 2023 | Tree-Ring Watermarks: Fingerprints for Diffusion Images that are Invisible and Robust |
| EditGuard | Post-generation Edit | CVPR 2024 | EditGuard: Versatile Image Watermarking for Tamper Localization and Copyright Protection |
| PRC Watermark | Noise selection | ICLR 2025 | An Undetectable Watermark for Generative Image Models |
| SleeperMark | Denoising process | CVPR 2025 | SleeperMark: Towards Robust Watermark against Fine-Tuning Text-to-image Diffusion Models |
| dwtDctSvd | Post-generation | \ | \ |
| Stegastamp | Post-generation | CVPR 2020 | Invisible Hyperlinks in Physical Photographs |
| Robust-wide | Post-generation | ECCV 2024 | Invisible Hyperlinks in Physical PhotographsRobust-Wide: Robust Watermarking Against Instruction-Driven Image Editing |
| Smoothed HiDDeN | Post-generation | ECCV 2024 | Certifiably Robust Image Watermark |
Two installation options are provided:
-
Conda environment
conda env create -f environment/environment.yml conda activate imagewatermarker -
Pip installation
pip install -r environment/requirements.txt
Currently, pretrained weights are not hosted in this repository. Later I’ll provide a one-click download script. You can download them directly from the corresponding original repositories.
All method-specific parameters, paths, and hyperparameters can be modified in the configs/ directory.
Example:
# configs/smoothed_hidden.yaml
device: cuda
seed: 4
message_length: 30
options_file: ...
batch_size: 3
checkpoint_path: ...
message: "100100111111110010010000010111"
resize: 512
alpha: 0.001
sigma: 0.1
num_noise: 20
range: 0.4
For example, to run Smoothed HiDDeN:
python -m watermarker.SmoothedHidden
You can directly invoke any method or modify its implementation, using these modules as building blocks for larger systems